Turso & Astro
Turso는 SQLite의 포크인 libSQL을 기반으로 구축된 분산 데이터베이스입니다. 낮은 쿼리 대기 시간에 최적화되어 글로벌 애플리케이션에 적합합니다.
Astro에서 Turso 초기화
전제조건
환경 변수 구성
다음 명령을 사용하여 데이터베이스 URL을 얻으세요.
turso db show <database-name> --url데이터베이스에 대한 인증 토큰을 만듭니다.
turso db tokens create <database-name>위 두 명령의 출력을 프로젝트 루트의 .env 파일에 추가하세요. 이 파일이 존재하지 않으면 파일을 만드세요.
TURSO_DATABASE_URL=libsql://...
TURSO_AUTH_TOKEN=:::caution이러한 비공개 환경 변수를 생성할 때 PUBLIC_ 접두사를 사용하지 마세요. 그러면 클라이언트에 이러한 값이 노출됩니다.:::
LibSQL 클라이언트 설치
Turso를 Astro에 연결하려면 @libsql/client를 설치하세요.
npm install @libsql/client
pnpm add @libsql/client
yarn add @libsql/client
새 클라이언트 초기화
src 폴더에 turso.ts 파일을 생성하고 createClient를 호출하여 TURSO_DATABASE_URL 및 TURSO_AUTH_TOKEN을 전달합니다.
import { createClient } from "@libsql/client/web";
export const turso = createClient({
url: import.meta.env.TURSO_DATABASE_URL,
authToken: import.meta.env.TURSO_AUTH_TOKEN,
});데이터베이스 쿼리
데이터베이스의 정보에 액세스하려면 turso를 가져오고 .astro 컴포넌트에서 SQL 쿼리를 실행하세요.
다음 예시는 테이블에서 모든 posts를 가져온 다음 <BlogIndex /> 컴포넌트에 제목 목록을 표시합니다.
---
import { turso } from '../turso'
const { rows } = await turso.execute('SELECT * FROM posts')
---
<ul>
{rows.map((post) => (
<li>{post.title}</li>
))}
</ul>SQL Placeholders
execute() 메서드는 객체를 사용하여 slug 또는 페이지네이션과 같은 변수를 SQL 문에 전달할 수 있습니다.
다음 예시는 WHERE를 사용하여 Astro.params에서 검색된 값이 slug인 posts 테이블의 항목을 가져온 다음 게시물의 제목을 표시합니다.
---
import { turso } from '../turso'
const { slug } = Astro.params
const { rows } = await turso.execute({
sql: 'SELECT * FROM posts WHERE slug = ?',
args: [slug!]
})
---
<h1>{rows[0].title}</h1>