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

데이터베이스 연결하기

원문 보기 위키 갱신

데이터베이스 연결하기 (Attach Database, 지원 중단 예정)

여러 데이터베이스를 한 트랜잭션 안에서 엮어 데이터를 읽고 싶다면 ATTACH 문을 사용해요. 다만 이 기능은 신규 사용자에게는 지원 중단(deprecated)되었으니 참고해 주세요.

출처: 문서

본문

이 기능은 모든 신규 사용자에게 지원 중단되었어요. 기존 유료 사용자는 계속 ATTACH를 사용할 수 있어요 — 발표 공지를 읽어 보세요.

ATTACH 문은 여러 데이터베이스를 하나의 트랜잭션 안에서 연결할 수 있게 해 줘요. 이런 경우에 딱이에요:

  • 데이터를 모듈 방식으로 구성하고 싶을 때
  • 데이터 접근을 간소화하고 확장성을 높이고 싶을 때
  • 데이터를 집계하고 싶을 때

동작 방식

  1. 연결하려는 데이터베이스에서 ATTACH 기능을 활성화해요.
  2. ATTACH하려는 데이터베이스의 Database ID를 알아내요.
  3. 데이터베이스에 연결해요
    • CLI: --attach 플래그로 올바른 권한을 가진 토큰을 자동 생성해요.
    • SDK: attach하려는 데이터베이스에 attach 권한이 있는 토큰을 만들어요.
  4. 데이터베이스 셸이나 SDK 안에서 ATTACH를 호출해 다른 데이터베이스에 연결해요.

사용법

ATTACH 문을 사용하면 CLI 또는 libSQL SDK로 트랜잭션 안에서 다른 데이터베이스에 연결할 수 있어요. 연결되고 나면 지정한 별칭(alias)을 사용해 attached 데이터베이스를 현재 데이터베이스의 일부처럼 쿼리할 수 있어요.

Turso CLI

Turso CLI가 설치되어 있고 로그인되어 있는지 확인하세요.

1. 필요한 데이터베이스에서 attach 활성화하기

먼저 attach하려는 데이터베이스에서 ATTACH 기능을 활성화해야 해요:

turso db config attach allow <database-name>

2. Database ID 알아내기

이제 ATTACH하려는 데이터베이스의 Database ID를 알아내야 해요:

turso db show <database-name>

3. attach 플래그로 연결하기

이제 데이터베이스에 연결할 때 --attach 플래그로 데이터베이스 이름을 전달하세요:

turso db shell <database-name> --attach <...database-name(s)>

4. ATTACH 실행

데이터베이스에 연결되고 나면 ATTACH 문으로 다른 데이터베이스를 연결할 수 있어요:

ATTACH "<database-id>" AS my_db;

5. 쿼리

attached 데이터베이스의 별칭으로 쿼리를 실행해 보세요:

SELECT * FROM my_db.my_table;

libSQL SDK

libSQL 클라이언트 SDK를 TypeScript, Rust, Go, Python, 또는 HTTP로 사용할 수 있어요.

1. 필요한 데이터베이스에서 attach 활성화하기

먼저 attach하려는 데이터베이스에서 ATTACH 기능을 활성화해야 해요:

turso db config attach allow <database-name>

2. Database ID 알아내기

이제 ATTACH하려는 데이터베이스의 Database ID를 알아내야 해요:

turso db show <database-name>

3. ATTACH 권한이 있는 토큰 만들기

이제 attach하려는 데이터베이스에 대해 attach 권한이 있는 libSQL 클라이언트용 토큰을 만드세요:

turso db tokens create <database-name> --attach <another-database-name>

4. ATTACH로 연결하기

클라이언트 SDK로 읽기 트랜잭션 안에서 원하는 데이터베이스를 attach하세요:

import { createClient } from "@libsql/client";

const client = createClient({
  syncUrl: "libsql://...",
  authToken: "...",
});

const txn = await db.transaction("read");

await txn.execute('ATTACH "<database-id>" AS my_db');

const rs = await txn.execute("SELECT * FROM my_db.my_table");

알아 두어야 할 것들

  • attach 기능이 활성화된 데이터베이스만 attach할 수 있어요.
  • 같은 그룹(group)에 속한 데이터베이스만 attach할 수 있어요.
  • 하나의 트랜잭션에 attach할 수 있는 데이터베이스는 최대 10개예요.
  • attached 데이터베이스는 읽기 전용이에요.
  • ATTACH 문은 트랜잭션 안에서만 사용할 수 있어요.
  • ATTACH는 임베디드 레플리카를 지원하지 않아요.

더 알아보기 (Learn more)