본문 바로가기
WIKI 기술 지식 베이스

Turso 퀵스타트

원문 보기 위키 갱신

Turso 퀵스타트 (C)

libSQL 클라이언트를 사용해 C에서 Turso를 시작하는 몇 가지 간단한 단계예요. 연결부터 쿼리 실행, 동기화까지 차근차근 따라 해 봐요.

출처: 문서

본문

(기술 프리뷰 배너 스니펫: 이 기능은 기술 프리뷰 단계예요)

이 C 퀵스타트에서 우리는 다음을 배워요:

  • 데이터베이스 자격 증명 가져오기
  • libSQL 패키지 설치
  • 로컬 또는 원격 Turso 데이터베이스에 연결
  • SQL로 쿼리 실행
  • 로컬 데이터베이스로 변경 동기화(선택)

1. 데이터베이스 자격 증명 가져오기

계속 진행하려면 기존 데이터베이스가 필요해요. 아직 없다면 새로 만들어 보세요.

retrieve-database-credentials.mdx 스니펫을 참고해 자격 증명을 확인하세요.

(mobile-secrets-warning 스니펫: 모바일 환경에서는 자격 증명을 앱에 하드코딩하지 마세요)

2. 설치 (Install)

C에서 libSQL을 쓰려면 라이브러리를 소스에서 빌드해야 해요:

  • libSQL C — 소스 코드에서 빌드하세요.

빌드한 다음에는 C 프로그램을 컴파일할 때 라이브러리에 링크하는 걸 잊지 마세요:

gcc -o your_program your_program.c -L/path/to/libsql/lib -llibsql

3. 연결 (Connect)

먼저 libSQL을 초기화하고, libsql_database_t 객체를 만든 다음, libsql_connection_t를 열어야 해요:

Embedded Replicas (임베디드 복제본)

#include "libsql.h"

libsql_setup((libsql_config_t){0});

libsql_database_t db = libsql_database_init((libsql_database_desc_t){
    .path = "local.db",
    .url = "TURSO_DATABASE_URL",
    .auth_token = "TURSO_AUTH_TOKEN",
    .sync_interval = 300
});

libsql_connection_t conn = libsql_database_connect(db);

Local only (로컬 전용)

#include "libsql.h"

libsql_setup((libsql_config_t){0});

libsql_database_t db = libsql_database_init((libsql_database_desc_t){
    .path = "local.db"
});

libsql_connection_t conn = libsql_database_connect(db);

Remote only (원격 전용)

#include "libsql.h"

libsql_setup((libsql_config_t){0});

libsql_database_t db = libsql_database_init((libsql_database_desc_t){
    .url = "TURSO_DATABASE_URL",
    .auth_token = "TURSO_AUTH_TOKEN"
});

libsql_connection_t conn = libsql_database_connect(db);

4. 실행 (Execute)

문(statement)을 준비한 다음 실행하는 방식으로, 기존 데이터베이스에 SQL 쿼리를 실행할 수 있어요:

libsql_statement_t stmt = libsql_connection_prepare(conn, "SELECT * FROM users");
libsql_rows_t rows = libsql_statement_query(stmt);

값에 플레이스홀더를 써야 한다면 이렇게 할 수 있어요:

위치 기반 조회(Positional Query):

libsql_statement_t stmt = libsql_connection_prepare(conn, "SELECT * FROM users WHERE id = ?");
libsql_statement_bind_value(stmt, libsql_integer(1));
libsql_rows_t rows = libsql_statement_query(stmt);

위치 기반 삽입(Positional Insert):

libsql_statement_t stmt = libsql_connection_prepare(conn, "INSERT INTO users (id) VALUES (?)");
libsql_statement_bind_value(stmt, libsql_integer(1));
libsql_execute_t result = libsql_statement_execute(stmt);

5. 동기화 (Sync, 임베디드 복제본 전용)

임베디드 복제본을 사용할 때는 sync_interval을 쓰는 경우가 아니라 로컬 데이터베이스와 기본(primary) 데이터베이스를 맞추도록 libsql_database_sync()를 호출해야 해요(sync_interval이 켜져 있을 때 sync를 호출해도 문제는 없어요):

libsql_sync_t sync = libsql_database_sync(db);
if (sync.err) {
    fprintf(stderr, "Error syncing database: %s\n", libsql_error_message(sync.err));
} else {
    printf("Sync completed. Frame number: %llu, Frames synced: %llu\n",
            (unsigned long long)sync.frame_no,
            (unsigned long long)sync.frames_synced);
}

더 알아보기 (Learn more)