이 책에서는 다음과 같은 기술 스택을 사용하여 생명정보학 웹 도구를 개발한다.
| 기술 | 역할 | 설명 |
|---|---|---|
| SvelteKit | 프론트엔드 프레임워크 | 빠르고 가벼운 웹 앱 개발 프레임워크 |
| Tailwind CSS | CSS 프레임워크 | 유틸리티 클래스 기반의 스타일링 도구 |
| PostgreSQL | 데이터베이스 | 오픈소스 관계형 데이터베이스 |
| Docker | 컨테이너 | 개발 환경 통합 관리 |
SvelteKit은 Svelte를 기반으로 한 풀스택 웹 프레임워크이다. React, Vue 등 다른 프레임워크와 비교했을 때 다음과 같은 장점이 있다:

Tailwind CSS는 유틸리티 클래스 기반의 CSS 프레임워크이다. 별도의 CSS 파일을 작성하지 않고, HTML 요소에 직접 클래스를 적용하여 스타일링한다.
<!-- 전통적인 CSS 방식 -->
<div class="card">제목</div>
<!-- Tailwind CSS 방식 -->
<div class="bg-white rounded-lg shadow-md p-6">제목</div>
AI 에이전트와 함께 사용하기에 특히 적합한데, 스타일이 HTML과 같은 파일에 있어 컨텍스트를 파악하기 쉽기 때문이다.

PostgreSQL은 세계에서 가장 많이 사용되는 오픈소스 관계형 데이터베이스이다. 사용자 데이터, 분석 결과 등을 저장하고 조회하는 데 사용한다. 이 책에서는 Docker를 통해 PostgreSQL을 실행한다.
SvelteKit을 사용하려면 Node.js가 필요하다. 다음 웹사이트에서 설치한다:
https://nodejs.org/en/download
설치 시 nvm(Node Version Manager)과 pnpm(패키지 매니저)을 선택한 후 터미널에 표시되는 명령을 입력한다.

설치 확인:
node --version
pnpm --version
터미널에서 다음 명령을 실행하여 SvelteKit 프로젝트를 생성한다:
pnpm create svelte@latest my-bioinfo-app
cd my-bioinfo-app
pnpm install
프로젝트 생성 시 다음 옵션을 선택한다:
참고: 프로젝트 초기 생성은 AI 에이전트에 맡기기보다 직접 수행하는 것이 좋다. AI는 초기화 명령을 사용하기보다 기존 코드를 직접 작성하려는 경향이 있어, 최신 버전이 아닌 코드를 생성할 수 있다.
Tailwind CSS는 SvelteKit 프로젝트 생성 시 옵션으로 함께 설치할 수 있다. 별도로 수동 설치할 필요 없이, 프로젝트 초기화 과정에서 Tailwind CSS를 선택하면 자동으로 설정된다.
프로젝트 루트에 compose.yml 파일을 생성한다. 이 파일은 SvelteKit 개발 서버와 PostgreSQL 데이터베이스를 함께 관리한다.
services:
app:
build: .
ports:
- "5173:5173"
volumes:
- .:/app
- /app/node_modules
environment:
- DATABASE_URL=postgresql://postgres:postgres@db:5432/bioinfo
depends_on:
- db
db:
image: postgres:16-alpine
ports:
- "5432:5432"
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: bioinfo
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
프로젝트 루트에 Dockerfile을 생성한다:
FROM node:20-alpine
WORKDIR /app
# pnpm 설치
RUN corepack enable && corepack prepare pnpm@latest --activate
# 의존성 설치
COPY package.json pnpm-lock.yaml ./
RUN pnpm install
# 소스 코드 복사
COPY . .
# 개발 서버 실행
CMD ["pnpm", "dev", "--host"]
프로젝트에서 데이터베이스 접속 정보, API 키 등 민감한 설정값은 환경 변수로 관리한다. 프로젝트 루트에 .env 파일을 생성한다:
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/bioinfo
PUBLIC_SITE_NAME=My Bioinfo App
SvelteKit에서 환경 변수는 두 가지로 나뉜다:
| 접두사 | 접근 범위 | 용도 |
|---|---|---|
PUBLIC_ |
서버 + 클라이언트 | 사이트 이름 등 공개 정보 |
| (없음) | 서버만 | 데이터베이스 비밀번호, API 키 등 민감 정보 |
주의:
.env파일은.gitignore에 반드시 추가하여 Git에 커밋되지 않도록 한다. 대신.env.example파일을 만들어 어떤 환경 변수가 필요한지 안내한다.
# .gitignore에 추가
echo ".env" >> .gitignore
최종적으로 프로젝트 디렉토리는 다음과 같은 구조를 가진다:
my-bioinfo-app/
├── compose.yml # Docker 서비스 정의
├── Dockerfile # Docker 이미지 정의
├── .env # 환경 변수 (Git에 포함하지 않음)
├── .env.example # 환경 변수 템플릿
├── .gitignore
├── package.json
├── pnpm-lock.yaml
├── svelte.config.js # SvelteKit 설정
├── vite.config.ts # Vite 빌드 도구 설정
├── tailwind.config.ts # Tailwind CSS 설정
├── CLAUDE.md # AI 에이전트 참조용 프로젝트 명세
├── README.md
├── src/
│ ├── app.css # 글로벌 스타일 (Tailwind 임포트)
│ ├── app.html # HTML 템플릿
│ ├── lib/ # 공유 라이브러리
│ │ ├── components/ # 재사용 가능한 컴포넌트
│ │ └── server/ # 서버 전용 코드 (DB 연결 등)
│ └── routes/ # 페이지 라우트
│ ├── +layout.svelte # 공통 레이아웃
│ ├── +page.svelte # 랜딩 페이지
│ └── tools/
│ └── +page.svelte # 도구 페이지
└── static/ # 정적 파일 (이미지, 폰트 등)
CLAUDE.md는 AI 에이전트가 참조하는 프로젝트 명세 파일이다. Claude Code는 작업을 시작할 때 이 파일을 가장 먼저 읽고, 프로젝트의 구조와 규칙을 파악한다.
핵심 원칙: CLAUDE.md에 정보를 많이 넣을수록 AI는 더 똑똑해진다.
AI 코딩 에이전트는 사람과 달리 프로젝트의 맥락을 스스로 알지 못한다. “Navbar에 로고를 추가해줘”라고 요청했을 때, AI가 올바른 위치에 올바른 방식으로 코드를 작성하려면 다음을 알아야 한다:
이러한 정보가 CLAUDE.md에 없으면 AI는 매번 프로젝트 구조를 탐색하고 추측해야 한다. 반면, 이 정보가 잘 정리되어 있으면 AI는 곧바로 정확한 코드를 작성할 수 있다.
바이브 코딩은 “AI가 다 해주니까 개발을 몰라도 된다”는 뜻이 아니다. 오히려 그 반대이다. CLAUDE.md를 잘 작성하려면 사람이 먼저 프로젝트를 이해하고 있어야 한다.
예를 들어 이런 CLAUDE.md를 작성한다고 하자:
# 프로젝트 개요
생명정보학 웹 도구 모음 사이트
# 기술 스택
- SvelteKit (프론트엔드 + 서버)
- Tailwind CSS (스타일링)
- PostgreSQL (데이터베이스)
# 디렉토리 구조
- src/routes/ : 페이지 라우트 (파일 기반 라우팅)
- src/lib/components/ : 재사용 가능한 UI 컴포넌트
- src/lib/server/ : 서버 전용 코드 (DB 연결 등)
# 코딩 컨벤션
- 컴포넌트 파일명은 PascalCase (예: NavBar.svelte)
- 서버 API는 +server.ts 파일에 작성
- 환경 변수는 $env/static/private 또는 $env/static/public 사용
# 디자인 가이드라인
- 색상: blue-600을 primary color로 사용
- 레이아웃: 최대 너비 max-w-7xl, 중앙 정렬
- 반응형: mobile-first 접근
이 파일을 작성하려면 SvelteKit의 파일 기반 라우팅이 무엇인지, Tailwind의 유틸리티 클래스가 어떻게 동작하는지, 컴포넌트와 레이아웃의 개념이 무엇인지 알아야 한다. 이 책에서 배우는 웹 개발 배경지식이 바로 이를 위한 것이다.
핵심: 바이브 코딩에서 사람의 역할은 코드를 직접 작성하는 것이 아니라, AI가 올바른 코드를 작성할 수 있도록 정확한 지시를 내리는 것이다. 정확한 지시를 내리려면 기본적인 개발 개념을 이해하고 있어야 한다.
| 항목 | 설명 | 예시 |
|---|---|---|
| 프로젝트 개요 | 프로젝트의 목적과 대상 사용자 | “생명정보학 연구자를 위한 웹 기반 시퀀스 분석 도구” |
| 기술 스택 | 사용하는 프레임워크, 라이브러리 | “SvelteKit, Tailwind CSS, PostgreSQL” |
| 디렉토리 구조 | 주요 폴더의 역할 | “src/routes/는 페이지, src/lib/은 공유 코드” |
| 코딩 컨벤션 | 파일명 규칙, 코드 스타일 | “컴포넌트는 PascalCase, 변수는 camelCase” |
| 디자인 가이드라인 | 색상, 폰트, 레이아웃 규칙 | “primary color는 blue-600, 최대 너비 max-w-7xl” |
| 비즈니스 로직 | 도메인 특화 규칙 | “FASTA 형식은 >로 시작하는 헤더 + 시퀀스” |
팁: CLAUDE.md는 한 번 작성하고 끝이 아니다. 프로젝트가 발전할수록 새로운 규칙과 패턴을 추가하여 AI 에이전트가 항상 최신 상태를 파악할 수 있도록 유지한다.
docker compose up
브라우저에서 http://localhost:5173으로 접속하면 SvelteKit 앱을 확인할 수 있다.
pnpm dev

.gitignore에 반드시 추가