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)
- Kotlin/Android 퀵스타트 — 설치부터 첫 쿼리까지 빠르게 따라 하기
- 임베디드 레플리카 — 로컬 replica 동기화 개념 이해하기
- 빠른 시작 — 첫 Turso 데이터베이스 만들기
- libSQL 암호화 — 저장 시 암호화 옵션 살펴보기