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

Android 레퍼런스

원문 보기 위키 갱신

libSQL Android 클라이언트의 전체 API를 정리한 레퍼런스예요. 설치부터 인메모리·로컬·임베디드 레플리카 연결, 쿼리와 트랜잭션까지 Android 앱에서 필요한 모든 기능을 담고 있어요.

출처: 문서

본문

이 기능은 기술 프리뷰(technical preview) 상태예요.

참고: 지금은 Android Gradle Plugin에서만 동작해요. 완전한 Kotlin 지원이 곧 제공될 예정이에요.

설치 (Installing)

Gradle에서 libsql을 implementation 의존성으로 추가해요.

dependencies {
    implementation("tech.turso.libsql:libsql:0.1.0")
}

인메모리 데이터베이스

영속성이 필요 없는 경우라면 libSQL의 인메모리 데이터베이스 연결을 활용할 수 있어요.

import tech.turso.libsql.Libsql

val db = Libsql.open(":memory:")
val conn = db.connect()

로컬 개발

SQLite 파일을 사용해 로컬에서 작업할 수 있어요.

import tech.turso.libsql.Libsql

val db = Libsql.open(path = "./local.db")
val conn = db.connect()

임베디드 레플리카

원격 URL에서 동기화하고 쓰기는 원격 primary 데이터베이스에 위임하는 임베디드 레플리카를 사용할 수 있어요.

import tech.turso.libsql.Libsql

val db = Libsql.open(
    path = "./local.db",
    url = "TURSO_DATABASE_URL",
    authToken = "TURSO_AUTH_TOKEN",
)

val conn = db.connect()

수동 동기화 (Manual Sync)

sync 함수를 쓰면 로컬 데이터베이스를 원격 데이터베이스와 직접 동기화할 수 있어요.

db.sync() // Call sync manually to update local database (only for EmbeddedReplicaDatabase)

단순 쿼리 (Simple query)

query()에 문자열과 선택적인 인자를 넘겨 SQL 문을 실행할 수 있어요.

db.connect().use {
    it.execute("INSERT INTO users VALUES (?)", 1)
}
db.connect().use {
    it.query("INSERT INTO users VALUES (?)", 1)
}
db.connect().use {
    it.query("SELECT * FROM users WHERE id = ?", 1)
}

플레이스홀더

libSQL은 SQL 문 안에서 위치 기반(positional)과 이름 기반(named) 플레이스홀더를 모두 지원해요.

db.connect().use {
    it.query("SELECT * FROM users WHERE id = ?", 1)
}
db.connect().use {
    it.query("SELECT * FROM users WHERE id = :id", mapOf(":id" to 1))
}

배치 트랜잭션 (Batch Transactions)

배치는 여러 SQL 문을 묶어서 암시적 트랜잭션 안에서 순차 실행하는 방식이에요. 트랜잭션 처리는 백엔드가 담당해서, 성공하면 모든 변경 사항이 커밋되고 실패하면 전체 롤백되어 아무것도 수정되지 않아요.

db.connect().use {
    it.execute_batch("
      CREATE TABLE IF NOT EXISTS users (
        id INTEGER PRIMARY KEY,
        name TEXT NOT NULL
      );

      INSERT INTO users (name) VALUES ('Alice');
      INSERT INTO users (name) VALUES ('Bob');
    ")
}

트랜잭션 (Transactions)

SQLite의 인터랙티브 트랜잭션은 트랜잭션 범위 안에서 일련의 읽기·쓰기 작업이 일관성을 유지하도록 보장해요. 커밋할지 롤백할지 시점을 직접 제어할 수 있고, 다른 클라이언트 활동으로부터 격리돼요.

db.connect().use {
    val tx = it.transaction();

    tx.execute("INSERT INTO users (name) VALUES (?)", "Iku");
    tx.execute("INSERT INTO users (name) VALUES (?)", "Iku 2");

    tx.commit() // or tx.rollback()
}

더 알아보기 (Learn more)