이 포스트는 “AI 시대의 개발자: Claude Code를 업무에 통합하는 5가지 실전 방법“의 Part 2입니다.

“Claude Code가 2주 만에 만들어줬어요!”

아닙니다. 정확히는:

  • PRD 작성 및 3번 수정 (우선순위 재조정)
  • 13개 Epic → 47개 Task → 137개 Sub Task 분해
  • 각 Sub Task마다 논리적 검증 (의도 일치, 사이드 이펙트)
  • AI 실수 6번 발견 및 수정 (기존 코드 대체 → 추가로 변경)
  • 최종 81개 테스트 작성 및 통과

개발자가 체계적으로 관리하고, AI를 도구로 활용한 2주였습니다.

이 포스트에서는 실제 개발 프로세스를 솔직하게 공개합니다:

  • PRD는 어떻게 작성하고 왜 3번 수정했는가
  • Task를 어떻게 분해하고 순서를 정했는가
  • 매 단계마다 무엇을 검증했는가
  • AI의 어떤 실수를 어떻게 잡았는가

📋 프로젝트 개요



목표

마크다운으로 작성 → 한 줄 명령으로 한영 블로그 동시 발행

blog publish post.md
# 자동 번역 → 이미지 업로드 → SEO 최적화 → 광고 삽입 → 발행 → 언어 연결

왜 자동화가 필요했나?

포스트 하나당 2.5시간 소요:

  • 한글 작성 → 영문 번역 (1.5시간)
  • 이미지 업로드 및 경로 수정 (20분)
  • SEO 메타데이터 입력 (15분)
  • 광고 코드 삽입 (10분)
  • WordPress 발행 및 언어 연결 (10분)

연간 100개 포스트 = 250시간 낭비

기대 효과

  • 포스트 발행: 2.5시간 → 15분 (90% 절감)
  • 연간 ROI: $11,700 (250시간 × $50/시간 – 개발 투자)

🎯 개발 프로세스 개요

핵심 원칙: AI는 도구, 개발자가 관리자

5단계 체계적 프로세스

1. 브레인스토밍 (Claude Code와 자유로운 대화)
   ↓
2. PRD 작성 (AI 초안 → 개발자 검토 → 수정 반복)
   ↓
3. Task 분해 (Epic → Task → Sub Task, 의존성 분석)
   ↓
4. 순차 실행 (1개 Sub Task씩, 매번 검증)
   ↓
5. 지속적 검증 (논리적 정합성, 의도 일치, 사이드 이펙트)

왜 이 프로세스인가?

❌ 잘못된 방식: “AI야, 블로그 자동화 만들어줘” → 결과물 불명확, 재작업 반복

✅ 올바른 방식:

  1. PRD로 요구사항 명확화 (무엇을 만들까)
  2. Task로 실행 계획 수립 (어떻게 만들까)
  3. Sub Task로 관리 가능한 단위 분해 (한 번에 하나씩)
  4. 매 단계 검증 (이게 맞나? 문제 없나?)

개발자가 방향을 정하고, AI가 실행을 돕는 구조


🗓️ Day 1: 브레인스토밍 (2시간)

Claude Code와 자유로운 대화

나: "WordPress 블로그 자동화 CLI 만들려고 해.
마크다운 작성 → 한영 자동 번역 → 이미지 업로드 → 발행.
가능할까?"

Claude: "가능합니다. 다음이 필요합니다:

핵심 기술:
- WordPress REST API (포스트 발행)
- Anthropic API (AI 번역)
- wpapi 라이브러리 (API 클라이언트)
- unified + remark (마크다운 파싱)

주요 도전과제:
1. 번역 품질 검증 (코드 블록 보존, SEO 키워드)
2. 이미지 중복 업로드 방지
3. Polylang 언어 연결 (한영 포스트)

제안 아키텍처:
- pnpm monorepo (cli / core / shared)
- TypeScript (타입 안전성)
- Zod (런타임 검증)

나: “시간이 얼마나 걸릴까?”

Claude: “체계적으로 접근하면:

  • MVP (기본 발행): 3-5일
  • 번역 시스템: 3-4일
  • 이미지 자동화: 2-3일
  • 검증/테스트: 2-3일
    총 2주 정도 예상됩니다.”

**핵심 학습**: 이 단계는 구조화되지 않아도 됨. 아이디어를 자유롭게 탐색.

---

## 🗓️ Day 1-2: PRD 작성 (4시간)

### 초안 작성 (Claude Code에게 요청)

나: “브레인스토밍 기반으로 PRD 작성해줘.
Epic, Task, 우선순위까지.”

Claude: “PRD를 작성하겠습니다…”


### PRD v1 (AI 초안)

```markdown
## Epic 1.0: 프로젝트 셋업
- Task 1.1: pnpm workspace 설정
- Task 1.2: TypeScript 설정
- Task 1.3: 빌드 파이프라인 (tsup)

## Epic 2.0: WordPress API 연동
- Task 2.1: wpapi 클라이언트
- Task 2.2: 인증 (Application Password)
- Task 2.3: 포스트 생성/수정/삭제

## Epic 3.0: 마크다운 파싱
- Task 3.1: gray-matter 통합
- Task 3.2: unified 파이프라인
- Task 3.3: frontmatter 검증 (Zod)

## Epic 4.0: CLI 도구
...

## Epic 11.0: AI 번역 시스템
...

## Epic 12.0: 이미지 자동 업로드
...

첫 번째 검증: “논리적으로 문제 없나?”

발견한 문제:

  1. Epic 순서 이상: CLI 도구가 WordPress API보다 먼저?
  2. 의존성 고려 안 됨: 번역은 마크다운 파싱 이후여야
  3. 우선순위 불명확: MVP vs Nice-to-have 구분 없음

개발자 판단: “이건 재배치 필요”

PRD v2 (1차 수정 – 우선순위)

## Phase 1: MVP (1주)
### Epic 1.0: 프로젝트 기반
### Epic 2.0: WordPress API
### Epic 3.0: 마크다운 파싱
### Epic 4.0: CLI 기본 (publish 명령)

## Phase 2: 자동화 (1주)
### Epic 11.0: AI 번역
### Epic 12.0: 이미지 업로드

## Phase 3: 최적화 (향후)
### Epic 21.0: 광고 자동 삽입
### Epic 22.0: 스케줄 발행

개선점: Phase로 우선순위 명확화

두 번째 검증: “내가 의도한 게 맞나?”

발견한 문제:

  • Epic 11.0: 번역만 있고 품질 검증이 없음
  • Epic 12.0: 이미지 중복 체크 누락

개발자 판단: “품질 검증은 필수. Epic 분리 필요”

PRD v3 (2차 수정 – 품질 검증 추가)

## Phase 2: 자동화 (1주)
### Epic 11.0: AI 번역
- Task 11.1: 번역 엔진 (Claude API)
- Task 11.2: 코드 블록 보존
- Task 11.3: SEO 키워드 보존
- **Task 11.4: 8단계 품질 검증** ← NEW

### Epic 12.0: 이미지 자동 업로드
- Task 12.1: 이미지 경로 파싱
- Task 12.2: WordPress 미디어 API
- **Task 12.3: 중복 이미지 감지** ← NEW
- Task 12.4: URL 변환

세 번째 검증: “사이드 이펙트는 없나?”

발견한 문제:

  • Epic 3.0: 마크다운 파싱 시 SEO 데이터 생성
  • Epic 11.0: 번역 시에도 SEO 데이터 생성
  • 충돌 가능성: slug가 두 번 생성되면?

개발자 판단: “SEO 생성 로직을 Epic 3.0에 통합, Epic 11.0은 번역만”

PRD v3 (최종 – 3차 수정)

## Epic 3.0: 마크다운 파싱
- Task 3.1: gray-matter 통합
- Task 3.2: unified 파이프라인
- Task 3.3: frontmatter 검증 (Zod)
- **Task 3.4: SEO 데이터 생성** ← MOVED

## Epic 11.0: AI 번역
- Task 11.1: 번역 엔진 (SEO 제외)
- Task 11.2: 코드 블록 보존
- Task 11.3: SEO 키워드 보존
- Task 11.4: 품질 검증

최종 결과: 13 Epics, 47 Tasks

핵심 학습

PRD는 한 번에 완성되지 않습니다:

  1. AI가 초안 작성 (80% 정확도)
  2. 개발자가 3번 검증 및 수정:
    • 논리적 정합성 (순서, 의존성)
    • 의도 일치 (요구사항 반영)
    • 사이드 이펙트 (충돌, 중복)

개발자의 역할: 전략적 의사결정, AI는 문서 작성 지원


🗓️ Day 2: Task/Sub Task 분해 (3시간)

Task를 Sub Task로 분해

Epic 11.0: AI 번역 → 22개 Sub Task

## Task 11.1: 번역 엔진
- Sub Task 11.1.1: Anthropic API 클라이언트 설정
- Sub Task 11.1.2: 번역 프롬프트 설계
- Sub Task 11.1.3: 타임아웃 처리 (60ms/단어)
- Sub Task 11.1.4: 에러 핸들링

## Task 11.2: 코드 블록 보존
- Sub Task 11.2.1: 코드 블록 추출 (정규식)
- Sub Task 11.2.2: 플레이스홀더 치환
- Sub Task 11.2.3: 번역 후 복원
- Sub Task 11.2.4: 완전 일치 검증

## Task 11.3: SEO 키워드 보존
- Sub Task 11.3.1: tags에서 키워드 추출
- Sub Task 11.3.2: 번역 시 키워드 힌트 제공
- Sub Task 11.3.3: 번역 후 키워드 포함 검증
- Sub Task 11.3.4: 키워드 밀도 계산 (0.5-2.5%)

## Task 11.4: 품질 검증
- Sub Task 11.4.1: 기본 검증 (비어있지 않음)
- Sub Task 11.4.2: 라인 수 검증 (50-150%)
- Sub Task 11.4.3: SEO 키워드 검증
- Sub Task 11.4.4: 키워드 밀도 검증
- Sub Task 11.4.5: 제목 길이 검증 (≤60자)
- Sub Task 11.4.6: 링크/헤딩 구조 검증
- Sub Task 11.4.7: 코드 블록 검증
- Sub Task 11.4.8: 메타데이터 검증

실행 순서 결정

의존성 분석:

11.1 (번역 엔진) → 11.2 (코드 블록) 의존
11.2 → 11.3 (키워드) 의존
11.3 → 11.4 (검증) 의존

실행 순서: 11.1 → 11.2 → 11.3 → 11.4 (순차)

핵심 학습

Sub Task 기준:

  1. 1-2시간 안에 완료 가능한 단위
  2. 명확한 입력/출력
  3. 독립적으로 테스트 가능

개발자가 순서를 정하는 이유:

  • AI는 의존성을 완벽히 파악하지 못함
  • 잘못된 순서 = 재작업

🗓️ Day 3-13: 순차 실행 및 검증 (80시간 → 24시간)

실행 원칙

하나씩, 그리고 검증

1. Sub Task 1개 선택
2. Claude Code에게 구현 요청
3. 코드 리뷰 (논리, 의도, 사이드 이펙트)
4. 테스트 작성
5. 통과하면 다음 Sub Task
6. 실패하면 재작업 또는 PRD 수정

사례 1: Epic 11.0 Day 5-7 (AI 번역)

Sub Task 11.2.1: 코드 블록 추출 (30분)

나: "마크다운에서 코드 블록 추출하는 함수 작성해줘.
정규식 사용, 타입은 { code: string, language: string }[]"

Claude: [코드 생성]
```typescript
export function extractCodeBlocks(content: string): CodeBlock[] {
  const regex = /```(\w+)?\n([\s\S]*?)```/g;
  const blocks: CodeBlock[] = [];
  let match;

  while ((match = regex.exec(content)) !== null) {
    blocks.push({
      language: match[1] || 'text',
      code: match[2],
    });
  }

  return blocks;
}

검증 1 – 논리적 정합성:

나: "빈 코드 블록이면?"
Claude: "빈 문자열 반환합니다."
나: "언어 지정 안 하면?"
Claude: "기본값 'text'입니다."

✅ 통과

검증 2 – 의도 일치:

나: "중첩된 코드 블록은? (코드 블록 안의 코드 블록)"
Claude: "현재는 처리 안 됩니다. 필요하신가요?"
나: "마크다운에 그런 경우 없으니 괜찮아."

✅ 통과

검증 3 – 사이드 이펙트:

나: "이 함수가 다른 모듈에 영향 주나?"
Claude: "순수 함수라 side effect 없습니다."

✅ 통과

Sub Task 11.2.3: 번역 후 코드 블록 복원 (1시간)

나: "플레이스홀더를 원본 코드로 치환해줘."

Claude: [코드 생성]
```typescript
export function restoreCodeBlocks(
  translated: string,
  blocks: CodeBlock[]
): string {
  let result = translated;

  blocks.forEach((block, index) => {
    const placeholder = `__CODE_BLOCK_${index}__`;
    const codeBlock = "```" + block.language + "\n" + block.code + "```";
    result = result.replace(placeholder, codeBlock);
  });

  return result;
}

검증 1 – 논리적 정합성:

나: "플레이스홀더가 여러 번 나오면?"
Claude: "replaceAll 써야겠네요."

❌ 실패 → 수정 요청

Claude 수정:

result = result.replaceAll(placeholder, codeBlock);

✅ 통과

검증 2 – 의도 일치:

나: "코드 블록 개수와 플레이스홀더 개수가 안 맞으면?"
Claude: "현재 처리 없습니다. 예외 던지게 할까요?"
나: "응, 그게 안전해."

최종 코드:

export function restoreCodeBlocks(
  translated: string,
  blocks: CodeBlock[]
): string {
  // 플레이스홀더 개수 검증
  const placeholderCount = (translated.match(/__CODE_BLOCK_\d+__/g) || []).length;
  if (placeholderCount !== blocks.length) {
    throw new Error(
      `Mismatch: ${placeholderCount} placeholders vs ${blocks.length} blocks`
    );
  }

  let result = translated;
  blocks.forEach((block, index) => {
    const placeholder = `__CODE_BLOCK_${index}__`;
    const codeBlock = "```" + block.language + "\n" + block.code + "```";
    result = result.replaceAll(placeholder, codeBlock);
  });

  return result;
}

✅ 최종 통과



사례 2: Epic 12.0 Day 9 (이미지 중복 감지) – AI 실수 발견

Sub Task 12.3.1: WordPress 미디어 검색 (2시간)

나: "WordPress 미디어 라이브러리에서 파일명으로 검색하는 함수 작성해줘.
정확히 일치하는 파일만 반환."

Claude: [코드 생성]
```typescript
async findMediaByFilename(filename: string): Promise<MediaItem | null> {
  const media = await this.wp.media().search(filename);

  if (!media || media.length === 0) {
    return null;
  }

  // 정확히 일치하는 파일명 찾기
  const exactMatch = media.find((item: any) => {
    const mediaFilename = item.media_details?.file?.split('/').pop();
    return mediaFilename === filename;
  });

  return exactMatch ? {
    id: exactMatch.id,
    url: exactMatch.source_url,
  } : null;
}

검증 1 – 논리적 정합성:

나: "media_details가 없으면?"
Claude: "Optional chaining으로 처리했습니다."

✅ 통과

검증 2 – 의도 일치:

나: "이 함수를 어디서 쓸 건데?"
Claude: "uploadMedia() 전에 중복 체크용입니다."
나: "그럼 uploadMedia()도 수정해야 하지 않나?"
Claude: "네, 맞습니다!"

AI 실수 발견: 기존 함수 수정 누락

AI 실수 패턴 1: 추가가 아닌 대체

나: "uploadMedia()에 중복 체크 로직 추가해줘."

Claude: [코드 생성]
```typescript
async uploadMedia(filePath: string): Promise<{ id: number; url: string }> {
  // 1. 파일명 추출
  const filename = path.basename(filePath);

  // 2. 중복 체크
  const existing = await this.findMediaByFilename(filename);
  if (existing) {
    return existing;
  }

  // 3. 새로 업로드
  const media = await this.wp.media().file(filePath).create();
  return {
    id: media.id,
    url: media.source_url,
  };
}

검증 3 – 사이드 이펙트:

나: "원래 uploadMedia()에는 title, alt 파라미터가 있었는데?"
Claude: "앗, 제거됐네요. 추가하겠습니다."

문제: AI가 “추가”가 아닌 “대체”함

기존 코드:

async uploadMedia(
  filePath: string,
  title?: string,
  alt?: string
): Promise<{ id: number; url: string }>

AI가 생성한 코드: title, alt 파라미터 삭제됨 ❌

개발자 수정:

나: "기존 파라미터 유지하고, 중복 체크만 추가해줘.
기존 코드:
```typescript
async uploadMedia(
  filePath: string,
  title?: string,
  alt?: string
): Promise<{ id: number; url: string }> {
  const mediaData: Record<string, unknown> = {};
  if (title) mediaData.title = title;
  if (alt) mediaData.alt_text = alt;

  const media = await this.wp.media().file(filePath).create(mediaData);
  return { id: media.id, url: media.source_url };
}

이 코드 앞에 중복 체크만 추가.”

Claude: “네, 기존 로직 앞에 추가하겠습니다.”

async uploadMedia(
  filePath: string,
  title?: string,
  alt?: string
): Promise<{ id: number; url: string }> {
  // NEW: 중복 체크
  const filename = path.basename(filePath);
  const existing = await this.findMediaByFilename(filename);
  if (existing) {
    return existing;
  }

  // EXISTING: 원래 로직 유지
  const mediaData: Record<string, unknown> = {};
  if (title) mediaData.title = title;
  if (alt) mediaData.alt_text = alt;

  const media = await this.wp.media().file(filePath).create(mediaData);
  return { id: media.id, url: media.source_url };
}
✅ 최종 통과

### 핵심 학습: AI 실수 패턴과 대응

**AI가 자주 하는 실수**:
1. **대체 vs 추가 혼동**: 기존 코드를 삭제하고 새로 작성
2. **파라미터 누락**: 기존 함수 시그니처 변경
3. **사이드 이펙트 무시**: 다른 모듈에서 사용하는지 확인 안 함

**대응 방법**:
1. **명확한 지시**: "추가해줘" 대신 "기존 코드 유지하고 앞에 추가해줘"
2. **기존 코드 제공**: "이 코드 앞에" 명시
3. **사이드 이펙트 질문**: "이 함수 어디서 쓰이는지 검색해줘"

**검증이 필수인 이유**:
- AI는 전체 맥락을 완벽히 이해하지 못함
- 개발자가 매번 "논리, 의도, 사이드 이펙트" 체크

---

## 🗓️ Day 11-12: Slug 버그 - 체계적 디버깅

### 문제 발견

```markdown
---
slug: "ai-translation-bilingual-blog"
---

실제 발행된 slug: ai-beonyeogeuro-hanyeong-beullogeu... (한글 음역!)

디버깅 프로세스

1. 문제 명확화

나: "Slug가 frontmatter를 무시하고 있어.
ultrathink로 근본 원인 분석해줘."

2. Claude의 체계적 분석 (Sequential Thinking 9단계)

Thought 1: markdown.ts 파싱 확인
- parseMarkdownFile()에서 metadata.slug = "ai-translation-bilingual-blog" ✅
- frontmatter 정상 파싱

Thought 2: seo.ts 생성 확인
- generateSeoData() 호출
- 발견! 항상 제목에서 slug 재생성 ❌
- customSlug 파라미터가 없음

Thought 3: 근본 원인
- SeoOptions 타입에 slug 필드 없음
- generateSeoData()가 metadata.slug 무시

Thought 4: 영향 범위
- Epic 11.0 번역도 영향 (영문 slug도 잘못 생성됨)
- 4개 파일 수정 필요:
  1. packages/shared/src/types.ts
  2. packages/core/src/seo.ts
  3. packages/core/src/markdown.ts
  4. packages/core/src/translator.ts

3. 수정

파일 1: types.ts

export interface SeoOptions {
  title: string;
  excerpt: string;
  content: string;
  keywords: string[];
  slug?: string; // NEW
  language: 'ko' | 'en';
}

파일 2: seo.ts

export function generateSeoData(options: SeoOptions): SeoData {
  const { slug: customSlug } = options;

  return {
    slug: customSlug || generateSlugFromTitle(options.title), // 우선순위
    // ...
  };
}

파일 3: markdown.ts

const seoData = generateSeoData({
  title: metadata.title,
  excerpt: metadata.excerpt || '',
  content: htmlContent,
  keywords: metadata.tags || [],
  slug: metadata.slug, // 전달
  language: metadata.language,
});

파일 4: translator.ts

const seoData = generateSeoData({
  // ...
  slug: `${originalMetadata.slug}-en`, // 영문은 "-en" 접미사
  // ...
});

4. 검증

pnpm typecheck  # 타입 에러 없음 ✅
pnpm test       # 81 tests passing ✅
blog publish test.md  # Slug 정상 ✅

핵심 학습: 체계적 디버깅

Before (수동 디버깅):

  • 4.5시간 소요
  • “왜 안 되지?” 반복
  • 여러 파일 수정 후 타입 에러

After (Claude의 Sequential Thinking):

  • 30분 소요
  • 9단계 체계적 분석
  • 영향 범위 파악 → 4개 파일 한 번에 수정

개발자의 역할:

  1. “ultrathink로 분석해줘” 요청
  2. 분석 결과 리뷰 (맞는지 검증)
  3. 수정 방향 결정 (우선순위, 트레이드오프)
  4. 최종 검증 (테스트, 타입 체크)

📊 최종 결과

시간 절감 효과

작업 Before After 절감
프로젝트 설계 10시간 4시간 60%
부트스트래핑 10시간 1시간 90%
API 연동 4시간 1시간 75%
AI 번역 엔진 12시간 3시간 75%
품질 검증 8시간 2시간 75%
이미지 처리 14시간 4시간 71%
버그 수정 4.5시간 0.5시간 89%
CLI 완성 4시간 1시간 75%
문서화 6시간 1시간 83%
합계 72.5시간 17.5시간 76%

실제: 80시간 → 24시간 (70% 절감, 기타 작업 포함)

코드 메트릭

  • 타입 안전성: TypeScript 100%
  • 테스트: 81 tests (커버리지 90%+)
  • 패키지: 3개 (cli, core, shared)
  • 빌드 시간: <2초 (tsup)

포스트 발행 시간

  • Before: 2.5시간/포스트
  • After: 15분/포스트
  • 절감: 90%

💡 핵심 학습: AI 시대의 개발 프로세스

1. PRD 없이 코딩 = 재작업 반복

❌ 잘못된 방식:

개발자: "블로그 자동화 만들어줘"
AI: [코드 생성]
개발자: "아니야, 번역도 해줘"
AI: [코드 수정... 기존 코드 깨짐]
개발자: "이미지도 업로드해줘"
AI: [또 수정... 타입 에러]

✅ 올바른 방식:

개발자: [PRD 작성 - 요구사항 명확화]
AI: [PRD 초안 제공]
개발자: [3번 수정 - 논리, 의도, 사이드 이펙트 검증]
개발자: [Task 분해 - 실행 순서 결정]
AI: [Sub Task 1개씩 구현]
개발자: [매번 검증]

차이: 명확한 계획 = 재작업 최소화

2. 1단계씩 검증 = 품질 보증

검증 3단계:

  1. 논리적 정합성: “엣지 케이스 처리했나?”
  2. 의도 일치: “내가 원한 게 이건가?”
  3. 사이드 이펙트: “다른 코드에 영향 없나?”

매 Sub Task마다 검증하지 않으면:

  • 10개 Sub Task 후 버그 발견
  • 어디서 문제인지 찾기 어려움
  • 재작업 시간 >>>

3. AI 실수는 필연

AI가 자주 하는 실수:

  1. 기존 코드 대체 (추가가 아닌)
  2. 파라미터 누락
  3. 사이드 이펙트 무시

대응:

  • “추가해줘” → “기존 코드 유지하고 앞에 추가해줘”
  • 기존 코드 명시적 제공
  • 매번 검증 (논리, 의도, 사이드 이펙트)

4. 개발자는 관리자, AI는 도구

개발자의 역할:

  • 전략적 의사결정 (PRD 수정, Task 순서)
  • 코드 리뷰 (검증 3단계)
  • 최종 품질 책임 (테스트, 타입 체크)

AI의 역할:

  • 초안 작성 (PRD, 코드, 테스트)
  • 반복 작업 자동화 (보일러플레이트)
  • 체계적 분석 (디버깅, Sequential Thinking)

AI가 모든 걸 해주지 않습니다.
개발자가 체계적으로 관리하고, AI를 도구로 활용합니다.


⚠️ 한계와 주의사항

AI의 한계

  1. 전체 맥락 이해 부족

    • 10개 파일 중 1개만 수정해도 됨
    • AI: “10개 파일 다 수정하겠습니다” (불필요한 작업)
  2. 트레이드오프 판단 불가

    • “성능 vs 가독성?”
    • “지금 최적화 vs 나중에?”
    • → 개발자가 결정
  3. 창의적 문제 해결 제한

    • 기존 패턴 조합만
    • 혁신적 아키텍처는 인간의 몫

주의사항

  1. AI 코드 100% 리뷰 필수

    • 보안 취약점 (SQL Injection, XSS)
    • 성능 문제 (O(n²) 알고리즘)
    • 에러 핸들링 누락
  2. 컨텍스트 관리

    • CLAUDE.md 같은 프로젝트 문서
    • PRD, Task List 명시적 제공
  3. 의사결정은 개발자 책임

    • 아키텍처 선택
    • 우선순위 결정
    • 기술 부채 관리

마무리

2주 동안 Claude Code와 함께 블로그 자동화 시스템을 만들었습니다.

수치로 보는 성과:

  • 개발 시간: 80시간 → 24시간 (70% 절감)
  • 포스트 발행: 2.5시간 → 15분 (90% 절감)
  • 테스트: 81 tests (커버리지 90%+)

하지만 가장 큰 수확은 “AI를 도구로 활용하는 법”을 배운 것입니다.

AI는 도구입니다. 강력하지만, 관리가 필요합니다:

  • PRD로 방향을 정하고
  • Task로 실행 계획을 세우고
  • Sub Task로 관리 가능한 단위로 분해하고
  • 매 단계마다 검증하는 것

모두 개발자의 몫입니다.


질문이나 피드백이 있으신가요? 댓글로 남겨주세요!

당신의 AI 협업 프로젝트도 궁금합니다. 🙂


시리즈: