commit 1f22abbd3ea89cc7ead8aa4b1b5928aaebd3a2dc Author: NINI Date: Wed Jun 10 00:53:50 2026 +0900 initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ccc57ad --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.DS_Store +.vercel +node_modules +*.log +__pycache__ diff --git a/Part0-실리콘밸리_엔지니어의_하루/Ch01-강사소개_강의개요/exercises/templates/my-level.md b/Part0-실리콘밸리_엔지니어의_하루/Ch01-강사소개_강의개요/exercises/templates/my-level.md new file mode 100644 index 0000000..1ed5f70 --- /dev/null +++ b/Part0-실리콘밸리_엔지니어의_하루/Ch01-강사소개_강의개요/exercises/templates/my-level.md @@ -0,0 +1,37 @@ +# 나의 AI 코딩 레벨 — Week 0 + +> 강의 시작 시점의 자가진단. 5주 후 다시 보고 변화 측정. + +작성일: YYYY-MM-DD + +--- + +## 자가진단 표 + +| 항목 | 현재 나 | 비고 | +|---|---|---| +| Claude Code(또는 Cursor/Copilot)를 매일 코딩에 쓰고 있다 | | | +| AI에 작업을 줄 때 "어떻게 검증할지"를 미리 정의한다 | | | +| 같은 프롬프트를 두 번 이상 반복해서 친 적이 있다 | | | +| 프로젝트에 `CLAUDE.md` 또는 그에 준하는 AI용 가이드 문서가 있다 | | | +| AI가 만든 코드를 PR로 올린 적이 있다 | | | +| AI를 위해 만든 Skill / Hook / 자동화 스크립트가 1개라도 있다 | | | +| AI가 자기 결과를 스스로 검증(테스트·로그)하도록 만든 적이 있다 | | | + +표시 방법: ✅ (그렇다) / ❌ (아니다) / △ (시도해봤지만 정착 안 됨) + +--- + +## 강의 종료 시점의 목표 + +> "이 강의가 끝났을 때 (___)을(를) 할 수 있게 되고 싶습니다." + +(여기에 한 문장으로 구체적으로 적기 — "회사 repo에 CLAUDE.md를 도입해 PR 리뷰 시간 절반으로" 처럼 도구·결과·수치 중 하나라도 포함) + +--- + +## 다음 챕터 진입 전 한 가지 + +> "Part 0 Ch01을 마쳤다. 다음 챕터 시작 전, 내가 가장 궁금한 한 가지는: (___)" + +이 질문은 Part 0 Ch02 끝에서 답이 되는지 확인합니다. diff --git a/Part0-실리콘밸리_엔지니어의_하루/Ch02-AI_Native_엔지니어로_일하기/exercises/templates/habit-tracker.md b/Part0-실리콘밸리_엔지니어의_하루/Ch02-AI_Native_엔지니어로_일하기/exercises/templates/habit-tracker.md new file mode 100644 index 0000000..8027af9 --- /dev/null +++ b/Part0-실리콘밸리_엔지니어의_하루/Ch02-AI_Native_엔지니어로_일하기/exercises/templates/habit-tracker.md @@ -0,0 +1,40 @@ +# Habit Tracker — Week 1 + +> 5가지 AI-Native 습관 중 2개를 골라 1주일 동안 매일 체크. +> 매일 저녁(또는 다음 날 아침) 1~2분 안에 끝낼 것. + +시작일: YYYY-MM-DD +종료일: YYYY-MM-DD (시작일 + 6일) + +--- + +## 이번 주 ⭐ 두 습관 + +1. **습관 1**: ___ (예: 짧은 세션) + - 측정 방법: ___ (예: 매 세션 시작 시 `/context` 확인 → 50% 넘기 전 `/clear`) +2. **습관 2**: ___ (예: 계획 검토 4체크) + - 측정 방법: ___ (예: Plan Mode 후 범위·패턴·테스트·리스크 4항목 모두 검토) + +--- + +## 일일 체크 + +| 일자 | 요일 | 습관 1 ✅ | 습관 2 ✅ | 오늘의 한 줄 메모 | +|---|---|---|---|---| +| Day 1 | | | | | +| Day 2 | | | | | +| Day 3 | | | | | +| Day 4 | | | | | +| Day 5 | | | | | +| Day 6 | | | | | +| Day 7 | | | | | + +> 한 줄 메모는 "오늘 어떤 패턴을 발견했나" 또는 "어떤 게 어색했나" 정도면 충분합니다. + +--- + +## 1주일 회고 (Day 7 저녁) + +- **이번 주에 발견한 패턴 1개**: ___ +- **다음 주에 추가할 습관 1개**: ___ (남은 3개 습관 중) +- **이번 주 트래커에서 가장 쓸모없던 항목**: ___ (다음 주에 빼거나 바꿔도 됨) diff --git a/Part0-실리콘밸리_엔지니어의_하루/Ch02-AI_Native_엔지니어로_일하기/exercises/templates/my-workflow.md b/Part0-실리콘밸리_엔지니어의_하루/Ch02-AI_Native_엔지니어로_일하기/exercises/templates/my-workflow.md new file mode 100644 index 0000000..6fb5ade --- /dev/null +++ b/Part0-실리콘밸리_엔지니어의_하루/Ch02-AI_Native_엔지니어로_일하기/exercises/templates/my-workflow.md @@ -0,0 +1,56 @@ +# My Workflow — 수집·판단·실행 매핑 + +> 본인 하루의 시간 블록을 **수집(AI) → 판단(사람) → 실행(AI)** 렌즈로 재매핑. + +작성일: YYYY-MM-DD +기준 날짜: YYYY-MM-DD (어제 또는 최근 평일) + +--- + +## Section A. 하루 시간 블록 + +| 시간 | 한 일 | +|---|---| +| 09:00–09:30 | (예: 메일 확인) | +| 09:30–11:00 | (예: 팀 미팅) | +| 11:00–12:30 | | +| 13:30–15:00 | | +| 15:00–16:30 | | +| 16:30–18:00 | | + +> 30분 단위로. 회의·메일·코딩·디버깅·잡무까지 모두. 하루의 70% 이상 덮으면 OK. + +--- + +## Section B. 각 블록에 태그 + +위 표 옆에 다음 중 하나(또는 복수) 표시: +- 🔵 **수집** — 정보 모으기 (이슈·PR·지표·문서 읽기) +- 🟡 **판단** — 사람의 결정 (우선순위·설계·리뷰 승인/거절) +- 🔴 **실행** — 코드·문서·PR 만들기 + +--- + +## Section C. AI 위임 후보 3개 + +**판단 ❌ + (수집 또는 실행) ✅** 인 블록 중 3개 선정. + +1. **블록**: ___ + - **태그**: 🔵 / 🔴 + - **위임 방법**: ___ (예: "/briefing 스킬로 매일 아침 자동 요약") + +2. **블록**: ___ + - **태그**: 🔵 / 🔴 + - **위임 방법**: ___ + +3. **블록**: ___ + - **태그**: 🔵 / 🔴 + - **위임 방법**: ___ + +> "AI 위임"이 추상적이면 → 도구 이름이나 서브에이전트 이름을 명시 (예: "유닛 테스트 작성 서브에이전트", "Explore agent", "PR 요약 Skill"). + +--- + +## 챕터 회고 (선택) + +> "Part 0 Ch01에서 '가장 궁금한 한 가지'로 적었던 게 답이 됐나? (___)" diff --git a/Part1-Claude_Code_마스터하기/Ch01-Claude_Code_딥다이브/exercises/templates/CLAUDE.md b/Part1-Claude_Code_마스터하기/Ch01-Claude_Code_딥다이브/exercises/templates/CLAUDE.md new file mode 100644 index 0000000..ca8647b --- /dev/null +++ b/Part1-Claude_Code_마스터하기/Ch01-Claude_Code_딥다이브/exercises/templates/CLAUDE.md @@ -0,0 +1,100 @@ +# CLAUDE.md — <프로젝트 이름> + +> 이 문서는 매 Claude 세션 시작 시 자동으로 로드됩니다. +> **목표 길이**: 100~200줄. 200줄을 넘으면 잘라낼 것을 우선 고려하세요. +> **원칙**: Claude가 코드를 읽으면 알 수 있는 정보는 적지 마세요 (예: 함수 시그니처 X, 인터페이스 정의 X). + +마지막 업데이트: YYYY-MM-DD + +--- + +## 1. 절대 규칙 (3~5개) + +- 절대 X 하지 마라 — (예: `console.log`를 production 코드에 두지 마라. 로깅은 `logger.ts`만 사용) +- 절대 Y 하지 마라 — (예: `process.env`를 직접 읽지 마라. `config/env.ts`를 통해서만) +- 절대 Z 하지 마라 — (예: 새 의존성 추가 전에 `package.json`의 deny list 확인) + +> 절대 규칙 = 위반 시 PR 거부될 만한 것만. 3~5개를 넘으면 "절대"가 아닙니다. + +--- + +## 2. 명령어 치트시트 + +```bash +# 빌드 / 개발 서버 +npm run dev +npm run build + +# 테스트 +npm test # 전체 +npm test -- --watch # watch 모드 +npm test path/to/file # 단일 파일 + +# Lint / 타입체크 +npm run lint +npm run typecheck + +# DB / 인프라 (있을 경우) +npm run db:migrate +npm run db:reset +``` + +> 강의 권장: 빌드·테스트·lint·typecheck 4가지는 반드시. DB/배포는 있는 경우만. + +--- + +## 3. 아키텍처 한눈에 + +``` +src/ + app/ # Next.js App Router (라우트 단위) + components/ # 재사용 React 컴포넌트 + lib/ # 도메인 로직 (auth, payment, ...) + utils/ # 순수 유틸 함수 + styles/ # 글로벌 CSS / Tailwind config +tests/ # 모든 테스트 (mocks/ 포함) +``` + +**핵심 모듈 3~5개**: +- `lib/auth/` — 인증·세션 관리. `session.ts`가 진입점. +- `lib/payment/` — 결제. Stripe webhook은 `stripe/webhook.ts`에서만 처리. +- `lib/db/` — Prisma 래퍼. 직접 `prisma.X`를 부르지 말고 `lib/db/queries/`만 사용. + +--- + +## 4. 컨벤션 + +### 네이밍 +- 파일: `kebab-case.ts` +- 컴포넌트: `PascalCase.tsx` +- hook: `useXxx.ts` +- 테스트: `<원본>.test.ts` + +### 테스트 +- 단위 테스트는 mocking OK +- 통합 테스트는 실제 DB (sqlite in-memory) — mocking 금지 +- 모든 테스트는 `tests/` 아래, 절대 `src/` 안에 두지 않음 + +### 에러 처리 +- API 라우트는 `lib/errors.ts`의 `AppError` 던지기 +- catch 블록에서 무의미한 `console.log` 금지 — `logger.error`만 + +--- + +## 5. 지금 진행 중 (TODO) + +- [ ] 인증 미들웨어를 Edge Runtime로 이전 (브랜치: `feat/edge-auth`) +- [ ] Stripe 웹훅 idempotency 키 처리 (이슈 #123) + +> Claude에게 컨텍스트를 주는 항목. 작업이 끝나면 즉시 제거. +> 길어지면 `.claude/docs/todos.md`로 분리하고 여기서는 한 줄 참조만. + +--- + +## 6. 참고 자료 (선택) + +- 상세 아키텍처 도큐먼트: `@.claude/docs/architecture.md` +- 결제 모듈 deep dive: `@.claude/docs/payment.md` +- 온보딩 가이드: `@docs/onboarding.md` + +> `@` 참조는 Claude가 필요할 때만 로드합니다 (lazy load). 이것이 CLAUDE.md를 짧게 유지하는 비결. diff --git a/Part1-Claude_Code_마스터하기/Ch03-Agentic_Engineering_개론/exercises/templates/.agent-rules.md b/Part1-Claude_Code_마스터하기/Ch03-Agentic_Engineering_개론/exercises/templates/.agent-rules.md new file mode 100644 index 0000000..162a8c7 --- /dev/null +++ b/Part1-Claude_Code_마스터하기/Ch03-Agentic_Engineering_개론/exercises/templates/.agent-rules.md @@ -0,0 +1,83 @@ +# .agent-rules.md — Agent 가드레일 (50% 룰 + 패턴 통일 + 로그 포맷) + +> 이 파일은 CLAUDE.md의 보충 자산입니다. 50% 룰 적발(같은 일을 하는 경쟁 패턴)을 명문화해 +> Agent의 variance를 줄이고, 어떤 패턴을 사용할지 결정적으로 만듭니다. + +마지막 업데이트: YYYY-MM-DD + +--- + +## 1. 패턴 통일 (50% 룰 적발) + +> 같은 일을 하는 두 가지 이상의 방법이 코드베이스에 공존하면, agent가 50% 확률로 잘못된 쪽을 선택합니다. + +### Rule 1 — HTTP 클라이언트 +- ✅ 사용: `lib/http.ts`의 fetch 래퍼 (`httpGet`, `httpPost`) +- 🚫 DEPRECATED: `axios` 직접 import, 원시 `fetch()` 호출 +- 위치: `src/lib/http.ts` +- 마이그레이션: `axios` 사용처는 PR로 점진 교체 + +### Rule 2 — 에러 처리 +- ✅ 사용: `lib/errors.ts`의 `AppError` 클래스 + catch 시 `logger.error` +- 🚫 DEPRECATED: `console.log` / `throw new Error(string)` +- 예외: `tests/` 디렉토리는 `console.log` OK + +### Rule 3 — DB 쿼리 +- ✅ 사용: `lib/db/queries/` 의 정의된 함수만 +- 🚫 DEPRECATED: 라우트 핸들러에서 `prisma.X` 직접 호출 +- 새 쿼리는 `queries/` 디렉토리에 추가 + +> 본인 repo에 맞춰 위 3개를 교체하세요. 3~5개가 적정 — 너무 많으면 안 지켜지고, 너무 적으면 효과 ↓. + +--- + +## 2. 에이전트별 가드레일 (Pillar IV) + +### Sub-agent로 위임 OK +- 코드베이스 탐색 (Explore agent) — 큰 출력 흡수 +- 독립 리뷰 — PR diff에 대한 객관적 평가 +- 마이그레이션 같은 반복 작업 — 작은 패턴 전환을 N개 파일에 적용 + +### Sub-agent로 위임 NO +- DB 마이그레이션 작성 — 메인 컨텍스트에서 사람이 검토 +- 결제·인증 변경 — 메인 컨텍스트에서 Plan Mode 필수 +- 의존성 추가 — `package.json` deny list 확인 필요 + +--- + +## 3. 구조화 로그 포맷 (Pillar IV — Agent self-correction 입력) + +> JSON line. 한 줄당 한 이벤트. jq로 필터 가능. + +```json +{"ts":"2026-05-19T14:30:00.000Z","module":"auth","level":"info","event":"session_create","userId":"u_123","ttl":3600} +{"ts":"2026-05-19T14:30:01.000Z","module":"payment","level":"error","event":"charge_failed","userId":"u_123","reason":"insufficient_funds"} +``` + +**필수 필드**: `ts`, `module`, `level`, `event` +**선택 필드**: `userId`, `requestId`, 도메인별 컨텍스트 + +**Agent 자기검증 흐름**: +```bash +# 변경 후 자동으로 호출 가능 +tail -n 100 .logs/dev.log | jq 'select(.level=="error")' +``` +→ 결과가 비면 ✅, 아니면 메시지를 읽고 자기수정. + +--- + +## 4. 컨벤션 (Consistency over DRY — Pillar IV) + +> Agent에게는 반복이 추상화보다 저렴합니다. + +- 새 API 라우트 추가 시: `src/app/api//route.ts` — 다른 라우트의 코드를 **복사 후 수정**, 새 추상화 만들지 말 것 +- 새 React 컴포넌트: `src/components/.tsx` + `.test.tsx` 쌍 +- 새 도메인 모듈: `src/lib//index.ts` + `.test.ts` + +--- + +## 5. 변경 이력 (선택) + +- YYYY-MM-DD: 초기 작성 +- YYYY-MM-DD: HTTP 클라이언트 통일 룰 추가 +- ... diff --git a/Part1-Claude_Code_마스터하기/Ch03-Agentic_Engineering_개론/exercises/templates/CLAUDE.md b/Part1-Claude_Code_마스터하기/Ch03-Agentic_Engineering_개론/exercises/templates/CLAUDE.md new file mode 100644 index 0000000..ca8647b --- /dev/null +++ b/Part1-Claude_Code_마스터하기/Ch03-Agentic_Engineering_개론/exercises/templates/CLAUDE.md @@ -0,0 +1,100 @@ +# CLAUDE.md — <프로젝트 이름> + +> 이 문서는 매 Claude 세션 시작 시 자동으로 로드됩니다. +> **목표 길이**: 100~200줄. 200줄을 넘으면 잘라낼 것을 우선 고려하세요. +> **원칙**: Claude가 코드를 읽으면 알 수 있는 정보는 적지 마세요 (예: 함수 시그니처 X, 인터페이스 정의 X). + +마지막 업데이트: YYYY-MM-DD + +--- + +## 1. 절대 규칙 (3~5개) + +- 절대 X 하지 마라 — (예: `console.log`를 production 코드에 두지 마라. 로깅은 `logger.ts`만 사용) +- 절대 Y 하지 마라 — (예: `process.env`를 직접 읽지 마라. `config/env.ts`를 통해서만) +- 절대 Z 하지 마라 — (예: 새 의존성 추가 전에 `package.json`의 deny list 확인) + +> 절대 규칙 = 위반 시 PR 거부될 만한 것만. 3~5개를 넘으면 "절대"가 아닙니다. + +--- + +## 2. 명령어 치트시트 + +```bash +# 빌드 / 개발 서버 +npm run dev +npm run build + +# 테스트 +npm test # 전체 +npm test -- --watch # watch 모드 +npm test path/to/file # 단일 파일 + +# Lint / 타입체크 +npm run lint +npm run typecheck + +# DB / 인프라 (있을 경우) +npm run db:migrate +npm run db:reset +``` + +> 강의 권장: 빌드·테스트·lint·typecheck 4가지는 반드시. DB/배포는 있는 경우만. + +--- + +## 3. 아키텍처 한눈에 + +``` +src/ + app/ # Next.js App Router (라우트 단위) + components/ # 재사용 React 컴포넌트 + lib/ # 도메인 로직 (auth, payment, ...) + utils/ # 순수 유틸 함수 + styles/ # 글로벌 CSS / Tailwind config +tests/ # 모든 테스트 (mocks/ 포함) +``` + +**핵심 모듈 3~5개**: +- `lib/auth/` — 인증·세션 관리. `session.ts`가 진입점. +- `lib/payment/` — 결제. Stripe webhook은 `stripe/webhook.ts`에서만 처리. +- `lib/db/` — Prisma 래퍼. 직접 `prisma.X`를 부르지 말고 `lib/db/queries/`만 사용. + +--- + +## 4. 컨벤션 + +### 네이밍 +- 파일: `kebab-case.ts` +- 컴포넌트: `PascalCase.tsx` +- hook: `useXxx.ts` +- 테스트: `<원본>.test.ts` + +### 테스트 +- 단위 테스트는 mocking OK +- 통합 테스트는 실제 DB (sqlite in-memory) — mocking 금지 +- 모든 테스트는 `tests/` 아래, 절대 `src/` 안에 두지 않음 + +### 에러 처리 +- API 라우트는 `lib/errors.ts`의 `AppError` 던지기 +- catch 블록에서 무의미한 `console.log` 금지 — `logger.error`만 + +--- + +## 5. 지금 진행 중 (TODO) + +- [ ] 인증 미들웨어를 Edge Runtime로 이전 (브랜치: `feat/edge-auth`) +- [ ] Stripe 웹훅 idempotency 키 처리 (이슈 #123) + +> Claude에게 컨텍스트를 주는 항목. 작업이 끝나면 즉시 제거. +> 길어지면 `.claude/docs/todos.md`로 분리하고 여기서는 한 줄 참조만. + +--- + +## 6. 참고 자료 (선택) + +- 상세 아키텍처 도큐먼트: `@.claude/docs/architecture.md` +- 결제 모듈 deep dive: `@.claude/docs/payment.md` +- 온보딩 가이드: `@docs/onboarding.md` + +> `@` 참조는 Claude가 필요할 때만 로드합니다 (lazy load). 이것이 CLAUDE.md를 짧게 유지하는 비결. diff --git a/README.md b/README.md new file mode 100644 index 0000000..72abc00 --- /dev/null +++ b/README.md @@ -0,0 +1,33 @@ +# claude-code-lecture + +> **"실리콘밸리 엔지니어의 Claude Code"** 강의 실습 워크북. + +이 repo에는 학습자가 직접 채울 **빈 양식 파일(templates)** 만 들어 있습니다. 실습 가이드와 슬라이드는 강의 사이트에서 봅니다. + +## 사용법 + +1. 우측 상단 **Fork** 버튼으로 본인 계정에 복제. +2. fork한 repo를 clone: + ```bash + git clone https://github.com//claude-code-lecture.git + cd claude-code-lecture + ``` +3. 강의 사이트에서 챕터의 실습 가이드를 읽고, 같은 챕터의 `templates/<양식>.md`를 **직접 열어** 본인 답으로 채워 commit. + +## 챕터별 자료 + +| 챕터 | 실습 가이드 (사이트) | 빈 양식 (이 repo) | +|---|---|---| +| Part 0 · Ch01 — 강사소개·강의개요 | [learn](https://claudecode-lecture.vercel.app/Part0-실리콘밸리_엔지니어의_하루/Ch01-강사소개_강의개요/learn.html) | `Part0-.../Ch01-.../exercises/templates/my-level.md` | +| Part 0 · Ch02 — AI-Native 엔지니어로 일하기 | [learn](https://claudecode-lecture.vercel.app/Part0-실리콘밸리_엔지니어의_하루/Ch02-AI_Native_엔지니어로_일하기/learn.html) | `templates/my-workflow.md`, `templates/habit-tracker.md` | +| Part 1 · Ch01 — Claude Code 딥다이브 | [learn](https://claudecode-lecture.vercel.app/Part1-Claude_Code_마스터하기/Ch01-Claude_Code_딥다이브/learn.html) | `templates/CLAUDE.md` *(별도 작업 repo: [example-vibe-project](https://github.com/jha0313/example-vibe-project))* | +| Part 1 · Ch02 — Vibe Coding의 본질과 한계 | [learn](https://claudecode-lecture.vercel.app/Part1-Claude_Code_마스터하기/Ch02-Vibe_Coding의_본질과_한계/learn.html) | (없음 — 학습자 로컬 `~/projects/vibe-90min/` 사용) | +| Part 1 · Ch03 — Agentic Engineering 개론 | [learn](https://claudecode-lecture.vercel.app/Part1-Claude_Code_마스터하기/Ch03-Agentic_Engineering_개론/learn.html) | `templates/CLAUDE.md`, `templates/.agent-rules.md` | +| Part 1 · Ch04 — Harness Engineering 개론 | [learn](https://claudecode-lecture.vercel.app/Part1-Claude_Code_마스터하기/Ch04-Harness_Engineering_개론/learn.html) | (집필 중) | +| Part 1 · Ch05 — 실전 바이브코딩 테크닉 | [learn](https://claudecode-lecture.vercel.app/Part1-Claude_Code_마스터하기/Ch05-실전_바이브코딩_테크닉/learn.html) | (집필 중) | + +> 사이트 URL은 배포 후 확정됩니다. 배포 전이라면 강의 안내를 참고하세요. + +## 라이선스 + +학습 목적. 자유롭게 fork·수정 가능.