컨텐츠로 이동

Turso & Astro

Turso는 SQLite의 포크인 libSQL을 기반으로 구축된 분산 데이터베이스입니다. 낮은 쿼리 대기 시간에 최적화되어 글로벌 애플리케이션에 적합합니다.

  • Turso CLI 설치 및 로그인
  • 스키마가 포함된 Turso 데이터베이스
  • 귀하의 데이터베이스 URL
  • 액세스 토큰

다음 명령을 사용하여 데이터베이스 URL을 얻으세요.

Terminal window
turso db show <database-name> --url

데이터베이스에 대한 인증 토큰을 만듭니다.

Terminal window
turso db tokens create <database-name>

위 두 명령의 출력을 프로젝트 루트의 .env 파일에 추가하세요. 이 파일이 존재하지 않으면 파일을 만드세요.

.env
TURSO_DATABASE_URL=libsql://...
TURSO_AUTH_TOKEN=

Turso를 Astro에 연결하려면 @libsql/client를 설치하세요.

Terminal window
npm install @libsql/client

src 폴더에 turso.ts 파일을 생성하고 createClient를 호출하여 TURSO_DATABASE_URLTURSO_AUTH_TOKEN을 전달합니다.

src/turso.ts
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 /> 컴포넌트에 제목 목록을 표시합니다.

src/components/BlogIndex.astro
---
import { turso } from '../../turso'
const { rows } = await turso.execute('SELECT * FROM posts')
---
<ul>
{rows.map((post) => (
<li>{post.title}</li>
))}
</ul>

execute() 메서드는 객체를 사용하여 slug 또는 페이지네이션과 같은 변수를 SQL 문에 전달할 수 있습니다.

다음 예시는 WHERE를 사용하여 Astro.params에서 검색된 값이 slugposts 테이블의 항목을 가져온 다음 게시물의 제목을 표시합니다.

src/pages/index.astro
---
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>

더 많은 백엔드 서비스 안내서