이 사이트의 기술 스택

Astro, Cloudflare, Drizzle ORM을 선택한 이유와 각각이 어떻게 조합되는지.

astrocloudflaremeta

개요

이 사이트는 미니멀한 스택으로 구성되어 있습니다.

  • Astro — 정적 우선 프레임워크. 필요한 곳에서만 SSR
  • Cloudflare Pages + Workers — 호스팅과 엣지 컴퓨팅
  • Cloudflare D1 — 엣지에서 동작하는 SQLite 데이터베이스
  • Drizzle ORM — 타입 안전한 데이터베이스 접근
  • TypeScript — 전체에 걸쳐 사용

컴포넌트 프레임워크 없음. CSS 도구 체인 없음. Astro 컴포넌트, CSS 커스텀 프로퍼티, Markdown 콘텐츠만으로 구성했습니다.

왜 Astro인가

이 사이트의 대부분의 페이지는 정적입니다. notes도 playground도 인덱스 페이지도 JavaScript나 서버 사이드 렌더링이 필요 없습니다. Astro의 기본 동작인 “클라이언트에 JS를 보내지 않는다”는 방침이 딱 맞았습니다.

서버가 필요한 부분(API 엔드포인트, 동적 라우트)에는 라우트별로 SSR을 옵트인할 수 있습니다. 하나의 설정, 하나의 프레임워크로 두 가지 모드에 대응할 수 있습니다.

Content Collections는 타입이 지정된 프론트매터로 Markdown을 다룰 수 있어 CMS 없이도 콘텐츠를 구조화할 수 있습니다.

왜 Cloudflare인가

Cloudflare Pages는 정적 에셋을 글로벌 CDN에 배포합니다. Workers는 엣지에서 서버 사이드 라우트를 처리합니다. D1은 인프라 관리 없이 SQLite 데이터베이스를 제공합니다.

무료 티어로 개인 사이트에 필요한 모든 것을 커버할 수 있습니다. Pages, Workers, D1의 통합도 매끄러워서 글루 코드나 별도의 배포 단계가 필요 없습니다.

왜 Drizzle인가

D1은 SQLite입니다. Drizzle은 SQLite를 네이티브로 지원하며, 스키마 정의에서 완전한 TypeScript 타입 추론을 제공합니다. 스키마가 유일한 진실의 원천이 되어 별도의 타입 파일이나 런타임 검증 레이어가 필요 없습니다.

이 사이트 규모에서는 과한 것처럼 보일 수 있지만, 처음부터 타입이 지정된 쿼리가 있으면 데이터 형태에 대해 고민할 필요가 없어집니다.

브랜치와 배포

리포지토리는 두 개의 브랜치를 사용합니다.

  • develop — 일상적인 작업용 기본 브랜치
  • main — 프로덕션용. main에 머지하면 Cloudflare Pages 배포가 실행됨

작업 중인 것은 develop에 두면서 배포된 사이트를 안정적으로 유지하는 구성입니다.

앞으로

사이트에는 현재 notes와 play 두 섹션이 있습니다. 둘 다 시간을 들여 충실하게 만들어 갈 예정입니다. 콘텐츠는 영어, 일본어, 한국어로 필요에 따라 추가합니다. 스택을 의도적으로 심플하게 유지해서 콘텐츠 추가만이 병목이 되도록 했습니다.

← Back to Notes