본문으로 건너뛰기
Kreath Archive
TechProjectsBooksAbout
TechProjectsBooksAbout

내비게이션

  • Tech
  • Projects
  • Books
  • About
  • Tags

카테고리

  • AI / ML
  • 웹 개발
  • 프로그래밍
  • 개발 도구

연결

  • GitHub
  • Email
  • RSS
© 2026 Kreath Archive. All rights reserved.Built with Next.js + MDX
홈TechProjectsBooksAbout
//
  1. 홈
  2. 테크
  3. 10장: 실전 프로젝트 - 처음부터 끝까지 Claude Code로 개발하기
2026년 3월 5일·개발 도구·

10장: 실전 프로젝트 - 처음부터 끝까지 Claude Code로 개발하기

REST API 서버 프로젝트를 Claude Code만으로 처음부터 끝까지 개발하며, 앞서 배운 모든 기능을 실전에 적용합니다.

15분421자10개 섹션
ai-agentanthropicmcpautomationdevtools
공유
claude-code-guide10 / 10
12345678910
이전9장: Git 워크플로우와 CI/CD 통합

프로젝트 소개

이 장에서는 북마크 관리 API 서버를 Claude Code만으로 개발합니다. 프로젝트 초기 설정부터 CI/CD 구성까지 전 과정을 다루며, 앞선 9개 장에서 배운 CLAUDE.md, 훅, 스킬, MCP, Git 워크플로우를 실전에 적용합니다.

기술 스택

  • Runtime: Node.js 20 + TypeScript
  • Framework: Fastify 5
  • Database: SQLite (better-sqlite3) + Drizzle ORM
  • Validation: Zod
  • Test: Vitest
  • CI: GitHub Actions

최종 결과물

  • CRUD API (북마크 생성/조회/수정/삭제)
  • 태그 기반 필터링
  • 전문 검색
  • 인증 (JWT)
  • 자동화된 테스트와 CI

1단계: 프로젝트 초기화

CLAUDE.md 먼저 작성

프로젝트를 시작하기 전에 CLAUDE.md부터 작성합니다. 3장에서 배운 원칙을 적용합니다.

프로젝트 디렉토리를 만들고 CLAUDE.md를 먼저 작성해 줘.

프로젝트명: bookmark-api
기술 스택: Fastify 5, TypeScript strict, Drizzle ORM + SQLite, Zod, Vitest
패키지 매니저: pnpm

CLAUDE.md에 포함할 내용:
- 기술 스택 요약
- 디렉토리 구조 (src/routes, src/services, src/db, src/middleware)
- 개발 명령어
- 코딩 컨벤션 (에러 처리 패턴, 로깅 규칙, 네이밍 규칙)
- 커밋 규칙

Claude Code가 생성하는 CLAUDE.md의 예시는 다음과 같습니다.

CLAUDE.md
markdown
# bookmark-api
 
북마크 관리 REST API 서버
 
## 기술 스택
- **Runtime**: Node.js 20, TypeScript strict
- **Framework**: Fastify 5
- **DB**: SQLite + Drizzle ORM
- **Validation**: Zod
- **Test**: Vitest
 
## 구조
 
src/
  routes/        # API 라우트 핸들러
  services/      # 비즈니스 로직
  db/            # 스키마, 마이그레이션, 연결
  middleware/    # 인증, 에러 처리
  types/         # 공유 타입
  utils/         # 유틸리티 함수
 
## 개발 명령어
 
pnpm dev        # 개발 서버 (watch)
pnpm build      # 빌드
pnpm test       # 테스트
pnpm lint       # 린트
pnpm db:push    # 스키마 반영
 
## 컨벤션
- 모든 라우트에 Zod 스키마 유효성 검사
- 에러: AppError 클래스 사용, HTTP 상태 코드 명시
- 로깅: Fastify 내장 logger 사용 (console.log 금지)
- 네이밍: camelCase (변수/함수), PascalCase (타입/인터페이스)
- 응답 형식: { data, error, meta }
- 커밋: Conventional Commits, 한글

프로젝트 스캐폴딩

CLAUDE.md의 기술 스택에 맞게 프로젝트를 초기화해 줘.
- pnpm init
- TypeScript, ESLint, Prettier 설정
- Fastify, Drizzle ORM, Zod 설치
- tsconfig.json (strict: true)
- src/ 디렉토리 구조 생성
- 기본 서버 진입점 (src/index.ts)

훅 설정

5장에서 배운 훅을 프로젝트에 적용합니다.

.claude/settings.json에 다음 훅을 설정해 줘:
- PostToolUse: TypeScript 파일 수정 시 ESLint 자동 실행
- Stop: 응답 완료 시 타입 검사 실행
- PreToolUse: DROP TABLE, DELETE FROM 등 위험 쿼리 차단

2단계: 데이터베이스 설계

스키마 정의

Drizzle ORM으로 다음 테이블을 src/db/schema.ts에 정의해 줘:

bookmarks:
- id (integer, primary key, auto increment)
- url (text, not null, unique)
- title (text, not null)
- description (text, nullable)
- userId (integer, foreign key)
- createdAt (integer, unix timestamp)
- updatedAt (integer, unix timestamp)

tags:
- id (integer, primary key, auto increment)
- name (text, not null, unique)

bookmarkTags (다대다 관계):
- bookmarkId (integer, foreign key)
- tagId (integer, foreign key)
- primary key (bookmarkId, tagId)

users:
- id (integer, primary key, auto increment)
- email (text, not null, unique)
- passwordHash (text, not null)
- createdAt (integer, unix timestamp)

DB 연결 설정

src/db/connection.ts에 SQLite 연결을 설정하고,
src/db/index.ts에서 Drizzle 인스턴스를 내보내 줘.
개발 환경에서는 ./data/dev.db 파일을 사용해 줘.

3단계: API 구현

서비스 레이어 먼저

비즈니스 로직을 서비스 레이어에 먼저 구현합니다.

다음 서비스를 구현해 줘:

src/services/bookmark.service.ts:
- create(userId, data): 북마크 생성 (태그 포함)
- findById(id): ID로 조회
- findByUser(userId, options): 사용자별 목록 (페이지네이션, 태그 필터)
- update(id, userId, data): 수정 (소유자 확인)
- delete(id, userId): 삭제 (소유자 확인)
- search(userId, query): 전문 검색

src/services/auth.service.ts:
- register(email, password): 회원가입
- login(email, password): 로그인 (JWT 반환)
- verifyToken(token): 토큰 검증

모든 서비스 함수는 에러 시 AppError를 throw해 줘.

라우트 핸들러

서비스 레이어를 사용하는 Fastify 라우트를 구현해 줘:

src/routes/bookmarks.ts:
- GET /bookmarks - 목록 조회 (쿼리: page, limit, tag)
- GET /bookmarks/:id - 상세 조회
- POST /bookmarks - 생성
- PUT /bookmarks/:id - 수정
- DELETE /bookmarks/:id - 삭제
- GET /bookmarks/search?q= - 검색

src/routes/auth.ts:
- POST /auth/register - 회원가입
- POST /auth/login - 로그인

모든 라우트에 Zod 스키마 유효성 검사를 적용해 줘.
인증이 필요한 라우트는 JWT 미들웨어를 거치도록 해 줘.
Tip

큰 구현을 한 번에 요청하기보다, 서비스 레이어와 라우트를 분리하여 순차적으로 구현하면 각 단계에서 결과를 확인하고 방향을 조정할 수 있습니다.

4단계: 테스트 작성

단위 테스트

서비스 레이어의 단위 테스트를 작성해 줘.

src/services/__tests__/bookmark.service.test.ts:
- 북마크 CRUD 정상 동작
- 다른 사용자의 북마크 수정/삭제 시 에러
- 존재하지 않는 북마크 조회 시 에러
- 태그 필터링 동작
- 페이지네이션 동작
- 검색 동작

src/services/__tests__/auth.service.test.ts:
- 정상 회원가입
- 중복 이메일 가입 시 에러
- 정상 로그인
- 잘못된 비밀번호 시 에러
- JWT 생성 및 검증

테스트용 SQLite DB는 인메모리(:memory:)를 사용해 줘.

통합 테스트

API 엔드포인트의 통합 테스트를 작성해 줘.

src/routes/__tests__/bookmarks.test.ts:
- Fastify inject를 사용해서 HTTP 요청을 시뮬레이션
- 인증된 요청과 인증되지 않은 요청 모두 테스트
- 정상 응답 형식 확인
- 에러 응답 형식 확인

모든 테스트가 통과하는지 pnpm test로 확인해 줘.

5단계: 스킬 제작

6장에서 배운 스킬을 이 프로젝트에 맞게 제작합니다.

다음 프로젝트 전용 스킬을 만들어 줘:

.claude/skills/add-endpoint/SKILL.md:
- 새 API 엔드포인트를 추가하는 스킬
- 라우트, 서비스, 타입, 테스트를 한 번에 생성
- 기존 패턴을 참고하여 일관된 코드 생성

.claude/skills/db-migrate/SKILL.md:
- 스키마 변경 후 마이그레이션을 생성하고 적용하는 스킬
- 변경 전후 스키마 비교
- 마이그레이션 파일 생성

6단계: CI/CD 구성

9장에서 배운 CI/CD 통합을 적용합니다.

GitHub Actions CI를 구성해 줘.

.github/workflows/ci.yml:
- PR과 main 브랜치 push에 트리거
- Node.js 20 설정
- pnpm 의존성 설치 (캐시 활용)
- 린트 실행
- 타입 검사
- 테스트 실행
- 빌드 확인

.github/workflows/claude-review.yml:
- PR 생성/업데이트 시 Claude Code 자동 리뷰

7단계: 최종 검증

모든 구현이 완료되면 전체적인 검증을 수행합니다.

프로젝트 전체를 검증해 줘:

1. pnpm lint -- 린트 에러 없는지 확인
2. npx tsc --noEmit -- 타입 에러 없는지 확인  
3. pnpm test -- 모든 테스트 통과하는지 확인
4. pnpm build -- 빌드 성공하는지 확인
5. 개발 서버를 실행하고 주요 엔드포인트 수동 테스트

문제가 있으면 수정해 줘.

프로젝트에서 배운 것

이 실전 프로젝트를 통해 확인한 Claude Code 활용의 핵심 교훈을 정리합니다.

CLAUDE.md는 투자 대비 효과가 가장 높다

프로젝트 초반에 CLAUDE.md를 작성하는 데 투자한 시간이 이후 모든 세션에서 회수됩니다. Claude가 프로젝트 컨벤션을 즉시 이해하므로 매번 같은 설명을 반복할 필요가 없습니다.

단계별 진행이 일괄 요청보다 낫다

"API 서버 전체를 만들어 줘"보다 "스키마 먼저 만들어 줘" -> "서비스 레이어를 구현해 줘" -> "라우트를 추가해 줘"가 결과의 품질이 높습니다. 각 단계에서 검증하고 방향을 조정할 수 있기 때문입니다.

훅은 일관성의 보증수표

린트와 타입 검사를 훅으로 설정하면, Claude가 어떤 코드를 작성하든 자동으로 품질이 검증됩니다. 사람이 수동으로 검사하는 것보다 누락이 없습니다.

스킬은 팀의 자산

프로젝트에 맞는 스킬을 만들어 Git에 포함하면, 팀원 누구나 동일한 워크플로우로 작업할 수 있습니다. 새 엔드포인트 추가, 마이그레이션 처리 같은 반복 작업이 명령어 하나로 일관되게 처리됩니다.

테스트를 먼저 요청하면 구현 품질이 올라간다

서비스 로직을 구현한 후 테스트를 추가하는 것보다, 테스트 요구사항을 먼저 정의하고 구현을 진행하면 더 견고한 코드가 나옵니다.

시리즈 마무리

10개 장에 걸쳐 Claude Code의 기초부터 실전 활용까지 다루었습니다. 전체 내용을 되짚어 보겠습니다.

장핵심 내용
1장Claude Code의 정의와 에이전틱 코딩 개념
2장설치, 인증, 기본 설정
3장CLAUDE.md로 프로젝트 컨텍스트 설계
4장코드 작성, 리뷰, 리팩터링 워크플로우
5장훅으로 자동화 파이프라인 구축
6장커스텀 슬래시 명령어와 스킬 제작
7장MCP 서버로 외부 도구 통합
8장서브에이전트와 에이전트 팀
9장Git 워크플로우와 CI/CD 통합
10장실전 프로젝트 적용

Claude Code는 도구입니다. 도구의 가치는 사용하는 사람의 숙련도에 따라 달라집니다. 이 시리즈에서 다룬 개념과 패턴을 실제 프로젝트에 적용하면서, 각자의 워크플로우에 맞는 최적의 활용법을 찾아가시기 바랍니다.

이 글이 도움이 되셨나요?

관련 주제 더 보기

#ai-agent#anthropic#mcp#automation#devtools

관련 글

개발 도구

9장: Git 워크플로우와 CI/CD 통합

Claude Code를 Git 워크플로우에 통합하고, CI/CD 파이프라인에서 자동화된 코드 리뷰와 수정을 구성하는 방법을 다룹니다.

2026년 3월 3일·14분
개발 도구

8장: 서브에이전트와 에이전트 팀 활용하기

Claude Code의 서브에이전트와 에이전트 팀 기능을 이해하고, 복잡한 작업을 병렬로 분할 처리하는 방법을 다룹니다.

2026년 3월 1일·16분
개발 도구

7장: MCP 서버 연동으로 외부 도구 통합하기

Model Context Protocol의 개념을 이해하고, Claude Code에 MCP 서버를 연결하여 데이터베이스, API, 외부 서비스를 통합하는 방법을 다룹니다.

2026년 2월 27일·13분
이전 글9장: Git 워크플로우와 CI/CD 통합

댓글

목차

약 15분 남음
  • 프로젝트 소개
    • 기술 스택
    • 최종 결과물
  • 1단계: 프로젝트 초기화
    • CLAUDE.md 먼저 작성
    • 프로젝트 스캐폴딩
    • 훅 설정
  • 2단계: 데이터베이스 설계
    • 스키마 정의
    • DB 연결 설정
  • 3단계: API 구현
    • 서비스 레이어 먼저
    • 라우트 핸들러
  • 4단계: 테스트 작성
    • 단위 테스트
    • 통합 테스트
  • 5단계: 스킬 제작
  • 6단계: CI/CD 구성
  • 7단계: 최종 검증
  • 프로젝트에서 배운 것
    • CLAUDE.md는 투자 대비 효과가 가장 높다
    • 단계별 진행이 일괄 요청보다 낫다
    • 훅은 일관성의 보증수표
    • 스킬은 팀의 자산
    • 테스트를 먼저 요청하면 구현 품질이 올라간다
  • 시리즈 마무리