{"id":50577276,"url":"https://github.com/ssi02014/nestjs-cookbook","last_synced_at":"2026-06-04T23:01:58.215Z","repository":{"id":350212126,"uuid":"1205671496","full_name":"ssi02014/nestjs-cookbook","owner":"ssi02014","description":"챕터 별로 학습하는 NestJS 📖","archived":false,"fork":false,"pushed_at":"2026-04-30T09:16:32.000Z","size":3180,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-30T09:20:40.930Z","etag":null,"topics":["ai","backend","claude","claude-code","cookbook","javascript","nest","nestjs","nodejs","study","typeorm","typescript"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ssi02014.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-09T07:13:07.000Z","updated_at":"2026-04-30T09:15:21.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ssi02014/nestjs-cookbook","commit_stats":null,"previous_names":["ssi02014/nest-study"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ssi02014/nestjs-cookbook","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ssi02014%2Fnestjs-cookbook","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ssi02014%2Fnestjs-cookbook/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ssi02014%2Fnestjs-cookbook/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ssi02014%2Fnestjs-cookbook/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ssi02014","download_url":"https://codeload.github.com/ssi02014/nestjs-cookbook/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ssi02014%2Fnestjs-cookbook/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33923188,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-04T02:00:06.755Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","backend","claude","claude-code","cookbook","javascript","nest","nestjs","nodejs","study","typeorm","typescript"],"created_at":"2026-06-04T23:01:57.547Z","updated_at":"2026-06-04T23:01:58.199Z","avatar_url":"https://github.com/ssi02014.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!--배너--\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://capsule-render.vercel.app/api?type=waving\u0026color=E0234E\u0026height=200\u0026section=header\u0026text=NestJS%20Cookbook\u0026fontSize=60\u0026fontColor=ffffff\u0026fontAlignY=38\u0026desc=무료로%20배우는%20NestJS%20학습%20저장소\u0026descAlignY=58\u0026descSize=20\" width=\"100%\" /\u003e\n\u003c/div\u003e\n\n\u003cbr/\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"http://nestjs.com/\" target=\"blank\"\u003e\n    \u003cimg src=\"https://nestjs.com/img/logo-small.svg\" width=\"80\" alt=\"Nest Logo\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cbr/\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://img.shields.io/badge/NestJS-v10-E0234E?logo=nestjs\" alt=\"NestJS\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/TypeScript-5.x-3178C6?logo=typescript\" alt=\"TypeScript\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/Generated%20by-Claude%20Code-7C3AED\" alt=\"Claude Code\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/License-MIT-green\" alt=\"License\" /\u003e\n\u003c/p\u003e\n\n---\n\n## 이 저장소는?\n\nNestJS를 **처음 배우는 초보자**를 위한 단계별 학습 로드맵입니다.\n\n- 17개 챕터가 모두 **개념 학습 → 기본 예제 → 블로그 API 적용 → 정리** 4단계로 구성\n- 챕터를 순서대로 따라가면 **실제 동작하는 블로그 API 서버**가 완성\n- 모든 내용은 [NestJS 공식 문서](https://docs.nestjs.com)를 기반으로 검증\n- AI(Claude Code)가 구조 설계, 예제 코드, 설명을 작성하고 공식 문서로 크로스체크\n\n---\n\n## 학습 구조\n\n```\n각 챕터 구성:\n\n┌─────────────────────────────────────────────┐\n│  1단계: 개념 학습                               │\n│  - 이 기술이 무엇인지, 왜 필요한지                  │\n│  - 초보자 눈높이의 비유와 다이어그램                 │\n├─────────────────────────────────────────────┤\n│  2단계: 기본 예제                              │\n│  - 개념을 확인하는 독립적인 작은 예제               │\n│  - 직접 실행하며 동작 확인                        │\n├─────────────────────────────────────────────┤\n│  3단계: 블로그 API 적용                         │\n│  - 배운 내용을 블로그 프로젝트에 바로 적용            │\n│  - 챕터마다 기능이 하나씩 추가됨                   │\n├─────────────────────────────────────────────┤\n│  4단계: 정리                                  │\n│  - 핵심 개념 요약 표                            │\n│  - 다음 챕터 예고                              │\n└─────────────────────────────────────────────┘\n```\n\n---\n\n## 로드맵 전체 구성\n\n\u003e 상세 내용은 [`docs/00-roadmap.md`](./docs/00-roadmap.md)를 참고하세요.\n\n### Phase 1: 기초 — 프로젝트 뼈대 만들기\n\n| 챕터                               | 주제              | 블로그 API 결과물         |\n| ---------------------------------- | ----------------- | ------------------------- |\n| [01](./docs/01-module.md)          | **Module**        | 프로젝트 뼈대 (모듈 분리) |\n| [02](./docs/02-controller.md)      | **Controller**    | CRUD 라우트 정의          |\n| [03](./docs/03-provider-and-di.md) | **Provider \u0026 DI** | 메모리 기반 CRUD 동작     |\n\n### Phase 2: 요청 파이프라인 — 안전한 API 만들기\n\n| 챕터                          | 주제           | 블로그 API 결과물     |\n| ----------------------------- | -------------- | --------------------- |\n| [04](./docs/04-middleware.md) | **Middleware** | 요청 로깅             |\n| [05](./docs/05-pipe.md)       | **Pipe**       | DTO 유효성 검사       |\n| [06](./docs/06-guard.md)      | **Guard**      | 간이 인증 (헤더 기반) |\n\n### Phase 3: 응답 \u0026 에러 — 일관된 API 응답\n\n| 챕터                                | 주제                 | 블로그 API 결과물     |\n| ----------------------------------- | -------------------- | --------------------- |\n| [07](./docs/07-interceptor.md)      | **Interceptor**      | 응답 포맷 통일        |\n| [08](./docs/08-exception-filter.md) | **Exception Filter** | 에러 포맷 통일        |\n| [09](./docs/09-custom-decorator.md) | **Custom Decorator** | @CurrentUser, @Public |\n\n### Phase 4: 데이터 — 실제 DB 연동\n\n| 챕터                       | 주제        | 블로그 API 결과물 |\n| -------------------------- | ----------- | ----------------- |\n| [10](./docs/10-typeorm.md) | **TypeORM** | SQLite DB 연동    |\n\n### Phase 5: 설정 \u0026 인증 — 실전 수준으로\n\n| 챕터                              | 주제               | 블로그 API 결과물     |\n| --------------------------------- | ------------------ | --------------------- |\n| [11](./docs/11-configuration.md)  | **Configuration**  | .env 기반 설정 관리   |\n| [12](./docs/12-authentication.md) | **Authentication** | JWT 인증 시스템       |\n| [13](./docs/13-testing.md)        | **Testing**        | 핵심 로직 테스트 코드 |\n\n### Phase 6: API 문서화 \u0026 실시간 통신\n\n| 챕터                         | 주제          | 블로그 API 결과물  |\n| ---------------------------- | ------------- | ------------------ |\n| [14](./docs/14-swagger.md)   | **Swagger**   | API 문서 자동 생성 |\n| [15](./docs/15-websocket.md) | **WebSocket** | 실시간 댓글 알림   |\n\n### Phase 7: 아키텍처 패턴 — 대규모 앱 설계\n\n| 챕터                             | 주제              | 블로그 API 결과물        |\n| -------------------------------- | ----------------- | ------------------------ |\n| [16](./docs/16-cqrs.md)          | **CQRS**          | 게시글 CQRS 리팩토링     |\n| [17](./docs/17-microservices.md) | **Microservices** | 알림 마이크로서비스 분리 |\n\n### Phase 8+: 확장 학습 (추가 예정)\n\n\u003e 로드맵은 계속 확장될 수 있습니다. GraphQL, Docker, Redis, Kafka, CI/CD 등의 챕터가 추가될 예정입니다.\n\n---\n\n## 블로그 API 성장 과정\n\n```\nPhase 1  모듈 분리 → 라우트 정의 → 메모리 CRUD 동작\n            │\nPhase 2  + 로깅 → + DTO 검증 → + 간이 인증\n            │\nPhase 3  + 응답 포맷 통일 → + 에러 포맷 통일 → + 커스텀 데코레이터\n            │\nPhase 4  + SQLite 데이터베이스 연동\n            │\nPhase 5  + 환경 변수 관리 → + JWT 인증 → + 테스트 코드\n            │\nPhase 6  + Swagger API 문서 → + 실시간 댓글 알림\n            │\nPhase 7  + CQRS 패턴 → + 알림 마이크로서비스 ── 완성!\n```\n\n---\n\n## 이 저장소 활용하는 방법\n\n### 권장: Fork 해서 나만의 학습 저장소로 만들기\n\n단순히 클론만 하면 내 기록이 남지 않습니다.\n**Fork**하면 GitHub에 내 학습 이력이 커밋으로 남고, 자유롭게 수정할 수 있습니다.\n\n```\n1. 우측 상단 Fork 버튼 클릭\n        │\n        ▼\n2. 내 GitHub 계정에 복사됨\n   (github.com/내아이디/nest-study)\n        │\n        ▼\n3. 내 저장소를 로컬에 클론\n        │\n        ▼\n4. 챕터를 학습하면서 직접 코드 작성\n        │\n        ▼\n5. 챕터마다 커밋 → 내 잔디가 쌓임 🌱\n```\n\n```bash\n# Fork 후 내 저장소 클론\ngit clone https://github.com/내아이디/nest-study.git\ncd nest-study\nyarn install\n```\n\n\u003e **왜 Fork를 추천하나요?**\n\u003e\n\u003e - 챕터별로 커밋하면 학습 이력이 GitHub에 기록됩니다\n\u003e - 원본이 업데이트되면 `upstream`으로 동기화할 수 있습니다\n\u003e - 나만의 노트나 코드를 추가해도 원본에 영향이 없습니다\n\n---\n\n### 학습 흐름\n\n```\nFork → 클론 → docs 읽기 → 코드 작성 → 커밋 → 다음 챕터\n```\n\n| 단계 | 행동                                       |\n| ---- | ------------------------------------------ |\n| 1    | `docs/00-roadmap.md` 전체 구조 파악        |\n| 2    | `docs/01-module.md`부터 순서대로 읽기      |\n| 3    | 예제 코드를 `src/`에 직접 타이핑           |\n| 4    | `yarn run start:dev`로 동작 확인           |\n| 5    | `git commit -m \"chap01: module 학습 완료\"` |\n| 6    | 다음 챕터로 이동                           |\n\n---\n\n## 시작하기\n\n### 1. 저장소 Fork\n\nGitHub 우측 상단 **Fork** 버튼을 눌러 내 계정으로 복사하세요.\n\n### 2. 클론 및 설치\n\n```bash\ngit clone https://github.com/내아이디/nest-study.git\ncd nest-study\nyarn install\n```\n\n### 3. 개발 서버 실행\n\n```bash\nyarn run start:dev\n```\n\n서버가 정상 기동되면 `http://localhost:3000`에서 응답을 확인할 수 있다.\n\n### 4. API Playground (선택)\n\n챕터별 API를 브라우저에서 직접 테스트할 수 있는 플레이그라운드가 제공된다.\n\n**실행 방법**\n\n1. VS Code에서 [Live Server](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer) 확장 설치\n2. `playground.html` 파일을 열고 우하단 **Go Live** 클릭 → `http://127.0.0.1:5500/playground.html`\n3. 개발 서버(`yarn run start:dev`)를 실행한 상태에서 사용\n\n\u003e **CORS 설정 필요**: Live Server(`127.0.0.1:5500`)에서 NestJS 서버(`localhost:3000`)로 요청을 보낼 때 CORS 오류가 발생한다. `src/main.ts`에 `app.enableCors()`가 추가되어 있어야 한다. 이미 포함되어 있으므로 별도 설정은 불필요하다. CORS에 대한 자세한 설명은 [`docs/references/cors.md`](./docs/references/cors.md)를 참고하세요.\n\n### 5. 학습 시작\n\n[`docs/00-roadmap.md`](./docs/00-roadmap.md)를 열고 챕터 1부터 순서대로 진행하세요.\nide(vscode)에서 보는 것보다 github에서 보는 것이 조금 더 가독성이 좋습니다.\n\n---\n\n## 프로젝트 구조\n\n```\nnest-study/\n├── README.md                    ← 지금 보고 있는 파일\n├── docs/\n│   ├── 00-roadmap.md            ← 전체 로드맵\n│   ├── project-guide.md         ← 챕터별 블로그 API 구현 명세\n│   ├── 01-module.md             ← Phase 1\n│   ├── 02-controller.md\n│   ├── 03-provider-and-di.md\n│   ├── 04-middleware.md         ← Phase 2\n│   ├── 05-pipe.md\n│   ├── 06-guard.md\n│   ├── 07-interceptor.md       ← Phase 3\n│   ├── 08-exception-filter.md\n│   ├── 09-custom-decorator.md\n│   ├── 10-typeorm.md            ← Phase 4\n│   ├── 11-configuration.md     ← Phase 5\n│   ├── 12-authentication.md\n│   ├── 13-testing.md\n│   ├── 14-swagger.md           ← Phase 6\n│   ├── 15-websocket.md\n│   ├── 16-cqrs.md              ← Phase 7\n│   └── 17-microservices.md\n├── playground.html              ← 챕터별 API 테스트 플레이그라운드\n├── src/                         ← NestJS 소스 코드\n│   ├── main.ts                  ← app.enableCors() 포함\n│   ├── app.module.ts\n│   ├── app.controller.ts\n│   └── app.service.ts\n└── test/                        ← E2E 테스트\n```\n\n---\n\n## NestJS 요청 라이프사이클\n\n학습 중 항상 이 흐름을 머릿속에 두세요.\n\n```\nClient Request\n    │\n    ▼\n Middleware           ← 챕터 4\n    │\n    ▼\n  Guard               ← 챕터 6\n    │\n    ▼\n Interceptor (pre)    ← 챕터 7\n    │\n    ▼\n   Pipe               ← 챕터 5\n    │\n    ▼\n Controller           ← 챕터 2\n    │\n    ▼\n  Service             ← 챕터 3\n    │\n    ▼\n Interceptor (post)   ← 챕터 7\n    │\n    ▼\n Exception Filter     ← 챕터 8\n    │\n    ▼\nClient Response\n```\n\n---\n\n## 학습 팁\n\n1. **순서대로 진행** — 각 챕터는 이전 내용을 이어받아 블로그 API를 확장합니다\n2. **4단계 따라가기** — 개념 → 예제 → 블로그 적용 → 정리 순서로 읽으세요\n3. **직접 타이핑** — 코드를 복붙하지 말고 직접 타이핑하세요 (이해도가 다릅니다)\n4. **공식 문서 병행** — [NestJS Docs](https://docs.nestjs.com)와 함께 보면 더 효과적입니다\n5. **커밋 습관** — 각 챕터를 마칠 때마다 git commit으로 진행 상황을 기록하세요\n\n---\n\n## 참고 자료\n\n- [NestJS 공식 문서](https://docs.nestjs.com)\n- [NestJS GitHub](https://github.com/nestjs/nest)\n- [TypeORM 공식 문서](https://typeorm.io)\n- [class-validator](https://github.com/typestack/class-validator)\n- [Passport.js](http://www.passportjs.org)\n\n---\n\n## AI 기반 학습 콘텐츠 생성\n\n이 로드맵은 **Claude Code**를 활용하여 제작되었습니다.\n\n- 17개 에이전트가 병렬로 각 챕터를 작성\n- 각 에이전트가 NestJS 공식 문서를 참조하여 내용 검증\n- 챕터 간 블로그 API의 연속성과 일관성 유지\n- 초보자 관점에서 설명의 난이도와 깊이를 조절\n\n---\n\n## AI로 나만의 쿡북 만들기\n\n이 저장소는 **그대로 따라가는 교재**이기도 하지만, **AI를 활용해 자유롭게 확장하는 베이스캠프**이기도 합니다.\n\nFork 한 뒤 Claude Code, ChatGPT, Cursor 등 AI 도구와 함께 본인 입맛대로 발전시켜 보세요.\n\n### 확장 아이디어\n\n| 방향                | 예시                                                               |\n| ------------------- | ------------------------------------------------------------------ |\n| **챕터 추가**       | GraphQL, Docker, Redis, Kafka, CI/CD 등 Phase 8+ 직접 작성         |\n| **블로그 API 교체** | 블로그 대신 쇼핑몰, 커뮤니티, TODO 앱으로 바꿔 처음부터 재구성     |\n| **언어 변경**       | 한국어 문서를 영어나 다른 언어로 번역                              |\n| **예제 심화**       | 각 챕터에 고급 예제, 실무 패턴, 트러블슈팅 섹션 추가               |\n| **레퍼런스 확장**   | `docs/references/`에 RxJS, CLI 명령어, 환경 설정 등 참고 문서 추가 |\n| **난이도 조정**     | 설명을 더 쉽게 풀거나, 심화 내용을 추가하거나                      |\n\n### AI 활용 예시\n\n```\n\"챕터 10의 블로그 API를 SQLite 대신 PostgreSQL로 바꿔줘\"\n\"GraphQL 챕터를 이 저장소의 문서 형식에 맞게 새로 작성해줘\"\n\"챕터 5 Pipe 섹션에 실무에서 자주 쓰는 커스텀 파이프 예제를 추가해줘\"\n\"영어 학습자를 위해 01-module.md를 영문으로 번역해줘\"\n```\n\n이 저장소의 문서 구조와 규칙은 `CLAUDE.md`에 정리되어 있어, AI가 기존 스타일을 그대로 유지하면서 내용을 추가하거나 변경할 수 있습니다.\n\n\u003e **이 저장소는 완성품이 아니라 출발점입니다.** 여러분만의 NestJS 쿡북으로 자유롭게 발전시켜 주세요.\n\n---\n\n## 기여하기\n\n오타, 내용 보완, 새 챕터 추가 등 모든 기여를 환영합니다.\n\n- **간단한 제보** → [GitHub Issue](https://github.com/ssi02014/nest-study/issues) 등록\n- **직접 수정** → Fork 후 Pull Request 제출\n\n자세한 기여 방법은 [CONTRIBUTING.md](./CONTRIBUTING.md)를 참고하세요.\n\n---\n\n## License\n\n[MIT licensed](https://github.com/nestjs/nest/blob/master/LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fssi02014%2Fnestjs-cookbook","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fssi02014%2Fnestjs-cookbook","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fssi02014%2Fnestjs-cookbook/lists"}