AI는 소프트웨어 개발을 혁신적으로 변화시켰습니다. 이 장에서는 코드 생성, 디버깅, 리뷰 및 개발 워크플로우를 위한 프롬프팅 기법을 다룹니다.

<Callout type="info" title="코딩 파트너로서의 AI">
AI는 코드 생성, 디버깅, 문서화에 탁월하지만, 생성된 코드는 항상 보안성, 정확성, 유지보수성을 검토해야 합니다. 테스트 없이 AI 코드를 배포하지 마세요.
</Callout>

## 코드 생성

### 권장 사항과 주의 사항: 코드 프롬프트

<Compare 
  before={{ label: "❌ 모호한 요청", content: "이메일을 검증하는 함수를 작성해줘." }}
  after={{ label: "✓ 완전한 명세", content: "이메일 주소를 검증하는 Python 함수를 작성해주세요.\n\n입력: string (잠재적 이메일)\n출력: tuple[bool, str | None] - (is_valid, error_message)\n처리 항목: 빈 문자열, None, 유니코드 문자\n정규식 사용, 타입 힌트와 docstring 포함." }}
/>

### 함수 생성

<TryIt compact prompt={`Write a \${language:Python} function that \${description:validates email addresses}.

Requirements:
- Input: \${inputTypes:string (potential email)}
- Output: \${outputType:boolean and optional error message}
- Handle edge cases: \${edgeCases:empty string, None, unicode characters}
- Performance: \${performance:standard}

Include:
- Type hints/annotations
- Docstring with examples
- Input validation
- Error handling`} />

### 클래스/모듈 생성

<TryIt compact prompt={`Create a \${language:Python} class for \${purpose:managing user sessions}.

Class design:
- Name: \${className:SessionManager}
- Responsibility: \${responsibility:handle user session lifecycle}
- Properties: \${properties:session_id, user_id, created_at, expires_at}
- Methods: \${methods:create(), validate(), refresh(), destroy()}

Requirements:
- Follow \${designPattern:Singleton} pattern
- Include proper encapsulation
- Add comprehensive docstrings
- Include usage example

Testing:
- Include unit test skeleton`} />

### API 엔드포인트 생성

<TryIt compact prompt={`Create a REST API endpoint for \${resource:user profiles}.

Framework: \${framework:FastAPI}
Method: \${method:GET}
Path: \${path:/api/users/{id}}

Request:
- Headers: \${headers:Authorization Bearer token}
- Body schema: \${bodySchema:N/A for GET}
- Query params: \${queryParams:include_posts (boolean)}

Response:
- Success: \${successResponse:200 with user object}
- Errors: \${errorResponses:401 Unauthorized, 404 Not Found}

Include:
- Input validation
- Authentication check
- Error handling
- Rate limiting consideration`} />

## 디버깅

<Callout type="tip" title="디버깅 원칙">
항상 **예상 동작**, **실제 동작**, 그리고 **오류 메시지**(있는 경우)를 포함하세요. 더 많은 맥락을 제공할수록 AI가 근본 원인을 더 빨리 파악할 수 있습니다.
</Callout>

### 버그 분석

<TryIt compact prompt={`Debug this code. It should \${expectedBehavior:return the sum of all numbers} but instead \${actualBehavior:returns 0 for all inputs}.

Code:
\${code:paste your code here}

Error message (if any):
\${error:none}

Steps to debug:
1. Identify what the code is trying to do
2. Trace through execution with the given input
3. Find where expected and actual behavior diverge
4. Explain the root cause
5. Provide the fix with explanation`} />

### 오류 메시지 해석

<TryIt compact prompt={`Explain this error and how to fix it:

Error:
\${errorMessage:paste error message or stack trace here}

Context:
- Language/Framework: \${framework:Python 3.11}
- What I was trying to do: \${action:reading a JSON file}
- Relevant code: \${codeSnippet:paste relevant code}

Provide:
1. Plain English explanation of the error
2. Root cause
3. Step-by-step fix
4. How to prevent this in the future`} />

### 성능 디버깅

<TryIt compact prompt={`This code is slow. Analyze and optimize:

Code:
\${code:paste your code here}

Current performance: \${currentPerformance:takes 30 seconds for 1000 items}
Target performance: \${targetPerformance:under 5 seconds}
Constraints: \${constraints:memory limit 512MB}

Provide:
1. Identify bottlenecks
2. Explain why each is slow
3. Suggest optimizations (ranked by impact)
4. Show optimized code
5. Estimate improvement`} />

## 코드 리뷰

### 권장 사항과 주의 사항: 코드 리뷰 프롬프트

<Compare 
  before={{ label: "❌ 일반적인 요청", content: "이 코드를 리뷰해줘." }}
  after={{ label: "✓ 구체적인 기준", content: "풀 리퀘스트를 위해 이 코드를 리뷰해주세요.\n\n확인 사항:\n1. 정확성: 버그, 로직 오류, 엣지 케이스\n2. 보안: 인젝션 위험, 인증 문제\n3. 성능: N+1 쿼리, 메모리 누수\n4. 유지보수성: 네이밍, 복잡도\n\n형식: 🔴 치명적 / 🟡 중요 / 🟢 제안" }}
/>

### 종합 리뷰

<TryIt compact prompt={`Review this code for a pull request.

Code:
\${code:paste your code here}

Review for:
1. **Correctness**: Bugs, logic errors, edge cases
2. **Security**: Vulnerabilities, injection risks, auth issues
3. **Performance**: Inefficiencies, N+1 queries, memory leaks
4. **Maintainability**: Readability, naming, complexity
5. **Best practices**: \${framework:Python/Django} conventions

Format your review as:
🔴 Critical: must fix before merge
🟡 Important: should fix
🟢 Suggestion: nice to have
💭 Question: clarification needed`} />

### 보안 리뷰

<TryIt compact prompt={`Perform a security review of this code:

Code:
\${code:paste your code here}

Check for:
- [ ] Injection vulnerabilities (SQL, XSS, command)
- [ ] Authentication/authorization flaws
- [ ] Sensitive data exposure
- [ ] Insecure dependencies
- [ ] Cryptographic issues
- [ ] Input validation gaps
- [ ] Error handling that leaks info

For each finding:
- Severity: Critical/High/Medium/Low
- Location: Line number or function
- Issue: Description
- Exploit: How it could be attacked
- Fix: Recommended remediation`} />

## 리팩토링

### 코드 스멜 탐지

<TryIt compact prompt={`Analyze this code for code smells and refactoring opportunities:

Code:
\${code:paste your code here}

Identify:
1. Long methods (suggest extraction)
2. Duplicate code (suggest DRY improvements)
3. Complex conditionals (suggest simplification)
4. Poor naming (suggest better names)
5. Tight coupling (suggest decoupling)

For each issue, show before/after code.`} />

### 디자인 패턴 적용

<TryIt compact prompt={`Refactor this code using the \${patternName:Factory} pattern.

Current code:
\${code:paste your code here}

Goals:
- \${whyPattern:decouple object creation from usage}
- \${benefits:easier testing and extensibility}

Provide:
1. Explanation of the pattern
2. How it applies here
3. Refactored code
4. Trade-offs to consider`} />

## 테스팅

### 단위 테스트 생성

<TryIt compact prompt={`Write unit tests for this function:

Function:
\${code:paste your function here}

Testing framework: \${testFramework:pytest}

Cover:
- Happy path (normal inputs)
- Edge cases (empty, null, boundary values)
- Error cases (invalid inputs)
- \${specificScenarios:concurrent access, large inputs}

Format: Arrange-Act-Assert pattern
Include: Descriptive test names`} />

### 테스트 케이스 생성

<TryIt compact prompt={`Generate test cases for this feature:

Feature: \${featureDescription:user registration with email verification}
Acceptance criteria: \${acceptanceCriteria:user can sign up, receives email, can verify account}

Provide test cases in this format:

| ID | Scenario | Given | When | Then | Priority |
|----|----------|-------|------|------|----------|
| TC01 | ... | ... | ... | ... | High |`} />

## 아키텍처 및 설계

### 시스템 설계

<TryIt compact prompt={`Design a system for \${requirement:real-time chat application}.

Constraints:
- Expected load: \${expectedLoad:10,000 concurrent users}
- Latency requirements: \${latency:< 100ms message delivery}
- Availability: \${availability:99.9%}
- Budget: \${budget:moderate, prefer open source}

Provide:
1. High-level architecture diagram (ASCII/text)
2. Component descriptions
3. Data flow
4. Technology choices with rationale
5. Scaling strategy
6. Trade-offs and alternatives considered`} />

### 데이터베이스 스키마 설계

<TryIt compact prompt={`Design a database schema for \${application:e-commerce platform}.

Requirements:
- \${feature1:User accounts with profiles and addresses}
- \${feature2:Product catalog with categories and variants}
- \${feature3:Orders with line items and payment tracking}

Provide:
1. Entity-relationship description
2. Table definitions with columns and types
3. Indexes for common queries
4. Foreign key relationships
5. Sample queries for key operations`} />

## 문서화 생성

### API 문서화

<TryIt compact prompt={`Generate API documentation from this code:

Code:
\${code:paste your endpoint code here}

Format: \${format:OpenAPI/Swagger YAML}

Include:
- Endpoint description
- Request/response schemas
- Example requests/responses
- Error codes
- Authentication requirements`} />

### 인라인 문서화

<TryIt compact prompt={`Add comprehensive documentation to this code:

Code:
\${code:paste your code here}

Add:
- File/module docstring (purpose, usage)
- Function/method docstrings (params, returns, raises, examples)
- Inline comments for complex logic only
- Type hints if missing

Style: \${docStyle:Google}`} />

## prompts.chat의 프롬프트 템플릿

### 시니어 개발자로 활동하기

```
당신이 시니어 소프트웨어 개발자로 활동해 주셨으면 합니다. 제가 코드를 
제공하고 이에 대해 질문하겠습니다. 코드를 리뷰하고, 개선 사항을 제안하며, 
개념을 설명하고, 문제를 디버깅하는 것을 도와주세요. 당신의 답변은 
교육적이어야 하며, 제가 더 나은 개발자가 되도록 도와주세요.
```

### 코드 리뷰어로 활동하기

```
당신이 코드 리뷰어로 활동해 주셨으면 합니다. 제가 코드 변경 사항이 포함된 
풀 리퀘스트를 제공하면, 철저하게 리뷰해 주세요. 버그, 보안 문제, 성능 
문제, 모범 사례 준수 여부를 확인해 주세요. 개발자가 발전할 수 있도록 
건설적인 피드백을 제공해 주세요.
```

### 소프트웨어 아키텍트로 활동하기

```
당신이 소프트웨어 아키텍트로 활동해 주셨으면 합니다. 제가 시스템 요구 
사항과 제약 조건을 설명하면, 확장 가능하고 유지보수하기 쉬운 아키텍처를 
설계해 주세요. 설계 결정, 트레이드오프를 설명하고, 필요한 경우 다이어그램을 
제공해 주세요.
```

## 개발 워크플로우 통합

### 커밋 메시지 생성

<TryIt compact prompt={`Generate a commit message for these changes:

Diff:
\${diff:paste git diff here}

Format: Conventional Commits
Type: \${commitType:feat}

Provide:
- Subject line (50 chars max, imperative mood)
- Body (what and why, wrapped at 72 chars)
- Footer (references issues if applicable)`} />

### PR 설명 생성

<TryIt compact prompt={`Generate a pull request description:

Changes:
\${changes:list your changes or paste diff summary}

Template:
## Summary
Brief description of changes

## Changes Made
- Change 1
- Change 2

## Testing
- [ ] Unit tests added/updated
- [ ] Manual testing completed

## Screenshots (if UI changes)
placeholder

## Related Issues
Closes #\${issueNumber:123}`} />

## 요약

<Callout type="tip" title="핵심 기법">
전체 맥락(언어, 프레임워크, 제약 조건)을 포함하고, 요구 사항을 정확하게 명시하며, 특정 출력 형식을 요청하고, 코드와 함께 설명을 요청하며, 처리할 엣지 케이스를 포함하세요.
</Callout>

<Quiz 
  question="AI에게 코드 디버깅을 요청할 때 가장 중요하게 포함해야 할 요소는 무엇인가요?"
  options={[
    "프로그래밍 언어만",
    "예상 동작, 실제 동작, 오류 메시지",
    "코드 스니펫만",
    "파일 이름"
  ]}
  correctIndex={1}
  explanation="디버깅에는 맥락이 필요합니다: 무엇이 일어나야 하는지 vs. 실제로 무엇이 일어나는지. 오류 메시지와 스택 트레이스는 AI가 정확한 문제를 빠르게 파악하는 데 도움이 됩니다."
/>

AI는 강력한 코딩 파트너입니다—코드 생성, 리뷰, 디버깅, 문서화에 활용하되 아키텍처적 판단은 직접 유지하세요.
