Claude Code Master Guide
โ€” SAL Grid Edition


SAL Grid ๊ตฌ์กฐ ์•ˆ๋‚ด

SAL Grid๋Š” 3์ฐจ์› ์ง€์‹ ๊ด€๋ฆฌ ์ฒด๊ณ„์ž…๋‹ˆ๋‹ค:

Stage ์ •์˜ (3๋‹จ๊ณ„)

ID์ด๋ฆ„์˜๋ฌธ๋Œ€์ƒ
S1์ดˆ๊ธ‰Beginner๋น„๊ฐœ๋ฐœ์ž๋ถ€ํ„ฐ ํ•ต์‹ฌ ๊ฐœ๋…๊ณผ ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•
S2์ค‘๊ธ‰Intermediate์‹ค๋ฌด ํ”„๋กœ์ ํŠธ ์ง์ ‘ ์ ์šฉ
S3๊ณ ๊ธ‰Advanced๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ, ์ž๋™ํ™”, ๋Œ€๊ทœ๋ชจ ์šด์˜

Area ์ •์˜ (6์˜์—ญ)

ID์ด๋ฆ„์˜๋ฌธํ•ต์‹ฌ ์งˆ๋ฌธ
CO๊ฐœ๋…Concept์ด๊ฒƒ์€ ๋ฌด์—‡์ด๊ณ  ์™œ ํ•˜๋Š”๊ฐ€?
ST์ŠคํŠธ๋Ÿญ์ฒ˜Structure์–ด๋–ค ํ‹€/๊ตฌ์กฐ์—์„œ ์ผํ•˜๋Š”๊ฐ€?
WF์›Œํฌํ”Œ๋กœ์šฐWorkflow๊ทธ ์•ˆ์—์„œ ์–ด๋–ป๊ฒŒ ์ง„ํ–‰ํ•˜๋Š”๊ฐ€?
TOํŒ€์šด์šฉTeam Operations๋ˆ„๊ตฌ์™€/๋ฌด์—‡๊ณผ ํ•จ๊ป˜ ์ผํ•˜๋Š”๊ฐ€?
QCํ’ˆ์งˆ๊ด€๋ฆฌQuality Control์–ด๋–ป๊ฒŒ ์•ˆ์ „ํ•˜๊ณ  ์ข‹๊ฒŒ ๋งŒ๋“œ๋Š”๊ฐ€?
CM๋น„์šฉ๊ด€๋ฆฌCost Management์–ด๋–ป๊ฒŒ ํšจ์œจ์ ์œผ๋กœ ์“ฐ๋Š”๊ฐ€?

18์…€ ๊ทธ๋ฆฌ๋“œ ๋งต

CO๊ฐœ๋…ST์ŠคํŠธ๋Ÿญ์ฒ˜WF์›Œํฌํ”Œ๋กœ์šฐTOํŒ€์šด์šฉQCํ’ˆ์งˆ๊ด€๋ฆฌCM๋น„์šฉ๊ด€๋ฆฌ
S1์ดˆ๊ธ‰S1COS1STS1WFS1TOS1QCS1CM
S2์ค‘๊ธ‰S2COS2STS2WFS2TOS2QCS2CM
S3๊ณ ๊ธ‰S3COS3STS3WFS3TOS3QCS3CM

S1 ์ดˆ๊ธ‰ (Beginner)


S1CO โ€” ๊ฐœ๋… (Concept)

[S1CO1(์„น์…˜01)] ๋ฐ”์ด๋ธŒ ์ฝ”๋”ฉ์ด๋ž€?

์ œ1์žฅ: Claude Code๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

"The best way to predict the future is to invent it." - Alan Kay

์ด ์žฅ์—์„œ๋Š” Claude Code๊ฐ€ ๋ฌด์—‡์ธ์ง€, ์™œ ์ค‘์š”ํ•œ์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์—ญ์‚ฌ๋Š” ๋Š์ž„์—†๋Š” ์ถ”์ƒํ™”์™€ ๋„๊ตฌ ๋ฐœ์ „์˜ ์—ญ์‚ฌ์ž…๋‹ˆ๋‹ค. ๊ธฐ๊ณ„์–ด์—์„œ ์–ด์…ˆ๋ธ”๋ฆฌ๋กœ, ๊ณ ๊ธ‰ ์–ธ์–ด์—์„œ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๊ทธ๋ฆฌ๊ณ  ์ด์ œ AI์™€ ์ž์—ฐ์–ด๋กœ ๋Œ€ํ™”ํ•˜๋ฉฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์ƒˆ๋กœ์šด ์‹œ๋Œ€์— ๋„๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

Claude Code๋Š” ์ด๋Ÿฐ ๋ฐœ์ „์˜ ์—ฐ์žฅ์„ ์ƒ์— ์žˆ๋Š” ํ˜์‹ ์ ์ธ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด ๊ฐœ๋ฐœ ๋ฐฉ์‹์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ณ , ๋” ํšจ์œจ์ ์ด๊ณ  ์ƒ์‚ฐ์ ์ธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

1.1 ์ „ํ†ต์ ์ธ ๊ฐœ๋ฐœ ๋„๊ตฌ์˜ ํ•œ๊ณ„

ํ˜„์žฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์˜ ๋„์ „ ๊ณผ์ œ

๋จผ์ € Claude Code๊ฐ€ ์™œ ํ•„์š”ํ•œ์ง€ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด, ํ˜„์žฌ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ง๋ฉดํ•œ ์ฃผ์š” ์–ด๋ ค์›€๋“ค์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

1. ํญ๋ฐœ์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ๋ณต์žก์„ฑ

ํ˜„๋Œ€์˜ ์†Œํ”„ํŠธ์›จ์–ด๋Š” ์ •๋ง ๋ณต์žกํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด

์ด๋Ÿฐ ๋ณต์žก์„ฑ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ๋งˆ๋‹ค ์–ด๋””์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์•ผ ํ• ์ง€ ๋ง‰๋ง‰ํ•จ์„ ๋А๋ผ๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด ๋งŽ์Šต๋‹ˆ๋‹ค.

2. ๋Š์ž„์—†์ด ๋ณ€ํ™”ํ•˜๋Š” ๊ธฐ์ˆ  ์Šคํƒ

๊ธฐ์ˆ  ๋ณ€ํ™”์˜ ์†๋„๋„ ์ •๋ง ๋น ๋ฆ…๋‹ˆ๋‹ค.

๋น ๋ฅด๊ฒŒ ๋ณ€ํ™”ํ•˜๋Š” ๊ธฐ์ˆ  ํ™˜๊ฒฝ์—์„œ ์ง€์†์ ์ธ ํ•™์Šต๊ณผ ์ ์‘์ด ํ•„์š”ํ•œ ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค.

3. ๋ฐ˜๋ณต์ ์ด๊ณ  ์ง€๋ฃจํ•œ ์ž‘์—…๋“ค

๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด ์ฐฝ์˜์ ์ธ ๋ถ€๋ถ„๋ณด๋‹ค๋Š” ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์— ์‹œ๊ฐ„์„ ๋งŽ์ด ์“ฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ์ž‘์—…๋“ค์€ ํ•„์š”ํ•˜์ง€๋งŒ, ๊ฐœ๋ฐœ์ž์˜ ์ฐฝ์˜์ ์ธ ์—๋„ˆ์ง€๋ฅผ ์†Œ๋ชจ์‹œํ‚ค๋Š” ์š”์ธ์ด ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

IDE์˜ ์ง„ํ™”์™€ ํ•œ๊ณ„

ํ†ตํ•ฉ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ(IDE)์€ ์ง€๋‚œ ์ˆ˜์‹ญ ๋…„๊ฐ„ ๊พธ์ค€ํžˆ ๋ฐœ์ „ํ•ด์™”์Šต๋‹ˆ๋‹ค.

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}}}%%
timeline
    title IDE ์ง„ํ™”์˜ ์—ญ์‚ฌ
    
    1980๋…„๋Œ€ : ํ…์ŠคํŠธ ์—๋””ํ„ฐ
             : ๋ณ„๋„ ์ปดํŒŒ์ผ๋Ÿฌ
             : ๋ช…๋ นํ–‰ ๊ธฐ๋ฐ˜
    
    1990๋…„๋Œ€ : ํ†ตํ•ฉ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ
             : ๋ฌธ๋ฒ• ๊ฐ•์กฐ
             : ๋‚ด์žฅ ๋””๋ฒ„๊ฑฐ
             : ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ
    
    2000๋…„๋Œ€ : ์ธํ…”๋ฆฌ์„ผ์Šค
             : ์ž๋™ ๋ฆฌํŒฉํ† ๋ง
             : ์ฝ”๋“œ ์™„์„ฑ
             : ๋ฒ„์ „ ์ œ์–ด ํ†ตํ•ฉ
    
    2010๋…„๋Œ€ : ํ”Œ๋Ÿฌ๊ทธ์ธ ์ƒํƒœ๊ณ„
             : ํด๋ผ์šฐ๋“œ ํ†ตํ•ฉ
             : ์‹ค์‹œ๊ฐ„ ํ˜‘์—…
             : ๋ชจ๋ฐ”์ผ ์ง€์›
    
    2020๋…„๋Œ€ : AI ์ฝ”๋“œ ์™„์„ฑ
             : ์ง€๋Šฅํ˜• ์ œ์•ˆ
             : ์ž๋™ ํ…Œ์ŠคํŠธ ์ƒ์„ฑ
             : ์ž์—ฐ์–ด ์ธํ„ฐํŽ˜์ด์Šค

ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ํ•œ๊ณ„๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

  1. ์ปจํ…์ŠคํŠธ ์ดํ•ด ๋ถ€์กฑ: IDE๋Š” ์ฝ”๋“œ์˜ ๋ฌธ๋ฒ•์€ ์ดํ•ดํ•˜์ง€๋งŒ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด๋‚˜ ์˜๋„๋Š” ํŒŒ์•…ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.
  2. ์ˆ˜๋™์ ์ธ ๋„๊ตฌ: ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ์š”์ฒญํ•ด์•ผ๋งŒ ๋„์›€์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  3. ๋‹จํŽธ์ ์ธ ์ง€์›: ์ฝ”๋“œ ์ž‘์„ฑ, ํ…Œ์ŠคํŠธ, ๋ฌธ์„œํ™”, ๋ฐฐํฌ ๋“ฑ์ด ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

1.2 AI ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋“ฑ์žฅ

ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์žฌ์ •์˜

์ „ํ†ต์ ์ธ ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ

AI ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ

AI ๊ฐœ๋ฐœ ๋„๊ตฌ์˜ ์ŠคํŽ™ํŠธ๋Ÿผ

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}, "flowchart": {"htmlLabels": false, "useMaxWidth": false}}}%%
graph LR
    subgraph matrix [" "]
        direction LR
        
        subgraph level1 ["๊ธฐ๋ณธ ์ง€์›"]
            A1["์ž๋™์™„์„ฑ<br/>GitHub Copilot"]
            A2["์ฝ”๋“œ ์ƒ์„ฑ<br/>Tabnine"]
        end
        
        subgraph level2 ["๊ณ ๊ธ‰ ์ง€์›"]
            B1["๋Œ€ํ™”ํ˜• AI<br/>Claude Code"]
            B2["์ž์œจ ์—์ด์ „ํŠธ<br/>Future Tech"]
        end
        
        A1 -.->|์ง„ํ™”| A2
        A2 -.->|๋„์•ฝ| B1
        B1 -.->|๋ฐœ์ „| B2
    end
    
    classDef current fill:#f1f5f9,stroke:#475569,stroke-width:2px,color:#1e293b
    classDef future fill:#f8fafc,stroke:#94a3b8,stroke-width:2px,stroke-dasharray: 5 5,color:#64748b
    classDef basic fill:#f8fafc,stroke:#cbd5e1,stroke-width:1px,color:#64748b
    classDef highlight fill:#e2e8f0,stroke:#334155,stroke-width:3px,color:#0f172a
    
    class B1 highlight
    class B2 future
    class A1,A2 basic

Claude Code๋Š” '๋Œ€ํ™”ํ˜• ์–ด์‹œ์Šคํ„ดํŠธ' ์˜์—ญ์—์„œ ๊ฐ€์žฅ ์ง„๋ณด๋œ ํ˜•ํƒœ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

1.3 Claude Code์˜ ํ•ต์‹ฌ ์ฒ ํ•™

1. ์œ ์—ฐ์„ฑ (Flexibility)

Claude Code๋Š” ํŠน์ • ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ฐ•์ œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

bash
# ๋‹ค์–‘ํ•œ ์ ‘๊ทผ ๋ฐฉ์‹ ๋ชจ๋‘ ๊ฐ€๋Šฅ
claude "๋ฒ„๊ทธ๋ฅผ ์ฐพ์•„์„œ ์ˆ˜์ •ํ•ด์ค˜"
claude "TDD ๋ฐฉ์‹์œผ๋กœ ์ƒˆ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์ค˜"
claude "์ด ์ฝ”๋“œ๋ฅผ ํ•จ์ˆ˜ํ˜• ์Šคํƒ€์ผ๋กœ ๋ฆฌํŒฉํ† ๋งํ•ด์ค˜"
claude "์•„ํ‚คํ…์ฒ˜๋ฅผ ๋ถ„์„ํ•˜๊ณ  ๊ฐœ์„ ์ ์„ ์ œ์•ˆํ•ด์ค˜"

2. ํˆฌ๋ช…์„ฑ (Transparency)

๋ชจ๋“  ์ž‘์—… ๊ณผ์ •์ด ํˆฌ๋ช…ํ•˜๊ฒŒ ๊ณต๊ฐœ๋ฉ๋‹ˆ๋‹ค.

bash
# Claude Code์˜ ์ž‘์—… ๊ณผ์ •์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธ
> ํŒŒ์ผ ํƒ์ƒ‰ ์ค‘: src/components/
> ์ฝ”๋“œ ๋ถ„์„ ์ค‘: UserProfile.jsx
> ์ˆ˜์ • ์‚ฌํ•ญ ์ ์šฉ ์ค‘...
> ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์ค‘...

3. ํ˜‘์—… (Collaboration)

AI๋Š” ๋„๊ตฌ๊ฐ€ ์•„๋‹Œ ๋™๋ฃŒ์ž…๋‹ˆ๋‹ค.

4. ๋งฅ๋ฝ ์ดํ•ด (Context Awareness)

์ „์ฒด ํ”„๋กœ์ ํŠธ ๋งฅ๋ฝ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#334155", "primaryBorderColor": "#e2e8f0"}, "mindmap": {"htmlLabels": false, "useMaxWidth": false}}}%%
mindmap
  root((๋งฅ๋ฝ ์ดํ•ด))
    ํ”„๋กœ์ ํŠธ ๋ถ„์„
      ํŒŒ์ผ ๊ตฌ์กฐ ํƒ์ƒ‰
      ์˜์กด์„ฑ ๋งคํ•‘
      ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด ์ธ์‹
    ์ปจ๋ฒค์…˜ ํ•™์Šต
      ์ฝ”๋”ฉ ์Šคํƒ€์ผ ๋ถ„์„
      ๋„ค์ด๋ฐ ๊ทœ์น™ ํŒŒ์•…
      ํฌ๋งทํŒ… ํŒจํ„ด ์ธ์‹
    ๋กœ์ง ์ดํ•ด
      ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ
      ๋ฐ์ดํ„ฐ ํ”Œ๋กœ์šฐ
      ์—๋Ÿฌ ์ฒ˜๋ฆฌ ํŒจํ„ด
    ์†”๋ฃจ์…˜ ์ œ๊ณต
      ์ตœ์ ํ™”๋œ ๊ตฌํ˜„
      ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค ์ ์šฉ
      ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์„ค๊ณ„

1.4 ๋‹ค๋ฅธ AI ์ฝ”๋”ฉ ๋„๊ตฌ์™€์˜ ์ฐจ๋ณ„์ 

GitHub Copilot๊ณผ์˜ ๋น„๊ต

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8"}, "flowchart": {"htmlLabels": false, "useMaxWidth": false}}}%%
graph LR
    subgraph comparison [" "]
        direction TB
        
        subgraph copilot ["GitHub Copilot"]
            direction TB
            A1["์ธ๋ผ์ธ ์ž๋™์™„์„ฑ<br/>๊ฐ„๋‹จํ•œ ์ œ์•ˆ"]
            A2["ํ˜„์žฌ ํŒŒ์ผ ์ค‘์‹ฌ<br/>์ œํ•œ์  ์ปจํ…์ŠคํŠธ"]
            A3["์ฝ”๋“œ ์ž‘์„ฑ<br/>๋‹จ์ผ ๊ธฐ๋Šฅ"]
            A4["์ œํ•œ์  ์„ค์ •<br/>๊ธฐ๋ณธ ์˜ต์…˜๋งŒ"]
            A5["๋‚ฎ์€ ํ•™์Šต ๊ณก์„ <br/>์ฆ‰์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ"]
        end
        
        subgraph claude ["Claude Code"]
            direction TB
            B1["๋Œ€ํ™”ํ˜• ํ˜‘์—…<br/>์ž์—ฐ์–ด ์ธํ„ฐํŽ˜์ด์Šค"]
            B2["์ „์ฒด ํ”„๋กœ์ ํŠธ<br/>์™„์ „ํ•œ ์ปจํ…์ŠคํŠธ"]
            B3["์ „์ฒด ๋ผ์ดํ”„์‚ฌ์ดํด<br/>์„ค๊ณ„๋ถ€ํ„ฐ ๋ฐฐํฌ๊นŒ์ง€"]
            B4["์™„์ „ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•<br/>CLAUDE.md ํ™œ์šฉ"]
            B5["์ ์‘ํ˜• ํ•™์Šต<br/>์ ์ง„์  ๋งˆ์Šคํ„ฐ๋ฆฌ"]
        end
        
        A1 -.->|vs| B1
        A2 -.->|vs| B2
        A3 -.->|vs| B3
        A4 -.->|vs| B4
        A5 -.->|vs| B5
    end
    
    classDef copilotStyle fill:#f1f5f9,stroke:#64748b,stroke-width:1px,color:#475569
    classDef claudeStyle fill:#e2e8f0,stroke:#334155,stroke-width:2px,color:#1e293b
    
    class A1,A2,A3,A4,A5 copilotStyle
    class B1,B2,B3,B4,B5 claudeStyle
ํŠน์ง•GitHub CopilotClaude Code
์ž‘๋™ ๋ฐฉ์‹์ธ๋ผ์ธ ์ž๋™์™„์„ฑ๋Œ€ํ™”ํ˜• ์ƒํ˜ธ์ž‘์šฉ
์ปจํ…์ŠคํŠธํ˜„์žฌ ํŒŒ์ผ ์ค‘์‹ฌ์ „์ฒด ํ”„๋กœ์ ํŠธ
์ž‘์—… ๋ฒ”์œ„์ฝ”๋“œ ์ž‘์„ฑ์„ค๊ณ„, ๊ตฌํ˜„, ํ…Œ์ŠคํŠธ, ๋ฐฐํฌ
์ปค์Šคํ„ฐ๋งˆ์ด์ง•์ œํ•œ์ ์™„์ „ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ๊ฐ€๋Šฅ
ํ•™์Šต ๊ณก์„ ๋‚ฎ์Œ์ค‘๊ฐ„

ChatGPT์™€์˜ ๋น„๊ต

ํŠน์ง•ChatGPTClaude Code
ํŒŒ์ผ ์‹œ์Šคํ…œ ์ ‘๊ทผ๋ถˆ๊ฐ€๋Šฅ์™„์ „ํ•œ ์ ‘๊ทผ
์ฝ”๋“œ ์‹คํ–‰์ œํ•œ์ ์ง์ ‘ ์‹คํ–‰ ๊ฐ€๋Šฅ
์ง€์†์„ฑ๋Œ€ํ™”๋ณ„ ๋ฆฌ์…‹ํ”„๋กœ์ ํŠธ ์ปจํ…์ŠคํŠธ ์œ ์ง€
๋„๊ตฌ ํ†ตํ•ฉ์—†์ŒGit, ํ…Œ์ŠคํŠธ, ๋นŒ๋“œ ๋„๊ตฌ ๋“ฑ

Claude Code๋งŒ์˜ ๋…ํŠนํ•œ ๊ธฐ๋Šฅ

1. CLAUDE.md๋ฅผ ํ†ตํ•œ ํ”„๋กœ์ ํŠธ ๋งž์ถคํ™”

markdown
# ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์˜ ๊ทœ์น™
- ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋Š” ํ•จ์ˆ˜ํ˜•์œผ๋กœ ์ž‘์„ฑ
- ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€ 80% ์ด์ƒ ์œ ์ง€
- ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋Š” conventional commits ๋”ฐ๋ฅด๊ธฐ

2. ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ ์ž…๋ ฅ ์ง€์›

3. ์ง„์ •ํ•œ ํ’€์Šคํƒ ์ง€์›

bash
# ํ”„๋ก ํŠธ์—”๋“œ๋ถ€ํ„ฐ ๋ฐฐํฌ๊นŒ์ง€ ํ•œ ๋ฒˆ์—
claude "์‚ฌ์šฉ์ž ์ธ์ฆ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์–ด์ค˜. React ํ”„๋ก ํŠธ์—”๋“œ, Node.js ๋ฐฑ์—”๋“œ, PostgreSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, Docker ์ปจํ…Œ์ด๋„ˆํ™”๊นŒ์ง€"

์‹ค์ œ ์‚ฌ๋ก€: 30๋ถ„ ๋งŒ์— ๋งŒ๋“  ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ์•ฑ

ํ•œ ์Šคํƒ€ํŠธ์—… ๊ฐœ๋ฐœ์ž์˜ ๊ฒฝํ—˜๋‹ด

"์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•ด์•ผ ํ–ˆ๋Š”๋ฐ, ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๊ธฐ๋Šฅ์ด ํ•ต์‹ฌ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
๋ณดํ†ต์ด๋ผ๋ฉด ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์ผ์ฃผ์ผ์€ ๊ฑธ๋ ธ์„ ํ…๋ฐ,
Claude Code์™€ ํ•จ๊ป˜ 30๋ถ„ ๋งŒ์— ์ž‘๋™ํ•˜๋Š” ํ”„๋กœํ† ํƒ€์ž…์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

๋” ๋†€๋ผ์šด ๊ฑด, ์ฝ”๋“œ ํ’ˆ์งˆ์ด ์ œ๊ฐ€ ์ง์ ‘ ์ž‘์„ฑํ•œ ๊ฒƒ๋ณด๋‹ค ๋‚˜์•˜๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.
์—๋Ÿฌ ํ•ธ๋“ค๋ง, ๋ณด์•ˆ, ํ™•์žฅ์„ฑ๊นŒ์ง€ ๊ณ ๋ ค๋˜์–ด ์žˆ์—ˆ์ฃ ."

์ด๊ฒƒ์ด ๊ฐ€๋Šฅํ–ˆ๋˜ ์ด์œ 

  1. Claude Code๊ฐ€ ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์˜ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค๋ฅผ ์•Œ๊ณ  ์žˆ์Œ
  2. ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ์ž๋™์œผ๋กœ ํŒŒ์•…ํ•˜๊ณ  ์ ์ ˆํžˆ ํ†ตํ•ฉ
  3. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊นŒ์ง€ ํ•จ๊ป˜ ์ƒ์„ฑ
  4. ์ž ์žฌ์  ๋ฌธ์ œ์ ์„ ์‚ฌ์ „์— ์ง€์ ํ•˜๊ณ  ํ•ด๊ฒฐ

๋งˆ์น˜๋ฉฐ

Claude Code๋Š” ๋‹จ์ˆœํ•œ ๋„๊ตฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐœ๋ฐœ ๋ฐฉ์‹์˜ ํŒจ๋Ÿฌ๋‹ค์ž„ ์ „ํ™˜์ž…๋‹ˆ๋‹ค.

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8"}, "flowchart": {"htmlLabels": false, "useMaxWidth": false}}}%%
flowchart LR
    subgraph before ["์ „ํ†ต์  ๊ฐœ๋ฐœ ๋ฐฉ์‹"]
        direction TB
        A1["๊ฐœ๋ฐœ์ž๊ฐ€ ๋ชจ๋“  ์„ธ๋ถ€์‚ฌํ•ญ์„<br/>์ง์ ‘ ๊ตฌํ˜„"]
        A2["๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์—<br/>์‹œ๊ฐ„ ์†Œ๋ชจ"]
        A3["์ƒˆ๋กœ์šด ๊ธฐ์ˆ  ํ•™์Šต์—<br/>๋†’์€ ์ง„์ž… ์žฅ๋ฒฝ"]
        A4["๋А๋ฆฐ ํ”„๋กœํ† ํƒ€์ดํ•‘<br/>์‚ฌ์ดํด"]
    end
    
    subgraph transition ["์ „ํ™˜์ "]
        T["Claude Code<br/>๋„์ž…"]
    end
    
    subgraph after ["ํ˜์‹ ์  ๊ฐœ๋ฐœ ๋ฌธํ™”"]
        direction TB
        B1["๊ฐœ๋ฐœ์ž๋Š” '๋ฌด์—‡์„'<br/>๋งŒ๋“ค์ง€์— ์ง‘์ค‘"]
        B2["AI๊ฐ€ '์–ด๋–ป๊ฒŒ'<br/>๊ตฌํ˜„ํ• ์ง€๋ฅผ ๋„์›€"]
        B3["๋น ๋ฅธ ์‹คํ—˜๊ณผ<br/>๊ฒ€์ฆ ๊ฐ€๋Šฅ"]
        B4["์ง€์†์ ์ธ ํ•™์Šต๊ณผ<br/>์„ฑ์žฅ"]
    end
    
    before --> transition
    transition --> after
    
    A1 -.->|๋ณ€ํ™”| B1
    A2 -.->|์ž๋™ํ™”| B2
    A3 -.->|๊ฐ€์†ํ™”| B3
    A4 -.->|์ตœ์ ํ™”| B4
    
    classDef beforeStyle fill:#f8fafc,stroke:#64748b,stroke-width:1px,color:#64748b
    classDef afterStyle fill:#e2e8f0,stroke:#334155,stroke-width:2px,color:#1e293b
    classDef transitionStyle fill:#f1f5f9,stroke:#475569,stroke-width:3px,color:#0f172a
    
    class A1,A2,A3,A4 beforeStyle
    class B1,B2,B3,B4 afterStyle
    class T transitionStyle

๋‹ค์Œ ์žฅ์—์„œ๋Š” Claude Code๋ฅผ ์‹ค์ œ๋กœ ์„ค์น˜ํ•˜๊ณ  ์ฒซ ๋ฒˆ์งธ ๋ช…๋ น์„ ์‹คํ–‰ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. AI์™€ ํ•จ๊ป˜ํ•˜๋Š” ๊ฐœ๋ฐœ์˜ ์ƒˆ๋กœ์šด ์—ฌ์ •์„ ์‹œ์ž‘ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


[S1CO2(์„น์…˜25a)] ๋น„๊ฐœ๋ฐœ์ž ๊ฐ€์ด๋“œ โ€” ๊ฐœ๋…ํŽธ

ํ•™์Šต ๋ชฉํ‘œ

์ด ์žฅ์„ ์™„๋ฃŒํ•˜๋ฉด ๋‹ค์Œ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ์š”

Claude Code๋Š” ๋‹จ์ˆœํ•œ ๊ฐœ๋ฐœ ๋„๊ตฌ๋ฅผ ๋„˜์–ด์„œ ์กฐ์ง ์ „๋ฐ˜์˜ ๋ฌธ์ œ ํ•ด๊ฒฐ๊ณผ ์—…๋ฌด ์ž๋™ํ™”๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๋ฉ€ํ‹ฐ-์—ญํ•  ์—์ด์ „ํŠธ์ž…๋‹ˆ๋‹ค. Anthropic์˜ ์‹ค์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ๊ฐ ํŒ€์ด ์–ด๋–ป๊ฒŒ ์—…๋ฌด ํŠน์„ฑ์— ๋งž์ถฐ Claude Code๋ฅผ ์ตœ์ ํ™”ํ•˜์—ฌ ํ™œ์šฉํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด ์žฅ์—์„œ๋Š” ๊ฐœ๋ฐœํŒ€๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ ๊ณผํ•™, ๋งˆ์ผ€ํŒ…, ๋””์ž์ธ, ๋ฒ•๋ฌด ๋“ฑ ๋‹ค์–‘ํ•œ ๋ถ€์„œ์˜ ์‹ค์ œ ํ™œ์šฉ ์‚ฌ๋ก€๋ฅผ ๋ถ„์„ํ•˜์—ฌ, ์—ฌ๋Ÿฌ๋ถ„์˜ ์กฐ์ง์—์„œ Claude Code๋ฅผ ๋„์ž…ํ•˜๊ณ  ํ™•์‚ฐํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๋ฐฉ๋ฒ•์„ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค.

13.10 ๋ฒ•๋ฌด ํŒ€ - ๋น„๊ฐœ๋ฐœ์ž์˜ ๋„๊ตฌ ๊ฐœ๋ฐœ

๋ฒ•๋ฌดํŒ€์€ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์ด ์ „ํ˜€ ์—†์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  Claude Code๋ฅผ ํ†ตํ•ด ๋งž์ถคํ˜• ๋ฒ•๋ฌด ๋„๊ตฌ๋ฅผ ์ง์ ‘ ๊ฐœ๋ฐœํ•˜์—ฌ ์—…๋ฌด ํšจ์œจ์„ฑ์„ ํ˜์‹ ์ ์œผ๋กœ ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฒ•๋ฌด ํŠนํ™” ๋„๊ตฌ ๊ฐœ๋ฐœ

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}, "flowchart": {"htmlLabels": false, "useMaxWidth": false}}}%%
flowchart TD
    A[๋ฒ•๋ฌดํŒ€ ๋””์ง€ํ„ธ ํ˜์‹ ] --> B[๊ฐœ์ธ์šฉ ์ ‘๊ทผ์„ฑ ๋„๊ตฌ]
    A --> C[์ „ํ™” ํŠธ๋ฆฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜]
    A --> D[G Suite ์ž๋™ํ™”]
    
    subgraph personal [๊ฐœ์ธ์šฉ ๋„๊ตฌ]
        B --> E[๋ฒ•๋ฅ  ๋ฌธ์„œ ์ž‘์„ฑ ์•ฑ]
        E --> F[์ž๋™ ์™„์„ฑ ๊ธฐ๋Šฅ]
        E --> G[ํ…œํ”Œ๋ฆฟ ์ œ์•ˆ]
        E --> H[ํŒ๋ก€ ์ธ์šฉ ํฌ๋งทํŒ…]
        E --> I[๋ฒ„์ „ ๊ด€๋ฆฌ]
    end
    
    subgraph routing [๋ผ์šฐํŒ… ์‹œ์Šคํ…œ]
        C --> J[๋ฌธ์˜ ์œ ํ˜• ๋ถ„๋ฅ˜]
        C --> K[๊ธด๊ธ‰๋„ ํ‰๊ฐ€]
        C --> L[์ „๋ฌธ๋ถ„์•ผ ๋งค์นญ]
        J --> M[๊ณ„์•ฝ/์ง€์ ์žฌ์‚ฐ/๋…ธ๋™/๊ทœ์ •์ค€์ˆ˜]
        K --> N[์ฆ‰์‹œ/๋‹น์ผ/์ฃผ๊ฐ„]
        L --> O[๋ณ€ํ˜ธ์‚ฌ ์ž๋™ ํ• ๋‹น]
    end
    
    subgraph automation [์›Œํฌํ”Œ๋กœ์šฐ ์ž๋™ํ™”]
        D --> P[Google Sheets ์—ฐ๋™]
        D --> Q[Google Drive ํ†ตํ•ฉ]
        D --> R[Gmail ์ž๋™ํ™”]
        
        P --> S[๋ฆฌ๋ทฐ ์š”์ฒญ ๋“ฑ๋ก]
        P --> T[์ง„ํ–‰ ์ƒํƒœ ์ถ”์ ]
        Q --> U[๋ฌธ์„œ ๋ฒ„์ „ ๊ด€๋ฆฌ]
        Q --> V[์Šน์ธ ์›Œํฌํ”Œ๋กœ์šฐ]
        R --> W[์ž๋™ ์•Œ๋ฆผ]
        R --> X[๋ฆฌํฌํŠธ ๋ฐœ์†ก]
    end
    
    classDef toolStyle fill:#e2e8f0,stroke:#334155,stroke-width:2px,color:#1e293b
    classDef processStyle fill:#f1f5f9,stroke:#475569,stroke-width:2px,color:#1e293b
    classDef featureStyle fill:#ecfdf5,stroke:#059669,stroke-width:2px,color:#064e3b
    
    class A,B,C,D toolStyle
    class E,J,K,L,P,Q,R processStyle
    class F,G,H,I,M,N,O,S,T,U,V,W,X featureStyle

1. ๊ฐœ์ธ์šฉ ์ ‘๊ทผ์„ฑ ๋„๊ตฌ

bash
# 1์‹œ๊ฐ„ ๋งŒ์— ํ”„๋กœํ† ํƒ€์ž… ์™„์„ฑ
claude "๋ฒ•๋ฅ  ๋ฌธ์„œ ์ž‘์„ฑ์„ ๋„์™€์ฃผ๋Š” ์˜ˆ์ธก ํ…์ŠคํŠธ ์•ฑ์„ ๋งŒ๋“ค์–ด์ค˜

๊ธฐ๋Šฅ
- ๋ฒ•๋ฅ  ์šฉ์–ด ์ž๋™ ์™„์„ฑ
- ๊ณ„์•ฝ์„œ ์กฐํ•ญ ํ…œํ”Œ๋ฆฟ ์ œ์•ˆ
- ํŒ๋ก€ ์ธ์šฉ ์ž๋™ ํฌ๋งทํŒ…
- ๋ฌธ์„œ ๋ฒ„์ „ ๊ด€๋ฆฌ
- ํ˜‘์—… ๋Œ“๊ธ€ ๊ธฐ๋Šฅ

๊ธฐ์ˆ  ์Šคํƒ
- ๊ฐ„๋‹จํ•œ ์›น ์•ฑ (HTML, CSS, JavaScript)
- ๋กœ์ปฌ ์ €์žฅ์†Œ ํ™œ์šฉ
- ์˜คํ”„๋ผ์ธ์—์„œ๋„ ๋™์ž‘

1์‹œ๊ฐ„ ๋‚ด์— ๊ธฐ๋ณธ ๋™์ž‘ํ•˜๋Š” ํ”„๋กœํ† ํƒ€์ž…์œผ๋กœ ๋งŒ๋“ค์–ด์ค˜"

2. ์ „ํ™” ํŠธ๋ฆฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์‹œ์Šคํ…œ

bash
# ๋‹ด๋‹น ๋ณ€ํ˜ธ์‚ฌ ๋งค์นญ ์ž๋™ํ™”
claude "๋ฒ•๋ฌด ๋ฌธ์˜๋ฅผ ์ ์ ˆํ•œ ๋‹ด๋‹น ๋ณ€ํ˜ธ์‚ฌ์—๊ฒŒ ๋ผ์šฐํŒ…ํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค์–ด์ค˜

๋ผ์šฐํŒ… ๋กœ์ง
- ๋ฌธ์˜ ์œ ํ˜• ๋ถ„๋ฅ˜ (๊ณ„์•ฝ, ์ง€์ ์žฌ์‚ฐ, ๋…ธ๋™, ๊ทœ์ •์ค€์ˆ˜)
- ๊ธด๊ธ‰๋„ ํ‰๊ฐ€ (์ฆ‰์‹œ, ๋‹น์ผ, ์ฃผ๊ฐ„)
- ๋ณ€ํ˜ธ์‚ฌ ์ „๋ฌธ๋ถ„์•ผ ๋งค์นญ
- ์—…๋ฌด๋Ÿ‰ ๊ธฐ๋ฐ˜ ํ• ๋‹น

์ธํ„ฐํŽ˜์ด์Šค
- ๊ฐ„๋‹จํ•œ ์งˆ๋ฌธ ํŠธ๋ฆฌ
- ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ ๋ฌธ์„œ ์—…๋กœ๋“œ
- ์ž๋™ ์ด๋ฉ”์ผ ์•Œ๋ฆผ
- ์ง„ํ–‰ ์ƒํƒœ ์ถ”์ "

3. G Suite ์ž๋™ํ™” ๋„๊ตฌ

bash
# ๋ฒ•๋ฌด ๋ฆฌ๋ทฐ ํ”„๋กœ์„ธ์Šค ์ž๋™ํ™”
claude "Google Workspace๋ฅผ ํ™œ์šฉํ•œ ๋ฒ•๋ฌด ๋ฆฌ๋ทฐ ์ถ”์  ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค์–ด์ค˜

Google Sheets ์—ฐ๋™
- ๋ฆฌ๋ทฐ ์š”์ฒญ ์ž๋™ ๋“ฑ๋ก
- ์ง„ํ–‰ ์ƒํƒœ ์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ
- ๋‹ด๋‹น์ž๋ณ„ ์—…๋ฌด๋Ÿ‰ ์‹œ๊ฐํ™”
- ๋งˆ๊ฐ์ผ ์•Œ๋ฆผ ์ž๋™ํ™”

Google Drive ํ†ตํ•ฉ
- ๋ฌธ์„œ ๋ฒ„์ „ ๊ด€๋ฆฌ
- ๋Œ“๊ธ€ ๊ธฐ๋ฐ˜ ํ”ผ๋“œ๋ฐฑ ์ˆ˜์ง‘
- ์ตœ์ข… ์Šน์ธ ์›Œํฌํ”Œ๋กœ์šฐ
- ์•„์นด์ด๋ธŒ ์ž๋™ํ™”

Gmail ์ž๋™ํ™”
- ๋ฆฌ๋ทฐ ์™„๋ฃŒ ์‹œ ์ž๋™ ์•Œ๋ฆผ
- ์ง€์—ฐ ์‹œ ์—์Šค์ปฌ๋ ˆ์ด์…˜
- ์ฃผ๊ฐ„/์›”๊ฐ„ ๋ฆฌํฌํŠธ ์ž๋™ ๋ฐœ์†ก"

์‹œ๊ฐ ์ค‘์‹ฌ ํ”„๋กœํ† ํƒ€์ดํ•‘

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}, "flowchart": {"htmlLabels": false, "useMaxWidth": false}}}%%
flowchart LR
    A[์†๊ทธ๋ฆผ ์Šค์ผ€์น˜] --> B[์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„]
    B --> C[๋ ˆ์ด์•„์›ƒ ๊ตฌ์กฐ ์„ค๊ณ„]
    C --> D[๊ธฐ๋Šฅ ๋™์ž‘ ๊ตฌํ˜„]
    D --> E[์Šคํƒ€์ผ๋ง ์ ์šฉ]
    E --> F[์ตœ์ข… ๊ฒ€ํ† ]
    
    subgraph feedback [ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„]
        G[ํŒ€์› ํ…Œ์ŠคํŠธ] --> H[ํ”ผ๋“œ๋ฐฑ ์ˆ˜์ง‘]
        H --> I[๊ฐœ์„ ์‚ฌํ•ญ ์‹๋ณ„]
        I --> J[๋ฐ˜๋ณต์  ๊ฐœ์„ ]
        J --> G
    end
    
    F --> G
    J --> K[์™„์„ฑ๋œ ์›น์•ฑ]
    
    subgraph requirements [ํ•ต์‹ฌ ์š”๊ตฌ์‚ฌํ•ญ]
        L[์‹ค์ œ ๋™์ž‘ํ•˜๋Š” ๋ฒ„ํŠผ]
        M[๋ฐ์ดํ„ฐ ์ž…๋ ฅ/์ €์žฅ]
        N[๋ชจ๋ฐ”์ผ ์นœํ™”์  ๋ ˆ์ด์•„์›ƒ]
        O[๋ฒ•๋ฌดํŒ€ ๋ธŒ๋žœ๋”ฉ]
    end
    
    C --> requirements
    
    classDef processStyle fill:#e2e8f0,stroke:#334155,stroke-width:2px,color:#1e293b
    classDef feedbackStyle fill:#f1f5f9,stroke:#475569,stroke-width:2px,color:#1e293b
    classDef requirementStyle fill:#ecfdf5,stroke:#059669,stroke-width:2px,color:#064e3b
    
    class A,B,C,D,E,F,K processStyle
    class G,H,I,J feedbackStyle
    class L,M,N,O requirementStyle

1. ์™€์ด์–ดํ”„๋ ˆ์ž„ โ†’ ์ž‘๋™ํ•˜๋Š” ์•ฑ

bash
# ์Šค์ผ€์น˜์—์„œ ์•ฑ์œผ๋กœ
claude "์ด ์†๊ทธ๋ฆผ ์™€์ด์–ดํ”„๋ ˆ์ž„์„ ๋ณด๊ณ  ์ž‘๋™ํ•˜๋Š” ์›น์•ฑ์„ ๋งŒ๋“ค์–ด์ค˜

[์†๊ทธ๋ฆผ ์Šค์ผ€์น˜ ์ฒจ๋ถ€]

์š”๊ตฌ์‚ฌํ•ญ
- ๋ชจ๋“  ๋ฒ„ํŠผ์ด ์‹ค์ œ๋กœ ๋™์ž‘
- ๋ฐ์ดํ„ฐ ์ž…๋ ฅ๊ณผ ์ €์žฅ ๊ธฐ๋Šฅ
- ๋ชจ๋ฐ”์ผ ์นœํ™”์  ๋ ˆ์ด์•„์›ƒ
- ๋ฒ•๋ฌดํŒ€ ๋ธŒ๋žœ๋”ฉ ์ ์šฉ

๋‹จ๊ณ„๋ณ„ ํ™•์ธ
1. ๋ ˆ์ด์•„์›ƒ ๊ตฌ์กฐ ํ™•์ธ
2. ๊ธฐ๋Šฅ ๋™์ž‘ ํ…Œ์ŠคํŠธ
3. ์Šคํƒ€์ผ๋ง ๊ฐœ์„ 
4. ์ตœ์ข… ๊ฒ€ํ† "

2. ๋ฐ˜๋ณต์  ๊ฐœ์„  ํ”„๋กœ์„ธ์Šค

bash
# ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ ๊ธฐ๋ฐ˜ ๊ฐœ์„ 
claude "ํŒ€์›๋“ค์ด ์‚ฌ์šฉํ•ด๋ณด๊ณ  ๋‹ค์Œ ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ์—ˆ์–ด
- ๋ฒ„ํŠผ์ด ๋„ˆ๋ฌด ์ž‘์•„์„œ ๋ชจ๋ฐ”์ผ์—์„œ ํด๋ฆญํ•˜๊ธฐ ์–ด๋ ค์›€
- ๋ฌธ์„œ ์—…๋กœ๋“œ ํ›„ ์ง„ํ–‰์ƒํ™ฉ์„ ์•Œ ์ˆ˜ ์—†์Œ
- ์ด๋ฉ”์ผ ์•Œ๋ฆผ์ด ๋„ˆ๋ฌด ์ž์ฃผ ์˜ด

์ด ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ˜์˜ํ•ด์„œ ๊ฐœ์„ ํ•ด์ค˜"

๋ฒ•๋ฌด ์›Œํฌํ”Œ๋กœ์šฐ ๋””์ง€ํ„ธํ™”

1. ๊ณ„์•ฝ์„œ ๊ฒ€ํ†  ์ž๋™ํ™”

bash
# AI ๊ธฐ๋ฐ˜ ๊ณ„์•ฝ์„œ ๋ถ„์„ ๋„๊ตฌ
claude "๊ณ„์•ฝ์„œ ์ดˆ์•ˆ์„ ์—…๋กœ๋“œํ•˜๋ฉด ์ž๋™์œผ๋กœ ๊ฒ€ํ† ํ•˜๋Š” ๋„๊ตฌ๋ฅผ ๋งŒ๋“ค์–ด์ค˜

๊ฒ€ํ†  ํ•ญ๋ชฉ
- ํ‘œ์ค€ ์กฐํ•ญ ๋ˆ„๋ฝ ์—ฌ๋ถ€
- ๋ฆฌ์Šคํฌ ์กฐํ•ญ ์‹๋ณ„
- ๊ธˆ์•ก/๋‚ ์งœ ์ •ํ•ฉ์„ฑ ํ™•์ธ
- ๋ฒ•์  ์š”๊ตฌ์‚ฌํ•ญ ์ค€์ˆ˜ ์ฒดํฌ

๊ฒฐ๊ณผ ์ถœ๋ ฅ
- ์œ„ํ—˜๋„๋ณ„ ์ด์Šˆ ๋ถ„๋ฅ˜
- ์ˆ˜์ • ์ œ์•ˆ์‚ฌํ•ญ
- ์œ ์‚ฌ ๊ณ„์•ฝ์„œ ์ฐธ์กฐ
- ๊ฒ€ํ†  ์šฐ์„ ์ˆœ์œ„ ์ œ์‹œ"

2. ๊ทœ์ • ์ค€์ˆ˜ ๋ชจ๋‹ˆํ„ฐ๋ง

bash
# ์ปดํ”Œ๋ผ์ด์–ธ์Šค ๋Œ€์‹œ๋ณด๋“œ
claude "ํšŒ์‚ฌ์˜ ๊ทœ์ • ์ค€์ˆ˜ ํ˜„ํ™ฉ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค์–ด์ค˜

์ถ”์  ์˜์—ญ
- ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ (GDPR, CCPA)
- ๊ธˆ์œต ๊ทœ์ œ (SOX, PCI-DSS)
- ๋…ธ๋™๋ฒ• ์ค€์ˆ˜
- ํ™˜๊ฒฝ ๊ทœ์ œ

์ž๋™ํ™” ๊ธฐ๋Šฅ
- ๊ทœ์ œ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ชจ๋‹ˆํ„ฐ๋ง
- ์ค€์ˆ˜ ์ƒํƒœ ์‹ค์‹œ๊ฐ„ ์ฒดํฌ
- ๋ฆฌ์Šคํฌ ๋ ˆ๋ฒจ ์‹œ๊ฐํ™”
- ์•ก์…˜ ์•„์ดํ…œ ์ž๋™ ์ƒ์„ฑ"

ํŒ€ ์„ฑ๊ณผ

๋ฒ•๋ฌด ํŒ€ ์„ฑ๊ณต ๋…ธํ•˜์šฐ

bash
# Claude.ai์—์„œ ์„ค๊ณ„ ํ›„ Claude Code๋กœ ๊ตฌํ˜„
# 1๋‹จ๊ณ„: Claude.ai์—์„œ ์•„์ด๋””์–ด ๊ตฌ์ฒดํ™”
"๋ฒ•๋ฌด ์—…๋ฌด์—์„œ ๊ฐ€์žฅ ๋ฐ˜๋ณต์ ์ด๊ณ  ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์ด ๋ญ”์ง€ 
๋ถ„์„ํ•ด์ฃผ๊ณ , ์ž๋™ํ™” ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„์„ ์ฐพ์•„์ค˜"

# 2๋‹จ๊ณ„: Claude Code์—์„œ ๊ตฌํ˜„
"์•ž์„œ ๋…ผ์˜ํ•œ ๊ณ„์•ฝ์„œ ๊ฒ€ํ†  ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•ด์ค˜"

# ๋‹จ๊ณ„๋ณ„ ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„
claude "์ด ๊ธฐ๋Šฅ์ด ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ์Šคํฌ๋ฆฐ์ƒท์œผ๋กœ ํ™•์ธํ•ด์ค„๊ฒŒ.
๋‹ค์Œ์— ์ถ”๊ฐ€ํ•  ๊ธฐ๋Šฅ์€ ๋ญ๊ฐ€ ์ข‹์„๊นŒ?"

# ์™„์„ฑ๋„๋ณด๋‹ค ๊ณต์œ  ์šฐ์„ 
claude "์•„์ง ์™„๋ฒฝํ•˜์ง€ ์•Š์ง€๋งŒ ํŒ€์›๋“ค๊ณผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” 
๋ฐ๋ชจ ๋ฒ„์ „์„ ๋งŒ๋“ค์–ด์ค˜. ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•„์„œ ๊ฐœ์„ ํ•˜๊ณ  ์‹ถ์–ด"

๋งˆ์น˜๋ฉฐ - ์กฐ์ง ํ˜์‹ ์˜ ์ƒˆ๋กœ์šด ํŒจ๋Ÿฌ๋‹ค์ž„

Anthropic์˜ ๋‹ค์–‘ํ•œ ํŒ€ ์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด Claude Code๊ฐ€ ๋‹จ์ˆœํ•œ ๊ฐœ๋ฐœ ๋„๊ตฌ๋ฅผ ๋„˜์–ด์„œ ์กฐ์ง ์ „๋ฐ˜์˜ ์—…๋ฌด ๋ฐฉ์‹์„ ํ˜์‹ ํ•˜๋Š” ํ”Œ๋žซํผ์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ํŒ€์ด ์ž์‹ ๋“ค์˜ ์—…๋ฌด ํŠน์„ฑ์— ๋งž๊ฒŒ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋‹ฌ์„ฑํ•œ ์„ฑ๊ณผ๋“ค์€ Claude Code์˜ ๋ฌดํ•œํ•œ ๊ฐ€๋Šฅ์„ฑ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์ธ์‚ฌ์ดํŠธ

1. ๋„๋ฉ”์ธ ์ „๋ฌธ์„ฑ + AI ๋„๊ตฌ = ํ˜์‹ 

2. ์ ์ง„์  ๋„์ž…๊ณผ ๋ฌธํ™” ๋ณ€ํ™”

3. ํ˜‘์—…๊ณผ ์ง€์‹ ๊ณต์œ ์˜ ์ค‘์š”์„ฑ


[S1CO3(์„น์…˜02)] 6๋Œ€ ํ•ต์‹ฌ ์ฒ ํ•™

2.1 Claude Code์˜ 6๋Œ€ ํ•ต์‹ฌ ์ฒ ํ•™

Claude Code๋Š” 6๊ฐ€์ง€ ํ•ต์‹ฌ ์ฒ ํ•™ ์œ„์— ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ฒ ํ•™๋“ค์€ ๋‹จ์ˆœํ•œ ์ฝ”๋“œ ์ƒ์„ฑ ๋„๊ตฌ๋ฅผ ๋„˜์–ด, AI์™€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง„์ •์œผ๋กœ ํ˜‘์—…ํ•˜๋Š” ํ™˜๊ฒฝ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๊ธฐ๋ฐ˜์ž…๋‹ˆ๋‹ค.

1. ์œ ์—ฐ์„ฑ (Flexibility)

"์ •ํ•ด์ง„ ๋ฐฉ๋ฒ•์€ ์—†๋‹ค โ€” ๊ฐœ๋ฐœ์ž์˜ ์›Œํฌํ”Œ๋กœ์šฐ์— AI๊ฐ€ ๋งž์ถ˜๋‹ค"

์–ด๋–ค ์–ธ์–ด, ํ”„๋ ˆ์ž„์›Œํฌ, ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋“  Claude Code๊ฐ€ ์ ์‘ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ AI์— ๋งž์ถ”๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, AI๊ฐ€ ๊ฐœ๋ฐœ์ž์˜ ๊ธฐ์กด ํ™˜๊ฒฝ์— ๋…น์•„๋“œ๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

2. ํˆฌ๋ช…์„ฑ (Transparency)

"AI๊ฐ€ ๋ฌด์—‡์„ ํ•˜๋Š”์ง€ ํ•ญ์ƒ ๋ณผ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค"

๋ชจ๋“  ํŒŒ์ผ ๋ณ€๊ฒฝ, ๋ช…๋ น ์‹คํ–‰, ์˜์‚ฌ๊ฒฐ์ • ๊ณผ์ •์ด ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ณต๊ฐœ๋ฉ๋‹ˆ๋‹ค. ๋ธ”๋ž™๋ฐ•์Šค๊ฐ€ ์•„๋‹Œ ์œ ๋ฆฌ ์ƒ์ž ์•ˆ์—์„œ AI๊ฐ€ ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค.

3. ํ˜‘์—… (Collaboration)

"๋Œ€์ฒด๊ฐ€ ์•„๋‹Œ ์ฆ๊ฐ• โ€” AI๋Š” ํŒ€์›์ด๋‹ค"

์ฝ”๋“œ๋ฅผ ๋Œ€์‹  ์งœ์ฃผ๋Š” ๋„๊ตฌ๊ฐ€ ์•„๋‹ˆ๋ผ, ํ•จ๊ป˜ ๊ณ ๋ฏผํ•˜๊ณ  ๋ฆฌ๋ทฐํ•˜๊ณ  ๊ฐœ์„ ํ•˜๋Š” ๋™๋ฃŒ ๊ฐœ๋ฐœ์ž ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

4. ๋งฅ๋ฝ ์ดํ•ด (Context Awareness)

"ํ”„๋กœ์ ํŠธ ์ „์ฒด๋ฅผ ์ดํ•ดํ•˜๊ณ  ์ž‘์—…ํ•œ๋‹ค"

๋‹จ์ผ ํŒŒ์ผ์ด ์•„๋‹Œ ํ”„๋กœ์ ํŠธ ์ „์ฒด ๊ตฌ์กฐ, ์˜์กด์„ฑ, ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜์„ ํŒŒ์•…ํ•œ ํ›„ ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค. CLAUDE.md, .claude/ ์„ค์ •์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ ๋งฅ๋ฝ์„ ๊นŠ์ด ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.

5. ์•ˆ์ „์„ฑ (Safety)

"๋˜๋Œ๋ฆด ์ˆ˜ ์—†๋Š” ์ž‘์—…์€ ๋ฐ˜๋“œ์‹œ ํ™•์ธํ•œ๋‹ค"

ํŒŒ์ผ ์‚ญ์ œ, ์›๊ฒฉ ํ‘ธ์‹œ, DB ๋ณ€๊ฒฝ ๋“ฑ ํŒŒ๊ดด์  ์ž‘์—… ์ „์— ํ•ญ์ƒ ์‚ฌ์šฉ์ž ํ™•์ธ์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ๊ถŒํ•œ ์ฒด๊ณ„(allowedTools, permissions)๋กœ ์•ˆ์ „ ๊ฒฝ๊ณ„๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

6. ํ™•์žฅ์„ฑ (Extensibility)

"๊ธฐ๋ณธ ๊ธฐ๋Šฅ์„ ๋„˜์–ด ๋ฌดํ•œํžˆ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค"

MCP ์„œ๋ฒ„, Custom Skills, Hooks, Subagents๋ฅผ ํ†ตํ•ด ๊ธฐ๋Šฅ์„ ์ž์œ ๋กญ๊ฒŒ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค. ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ๋งŒ๋“  ์Šคํ‚ฌ์„ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜, ์ž์‹ ๋งŒ์˜ ์ž๋™ํ™”๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


[S1CO4(์„น์…˜18)] ๋ฐ”์ด๋ธŒ ์ฝ”๋”ฉ ์ ํ•ฉ์„ฑ ํŒ๋‹จ

๋ฐ”์ด๋ธŒ ์ฝ”๋”ฉ, ์–ธ์ œ ์ ํ•ฉํ•œ๊ฐ€?

๋ชจ๋“  ํ”„๋กœ์ ํŠธ์— ๋ฐ”์ด๋ธŒ ์ฝ”๋”ฉ์ด ์ ํ•ฉํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์˜ ์„ฑ๊ฒฉ, ํŒ€ ๊ตฌ์„ฑ, ๊ธฐ์ˆ  ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋ฐ”์ด๋ธŒ ์ฝ”๋”ฉ์˜ ํšจ๊ณผ๊ฐ€ ํฌ๊ฒŒ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

๋ฐ”์ด๋ธŒ ์ฝ”๋”ฉ์ด ์ ํ•ฉํ•œ ๊ฒฝ์šฐ

์ƒํ™ฉ์ด์œ ํšจ๊ณผ
MVP/ํ”„๋กœํ† ํƒ€์ž… ๊ฐœ๋ฐœ๋น ๋ฅธ ๊ฒ€์ฆ์ด ํ•ต์‹ฌ๊ฐœ๋ฐœ ์†๋„ 3~5๋ฐฐ ํ–ฅ์ƒ
1์ธ ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธํ’€์Šคํƒ ์—ญํ• ์„ AI๊ฐ€ ๋ณด์™„๋ถ€์กฑํ•œ ์˜์—ญ ์ปค๋ฒ„
๋ฐ˜๋ณต ์ž‘์—…์ด ๋งŽ์€ ํ”„๋กœ์ ํŠธCRUD, ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ž๋™ํ™”๋‹จ์ˆœ ์ž‘์—… ์‹œ๊ฐ„ 90% ์ ˆ๊ฐ
ํ•™์Šต ๋ชฉ์  ํ”„๋กœ์ ํŠธAI๊ฐ€ ์ฝ”๋“œ ์„ค๋ช…๊ณผ ๋Œ€์•ˆ ์ œ์‹œ์‹ค์‹œ๊ฐ„ ๋ฉ˜ํ† ๋ง ํšจ๊ณผ
์›น ๊ธฐ๋ฐ˜ ์„œ๋น„์Šคํ”„๋ก ํŠธ์—”๋“œ+๋ฐฑ์—”๋“œ+DB ํ†ตํ•ฉ๊ธฐ์ˆ  ์Šคํƒ ์ „ํ™˜ ๋น„์šฉ ์ตœ์†Œํ™”

๋ฐ”์ด๋ธŒ ์ฝ”๋”ฉ์ด ๋ถ€์ ํ•ฉํ•œ ๊ฒฝ์šฐ

์ƒํ™ฉ์ด์œ ๋Œ€์•ˆ
์‹ค์‹œ๊ฐ„ ์‹œ์Šคํ…œ (๊ฒŒ์ž„ ์—”์ง„, ์ž„๋ฒ ๋””๋“œ)๊ทนํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™” ํ•„์š”์ „ํ†ต์  ์ˆ˜๋™ ๊ฐœ๋ฐœ
๋ณด์•ˆ ์ตœ์šฐ์„  ์‹œ์Šคํ…œ (๊ธˆ์œต ํ•ต์‹ฌ, ๊ตฐ์‚ฌ)AI ์ฝ”๋“œ ๊ฐ์‚ฌ๊ฐ€ ์–ด๋ ค์›€์ˆ˜๋™ ๊ฐœ๋ฐœ + ์ „๋ฌธ ๊ฐ์‚ฌ
๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ ์œ ์ง€๋ณด์ˆ˜๊ณ ์œ ํ•œ ๋„๋ฉ”์ธ ์ง€์‹ ํ•„์š”๋ถ€๋ถ„์  AI ํ™œ์šฉ๋งŒ ๊ฐ€๋Šฅ
๋Œ€๊ทœ๋ชจ ํŒ€ (50๋ช…+)์ฝ”๋”ฉ ์ปจ๋ฒค์…˜ ๊ฐ•์ œ๊ฐ€ ๋ณต์žกAI๋Š” ๋ณด์กฐ ๋„๊ตฌ๋กœ๋งŒ ํ™œ์šฉ
๊ทœ์ œ ์‚ฐ์—… (์˜๋ฃŒ, ํ•ญ๊ณต)์ฝ”๋“œ ์ถœ์ฒ˜ ์ถ”์  ํ•„์ˆ˜์ˆ˜๋™ ๊ฐœ๋ฐœ + AI ๊ฒ€ํ†  ๋ณด์กฐ

์ ํ•ฉ์„ฑ ํŒ๋‹จ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ ์ „ ์•„๋ž˜ ํ•ญ๋ชฉ์„ ํ™•์ธํ•˜์„ธ์š”:

4๊ฐœ ์ด์ƒ ์ฒดํฌ: ๋ฐ”์ด๋ธŒ ์ฝ”๋”ฉ ๊ฐ•๋ ฅ ์ถ”์ฒœ

2~3๊ฐœ ์ฒดํฌ: ๋ถ€๋ถ„์  ๋ฐ”์ด๋ธŒ ์ฝ”๋”ฉ (ํ•ต์‹ฌ ๋กœ์ง์€ ์ˆ˜๋™)

1๊ฐœ ์ดํ•˜: ์ „ํ†ต์  ๊ฐœ๋ฐœ ๋ฐฉ์‹ ๊ถŒ์žฅ, AI๋Š” ๋ณด์กฐ ๋„๊ตฌ๋กœ๋งŒ


[S1CO5(์„น์…˜15)] ํ”„๋กœ ํŒ โ€” ํšจ์œจ์„ฑ ๊ทน๋Œ€ํ™”

ํ”„๋กœ ํŒ: ํšจ์œจ์„ฑ ๊ทน๋Œ€ํ™”

1. ๋ณ„์นญ(Alias) ์„ค์ •

์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด์— ๋‹จ์ถ• ๋ณ„์นญ์„ ์„ค์ •ํ•˜์—ฌ ์ž‘์—… ํšจ์œจ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

bash
# ~/.bashrc ๋˜๋Š” ~/.zshrc์— ์ถ”๊ฐ€
alias cc="claude"
alias ccc="claude --clear"
alias ccr="claude 'npm run'"

2. ํ…œํ”Œ๋ฆฟ ํ™œ์šฉ

๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด ํŒจํ„ด์„ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ์ €์žฅํ•˜์—ฌ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.

ํ…œํ”Œ๋ฆฟ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ ๋งŒ๋“ค๊ธฐ

bash
# Claude Code ํ…œํ”Œ๋ฆฟ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ
mkdir -p ~/.claude-templates/{components,features,tests,docs}

์‹ค์šฉ์ ์ธ ํ…œํ”Œ๋ฆฟ ์˜ˆ์‹œ๋“ค

  1. React ์ปดํฌ๋„ŒํŠธ ํ…œํ”Œ๋ฆฟ
bash
# ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ ํ…œํ”Œ๋ฆฟ
cat > ~/.claude-templates/components/react-component.txt << 'EOF'
์ƒˆ๋กœ์šด React ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด์ค˜
- ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„: [COMPONENT_NAME]
- ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋กœ ์ž‘์„ฑ
- TypeScript ์‚ฌ์šฉ
- Props ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜
- ๊ธฐ๋ณธ ์Šคํƒ€์ผ ํฌํ•จ
- ์Šคํ† ๋ฆฌ๋ถ ์Šคํ† ๋ฆฌ ํŒŒ์ผ๋„ ์ƒ์„ฑ
- ์œ ๋‹› ํ…Œ์ŠคํŠธ ํŒŒ์ผ ํฌํ•จ
EOF

# ์‚ฌ์šฉ ์˜ˆ์‹œ
COMPONENT_NAME="UserProfile" envsubst < ~/.claude-templates/components/react-component.txt | claude
  1. API ์—”๋“œํฌ์ธํŠธ ํ…œํ”Œ๋ฆฟ
bash
# API ๋ผ์šฐํŠธ ์ƒ์„ฑ ํ…œํ”Œ๋ฆฟ
cat > ~/.claude-templates/features/api-endpoint.txt << 'EOF'
์ƒˆ๋กœ์šด REST API ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋งŒ๋“ค์–ด์ค˜
- ๋ฆฌ์†Œ์Šค: [RESOURCE_NAME]
- CRUD ์ž‘์—… ๋ชจ๋‘ ํฌํ•จ
- Express.js ๋ผ์šฐํ„ฐ ์‚ฌ์šฉ
- ์ž…๋ ฅ ๊ฒ€์ฆ ๋ฏธ๋“ค์›จ์–ด
- ์—๋Ÿฌ ํ•ธ๋“ค๋ง
- Swagger ๋ฌธ์„œ ์ฃผ์„
- ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ํฌํ•จ
EOF
  1. ๋ฒ„๊ทธ ์ˆ˜์ • ํ…œํ”Œ๋ฆฟ
bash
# ๋ฒ„๊ทธ ์ˆ˜์ • ์›Œํฌํ”Œ๋กœ์šฐ ํ…œํ”Œ๋ฆฟ
cat > ~/.claude-templates/features/bugfix.txt << 'EOF'
๋‹ค์Œ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•ด์ค˜
1. ๋จผ์ € ๊ด€๋ จ๋œ ์ฝ”๋“œ๋ฅผ ์ฐพ์•„์„œ ๋ถ„์„ํ•ด์ค˜
2. ๋ฒ„๊ทธ์˜ ๊ทผ๋ณธ ์›์ธ์„ ์„ค๋ช…ํ•ด์ค˜
3. ์ˆ˜์ • ๋ฐฉ์•ˆ์„ ์ œ์‹œํ•˜๊ณ  ๊ตฌํ˜„ํ•ด์ค˜
4. ์žฌ๋ฐœ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค˜
5. ์ˆ˜์ •์‚ฌํ•ญ์„ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ์ •๋ฆฌํ•ด์ค˜

๋ฒ„๊ทธ ์„ค๋ช…: [BUG_DESCRIPTION]
EOF

3. ์ปจํ…์ŠคํŠธ ์œ ์ง€

๋ณต์žกํ•˜๊ณ  ๊ธด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ๋Š” ๋Œ€ํ™”ํ˜• ๋ชจ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฌธ๋งฅ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ํšจ๊ณผ์ ์ธ ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ๋Š” ๋Œ€๊ทœ๋ชจ ์ž‘์—…์˜ ์„ฑ๊ณต ์—ด์‡ ์ž…๋‹ˆ๋‹ค.

๋Œ€๊ทœ๋ชจ ๋ฆฌํŒฉํ† ๋ง ์‹œ๋‚˜๋ฆฌ์˜ค

bash
# ๋Œ€ํ™”ํ˜• ๋ชจ๋“œ๋กœ ์‹œ์ž‘
claude

> ์ด์ œ๋ถ€ํ„ฐ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ์ตœ์‹  ์•„ํ‚คํ…์ฒ˜๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ๊ฑฐ์•ผ
< ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ํ˜„์žฌ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๋ถ„์„ํ•˜๊ณ  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ณ„ํš์„ ์ˆ˜๋ฆฝํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

> 1๋‹จ๊ณ„: ํ˜„์žฌ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋ถ„์„ํ•˜๊ณ  ๋ฌธ์ œ์ ์„ ํŒŒ์•…ํ•ด์ค˜
< ๋ถ„์„ ๊ฒฐ๊ณผ
  - ๋ชจ๋†€๋ฆฌ์‹ ๊ตฌ์กฐ๋กœ ๋ชจ๋“ˆ ๊ฐ„ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’์Œ
  - ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์ปดํฌ๋„ŒํŠธ ์‚ฌ์šฉ (React 16.2)
  - ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ prop drilling์œผ๋กœ ๋ณต์žกํ•จ
  - ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€ 30%
  
  ์ฃผ์š” ๊ฐœ์„  ํ•„์š” ์˜์—ญ์„ ์‹๋ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ณ„์† ์ง„ํ–‰ํ• ๊นŒ์š”?

> 2๋‹จ๊ณ„: ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋กœ๋“œ๋งต์„ ๋งŒ๋“ค์–ด์ค˜
< ๋‹จ๊ณ„๋ณ„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋กœ๋“œ๋งต
  Phase 1: ์ธํ”„๋ผ ํ˜„๋Œ€ํ™” (1-2์ฃผ)
  - ๋นŒ๋“œ ๋„๊ตฌ๋ฅผ Webpack์—์„œ Vite๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
  - TypeScript ๋„์ž…
  
  Phase 2: ์ปดํฌ๋„ŒํŠธ ํ˜„๋Œ€ํ™” (3-4์ฃผ)
  - ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•จ์ˆ˜ํ˜•์œผ๋กœ ์ „ํ™˜
  - Custom Hooks๋กœ ๋กœ์ง ์ถ”์ถœ
  
  Phase 3: ์ƒํƒœ ๊ด€๋ฆฌ ๊ฐœ์„  (1์ฃผ)
  - Context API ๋˜๋Š” Zustand ๋„์ž…
  
  Phase 4: ํ…Œ์ŠคํŠธ ๊ฐ•ํ™” (1์ฃผ)
  - ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€ 80% ๋ชฉํ‘œ

> ์ข‹์•„, Phase 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์ž. ๋จผ์ € Vite ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ง„ํ–‰ํ•ด์ค˜
< Phase 1 ์‹œ์ž‘: Vite ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๋‹จ๊ณ„๋ณ„๋กœ ์ง„ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค...

์ปจํ…์ŠคํŠธ ์œ ์ง€ ํŒ

  1. ์ฒดํฌํฌ์ธํŠธ ์ƒ์„ฑ: ๊ฐ ๋‹จ๊ณ„ ์™„๋ฃŒ ์‹œ ์ง„ํ–‰ ์ƒํ™ฉ ์š”์•ฝ ์š”์ฒญ
  2. ๋ช…ํ™•ํ•œ ๋‹จ๊ณ„ ๊ตฌ๋ถ„: ๋ฒˆํ˜ธ๋‚˜ ๋ผ๋ฒจ๋กœ ์ž‘์—… ๋‹จ๊ณ„ ๋ช…์‹œ
  3. ์ •๊ธฐ์ ์ธ ๊ฒ€์ฆ: ์ค‘๊ฐ„์ค‘๊ฐ„ ๊ฒฐ๊ณผ ํ™•์ธ ๋ฐ ๋ฐฉํ–ฅ ์กฐ์ •
  4. ์ปจํ…์ŠคํŠธ ์ €์žฅ: ์ค‘์š”ํ•œ ๊ฒฐ์ •์‚ฌํ•ญ์€ ๋ณ„๋„ ๋ฌธ์„œ๋กœ ์ €์žฅ

์›Œํฌํ”Œ๋กœ์šฐ CLAUDE.md ์˜ˆ์‹œ

markdown
# Development Workflow

## ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค
1. ์ด์Šˆ ์ƒ์„ฑ ๋ฐ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ
2. ํƒ์ƒ‰: ๊ด€๋ จ ์ฝ”๋“œ ๋ถ„์„ (30๋ถ„)
3. ๊ณ„ํš: ๊ตฌํ˜„ ์ „๋žต ์ˆ˜๋ฆฝ (30๋ถ„)
4. ๊ตฌํ˜„: TDD๋กœ ๊ฐœ๋ฐœ (2-4์‹œ๊ฐ„)
5. ๋ฆฌ๋ทฐ: ์ž์ฒด ์ฝ”๋“œ ๋ฆฌ๋ทฐ (30๋ถ„)
6. PR ์ƒ์„ฑ ๋ฐ ๋ฆฌ๋ทฐ ์š”์ฒญ

## ์ผ์ผ ๋ฃจํ‹ด
- 09:00: ์ด์Šˆ ํ™•์ธ ๋ฐ ์šฐ์„ ์ˆœ์œ„ ์ •๋ฆฌ
- 09:30: ์ง‘์ค‘ ์ฝ”๋”ฉ (ํฌ๋ชจ๋„๋กœ ๊ธฐ๋ฒ•)
- 14:00: ์ฝ”๋“œ ๋ฆฌ๋ทฐ
- 16:00: ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ
- 17:00: ๋‹ค์Œ ๋‚  ๊ณ„ํš

## ํ’ˆ์งˆ ์ฒดํฌ๋ฆฌ์ŠคํŠธ
- [ ] ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€ 80% ์ด์ƒ
- [ ] ๋ชจ๋“  ํ•จ์ˆ˜์— JSDoc
- [ ] ์„ฑ๋Šฅ ํ”„๋กœํŒŒ์ผ๋ง ์™„๋ฃŒ
- [ ] ์ ‘๊ทผ์„ฑ ๊ฒ€์‚ฌ ํ†ต๊ณผ
- [ ] ๋ณด์•ˆ ์Šค์บ” ํ†ต๊ณผ

๋งˆ์น˜๋ฉฐ

ํšจ์œจ์ ์ธ ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ๊ฐœ๋ฐœ์ž์™€ ํŒ€์˜ ์ƒ์‚ฐ์„ฑ์„ ๊ฒฐ์ •ํ•˜๋Š” ํ•ต์‹ฌ ์š”์†Œ์ž…๋‹ˆ๋‹ค. Claude Code๋Š” ์ด๋Ÿฌํ•œ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๊ฐ ๋‹จ๊ณ„์—์„œ ์ง€๋Šฅ์ ์ธ ์ง€์›์„ ์ œ๊ณตํ•˜์—ฌ, ๊ฐœ๋ฐœ์ž๊ฐ€ ๋” ๋†’์€ ์ˆ˜์ค€์˜ ๋ฌธ์ œ ํ•ด๊ฒฐ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์›์น™ ์š”์•ฝ

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}}}%%
mindmap
  root((ํ•ต์‹ฌ ์›์น™))
    ์ฒด๊ณ„์  ์ ‘๊ทผ
      EPCC ์‚ฌ์ดํด ์ ์šฉ
      ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ํ”„๋กœ์„ธ์Šค
      ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๊ฐœ๋ฐœ
      ๋ฆฌ์Šคํฌ ์ตœ์†Œํ™”
    ํ’ˆ์งˆ ์šฐ์„ 
      TDD ์‹ค์ฒœ
      ์ง€์†์  ๋ฆฌํŒฉํ† ๋ง
      ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ฌธํ™”
      ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ
    ์ž๋™ํ™” ๊ทน๋Œ€ํ™”
      ๋ฐ˜๋ณต ์ž‘์—… ์ œ๊ฑฐ
      ๋„๊ตฌ ํ™œ์šฉ
      ์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ
      ํšจ์œจ์„ฑ ํ–ฅ์ƒ
    ์ง€์†์  ๊ฐœ์„ 
      ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘
      ํ”„๋กœ์„ธ์Šค ๋ถ„์„
      ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜
      ๋ฉ”ํƒ€ ๊ฐœ์„ 
  1. ์ฒด๊ณ„์  ์ ‘๊ทผ: EPCC(ํƒ์ƒ‰-๊ณ„ํš-์ฝ”๋”ฉ-์ปค๋ฐ‹) ์‚ฌ์ดํด์„ ํ†ตํ•œ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ณ  ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค
  2. ํ’ˆ์งˆ ์šฐ์„ : TDD์™€ ์ง€์†์ ์ธ ๋ฆฌํŒฉํ† ๋ง์„ ํ†ตํ•œ ์ฝ”๋“œ ํ’ˆ์งˆ์˜ ์ง€์†์  ํ–ฅ์ƒ
  3. ์ž๋™ํ™” ๊ทน๋Œ€ํ™”: ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์˜ ์ž๋™ํ™”๋ฅผ ํ†ตํ•œ ๊ฐœ๋ฐœ์ž ์‹œ๊ฐ„์˜ ํšจ์œจ์  ํ™œ์šฉ
  4. ์ง€์†์  ๊ฐœ์„ : ์›Œํฌํ”Œ๋กœ์šฐ ์ž์ฒด๋„ ์ง€์†์ ์œผ๋กœ ์ธก์ •ํ•˜๊ณ  ๊ฐœ์„ ํ•˜๋Š” ๋ฉ”ํƒ€ ํ”„๋กœ์„ธ์Šค

์‹ค๋ฌด ์ ์šฉ ์ „๋žต

๋‹ค์Œ ์žฅ์—์„œ๋Š” ์—ฌ๋Ÿฌ Claude Code ์ธ์Šคํ„ด์Šค๋ฅผ ํ™œ์šฉํ•œ ๋ฉ€ํ‹ฐํƒœ์Šคํ‚น๊ณผ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ์ „๋žต์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๊ณ ๊ธ‰ ํ™œ์šฉ๋ฒ•์„ ํƒ๊ตฌํ•ด๋ด…์‹œ๋‹ค.

[S1CO6] CLAUDE.md โ€” ๊ฐœ๋…๊ณผ ๋„๋ฉ”์ธ ์ง€์‹ ์ •์˜

[S1CO7] Plugin Marketplace โ€” ํ”Œ๋Ÿฌ๊ทธ์ธ ์ƒํƒœ๊ณ„ ๊ฐœ๋…

[S1CO8] Multi-Agent vs Multi-Role ์‹œ์Šคํ…œ ๊ฐœ๋…

์ฐธ๊ณ : ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /์‹ค์ „_Tips/๋„๊ตฌ_ํ™œ์šฉ/Multi-Role_AI_์‹œ์Šคํ…œ๊ณผ_Multi-Agent_์‹œ์Šคํ…œ_๋น„๊ต.md

[S1CO9] Books 1๊ถŒ โ€” Claude & Code ๊ธฐ์ดˆ

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /ํ•™์Šต์šฉ_Books_New/1๊ถŒ_Claude_ClaudeCode_์‚ฌ์šฉ๋ฒ•/

[S1CO10] Books 2๊ถŒ โ€” ์›น๊ฐœ๋ฐœ ๊ธฐ์ดˆ์ง€์‹

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /ํ•™์Šต์šฉ_Books_New/2๊ถŒ_ํ’€์Šคํƒ_์›น์‚ฌ์ดํŠธ_๊ฐœ๋ฐœ_๊ธฐ์ดˆ์ง€์‹/

[S1CO11] Books 3๊ถŒ โ€” ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ์ž…๋ฌธ

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /ํ•™์Šต์šฉ_Books_New/3๊ถŒ_ํ”„๋กœ์ ํŠธ_๊ด€๋ฆฌ_๋ฐฉ๋ฒ•/

[S1CO12] ์‹ค์ „ Tips โ€” ์›น๊ฐœ๋ฐœ ๊ธฐ์ดˆ๊ฐœ๋…

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /Tips/์›น๊ฐœ๋ฐœ_๊ธฐ์ดˆ๊ฐœ๋…/

S1ST โ€” ์ŠคํŠธ๋Ÿญ์ฒ˜ (Structure)


[S1ST1(์„น์…˜04)] CLAUDE.md ์™„์ „ ๊ฐ€์ด๋“œ

์ œ4์žฅ: CLAUDE.md๋กœ ํ”„๋กœ์ ํŠธ ๋งž์ถค ์„ค์ •

"์ข‹์€ ๋„๊ตฌ๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ๋งž์ถฐ์ง„๋‹ค" - ๋„๋„๋“œ ๋…ธ๋จผ

์ด ์žฅ์—์„œ๋Š” CLAUDE.md ํŒŒ์ผ์„ ํ†ตํ•œ ํ”„๋กœ์ ํŠธ ๋งž์ถค ์„ค์ •์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ ํ”„๋กœ์ ํŠธ์˜ ๊ณ ์œ ํ•œ ํŠน์„ฑ๊ณผ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž์ถฐ Claude Code๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฒด๊ณ„์ ์œผ๋กœ ํ•™์Šตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

CLAUDE.md๋Š” Claude Code๊ฐ€ ํ”„๋กœ์ ํŠธ์˜ ์ปจํ…์ŠคํŠธ๋ฅผ ์ดํ•ดํ•˜๊ณ , ํŒ€์˜ ์ฝ”๋”ฉ ๊ทœ์น™์„ ์ค€์ˆ˜ํ•˜๋ฉฐ, ์ผ๊ด€๋œ ํ’ˆ์งˆ์˜ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ๋•๋Š” ํ•ต์‹ฌ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}}}%%
flowchart TD
    A["CLAUDE.md์˜ ์—ญํ• ๊ณผ ์ค‘์š”์„ฑ"] --> B["ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ๋ฐ ์•„ํ‚คํ…์ฒ˜ ๋ฌธ์„œํ™”"]
    B --> C["์ฝ”๋”ฉ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ ์ •์˜"]
    C --> D["๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์ž๋™ํ™” ์„ค์ •"]
    D --> E["ํŒ€ ํ˜‘์—…์„ ์œ„ํ•œ ๊ทœ์น™ ์ˆ˜๋ฆฝ"]
    E --> F["์‹ค์ „ ํ”„๋กœ์ ํŠธ ์˜ˆ์ œ์™€ ์ตœ์ ํ™” ์ „๋žต"]
    
    classDef chapterStyle fill:#f1f5f9,stroke:#475569,stroke-width:2px,color:#1e293b
    
    class A,B,C,D,E,F chapterStyle

์ด ์žฅ์—์„œ ๋‹ค๋ฃฐ ๋‚ด์šฉ

4.1 CLAUDE.md์˜ ์—ญํ• ๊ณผ ์ค‘์š”์„ฑ

CLAUDE.md๋ž€?

CLAUDE.md๋Š” ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— ์œ„์น˜ํ•˜๋Š” ํŠน๋ณ„ํ•œ ๋งˆํฌ๋‹ค์šด ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์€ Claude Code์—๊ฒŒ ํ”„๋กœ์ ํŠธ๋ณ„ ์ง€์นจ๊ณผ ๊ทœ์น™์„ ์ œ๊ณตํ•˜์—ฌ, ๋ณด๋‹ค ์ •ํ™•ํ•˜๊ณ  ์ผ๊ด€๋œ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}}}%%
mindmap
  root((CLAUDE.md ํ•ต์‹ฌ ๊ฐœ๋…))
    ํ”„๋กœ์ ํŠธ ์ปจํ…์ŠคํŠธ
      ๊ณ ์œ ํ•œ ํŠน์„ฑ ์ดํ•ด
      ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ ํŒŒ์•…
      ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์กฐ ์ธ์‹
    ์ง€์†์  ๊ทœ์น™ ์ ์šฉ
      ์„ธ์…˜ ๊ฐ„ ์ผ๊ด€์„ฑ ์œ ์ง€
      ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ ์ค€์ˆ˜
      ์ž๋™ ๊ทœ์น™ ๊ฒ€์ฆ
    ํŒ€ ์ง€์‹ ์ €์žฅ์†Œ
      ์•”๋ฌต์  ์ง€์‹ ๋ช…์‹œํ™”
      ๊ฐœ๋ฐœ ๊ฒฝํ—˜ ์ถ•์ 
      ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค ๊ณต์œ 

CLAUDE.md์˜ ํ•ต์‹ฌ ๊ฐœ๋…

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ์˜ˆ์‹œ

ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ/
โ”œโ”€โ”€ CLAUDE.md          # Claude Code ์„ค์ • ํŒŒ์ผ
โ”œโ”€โ”€ README.md          # ์ผ๋ฐ˜ ํ”„๋กœ์ ํŠธ ๋ฌธ์„œ
โ”œโ”€โ”€ package.json
โ””โ”€โ”€ src/

์™œ ์ค‘์š”ํ•œ๊ฐ€?

CLAUDE.md๋ฅผ ํ†ตํ•ด ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ฃผ์š” ์ด์ ๋“ค์„ ๊ตฌ์ฒด์ ์ธ ์˜ˆ์‹œ์™€ ํ•จ๊ป˜ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

1. ์ผ๊ด€์„ฑ ๋ณด์žฅ

CLAUDE.md๊ฐ€ ์—†์„ ๋•Œ์™€ ์žˆ์„ ๋•Œ์˜ ์ฐจ์ด๋ฅผ ๋น„๊ตํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

markdown
# CLAUDE.md
## ์ฝ”๋“œ ์Šคํƒ€์ผ

- ๋ชจ๋“  ํ•จ์ˆ˜๋Š” ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ ์ž‘์„ฑ
- ์„ธ๋ฏธ์ฝœ๋ก  ํ•ญ์ƒ ์‚ฌ์šฉ
- ๋“ค์—ฌ์“ฐ๊ธฐ๋Š” 2์นธ

2. ํŒ€ ๊ทœ์น™ ์ž๋™ ์ ์šฉ

ํŒ€์˜ Git ์ปค๋ฐ‹ ๊ทœ์น™์„ CLAUDE.md์— ์ •์˜ํ•˜๋ฉด, Claude Code๊ฐ€ ์ž๋™์œผ๋กœ ๊ทœ์น™์— ๋งž๋Š” ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

markdown
## Git ์ปค๋ฐ‹ ๊ทœ์น™
- feat: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€
- fix: ๋ฒ„๊ทธ ์ˆ˜์ •
- docs: ๋ฌธ์„œ ์ˆ˜์ •
- style: ์ฝ”๋“œ ํฌ๋งคํŒ… (๊ธฐ๋Šฅ ๋ณ€๊ฒฝ ์—†์Œ)
- refactor: ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง (๊ธฐ๋Šฅ ๋ณ€๊ฒฝ ์—†์Œ)
- test: ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€ ๋˜๋Š” ์ˆ˜์ •
- chore: ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค ๋˜๋Š” ๋ณด์กฐ ๋„๊ตฌ ๋ณ€๊ฒฝ

## ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ํ˜•์‹
<type>(<scope>): <subject>

์˜ˆ์‹œ
feat(auth): ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ์ถ”๊ฐ€
fix(api): ์‚ฌ์šฉ์ž ์กฐํšŒ ์‹œ null ์ฐธ์กฐ ์˜ค๋ฅ˜ ์ˆ˜์ •

์ด๋ ‡๊ฒŒ ์ •์˜ํ•˜๋ฉด Claude Code๊ฐ€ ์ž๋™์œผ๋กœ ์˜ฌ๋ฐ”๋ฅธ ํ˜•์‹์˜ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

3. ํ”„๋กœ์ ํŠธ ํŠนํ™” ์ง€์‹

ํ”„๋กœ์ ํŠธ์˜ ๋„๋ฉ”์ธ ์ง€์‹์„ ๋ช…์‹œํ•˜๋ฉด Claude Code๊ฐ€ ๋น„์ฆˆ๋‹ˆ์Šค ๋งฅ๋ฝ์„ ์ดํ•ดํ•˜๊ณ  ๋” ์ •ํ™•ํ•œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

markdown
## ๋„๋ฉ”์ธ ์šฉ์–ด
- SKU (Stock Keeping Unit): ์žฌ๊ณ  ๊ด€๋ฆฌ ๋‹จ์œ„
  - ์˜ˆ: "SHOE-NIKE-AF1-WHT-42" (๋‚˜์ดํ‚ค ์—์–ดํฌ์Šค1 ํฐ์ƒ‰ 42์‚ฌ์ด์ฆˆ)
- PDP (Product Detail Page): ์ƒํ’ˆ ์ƒ์„ธ ํŽ˜์ด์ง€
  - ์ฃผ์š” ์ปดํฌ๋„ŒํŠธ: ์ด๋ฏธ์ง€ ๊ฐค๋Ÿฌ๋ฆฌ, ๊ฐ€๊ฒฉ ์ •๋ณด, ์žฌ๊ณ  ์ƒํƒœ, ๋ฆฌ๋ทฐ
- CAC (Customer Acquisition Cost): ๊ณ ๊ฐ ํš๋“ ๋น„์šฉ
  - ๊ณ„์‚ฐ์‹: ์ด ๋งˆ์ผ€ํŒ… ๋น„์šฉ / ์‹ ๊ทœ ๊ณ ๊ฐ ์ˆ˜

## ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™
- ์žฌ๊ณ ๊ฐ€ 5๊ฐœ ์ดํ•˜์ผ ๋•Œ "ํ’ˆ์ ˆ ์ž„๋ฐ•" ํ‘œ์‹œ
- ์‹ ๊ทœ ํšŒ์›์€ ์ฒซ ๊ตฌ๋งค ์‹œ 10% ํ• ์ธ ์ž๋™ ์ ์šฉ
- 50,000์› ์ด์ƒ ๊ตฌ๋งค ์‹œ ๋ฌด๋ฃŒ ๋ฐฐ์†ก

CLAUDE.md vs README.md

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}}}%%
graph LR
    subgraph readme ["README.md"]
        A1["๋Œ€์ƒ: ์‚ฌ๋žŒ<br/>๊ฐœ๋ฐœ์ž, ์‚ฌ์šฉ์ž"]
        A2["๋ชฉ์ : ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ<br/>์‚ฌ์šฉ ๊ฐ€์ด๋“œ"]
        A3["๋‚ด์šฉ: ์„ค์น˜ ๋ฐฉ๋ฒ•<br/>API ๋ฌธ์„œ, ์˜ˆ์ œ"]
        A4["ํ˜•์‹: ์‚ฌ์šฉ์ž ์นœํ™”์ <br/>์„ค๋ช… ์ค‘์‹ฌ"]
    end
    
    subgraph claude ["CLAUDE.md"]
        B1["๋Œ€์ƒ: Claude Code<br/>AI ์–ด์‹œ์Šคํ„ดํŠธ"]
        B2["๋ชฉ์ : ์ž‘์—… ์ง€์นจ<br/>์ปจํ…์ŠคํŠธ ์ œ๊ณต"]
        B3["๋‚ด์šฉ: ์ฝ”๋”ฉ ๊ทœ์น™<br/>์•„ํ‚คํ…์ฒ˜, ํŒ€ ์ปจ๋ฒค์…˜"]
        B4["ํ˜•์‹: ๊ตฌ์กฐํ™”๋œ<br/>AI ์ดํ•ด ์ตœ์ ํ™”"]
    end
    
    A1 -.->|vs| B1
    A2 -.->|vs| B2
    A3 -.->|vs| B3
    A4 -.->|vs| B4
    
    classDef readmeStyle fill:#f1f5f9,stroke:#475569,stroke-width:2px,color:#1e293b
    classDef claudeStyle fill:#e2e8f0,stroke:#334155,stroke-width:2px,color:#1e293b
    
    class A1,A2,A3,A4 readmeStyle
    class B1,B2,B3,B4 claudeStyle

๋‘ ํŒŒ์ผ์˜ ์ฐจ์ด์ ๊ณผ ๊ฐ๊ฐ์˜ ์—ญํ• ์„ ๋ช…ํ™•ํžˆ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ ํ™œ์šฉ ์˜ˆ์‹œ

markdown
# README.md (์‚ฌ๋žŒ์„ ์œ„ํ•œ ๋ฌธ์„œ)
## ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ
์ด ํ”„๋กœ์ ํŠธ๋Š” ์ „์ž์ƒ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.

## ์„ค์น˜ ๋ฐฉ๋ฒ•

1. ์ €์žฅ์†Œ๋ฅผ ํด๋ก ํ•ฉ๋‹ˆ๋‹ค.
2. `npm install` ์‹คํ–‰
3. `npm start`๋กœ ์„œ๋ฒ„ ์‹œ์ž‘

---

# CLAUDE.md (Claude Code๋ฅผ ์œ„ํ•œ ๋ฌธ์„œ)
## ํ”„๋กœ์ ํŠธ ์•„ํ‚คํ…์ฒ˜
- ํŒจํ„ด: MVC + Repository Pattern
- ํ”„๋ก ํŠธ์—”๋“œ: React 18 + TypeScript
- ๋ฐฑ์—”๋“œ: Node.js + Express
- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค: PostgreSQL + Redis

## ์ฝ”๋“œ ์ƒ์„ฑ ๊ทœ์น™
- ๋ชจ๋“  API ์‘๋‹ต์€ ResponseDto๋กœ ๋ž˜ํ•‘
- ์—๋Ÿฌ๋Š” CustomError ํด๋ž˜์Šค ์‚ฌ์šฉ
- ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋Š” ๋ฐ˜๋“œ์‹œ try-catch ํฌํ•จ

4.2 ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ๋ฌธ์„œํ™”

๊ธฐ๋ณธ ๊ตฌ์กฐ ์„ค๋ช…

ํ”„๋กœ์ ํŠธ์˜ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ์™€ ๊ฐ ํŒŒ์ผ์˜ ์—ญํ• ์„ ๋ช…ํ™•ํžˆ ์ •์˜ํ•˜๋ฉด Claude Code๊ฐ€ ๋” ์ •ํ™•ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•œ ๊ตฌ์กฐ ๋‚˜์—ด์„ ๋„˜์–ด์„œ ๊ฐ ๋””๋ ‰ํ† ๋ฆฌ์˜ ์ฑ…์ž„๊ณผ ํŒŒ์ผ ๋ช…๋ช… ๊ทœ์น™๊นŒ์ง€ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

markdown
# CLAUDE.md

## ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

### ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ

src/

โ”œโ”€โ”€ components/ # React ์ปดํฌ๋„ŒํŠธ

โ”‚ โ”œโ”€โ”€ common/ # ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ

โ”‚ โ”œโ”€โ”€ features/ # ๊ธฐ๋Šฅ๋ณ„ ์ปดํฌ๋„ŒํŠธ

โ”‚ โ””โ”€โ”€ layouts/ # ๋ ˆ์ด์•„์›ƒ ์ปดํฌ๋„ŒํŠธ

โ”œโ”€โ”€ hooks/ # ์ปค์Šคํ…€ React ํ›…

โ”œโ”€โ”€ services/ # API ํ†ต์‹  ๋กœ์ง

โ”œโ”€โ”€ store/ # Redux ์Šคํ† ์–ด

โ”œโ”€โ”€ utils/ # ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜

โ””โ”€โ”€ types/ # TypeScript ํƒ€์ž… ์ •์˜


### ์ฃผ์š” ํŒŒ์ผ ์œ„์น˜
- ํ™˜๊ฒฝ ์„ค์ •: `.env`, `.env.example`
- API ์—”๋“œํฌ์ธํŠธ: `src/services/api.ts`
- ๋ผ์šฐํŒ… ์„ค์ •: `src/routes/index.tsx`
- ์ „์—ญ ์Šคํƒ€์ผ: `src/styles/global.css`

### ํŒŒ์ผ ๋ช…๋ช… ๊ทœ์น™
- ์ปดํฌ๋„ŒํŠธ: PascalCase (์˜ˆ: UserProfile.tsx)
- ์œ ํ‹ธ๋ฆฌํ‹ฐ: camelCase (์˜ˆ: formatDate.ts)
- ์ƒ์ˆ˜: UPPER_SNAKE_CASE (์˜ˆ: API_ENDPOINTS.ts)
- ์Šคํƒ€์ผ: kebab-case (์˜ˆ: user-profile.module.css)

์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด ๋ช…์‹œ

ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์š” ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด๊ณผ ๋””์ž์ธ ์›์น™์„ ๋ช…์‹œํ•˜๋ฉด ์ผ๊ด€์„ฑ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

markdown
## ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด

### ์ƒํƒœ ๊ด€๋ฆฌ
- Redux Toolkit ์‚ฌ์šฉ
- ๊ฐ ๊ธฐ๋Šฅ๋ณ„๋กœ slice ํŒŒ์ผ ์ƒ์„ฑ
- RTK Query๋กœ API ์ƒํƒœ ๊ด€๋ฆฌ

### ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ
```typescript
// ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋Š” ๋‹ค์Œ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฆ„
interface ComponentProps {
  // props ์ •์˜
}

export const ComponentName: React.FC<ComponentProps> = (props) => {
  // ํ›…์€ ์ตœ์ƒ๋‹จ์—
  // ๋กœ์ง
  // JSX ๋ฐ˜ํ™˜
}

๋ฐ์ดํ„ฐ ํ๋ฆ„

  1. ์‚ฌ์šฉ์ž ์•ก์…˜ โ†’ 2. Action dispatch โ†’ 3. Reducer ์ฒ˜๋ฆฌ โ†’ 4. State ์—…๋ฐ์ดํŠธ โ†’ 5. UI ๋ฆฌ๋ Œ๋”๋ง

4.3 ์ฝ”๋”ฉ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ ์ •์˜

์–ธ์–ด๋ณ„ ์Šคํƒ€์ผ ๊ฐ€์ด๋“œ

ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ณ„๋กœ ์ผ๊ด€๋œ ์ฝ”๋”ฉ ์Šคํƒ€์ผ์„ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‹จ์ˆœํ•œ ํฌ๋งคํŒ… ๊ทœ์น™์„ ๋„˜์–ด์„œ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๋Š” ํ•ต์‹ฌ ์š”์†Œ์ž…๋‹ˆ๋‹ค.

markdown
## ์ฝ”๋”ฉ ์Šคํƒ€์ผ

### TypeScript/JavaScript
- ํ•จ์ˆ˜๋ช…: camelCase
- ์ปดํฌ๋„ŒํŠธ๋ช…: PascalCase  
- ์ƒ์ˆ˜: UPPER_SNAKE_CASE
- ํŒŒ์ผ๋ช…: kebab-case.ts

### ๋ช…๋ช… ๊ทœ์น™ ์˜ˆ์‹œ
```typescript
// ์ข‹์€ ์˜ˆ
const getUserData = async (userId: string) => { }
const MAX_RETRY_COUNT = 3;
export const UserProfile: React.FC = () => { }

// ํ”ผํ•ด์•ผ ํ•  ์˜ˆ
const get_user_data = async (userid) => { }
const maxretrycount = 3;
export const userprofile = () => { }
```

```mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}}}%%
flowchart TD
    A["Import ์ˆœ์„œ"] --> B["1. React ๊ด€๋ จ<br/>React, useState, useEffect"]
    B --> C["2. ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ<br/>axios, lodash, moment"]
    C --> D["3. ๋‚ด๋ถ€ ๋ชจ๋“ˆ<br/>@/constants, @/services"]
    D --> E["4. ์ƒ๋Œ€ ๊ฒฝ๋กœ import<br/>../components, ./utils"]
    E --> F["5. ์Šคํƒ€์ผ ํŒŒ์ผ<br/>CSS, SCSS ํŒŒ์ผ"]
    
    classDef importStyle fill:#f1f5f9,stroke:#475569,stroke-width:2px,color:#1e293b
    classDef rootStyle fill:#e2e8f0,stroke:#334155,stroke-width:3px,color:#1e293b
    
    class A rootStyle
    class B,C,D,E,F importStyle
```

### Import ์ˆœ์„œ

```typescript
import React, { useState, useEffect } from 'react';
import { useSelector } from 'react-redux';
import axios from 'axios';

import { API_ENDPOINTS } from '@/constants';
import { UserService } from '@/services';

import { Button } from '../components';
import './styles.css';
```

์ฝ”๋“œ ํ’ˆ์งˆ ๊ธฐ์ค€

๋†’์€ ํ’ˆ์งˆ์˜ ์ฝ”๋“œ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์ฒด์ ์ธ ๊ธฐ์ค€๊ณผ ๊ทœ์น™์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ์ค€์€ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์‹œ ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋กœ๋„ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค.

markdown
## ์ฝ”๋“œ ํ’ˆ์งˆ ๊ธฐ์ค€

```mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}}}%%
graph TB
    subgraph rules ["ํ•จ์ˆ˜ ์ž‘์„ฑ ๊ทœ์น™"]
        A["ํ•œ ๊ฐ€์ง€ ์ผ๋งŒ ์ˆ˜ํ–‰<br/>Single Responsibility"]
        B["ํ•จ์ˆ˜ ๊ธธ์ด 50์ค„ ์ดํ•˜<br/>๊ฐ€๋…์„ฑ ํ–ฅ์ƒ"]
        C["๋งค๊ฐœ๋ณ€์ˆ˜ 3๊ฐœ ์ดํ•˜<br/>๋ณต์žก์„ฑ ๊ฐ์†Œ"]
        D["๋ณต์žก๋„ 10 ์ดํ•˜<br/>Cyclomatic Complexity"]
    end
    
    classDef ruleStyle fill:#e2e8f0,stroke:#334155,stroke-width:2px,color:#1e293b
    
    class A,B,C,D ruleStyle

ํ•จ์ˆ˜ ์ž‘์„ฑ ๊ทœ์น™

์—๋Ÿฌ ์ฒ˜๋ฆฌ

typescript
// ๋ชจ๋“  ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋Š” try-catch ์‚ฌ์šฉ
try {
  const data = await fetchData();
  return { success: true, data };
} catch (error) {
  console.error('Error fetching data:', error);
  return { success: false, error: error.message };
}

์ฃผ์„ ์ž‘์„ฑ

typescript
/**
 * ์‚ฌ์šฉ์ž ์ธ์ฆ ํ† ํฐ์„ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
 * @param token - JWT ํ† ํฐ
 * @returns ํ† ํฐ์ด ์œ ํšจํ•œ์ง€ ์—ฌ๋ถ€
 */
const validateToken = (token: string): boolean => {
  // TODO(#123): ํ† ํฐ ๋งŒ๋ฃŒ ์‹œ๊ฐ„ ๊ฒ€์ฆ ๋กœ์ง ์ถ”๊ฐ€
  return jwt.verify(token, SECRET_KEY);
}

[S1ST14] CLAUDE.md โ€” ์‹ค์ „ ํ™œ์šฉ, ํŒ€ ํ˜‘์—…, ์ตœ์ ํ™”

4.4 ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์ž๋™ํ™”

๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •

์ผ๊ด€๋œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์œ„ํ•œ ํ•„์ˆ˜ ๋„๊ตฌ์™€ ์„ค์ •์„ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ํŒ€์›์ด ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹จ๊ณ„๋ณ„ ๊ฐ€์ด๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

markdown
## ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

### ํ•„์ˆ˜ ๋„๊ตฌ
- Node.js 18.0 ์ด์ƒ
- pnpm 8.0 ์ด์ƒ (npm ๋Œ€์‹  ์‚ฌ์šฉ)
- VS Code + ์ถ”์ฒœ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ

### ์ดˆ๊ธฐ ์„ค์ • ์Šคํฌ๋ฆฝํŠธ
# ์˜์กด์„ฑ ์„ค์น˜
pnpm install

# ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •
cp .env.example .env

# ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
pnpm db:migrate

# ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹œ์ž‘
pnpm dev

VS Code ์„ค์ •

.vscode/settings.json ํŒŒ์ผ์ด ์ž๋™์œผ๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ ์ƒ์„ฑ ํ…œํ”Œ๋ฆฟ

pnpm generate:component ์‹คํ–‰ ์‹œ

  1. ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„ ์ž…๋ ฅ
  2. ์ปดํฌ๋„ŒํŠธ ํƒ€์ž… ์„ ํƒ (์ผ๋ฐ˜/ํŽ˜์ด์ง€/๋ ˆ์ด์•„์›ƒ)
  3. ์ž๋™์œผ๋กœ ํŒŒ์ผ ์ƒ์„ฑ

Git Hooks

4.5 ํŒ€ ํ˜‘์—…์„ ์œ„ํ•œ ๊ทœ์น™ ์„ค์ •

์ฝ”๋“œ ๋ฆฌ๋ทฐ ๊ฐ€์ด๋“œ๋ผ์ธ

ํšจ๊ณผ์ ์ธ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ์œ„ํ•œ ์ฒด๊ณ„์ ์ธ ๊ฐ€์ด๋“œ๋ผ์ธ์„ ์ˆ˜๋ฆฝํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•œ ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋ฅผ ๋„˜์–ด์„œ ๋ฆฌ๋ทฐ์–ด์™€ ์ž‘์„ฑ์ž ๋ชจ๋‘๋ฅผ ์œ„ํ•œ ์‹ค์งˆ์ ์ธ ๊ฐ€์ด๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

markdown
## ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๊ฐ€์ด๋“œ๋ผ์ธ

### PR ์ž‘์„ฑ ๊ทœ์น™
1. ์ œ๋ชฉ: `[ํƒ€์ž…] ๊ฐ„๋‹จํ•œ ์„ค๋ช…`
2. ๋ณธ๋ฌธ ํ•„์ˆ˜ ํฌํ•จ ์‚ฌํ•ญ
   - ๋ณ€๊ฒฝ ์‚ฌํ•ญ ์š”์•ฝ
   - ๊ด€๋ จ ์ด์Šˆ ๋ฒˆํ˜ธ
   - ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•
   - ์Šคํฌ๋ฆฐ์ƒท (UI ๋ณ€๊ฒฝ ์‹œ)

### ๋ฆฌ๋ทฐ ์ฒดํฌ๋ฆฌ์ŠคํŠธ
- [ ] ์ฝ”๋“œ๊ฐ€ ํ”„๋กœ์ ํŠธ ์ปจ๋ฒค์…˜์„ ๋”ฐ๋ฅด๋Š”๊ฐ€?
- [ ] ํ…Œ์ŠคํŠธ๊ฐ€ ์ถฉ๋ถ„ํžˆ ์ž‘์„ฑ๋˜์—ˆ๋Š”๊ฐ€?
- [ ] ์„ฑ๋Šฅ ์˜ํ–ฅ์€ ๊ณ ๋ ค๋˜์—ˆ๋Š”๊ฐ€?
- [ ] ๋ณด์•ˆ ์ทจ์•ฝ์ ์€ ์—†๋Š”๊ฐ€?
- [ ] ๋ฌธ์„œ๋Š” ์—…๋ฐ์ดํŠธ๋˜์—ˆ๋Š”๊ฐ€?

### ๋จธ์ง€ ๊ธฐ์ค€
- ์ตœ์†Œ 1๋ช…์˜ ์Šน์ธ ํ•„์š”
- ๋ชจ๋“  CI ์ฒดํฌ ํ†ต๊ณผ
- ์ถฉ๋Œ ํ•ด๊ฒฐ ์™„๋ฃŒ

### ๋ธŒ๋žœ์น˜ ์ „๋žต

์ฒด๊ณ„์ ์ธ Git ๋ธŒ๋žœ์น˜ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์ „๋žต๊ณผ ๊ทœ์น™์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. Git Flow๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์‹ค์šฉ์ ์ธ ๋ธŒ๋žœ์น˜ ์ „๋žต์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

## Git ๋ธŒ๋žœ์น˜ ์ „๋žต

### ๋ธŒ๋žœ์น˜ ๋ช…๋ช… ๊ทœ์น™
- feature/๊ธฐ๋Šฅ๋ช…: ์ƒˆ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ
- fix/์ด์Šˆ๋ฒˆํ˜ธ: ๋ฒ„๊ทธ ์ˆ˜์ •
- hotfix/์„ค๋ช…: ๊ธด๊ธ‰ ์ˆ˜์ •
- refactor/๋Œ€์ƒ: ๋ฆฌํŒฉํ† ๋ง

### ๋ธŒ๋žœ์น˜ ํ”Œ๋กœ์šฐ
main
  โ”œโ”€โ”€ develop
  โ”‚     โ”œโ”€โ”€ feature/user-auth
  โ”‚     โ”œโ”€โ”€ feature/payment
  โ”‚     โ””โ”€โ”€ fix/123
  โ””โ”€โ”€ hotfix/critical-bug

### ๋จธ์ง€ ์ „๋žต
- feature โ†’ develop: Squash merge
- develop โ†’ main: Merge commit
- hotfix โ†’ main: Cherry-pick

ํŒ€ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜

์ด์Šˆ ํ…œํ”Œ๋ฆฟ

๋ฒ„๊ทธ ๋ฆฌํฌํŠธ

๊ธฐ๋Šฅ ์š”์ฒญ

์ผ์ผ ์Šคํƒ ๋“œ์—…

๋งค์ผ ์˜ค์ „ 10์‹œ, ๋‹ค์Œ ๋‚ด์šฉ ๊ณต์œ 

  1. ์–ด์ œ ํ•œ ์ผ
  2. ์˜ค๋Š˜ ํ•  ์ผ
  3. ๋ธ”๋กœ์ปค

๊ธฐ์ˆ  ๊ฒฐ์ • ๊ธฐ๋ก

docs/adr/ ๋””๋ ‰ํ† ๋ฆฌ์— Architecture Decision Records ์ž‘์„ฑ

์‹ค์ „ ์˜ˆ์ œ: ๋Œ€๊ทœ๋ชจ ์ „์ž์ƒ๊ฑฐ๋ž˜ ํ”„๋กœ์ ํŠธ

์‹ค์ œ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ฒด๊ณ„์ ์ด๊ณ  ํฌ๊ด„์ ์ธ CLAUDE.md ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

markdown
# E-Commerce Project Guidelines for Claude Code

## ํ”„๋กœ์ ํŠธ ๊ฐœ์š”
๋Œ€๊ทœ๋ชจ ์ „์ž์ƒ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ (์ผ 100๋งŒ MAU)

## ํ•ต์‹ฌ ๊ธฐ์ˆ  ์Šคํƒ
- Frontend: Next.js 14, TypeScript, Tailwind CSS
- State: Zustand + React Query
- Backend: Node.js, Express, PostgreSQL
- Infrastructure: AWS, Docker, K8s

## ๋„๋ฉ”์ธ ์ง€์‹

### ๋น„์ฆˆ๋‹ˆ์Šค ์šฉ์–ด
- SKU: Stock Keeping Unit (์žฌ๊ณ  ๊ด€๋ฆฌ ์ฝ”๋“œ)
- GMV: Gross Merchandise Volume (์ด ๊ฑฐ๋ž˜์•ก)
- AOV: Average Order Value (ํ‰๊ท  ์ฃผ๋ฌธ ๊ธˆ์•ก)
- Cart Abandonment: ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ดํƒˆ

### ํ•ต์‹ฌ ๋„๋ฉ”์ธ ๋ชจ๋ธ
```typescript
interface Product {
  id: string;
  sku: string;
  name: string;
  price: Money;
  inventory: Inventory;
  category: Category;
}

interface Order {
  id: string;
  userId: string;
  items: OrderItem[];
  status: OrderStatus;
  payment: Payment;
  shipping: Shipping;
}
```

## ์„ฑ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ
- ํŽ˜์ด์ง€ ๋กœ๋“œ: 3์ดˆ ์ด๋‚ด
- API ์‘๋‹ต: 200ms ์ด๋‚ด
- 99.9% ๊ฐ€์šฉ์„ฑ

## ๋ณด์•ˆ ๊ทœ์น™
- ๋ชจ๋“  ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๊ฒ€์ฆ
- SQL Injection ๋ฐฉ์ง€
- XSS ๋ฐฉ์ง€
- ๋ฏผ๊ฐ ์ •๋ณด ์•”ํ˜ธํ™”

## ํ…Œ์ŠคํŠธ ์ „๋žต
- ๋‹จ์œ„ ํ…Œ์ŠคํŠธ: 80% ์ปค๋ฒ„๋ฆฌ์ง€
- ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ: ํ•ต์‹ฌ ํ”Œ๋กœ์šฐ
- E2E ํ…Œ์ŠคํŠธ: ๊ตฌ๋งค ํ”Œ๋กœ์šฐ

## ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค
1. feature ๋ธŒ๋žœ์น˜์—์„œ ๊ฐœ๋ฐœ
2. PR ์ƒ์„ฑ ๋ฐ ๋ฆฌ๋ทฐ
3. develop ๋ธŒ๋žœ์น˜ ๋จธ์ง€
4. ์Šคํ…Œ์ด์ง• ์ž๋™ ๋ฐฐํฌ
5. QA ๊ฒ€์ฆ
6. ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ (์Šน์ธ ํ•„์š”)

## Claude Code ํŠน๋ณ„ ์ง€์นจ
- ์„ฑ๋Šฅ์„ ํ•ญ์ƒ ๊ณ ๋ คํ•˜์—ฌ ์ฝ”๋“œ ์ž‘์„ฑ
- ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์•„ํ‚คํ…์ฒ˜ ์œ ์ง€
- ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฒฝ๊ณ„ ์ค€์ˆ˜
- ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์šฐ์„ 
- ์—๋Ÿฌ ๋กœ๊น… ํ•„์ˆ˜

ํ”„๋กœ ํŒ: CLAUDE.md ์ตœ์ ํ™”

1. ์„น์…˜๋ณ„ ์šฐ์„ ์ˆœ์œ„

์ค‘์š”๋„์— ๋”ฐ๋ผ CLAUDE.md์˜ ๋‚ด์šฉ์„ ๊ตฌ์กฐํ™”ํ•˜๋ฉด Claude Code๊ฐ€ ๋” ํšจ๊ณผ์ ์œผ๋กœ ๊ทœ์น™์„ ์ธ์‹ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

markdown
# CLAUDE.md

## ๐Ÿšจ ์ค‘์š” ๊ทœ์น™ (ํ•ญ์ƒ ์ค€์ˆ˜)
- ์ ˆ๋Œ€ main ๋ธŒ๋žœ์น˜์— ์ง์ ‘ ํ‘ธ์‹œ ๊ธˆ์ง€
- ๋ชจ๋“  API ํ‚ค๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ
- ํ…Œ์ŠคํŠธ ์—†๋Š” ์ฝ”๋“œ ์ปค๋ฐ‹ ๊ธˆ์ง€

## ๐Ÿ“‹ ์ผ๋ฐ˜ ๊ฐ€์ด๋“œ๋ผ์ธ
- ๊ฐ€๋Šฅํ•˜๋ฉด ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ
- ์ฃผ์„์€ ์ตœ์†Œํ™”, ์ฝ”๋“œ๋กœ ์„ค๋ช…

## ๐Ÿ’ก ๊ถŒ์žฅ์‚ฌํ•ญ
- ์ƒˆ๋กœ์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋„์ž… ์ „ ํŒ€ ๋…ผ์˜
- ์„ฑ๋Šฅ ์ตœ์ ํ™”๋Š” ์ธก์ • ํ›„ ์ง„ํ–‰ 

2. ๋™์  ์—…๋ฐ์ดํŠธ

CLAUDE.md๋ฅผ ์—…๋ฐ์ดํŠธํ–ˆ์„ ๋•Œ Claude Code๊ฐ€ ์ƒˆ๋กœ์šด ๊ทœ์น™์„ ์ธ์‹ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

bash
# CLAUDE.md ์—…๋ฐ์ดํŠธ ์‹œ Claude Code์—๊ฒŒ ์•Œ๋ฆฌ๊ธฐ
claude "CLAUDE.md ํŒŒ์ผ์ด ์—…๋ฐ์ดํŠธ๋˜์—ˆ์–ด. 
์ƒˆ๋กœ์šด ๊ทœ์น™๋“ค์„ ํ™•์ธํ•˜๊ณ  ์š”์•ฝํ•ด์ค˜"

3. ํ™˜๊ฒฝ๋ณ„ ์„ค์ • ๊ด€๋ฆฌ

๋‹ค์–‘ํ•œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ๋”ฐ๋ฅธ ๋‹ค๋ฅธ ์„ค์ •์„ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ๋ณ„ ์„ค์ •

๊ฐœ๋ฐœ ํ™˜๊ฒฝ

ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ

4. ์ง€์†์  ๊ฐœ์„ ๊ณผ ๋ฒ„์ „ ๊ด€๋ฆฌ

CLAUDE.md ์ž์ฒด๋„ ์†Œํ”„ํŠธ์›จ์–ด์ฒ˜๋Ÿผ ๋ฒ„์ „ ๊ด€๋ฆฌํ•˜๊ณ  ์ง€์†์ ์œผ๋กœ ๊ฐœ์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

CLAUDE.md ๋ฒ„์ „ ๊ด€๋ฆฌ

v2.1.0 (2024-03-15)

์ถ”๊ฐ€

๋ณ€๊ฒฝ

์ œ๊ฑฐ

v2.0.0 (2024-02-01)

์ฃผ์š” ๋ณ€๊ฒฝ

๊ฐœ์„  ์‚ฌ์ดํด ์˜ˆ์‹œ

bash
# ์›”๊ฐ„ CLAUDE.md ๋ฆฌ๋ทฐ
claude "์ง€๋‚œ ํ•œ ๋‹ฌ๊ฐ„ ์šฐ๋ฆฌ ํŒ€์˜ ๊ฐœ๋ฐœ ํŒจํ„ด์„ ๋ถ„์„ํ•ด์„œ
CLAUDE.md์—์„œ ๊ฐœ์„ ์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ์ฐพ์•„์ค˜"

# ๊ทœ์น™ ํšจ๊ณผ์„ฑ ๋ถ„์„
claude "ํ˜„์žฌ CLAUDE.md ๊ทœ์น™๋“ค์ด ์‹ค์ œ๋กœ ์ž˜ ์ง€์ผœ์ง€๊ณ  ์žˆ๋Š”์ง€
์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๋ถ„์„ํ•ด์„œ ์ค€์ˆ˜์œจ์„ ๋ณด๊ณ ํ•ด์ค˜"

# ์ƒˆ๋กœ์šด ๊ทœ์น™ ์ œ์•ˆ
claude "์ตœ๊ทผ ๋ฐœ์ƒํ•œ ๋ฒ„๊ทธ๋“ค์„ ๋ถ„์„ํ•ด์„œ
์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ๊ทœ์น™์„ ์ œ์•ˆํ•ด์ค˜"

๋งˆ์น˜๋ฉฐ

์ด ์žฅ์—์„œ๋Š” CLAUDE.md๋ฅผ ํ†ตํ•œ ํ”„๋กœ์ ํŠธ ๋งž์ถค ์„ค์ • ๋ฐฉ๋ฒ•์„ ์ฒด๊ณ„์ ์œผ๋กœ ํ•™์Šตํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ํ•™์Šต ๋‚ด์šฉ

1. ์ „๋žต์  ์„ค์ • ๊ตฌ์„ฑ

2. ์‹ค์šฉ์  ์šด์˜ ๋ฐฉ๋ฒ•

์‹ค๋ฌด ์ ์šฉ ๋กœ๋“œ๋งต

1๋‹จ๊ณ„: ๊ธฐ๋ณธ CLAUDE.md ์ž‘์„ฑ (1์ฃผ)

2๋‹จ๊ณ„: ํ™˜๊ฒฝ๋ณ„ ์„ค์ • ๋ถ„๋ฆฌ (2์ฃผ)

3๋‹จ๊ณ„: ๊ณ ๋„ํ™”์™€ ์ตœ์ ํ™” (์ง€์†์ )

CLAUDE.md์˜ ์ „๋žต์  ๊ฐ€์น˜

  1. ์ผ๊ด€์„ฑ ๋ณด์žฅ: ๋ชจ๋“  ํŒ€์›์ด ๋™์ผํ•œ ํ’ˆ์งˆ ๊ธฐ์ค€์œผ๋กœ ์ฝ”๋“œ ์ƒ์„ฑ
  2. ํ•™์Šต ๊ฐ€์†ํ™”: ์ƒˆ๋กœ์šด ํŒ€์›์˜ ๋น ๋ฅธ ์˜จ๋ณด๋”ฉ๊ณผ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ
  3. ์ง€์‹ ์ฒด๊ณ„ํ™”: ํŒ€์˜ ์•”๋ฌต์  ์ง€์‹์„ ๋ช…์‹œ์  ๊ทœ์น™์œผ๋กœ ์ „ํ™˜
  4. ํ’ˆ์งˆ ์ž๋™ํ™”: ์ˆ˜๋™ ๊ฒ€ํ†  ์—†์ด๋„ ์ผ์ • ํ’ˆ์งˆ ์ด์ƒ ๋ณด์žฅ
  5. ๋ฌธํ™” ์ „ํŒŒ: ํŒ€์˜ ๊ฐœ๋ฐœ ์ฒ ํ•™๊ณผ ๊ฐ€์น˜๊ด€์„ ์ฝ”๋“œ์— ๋ฐ˜์˜

์ค‘์š”ํ•œ ๊ฒƒ์€ CLAUDE.md๊ฐ€ ๋‹จ์ˆœํ•œ ๊ทœ์น™ ๋ฌธ์„œ๊ฐ€ ์•„๋‹ˆ๋ผ, ํŒ€์˜ ๊ฐœ๋ฐœ ๋ฌธํ™”์™€ ์ฒ ํ•™์„ ๋‹ด์€ ์‚ด์•„์žˆ๋Š” ๊ฐ€์ด๋“œ๋ถ์ด๋ผ๋Š” ์ ์ž…๋‹ˆ๋‹ค. ์ •๊ธฐ์ ์ธ ์—…๋ฐ์ดํŠธ์™€ ์ง€์†์ ์ธ ๊ฐœ์„ ์„ ํ†ตํ•ด ํŒ€์˜ ์„ฑ์žฅ๊ณผ ํ•จ๊ป˜ ์ง„ํ™”ํ•˜๋Š” ๋„๊ตฌ๋กœ ํ™œ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ์žฅ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์„ค์ •์„ ๋ฐ”ํƒ•์œผ๋กœ ๋‹ค์–‘ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋ณ„๋กœ Claude Code๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ์ „๋žต๊ณผ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค๋ฅผ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


[S1ST2] Skills ์„ค์น˜ ๋ฐ ๊ตฌ์กฐ

[S1ST3] Remote Control (์›๊ฒฉ ์‚ฌ์šฉ) ์„ค์ • ๊ตฌ์กฐ

[S1ST4] Memory (๋ฉ”๋ชจ๋ฆฌ) ์„ค์ • ๊ตฌ์กฐ

[S1ST5] .claudeignore โ€” ํŒŒ์ผ ์ œ์™ธ ๊ตฌ์กฐ

[S1ST6] Doctor Command โ€” ํ™˜๊ฒฝ ์ง„๋‹จ ๋„๊ตฌ

[S1ST7] Status Line โ€” ์ƒํƒœ ํ‘œ์‹œ์ค„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•

[S1ST8] Keybindings โ€” ๋‹จ์ถ•ํ‚ค ์„ค์ •

[S1ST9] Output Styles โ€” ์ถœ๋ ฅ ์Šคํƒ€์ผ ์„ค์ •

[S1ST10] DevContainer โ€” ๊ฐœ๋ฐœ ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ

[S1ST11] LLM Gateway โ€” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ LLM ๋ผ์šฐํŒ…

[S1ST12] Server Managed Settings โ€” ์„œ๋ฒ„ ๊ด€๋ฆฌ ์„ค์ •

[S1ST13] Network Config โ€” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๋„คํŠธ์›Œํฌ ์„ค์ •

[S1ST15] Output Styles ํ™•์žฅ โ€” ์„ค๋ช…ํ˜•/ํ•™์Šตํ˜•

[S1ST16] Books 1๊ถŒ โ€” ์ž‘์—… ํ™˜๊ฒฝ๊ณผ ํ™•์žฅ ๊ตฌ์กฐ

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /ํ•™์Šต์šฉ_Books_New/1๊ถŒ_Claude_ClaudeCode_์‚ฌ์šฉ๋ฒ•/

[S1ST17] Books 2๊ถŒ โ€” ๊ธฐ์ˆ ์Šคํƒ ๊ธฐ์ดˆ ๊ตฌ์กฐ

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /ํ•™์Šต์šฉ_Books_New/2๊ถŒ_ํ’€์Šคํƒ_์›น์‚ฌ์ดํŠธ_๊ฐœ๋ฐœ_๊ธฐ์ดˆ์ง€์‹/

[S1ST18] Books 3๊ถŒ โ€” SAL Grid ๊ตฌ์กฐ ์ดํ•ด

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /ํ•™์Šต์šฉ_Books_New/3๊ถŒ_ํ”„๋กœ์ ํŠธ_๊ด€๋ฆฌ_๋ฐฉ๋ฒ•/

[S1ST19] ์‹ค์ „ Tips โ€” ์„ค์น˜/์‹œ์ž‘/๊ฐœ๋ฐœ/DB

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /Tips/

[S1ST20] ์™ธ๋ถ€ ์—ฐ๋™ Guide โ€” 5๋Œ€ ์„œ๋น„์Šค ์„ค์ • ๊ธฐ์ดˆ

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /์™ธ๋ถ€_์—ฐ๋™_์„ค์ •_Guide/

[S1ST21] .claude ์ฐธ๊ณ  โ€” Commands/Rules/References

๐Ÿ“ ๊ฒฝ๋กœ: .claude/commands/, .claude/references/, .claude/rules/

S1WF โ€” ์›Œํฌํ”Œ๋กœ์šฐ (Workflow)

[S1WF1(์„น์…˜25b)] ํ™˜๊ฒฝ ์„ค์ • & ์ฒซ ํ”„๋กœ์ ํŠธ

์ œ2์žฅ: ์„ค์น˜์™€ ์ดˆ๊ธฐ ์„ค์ •

"์‹œ์ž‘์ด ๋ฐ˜์ด๋‹ค" - ํ•œ๊ตญ ์†๋‹ด

์ด์ œ Claude Code๋ฅผ ์„ค์น˜ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ์žฅ์—์„œ๋Š” ๊ฐ ์šด์˜์ฒด์ œ๋ณ„๋กœ ๋‹จ๊ณ„๋ณ„ ์„ค์น˜ ๊ฐ€์ด๋“œ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ์„ค์น˜ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋“ค๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๋„ ํ•จ๊ป˜ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

2.1 ์‹œ์Šคํ…œ ์š”๊ตฌ์‚ฌํ•ญ

์ตœ์†Œ ์š”๊ตฌ์‚ฌํ•ญ

๋จผ์ € ์‹œ์Šคํ…œ์ด Claude Code๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ตœ์†Œ ์š”๊ตฌ์‚ฌํ•ญ์€ ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ์œ ์‚ฌํ•˜๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ํ˜„๋Œ€์ ์ธ ์‹œ์Šคํ…œ์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ์š”์†Œ์ตœ์†Œ ์š”๊ตฌ์‚ฌํ•ญ๊ถŒ์žฅ ์‚ฌํ•ญ
์šด์˜์ฒด์ œmacOS 12+, Windows 10+, Ubuntu 20.04+์ตœ์‹  ๋ฒ„์ „
RAM8GB16GB ์ด์ƒ
์ €์žฅ๊ณต๊ฐ„2GB ์—ฌ์œ  ๊ณต๊ฐ„10GB ์ด์ƒ
์ธํ„ฐ๋„ท์•ˆ์ •์ ์ธ ์—ฐ๊ฒฐ ํ•„์š”๊ณ ์† ์ธํ„ฐ๋„ท
Node.js18.0 ์ด์ƒ20.0 ์ด์ƒ

์‚ฌ์ „ ์ค€๋น„์‚ฌํ•ญ

์„ค์น˜ ์ „ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ์„ ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„์„ ์—ด๊ณ  ๋‹ค์Œ ๋ช…๋ น์–ด๋“ค์„ ์‹คํ–‰ํ•˜์—ฌ ํ•„์š”ํ•œ ๋„๊ตฌ๋“ค์ด ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

ํ„ฐ๋ฏธ๋„ ์‹คํ–‰ ๋ฐฉ๋ฒ•

bash
# Node.js ๋ฒ„์ „ ํ™•์ธ
node --version

# npm ๋ฒ„์ „ ํ™•์ธ
npm --version

# Git ์„ค์น˜ ํ™•์ธ (์„ ํƒ์‚ฌํ•ญ์ด์ง€๋งŒ ๊ถŒ์žฅ)
git --version

Node.js๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š๊ฑฐ๋‚˜ ๋ฒ„์ „์ด ๋‚ฎ๋‹ค๋ฉด

  1. Node.js ๊ณต์‹ ์‚ฌ์ดํŠธ์—์„œ LTS ๋ฒ„์ „์„ ๋‹ค์šด๋กœ๋“œํ•˜์„ธ์š”
  2. ๋˜๋Š” ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”
๊ถŒ์žฅ์‚ฌํ•ญ: LTS(Long Term Support) ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ์ •์„ฑ๊ณผ ํ˜ธํ™˜์„ฑ์„ ๋ณด์žฅ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2.2 ์„ค์น˜ ๊ฐ€์ด๋“œ (OS๋ณ„)

์ด์ œ ์šด์˜์ฒด์ œ๋ณ„๋กœ Claude Code๋ฅผ ์„ค์น˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ OS์— ์ตœ์ ํ™”๋œ ์„ค์น˜ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

macOS์—์„œ ์„ค์น˜ํ•˜๊ธฐ

macOS์—์„œ๋Š” ๋‘ ๊ฐ€์ง€ ์„ค์น˜ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ• 1: npm์„ ํ†ตํ•œ ์„ค์น˜ (๊ถŒ์žฅ)

๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๊ณ  ์•ˆ์ •์ ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

bash
# Claude Code ์„ค์น˜
npm install -g @anthropic-ai/claude-code

# ์„ค์น˜ ํ™•์ธ
claude --version

๋ฐฉ๋ฒ• 2: Homebrew๋ฅผ ํ†ตํ•œ ์„ค์น˜

bash
# Homebrew tap ์ถ”๊ฐ€
brew tap anthropic-ai/claude-code

# Claude Code ์„ค์น˜
brew install claude-code

# ์„ค์น˜ ํ™•์ธ
claude --version

macOS ํŠนํ™” ์„ค์ •

bash
# ํ„ฐ๋ฏธ๋„ ๊ถŒํ•œ ์„ค์ • (ํ•„์š”ํ•œ ๊ฒฝ์šฐ)
# ์‹œ์Šคํ…œ ํ™˜๊ฒฝ์„ค์ • > ๋ณด์•ˆ ๋ฐ ๊ฐœ์ธ์ •๋ณด > ๊ฐœ์ธ์ •๋ณด > ์ „์ฒด ๋””์Šคํฌ ์ ‘๊ทผ ๊ถŒํ•œ
# Terminal.app ๋˜๋Š” ์‚ฌ์šฉ ์ค‘์ธ ํ„ฐ๋ฏธ๋„ ์•ฑ ์ถ”๊ฐ€

# Spotlight ๊ฒ€์ƒ‰ ์ œ์™ธ (์„ ํƒ์‚ฌํ•ญ)
# .claude-code ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ Spotlight ๊ฒ€์ƒ‰์—์„œ ์ œ์™ธํ•˜์—ฌ ์„ฑ๋Šฅ ํ–ฅ์ƒ

Windows์—์„œ ์„ค์น˜ํ•˜๊ธฐ

Windows์—์„œ๋Š” WSL 2(Windows Subsystem for Linux)๋ฅผ ํ†ตํ•ด Claude Code๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ Claude Code๋Š” Windows ๋„ค์ดํ‹ฐ๋ธŒ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, Linux ํ™˜๊ฒฝ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์‹œ์Šคํ…œ ์š”๊ตฌ์‚ฌํ•ญ

ํ•ญ๋ชฉ์ตœ์†Œ ์กฐ๊ฑด
OSWindows 10 (21H2) ๋˜๋Š” Windows 11 + WSL 2
RAM4GB ์ด์ƒ
๋„คํŠธ์›Œํฌ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ (OAuth ์ธ์ฆ ๋ฐ API ํ˜ธ์ถœ)
์†Œํ”„ํŠธ์›จ์–ดWSL 2, Node.js 18+, Git(์„ ํƒ์‚ฌํ•ญ)

1๋‹จ๊ณ„: WSL 2 ์„ค์น˜

PowerShell์„ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰ํ•˜๊ณ  ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.

powershell
# WSL ์„ค์น˜ (Ubuntu 22.04 LTS ๊ธฐ๋ณธ ํฌํ•จ)
wsl --install

# ์„ค์น˜ ํ›„ ์‹œ์Šคํ…œ ์žฌ๋ถ€ํŒ…

๊ธฐ์กด์— WSL 1์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์—…๊ทธ๋ ˆ์ด๋“œํ•˜์„ธ์š”.

powershell
# WSL 2๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ
wsl --set-version Ubuntu 2

# ์„ค์น˜ ์ƒํƒœ ํ™•์ธ
wsl --status
wsl --list --verbose

2๋‹จ๊ณ„: Node.js ์„ค์น˜ (WSL ๋‚ด๋ถ€)

WSL ํ„ฐ๋ฏธ๋„(Ubuntu)์„ ์—ด๊ณ  NVM์„ ํ†ตํ•ด Node.js๋ฅผ ์„ค์น˜ํ•˜์„ธ์š”.

bash
# NVM ์„ค์น˜
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

# ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ ์šฉ
source ~/.bashrc

# Node.js 18 LTS ์„ค์น˜ ๋ฐ ์‚ฌ์šฉ
nvm install 18
nvm use 18

# ์„ค์น˜ ํ™•์ธ
node --version
npm --version
์ค‘์š”: which node ๋ช…๋ น ์‹คํ–‰ ์‹œ ๊ฒฝ๋กœ๊ฐ€ /home//.nvm/...์œผ๋กœ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. /mnt/c/... ๊ฒฝ๋กœ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด Windows์™€ ๊ฒฝ๋กœ๊ฐ€ ์ถฉ๋Œํ•˜๋Š” ์ƒํ™ฉ์ด๋ฏ€๋กœ ์œ„ ๊ณผ์ •์„ ๋‹ค์‹œ ์ง„ํ–‰ํ•˜์„ธ์š”.

3๋‹จ๊ณ„: Claude Code ์„ค์น˜

bash
# Claude Code ์„ค์น˜
npm install -g @anthropic-ai/claude-code

# ์„ค์น˜ ํ™•์ธ
claude --version

์„ค์น˜ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ

์˜ค๋ฅ˜ํ•ด๊ฒฐ๋ฐฉ๋ฒ•
OS detection failednpm config set os linux ์‹คํ–‰ ํ›„ npm install -g @anthropic-ai/claude-code --force --no-os-check
exec: node: not foundNode.js ์„ค์น˜ ์žฌํ™•์ธ, which node ๊ฒฝ๋กœ ์ ๊ฒ€
๊ถŒํ•œ ์˜ค๋ฅ˜npm config set prefix '~/.npm-global' ์‹คํ–‰ ํ›„ ์žฌ์„ค์น˜

Linux (Ubuntu/Debian)์—์„œ ์„ค์น˜ํ•˜๊ธฐ

bash
# ์‹œ์Šคํ…œ ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ
sudo apt update && sudo apt upgrade

# Node.js ์„ค์น˜ (์•„์ง ์—†๋Š” ๊ฒฝ์šฐ)
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install nodejs

# Claude Code ์„ค์น˜
sudo npm install -g @anthropic-ai/claude-code

# ์„ค์น˜ ํ™•์ธ
claude --version

# ๊ถŒํ•œ ์„ค์ • (ํ•„์š”ํ•œ ๊ฒฝ์šฐ)
sudo chmod +x /usr/local/bin/claude

2.3 ์ฒซ ๋ฒˆ์งธ ๋ช…๋ น์–ด ์‹คํ–‰ํ•˜๊ธฐ

์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ Claude Code์˜ ๊ธฐ๋ณธ ์„ค์ •์„ ์ง„ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

API ํ‚ค ์„ค์ •

Claude Code๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด API ํ‚ค ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ฌด๋ฃŒ ์‚ฌ์šฉ๋Ÿ‰์œผ๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1๋‹จ๊ณ„: API ํ‚ค ๋ฐœ๊ธ‰๋ฐ›๊ธฐ

  1. Anthropic Console์— ์ ‘์†ํ•˜์„ธ์š”
  2. ๊ณ„์ •์„ ๋งŒ๋“ค๊ฑฐ๋‚˜ ๋กœ๊ทธ์ธํ•˜์„ธ์š”
  3. "API Keys" ์„น์…˜์—์„œ ์ƒˆ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜์„ธ์š”

2๋‹จ๊ณ„: API ํ‚ค ์„ค์ •ํ•˜๊ธฐ

bash
# API ํ‚ค ์„ค์ • ๋ช…๋ น์–ด ์‹คํ–‰
claude login

# ํ”„๋กฌํ”„ํŠธ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด ๋ณต์‚ฌํ•œ API ํ‚ค๋ฅผ ๋ถ™์—ฌ๋„ฃ๊ธฐ
# (ํ‚ค๋ฅผ ์ž…๋ ฅํ•  ๋•Œ๋Š” ํ™”๋ฉด์— ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ •์ƒ์ž…๋‹ˆ๋‹ค)
๋ณด์•ˆ ์ฃผ์˜์‚ฌํ•ญ: API ํ‚ค๋Š” ๊ฐœ์ธ ๊ณ„์ •๊ณผ ์—ฐ๊ฒฐ๋˜๋ฏ€๋กœ ํƒ€์ธ๊ณผ ๊ณต์œ ํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•˜์„ธ์š”.

์ฒซ ๋ฒˆ์งธ ๋Œ€ํ™”

์ด์ œ Claude Code์™€ ์ฒซ ๋Œ€ํ™”๋ฅผ ์‹œ์ž‘ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

bash
# ์ฒซ ์ธ์‚ฌ (Claude๊ฐ€ ๋‹ต๋ณ€ํ•˜๋ฉด ์„ฑ๊ณต!)
claude "์•ˆ๋…•ํ•˜์„ธ์š”, Claude! ์ฒ˜์Œ ๋ต™๊ฒ ์Šต๋‹ˆ๋‹ค."

# ๊ฐ„๋‹จํ•œ ์ž‘์—… ์š”์ฒญํ•ด๋ณด๊ธฐ
claude "ํ˜„์žฌ ์‹œ์Šคํ…œ ์ •๋ณด๋ฅผ ์•Œ๋ ค์ฃผ์„ธ์š”"

# ๋””๋ ‰ํ† ๋ฆฌ ํƒ์ƒ‰ํ•ด๋ณด๊ธฐ
claude "ํ˜„์žฌ ํด๋”์— ์–ด๋–ค ํŒŒ์ผ๋“ค์ด ์žˆ๋Š”์ง€ ๋ณด์—ฌ์ฃผ์„ธ์š”"

์‘๋‹ต์ด ์ •์ƒ์ ์œผ๋กœ ์ถœ๋ ฅ๋˜๋ฉด ์„ค์น˜์™€ ๊ธฐ๋ณธ ์„ค์ •์ด ์™„๋ฃŒ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. Claude Code ์‚ฌ์šฉ ์ค€๋น„๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋Œ€ํ™”ํ˜• ๋ชจ๋“œ vs ๋ช…๋ น ๋ชจ๋“œ

๋ช…๋ น ๋ชจ๋“œ (์ผํšŒ์„ฑ ์ž‘์—…)

bash
claude "package.json ํŒŒ์ผ์„ ์ฝ๊ณ  ์š”์•ฝํ•ด์ค˜"

๋Œ€ํ™”ํ˜• ๋ชจ๋“œ (์ง€์†์ ์ธ ์ž‘์—…)

๋ช…๋ น ๋ชจ๋“œ๋Š” ๋‹จ๋ฐœ์„ฑ ์ž‘์—…์— ์ ํ•ฉํ•˜์ง€๋งŒ, ๋ณต์žกํ•œ ํ”„๋กœ์ ํŠธ๋‚˜ ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ์•ผ ํ•˜๋Š” ์ž‘์—…์—๋Š” ๋Œ€ํ™”ํ˜• ๋ชจ๋“œ๊ฐ€ ๋” ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

bash
# ๋Œ€ํ™”ํ˜• ๋ชจ๋“œ ์‹œ์ž‘
claude

# ์ด์ œ ์ง€์†์ ์œผ๋กœ ๋Œ€ํ™” ๊ฐ€๋Šฅ
> ์ƒˆ๋กœ์šด React ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์‹ถ์–ด
> TypeScript๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ๋„ ์„ค์ •ํ•ด์ค˜
> Material-UI๋„ ์ถ”๊ฐ€ํ•ด์ค˜
mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}, "flowchart": {"htmlLabels": false, "useMaxWidth": false}}}%%
graph LR
    subgraph interactive ["๋Œ€ํ™”ํ˜• ๋ชจ๋“œ์˜ ์žฅ์ "]
        A["์ปจํ…์ŠคํŠธ ์œ ์ง€<br/>์ด์ „ ๋Œ€ํ™” ๋‚ด์šฉ ๊ธฐ์–ต"]
        B["๋‹จ๊ณ„์  ๊ฐœ์„ <br/>์ ์ง„์  ์š”๊ตฌ์‚ฌํ•ญ ์กฐ์ •"]
        C["ํšจ์œจ์  ํ˜‘์—…<br/>๋Œ€ํ™”๋ฅผ ํ†ตํ•œ ๊ตฌ์ฒดํ™”"]
        
        A --> B
        B --> C
        C --> A
    end
    
    classDef advantageStyle fill:#e2e8f0,stroke:#334155,stroke-width:2px,color:#1e293b
    
    class A,B,C advantageStyle

๋Œ€ํ™”ํ˜• ๋ชจ๋“œ์˜ ์žฅ์ 

[S1WF22] ํ™˜๊ฒฝ ์„ค์ • โ€” ๊ธฐ๋ณธ ์„ค์ • ์ตœ์ ํ™” & ๋ฌธ์ œ ํ•ด๊ฒฐ

2.4 ๊ธฐ๋ณธ ์„ค์ • ์ตœ์ ํ™”

Claude Code๋ฅผ ๋” ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐœ์ธ์˜ ์ž‘์—… ํ™˜๊ฒฝ๊ณผ ์„ ํ˜ธ๋„์— ๋งž๊ฒŒ ์„ค์ •์„ ์กฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„น์…˜์—์„œ๋Š” ์ฃผ์š” ์„ค์ • ์˜ต์…˜๋“ค๊ณผ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ „์—ญ ์„ค์ • ํŒŒ์ผ

Claude Code์˜ ๋ชจ๋“  ์„ค์ •์€ ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ์˜ ์„ค์ • ํŒŒ์ผ์—์„œ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์ด ํŒŒ์ผ์„ ํ†ตํ•ด ๊ฐœ์ธํ™”๋œ ์ž‘์—… ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ค์ • ํŒŒ์ผ ์œ„์น˜: ~/.claude/settings.json

json
{
  "api_key": "sk-ant-...",              // API ์ธ์ฆ ํ‚ค
  "default_model": "claude-3-opus-20240229", // ๊ธฐ๋ณธ ์‚ฌ์šฉ ๋ชจ๋ธ
  "theme": "dark",                       // ์ธํ„ฐํŽ˜์ด์Šค ํ…Œ๋งˆ (dark/light)
  "editor": "vscode",                    // ์„ ํ˜ธ ์—๋””ํ„ฐ
  "auto_commit": false,                  // ์ž๋™ ์ปค๋ฐ‹ ์—ฌ๋ถ€
  "language": "ko",                      // ๊ธฐ๋ณธ ์–ธ์–ด ์„ค์ •
  "permissions": {
    "file_write": true,                  // ํŒŒ์ผ ์“ฐ๊ธฐ ๊ถŒํ•œ
    "file_read": true,                   // ํŒŒ์ผ ์ฝ๊ธฐ ๊ถŒํ•œ
    "command_execution": true            // ๋ช…๋ น ์‹คํ–‰ ๊ถŒํ•œ
  }
}

์ฃผ์š” ์„ค์ • ์˜ต์…˜ ์„ค๋ช…

๊ถŒํ•œ ์„ค์ •

Claude Code๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ด๋ฏ€๋กœ ์ ์ ˆํ•œ ๊ถŒํ•œ ๊ด€๋ฆฌ๊ฐ€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์—… ํ™˜๊ฒฝ๊ณผ ๋ณด์•ˆ ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๊ถŒํ•œ์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}, "flowchart": {"htmlLabels": false, "useMaxWidth": false}}}%%
graph TB
    subgraph permissions ["๊ถŒํ•œ ์œ ํ˜•๋ณ„ ์„ค๋ช…"]
        direction TB
        A["file_read<br/>ํ”„๋กœ์ ํŠธ ํŒŒ์ผ ์ฝ๊ธฐ<br/>์ฝ”๋“œ ๋ถ„์„, ๋ฆฌ๋ทฐ์— ํ•„์ˆ˜"]
        B["file_write<br/>ํŒŒ์ผ ์ƒ์„ฑ ๋ฐ ์ˆ˜์ •<br/>๊ฐœ๋ฐœ ์ž‘์—…์— ํ•„์ˆ˜"]
        C["command_execution<br/>์‹œ์Šคํ…œ ๋ช…๋ น ์‹คํ–‰<br/>๋นŒ๋“œ, ํ…Œ์ŠคํŠธ ๋“ฑ์— ํ•„์š”"]
        
        A --> B
        B --> C
    end
    
    classDef permissionStyle fill:#f1f5f9,stroke:#475569,stroke-width:2px,color:#1e293b
    
    class A,B,C permissionStyle

๊ถŒํ•œ ์œ ํ˜•๋ณ„ ์„ค๋ช…

๋ณด์•ˆ๊ณผ ํŽธ์˜์„ฑ์˜ ๊ท ํ˜•์„ ์œ„ํ•œ ๊ถŒํ•œ ์„ค์ • ์ „๋žต

bash
# ๋ชจ๋“  ๊ถŒํ•œ ํ—ˆ์šฉ (๊ฐœ๋ฐœ ํ™˜๊ฒฝ, ์ฃผ์˜ ํ•„์š”)
claude --dangerously-skip-permissions

# ํŠน์ • ๋„๊ตฌ๋งŒ ํ—ˆ์šฉ (settings.json์—์„œ ์„ค์ •)
# allowedTools / disallowedTools ํ•„๋“œ ์‚ฌ์šฉ

# ๊ถŒํ•œ ํ™•์ธ ๋ชจ๋“œ (๊ธฐ๋ณธ๊ฐ’ โ€” ์œ„ํ—˜ ์ž‘์—… ์‹œ ์‚ฌ์šฉ์ž ํ™•์ธ)
claude

์—๋””ํ„ฐ ํ†ตํ•ฉ

๊ฐœ๋ฐœ ํšจ์œจ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด Claude Code๋ฅผ ๊ธฐ์กด ์—๋””ํ„ฐ์™€ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—๋””ํ„ฐ ํ†ตํ•ฉ์„ ํ†ตํ•ด ์ฝ”๋“œ ํŽธ์ง‘๊ณผ AI ์ง€์›์„ ์›ํ™œํ•˜๊ฒŒ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}, "flowchart": {"htmlLabels": false, "useMaxWidth": false}}}%%
graph LR
    subgraph editors ["์ง€์›๋˜๋Š” ์—๋””ํ„ฐ"]
        A["Visual Studio Code<br/>๊ฐ€์žฅ ์™„์ „ํ•œ ํ†ตํ•ฉ ์ง€์›"]
        B["Vim/Neovim<br/>ํ„ฐ๋ฏธ๋„ ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ"]
        C["JetBrains IDEs<br/>IntelliJ, PyCharm ๋“ฑ"]
        D["Sublime Text<br/>๊ฒฝ๋Ÿ‰ ์—๋””ํ„ฐ"]
    end
    
    classDef editorStyle fill:#e2e8f0,stroke:#334155,stroke-width:2px,color:#1e293b
    
    class A,B,C,D editorStyle

์ง€์›๋˜๋Š” ์—๋””ํ„ฐ

์„ ํ˜ธํ•˜๋Š” ์—๋””ํ„ฐ์™€ ํ†ตํ•ฉ ์„ค์ •

bash
# VSCode ํ†ตํ•ฉ
claude config set editor vscode

# Vim ํ†ตํ•ฉ
claude config set editor vim

# ์—๋””ํ„ฐ์—์„œ ์ง์ ‘ Claude Code ํ˜ธ์ถœ
# VSCode: Cmd+Shift+P > "Claude: Ask"

ํ”„๋ก์‹œ ์„ค์ • (๊ธฐ์—… ํ™˜๊ฒฝ)

๋งŽ์€ ๊ธฐ์—…์—์„œ๋Š” ๋ณด์•ˆ์ƒ์˜ ์ด์œ ๋กœ ํ”„๋ก์‹œ ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€ ์ธํ„ฐ๋„ท์— ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค. Claude Code๋„ ์ด๋Ÿฐ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ”„๋ก์‹œ ์„ค์ •์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}, "flowchart": {"htmlLabels": false, "useMaxWidth": false}}}%%
flowchart TD
    A["ํ”„๋ก์‹œ ์„ค์ •์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ"]
    
    A --> B["ํšŒ์‚ฌ ๋ฐฉํ™”๋ฒฝ ๋’ค์—์„œ<br/>์ž‘์—…ํ•˜๋Š” ๊ฒฝ์šฐ"]
    A --> C["VPN์„ ํ†ตํ•ด ํšŒ์‚ฌ ๋„คํŠธ์›Œํฌ์—<br/>์—ฐ๊ฒฐ๋œ ๊ฒฝ์šฐ"]
    A --> D["ํŠน์ • ๋ณด์•ˆ ์ •์ฑ…์ด ์ ์šฉ๋œ<br/>๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ"]
    
    classDef caseStyle fill:#f1f5f9,stroke:#475569,stroke-width:2px,color:#1e293b
    classDef rootStyle fill:#e2e8f0,stroke:#334155,stroke-width:3px,color:#1e293b
    
    class A rootStyle
    class B,C,D caseStyle

ํ”„๋ก์‹œ ์„ค์ •์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ

๊ธฐ์—… ํ™˜๊ฒฝ์—์„œ ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์„ค์ • ๋ฐฉ๋ฒ•

bash
# HTTP ํ”„๋ก์‹œ ์„ค์ •
export HTTP_PROXY=http://proxy.company.com:8080
export HTTPS_PROXY=http://proxy.company.com:8080

# Claude Code ์ „์šฉ ํ”„๋ก์‹œ ์„ค์ •
claude config set proxy http://proxy.company.com:8080

2.5 ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€์ด๋“œ

Claude Code ์„ค์น˜ ๋ฐ ์ดˆ๊ธฐ ์‚ฌ์šฉ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ๋“ค๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ ์ƒํ™ฉ๋ณ„๋กœ ๋‹จ๊ณ„์ ์ธ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ์„ ์ œ์‹œํ•˜๋ฏ€๋กœ, ์ฐจ๊ทผ์ฐจ๊ทผ ๋”ฐ๋ผํ•˜๋ฉด ๋Œ€๋ถ€๋ถ„์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

๋‹ค์Œ์€ Claude Code ์‚ฌ์šฉ์ž๋“ค์ด ๊ฐ€์žฅ ์ž์ฃผ ๊ฒฝํ—˜ํ•˜๋Š” ๋ฌธ์ œ๋“ค๊ณผ ๊ฒ€์ฆ๋œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๋“ค์ž…๋‹ˆ๋‹ค.

1. "command not found: claude"

์ด ์˜ค๋ฅ˜๋Š” Claude Code๊ฐ€ ์„ค์น˜๋˜์—ˆ์ง€๋งŒ ์‹œ์Šคํ…œ PATH์— ๋“ฑ๋ก๋˜์ง€ ์•Š์•˜์„ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์›์ธ ๋ถ„์„

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

bash
# 1๋‹จ๊ณ„: npm ์ „์—ญ ๊ฒฝ๋กœ ํ™•์ธ
npm config get prefix

# 2๋‹จ๊ณ„: PATH์— ์ถ”๊ฐ€ (bash/zsh)
echo 'export PATH="$PATH:$(npm config get prefix)/bin"' >> ~/.bashrc
source ~/.bashrc

# 3๋‹จ๊ณ„: ์„ค์น˜ ํ™•์ธ
claude --version

์ถ”๊ฐ€ ํ•ด๊ฒฐ์ฑ…

2. "EACCES: permission denied"

์ด ์˜ค๋ฅ˜๋Š” npm ์ „์—ญ ์„ค์น˜ ์‹œ ๊ถŒํ•œ ๋ฌธ์ œ๋กœ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ Linux๋‚˜ macOS์—์„œ ์ž์ฃผ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

์›์ธ ๋ถ„์„

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

bash
# ๋ฐฉ๋ฒ• 1: ๊ถŒํ•œ ์ˆ˜์ • (๊ถŒ์žฅ)
sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}

# ๋ฐฉ๋ฒ• 2: npx๋ฅผ ํ†ตํ•œ ์‹คํ–‰ (์ž„์‹œ ํ•ด๊ฒฐ)
npx @anthropic-ai/claude-code

# ๋ฐฉ๋ฒ• 3: npm ์ „์—ญ ๋””๋ ‰ํ† ๋ฆฌ ๋ณ€๊ฒฝ
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

3. "API rate limit exceeded"

API ์‚ฌ์šฉ๋Ÿ‰ ์ œํ•œ์— ๋„๋‹ฌํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค. Anthropic์˜ API ์ •์ฑ…์— ๋”ฐ๋ผ ์‹œ๊ฐ„๋‹น ์š”์ฒญ ํšŸ์ˆ˜๊ฐ€ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

์›์ธ ๋ถ„์„

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

bash
# 1๋‹จ๊ณ„: ํ˜„์žฌ ์ƒํƒœ ํ™•์ธ
claude status

# 2๋‹จ๊ณ„: ์ž๋™ ์žฌ์‹œ๋„ ๊ฐ„๊ฒฉ ์„ค์ • (๋ฐ€๋ฆฌ์ดˆ)
claude config set retry_delay 5000

# 3๋‹จ๊ณ„: ์ตœ๋Œ€ ์žฌ์‹œ๋„ ํšŸ์ˆ˜ ์„ค์ •
claude config set max_retries 3

์˜ˆ๋ฐฉ ๋ฐฉ๋ฒ•

4. "SSL certificate problem"

๊ธฐ์—… ํ™˜๊ฒฝ์—์„œ ์ž์ฒด ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋„คํŠธ์›Œํฌ ๋ณด์•ˆ ์ •์ฑ…์œผ๋กœ ์ธํ•ด SSL ์ธ์ฆ์„œ ๊ฒ€์ฆ์— ์‹คํŒจํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์›์ธ ๋ถ„์„

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

bash
# โš ๏ธ ์ž„์‹œ ํ•ด๊ฒฐ์ฑ… (๋ณด์•ˆ ์œ„ํ—˜ ์žˆ์Œ)
export NODE_TLS_REJECT_UNAUTHORIZED=0

# โœ… ๊ถŒ์žฅ ํ•ด๊ฒฐ์ฑ…: ํšŒ์‚ฌ ์ธ์ฆ์„œ ์„ค์น˜
# 1๋‹จ๊ณ„: IT ๋ถ€์„œ์—์„œ ์ธ์ฆ์„œ ํŒŒ์ผ ๋ฐ›๊ธฐ
# 2๋‹จ๊ณ„: npm์— ์ธ์ฆ์„œ ๋“ฑ๋ก
npm config set cafile /path/to/company-cert.pem

# 3๋‹จ๊ณ„: Claude Code ์ „์šฉ ์„ค์ •
claude config set tls_verify true
claude config set ca_bundle /path/to/company-cert.pem

๋ณด์•ˆ ๊ณ ๋ ค์‚ฌํ•ญ

์„ฑ๋Šฅ ์ตœ์ ํ™” ํŒ

Claude Code์˜ ์‘๋‹ต ์†๋„์™€ ํšจ์œจ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์„ค์ •๋“ค์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ์™€ ์ž‘์—… ํŒจํ„ด์— ๋”ฐ๋ผ ์ ์ ˆํžˆ ์กฐ์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์„ธ์š”.

1. ์บ์‹œ ํ™œ์„ฑํ™”

๋ฐ˜๋ณต์ ์ธ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ์บ์‹œํ•˜์—ฌ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

bash
# ์‘๋‹ต ์บ์‹ฑ ํ™œ์„ฑํ™”
claude config set cache_enabled true

# ์บ์‹œ ์œ ์ง€ ์‹œ๊ฐ„ ์„ค์ • (์ดˆ ๋‹จ์œ„, ๊ธฐ๋ณธ: 3600์ดˆ = 1์‹œ๊ฐ„)
claude config set cache_ttl 3600

# ์บ์‹œ ํฌ๊ธฐ ์ œํ•œ ์„ค์ • (MB ๋‹จ์œ„)
claude config set cache_max_size 100

์บ์‹œ ํ™œ์šฉ ํŒ

Junior Developer - ๊ฐ€์† ํ•™์Šต์ž

bash
# ํ•™์Šต ๊ฐ€์†ํ™”
claude "์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž์˜ ๋น ๋ฅธ ์„ฑ์žฅ์„ ์œ„ํ•ด ์ด ์ž‘์—…์„ ํ•™์Šต ๊ธฐํšŒ๋กœ ํ™œ์šฉํ•ด์ค˜
- ๋‹จ๊ณ„๋ณ„ ๊ตฌํ˜„ ๊ฐ€์ด๋“œ
- ๊ฐ ๋‹จ๊ณ„์—์„œ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋Š” ํ•ต์‹ฌ ๊ฐœ๋…
- ํ”ํžˆ ํ•˜๋Š” ์‹ค์ˆ˜์™€ ์˜ˆ๋ฐฉ๋ฒ•
- ์‹œ๋‹ˆ์–ด์—๊ฒŒ ์งˆ๋ฌธํ•  ํƒ€์ด๋ฐ๊ณผ ๋ฐฉ๋ฒ•
- ์ž์‹ ์˜ ์ง„์ „์„ ์ธก์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

๋‹จ์ˆœํžˆ ์ •๋‹ต์„ ์ฃผ๊ธฐ๋ณด๋‹ค๋Š” ์‚ฌ๊ณ  ๊ณผ์ •์„ ๊ธฐ๋ฅผ ์ˆ˜ ์žˆ๋„๋ก ์•ˆ๋‚ดํ•ด์ค˜"

[S1WF2(์„น์…˜03)] 4๋‹จ๊ณ„ ํ™ฉ๊ธˆ ์›Œํฌํ”Œ๋กœ์šฐ

7.1 ํƒ์ƒ‰-๊ณ„ํš-์ฝ”๋”ฉ-์ปค๋ฐ‹ ์‚ฌ์ดํด

EPCC(Explore-Plan-Code-Commit) ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ์ฒด๊ณ„์ ์ด๊ณ  ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ๋ฌด์ž‘์ • ์ฝ”๋”ฉ์„ ์‹œ์ž‘ํ•˜๋Š” ๋Œ€์‹ , ์ถฉ๋ถ„ํ•œ ์ดํ•ด์™€ ๊ณ„ํš์„ ๋ฐ”ํƒ•์œผ๋กœ ํ•œ ์‹ ์ค‘ํ•œ ๊ฐœ๋ฐœ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

EPCC (Explore-Plan-Code-Commit) ์›Œํฌํ”Œ๋กœ์šฐ

๊ฐ ๋‹จ๊ณ„๋Š” ๊ณ ์œ ํ•œ ๋ชฉ์ ๊ณผ ์‚ฐ์ถœ๋ฌผ์„ ๊ฐ€์ง€๋ฉฐ, ์ˆœํ™˜์ ์œผ๋กœ ๋ฐ˜๋ณต๋˜์–ด ์ง€์†์ ์ธ ํ’ˆ์งˆ ํ–ฅ์ƒ์„ ๋‹ฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}}}%%
flowchart TD
    A[Explore<br/>์ฝ”๋“œ๋ฒ ์ด์Šค ์ดํ•ด] --> B[Plan<br/>์ ‘๊ทผ ๋ฐฉ๋ฒ• ์„ค๊ณ„]
    B --> C[Code<br/>๊ตฌํ˜„ ๋ฐ ํ…Œ์ŠคํŠธ]
    C --> D[Commit<br/>๊ฒ€์ฆ ๋ฐ ์ปค๋ฐ‹]
    D --> A
    
    E[์ฒด๊ณ„์  ๋ถ„์„<br/>์•„ํ‚คํ…์ฒ˜ ํŒŒ์•…<br/>๊ธฐ์ˆ  ๋ถ€์ฑ„ ์‹๋ณ„] -.-> A
    F[๊ตฌํ˜„ ์ „๋žต ์ˆ˜๋ฆฝ<br/>์ž‘์—… ๋ถ„ํ•ด<br/>๋ฆฌ์Šคํฌ ํ‰๊ฐ€] -.-> B
    G[์ ์ง„์  ๊ตฌํ˜„<br/>TDD ์ ์šฉ<br/>ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ] -.-> C
    H[์ฝ”๋“œ ๊ฒ€์ฆ<br/>์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€<br/>ํ’ˆ์งˆ ํ™•์ธ] -.-> D
    
    classDef primaryStyle fill:#e2e8f0,stroke:#334155,stroke-width:3px,color:#1e293b
    classDef detailStyle fill:#f1f5f9,stroke:#475569,stroke-width:2px,color:#1e293b
    
    class A,B,C,D primaryStyle
    class E,F,G,H detailStyle

1๋‹จ๊ณ„: Explore (ํƒ์ƒ‰) - ์ฒด๊ณ„์  ์ฝ”๋“œ๋ฒ ์ด์Šค ์ดํ•ด

ํƒ์ƒ‰ ๋‹จ๊ณ„๋Š” ์„ฑ๊ณต์ ์ธ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๊ธฐ๋ฐ˜์„ ๋งˆ๋ จํ•˜๋Š” ์ค‘์š”ํ•œ ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ์ถฉ๋ถ„ํ•œ ์ดํ•ด ์—†์ด ์ฝ”๋”ฉ์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์€ ์ž˜๋ชป๋œ ์„ค๊ณ„์™€ ๊ธฐ์ˆ  ๋ถ€์ฑ„๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Claude Code๋Š” ๋ณต์žกํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๋ถ„์„ํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋น ๋ฅด๊ฒŒ ์ „์ฒด ๊ตฌ์กฐ๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ์•„ํ‚คํ…์ฒ˜ ๋ถ„์„

bash
# ๊ณ ์ˆ˜์ค€ ์•„ํ‚คํ…์ฒ˜ ์ดํ•ด
claude "์ด ํ”„๋กœ์ ํŠธ์˜ ์ „์ฒด ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋ถ„์„ํ•ด์ค˜.
- ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค vs ๋ชจ๋†€๋ฆฌ์‹ ๊ตฌ์กฐ
- ์ฃผ์š” ๋„๋ฉ”์ธ๊ณผ ๊ฒฝ๊ณ„
- ๋ฐ์ดํ„ฐ ํ๋ฆ„๊ณผ ์˜์กด์„ฑ ๋ฐฉํ–ฅ
- ์™ธ๋ถ€ ์‹œ์Šคํ…œ๊ณผ์˜ ํ†ตํ•ฉ ์ง€์ 
- ๋ณด์•ˆ ๊ฒฝ๊ณ„์™€ ์ธ์ฆ ๋ฐฉ์‹"

# ๊ธฐ์ˆ  ์Šคํƒ ์‹ฌ์ธต ๋ถ„์„
claude "์‚ฌ์šฉ๋œ ๊ธฐ์ˆ  ์Šคํƒ์„ ์ข…ํ•ฉ์ ์œผ๋กœ ๋ถ„์„ํ•ด์ค˜.
- ํ”„๋ก ํŠธ์—”๋“œ: ํ”„๋ ˆ์ž„์›Œํฌ, ์ƒํƒœ ๊ด€๋ฆฌ, ๋นŒ๋“œ ๋„๊ตฌ
- ๋ฐฑ์—”๋“œ: ์–ธ์–ด, ํ”„๋ ˆ์ž„์›Œํฌ, ORM, ๋ฏธ๋“ค์›จ์–ด
- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค: ํƒ€์ž…, ๋ฒ„์ „, ์Šคํ‚ค๋งˆ ์„ค๊ณ„ ํŒจํ„ด
- ์ธํ”„๋ผ: ์ปจํ…Œ์ด๋„ˆํ™”, ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜, ๋ชจ๋‹ˆํ„ฐ๋ง
- ๊ฐ ๊ธฐ์ˆ  ์„ ํƒ์˜ ์ด์œ ์™€ ์žฅ๋‹จ์  ๋ถ„์„"

# ์ฝ”๋“œ ํ’ˆ์งˆ๊ณผ ์ปจ๋ฒค์…˜ ํ‰๊ฐ€
claude "ํ”„๋กœ์ ํŠธ์˜ ์ฝ”๋“œ ํ’ˆ์งˆ๊ณผ ๊ฐœ๋ฐœ ๊ด€ํ–‰์„ ํ‰๊ฐ€ํ•ด์ค˜.
- ๋„ค์ด๋ฐ ๊ทœ์น™๊ณผ ์ผ๊ด€์„ฑ ํ™•์ธ
- ํŒŒ์ผ/ํด๋” ๊ตฌ์กฐ ํŒจํ„ด
- ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€์™€ ์ „๋žต
- ๋ฌธ์„œํ™” ์ˆ˜์ค€๊ณผ ํ’ˆ์งˆ
- CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์„ฑ
- ์ฝ”๋“œ ๋ฆฌ๋ทฐ ํ”„๋กœ์„ธ์Šค ํ”์ "

๊ธฐ๋Šฅ๋ณ„ ์‹ฌ์ธต ์ถ”์ ๊ณผ ๋ถ„์„

bash
# ๋น„์ฆˆ๋‹ˆ์Šค ํฌ๋ฆฌํ‹ฐ์ปฌ ๊ธฐ๋Šฅ ๋ถ„์„
claude "์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ์ข…ํ•ฉ ๋ถ„์„ํ•ด์ค˜.
- ์ธ์ฆ ํ”Œ๋กœ์šฐ (๋กœ๊ทธ์ธ, ํ† ํฐ ๊ด€๋ฆฌ, ์„ธ์…˜)
- ๊ถŒํ•œ ๋ถ€์—ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜ (RBAC, ABAC)
- ๋ณด์•ˆ ๊ณ ๋ ค์‚ฌํ•ญ (์•”ํ˜ธํ™”, ๊ฒ€์ฆ)
- ํ”„๋ก ํŠธ์—”๋“œ-๋ฐฑ์—”๋“œ ์—ฐ๋™ ๋ฐฉ์‹
- ์—๋Ÿฌ ์ฒ˜๋ฆฌ์™€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜
- ํ™•์žฅ ๊ฐ€๋Šฅ์„ฑ๊ณผ ๊ฐœ์„ ์ "

# ๋ฐ์ดํ„ฐ ํ๋ฆ„๊ณผ ์ƒํƒœ ๊ด€๋ฆฌ
claude "์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ถ”์ ํ•˜๊ณ  ๋ถ„์„ํ•ด์ค˜.
- ์‚ฌ์šฉ์ž ์ž…๋ ฅ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์ €์žฅ๊นŒ์ง€์˜ ์ „์ฒด ๊ฒฝ๋กœ
- ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ์ƒํƒœ ๊ด€๋ฆฌ ํŒจํ„ด
- ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋กœ์ง
- ์บ์‹ฑ ์ „๋žต๊ณผ ์„ฑ๋Šฅ ์ตœ์ ํ™”
- ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ๊ณผ ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ"

# ์„ฑ๋Šฅ๊ณผ ํ™•์žฅ์„ฑ ๋ถ„์„
claude "์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ ํŠน์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ๋ถ„์„ํ•ด์ค˜.
- ํ˜„์žฌ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ์ง€์  ์‹๋ณ„
- ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ ๋Šฅ๋ ฅ๊ณผ ํ•œ๊ณ„
- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ ํŒจํ„ด๊ณผ ์ตœ์ ํ™” ๊ธฐํšŒ
- ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ํŒจํ„ด๊ณผ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜
- ํ™•์žฅ ์ „๋žต (์ˆ˜ํ‰์  vs ์ˆ˜์ง์ )"

๊ธฐ์ˆ ์  ๋ถ€์ฑ„์™€ ๊ฐœ์„  ๊ธฐํšŒ ์‹๋ณ„

ํšจ๊ณผ์ ์ธ ํƒ์ƒ‰์€ ๋‹จ์ˆœํžˆ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์„ ๋„˜์–ด์„œ ์ž ์žฌ์  ๋ฌธ์ œ์™€ ๊ฐœ์„  ๊ธฐํšŒ๋ฅผ ์‚ฌ์ „์— ์‹๋ณ„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

bash
# ๊ธฐ์ˆ  ๋ถ€์ฑ„ ํ‰๊ฐ€
claude "์ฝ”๋“œ๋ฒ ์ด์Šค์˜ ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์ข…ํ•ฉ ํ‰๊ฐ€ํ•ด์ค˜.
- ๊ตฌ์‹ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋ณด์•ˆ ์ทจ์•ฝ์ 
- ์ค‘๋ณต ์ฝ”๋“œ์™€ ๋ฆฌํŒฉํ† ๋ง ํ•„์š” ์˜์—ญ
- ๋ณต์žก๋„๊ฐ€ ๋†’์€ ๋ชจ๋“ˆ๊ณผ ํ•จ์ˆ˜
- ํ…Œ์ŠคํŠธ๊ฐ€ ๋ถ€์กฑํ•œ ํฌ๋ฆฌํ‹ฐ์ปฌ ์˜์—ญ
- ๋ฌธ์„œํ™” ๋ถ€์กฑ์œผ๋กœ ์ธํ•œ ์œ ์ง€๋ณด์ˆ˜ ์–ด๋ ค์›€
- ์šฐ์„ ์ˆœ์œ„๋ณ„ ๊ฐœ์„  ๋กœ๋“œ๋งต ์ œ์•ˆ"

# ์•„ํ‚คํ…์ฒ˜ ์ง„ํ™” ๊ฐ€๋Šฅ์„ฑ
claude "ํ˜„์žฌ ์•„ํ‚คํ…์ฒ˜์˜ ๋ฐœ์ „ ๋ฐฉํ–ฅ์„ ์ œ์•ˆํ•ด์ค˜.
- ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋ถ„ํ•ด ๊ฐ€๋Šฅ์„ฑ
- ์ƒˆ๋กœ์šด ๊ธฐ์ˆ  ์Šคํƒ ๋„์ž… ๊ธฐํšŒ
- ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ์œ„ํ•œ ์•„ํ‚คํ…์ฒ˜ ๋ณ€๊ฒฝ
- ํ™•์žฅ์„ฑ ํ–ฅ์ƒ ๋ฐฉ์•ˆ
- ๋น„์šฉ ์ตœ์ ํ™” ๊ธฐํšŒ"

### 2๋‹จ๊ณ„: Plan (๊ณ„ํš)

**๊ตฌํ˜„ ์ „๋žต ์ˆ˜๋ฆฝ**

```bash
claude "์žฅ๋ฐ”๊ตฌ๋‹ˆ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ํ•ด. 
ํ˜„์žฌ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ณ ๋ คํ•ด์„œ ๊ตฌํ˜„ ๊ณ„ํš์„ ์„ธ์›Œ์ค˜.
ํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ, API ์—”๋“œํฌ์ธํŠธ, ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ํฌํ•จํ•ด์ค˜"

์ž‘์—… ๋ถ„ํ•ด

bash
claude "์ด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—…์„ ๋‹จ๊ณ„๋ณ„๋กœ ๋‚˜๋ˆ ์ค˜.
๊ฐ ๋‹จ๊ณ„๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•ด์•ผ ํ•˜๊ณ ,
์˜ˆ์ƒ ์†Œ์š” ์‹œ๊ฐ„๋„ ์ถ”์ •ํ•ด์ค˜"

๋ฆฌ์Šคํฌ ํ‰๊ฐ€

bash
claude "์ด ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ๊ธฐ์กด ์ฝ”๋“œ์— ๋ฏธ์น  ์˜ํ–ฅ์„ ๋ถ„์„ํ•ด์ค˜.
์ž ์žฌ์ ์ธ ๋ฌธ์ œ์ ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ์„ ์ œ์‹œํ•ด์ค˜"

3๋‹จ๊ณ„: Code (์ฝ”๋”ฉ)

์ ์ง„์  ๊ตฌํ˜„

bash
# ์Šค์ผˆ๋ ˆํ†ค ์ฝ”๋“œ ์ƒ์„ฑ
claude "๊ณ„ํš์— ๋”ฐ๋ผ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ๋จผ์ € ๋งŒ๋“ค์–ด์ค˜.
์ธํ„ฐํŽ˜์ด์Šค์™€ ๋นˆ ๋ฉ”์„œ๋“œ๋กœ ์‹œ์ž‘ํ•ด์„œ ๋‹จ๊ณ„์ ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก"

# ํ•ต์‹ฌ ๋กœ์ง ๊ตฌํ˜„
claude "์ด์ œ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌํ˜„ํ•ด์ค˜.
๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋„ ํ•จ๊ป˜ ์ž‘์„ฑํ•ด์„œ ๋™์ž‘์„ ๊ฒ€์ฆํ•ด์ค˜"

# ํ†ตํ•ฉ ๋ฐ ์—ฐ๊ฒฐ
claude "๊ตฌํ˜„ํ•œ ๊ธฐ๋Šฅ์„ ๊ธฐ์กด ์‹œ์Šคํ…œ๊ณผ ํ†ตํ•ฉํ•ด์ค˜.
ํ•„์š”ํ•œ ์–ด๋Œ‘ํ„ฐ๋‚˜ ๋ฏธ๋“ค์›จ์–ด๋„ ์ž‘์„ฑํ•ด์ค˜"

[S1WF3(์„น์…˜06a)] ํ”„๋กฌํ”„ํŒ… ๊ธฐ๋ณธ ๊ธฐ๋ฒ•

3.2 ํŒŒ์ผ ํƒ์ƒ‰๊ณผ ์ฝ๊ธฐ

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ํŒŒ์•…ํ•˜๊ธฐ

์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ์— ํˆฌ์ž…๋˜์—ˆ์„ ๋•Œ ๋น ๋ฅด๊ฒŒ ์ „์ฒด ๊ตฌ์กฐ๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. Claude Code๋ฅผ ํ™œ์šฉํ•˜๋ฉด ํšจ์œจ์ ์œผ๋กœ ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}}}%%
flowchart TD
    A["์ „์ฒด ๊ตฌ์กฐ ํŒŒ์•… ์ „๋žต"]
    
    A --> B["ํ”„๋กœ์ ํŠธ ๊ฐœ์š” ํŒŒ์•…<br/>โ€ข ๊ตฌ์กฐ ํŠธ๋ฆฌ ์‹œ๊ฐํ™”<br/>โ€ข ๊ธฐ์ˆ  ์Šคํƒ ๋ถ„์„"]
    A --> C["ํ•ต์‹ฌ ๋””๋ ‰ํ† ๋ฆฌ ํƒ์ƒ‰<br/>โ€ข src ํด๋” ์ƒ์„ธ ๋ถ„์„<br/>โ€ข ์„ค์ • ํŒŒ์ผ ๋ถ„๋ฅ˜"]
    A --> D["ํŒŒ์ผ ํŒจํ„ด ๋ถ„์„<br/>โ€ข ํŒŒ์ผ ํƒ€์ž…๋ณ„ ๊ทธ๋ฃนํ•‘<br/>โ€ข ํ…Œ์ŠคํŠธ ๊ตฌ์กฐ ํŒŒ์•…"]
    A --> E["์ตœ๊ทผ ํ™œ๋™ ์ถ”์ <br/>โ€ข ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋ถ„์„<br/>โ€ข ํ•ต์‹ฌ ๋กœ์ง ์œ„์น˜ ํŒŒ์•…"]
    
    classDef strategyStyle fill:#e2e8f0,stroke:#334155,stroke-width:3px,color:#1e293b
    classDef stepStyle fill:#f1f5f9,stroke:#475569,stroke-width:2px,color:#1e293b
    
    class A strategyStyle
    class B,C,D,E stepStyle

์ „์ฒด ๊ตฌ์กฐ ํŒŒ์•… ์ „๋žต

ํšจ์œจ์ ์ธ ํŒŒ์ผ ์ฝ๊ธฐ

๋‹จ์ˆœํžˆ ํŒŒ์ผ์„ ์—ด์–ด๋ณด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ชฉ์ ์— ๋งž๋Š” ์ •๋ณด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ถ”์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

bash
# ๋‹จ์ผ ํŒŒ์ผ ์ฝ๊ธฐ
claude "package.json ํŒŒ์ผ์„ ์ฝ์–ด์ค˜"

# ์—ฌ๋Ÿฌ ํŒŒ์ผ ๋™์‹œ์— ์ฝ๊ธฐ
claude "๋ชจ๋“  ์„ค์ • ํŒŒ์ผ๋“ค(config๋กœ ์‹œ์ž‘ํ•˜๋Š”)์„ ์ฝ๊ณ  ์š”์•ฝํ•ด์ค˜"

# ํŠน์ • ๋ถ€๋ถ„๋งŒ ์ฝ๊ธฐ
claude "app.js ํŒŒ์ผ์—์„œ ๋ผ์šฐํ„ฐ ์„ค์ • ๋ถ€๋ถ„๋งŒ ๋ณด์—ฌ์ค˜"

# ํŒŒ์ผ ๋น„๊ต
claude "๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ ์„ค์ • ํŒŒ์ผ์„ ๋น„๊ตํ•ด์ค˜"

์ฝ”๋“œ ๋ถ„์„ ์š”์ฒญ

๊ธฐ์กด ์ฝ”๋“œ์˜ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ฑฐ๋‚˜ ์ž ์žฌ์  ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๋Š” ๋ฐ ์œ ์šฉํ•œ ๋ถ„์„ ์š”์ฒญ๋“ค์ž…๋‹ˆ๋‹ค.

bash
# ํ•จ์ˆ˜ ๋ถ„์„
claude "calculateTotalPrice ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด์ค˜"

# ์˜์กด์„ฑ ๋ถ„์„
claude "์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค๊ณผ ์šฉ๋„๋ฅผ ์„ค๋ช…ํ•ด์ค˜"

# ์•„ํ‚คํ…์ฒ˜ ๋ถ„์„
claude "์ด ํ”„๋กœ์ ํŠธ์˜ ์ „์ฒด์ ์ธ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ์„ค๋ช…ํ•ด์ค˜"

# ๋ณด์•ˆ ์ทจ์•ฝ์  ๊ฒ€์‚ฌ
claude "๋ณด์•ˆ์ƒ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•ด์ค˜"

3.3 ์ฝ”๋“œ ์ž‘์„ฑ๊ณผ ์ˆ˜์ •

์ƒˆ ํŒŒ์ผ ์ƒ์„ฑ

ํ”„๋กœ์ ํŠธ์˜ ์ปจ๋ฒค์…˜๊ณผ ๊ตฌ์กฐ์— ๋งž๋Š” ์ƒˆ ํŒŒ์ผ์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

bash
# ๊ธฐ๋ณธ์ ์ธ ํŒŒ์ผ ์ƒ์„ฑ
claude "utils ํด๋”์— ๋‚ ์งœ ๊ด€๋ จ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜๋“ค์„ ๋งŒ๋“ค์–ด์ค˜"

# ํ…œํ”Œ๋ฆฟ ๊ธฐ๋ฐ˜ ์ƒ์„ฑ
claude "Express ๋ผ์šฐํ„ฐ ํ…œํ”Œ๋ฆฟ์œผ๋กœ user ๋ผ์šฐํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด์ค˜"

# ํ…Œ์ŠคํŠธ ํŒŒ์ผ ์ž๋™ ์ƒ์„ฑ
claude "UserService์— ๋Œ€ํ•œ Jest ํ…Œ์ŠคํŠธ ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ค˜"

# ๋ฌธ์„œ ์ƒ์„ฑ
claude "API ์—”๋“œํฌ์ธํŠธ ๋ฌธ์„œ๋ฅผ Swagger ํ˜•์‹์œผ๋กœ ๋งŒ๋“ค์–ด์ค˜"

์ฝ”๋“œ ์ˆ˜์ • ํŒจํ„ด

๋‹ค์–‘ํ•œ ์ˆ˜์ • ์ž‘์—…์„ ์ฒด๊ณ„์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•๋“ค์ž…๋‹ˆ๋‹ค. ๊ฐ ํŒจํ„ด๋ณ„๋กœ ์‹ค์ œ ์‚ฌ์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค์™€ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค๋ฅผ ํ•จ๊ป˜ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

1. ๋‹จ์ˆœ ์ˆ˜์ • - ์ฝ”๋“œ ํ˜„๋Œ€ํ™”

bash
# ES5๋ฅผ ES6+ ๋ฌธ๋ฒ•์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ
claude "๋ชจ๋“  var๋ฅผ const๋‚˜ let์œผ๋กœ ๋ฐ”๊ฟ”์ค˜. ์žฌํ• ๋‹น๋˜๋Š” ๋ณ€์ˆ˜๋งŒ let์„ ์‚ฌ์šฉํ•ด"

# ์ฝœ๋ฐฑ์„ async/await๋กœ ๋ณ€ํ™˜
claude "์ฝœ๋ฐฑ ๊ธฐ๋ฐ˜ ์ฝ”๋“œ๋ฅผ async/await ํŒจํ„ด์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ค˜"

# ๋ฌธ์ž์—ด ์—ฐ๊ฒฐ์„ ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด๋กœ
claude "๋ฌธ์ž์—ด ์—ฐ๊ฒฐ ์—ฐ์‚ฐ์ž(+)๋ฅผ ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด๋กœ ๋ฐ”๊ฟ”์ค˜"

2. ๋ฆฌํŒฉํ† ๋ง - ์ฝ”๋“œ ๊ตฌ์กฐ ๊ฐœ์„ 

bash
# ๊ธด ํ•จ์ˆ˜ ๋ถ„๋ฆฌ
claude "์ด ํ•จ์ˆ˜๊ฐ€ 50์ค„์ด ๋„˜๋Š”๋ฐ, ๋…ผ๋ฆฌ์  ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌํ•ด์„œ ๊ฐ€๋…์„ฑ์„ ๋†’์—ฌ์ค˜"

# ์ค‘๋ณต ์ฝ”๋“œ ์ œ๊ฑฐ
claude "์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ฐพ์•„์„œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜๋กœ ์ถ”์ถœํ•ด์ค˜"

# ์กฐ๊ฑด๋ฌธ ๋‹จ์ˆœํ™”
claude "๋ณต์žกํ•œ if-else ์ฒด์ธ์„ early return ํŒจํ„ด์ด๋‚˜ switch๋ฌธ์œผ๋กœ ๊ฐœ์„ ํ•ด์ค˜"

3. ๊ธฐ๋Šฅ ์ถ”๊ฐ€ - ์ ์ง„์  ๊ฐœ์„ 

bash
# ์—๋Ÿฌ ์ฒ˜๋ฆฌ ์ถ”๊ฐ€
claude "์ด API ํ˜ธ์ถœ ํ•จ์ˆ˜์— ์ ์ ˆํ•œ ์—๋Ÿฌ ์ฒ˜๋ฆฌ์™€ ์žฌ์‹œ๋„ ๋กœ์ง์„ ์ถ”๊ฐ€ํ•ด์ค˜"

# ๋กœ๋”ฉ ์ƒํƒœ ๊ด€๋ฆฌ
claude "์ด ์ปดํฌ๋„ŒํŠธ์— ๋กœ๋”ฉ, ์„ฑ๊ณต, ์—๋Ÿฌ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋กœ์ง์„ ์ถ”๊ฐ€ํ•ด์ค˜"

# ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ถ”๊ฐ€
claude "์‚ฌ์šฉ์ž ์ž…๋ ฅ ํผ์— ์‹ค์‹œ๊ฐ„ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค˜"

4. ๋ฒ„๊ทธ ์ˆ˜์ • - ์•ˆ์ •์„ฑ ํ–ฅ์ƒ

bash
# ์ž ์žฌ์  ์˜ค๋ฅ˜ ์ฐพ๊ธฐ
claude "null/undefined ์ฐธ์กฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์„ ์ฐพ์•„์„œ ์˜ต์…”๋„ ์ฒด์ด๋‹์œผ๋กœ ์ˆ˜์ •ํ•ด์ค˜"

# ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฐฉ์ง€
claude "์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋‚˜ ํƒ€์ด๋จธ๊ฐ€ ์ œ๋Œ€๋กœ ์ •๋ฆฌ๋˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์„ ์ฐพ์•„์„œ ์ˆ˜์ •ํ•ด์ค˜"

# ๊ฒฝ์Ÿ ์กฐ๊ฑด ํ•ด๊ฒฐ
claude "๋น„๋™๊ธฐ ์ž‘์—…์—์„œ ๊ฒฝ์Ÿ ์กฐ๊ฑด์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์„ ์ฐพ์•„์„œ ์ˆ˜์ •ํ•ด์ค˜"

์ฝ”๋“œ ์Šคํƒ€์ผ ํ†ต์ผ

ํ”„๋กœ์ ํŠธ ์ „๋ฐ˜์— ์ผ๊ด€๋œ ์ฝ”๋”ฉ ์Šคํƒ€์ผ์„ ์ ์šฉํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.

bash
# ํฌ๋งคํŒ…
claude "ํ”„๋กœ์ ํŠธ ์ „์ฒด๋ฅผ Prettier ๊ทœ์น™์— ๋งž๊ฒŒ ํฌ๋งคํŒ…ํ•ด์ค˜"

# ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜
claude "camelCase๋ฅผ snake_case๋กœ ๋ณ€๊ฒฝํ•ด์ค˜"

# ์ฃผ์„ ์ถ”๊ฐ€
claude "๋ณต์žกํ•œ ๋กœ์ง์— ์„ค๋ช… ์ฃผ์„์„ ์ถ”๊ฐ€ํ•ด์ค˜"

# ํƒ€์ž… ์ถ”๊ฐ€
claude "JavaScript ํŒŒ์ผ์— TypeScript ํƒ€์ž…์„ ์ถ”๊ฐ€ํ•ด์ค˜"

[S1WF5] MCP ๋„๊ตฌ ์‹ค์ „ ํ™œ์šฉ (๋น„-AI ๋„๊ตฌ/์„œ๋น„์Šค)


[S1WF4(์„น์…˜14)] ํ•„์ˆ˜ ๋‹จ์ถ•ํ‚ค & ๋ช…๋ น์–ด

3.1 ๊ธฐ๋ณธ ๋ช…๋ น์–ด ๊ตฌ์กฐ

๋ช…๋ น์–ด ํ•ด๋ถ€ํ•™

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}}}%%
graph LR
    subgraph structure ["Claude Code ๋ช…๋ น์–ด ๊ตฌ์กฐ"]
        A["claude<br/>๊ธฐ๋ณธ ๋ช…๋ น์–ด"] --> B["[์˜ต์…˜]<br/>๋™์ž‘ ๋ฐฉ์‹ ์ œ์–ด ํ”Œ๋ž˜๊ทธ"]
        B --> C["[๋ช…๋ น/์งˆ๋ฌธ]<br/>์ž์—ฐ์–ด๋กœ ์ž‘์„ฑํ•˜๋Š” ์š”์ฒญ"]
    end
    
    classDef commandStyle fill:#e2e8f0,stroke:#334155,stroke-width:2px,color:#1e293b
    classDef optionStyle fill:#f1f5f9,stroke:#475569,stroke-width:2px,color:#1e293b
    
    class A commandStyle
    class B,C optionStyle

Claude Code ๋ช…๋ น์–ด์˜ ๊ตฌ์กฐ๋Š” ์ง๊ด€์ ์ด๋ฉด์„œ๋„ ๊ฐ•๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ์˜ต์…˜๋“ค

Claude Code๋Š” ๋‹ค์–‘ํ•œ ์˜ต์…˜์„ ํ†ตํ•ด ๋™์ž‘์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์˜ต์…˜์˜ ์šฉ๋„์™€ ํ™œ์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ดํ•ดํ•˜๋ฉด ๋” ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์˜ต์…˜๋“ค

bash
# ๋„์›€๋ง ๋ณด๊ธฐ - ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ช…๋ น์–ด์™€ ์˜ต์…˜ ํ™•์ธ
claude --help
claude -h

# ๋ฒ„์ „ ํ™•์ธ - ํ˜„์žฌ ์„ค์น˜๋œ Claude Code ๋ฒ„์ „ ํ™•์ธ
claude --version
claude -v

# ๋Œ€ํ™” ๊ธฐ๋ก ์ง€์šฐ๊ธฐ - ์ƒˆ๋กœ์šด ์ปจํ…์ŠคํŠธ๋กœ ์‹œ์ž‘ํ•˜๊ณ  ์‹ถ์„ ๋•Œ
claude --clear
claude -c

๋ชจ๋ธ ์„ ํƒ ์˜ต์…˜

bash
# ๋ณต์žกํ•œ ์ž‘์—…์„ ์œ„ํ•œ ๊ณ ์„ฑ๋Šฅ ๋ชจ๋ธ ์‚ฌ์šฉ
claude --model claude-3-opus "๋ณต์žกํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„ํ•ด์ค˜"

# ๋น ๋ฅธ ์‘๋‹ต์ด ํ•„์š”ํ•œ ๊ฐ„๋‹จํ•œ ์ž‘์—…
claude -m claude-3-haiku "๊ฐ„๋‹จํ•œ ์„ค๋ช…๋งŒ ํ•ด์ค˜"

# ๊ท ํ˜•์žกํžŒ ์„ฑ๋Šฅ๊ณผ ์†๋„
claude -m claude-3-sonnet "์ฝ”๋“œ ๋ฆฌ๋ทฐํ•ด์ค˜"

์ถœ๋ ฅ ํ˜•์‹ ์ œ์–ด

bash
# JSON ํ˜•์‹์œผ๋กœ ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ ๋ฐ›๊ธฐ
claude --json "ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ JSON์œผ๋กœ ์ถœ๋ ฅํ•ด์ค˜"

# ๋งˆํฌ๋‹ค์šด ํ˜•์‹์œผ๋กœ ๋ฌธ์„œ ์ƒ์„ฑ
claude --markdown "README ํŒŒ์ผ ๋‚ด์šฉ์„ ๋งˆํฌ๋‹ค์šด์œผ๋กœ ๋ณด์—ฌ์ค˜"

# ์ผ๋ฐ˜ ํ…์ŠคํŠธ ์ถœ๋ ฅ (๊ธฐ๋ณธ๊ฐ’)
claude --plain "๊ฐ„๋‹จํ•œ ์„ค๋ช…์„ ํ…์ŠคํŠธ๋กœ ๋ณด์—ฌ์ค˜"

์ž์—ฐ์–ด ๋ช…๋ น์˜ ํž˜

Claude Code์˜ ํ•ต์‹ฌ ํŠน์ง•์€ ๋ณต์žกํ•œ ๋ช…๋ น์–ด ๋ฌธ๋ฒ• ๋Œ€์‹  ์ž์—ฐ์Šค๋Ÿฌ์šด ์–ธ์–ด๋กœ ์˜๋„๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

bash
# ๊ธฐ์ˆ ์ ์ธ ์š”์ฒญ
claude "UserService ํด๋ž˜์Šค์— ์ด๋ฉ”์ผ ๊ฒ€์ฆ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค˜"

# ํƒ์ƒ‰์ ์ธ ์งˆ๋ฌธ
claude "์ด ํ”„๋กœ์ ํŠธ์—์„œ ์ธ์ฆ์€ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋˜๊ณ  ์žˆ์–ด?"

# ์ฐฝ์˜์ ์ธ ์š”์ฒญ
claude "์ด ํ•จ์ˆ˜๋ฅผ ๋” ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์„๊นŒ?"

# ๋ณตํ•ฉ์ ์ธ ์ž‘์—…
claude "๋ฒ„๊ทธ๋ฅผ ์ฐพ์•„์„œ ์ˆ˜์ •ํ•˜๊ณ , ํ…Œ์ŠคํŠธ๋„ ์ž‘์„ฑํ•œ ๋‹ค์Œ, ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๊นŒ์ง€ ๋งŒ๋“ค์–ด์ค˜"

[S1WF6] CLAUDE.md โ€” ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค ๋ฐ ์‹คํ–‰ ์ˆœ์„œ ์ •์˜

[S1WF7] Headless ๋ชจ๋“œ โ€” CI/CD ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ

[S1WF8] Extended Thinking โ€” ํ™•์žฅ ์‚ฌ๊ณ  ๋ชจ๋“œ

[S1WF9] Vision โ€” ์ด๋ฏธ์ง€ ๋ถ„์„ ๊ธฐ๋Šฅ

[S1WF10] Checkpointing โ€” ์ž‘์—… ๋ณต์› ์ง€์ 

[S1WF11] Chrome ์—ฐ๋™ โ€” ๋ธŒ๋ผ์šฐ์ € ๋””๋ฒ„๊น…

[S1WF12] Teleport / Desktop ํ•ธ๋“œ์˜คํ”„ โ€” ์„ธ์…˜ ์ด๋™

[S1WF13] GitHub Actions / GitLab CI โ€” CI/CD ์ž๋™ํ™”

[S1WF14] Interactive Mode โ€” ๋Œ€ํ™”ํ˜• ๋ชจ๋“œ

[S1WF15] /status ๋ช…๋ น์–ด โ€” ์ „์ฒด ์ƒํƒœ ํ™•์ธ

์ฐธ๊ณ : ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /์‹ค์ „_Tips/Claude_Code_์‚ฌ์šฉ๋ฒ•/status_๋ช…๋ น์–ด๋กœ_๋ชจ๋“ _๊ฒƒ_ํ™•์ธํ•˜๊ธฐ.md

[S1WF16] ๋“€์–ผ ๋ชจ๋“œ ํ™œ์šฉ๋ฒ•

์ฐธ๊ณ : ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /์‹ค์ „_Tips/Claude_Code_์‚ฌ์šฉ๋ฒ•/๋“€์–ผ_๋ชจ๋“œ๋กœ_Claude_Code_ํ™œ์šฉํ•˜๊ธฐ.md

[S1WF17] 5ํšŒ ๋ฐ˜๋ณต ๋””๋ฒ„๊น… ๊ธฐ๋ฒ•

์ฐธ๊ณ : ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /์‹ค์ „_Tips/Claude_Code_์‚ฌ์šฉ๋ฒ•/5ํšŒ_๋ฐ˜๋ณต_๋””๋ฒ„๊น…_๊ธฐ๋ฒ•.md

[S1WF18] Session Resume / Continue โ€” ์„ธ์…˜ ์ด์–ด์„œ ์ž‘์—…

[S1WF19] Piping & Composability โ€” ํŒŒ์ดํ”„ ์—ฐ๊ฒฐ๊ณผ ์กฐํ•ฉ

[S1WF20] Plan Mode โ€” ๊ณ„ํš ๋ชจ๋“œ

[S1WF21] /compact โ€” ์ปจํ…์ŠคํŠธ ์••์ถ•

[S1WF23] Playground โ€” ์‹คํ—˜ ํ™˜๊ฒฝ

[S1WF24] Books 1๊ถŒ โ€” ๋„๊ตฌ ํ™œ์šฉ ์›Œํฌํ”Œ๋กœ์šฐ

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /ํ•™์Šต์šฉ_Books_New/1๊ถŒ_Claude_ClaudeCode_์‚ฌ์šฉ๋ฒ•/

[S1WF25] Books 3๊ถŒ โ€” Task ๊ด€๋ฆฌ ์›Œํฌํ”Œ๋กœ์šฐ

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /ํ•™์Šต์šฉ_Books_New/3๊ถŒ_ํ”„๋กœ์ ํŠธ_๊ด€๋ฆฌ_๋ฐฉ๋ฒ•/

[S1WF26] ์‹ค์ „ Tips โ€” ์‚ฌ์šฉ๋ฒ•/๋„๊ตฌ/์„ธ์…˜/๊ฐœ๋ฐœ/๋ฐฑ์—…

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /Tips/

[S1WF27] Custom Skills โ€” ์ปค์Šคํ…€ ์Šคํ‚ฌ ์˜ˆ์‹œ 3์ข…

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /Custom_Skills/

[S1WF28] .claude Methods โ€” CRUD/๋กœ๊ทธ์ธ ์—๋Ÿฌ ์ ˆ์ฐจ

๐Ÿ“ ๊ฒฝ๋กœ: .claude/methods/

S1TO โ€” ํŒ€์šด์šฉ (Team Operations)

[S1TO2] Slack ์—ฐ๋™ โ€” ํŒ€ ์ฑ„ํŒ…์—์„œ AI ํ˜ธ์ถœ


[S1TO1(์„น์…˜07a)] ์„œ๋ธŒ์—์ด์ „ํŠธ ๊ธฐ๋ณธ

์ œ8์žฅ: ๋ฉ€ํ‹ฐํƒœ์Šคํ‚น๊ณผ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ

"๋ณ‘๋ ฌ๋กœ ์ผํ•˜๋˜, ๋™์‹œ์— ์ƒ๊ฐํ•˜๋ผ" - ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ์›์น™
mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}, "flowchart": {"htmlLabels": false, "useMaxWidth": false}}}%%
mindmap
  root((ํ•™์Šต ๋ชฉํ‘œ))
    ๋ฉ€ํ‹ฐ ์ธ์Šคํ„ด์Šค ๊ด€๋ฆฌ
      ํšจ๊ณผ์ ์ธ ์—ญํ•  ๋ถ„๋‹ด
      ์ปจํ…์ŠคํŠธ ์ตœ์ ํ™”
      ์ž‘์—… ๋™๊ธฐํ™”
    ๋ณ‘๋ ฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ
      Git Worktree ํ™œ์šฉ
      ๋…๋ฆฝ์  ๊ฐœ๋ฐœ ๊ณต๊ฐ„
      ๋ธŒ๋žœ์น˜๋ณ„ ํŠนํ™” ์„ค์ •
    ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐœ๋ฐœ
      ์„œ๋น„์Šค๋ณ„ ์ „๋ฌธํ™”
      ๋™์‹œ ๊ฐœ๋ฐœ ์ „๋žต
      ํ†ตํ•ฉ ๊ด€๋ฆฌ
    ์ •๋ณด ๊ณต์œ  ์ตœ์ ํ™”
      ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ
      ์ธ์Šคํ„ด์Šค ๊ฐ„ ํ˜‘์—…
      ์ง€์‹ ๋™๊ธฐํ™”

ํ•™์Šต ๋ชฉํ‘œ

์ด ์žฅ์„ ์™„๋ฃŒํ•˜๋ฉด ๋‹ค์Œ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ์š”

ํ˜„๋Œ€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์€ ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์„ ๋น ๋ฅด๊ฒŒ ๊ตฌ์ถ•ํ•ด์•ผ ํ•˜๋Š” ์š”๊ตฌ์‚ฌํ•ญ์œผ๋กœ ์ธํ•ด ํ•„์—ฐ์ ์œผ๋กœ ๋ฉ€ํ‹ฐํƒœ์Šคํ‚น์ด ํ•„์š”ํ•œ ํ™˜๊ฒฝ์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Claude Code์˜ ๋ฉ€ํ‹ฐ ์ธ์Šคํ„ด์Šค ํ™œ์šฉ์€ ๋‹จ์ˆœํžˆ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋™์‹œ์— ํ•˜๋Š” ๊ฒƒ์„ ๋„˜์–ด์„œ, ๊ฐ ์ธ์Šคํ„ด์Šค๊ฐ€ ํŠนํ™”๋œ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ์‹œ๋„ˆ์ง€๋ฅผ ์ฐฝ์ถœํ•˜๋Š” ๊ณ ๊ธ‰ ๊ฐœ๋ฐœ ์ „๋žต์ž…๋‹ˆ๋‹ค.

์ด ์žฅ์—์„œ๋Š” ์—ฌ๋Ÿฌ Claude Code ์ธ์Šคํ„ด์Šค๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ , ๊ฐ๊ฐ์˜ ํŠน์„ฑ์— ๋งž๋Š” ์—ญํ• ์„ ๋ถ€์—ฌํ•˜์—ฌ ๊ฐœ๋ฐœ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

8.1 ์—ฌ๋Ÿฌ Claude ์ธ์Šคํ„ด์Šค ํ™œ์šฉ

๋ฉ€ํ‹ฐ ์ธ์Šคํ„ด์Šค ์ „๋žต์€ ๊ฐ ์ธ์Šคํ„ด์Šค๊ฐ€ ํŠน์ • ๋„๋ฉ”์ธ์— ํŠนํ™”๋˜์–ด ์ผ๊ด€์„ฑ ์žˆ๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๋น„์šฉ์„ ์ค„์ด๊ณ  ๊ฐ ์˜์—ญ๋ณ„ ์ „๋ฌธ์„ฑ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„๋Œ€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ ๋ฉ€ํ‹ฐ ์ธ์Šคํ„ด์Šค ํ™œ์šฉ์€ ๋‹จ์ˆœํ•œ ๋ณ‘๋ ฌ ์ž‘์—…์„ ๋„˜์–ด์„œ ์ „๋žต์  ์•„ํ‚คํ…์ฒ˜ ๊ด€์ ์—์„œ ์ ‘๊ทผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์ธ์Šคํ„ด์Šค๋Š” ๋งˆ์น˜ ์ „๋ฌธ ํŒ€์›์ฒ˜๋Ÿผ ๊ณ ์œ ํ•œ ์—ญํ• ๊ณผ ์ฑ…์ž„์„ ๊ฐ€์ง€๋ฉฐ, ์„œ๋กœ ๋‹ค๋ฅธ ๊ธฐ์ˆ ์  ๋งฅ๋ฝ๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์— ์ตœ์ ํ™”๋˜์–ด ์šด์˜๋ฉ๋‹ˆ๋‹ค.

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ๋ฉ€ํ‹ฐ ์ธ์Šคํ„ด์Šค ์•„ํ‚คํ…์ฒ˜

ํšจ๊ณผ์ ์ธ ๋ฉ€ํ‹ฐ ์ธ์Šคํ„ด์Šค ์ „๋žต์€ ๋‹จ์ˆœํ•œ ์ž‘์—… ๋ถ„ํ• ์„ ๋„˜์–ด์„œ ๊ฐ ์ธ์Šคํ„ด์Šค์˜ ์ „๋ฌธ์„ฑ๊ณผ ์ƒํ˜ธ ๋ณด์™„์„ฑ์„ ๊ณ ๋ คํ•œ ์ฒด๊ณ„์  ์„ค๊ณ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}, "flowchart": {"htmlLabels": false, "useMaxWidth": false}}}%%
graph TD
    subgraph core [ํ•ต์‹ฌ ๊ฐœ๋ฐœ ์˜์—ญ]
        A[Frontend Studio<br/>์ธ์Šคํ„ด์Šค #1<br/>UX/UI ์ „๋ฌธ๊ฐ€] 
        B[Backend Engine<br/>์ธ์Šคํ„ด์Šค #2<br/>์‹œ์Šคํ…œ ์•„ํ‚คํ…ํŠธ]
    end
    
    subgraph ops [์šด์˜ ๋ฐ ํ’ˆ์งˆ ๊ด€๋ฆฌ]
        C[DevOps Pipeline<br/>์ธ์Šคํ„ด์Šค #3<br/>ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ์ „๋ฌธ๊ฐ€]
        D[QA & Monitoring<br/>์ธ์Šคํ„ด์Šค #4<br/>ํ’ˆ์งˆ ๋ณด์ฆ ์ „๋ฌธ๊ฐ€]
    end
    
    subgraph integration [ํ†ตํ•ฉ ๊ด€๋ฆฌ]
        E[Integration Hub<br/>์ธ์Šคํ„ด์Šค #5<br/>์•„ํ‚คํ…์ฒ˜ ์กฐ์ •์ž]
    end
    
    A <--> B
    A --> C
    B --> C
    C <--> D
    A --> E
    B --> E
    C --> E
    D --> E
    
    F[ํฌ๋กœ์Šค ๋„๋ฉ”์ธ ์ด์Šˆ ํ•ด๊ฒฐ] -.-> E
    G[์•„ํ‚คํ…์ฒ˜ ์ผ๊ด€์„ฑ ๊ฒ€์ฆ] -.-> E
    H[ํŒ€ ๊ฐ„ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ์กฐ์ •] -.-> E
    
    classDef coreStyle fill:#e2e8f0,stroke:#334155,stroke-width:2px,color:#1e293b
    classDef opsStyle fill:#f1f5f9,stroke:#475569,stroke-width:2px,color:#1e293b
    classDef hubStyle fill:#cbd5e1,stroke:#475569,stroke-width:3px,color:#1e293b
    classDef activityStyle fill:#f8fafc,stroke:#94a3b8,stroke-width:1px,color:#64748b
    
    class A,B coreStyle
    class C,D opsStyle
    class E hubStyle
    class F,G,H activityStyle

์ธ์Šคํ„ด์Šค๋ณ„ ์—ญํ•  ๋ถ„๋‹ด

Frontend Studio (์ธ์Šคํ„ด์Šค #1) - ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ „๋ฌธ๊ฐ€

ํ”„๋ก ํŠธ์—”๋“œ ์ „์šฉ ์ธ์Šคํ„ด์Šค๋Š” ๋‹จ์ˆœํ•œ UI ๊ฐœ๋ฐœ์„ ๋„˜์–ด์„œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์˜ ๋ชจ๋“  ์ธก๋ฉด์„ ๋‹ด๋‹นํ•˜๋Š” ์ „๋ฌธ๊ฐ€ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

[S1TO3] CLAUDE.md โ€” ํŒ€ ๊ทœ์น™ ๋ฐ ์—์ด์ „ํŠธ ์—ญํ•  ์ •์˜

[S1TO4] Platoon Formation โ€” ์†Œ๋Œ€ ํŽธ์ œ ํŒ€๊ตฌ์„ฑ

[S1TO5] Deploy Skill โ€” ์Šคํ‚ฌ ํŽธ์„ฑ ์ „๋žต

[S1TO6] Books 1๊ถŒ โ€” ๋ฉ€ํ‹ฐํƒœ์Šคํ‚น/ํ˜‘์—… ํ•™์Šต

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /ํ•™์Šต์šฉ_Books_New/1๊ถŒ_Claude_ClaudeCode_์‚ฌ์šฉ๋ฒ•/

[S1TO7] ์‹ค์ „ Tips โ€” AI ์‹œ์Šคํ…œ/์„œ๋ธŒ์—์ด์ „ํŠธ/MCP

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /Tips/๋„๊ตฌ_ํ™œ์šฉ/

[S1TO8] .claude ์ฐธ๊ณ  โ€” Subagents/Skills ๋ชฉ๋ก

๐Ÿ“ ๊ฒฝ๋กœ: .claude/subagents/, .claude/skills/

S1QC โ€” ํ’ˆ์งˆ๊ด€๋ฆฌ (Quality Control)


[S1QC1(์„น์…˜12)] ๋ฐ”์ด๋ธŒ ์ฝ”๋”ฉ โ€” ํŒ€ ๋„์ž… ๋„์ „๊ณผ์ œ์™€ ํ•ด๊ฒฐ ์ „๋žต

12.7 ๊ณ ๊ธ‰ ๋„์ „๊ณผ์ œ์™€ ํ•ด๊ฒฐ ์ „๋žต

Claude Code์˜ ํŒ€ ๋„์ž… ๊ณผ์ •์—์„œ ๋งˆ์ฃผ์น˜๋Š” ๋ณต์žกํ•œ ๋„์ „๊ณผ์ œ๋“ค์€ ๋‹จ์ˆœํ•œ ๊ธฐ์ˆ ์  ๋ฌธ์ œ๋ฅผ ๋„˜์–ด์„œ ์กฐ์ง ๋ฌธํ™”, ๊ฐœ์ธ์˜ ์ €ํ•ญ, ๊ทธ๋ฆฌ๊ณ  ์žฅ๊ธฐ์  ์ „๋žต๊ณผ ๊ด€๋ จ๋œ ๋‹ค์ธต์  ์ด์Šˆ๋“ค์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋„์ „๊ณผ์ œ๋“ค์„ ์ฒด๊ณ„์ ์œผ๋กœ ๋ถ„์„ํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ์„ฑ๊ณต์ ์ธ ๋„์ž…์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

์‹ฌ์ธต์  ๋„์ „๊ณผ์ œ ๋ถ„์„

1. AI ์˜์กด์„ฑ๊ณผ ์—ญ๋Ÿ‰ ๊ท ํ˜•

bash
# ๊ฑด์ „ํ•œ AI ์˜์กด์„ฑ ๊ด€๋ฆฌ
claude "ํŒ€์˜ AI ์˜์กด์„ฑ์„ ๊ฑด์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š” ์ „๋žต์„ ์ˆ˜๋ฆฝํ•ด์ค˜.
ํ˜„์žฌ ์ƒํ™ฉ ๋ถ„์„
- ํŒ€์›๋ณ„ Claude ํ™œ์šฉ ํŒจํ„ด๊ณผ ์˜์กด๋„
- AI ์—†์ด ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ์—ญ๋Ÿ‰ ์ˆ˜์ค€
- ์ฐฝ์˜์  ๋ฌธ์ œ ํ•ด๊ฒฐ ๋Šฅ๋ ฅ์˜ ๋ณ€ํ™”
- ๊ธฐ๋ณธ์ ์ธ ์ฝ”๋”ฉ ์Šคํ‚ฌ ์œ ์ง€ ์ƒํƒœ
- ๋น„ํŒ์  ์‚ฌ๊ณ ์™€ ์„ค๊ณ„ ๋Šฅ๋ ฅ ๋ฐœ์ „๋„

๊ท ํ˜• ์žกํžŒ ๊ฐœ๋ฐœ ์ „๋žต
- ์ฃผ๊ฐ„ 'AI-Free Development' ์‹œ๊ฐ„ ์šด์˜
- ๊ธฐ๋ณธ ์›๋ฆฌ ์ดํ•ด ์ค‘์‹ฌ์˜ ํ•™์Šต ํ”„๋กœ๊ทธ๋žจ
- ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์ž๋ฃŒ๊ตฌ์กฐ ์ •๊ธฐ ์Šคํ„ฐ๋””
- ํ™”์ดํŠธ๋ณด๋“œ ์ฝ”๋”ฉ๊ณผ ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ
- ์„ค๊ณ„ ์‚ฌ๊ณ ์™€ ์•„ํ‚คํ…์ฒ˜ ์—ญ๋Ÿ‰ ๊ฐ•ํ™”"

# ๊ฐœ์ธ๋ณ„ ๋งž์ถคํ˜• ์—ญ๋Ÿ‰ ๊ฐ•ํ™”
claude "ํŒ€์›๋ณ„๋กœ AI์™€์˜ ๊ฑด์ „ํ•œ ํ˜‘์—… ๋ฐฉ์‹์„ ๊ฐœ๋ฐœํ•ด์ค˜.
์‹ ์ž… ๊ฐœ๋ฐœ์ž: ๊ธฐ๋ณธ๊ธฐ ์šฐ์„ , AI๋Š” ๋ณด์กฐ ๋„๊ตฌ๋กœ ํ™œ์šฉ
- ํ•ต์‹ฌ ๊ฐœ๋… ์ดํ•ด ํ›„ AI ํ™œ์šฉ ํ—ˆ์šฉ
- ๋‹จ๊ณ„๋ณ„ ๋„์›€ ์š”์ฒญ๋ณด๋‹ค๋Š” ์ „์ฒด ๋งฅ๋ฝ ํ•™์Šต
- ๋””๋ฒ„๊น…๊ณผ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋Šฅ๋ ฅ ์šฐ์„  ๊ฐœ๋ฐœ
- AI ์ œ์•ˆ์— ๋Œ€ํ•œ ๋น„ํŒ์  ํ‰๊ฐ€ ๋Šฅ๋ ฅ ๋ฐฐ์–‘

์‹œ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž: AI๋ฅผ ์ฐฝ์˜์„ฑ ์ฆํญ ๋„๊ตฌ๋กœ ํ™œ์šฉ
- ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„์™€ ์ „๋žต์  ์˜์‚ฌ๊ฒฐ์ • ์ฃผ๋„
- AI๋ฅผ ํ†ตํ•œ ๋Œ€์•ˆ ํƒ์ƒ‰๊ณผ ๊ฒ€์ฆ
- ๋ณต์žกํ•œ ๋ฌธ์ œ์˜ ๊ตฌ์กฐํ™”์™€ ๋ถ„ํ•ด
- ํŒ€ ์ „์ฒด์˜ AI ํ™œ์šฉ ๊ฐ€์ด๋“œ๋ผ์ธ ์ œ์‹œ"

2. ํ’ˆ์งˆ ์ผ๊ด€์„ฑ๊ณผ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ฌธํ™”

bash
# ๊ณ ๋„ํ™”๋œ ํ’ˆ์งˆ ๋ณด์žฅ ์‹œ์Šคํ…œ
claude "AI ์ƒ์„ฑ ์ฝ”๋“œ์˜ ํ’ˆ์งˆ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•ด์ค˜.
๋‹ค์ธต์  ํ’ˆ์งˆ ๊ฒ€์ฆ
- AI ์ฝ”๋“œ ์ƒ์„ฑ ์‹œ ์ž๋™ ํ’ˆ์งˆ ์ฒดํฌ
- ํ”ผ์–ด ๋ฆฌ๋ทฐ์—์„œ์˜ AI ํŠนํ™” ๊ฒ€์ฆ ํ•ญ๋ชฉ
- ์ •์  ๋ถ„์„๊ณผ ๋™์  ํ…Œ์ŠคํŠธ ๊ฐ•ํ™”
- ์ฝ”๋“œ ํŒจํ„ด ์ผ๊ด€์„ฑ ์ž๋™ ๊ฒ€์ฆ
- ์žฅ๊ธฐ์  ์œ ์ง€๋ณด์ˆ˜์„ฑ ํ‰๊ฐ€

์ง„ํ™”ํ•˜๋Š” ๋ฆฌ๋ทฐ ๋ฌธํ™”
- AI ํ™œ์šฉ ๊ณผ์ •์˜ ํˆฌ๋ช…์„ฑ ํ™•๋ณด
- ์„ค๊ณ„ ๊ฒฐ์ •๊ณผ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„ ๋ฌธ์„œํ™”
- ํ•™์Šต ์ค‘์‹ฌ์˜ ๊ฑด์„ค์  ํ”ผ๋“œ๋ฐฑ
- ์ฝ”๋“œ ํ’ˆ์งˆ ํ‘œ์ค€์˜ ์ง€์†์  ๊ฐœ์„ 
- ํŒ€ ์ „์ฒด์˜ ์ง‘๋‹จ ์ง€ํ˜œ ํ™œ์šฉ"

# ํ’ˆ์งˆ ๋ฉ”ํŠธ๋ฆญ ์ž๋™ํ™”
claude "AI ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ์˜ ํ’ˆ์งˆ์„ ์ž๋™์œผ๋กœ ์ถ”์ ํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค์–ด์ค˜.
์‹ค์‹œ๊ฐ„ ํ’ˆ์งˆ ์ง€ํ‘œ
- ์ฝ”๋“œ ๋ณต์žก๋„์™€ ๊ฐ€๋…์„ฑ ์ ์ˆ˜
- ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€์™€ ํ…Œ์ŠคํŠธ ํ’ˆ์งˆ
- ๋ณด์•ˆ ์ทจ์•ฝ์ ๊ณผ ์„ฑ๋Šฅ ์ด์Šˆ
- ๋ฌธ์„œํ™” ์™„์„ฑ๋„์™€ ์ตœ์‹ ์„ฑ
- ํŒ€ ์ฝ”๋”ฉ ์Šคํƒ€์ผ ์ผ๊ด€์„ฑ

ํ’ˆ์งˆ ํŠธ๋ Œ๋“œ ๋ถ„์„
- ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ํ’ˆ์งˆ ์ง€ํ‘œ ๋ณ€ํ™”
- AI ํ™œ์šฉ๋„์™€ ํ’ˆ์งˆ์˜ ์ƒ๊ด€๊ด€๊ณ„
- ๊ฐœ์ธ๋ณ„/ํ”„๋กœ์ ํŠธ๋ณ„ ํ’ˆ์งˆ ํŒจํ„ด
- ๋ฆฌํŒฉํ† ๋ง ํ•„์š”์„ฑ ์˜ˆ์ธก
- ๊ธฐ์ˆ  ๋ถ€์ฑ„ ๋ˆ„์  ๋ฐฉ์ง€ ์•Œ๋ฆผ"

3. ํŒ€ ์—ญ๋Ÿ‰ ๊ฒฉ์ฐจ์™€ ํ˜‘์—… ํšจ์œจ์„ฑ

bash
# ํŒ€ ๋‚ด AI ํ™œ์šฉ ๊ฒฉ์ฐจ ํ•ด์†Œ
claude "ํŒ€์› ๊ฐ„ Claude ํ™œ์šฉ ๋Šฅ๋ ฅ ์ฐจ์ด๋ฅผ ์ค„์ด๋Š” ์ „๋žต์„ ์ˆ˜๋ฆฝํ•ด์ค˜.
ํ˜„์žฌ ์ƒํƒœ ์ง„๋‹จ
- ํŒ€์›๋ณ„ AI ํ™œ์šฉ ์ˆ™๋ จ๋„ ํ‰๊ฐ€
- ์ƒ์‚ฐ์„ฑ ๊ฒฉ์ฐจ์™€ ์˜ํ–ฅ ์š”์ธ ๋ถ„์„
- ํ˜‘์—… ํŒจํ„ด๊ณผ ์ง€์‹ ๊ณต์œ  ์ˆ˜์ค€
- ํ•™์Šต ์˜์š•๊ณผ ๋ณ€ํ™” ์ˆ˜์šฉ์„ฑ ์ธก์ •
- ๋ฉ˜ํ† ๋ง ๋„คํŠธ์›Œํฌ์™€ ์ง€์› ์ฒด๊ณ„

๊ฒฉ์ฐจ ํ•ด์†Œ ํ”„๋กœ๊ทธ๋žจ
- ๋‹จ๊ณ„๋ณ„ AI ํ™œ์šฉ ๊ต์œก ์ปค๋ฆฌํ˜๋Ÿผ
- ๋ฒ„๋”” ์‹œ์Šคํ…œ๊ณผ 1:1 ๋ฉ˜ํ† ๋ง
- ์‹ค์ „ ํ”„๋กœ์ ํŠธ ๊ธฐ๋ฐ˜ ํ•™์Šต
- ์ •๊ธฐ์ ์ธ ํ™œ์šฉ๋ฒ• ๊ณต์œ  ์„ธ์…˜
- ๊ฐœ์ธ๋ณ„ ๋งž์ถคํ˜• ํ”ผ๋“œ๋ฐฑ๊ณผ ์ง€๋„"

# ํ˜‘์—… ์‹œ๋„ˆ์ง€ ๊ทน๋Œ€ํ™”
claude "AI๋ฅผ ํ™œ์šฉํ•œ ํŒ€ ํ˜‘์—…์˜ ์‹œ๋„ˆ์ง€๋ฅผ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์‹œํ•ด์ค˜.
ํ˜‘์—… ํŒจํ„ด ์ตœ์ ํ™”
- ์—ญํ• ๋ณ„ AI ํ™œ์šฉ ์ „๋žต ์ฐจ๋ณ„ํ™”
- ํฌ๋กœ์Šค ํŽ‘์…”๋„ ํŒ€์›Œํฌ ๊ฐ•ํ™”
- ์ง€์‹ ๊ณต์œ ์™€ ์ง‘๋‹จ ํ•™์Šต ์ด‰์ง„
- ์˜์‚ฌ๊ฒฐ์ • ๊ณผ์ •์˜ ํˆฌ๋ช…์„ฑ ํ™•๋ณด
- ์ฐฝ์˜์„ฑ๊ณผ ํ˜์‹  ๋ฌธํ™” ์กฐ์„ฑ

์กฐ์ง ์ฐจ์›์˜ ๋ณ€ํ™” ๊ด€๋ฆฌ
- ๋ฆฌ๋”์‹ญ์˜ AI ์ „๋žต๊ณผ ๋น„์ „ ์ œ์‹œ
- ์„ฑ๊ณผ ํ‰๊ฐ€ ์‹œ์Šคํ…œ์˜ ์ ์‘
- ์ธ์„ผํ‹ฐ๋ธŒ์™€ ๋™๊ธฐ๋ถ€์—ฌ ์ฒด๊ณ„
- ์ง€์†์  ํ•™์Šต ๋ฌธํ™” ๊ตฌ์ถ•
- ์‹คํŒจ์— ๋Œ€ํ•œ ๊ด€์šฉ๊ณผ ์‹คํ—˜ ์ •์‹ "

์œ„๊ธฐ ์ƒํ™ฉ ๋Œ€์‘๊ณผ ๋ณต๊ตฌ ์ „๋žต

์‹œ์Šคํ…œ ๋ณต์›๋ ฅ๊ณผ ์—ฐ์†์„ฑ ๊ณ„ํš

bash
# AI ์„œ๋น„์Šค ์ค‘๋‹จ ์‹œ ๋Œ€์‘ ๊ณ„ํš
claude "Claude Code ์„œ๋น„์Šค ์ค‘๋‹จ ์ƒํ™ฉ์— ๋Œ€๋น„ํ•œ ํŒ€ ๋Œ€์‘ ๋งค๋‰ด์–ผ์„ ์ž‘์„ฑํ•ด์ค˜.
์ฆ‰์‹œ ๋Œ€์‘ (1-2์‹œ๊ฐ„)
- ํ•ต์‹ฌ ์—…๋ฌด ์šฐ์„ ์ˆœ์œ„ ์žฌ์กฐ์ •
- ๋Œ€์ฒด ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก ์œผ๋กœ ์ „ํ™˜
- ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—…์˜ ์ €์žฅ๊ณผ ๋ฐฑ์—…
- ํŒ€ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋ฐฉ์‹ ์กฐ์ •
- ๊ณ ๊ฐ๊ณผ ์ดํ•ด๊ด€๊ณ„์ž ์ƒํ™ฉ ๊ณต์œ 

๋‹จ๊ธฐ ๋Œ€์‘ (1-3์ผ)
- ์ˆ˜๋™ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค ํ™œ์„ฑํ™”
- ๊ธฐ์กด ์ฝ”๋“œ์™€ ๋ฌธ์„œ ์ตœ๋Œ€ ํ™œ์šฉ
- ํŒ€์› ๊ฐ„ ์ง€์‹ ๊ณต์œ  ๊ฐ•ํ™”
- ์™ธ๋ถ€ ๋„๊ตฌ์™€ ๋ฆฌ์†Œ์Šค ํ™œ์šฉ
- ์—…๋ฌด ์ผ์ •๊ณผ ๋งˆ์ผ์Šคํ†ค ์กฐ์ •

์žฅ๊ธฐ ๋Œ€์‘ (1์ฃผ ์ด์ƒ)
- ๋Œ€์ฒด AI ๋„๊ตฌ ํ‰๊ฐ€์™€ ๋„์ž…
- ํ”„๋กœ์„ธ์Šค ๊ฐœ์„ ๊ณผ ์ž๋™ํ™” ๊ฐ•ํ™”
- ํŒ€ ์Šคํ‚ฌ ๋‹ค์–‘ํ™”์™€ ์—ญ๋Ÿ‰ ๊ฐ•ํ™”
- ์˜์กด์„ฑ ๋ถ„์‚ฐ ์ „๋žต ์ˆ˜๋ฆฝ
- ๋ณต๊ตฌ ํ›„ ๊ฐœ์„  ๋ฐฉ์•ˆ ์ค€๋น„"

# ํŒ€ ํƒ„๋ ฅ์„ฑ ๊ฐ•ํ™”
claude "์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ณ€ํ™”์— ๋Œ€ํ•œ ํŒ€์˜ ์ ์‘๋ ฅ์„ ๊ฐ•ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์‹œํ•ด์ค˜.
ํƒ„๋ ฅ์„ฑ ๊ตฌ์ถ• ์š”์†Œ
- ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ๊ณผ ๋„๊ตฌ์— ๋Œ€ํ•œ ๊ฒฝํ—˜
- ๋ฌธ์ œ ํ•ด๊ฒฐ ์ ‘๊ทผ๋ฒ•์˜ ๋‹ค๊ฐํ™”
- ํŒ€์› ๊ฐ„ ์Šคํ‚ฌ ์ค‘๋ณต๊ณผ ๋ฐฑ์—…
- ์ง€์†์  ํ•™์Šต๊ณผ ์ ์‘ ๋ฌธํ™”
- ๋ณ€ํ™”์— ๋Œ€ํ•œ ๊ธ์ •์  ๋งˆ์ธ๋“œ์…‹

์‹ค๋ฌด ์ ์šฉ ๋ฐฉ์•ˆ
- ์ •๊ธฐ์ ์ธ ๊ธฐ์ˆ  ์Šคํƒ ๋‹ค์–‘ํ™” ์‹คํ—˜
- ๋กœํ…Œ์ด์…˜๊ณผ ํฌ๋กœ์Šค ํŠธ๋ ˆ์ด๋‹
- ์œ„๊ธฐ ์‹œ๋ฎฌ๋ ˆ์ด์…˜๊ณผ ๋Œ€์‘ ํ›ˆ๋ จ
- ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ์™€ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ฐธ์—ฌ
- ํ˜์‹ ๊ณผ ์‹คํ—˜์„ ์žฅ๋ คํ•˜๋Š” ๋ฌธํ™”"

[S1QC2(์„น์…˜13a)] Git ๊ธฐ๋ณธ โ€” ์ ˆ๋Œ€ ๊ธˆ์ง€ & ๋ ˆ๋“œ ํ”Œ๋ž˜๊ทธ

3.5 Git ์—ฐ๋™๊ณผ ๋ฒ„์ „ ๊ด€๋ฆฌ

๊ธฐ๋ณธ Git ์ž‘์—…

์ผ์ƒ์ ์ธ ๋ฒ„์ „ ๊ด€๋ฆฌ ์ž‘์—…์„ Claude Code์™€ ํ•จ๊ป˜ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

bash
# ์ƒํƒœ ํ™•์ธ
claude "git ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ณ  ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์š”์•ฝํ•ด์ค˜"

# ์Šคํ…Œ์ด์ง•
claude "์ˆ˜์ •๋œ ํŒŒ์ผ ์ค‘ ํ…Œ์ŠคํŠธ ๊ด€๋ จ ํŒŒ์ผ๋งŒ ์Šคํ…Œ์ด์ง•ํ•ด์ค˜"

# ์ปค๋ฐ‹
claude "์˜๋ฏธ ์žˆ๋Š” ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑํ•ด์„œ ์ปค๋ฐ‹ํ•ด์ค˜"

# ๋ธŒ๋žœ์น˜ ๊ด€๋ฆฌ
claude "์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์œ„ํ•œ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“ค๊ณ  ์ฒดํฌ์•„์›ƒํ•ด์ค˜"

๊ณ ๊ธ‰ Git ์ž‘์—…

๋ณต์žกํ•œ Git ์ž‘์—…๋„ Claude Code์˜ ๋„์›€์œผ๋กœ ์•ˆ์ „ํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

bash
# ๋Œ€ํ™”ํ˜• ๋ฆฌ๋ฒ ์ด์Šค
claude "์ตœ๊ทผ 3๊ฐœ ์ปค๋ฐ‹์„ ์ •๋ฆฌํ•ด์„œ ํ•˜๋‚˜๋กœ ํ•ฉ์ณ์ค˜"

# ์ถฉ๋Œ ํ•ด๊ฒฐ
claude "๋จธ์ง€ ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•ด์ค˜. ๋‘ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ชจ๋‘ ์œ ์ง€ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ"

# ํžˆ์Šคํ† ๋ฆฌ ๋ถ„์„
claude "์ด ๋ฒ„๊ทธ๊ฐ€ ์–ธ์ œ ๋„์ž…๋๋Š”์ง€ git bisect๋กœ ์ฐพ์•„์ค˜"

# ์ฒด๋ฆฌํ”ฝ
claude "hotfix ๋ธŒ๋žœ์น˜์˜ ๋ฒ„๊ทธ ์ˆ˜์ • ์ปค๋ฐ‹๋งŒ main์œผ๋กœ ์ฒด๋ฆฌํ”ฝํ•ด์ค˜"

Pull Request ์ž‘์„ฑ

ํŒ€ ํ˜‘์—…์—์„œ ์ค‘์š”ํ•œ Pull Request ๊ด€๋ จ ์ž‘์—…๋“ค์ž…๋‹ˆ๋‹ค.

bash
# PR ์ƒ์„ฑ
claude "์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ Pull Request๋ฅผ ์ƒ์„ฑํ•ด์ค˜. 
๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์š”์•ฝํ•˜๊ณ , ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ•๋„ ํฌํ•จํ•ด์ค˜"

# ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋Œ€์‘
claude "๋ฆฌ๋ทฐ์–ด๊ฐ€ ์ง€์ ํ•œ ์‚ฌํ•ญ๋“ค์„ ์ˆ˜์ •ํ•˜๊ณ  ๋‹ต๋ณ€์„ ์ž‘์„ฑํ•ด์ค˜"

# PR ํ…œํ”Œ๋ฆฟ ํ™œ์šฉ
claude "ํ”„๋กœ์ ํŠธ์˜ PR ํ…œํ”Œ๋ฆฟ์— ๋งž์ถฐ์„œ ์„ค๋ช…์„ ์ž‘์„ฑํ•ด์ค˜"
markdown
# CLAUDE.md

## ๐Ÿšจ ์ค‘์š” ๊ทœ์น™ (ํ•ญ์ƒ ์ค€์ˆ˜)
- ์ ˆ๋Œ€ main ๋ธŒ๋žœ์น˜์— ์ง์ ‘ ํ‘ธ์‹œ ๊ธˆ์ง€
- ๋ชจ๋“  API ํ‚ค๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ
- ํ…Œ์ŠคํŠธ ์—†๋Š” ์ฝ”๋“œ ์ปค๋ฐ‹ ๊ธˆ์ง€

## ๐Ÿ“‹ ์ผ๋ฐ˜ ๊ฐ€์ด๋“œ๋ผ์ธ
- ๊ฐ€๋Šฅํ•˜๋ฉด ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ
- ์ฃผ์„์€ ์ตœ์†Œํ™”, ์ฝ”๋“œ๋กœ ์„ค๋ช…

## ๐Ÿ’ก ๊ถŒ์žฅ์‚ฌํ•ญ
- ์ƒˆ๋กœ์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋„์ž… ์ „ ํŒ€ ๋…ผ์˜
- ์„ฑ๋Šฅ ์ตœ์ ํ™”๋Š” ์ธก์ • ํ›„ ์ง„ํ–‰

[S1QC3] CLAUDE.md โ€” ์ฝ”๋”ฉ ๊ทœ์น™ ๋ฐ ํ’ˆ์งˆ ๊ธฐ์ค€ ์ •์˜

[S1QC4] Sandboxing โ€” ๋ณด์•ˆ ๊ฒฉ๋ฆฌ ํ™˜๊ฒฝ

[S1QC5] Zero Data Retention โ€” ๋ฐ์ดํ„ฐ ๋ณด์กด ์—†์Œ ์ •์ฑ…

[S1QC6] Books 1๊ถŒ+2๊ถŒ โ€” ํ’ˆ์งˆ๊ด€๋ฆฌ ๊ธฐ์ดˆ ํ•™์Šต

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /ํ•™์Šต์šฉ_Books_New/

[S1QC7] Books 3๊ถŒ โ€” Stage Gate/๊ฒ€์ฆ ํ•™์Šต

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /ํ•™์Šต์šฉ_Books_New/3๊ถŒ_ํ”„๋กœ์ ํŠธ_๊ด€๋ฆฌ_๋ฐฉ๋ฒ•/

[S1QC8] ์‹ค์ „ Tips โ€” ๋ณด์•ˆ/๊ฒ€์ฆ/SAL Grid/Git

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /Tips/

[S1QC9] .claude ์ฐธ๊ณ  โ€” Rules/Compliance

๐Ÿ“ ๊ฒฝ๋กœ: .claude/rules/, .claude/compliance/

S1CM โ€” ๋น„์šฉ๊ด€๋ฆฌ (Cost Management)

[S1CM1(์„น์…˜19)] ์š”๊ธˆ์ œ ์„ ํƒ ๊ฐ€์ด๋“œ

Claude Code ์š”๊ธˆ์ œ ์ดํ•ด

Claude Code๋Š” Anthropic์˜ ๊ตฌ๋… ํ”Œ๋žœ์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์š”๊ธˆ์ œ์— ๋”ฐ๋ผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋ธ, ์ผ์ผ ์‚ฌ์šฉ๋Ÿ‰, ๊ธฐ๋Šฅ์ด ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

์š”๊ธˆ์ œ ๋น„๊ต

ํ•ญ๋ชฉFreePro ($20/์›”)Max ($100/์›”)Team ($30/์ธ/์›”)Enterprise
Claude Code ์‚ฌ์šฉโŒโœ…โœ…โœ…โœ…
๊ธฐ๋ณธ ๋ชจ๋ธ-SonnetOpus + SonnetSonnetOpus + Sonnet
์ผ์ผ ์‚ฌ์šฉ๋Ÿ‰-๋ณดํ†ต๋†’์Œ (5๋ฐฐ)๋ณดํ†ต๋ฌด์ œํ•œ
์„œ๋ธŒ์—์ด์ „ํŠธ-โœ…โœ…โœ…โœ…
MCP ์„œ๋ฒ„-โœ…โœ…โœ…โœ…
ํŒ€ ๊ณต์œ  ์„ค์ •-โŒโŒโœ…โœ…
SSO/๊ฐ์‚ฌ ๋กœ๊ทธ-โŒโŒโŒโœ…

์š”๊ธˆ์ œ ์„ ํƒ ๊ธฐ์ค€

๊ฐœ์ธ ํ•™์Šต/์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ
  โ†’ Pro ํ”Œ๋žœ ($20/์›”)
  โ†’ ์ผ๋ฐ˜์ ์ธ ๊ฐœ์ธ ๊ฐœ๋ฐœ์— ์ถฉ๋ถ„

๋ณธ๊ฒฉ์ ์ธ ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ
  โ†’ Max ํ”Œ๋žœ ($100/์›”)
  โ†’ Opus ๋ชจ๋ธ + ๋†’์€ ์‚ฌ์šฉ๋Ÿ‰ ํ•œ๋„

์†Œ๊ทœ๋ชจ ํŒ€ (2~10๋ช…)
  โ†’ Team ํ”Œ๋žœ ($30/์ธ/์›”)
  โ†’ ํŒ€ ์„ค์ • ๊ณต์œ , ์ผ๊ด€๋œ ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜

๊ธฐ์—…/๋Œ€๊ทœ๋ชจ ์กฐ์ง
  โ†’ Enterprise (์ปค์Šคํ…€ ๊ฐ€๊ฒฉ)
  โ†’ SSO, ๊ฐ์‚ฌ ๋กœ๊ทธ, ์ „์šฉ ์ง€์›

๋น„์šฉ ์ตœ์ ํ™” ํŒ

  1. ํ† ํฐ ์ ˆ์•ฝ: CLAUDE.md์— ํ”„๋กœ์ ํŠธ ์ปจํ…์ŠคํŠธ๋ฅผ ์ž˜ ์ •๋ฆฌํ•˜๋ฉด ๋งค๋ฒˆ ์„ค๋ช…ํ•  ํ•„์š” ์—†์–ด ํ† ํฐ ์ ˆ์•ฝ
  2. ๋ชจ๋ธ ์„ ํƒ: ๋‹จ์ˆœ ์ž‘์—…์€ Sonnet(๋น ๋ฅด๊ณ  ์ €๋ ด), ๋ณต์žกํ•œ ์„ค๊ณ„๋Š” Opus ์‚ฌ์šฉ
  3. ์„ธ์…˜ ๊ด€๋ฆฌ: /compact ๋ช…๋ น์œผ๋กœ ์ปจํ…์ŠคํŠธ ์••์ถ•, ๋ถˆํ•„์š”ํ•œ ๋Œ€ํ™” ์ •๋ฆฌ
  4. ์บ์‹ฑ ํ™œ์šฉ: ํ”„๋กฌํ”„ํŠธ ์บ์‹ฑ์œผ๋กœ ๋ฐ˜๋ณต ์š”์ฒญ ๋น„์šฉ ์ ˆ๊ฐ (API ์‚ฌ์šฉ ์‹œ)
  5. ์‚ฌ์šฉ๋Ÿ‰ ๋ชจ๋‹ˆํ„ฐ๋ง: /cost ๋ช…๋ น์œผ๋กœ ํ˜„์žฌ ์„ธ์…˜ ๋น„์šฉ ํ™•์ธ

๋ฌด๋ฃŒ๋กœ ์‹œ์ž‘ํ•˜๊ธฐ

Claude Code๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด:

  1. claude.ai์—์„œ ๊ณ„์ • ์ƒ์„ฑ
  2. Pro ํ”Œ๋žœ ๊ตฌ๋… ($20/์›”)
  3. ํ„ฐ๋ฏธ๋„์—์„œ npm install -g @anthropic-ai/claude-code ์„ค์น˜
  4. claude ๋ช…๋ น์œผ๋กœ ์‹œ์ž‘
ํŒ: Pro ํ”Œ๋žœ์œผ๋กœ ์‹œ์ž‘ํ•˜์—ฌ ์‚ฌ์šฉ ํŒจํ„ด์„ ํŒŒ์•…ํ•œ ํ›„, ํ•„์š” ์‹œ Max๋‚˜ Team์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

[S1CM2(์„น์…˜05a)] ์ปจํ…์ŠคํŠธ ๊ธฐ์ดˆ โ€” ํ† ํฐ๊ณผ ๋น„์šฉ

2. ์ปจํ…์ŠคํŠธ ํฌ๊ธฐ ์กฐ์ •

ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ์— ๋”ฐ๋ผ Claude Code๊ฐ€ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ปจํ…์ŠคํŠธ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

bash
# ํฐ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ ์ปจํ…์ŠคํŠธ ํ™•๋Œ€
claude config set max_context_length 100000

# ์ž‘์€ ํ”„๋กœ์ ํŠธ๋‚˜ ๋น ๋ฅธ ์‘๋‹ต์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ
claude config set max_context_length 50000

# ํ˜„์žฌ ์„ค์ • ํ™•์ธ
claude config get max_context_length

์„ค์ • ๊ฐ€์ด๋“œ๋ผ์ธ

์ฃผ์˜์‚ฌํ•ญ: ์ปจํ…์ŠคํŠธ๊ฐ€ ํด์ˆ˜๋ก ์‘๋‹ต ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง€๊ณ  API ๋น„์šฉ์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[S1CM3] CLAUDE.md โ€” ๋น„์šฉ ๋ฐ ํšจ์œจ ์ง€์นจ ์ •์˜

[S1CM4] Prompt Caching โ€” ํ”„๋กฌํ”„ํŠธ ์บ์‹ฑ์œผ๋กœ ๋น„์šฉ ์ ˆ๊ฐ

[S1CM5] Max Turns โ€” ์—์ด์ „ํŠธ ํ„ด ์ˆ˜ ์ œํ•œ

[S1CM6] Model Selection โ€” ๋ชจ๋ธ ์„ ํƒ ์ „๋žต

[S1CM7] Fast Mode โ€” ๋น ๋ฅธ ์‘๋‹ต ๋ชจ๋“œ

[S1CM8] Monitoring / Analytics โ€” ์‚ฌ์šฉ๋Ÿ‰ ๋ชจ๋‹ˆํ„ฐ๋ง

[S1CM9] AI๋ณ„ ์›น๊ฒ€์ƒ‰ ๋น„์šฉ๊ณผ ํšจ์œจ์  ํ™œ์šฉ๋ฒ•

์ฐธ๊ณ : ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /์‹ค์ „_Tips/๋„๊ตฌ_ํ™œ์šฉ/AI๋ณ„_์›น๊ฒ€์ƒ‰_๋น„์šฉ๊ณผ_ํšจ์œจ์ _ํ™œ์šฉ๋ฒ•.md

[S1CM10] --max-budget-usd โ€” ์ตœ๋Œ€ ์˜ˆ์‚ฐ ์ œํ•œ

[S1CM11] Effort Level โ€” ๋…ธ๋ ฅ ์ˆ˜์ค€ ์กฐ์ ˆ

[S1CM12] Books 1๊ถŒ โ€” ๋น„์šฉ๊ด€๋ฆฌ ํ•™์Šต

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /ํ•™์Šต์šฉ_Books_New/1๊ถŒ_Claude_ClaudeCode_์‚ฌ์šฉ๋ฒ•/

[S1CM13] ์‹ค์ „ Tips โ€” AI ๋น„์šฉ ํ™œ์šฉ๋ฒ•

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /Tips/๋„๊ตฌ_ํ™œ์šฉ/

S2 ์ค‘๊ธ‰ (Intermediate)


S2CO โ€” ๊ฐœ๋… (Concept)

[S2CO1(์„น์…˜16)] AI ์‹œ๋Œ€์˜ ๊ฐœ๋ฐœ ํŒจ๋Ÿฌ๋‹ค์ž„ ๋ณ€ํ™”

AI ์‹œ๋Œ€์˜ ๊ฐœ๋ฐœ ํŒจ๋Ÿฌ๋‹ค์ž„ ๋ณ€ํ™”

2025๋…„, ์šฐ๋ฆฌ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์—ญ์‚ฌ์ƒ ๊ฐ€์žฅ ๊ทน์ ์ธ ๋ณ€ํ™”์˜ ํ•œ๊ฐ€์šด๋ฐ ์„œ ์žˆ์Šต๋‹ˆ๋‹ค.

30๋…„ ์ „, ํ†ตํ•ฉ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ(IDE)์˜ ๋“ฑ์žฅ์ด ๊ฐœ๋ฐœ์ž๋“ค์˜ ์ƒ์‚ฐ์„ฑ์„ ํ˜๋ช…์ ์œผ๋กœ ํ–ฅ์ƒ์‹œ์ผฐ๋“ฏ์ด, ์˜ค๋Š˜๋‚  AI ํŽ˜์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋„๊ตฌ๋“ค์€ ์šฐ๋ฆฌ๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ์‹์„ ๊ทผ๋ณธ์ ์œผ๋กœ ๋ฐ”๊พธ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ์ค‘์—์„œ๋„ Claude Code๋Š” ๋‹จ์ˆœํ•œ ์ฝ”๋“œ ์ž๋™์™„์„ฑ์„ ๋„˜์–ด, ์ง„์ •ํ•œ ์˜๋ฏธ์˜ 'AI ๋™๋ฃŒ'๋กœ์„œ ๊ฐœ๋ฐœ์ž์™€ ํ˜‘์—…ํ•˜๋Š” ์ƒˆ๋กœ์šด ํŒจ๋Ÿฌ๋‹ค์ž„์„ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์น˜ ๊ฒฝํ—˜ ๋งŽ์€ ์‹œ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž์™€ ํ•จ๊ป˜ ์ผํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, Claude Code๋Š” ์—ฌ๋Ÿฌ๋ถ„์˜ ์˜๋„๋ฅผ ์ดํ•ดํ•˜๊ณ , ์ตœ์ ์˜ ์†”๋ฃจ์…˜์„ ์ œ์•ˆํ•˜๋ฉฐ, ๋ณต์žกํ•œ ์ž‘์—…์„ ํ•จ๊ป˜ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ฑ…์„ ์ฝ์–ด์•ผ ํ•  ์‚ฌ๋žŒ

์ด ์ฑ…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ถ„๋“ค์„ ์œ„ํ•ด ์“ฐ์˜€์Šต๋‹ˆ๋‹ค.

์ดˆ๊ธ‰ ๊ฐœ๋ฐœ์ž๋ผ๋ฉด

์ค‘๊ธ‰ ๊ฐœ๋ฐœ์ž๋ผ๋ฉด

์‹œ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž์™€ ํŒ€ ๋ฆฌ๋”๋ผ๋ฉด

๊ธฐ์ˆ  ๋ฆฌ๋”์™€ CTO๋ผ๋ฉด

์ฑ…์˜ ๊ตฌ์„ฑ๊ณผ ํ™œ์šฉ๋ฒ•

์ด ์ฑ…์€ ์ด 13๊ฐœ์˜ ์žฅ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๊ธฐ์ดˆ๋ถ€ํ„ฐ ๊ณ ๊ธ‰ ํ™œ์šฉ๊นŒ์ง€ ๋‹จ๊ณ„์ ์œผ๋กœ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์ดˆ ํŽธ (1-3์žฅ)

ํ”„๋กœ์ ํŠธ ์ตœ์ ํ™” (4-6์žฅ)

๊ณ ๊ธ‰ ์›Œํฌํ”Œ๋กœ์šฐ (7-9์žฅ)

์‹ค์ „ ํ”„๋กœ์ ํŠธ (10์žฅ)

ํŒ€ ํ˜‘์—…๊ณผ ์กฐ์ง ํ˜์‹  (11-13์žฅ)

์ด ์ฑ…์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

  1. ์‹ค์Šต ์ค‘์‹ฌ ํ•™์Šต: ๊ฐ ์žฅ์˜ ์˜ˆ์ œ๋ฅผ ์ง์ ‘ ๋”ฐ๋ผํ•˜๋ฉฐ ํ•™์Šตํ•˜์„ธ์š”. Claude Code๋Š” ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•ด๋ด์•ผ ๊ทธ ๊ฐ€์น˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์ ์ง„์  ์ ์šฉ: ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ ํ”„๋กœ์ ํŠธ์— ํ•˜๋‚˜์”ฉ ์ ์šฉํ•ด๋ณด์„ธ์š”. ์ž‘์€ ์„ฑ๊ณต ๊ฒฝํ—˜์ด ํฐ ๋ณ€ํ™”๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.
  3. ์ปค์Šคํ„ฐ๋งˆ์ด์ง•: ์ฑ…์˜ ๋‚ด์šฉ์„ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ฅด๊ธฐ๋ณด๋‹ค๋Š”, ์—ฌ๋Ÿฌ๋ถ„์˜ ํ™˜๊ฒฝ๊ณผ ํ•„์š”์— ๋งž๊ฒŒ ์กฐ์ •ํ•˜์„ธ์š”.
  4. ๊ณต์œ ์™€ ํ† ๋ก : ํŒ€์›๋“ค๊ณผ ๊ฒฝํ—˜์„ ๊ณต์œ ํ•˜๊ณ , ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์„ ํ•จ๊ป˜ ์ฐพ์•„๊ฐ€์„ธ์š”.

ํ•จ๊ป˜ ๋– ๋‚˜๋Š” ์—ฌ์ •

์ด ์ฑ…์€ ๋‹จ์ˆœํ•œ ๋„๊ตฌ ์‚ฌ์šฉ๋ฒ•์„ ๋„˜์–ด, AI์™€ ํ•จ๊ป˜ ์ผํ•˜๋Š” ์ƒˆ๋กœ์šด ๊ฐœ๋ฐœ ๋ฌธํ™”๋ฅผ ๋งŒ๋“ค์–ด๊ฐ€๋Š” ์—ฌ์ •์ž…๋‹ˆ๋‹ค.

Claude Code๋Š” ์—ฌ๋Ÿฌ๋ถ„์˜ ์ฝ”๋“œ๋ฅผ ๋Œ€์‹  ์ž‘์„ฑํ•˜๋Š” ๋„๊ตฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์˜คํžˆ๋ ค ์—ฌ๋Ÿฌ๋ถ„์ด ๋” ๋‚˜์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๋„๋ก ๋•๋Š” ๋™๋ฃŒ์ž…๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ํ•จ๊ป˜ ๊ณ ๋ฏผํ•˜๊ณ , ๋‹ค์–‘ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ œ์‹œํ•˜๋ฉฐ, ๋•Œ๋กœ๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ๋†“์นœ ๋ถ€๋ถ„์„ ์งš์–ด์ฃผ๋Š” ๋ฏฟ์Œ์งํ•œ ํŒŒํŠธ๋„ˆ์ž…๋‹ˆ๋‹ค.

์ด์ œ AI์™€ ํ•จ๊ป˜ํ•˜๋Š” ๊ฐœ๋ฐœ์˜ ์„ธ๊ณ„๋กœ ์ฒซ๋ฐœ์„ ๋‚ด๋”›์–ด ๋ด…์‹œ๋‹ค. ์ด ์ฑ…์ด ์—ฌ๋Ÿฌ๋ถ„์˜ ๊ฐœ๋ฐœ ์ธ์ƒ์— ์ƒˆ๋กœ์šด ์žฅ์„ ์—ฌ๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

2025๋…„ 6์›”

ํ™ฉ๋ฏผํ˜ธ

๊ฒฐ๋ก : AI์™€ ํ•จ๊ป˜ํ•˜๋Š” ๊ฐœ๋ฐœ์˜ ๋ฏธ๋ž˜

"๋ฏธ๋ž˜๋Š” ์ด๋ฏธ ์™€ ์žˆ๋‹ค. ๋‹ค๋งŒ ๊ณ ๋ฅด๊ฒŒ ๋ถ„ํฌ๋˜์–ด ์žˆ์ง€ ์•Š์„ ๋ฟ์ด๋‹ค" - ์œŒ๋ฆฌ์—„ ๊น์Šจ

์ด ์ฑ…์„ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” Claude Code๋ผ๋Š” ํ˜์‹ ์ ์ธ ๋„๊ตฌ๋ฅผ ๊นŠ์ด ํƒ๊ตฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•œ ์‚ฌ์šฉ๋ฒ•์„ ๋„˜์–ด, AI์™€ ํ•จ๊ป˜ ์ผํ•˜๋Š” ์ƒˆ๋กœ์šด ๊ฐœ๋ฐœ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ๊ฒฝํ—˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ์ •์„ ๋Œ์•„๋ณด๋ฉฐ

์šฐ๋ฆฌ๊ฐ€ ๋ฐฐ์šด ๊ฒƒ๋“ค

๊ธฐ์ˆ ์  ์ธก๋ฉด

์ฒ ํ•™์  ์ธก๋ฉด

๋ณ€ํ™”ํ•˜๋Š” ๊ฐœ๋ฐœ์ž์˜ ์—ญํ• 

Before AI

๊ฐœ๋ฐœ์ž = ์ฝ”๋“œ ์ž‘์„ฑ์ž
- ๋ฌธ๋ฒ•๊ณผ API ์•”๊ธฐ
- ๋ฐ˜๋ณต์ ์ธ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ž‘์„ฑ
- ์Šคํƒ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๊ฒ€์ƒ‰
- ํ˜ผ์ž์„œ ๋ชจ๋“  ๋ฌธ์ œ ํ•ด๊ฒฐ

After AI

๊ฐœ๋ฐœ์ž = ๋ฌธ์ œ ํ•ด๊ฒฐ์ž + ์•„ํ‚คํ…ํŠธ + ๋ฉ˜ํ† 
- ๋น„์ฆˆ๋‹ˆ์Šค ๋ฌธ์ œ ์ดํ•ด์™€ ํ•ด๊ฒฐ
- ์‹œ์Šคํ…œ ์„ค๊ณ„์™€ ์•„ํ‚คํ…์ฒ˜
- AI์™€์˜ ํ˜‘์—…์„ ํ†ตํ•œ ํšจ์œจ์  ๊ตฌํ˜„
- ํŒ€๊ณผ AI๋ฅผ ์ด๋„๋Š” ๋ฆฌ๋”์‹ญ

ํ•ต์‹ฌ ๊ตํ›ˆ๋“ค

1. AI๋Š” ์ฆ๊ฐ•(Augmentation)์ด์ง€ ๋Œ€์ฒด(Replacement)๊ฐ€ ์•„๋‹ˆ๋‹ค.

Claude Code๋Š” ๊ฐœ๋ฐœ์ž๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋Šฅ๋ ฅ์„ ์ฆ๊ฐ•์‹œํ‚ต๋‹ˆ๋‹ค.

์ธ๊ฐ„์˜ ์ฐฝ์˜์„ฑ + AI์˜ ํšจ์œจ์„ฑ = ๋ฌดํ•œํ•œ ๊ฐ€๋Šฅ์„ฑ

2. ์ง€์†์ ์ธ ํ•™์Šต์ด ํ•ต์‹ฌ์ด๋‹ค.

AI ๊ธฐ์ˆ ์€ ๋น ๋ฅด๊ฒŒ ๋ฐœ์ „ํ•ฉ๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ๊ฒƒ์€

3. ํ’ˆ์งˆ์€ ์ž๋™ํ™”์˜ ํ•ต์‹ฌ์ด๋‹ค.

Claude Code๋ฅผ ํ™œ์šฉํ•  ๋•Œ ํ’ˆ์งˆ ๊ด€๋ฆฌ๋Š” ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.

4. ํŒ€ ๋ฌธํ™”๊ฐ€ ์„ฑ๊ณต์„ ์ขŒ์šฐํ•œ๋‹ค.

๊ฐœ์ธ์˜ ์ƒ์‚ฐ์„ฑ์„ ๋„˜์–ด ํŒ€ ์ „์ฒด์˜ ํ˜์‹ ์ด ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค.

๋ฏธ๋ž˜๋ฅผ ์ค€๋น„ํ•˜๋ฉฐ

๋‹ค๊ฐ€์˜ฌ ๋ณ€ํ™”๋“ค

๊ธฐ์ˆ ์  ๋ฐœ์ „

๊ฐœ๋ฐœ ๋ฌธํ™” ๋ณ€ํ™”

๊ฐœ๋ฐœ์ž๊ฐ€ ์ค€๋น„ํ•ด์•ผ ํ•  ๊ฒƒ๋“ค

1. ๊ธฐ๋ณธ๊ธฐ ๊ฐ•ํ™”

bash
# ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ๋“ค
- ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์ž๋ฃŒ๊ตฌ์กฐ
- ์‹œ์Šคํ…œ ์„ค๊ณ„ ์›์น™
- ๋ฌธ์ œ ํ•ด๊ฒฐ ์‚ฌ๊ณ ๋ ฅ
- ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋Šฅ๋ ฅ

2. ์ƒˆ๋กœ์šด ์—ญ๋Ÿ‰ ๊ฐœ๋ฐœ

bash
# ์ƒˆ๋กญ๊ฒŒ ํ•„์š”ํ•œ ๊ฒƒ๋“ค
- AI์™€์˜ ํšจ๊ณผ์ ์ธ ์†Œํ†ต ๋Šฅ๋ ฅ
- ํ”„๋กฌํ”„ํŠธ ์—”์ง€๋‹ˆ์–ด๋ง ์Šคํ‚ฌ
- ๋„๋ฉ”์ธ ์ „๋ฌธ ์ง€์‹
- ์ฐฝ์˜์  ์‚ฌ๊ณ ์™€ ํ˜์‹  ๋Šฅ๋ ฅ

3. ์ง€์†์ ์ธ ์‹คํ—˜

bash
# ์‹คํ—˜ํ•ด์•ผ ํ•  ๊ฒƒ๋“ค
- ์ƒˆ๋กœ์šด AI ๋„๊ตฌ์™€ ํ”Œ๋žซํผ
- ํ˜์‹ ์ ์ธ ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์šฐ
- ํŒ€ ํ˜‘์—… ๋ฐฉ์‹์˜ ๋ณ€ํ™”
- ์ž๋™ํ™” ๊ฐ€๋Šฅํ•œ ์ž‘์—… ์˜์—ญ

์‹ค์ฒœ ๊ฐ€์ด๋“œ

์˜ค๋Š˜๋ถ€ํ„ฐ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋“ค

๊ฐœ์ธ ์ˆ˜์ค€

  1. Claude Code ์„ค์น˜ํ•˜๊ณ  ์ฒซ ํ”„๋กœ์ ํŠธ ์‹œ์ž‘
  2. ์ผ์ผ ์—…๋ฌด์—์„œ ๋ฐ˜๋ณต ์ž‘์—… ํ•˜๋‚˜์”ฉ ์ž๋™ํ™”
  3. ๋งค์ฃผ ์ƒˆ๋กœ์šด AI ๋„๊ตฌ๋‚˜ ๊ธฐ๋Šฅ ์‹คํ—˜
  4. ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ๋ธ”๋กœ๊ทธ๋‚˜ ๋…ธํŠธ์— ๊ธฐ๋ก

ํŒ€ ์ˆ˜์ค€

  1. ํŒ€ CLAUDE.md ์ž‘์„ฑํ•˜๊ณ  ๊ณต์œ 
  2. ์ฝ”๋“œ ๋ฆฌ๋ทฐ์— Claude ํ™œ์šฉ ์‹œ๋ฒ” ๋„์ž…
  3. ์ฃผ๊ฐ„ AI ํ™œ์šฉ ์‚ฌ๋ก€ ๊ณต์œ  ์„ธ์…˜ ์‹œ์ž‘
  4. ํŒŒ์ผ๋Ÿฟ ํ”„๋กœ์ ํŠธ์—์„œ ์ง‘์ค‘์ ์œผ๋กœ ํ™œ์šฉ

์กฐ์ง ์ˆ˜์ค€

  1. AI ๋„๊ตฌ ๋„์ž… ๊ฐ€์ด๋“œ๋ผ์ธ ์ˆ˜๋ฆฝ
  2. ๊ต์œก ํ”„๋กœ๊ทธ๋žจ๊ณผ ์›Œํฌ์ƒต ๊ณ„ํš
  3. ์„ฑ๊ณต ์‚ฌ๋ก€ ์ˆ˜์ง‘๊ณผ ํ™•์‚ฐ ์ „๋žต
  4. ์œค๋ฆฌ์  AI ์‚ฌ์šฉ ์ •์ฑ… ๋งˆ๋ จ

์žฅ๊ธฐ์ ์ธ ๋กœ๋“œ๋งต

3๊ฐœ์›” ํ›„

6๊ฐœ์›” ํ›„

1๋…„ ํ›„

๋งˆ์ง€๋ง‰ ๋ฉ”์‹œ์ง€

๋…์ž ์—ฌ๋Ÿฌ๋ถ„๊ป˜

์ด ์ฑ…์„ ๋๊นŒ์ง€ ์ฝ์–ด์ฃผ์‹  ๋ชจ๋“  ๋ถ„๋“ค๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์€ ์ด์ œ AI ์‹œ๋Œ€์˜ ๊ฐœ๋ฐœ์ž๋กœ์„œ ํ•„์š”ํ•œ ์ง€์‹๊ณผ ๋„๊ตฌ๋ฅผ ๊ฐ–์ถ”์…จ์Šต๋‹ˆ๋‹ค.

์ค‘์š”ํ•œ ๊ฒƒ์€ ์ด ์ง€์‹์„ ์‹ค์ œ๋กœ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ž‘์€ ํ”„๋กœ์ ํŠธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ, ์‹คํŒจ๋ฅผ ๋‘๋ ค์›Œํ•˜์ง€ ๋ง๊ณ , ์ง€์†์ ์œผ๋กœ ์‹คํ—˜ํ•˜๊ณ  ํ•™์Šตํ•˜์„ธ์š”.

๋ฏธ๋ž˜์˜ ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ

AI์™€ ํ•จ๊ป˜ ์ผํ•˜๋Š” ๊ฒƒ์€ ์„ ํƒ์ด ์•„๋‹Œ ํ•„์ˆ˜๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‘๋ ค์›Œํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. AI๋Š” ์—ฌ๋Ÿฌ๋ถ„์˜ ๋Šฅ๋ ฅ์„ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ™•์žฅํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

์ค‘์š”ํ•œ ๊ฒƒ์€

์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฏธ๋ž˜

AI์™€ ํ•จ๊ป˜ํ•˜๋Š” ๊ฐœ๋ฐœ์˜ ๋ฏธ๋ž˜๋Š” ์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ๋งŒ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์ฑ…์ด ๊ทธ ์—ฌ์ •์˜ ์ถœ๋ฐœ์ ์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ง€๊ธˆ ์ด ์ˆœ๊ฐ„์—๋„ ์ „ ์„ธ๊ณ„์˜ ๊ฐœ๋ฐœ์ž๋“ค์ด AI์™€ ํ•จ๊ป˜ ๋†€๋ผ์šด ๊ฒƒ๋“ค์„ ๋งŒ๋“ค์–ด๋‚ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„๋„ ๊ทธ ์ผ๋ถ€๊ฐ€ ๋˜์–ด, ๋” ๋‚˜์€ ์„ธ์ƒ์„ ๋งŒ๋“œ๋Š” ๋ฐ ๊ธฐ์—ฌํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

ํ–‰์šด์„ ๋น•๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ฆ๊ฑฐ์šด ์ฝ”๋”ฉ ๋˜์„ธ์š”! ๐Ÿš€


"The future belongs to those who learn more skills and combine them in creative ways." - Robert Greene

์ด ์ฑ…์€ ๋์ด์ง€๋งŒ, ์—ฌ๋Ÿฌ๋ถ„์˜ AI์™€ ํ•จ๊ป˜ํ•˜๋Š” ๊ฐœ๋ฐœ ์—ฌ์ •์€ ์ด์ œ ์‹œ์ž‘์ž…๋‹ˆ๋‹ค.


[S2CO2] Books 1๊ถŒ+2๊ถŒ โ€” ์ค‘๊ธ‰ ๊ฐœ๋… ํ•™์Šต

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /ํ•™์Šต์šฉ_Books_New/

[S2CO3] ์‹ค์ „ Tips โ€” ์›น๊ฐœ๋ฐœ ๊ธฐ์ดˆ๊ฐœ๋… ์ค‘๊ธ‰

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /Tips/์›น๊ฐœ๋ฐœ_๊ธฐ์ดˆ๊ฐœ๋…/

S2ST โ€” ์ŠคํŠธ๋Ÿญ์ฒ˜ (Structure)

[S2ST1(์„น์…˜20)] ์‹ค์ „ ํ”„๋กœ์ ํŠธ ๋ ˆ์‹œํ”ผ 12์ข…

์ œ5์žฅ: ํ”„๋ ˆ์ž„์›Œํฌ๋ณ„ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค

"์˜ฌ๋ฐ”๋ฅธ ๋„๊ตฌ๋ฅผ ์˜ฌ๋ฐ”๋ฅธ ์ž‘์—…์— ์‚ฌ์šฉํ•˜๋ผ" - ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฉ์–ธ
mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}}}%%
mindmap
  root((ํ•™์Šต ๋ชฉํ‘œ))
    ์ „๋žต ์ˆ˜๋ฆฝ
      ํ”„๋ ˆ์ž„์›Œํฌ๋ณ„ ํŠน์„ฑ ์ดํ•ด
      ์ตœ์ ํ™”๋œ ํ™œ์šฉ ์ „๋žต
      ๊ฐœ๋ฐœ ํŒจํ„ด ์ •๋ฆฝ
    ์ฃผ์š” ํ”„๋ ˆ์ž„์›Œํฌ
      React/Next.js ๋งˆ์Šคํ„ฐ
      Node.js/Express ํ™œ์šฉ
      Django ๊ฐœ๋ฐœ ํŒจํ„ด
    ์ฝ”๋“œ ํ’ˆ์งˆ ๊ด€๋ฆฌ
      CLAUDE.md ์„ค์ •
      ์ผ๊ด€๋œ ํ’ˆ์งˆ ์œ ์ง€
      ํŒ€ ํ˜‘์—… ๊ทœ์น™
    ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
      ํ”„๋ ˆ์ž„์›Œํฌ ์ „ํ™˜ ์ง€์›
      ํšจ๊ณผ์  ํ™œ์šฉ ๋ฐฉ๋ฒ•
      ์‹ค์ „ ์ ์šฉ ๋Šฅ๋ ฅ

๊ฐœ์š”

ํ˜„๋Œ€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ฐœ๋ฐœ ํšจ์œจ์„ฑ๊ณผ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ๊ฒฐ์ •ํ•˜๋Š” ํ•ต์‹ฌ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ๊ฐ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ณ ์œ ํ•œ ์ฒ ํ•™, ์„ค๊ณ„ ํŒจํ„ด, ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด, ๋™์ผํ•œ ๊ธฐ๋Šฅ์ด๋ผ๋„ ํ”„๋ ˆ์ž„์›Œํฌ์— ๋”ฐ๋ผ ์ „ํ˜€ ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์ด ์š”๊ตฌ๋ฉ๋‹ˆ๋‹ค.

Claude Code๋Š” ์ด๋Ÿฌํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋ณ„ ํŠน์„ฑ์„ ๊นŠ์ด ์ดํ•ดํ•˜๊ณ , ๊ฐ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ด€์šฉ๊ตฌ์™€ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์ค€์ˆ˜ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์žฅ์—์„œ๋Š” ์ฃผ์š” ํ”„๋ ˆ์ž„์›Œํฌ๋ณ„๋กœ Claude Code๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ์ „๋žต๊ณผ ์‹ค์ „ ํ™œ์šฉ๋ฒ•์„ ์ฒด๊ณ„์ ์œผ๋กœ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

5.1 React/Next.js ํ”„๋กœ์ ํŠธ

React์™€ Next.js๋Š” ํ˜„๋Œ€ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์˜ ํ•ต์‹ฌ ๊ธฐ์ˆ ๋กœ, ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜์™€ ์„ ์–ธ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ†ตํ•ด ๋ณต์žกํ•œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. Claude Code๋Š” React์˜ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ ํŒจํ„ด, Next.js์˜ App Router ๊ตฌ์กฐ, ๊ทธ๋ฆฌ๊ณ  ํ˜„๋Œ€์ ์ธ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค๊ณผ์˜ ํ†ตํ•ฉ์„ ์™„๋ฒฝํžˆ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

React ํ”„๋กœ์ ํŠธ ์ดˆ๊ธฐ ์„ค์ •

React ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ๋Š” ํ”„๋กœ์ ํŠธ์˜ ๊ทœ๋ชจ์™€ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๋Š” ๋„๊ตฌ ์„ ํƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. Claude Code๋Š” ์—…๊ณ„ ํ‘œ์ค€ ๋„๊ตฌ๋“ค์„ ์กฐํ•ฉํ•˜์—ฌ ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

bash
# Vite๋ฅผ ์‚ฌ์šฉํ•œ React ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
claude "Vite๋กœ ์ƒˆ๋กœ์šด React TypeScript ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด์ค˜. 
Tailwind CSS, React Router, React Query๋ฅผ ํฌํ•จํ•˜๊ณ ,
ํด๋” ๊ตฌ์กฐ๋„ ๋ชจ๋ฒ” ์‚ฌ๋ก€์— ๋”ฐ๋ผ ์„ค์ •ํ•ด์ค˜"

Claude Code๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

src/
โ”œโ”€โ”€ components/
โ”‚   โ”œโ”€โ”€ common/        # Button, Input ๋“ฑ ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”œโ”€โ”€ features/      # ๊ธฐ๋Šฅ๋ณ„ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ””โ”€โ”€ layouts/       # Header, Footer ๋“ฑ
โ”œโ”€โ”€ hooks/            # ์ปค์Šคํ…€ ํ›…
โ”œโ”€โ”€ pages/            # ๋ผ์šฐํŠธ๋ณ„ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ
โ”œโ”€โ”€ services/         # API ํ†ต์‹ 
โ”œโ”€โ”€ store/            # ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ
โ”œโ”€โ”€ utils/            # ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜
โ””โ”€โ”€ types/            # TypeScript ํƒ€์ž… ์ •์˜

React ์ปดํฌ๋„ŒํŠธ ๊ฐœ๋ฐœ ํŒจํ„ด

React ์ปดํฌ๋„ŒํŠธ๋Š” ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ณ  ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•œ ๋‹จ์œ„๋กœ ์„ค๊ณ„๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Claude Code๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ์—ญํ• ๊ณผ ์ฑ…์ž„์„ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•˜๊ณ , ์ ์ ˆํ•œ ์ถ”์ƒํ™” ์ˆ˜์ค€์„ ์œ ์ง€ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1. ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ ์š”์ฒญ - ์‹ค์ „ ์˜ˆ์‹œ

ํšจ๊ณผ์ ์ธ ์ปดํฌ๋„ŒํŠธ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด์„œ๋Š” ๋ช…ํ™•ํ•œ ์š”๊ตฌ์‚ฌํ•ญ ์ •์˜์™€ ํ•จ๊ป˜ ํ…Œ์ŠคํŠธ์™€ ๋ฌธ์„œํ™”๋ฅผ ํฌํ•จํ•œ ์™„์„ฑ๋„ ๋†’์€ ์š”์ฒญ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ํŒจํ„ด๋“ค์ž…๋‹ˆ๋‹ค.

bash
# ๊ธฐ๋ณธ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ
claude "UserProfile ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด์ค˜. 
ํ”„๋กœํ•„ ์ด๋ฏธ์ง€, ์ด๋ฆ„, ์†Œ๊ฐœ๋ฅผ ํ‘œ์‹œํ•˜๊ณ ,
ํŽธ์ง‘ ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•ด์•ผ ํ•ด. 
Storybook ์Šคํ† ๋ฆฌ์™€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋„ ํ•จ๊ป˜ ์ž‘์„ฑํ•ด์ค˜"

# ๊ณ ๊ธ‰ ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ” ์ปดํฌ๋„ŒํŠธ
claude "DataTable ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด์ค˜.
- ์ •๋ ฌ, ํ•„ํ„ฐ๋ง, ํŽ˜์ด์ง€๋„ค์ด์…˜ ์ง€์›
- ์„ ํƒ ๊ฐ€๋Šฅํ•œ ํ–‰๊ณผ ๋Œ€๋Ÿ‰ ์ž‘์—…
- ๊ฐ€์ƒ ์Šคํฌ๋กค๋ง์œผ๋กœ ์„ฑ๋Šฅ ์ตœ์ ํ™”
- TypeScript ์ œ๋„ค๋ฆญ์œผ๋กœ ํƒ€์ž… ์•ˆ์ „์„ฑ ๋ณด์žฅ
- ์ ‘๊ทผ์„ฑ(a11y) ์ค€์ˆ˜"

# ๋ณต์žกํ•œ ํผ ์ปดํฌ๋„ŒํŠธ
claude "MultiStepForm ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด์ค˜.
- React Hook Form๊ณผ Zod ๊ฒ€์ฆ ํ†ตํ•ฉ
- ๋‹จ๊ณ„๋ณ„ ์ง„ํ–‰ ํ‘œ์‹œ์™€ ๋„ค๋น„๊ฒŒ์ด์…˜
- ์ž๋™ ์ €์žฅ๊ณผ ์ž„์‹œ ์ €์žฅ ๊ธฐ๋Šฅ
- ์˜ค๋ฅ˜ ์ƒํƒœ ์ฒ˜๋ฆฌ์™€ ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ
- ๊ฐ ๋‹จ๊ณ„๋ณ„ ์กฐ๊ฑด๋ถ€ ํ•„๋“œ ํ‘œ์‹œ"

2. ์ƒํƒœ ๊ด€๋ฆฌ ํŒจํ„ด

bash
# ์ธ์ฆ ์ƒํƒœ ๊ด€๋ฆฌ
claude "์‚ฌ์šฉ์ž ์ธ์ฆ ์ƒํƒœ๋ฅผ ์ „์—ญ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” 
Context์™€ ์ปค์Šคํ…€ ํ›…์„ ๋งŒ๋“ค์–ด์ค˜.
๋กœ๊ทธ์ธ, ๋กœ๊ทธ์•„์›ƒ, ํ† ํฐ ๊ฐฑ์‹  ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ด"

# ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ƒํƒœ ๊ด€๋ฆฌ
claude "์ „์ž์ƒ๊ฑฐ๋ž˜ ์žฅ๋ฐ”๊ตฌ๋‹ˆ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•ด์ค˜.
- Zustand๋กœ ์ƒํƒœ ์ €์žฅ์†Œ ๊ตฌ์„ฑ
- ์ƒํ’ˆ ์ถ”๊ฐ€/์ œ๊ฑฐ/์ˆ˜๋Ÿ‰ ๋ณ€๊ฒฝ ๋กœ์ง
- ํ• ์ธ ์ฟ ํฐ ์ ์šฉ๊ณผ ๊ฐ€๊ฒฉ ๊ณ„์‚ฐ
- ๋กœ์ปฌ์Šคํ† ๋ฆฌ์ง€ ๋™๊ธฐํ™”
- ๋น„๊ด€์ /๋‚™๊ด€์  ์—…๋ฐ์ดํŠธ ์ฒ˜๋ฆฌ"

# ์„œ๋ฒ„ ์ƒํƒœ์™€ ์บ์‹ฑ
claude "React Query๋ฅผ ํ™œ์šฉํ•œ ์„œ๋ฒ„ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์„ค์ •ํ•ด์ค˜.
- API ์‘๋‹ต ์บ์‹ฑ ์ „๋žต
- ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ฆฌํŽ˜์นญ๊ณผ ์Šคํ…Œ์ผ ํƒ€์ž„ ์„ค์ •
- ๋ฌดํ•œ ์Šคํฌ๋กค ๋ฐ์ดํ„ฐ ํŽ˜์นญ
- ์—๋Ÿฌ ์žฌ์‹œ๋„ ๋กœ์ง๊ณผ ์˜คํ”„๋ผ์ธ ์ง€์›"

3. ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ „๋žต

bash
# ๋ฆฌ๋ Œ๋”๋ง ์ตœ์ ํ™”
claude "์ด ์ปดํฌ๋„ŒํŠธ์˜ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์„ ๋ฐฉ์ง€ํ•˜๋„๋ก 
React.memo, useMemo, useCallback์„ ์ ์šฉํ•ด์ค˜"

# ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…๊ณผ ์ง€์—ฐ ๋กœ๋”ฉ
claude "์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…์„ ์ ์šฉํ•ด์ค˜.
- ๋ผ์šฐํŠธ ๋ ˆ๋ฒจ ์ง€์—ฐ ๋กœ๋”ฉ
- ๋ฌด๊ฑฐ์šด ์ปดํฌ๋„ŒํŠธ์˜ ๋™์  ์ž„ํฌํŠธ
- ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒˆ๋“ค ๋ถ„๋ฆฌ
- ๋กœ๋”ฉ ์Šคํ”ผ๋„ˆ์™€ ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ ์ถ”๊ฐ€"

# ๋Œ€์šฉ๋Ÿ‰ ๋ฆฌ์ŠคํŠธ ์ตœ์ ํ™”
claude "10,000๊ฐœ ์•„์ดํ…œ์„ ํšจ์œจ์ ์œผ๋กœ ๋ Œ๋”๋งํ•˜๋Š” 
๊ฐ€์ƒ ์Šคํฌ๋กค ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌํ˜„ํ•ด์ค˜.
- react-window ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ™œ์šฉ
- ๋™์  ์•„์ดํ…œ ๋†’์ด ์ง€์›
- ๋ฌดํ•œ ์Šคํฌ๋กค๊ณผ ํŽ˜์ด์ง€๋„ค์ด์…˜ ํ†ตํ•ฉ"

# ์ด๋ฏธ์ง€ ์ตœ์ ํ™”
claude "์ด๋ฏธ์ง€ ๊ฐค๋Ÿฌ๋ฆฌ์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•ด์ค˜.
- ์ง€์—ฐ ๋กœ๋”ฉ๊ณผ ํ”„๋ฆฌ๋กœ๋”ฉ ์ „๋žต
- WebP ํฌ๋งท ์ง€์›๊ณผ ํด๋ฐฑ
- ์ด๋ฏธ์ง€ ์••์ถ•๊ณผ ๋ฆฌ์‚ฌ์ด์ง•
- Progressive loading ๊ตฌํ˜„"

Next.js ํŠนํ™” ๊ธฐ๋Šฅ - ์‹ค์ „ ํ™œ์šฉ

1. App Router ๊ณ ๊ธ‰ ํŒจํ„ด

bash
# ์ข…ํ•ฉ์ ์ธ ๋ธ”๋กœ๊ทธ ์‹œ์Šคํ…œ
claude "Next.js 14 App Router๋กœ ๋ธ”๋กœ๊ทธ๋ฅผ ๋งŒ๋“ค์–ด์ค˜.
๋™์  ๋ผ์šฐํŒ…, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ตœ์ ํ™”, 
๊ทธ๋ฆฌ๊ณ  ISR(Incremental Static Regeneration)์„ ํ™œ์šฉํ•ด์ค˜"

# ๋‹ค๊ตญ์–ด ์ง€์›๊ณผ ๊ตญ์ œํ™”
claude "Next.js์—์„œ ๋‹ค๊ตญ์–ด ์ง€์›์„ ๊ตฌํ˜„ํ•ด์ค˜.
- i18n ๋ผ์šฐํŒ… ์„ค์ •
- ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฒˆ์—ญ ์ฒ˜๋ฆฌ
- ๋™์  ๋ฒˆ์—ญ ๋กœ๋”ฉ๊ณผ ํด๋ฐฑ
- SEO ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ hreflang ํƒœ๊ทธ"

# ๋ณต์žกํ•œ ์ธ์ฆ ์‹œ์Šคํ…œ
claude "NextAuth.js๋กœ ๋‹ค์ค‘ ์ธ์ฆ ์ œ๊ณต์ž๋ฅผ ์ง€์›ํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•ด์ค˜.
- OAuth (Google, GitHub), ์ด๋ฉ”์ผ, ์ž๊ฒฉ์ฆ๋ช… ๋กœ๊ทธ์ธ
- ์—ญํ•  ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ์ œ์–ด (RBAC)
- ์„ธ์…˜ ๊ด€๋ฆฌ์™€ ๋ณด์•ˆ ๊ฐ•ํ™”
- API ๋ผ์šฐํŠธ ๋ณดํ˜ธ ๋ฏธ๋“ค์›จ์–ด"

2. Server Components ํŒจํ„ด

bash
claude "์ด ํŽ˜์ด์ง€๋ฅผ Server Component๋กœ ๋ฆฌํŒฉํ† ๋งํ•ด์ค˜.
๋ฐ์ดํ„ฐ ํŽ˜์นญ์€ ์„œ๋ฒ„์—์„œ, ์ธํ„ฐ๋ž™์…˜์€ Client Component๋กœ ๋ถ„๋ฆฌํ•ด์ค˜"

3. API Routes ์„ค๊ณ„

bash
claude "RESTful API๋ฅผ Next.js API routes๋กœ ๊ตฌํ˜„ํ•ด์ค˜.
๋ฏธ๋“ค์›จ์–ด๋กœ ์ธ์ฆ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , Zod๋กœ ์š”์ฒญ ๊ฒ€์ฆ์„ ์ถ”๊ฐ€ํ•ด์ค˜"

React/Next.js CLAUDE.md ์˜ˆ์‹œ

markdown
# React/Next.js Project Guidelines

## ์ปดํฌ๋„ŒํŠธ ๊ทœ์น™
- ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋งŒ ์‚ฌ์šฉ
- Props๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ •์˜
- ์ปดํฌ๋„ŒํŠธ๋‹น ํ•˜๋‚˜์˜ ํŒŒ์ผ

## ์ƒํƒœ ๊ด€๋ฆฌ
- ๋กœ์ปฌ ์ƒํƒœ: useState
- ์„œ๋ฒ„ ์ƒํƒœ: React Query (TanStack Query)
- ์ „์—ญ ์ƒํƒœ: Zustand

## ํด๋” ๊ตฌ์กฐ

components/

โ”œโ”€โ”€ Button/

โ”‚ โ”œโ”€โ”€ Button.tsx

โ”‚ โ”œโ”€โ”€ Button.test.tsx

โ”‚ โ”œโ”€โ”€ Button.stories.tsx

โ”‚ โ””โ”€โ”€ index.ts


## ์„ฑ๋Šฅ ์ตœ์ ํ™”
- ์ด๋ฏธ์ง€๋Š” next/image ์‚ฌ์šฉ
- ๋™์  import๋กœ ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…
- Lighthouse ์ ์ˆ˜ 90+ ์œ ์ง€

5.2 Node.js/Express ๋ฐฑ์—”๋“œ

Node.js์™€ Express๋Š” JavaScript ์ƒํƒœ๊ณ„์—์„œ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฑ์—”๋“œ ๊ธฐ์ˆ  ์Šคํƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ๋น„๋™๊ธฐ ์•„ํ‚คํ…์ฒ˜์˜ ์žฅ์ ์„ ํ™œ์šฉํ•˜์—ฌ ๋†’์€ ์„ฑ๋Šฅ๊ณผ ํ™•์žฅ์„ฑ์„ ์ œ๊ณตํ•˜๋ฉฐ, Claude Code๋Š” ๊ฒฌ๊ณ ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ ๊ฐ€๋Šฅํ•œ ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์ถ•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

Express ์„œ๋ฒ„ ๊ตฌ์กฐํ™” - ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํŒจํ„ด

ํ™•์žฅ ๊ฐ€๋Šฅํ•œ Express ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•ด์„œ๋Š” ๊ณ„์ธตํ™”๋œ ์•„ํ‚คํ…์ฒ˜์™€ ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๊ฐ€ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. Claude Code๋Š” ์—…๊ณ„ ํ‘œ์ค€ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์„ ๋”ฐ๋ฅด๋Š” ์„œ๋ฒ„ ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

bash
# ๊ธฐ๋ณธ REST API ์„œ๋ฒ„
claude "Express.js๋กœ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ REST API ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค์–ด์ค˜.
๊ณ„์ธตํ™”๋œ ์•„ํ‚คํ…์ฒ˜(Controller-Service-Repository)๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ,
TypeScript, JWT ์ธ์ฆ, ์—๋Ÿฌ ํ•ธ๋“ค๋ง, ๋กœ๊น…์„ ํฌํ•จํ•ด์ค˜"

# ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํŒจํ„ด
claude "Express๋กœ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌํ˜„ํ•ด์ค˜.
- ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹  (HTTP/gRPC)
- API Gateway ํŒจํ„ด
- ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ์™€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ
- ๋ถ„์‚ฐ ๋กœ๊น…๊ณผ ํŠธ๋ ˆ์ด์‹ฑ
- Circuit Breaker ํŒจํ„ด"

# ๊ณ ์„ฑ๋Šฅ API ์„œ๋ฒ„
claude "๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๋Š” Express API๋ฅผ ๋งŒ๋“ค์–ด์ค˜.
- ํด๋Ÿฌ์Šคํ„ฐ๋ง๊ณผ ์›Œ์ปค ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ
- Redis๋ฅผ ํ™œ์šฉํ•œ ์„ธ์…˜๊ณผ ์บ์‹ฑ
- ์š”์ฒญ ์ œํ•œ๊ณผ DDoS ๋ฐฉ์–ด
- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜ ํ’€๋ง
- APM ๋ชจ๋‹ˆํ„ฐ๋ง ํ†ตํ•ฉ"

# GraphQL API ์„œ๋ฒ„
claude "Express์— GraphQL์„ ํ†ตํ•ฉํ•œ API ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค์–ด์ค˜.
- Apollo Server ์„ค์ •
- ์Šคํ‚ค๋งˆ stitching๊ณผ federation
- DataLoader๋ฅผ ํ™œ์šฉํ•œ N+1 ์ฟผ๋ฆฌ ๋ฐฉ์ง€
- ์ธ์ฆ๊ณผ ๊ถŒํ•œ ๋ถ€์—ฌ
- ์ฟผ๋ฆฌ ๋ณต์žก๋„ ์ œํ•œ"

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}}}%%
graph TD
    A[src/] --> B[controllers/]
    A --> C[services/]
    A --> D[repositories/]
    A --> E[models/]
    A --> F[middleware/]
    A --> G[routes/]
    A --> H[config/]
    A --> I[utils/]
    A --> J[types/]
    A --> K[tests/]
    A --> L[docs/]
    
    B -.-> |HTTP ์š”์ฒญ/์‘๋‹ต ์ฒ˜๋ฆฌ| B1[Request Handler]
    C -.-> |๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง| C1[Business Logic]
    D -.-> |๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ณ„์ธต| D1[Data Access]
    E -.-> |๋ฐ์ดํ„ฐ ๋ชจ๋ธ๊ณผ ์Šคํ‚ค๋งˆ| E1[Schema Definition]
    F -.-> |์ธ์ฆ, ๋กœ๊น…, ๊ฒ€์ฆ| F1[Middleware Functions]
    G -.-> |API ๋ผ์šฐํŠธ ์ •์˜| G1[Route Definitions]
    H -.-> |ํ™˜๊ฒฝ ์„ค์ •| H1[Configuration]
    I -.-> |๊ณตํ†ต ์œ ํ‹ธ๋ฆฌํ‹ฐ| I1[Utility Functions]
    J -.-> |TypeScript ํƒ€์ž… ์ •์˜| J1[Type Definitions]
    K -.-> |ํ…Œ์ŠคํŠธ ํŒŒ์ผ| K1[Test Suites]
    L -.-> |API ๋ฌธ์„œ| L1[Documentation]

๊ณ„์ธต๋ณ„ ์ฑ…์ž„ ๋ถ„๋ฆฌ

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}}}%%
graph LR
    A[Controllers] --> B[Services]
    B --> C[Repositories]
    C --> D[Models]
    
    A1[์š”์ฒญ/์‘๋‹ต ์ฒ˜๋ฆฌ] -.-> A
    B1[๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง] -.-> B
    C1[๋ฐ์ดํ„ฐ ์ ‘๊ทผ] -.-> C
    D1[๋ฐ์ดํ„ฐ ๋ชจ๋ธ] -.-> D
    
    E[Middlewares] -.-> A
    F[Utils] -.-> B
    G[Config] -.-> B
    H[Types] -.-> A
    H -.-> B
    H -.-> C

๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ ํŒจํ„ด

1. RESTful API ์„ค๊ณ„

bash
claude "์‚ฌ์šฉ์ž ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ RESTful API๋ฅผ ์„ค๊ณ„ํ•ด์ค˜.
CRUD ์ž‘์—…, ํŽ˜์ด์ง€๋„ค์ด์…˜, ํ•„ํ„ฐ๋ง, ์ •๋ ฌ์„ ์ง€์›ํ•˜๊ณ ,
OpenAPI(Swagger) ๋ฌธ์„œ๋„ ์ž๋™ ์ƒ์„ฑ๋˜๋„๋ก ํ•ด์ค˜"

2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ†ตํ•ฉ

bash
claude "Prisma ORM์„ ์‚ฌ์šฉํ•ด์„œ User, Post, Comment ๋ชจ๋ธ์„ ๋งŒ๋“ค์–ด์ค˜.
๊ด€๊ณ„ ์„ค์ •, ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜, ์‹œ๋“œ ๋ฐ์ดํ„ฐ๋„ ํฌํ•จํ•ด์ค˜"

3. ์ธ์ฆ/์ธ๊ฐ€ ๊ตฌํ˜„

bash
claude "JWT ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•ด์ค˜.
์•ก์„ธ์Šค ํ† ํฐ๊ณผ ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๊ณ ,
์—ญํ•  ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ์ œ์–ด(RBAC)๋„ ์ถ”๊ฐ€ํ•ด์ค˜"

๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜

bash
claude "์ด ๋ชจ๋†€๋ฆฌ์‹ ์•ฑ์„ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋ถ„ํ•ดํ•ด์ค˜.
User Service, Product Service, Order Service๋กœ ๋‚˜๋ˆ„๊ณ ,
API Gateway์™€ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹  ๋ฐฉ๋ฒ•๋„ ์„ค๊ณ„ํ•ด์ค˜"

Node.js/Express CLAUDE.md ์˜ˆ์‹œ

markdown
# Node.js/Express API Guidelines

## API ์„ค๊ณ„ ์›์น™
- RESTful ์›์น™ ์ค€์ˆ˜
- ์ผ๊ด€๋œ ์‘๋‹ต ํ˜•์‹
- ์ ์ ˆํ•œ HTTP ์ƒํƒœ ์ฝ”๋“œ ์‚ฌ์šฉ

## ์‘๋‹ต ํ˜•์‹
```json
{
  "success": true,
  "data": {},
  "message": "Success",
  "timestamp": "2024-01-01T00:00:00Z"
}

์—๋Ÿฌ ์ฒ˜๋ฆฌ

๋ณด์•ˆ


## 5.3 Python/Django ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

Django๋Š” "battery included" ์ฒ ํ•™์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” Python ์›น ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๊ฐ•๋ ฅํ•œ ORM, ๊ด€๋ฆฌ์ž ์ธํ„ฐํŽ˜์ด์Šค, ๊ทธ๋ฆฌ๊ณ  ๋ณด์•ˆ ๊ธฐ๋Šฅ์„ ๋‚ด์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Django REST Framework์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ๊ฒฌ๊ณ ํ•œ API ์„œ๋ฒ„๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Claude Code๋Š” Django์˜ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์ค€์ˆ˜ํ•˜๋Š” ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

### Django ํ”„๋กœ์ ํŠธ ์„ค์ •

Django ํ”„๋กœ์ ํŠธ์˜ ์„ฑ๊ณต์€ ์ดˆ๊ธฐ ์„ค์ •๊ณผ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„์—์„œ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. Claude Code๋Š” Django์˜ ์•ฑ ๊ธฐ๋ฐ˜ ๋ชจ๋“ˆํ™”์™€ ์„ค์ • ๊ด€๋ฆฌ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ๋”ฐ๋ฅด๋Š” ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

```bash
claude "Django REST Framework๋กœ ๋ธ”๋กœ๊ทธ API๋ฅผ ๋งŒ๋“ค์–ด์ค˜.
์‚ฌ์šฉ์ž ์ธ์ฆ, ํฌ์ŠคํŠธ CRUD, ๋Œ“๊ธ€, ํƒœ๊ทธ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๊ณ ,
ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์™€ API ๋ฌธ์„œํ™”๋„ ์„ค์ •ํ•ด์ค˜"

Django ๊ฐœ๋ฐœ ํŒจํ„ด

1. ๋ชจ๋ธ ์„ค๊ณ„

bash
claude "์ „์ž์ƒ๊ฑฐ๋ž˜๋ฅผ ์œ„ํ•œ Django ๋ชจ๋ธ์„ ์„ค๊ณ„ํ•ด์ค˜.
Product, Category, Order, User ๋ชจ๋ธ๊ณผ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜๊ณ ,
Admin ์ธํ„ฐํŽ˜์ด์Šค๋„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•ด์ค˜"

2. ViewSet๊ณผ Serializer

bash
claude "Product ๋ชจ๋ธ์— ๋Œ€ํ•œ ViewSet๊ณผ Serializer๋ฅผ ๋งŒ๋“ค์–ด์ค˜.
ํ•„ํ„ฐ๋ง, ๊ฒ€์ƒ‰, ์ •๋ ฌ์„ ์ง€์›ํ•˜๊ณ ,
์ค‘์ฒฉ๋œ ๊ด€๊ณ„๋„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ค˜"

3. ๋น„๋™๊ธฐ ํƒœ์Šคํฌ

bash
claude "Celery๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ด๋ฉ”์ผ ๋ฐœ์†ก๊ณผ 
์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ๋ฅผ ๋น„๋™๊ธฐ๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์„ค์ •ํ•ด์ค˜"

Python/Django CLAUDE.md ์˜ˆ์‹œ

markdown
# Django Project Guidelines

## ์•ฑ ๊ตฌ์กฐ
- ๊ธฐ๋Šฅ๋ณ„๋กœ ์•ฑ ๋ถ„๋ฆฌ
- ์•ฑ๋‹น ์ตœ๋Œ€ 10๊ฐœ ๋ชจ๋ธ
- ์ˆœํ™˜ ์˜์กด์„ฑ ๊ธˆ์ง€

## ๋ชจ๋ธ ์„ค๊ณ„
- ๋ชจ๋“  ๋ชจ๋ธ์— created_at, updated_at
- soft delete ์‚ฌ์šฉ (is_deleted ํ•„๋“œ)
- ๊ด€๊ณ„๋Š” ๋ช…์‹œ์ ์œผ๋กœ ์ •์˜

## API ์„ค๊ณ„
- ViewSet ์‚ฌ์šฉ ๊ถŒ์žฅ
- ์ปค์Šคํ…€ ์•ก์…˜์€ @action ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ
- ํŽ˜์ด์ง€๋„ค์ด์…˜ ๊ธฐ๋ณธ 20๊ฐœ

## ํ…Œ์ŠคํŠธ
- ๋ชจ๋ธ, ๋ทฐ, ์‹œ๋ฆฌ์–ผ๋ผ์ด์ € ๊ฐ๊ฐ ํ…Œ์ŠคํŠธ
- Factory Boy๋กœ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
- ์ปค๋ฒ„๋ฆฌ์ง€ 80% ์ด์ƒ

[S2ST2] ํ”„๋ ˆ์ž„์›Œํฌ โ€” ๋ชจ๋ฐ”์ผ, ๋ฐ์ดํ„ฐ๊ณผํ•™, ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

5.4 ๋ชจ๋ฐ”์ผ ์•ฑ ๊ฐœ๋ฐœ (React Native/Flutter)

๋ชจ๋ฐ”์ผ ์•ฑ ๊ฐœ๋ฐœ ์˜์—ญ์—์„œ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์†”๋ฃจ์…˜์€ ๊ฐœ๋ฐœ ํšจ์œจ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. React Native๋Š” JavaScript์™€ React ์ง€์‹์„ ํ™œ์šฉํ•œ ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ ๊ฐœ๋ฐœ์„, Flutter๋Š” Dart ์–ธ์–ด๋ฅผ ํ†ตํ•œ ๊ณ ์„ฑ๋Šฅ UI ๊ตฌํ˜„์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. Claude Code๋Š” ๊ฐ ํ”Œ๋žซํผ์˜ ํŠน์„ฑ์„ ์ดํ•ดํ•˜๊ณ  ํ”Œ๋žซํผ๋ณ„ ์ตœ์ ํ™”๋œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

React Native ํ”„๋กœ์ ํŠธ

React Native๋Š” React์˜ ์ปดํฌ๋„ŒํŠธ ๋ชจ๋ธ์„ ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์— ์ ์šฉํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ์›น ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„ ํ™œ์šฉํ•˜์—ฌ ๋„ค์ดํ‹ฐ๋ธŒ ๋ชจ๋ฐ”์ผ ์•ฑ์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

bash
claude "Expo๋กœ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋ชจ๋ฐ”์ผ ์•ฑ์„ ๋งŒ๋“ค์–ด์ค˜.
๋„ค๋น„๊ฒŒ์ด์…˜, ์ƒํƒœ ๊ด€๋ฆฌ, ๋„ค์ดํ‹ฐ๋ธŒ ๊ธฐ๋Šฅ ์ ‘๊ทผ์„ ์„ค์ •ํ•˜๊ณ ,
iOS์™€ Android ์Šคํƒ€์ผ ์ฐจ์ด๋„ ์ฒ˜๋ฆฌํ•ด์ค˜"

React Native ๊ฐœ๋ฐœ ํŒจํ„ด

1. ๋„ค๋น„๊ฒŒ์ด์…˜ ๊ตฌ์กฐ

bash
claude "React Navigation์œผ๋กœ ๋ณต์žกํ•œ ๋„ค๋น„๊ฒŒ์ด์…˜์„ ๊ตฌํ˜„ํ•ด์ค˜.
Tab Navigator, Stack Navigator, Drawer๋ฅผ ์กฐํ•ฉํ•˜๊ณ ,
๋”ฅ๋งํ‚น๋„ ์„ค์ •ํ•ด์ค˜"

2. ๋„ค์ดํ‹ฐ๋ธŒ ๋ชจ๋“ˆ ํ†ตํ•ฉ

bash
claude "์นด๋ฉ”๋ผ์™€ ์œ„์น˜ ์ •๋ณด์— ์ ‘๊ทผํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด์ค˜.
๊ถŒํ•œ ์š”์ฒญ ์ฒ˜๋ฆฌ์™€ ์—๋Ÿฌ ํ•ธ๋“ค๋ง๋„ ํฌํ•จํ•ด์ค˜"

Flutter ํ”„๋กœ์ ํŠธ

bash
claude "Flutter๋กœ Material Design ์•ฑ์„ ๋งŒ๋“ค์–ด์ค˜.
๋‹ค๊ตญ์–ด ์ง€์›, ๋‹คํฌ ๋ชจ๋“œ, ๋ฐ˜์‘ํ˜• ๋ ˆ์ด์•„์›ƒ์„ ํฌํ•จํ•˜๊ณ ,
Clean Architecture ํŒจํ„ด์„ ์ ์šฉํ•ด์ค˜"

๋ชจ๋ฐ”์ผ ์•ฑ CLAUDE.md ์˜ˆ์‹œ

markdown
# Mobile App Guidelines

## ์•„ํ‚คํ…์ฒ˜
- MVVM ํŒจํ„ด ์‚ฌ์šฉ
- ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์€ ViewModel์—
- View๋Š” ์ƒํƒœ๋งŒ ํ‘œ์‹œ

## ์„ฑ๋Šฅ
- ๋ฆฌ์ŠคํŠธ๋Š” ๊ฐ€์ƒํ™” ํ•„์ˆ˜
- ์ด๋ฏธ์ง€ ์ตœ์ ํ™” ๋ฐ ์บ์‹ฑ
- ์• ๋‹ˆ๋ฉ”์ด์…˜ 60fps ์œ ์ง€

## ํ”Œ๋žซํผ๋ณ„ ์ฒ˜๋ฆฌ
```javascript
Platform.select({
  ios: { /* iOS ์Šคํƒ€์ผ */ },
  android: { /* Android ์Šคํƒ€์ผ */ }
})

ํ…Œ์ŠคํŠธ


## 5.5 ๋ฐ์ดํ„ฐ ๊ณผํ•™ ํ”„๋กœ์ ํŠธ - MLOps ํ†ตํ•ฉ

๋ฐ์ดํ„ฐ ๊ณผํ•™๊ณผ ๋จธ์‹ ๋Ÿฌ๋‹ ๋ถ„์•ผ๋Š” ํƒ์ƒ‰์  ๋ถ„์„์—์„œ ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ๊นŒ์ง€ ๋‹ค์–‘ํ•œ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜๋Š” ๋ณต์žกํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Claude Code๋Š” ๋ฐ์ดํ„ฐ ๊ณผํ•™์ž๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์š” ๋„๊ตฌ๋“ค๊ณผ ํ˜„๋Œ€์ ์ธ MLOps ํŒŒ์ดํ”„๋ผ์ธ์„ ์ดํ•ดํ•˜์—ฌ, ์‹คํ—˜๋ถ€ํ„ฐ ๋ฐฐํฌ๊นŒ์ง€ ์ „์ฒด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

### ํ˜„๋Œ€์  ๋ฐ์ดํ„ฐ ๊ณผํ•™ ์Šคํƒ

๋ฐ์ดํ„ฐ ๊ณผํ•™ ํ”„๋กœ์ ํŠธ์˜ ์„ฑ๊ณต์„ ์œ„ํ•ด์„œ๋Š” ๋‹จ์ˆœํ•œ ๋ถ„์„ ๋„๊ตฌ๋ฅผ ๋„˜์–ด์„œ ์žฌํ˜„ ๊ฐ€๋Šฅํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ MLOps ํŒŒ์ดํ”„๋ผ์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

```mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}}}%%
graph TB
    subgraph "๋ฐ์ดํ„ฐ ์ˆ˜์ง‘"
        A1[Raw Data] --> A2[Data Pipeline]
        A2 --> A3[Clean Data]
    end
    
    subgraph "์‹คํ—˜ ๋ฐ ๊ฐœ๋ฐœ"
        B1[Jupyter Notebooks] --> B2[Feature Engineering]
        B2 --> B3[Model Training]
        B3 --> B4[Experiment Tracking]
    end
    
    subgraph "๋ชจ๋ธ ์šด์˜"
        C1[Model Registry] --> C2[API Serving]
        C2 --> C3[Monitoring]
        C3 --> C4[Retraining]
        C4 --> C1
    end
    
    A3 --> B1
    B4 --> C1
    C3 --> A2

Jupyter Notebook ํ™˜๊ฒฝ

Jupyter Notebook์€ ๋ฐ์ดํ„ฐ ๊ณผํ•™ ํ”„๋กœ์ ํŠธ์˜ ํ•ต์‹ฌ ๋„๊ตฌ๋กœ, ์ฝ”๋“œ, ์‹œ๊ฐํ™”, ๋ฌธ์„œ๋ฅผ ํ•˜๋‚˜์˜ ํ™˜๊ฒฝ์—์„œ ํ†ตํ•ฉ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. Claude Code๋Š” ์žฌํ˜„ ๊ฐ€๋Šฅํ•˜๊ณ  ์ฒด๊ณ„์ ์ธ ๋ถ„์„ ํ™˜๊ฒฝ ๊ตฌ์ถ•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

bash
claude "๋จธ์‹ ๋Ÿฌ๋‹ ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•œ Jupyter ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ด์ค˜.
๋ฐ์ดํ„ฐ ๋ถ„์„, ์‹œ๊ฐํ™”, ๋ชจ๋ธ ํ•™์Šต ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•˜๊ณ ,
์‹คํ—˜ ์ถ”์ ๋„ ์„ค์ •ํ•ด์ค˜"

๋ฐ์ดํ„ฐ ๋ถ„์„ ์›Œํฌํ”Œ๋กœ์šฐ - ์‚ฐ์—… ํ‘œ์ค€ ์ ‘๊ทผ

1. ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ ํŒŒ์ดํ”„๋ผ์ธ

bash
# ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ
claude "์ด CSV ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์ „์ฒ˜๋ฆฌํ•ด์ค˜.
๊ฒฐ์ธก์น˜ ์ฒ˜๋ฆฌ, ์ด์ƒ์น˜ ํƒ์ง€, ํŠน์„ฑ ์—”์ง€๋‹ˆ์–ด๋ง์„ ์ˆ˜ํ–‰ํ•˜๊ณ ,
๊ฐ ๋‹จ๊ณ„๋ฅผ ์‹œ๊ฐํ™”ํ•ด์ค˜"

# ๊ณ ๊ธ‰ ํŠน์„ฑ ์—”์ง€๋‹ˆ์–ด๋ง
claude "์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ์˜ ํŠน์„ฑ ์—”์ง€๋‹ˆ์–ด๋ง์„ ๊ตฌํ˜„ํ•ด์ค˜.
- ์‹œ๊ฐ„ ๊ธฐ๋ฐ˜ ํŠน์„ฑ ์ƒ์„ฑ (lag, rolling window)
- ๊ณ„์ ˆ์„ฑ๊ณผ ํŠธ๋ Œ๋“œ ๋ถ„ํ•ด
- Fourier ๋ณ€ํ™˜์„ ํ†ตํ•œ ์ฃผ๊ธฐ ํŠน์„ฑ
- ์Šค์ผ€์ผ๋ง๊ณผ ์ •๊ทœํ™” ํŒŒ์ดํ”„๋ผ์ธ
- ๋ฒ”์ฃผํ˜• ๋ณ€์ˆ˜ ์ธ์ฝ”๋”ฉ ์ „๋žต"

# ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ
claude "Dask๋ฅผ ํ™œ์šฉํ•œ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ๋งŒ๋“ค์–ด์ค˜.
- ์ฒญํฌ ๋‹จ์œ„ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ
- ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ
- ๋ถ„์‚ฐ ์ปดํ“จํŒ… ํ™˜๊ฒฝ ์„ค์ •
- ์ง„ํ–‰ ์ƒํ™ฉ ๋ชจ๋‹ˆํ„ฐ๋ง"

2. ๋ชจ๋ธ ๊ฐœ๋ฐœ๊ณผ ์‹คํ—˜ ๊ด€๋ฆฌ

bash
# AutoML๊ณผ ๋ชจ๋ธ ๋น„๊ต
claude "์—ฌ๋Ÿฌ ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ๋น„๊ต ํ‰๊ฐ€ํ•ด์ค˜.
๊ต์ฐจ ๊ฒ€์ฆ, ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹์„ ์ˆ˜ํ–‰ํ•˜๊ณ ,
๊ฒฐ๊ณผ๋ฅผ ํ‘œ๋กœ ์ •๋ฆฌํ•ด์ค˜"

# ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ ๊ฐœ๋ฐœ
claude "PyTorch๋กœ ์ด๋ฏธ์ง€ ๋ถ„๋ฅ˜ ๋ชจ๋ธ์„ ๊ตฌํ˜„ํ•ด์ค˜.
- ์ „์ดํ•™์Šต (Transfer Learning) ํ™œ์šฉ
- ๋ฐ์ดํ„ฐ ์ฆ๊ฐ•๊ณผ ์ •๊ทœํ™”
- ํ•™์Šต๋ฅ  ์Šค์ผ€์ค„๋ง๊ณผ ์กฐ๊ธฐ ์ข…๋ฃŒ
- ๋ชจ๋ธ ์ฒดํฌํฌ์ธํŠธ์™€ ์žฌ๊ฐœ ๊ธฐ๋Šฅ
- TensorBoard ์‹œ๊ฐํ™”"

# MLflow ์‹คํ—˜ ์ถ”์ 
claude "MLflow๋ฅผ ํ™œ์šฉํ•œ ์‹คํ—˜ ์ถ”์  ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•ด์ค˜.
- ๋ชจ๋ธ ๋ฉ”ํŠธ๋ฆญ๊ณผ ํŒŒ๋ผ๋ฏธํ„ฐ ๋กœ๊น…
- ์•„ํ‹ฐํŒฉํŠธ ๋ฒ„์ „ ๊ด€๋ฆฌ
- ๋ชจ๋ธ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์„ค์ •
- A/B ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ
- ์‹คํ—˜ ๋น„๊ต ๋Œ€์‹œ๋ณด๋“œ"

3. ๋ชจ๋ธ ๋ฐฐํฌ์™€ ์šด์˜

bash
# API ์„œ๋น™
claude "ํ•™์Šต๋œ ๋ชจ๋ธ์„ FastAPI๋กœ ์„œ๋น™ํ•˜๋Š” API๋ฅผ ๋งŒ๋“ค์–ด์ค˜.
์ž…๋ ฅ ๊ฒ€์ฆ, ์˜ˆ์ธก, ๋ชจ๋‹ˆํ„ฐ๋ง ๊ธฐ๋Šฅ์„ ํฌํ•จํ•ด์ค˜"

# ์‹ค์‹œ๊ฐ„ ์˜ˆ์ธก ์‹œ์Šคํ…œ
claude "Kafka์™€ Redis๋ฅผ ํ™œ์šฉํ•œ ์‹ค์‹œ๊ฐ„ ML ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•ด์ค˜.
- ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ
- ์‹ค์‹œ๊ฐ„ ํŠน์„ฑ ์ €์žฅ์†Œ
- ๋ฐฐ์น˜์™€ ์˜จ๋ผ์ธ ์˜ˆ์ธก ํ†ตํ•ฉ
- ๋ชจ๋ธ ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง
- ์ž๋™ ์žฌํ•™์Šต ํŠธ๋ฆฌ๊ฑฐ"

# ์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ
claude "Docker์™€ Kubernetes๋กœ ML ๋ชจ๋ธ์„ ๋ฐฐํฌํ•ด์ค˜.
- ๋ฉ€ํ‹ฐ ์Šคํ…Œ์ด์ง€ Docker ๋นŒ๋“œ
- GPU ์ง€์› ์ปจํ…Œ์ด๋„ˆ
- ์˜คํ† ์Šค์ผ€์ผ๋ง ์„ค์ •
- ํ—ฌ์Šค์ฒดํฌ์™€ ๋กœ๊ทธ ์ˆ˜์ง‘
- CI/CD ํŒŒ์ดํ”„๋ผ์ธ ํ†ตํ•ฉ"

# ๋ชจ๋ธ ๋ชจ๋‹ˆํ„ฐ๋ง
claude "ํ”„๋กœ๋•์…˜ ML ๋ชจ๋ธ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•ด์ค˜.
- ๋ฐ์ดํ„ฐ ๋“œ๋ฆฌํ”„ํŠธ ํƒ์ง€
- ๋ชจ๋ธ ์„ฑ๋Šฅ ์ €ํ•˜ ์•Œ๋ฆผ
- ํŽธํ–ฅ์„ฑ ๋ชจ๋‹ˆํ„ฐ๋ง
- ์„ค๋ช… ๊ฐ€๋Šฅํ•œ AI ๋Œ€์‹œ๋ณด๋“œ
- ์‚ฌ๊ณ  ๋Œ€์‘ ํ”Œ๋ ˆ์ด๋ถ"

๋ฐ์ดํ„ฐ ๊ณผํ•™ CLAUDE.md ์˜ˆ์‹œ

ํ˜„๋Œ€์ ์ธ ๋ฐ์ดํ„ฐ ๊ณผํ•™ ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•œ ํฌ๊ด„์ ์ธ ๊ฐ€์ด๋“œ๋ผ์ธ

markdown
# Data Science Project Guidelines

## ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

project/

โ”œโ”€โ”€ data/ # ์›๋ณธ ๋ฐ์ดํ„ฐ

โ”œโ”€โ”€ notebooks/ # ์‹คํ—˜ ๋…ธํŠธ๋ถ

โ”œโ”€โ”€ src/ # ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ

โ”œโ”€โ”€ models/ # ํ•™์Šต๋œ ๋ชจ๋ธ

โ””โ”€โ”€ reports/ # ๋ถ„์„ ๊ฒฐ๊ณผ


## ์ฝ”๋”ฉ ๊ทœ์น™
- ๋…ธํŠธ๋ถ์€ ์‹คํ—˜์šฉ, ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ๋Š” .py๋กœ
- ๋ชจ๋“  ์‹คํ—˜์€ ์ถ”์  ๊ฐ€๋Šฅํ•˜๊ฒŒ
- ์žฌํ˜„ ๊ฐ€๋Šฅ์„ฑ ๋ณด์žฅ (์‹œ๋“œ ๊ณ ์ •)

## ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ
- ์›๋ณธ ๋ฐ์ดํ„ฐ๋Š” ์ˆ˜์ •ํ•˜์ง€ ์•Š์Œ
- ์ „์ฒ˜๋ฆฌ ํŒŒ์ดํ”„๋ผ์ธ ๋ฌธ์„œํ™”
- ๋ฐ์ดํ„ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ

## ๋ชจ๋ธ ๊ด€๋ฆฌ
- MLflow๋กœ ์‹คํ—˜ ์ถ”์ 
- ๋ชจ๋ธ ๋ฒ„์ „ ๊ด€๋ฆฌ
- A/B ํ…Œ์ŠคํŠธ ์ง€์›

ํ”„๋ ˆ์ž„์›Œํฌ ๋…๋ฆฝ์ ์ธ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค

ํ”„๋ ˆ์ž„์›Œํฌ๋ณ„ ํŠนํ™”๋œ ์ ‘๊ทผ ๋ฐฉ์‹ ์™ธ์—๋„, ๋ชจ๋“  ํ”„๋ ˆ์ž„์›Œํฌ์— ๊ณตํ†ต์ ์œผ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ•ต์‹ฌ ์›์น™๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์›์น™๋“ค์„ ์ดํ•ดํ•˜๊ณ  ์ ์šฉํ•˜๋ฉด ์–ด๋–ค ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋“  ์ผ๊ด€๋œ ํ’ˆ์งˆ์˜ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1. ์ดˆ๊ธฐ ํƒ์ƒ‰ ์ „๋žต

์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋‚˜ ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•  ๋•Œ๋Š” ์ฒด๊ณ„์ ์ธ ํƒ์ƒ‰๊ณผ ์ดํ•ด๊ฐ€ ์„ฑ๊ณต์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. Claude Code๋Š” ํ”„๋กœ์ ํŠธ์˜ ์ „์ฒด์ ์ธ ๊ตฌ์กฐ์™€ ๋งฅ๋ฝ์„ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

bash
# ์ƒˆ ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ ์‹œ
claude "์ด ํ”„๋กœ์ ํŠธ์˜ ๊ตฌ์กฐ์™€ ์‚ฌ์šฉ๋œ ๊ธฐ์ˆ  ์Šคํƒ์„ ๋ถ„์„ํ•ด์ค˜.
์ฃผ์š” ํŒŒ์ผ๋“ค์˜ ์—ญํ• ๊ณผ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์„ค๋ช…ํ•ด์ค˜"

2. ์ ์ง„์  ๊ฐœ์„ 

bash
# ๊ธฐ์กด ์ฝ”๋“œ ๊ฐœ์„ 
claude "์ด ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•ด์ค˜. 
๋จผ์ € ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ด์„œ ๋™์ž‘์„ ๋ณด์žฅํ•œ ํ›„,
๋‹จ๊ณ„๋ณ„๋กœ ๊ฐœ์„ ํ•ด์ค˜"

3. ๋ฌธ์„œํ™” ์ž๋™ํ™”

bash
# ๋ฌธ์„œ ์ƒ์„ฑ
claude "ํ”„๋กœ์ ํŠธ์˜ README.md๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์ค˜.
์„ค์น˜ ๋ฐฉ๋ฒ•, ์‚ฌ์šฉ๋ฒ•, API ๋ฌธ์„œ, ๊ธฐ์—ฌ ๊ฐ€์ด๋“œ๋ฅผ ํฌํ•จํ•ด์ค˜"

4. ์„ฑ๋Šฅ ํ”„๋กœํŒŒ์ผ๋ง

bash
# ์„ฑ๋Šฅ ๋ถ„์„
claude "์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์„ ํ”„๋กœํŒŒ์ผ๋งํ•˜๊ณ ,
๋ณ‘๋ชฉ ์ง€์ ์„ ์ฐพ์•„์„œ ์ตœ์ ํ™” ๋ฐฉ์•ˆ์„ ์ œ์‹œํ•ด์ค˜"

์‹ค์ „ ํŒ: ํ”„๋ ˆ์ž„์›Œํฌ ์ „ํ™˜๊ณผ ํ˜„๋Œ€ํ™”

ํ”„๋ ˆ์ž„์›Œํฌ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์€ ๊ธฐ์ˆ  ๋ถ€์ฑ„ ํ•ด๊ฒฐ๊ณผ ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ์œ„ํ•œ ์ค‘์š”ํ•œ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. Claude Code๋Š” ์ฒด๊ณ„์ ์ด๊ณ  ์œ„ํ—˜์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ „๋žต์„ ์ˆ˜๋ฆฝํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ ํ˜„๋Œ€ํ™” ์ „๋žต

๊ธฐ์กด ์‹œ์Šคํ…œ์„ ํ˜„๋Œ€์ ์ธ ์•„ํ‚คํ…์ฒ˜๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ๋‹จ์ˆœํ•œ ์ฝ”๋“œ ๋ณ€ํ™˜์„ ๋„˜์–ด์„œ ์ „์ฒด์ ์ธ ์‹œ์Šคํ…œ ์žฌ์„ค๊ณ„๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ „๋žต ์ˆ˜๋ฆฝ - ์‹ค์ „ ์‚ฌ๋ก€

๊ธฐ์กด ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•  ๋•Œ๋Š” ๋‹จ๊ณ„์ ์ด๊ณ  ์ ์ง„์ ์ธ ์ ‘๊ทผ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}}}%%
graph TD
    A[ํ˜„์žฌ ์‹œ์Šคํ…œ ๋ถ„์„] --> B[๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ณ„ํš ์ˆ˜๋ฆฝ]
    B --> C[ํŒŒ์ผ๋Ÿฟ ํ”„๋กœ์ ํŠธ]
    C --> D{์„ฑ๊ณต ์—ฌ๋ถ€}
    D -->|์„ฑ๊ณต| E[๋‹จ๊ณ„๋ณ„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜]
    D -->|์‹คํŒจ| F[๊ณ„ํš ์ˆ˜์ •]
    F --> C
    E --> G[์„ฑ๋Šฅ ๊ฒ€์ฆ]
    G --> H{๋ชฉํ‘œ ๋‹ฌ์„ฑ}
    H -->|์•„๋‹ˆ์˜ค| I[์ตœ์ ํ™”]
    I --> G
    H -->|์˜ˆ| J[์ „์ฒด ์‹œ์Šคํ…œ ์ „ํ™˜]
    J --> K[๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์œ ์ง€๋ณด์ˆ˜]
    
    style A fill:#e2e8f0
    style J fill:#dcfce7
    style K fill:#dcfce7
bash
# 1. ์˜์กด์„ฑ ๋ฐ ์•„ํ‚คํ…์ฒ˜ ๋ถ„์„
claude "์ด Express ์•ฑ์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ๊ณผ ๊ตฌ์กฐ๋ฅผ ๋ถ„์„ํ•ด์ค˜.
- ์˜์กด์„ฑ ํŠธ๋ฆฌ์™€ ์ˆœํ™˜ ์ฐธ์กฐ ํ™•์ธ
- ๋น„์ฆˆ๋‹ˆ์Šค ํฌ๋ฆฌํ‹ฐ์ปฌ ๋ชจ๋“ˆ ์‹๋ณ„
- ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€ ํ‰๊ฐ€
- ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ์ง€์  ํŒŒ์•…"

# 2. ์ƒ์„ธํ•œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋กœ๋“œ๋งต
claude "์ด ์•ฑ์„ Fastify๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๊ณ„ํš์„ ์„ธ์›Œ์ค˜.
- Strangler Fig ํŒจํ„ด ์ ์šฉ
- ๋‹จ๊ณ„๋ณ„ ๋กค๋ฐฑ ๊ณ„ํš
- ์„ฑ๋Šฅ ๋ฒค์น˜๋งˆํฌ ์„ค์ •
- ํŒ€ ๊ต์œก ์ผ์ • ํฌํ•จ
- ๋ฆฌ์Šคํฌ ํ‰๊ฐ€์™€ ์™„ํ™” ์ „๋žต"

# 3. ์ ์ง„์  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์‹คํ–‰
claude "์ธ์ฆ ๋ชจ๋“ˆ๋ถ€ํ„ฐ Fastify๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ด์ค˜.
- ํŠธ๋ž˜ํ”ฝ ์Šคํ”Œ๋ฆฌํŒ… ๊ตฌํ˜„
- ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ์•Œ๋ฆผ ์„ค์ •
- ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ๋ณด์žฅ
- ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ
- ์„ฑ๋Šฅ ํšŒ๊ท€ ๊ฐ์ง€"

# 4. ๋ณต์žกํ•œ ํ”„๋ก ํŠธ์—”๋“œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
claude "React ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•จ์ˆ˜ํ˜•์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ด์ค˜.
- ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ํ›…์œผ๋กœ ๋ณ€ํ™˜
- ์ƒํƒœ ๊ด€๋ฆฌ ํ˜„๋Œ€ํ™”
- ์ฝ”๋“œ ๋ถ„ํ• ๊ณผ ์ง€์—ฐ ๋กœ๋”ฉ ์ ์šฉ
- TypeScript ํƒ€์ž… ์•ˆ์ „์„ฑ ๊ฐ•ํ™”
- ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ธฐํšŒ ์‹๋ณ„"

# 5. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
claude "MySQL์—์„œ PostgreSQL๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ณ„ํš์„ ์„ธ์›Œ์ค˜.
- ์Šคํ‚ค๋งˆ ๋ณ€ํ™˜๊ณผ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋งคํ•‘
- ๋ฌด์ค‘๋‹จ ๋ฐ์ดํ„ฐ ์ด์ „ ์ „๋žต
- ์ฟผ๋ฆฌ ์ตœ์ ํ™”์™€ ์„ฑ๋Šฅ ํŠœ๋‹
- ๋ฐฑ์—…๊ณผ ๋ณต๊ตฌ ์ ˆ์ฐจ
- ๊ฒ€์ฆ๊ณผ ํ…Œ์ŠคํŠธ ๊ณ„ํš"

ํ”„๋ ˆ์ž„์›Œํฌ๋ณ„ ์„ฑ๊ณต ์ง€ํ‘œ

๊ฐ ํ”„๋ ˆ์ž„์›Œํฌ ์ „ํ™˜ ํ”„๋กœ์ ํŠธ์˜ ์„ฑ๊ณต์„ ์ธก์ •ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์ฒด์ ์ธ KPI๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

bash
# ์„ฑ๋Šฅ ์ง€ํ‘œ ๋ชจ๋‹ˆํ„ฐ๋ง
claude "๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ „ํ›„ ์„ฑ๋Šฅ ๋น„๊ต ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“ค์–ด์ค˜.
- ์‘๋‹ต ์‹œ๊ฐ„๊ณผ ์ฒ˜๋ฆฌ๋Ÿ‰ ๋น„๊ต
- ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๊ณผ CPU ํšจ์œจ์„ฑ
- ๋ฒˆ๋“ค ํฌ๊ธฐ์™€ ๋กœ๋”ฉ ์‹œ๊ฐ„
- ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๋ฉ”ํŠธ๋ฆญ (LCP, FID, CLS)
- ๊ฐœ๋ฐœ์ž ์ƒ์‚ฐ์„ฑ ์ง€ํ‘œ"

# ํ’ˆ์งˆ ์ง€ํ‘œ ์ถ”์ 
claude "์ฝ”๋“œ ํ’ˆ์งˆ ๊ฐœ์„  ์‚ฌํ•ญ์„ ์ถ”์ ํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•ด์ค˜.
- ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€ ๋ณ€ํ™”
- ์ฝ”๋“œ ๋ณต์žก๋„ ๊ฐ์†Œ
- ๋ณด์•ˆ ์ทจ์•ฝ์  ํ•ด๊ฒฐ
- ๊ธฐ์ˆ  ๋ถ€์ฑ„ ๊ฐ์†Œ
- ํŒ€ ๋งŒ์กฑ๋„ ์กฐ์‚ฌ"

๋งˆ์น˜๋ฉฐ

ํ”„๋ ˆ์ž„์›Œํฌ๋ณ„ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค๋ฅผ ์ˆ™์ง€ํ•˜๋Š” ๊ฒƒ์€ Claude Code๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉํ•˜๋Š” ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. ๊ฐ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ณ ์œ ํ•œ ์ฒ ํ•™๊ณผ ์„ค๊ณ„ ์›์น™์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ์ดํ•ดํ•˜๊ณ  ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์„ฑ๊ณต์ ์ธ ๊ฐœ๋ฐœ์˜ ๊ธฐ๋ฐ˜์ด ๋ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์„ฑ๊ณต ์š”์†Œ

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}}}%%
mindmap
  root((ํ”„๋ ˆ์ž„์›Œํฌ ์„ฑ๊ณต ์š”์†Œ))
    ์ƒํƒœ๊ณ„ ์ดํ•ด
      ์ฒ ํ•™๊ณผ ์›์น™
        ํ•ต์‹ฌ ๊ฐœ๋… ์ˆ™์ง€
        ์„ค๊ณ„ ์›์น™ ์ค€์ˆ˜
      ๊ด€์šฉ๊ตฌ์™€ ํŒจํ„ด
        ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ชจ๋ฒ” ์‚ฌ๋ก€
        ๊ฒ€์ฆ๋œ ๊ด€๋ก€ ์ ์šฉ
      ๋„๊ตฌ ์ฒด์ธ
        ์ „์šฉ ๋„๊ตฌ ํ™œ์šฉ
        ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ƒํƒœ๊ณ„
    ์‹ค์ „ ์ ์šฉ
      ์ ์ง„์  ๋„์ž…
        ๋‹จ๊ณ„์  ์ ‘๊ทผ
        ๋ฆฌ์Šคํฌ ์ตœ์†Œํ™”
      ์„ฑ๋Šฅ ์ค‘์‹ฌ
        ์ตœ์ ํ™” ์ „๋žต
        ๋ฒค์น˜๋งˆํ‚น
      ํŒ€ ๊ต์œก
        ์ฒด๊ณ„์  ํ•™์Šต
        ์ง€์‹ ๊ณต์œ 
    ์ง€์†์  ๊ฐœ์„ 
      ๋ชจ๋‹ˆํ„ฐ๋ง
        ์ •๋Ÿ‰์  ์ธก์ •
        ์„ฑ๊ณผ ์ถ”์ 
      ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„
        ํ”„๋กœ์„ธ์Šค ๊ฐœ์„ 
        ํŒ€ ์˜๊ฒฌ ์ˆ˜๋ ด
      ์ตœ์‹  ๋™ํ–ฅ
        ์—…๋ฐ์ดํŠธ ์ถ”์ 
        ์‹ ๊ธฐ๋Šฅ ํ•™์Šต

์‹ค๋ฌด ์ฒดํฌ๋ฆฌ์ŠคํŠธ

ํ”„๋กœ์ ํŠธ ์‹œ์ž‘

๊ฐœ๋ฐœ ๊ณผ์ •

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ”„๋กœ์ ํŠธ

Claude Code์˜ ์ง„์ •ํ•œ ๊ฐ€์น˜๋Š” ๋‹จ์ˆœํžˆ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๊ฐ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ฒ ํ•™๊ณผ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ํŒ€ ์ „์ฒด๊ฐ€ ์ผ๊ด€๋˜๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ๋ฐ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ ํ’ˆ์งˆ์˜ ํ‘œ์ค€ํ™”์™€ ํŒ€ ์ƒ์‚ฐ์„ฑ์˜ ๊ทน๋Œ€ํ™”๋ฅผ ๋™์‹œ์— ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ์žฅ์—์„œ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ณ„๋กœ Claude Code๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ์ „๋žต์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์–ธ์–ด์˜ ๊ณ ์œ ํ•œ ํŠน์„ฑ๊ณผ ์ƒํƒœ๊ณ„๋ฅผ ์ดํ•ดํ•˜์—ฌ ๋”์šฑ ํšจ๊ณผ์ ์ธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํƒ๊ตฌํ•ด๋ด…์‹œ๋‹ค.

[S2ST3] ์–ธ์–ด ์ „๋žต โ€” TypeScript/JavaScript, Python

์ œ6์žฅ: ์–ธ์–ด๋ณ„ ํ™œ์šฉ ์ „๋žต

"์–ธ์–ด๋Š” ์‚ฌ๊ณ ๋ฅผ ํ˜•์„ฑํ•œ๋‹ค" - ๋ฒค์ž๋ฏผ ๋ฆฌ ์›Œํ”„
mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}, "flowchart": {"htmlLabels": false, "useMaxWidth": false}}}%%
mindmap
  root((ํ•™์Šต ๋ชฉํ‘œ))
    ์ „๋žต ์ˆ˜๋ฆฝ
      ์–ธ์–ด๋ณ„ ์ตœ์ ํ™” ์ „๋žต
      ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์„ฑ
      ๋„๊ตฌ ์ฒด์ธ ์„ ํƒ
    ํƒ€์ž… ์‹œ์Šคํ…œ ํ™œ์šฉ
      ํƒ€์ž… ์•ˆ์ „์„ฑ ๋ณด์žฅ
      ์ •์  ๋ถ„์„ ๋„๊ตฌ
      ๋Ÿฐํƒ€์ž„ ๊ฒ€์ฆ
    ๋ฉ€ํ‹ฐ ์–ธ์–ด ํ”„๋กœ์ ํŠธ
      ์–ธ์–ด ๊ฐ„ ์ƒํ˜ธ ์šด์šฉ์„ฑ
      API ์ธํ„ฐํŽ˜์ด์Šค ์„ค๊ณ„
      ํƒ€์ž… ๊ณต์œ  ์ „๋žต
    ์–ธ์–ด ์„ ํƒ ๊ฐ€์ด๋“œ
      ์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„
      ์„ฑ๋Šฅ vs ์ƒ์‚ฐ์„ฑ
      ํŒ€ ์—ญ๋Ÿ‰ ๊ณ ๋ ค

ํ•™์Šต ๋ชฉํ‘œ

์ด ์žฅ์„ ์™„๋ฃŒํ•˜๋ฉด ๋‹ค์Œ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ์š”

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ๋‹จ์ˆœํ•œ ๋„๊ตฌ๋ฅผ ๋„˜์–ด์„œ ๊ฐœ๋ฐœ์ž์˜ ์‚ฌ๊ณ  ๋ฐฉ์‹๊ณผ ๋ฌธ์ œ ํ•ด๊ฒฐ ์ ‘๊ทผ๋ฒ•์„ ํ˜•์„ฑํ•˜๋Š” ์ค‘์š”ํ•œ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ๊ฐ ์–ธ์–ด๋Š” ๊ณ ์œ ํ•œ ์ฒ ํ•™, ๋ฌธ๋ฒ•, ๊ทธ๋ฆฌ๊ณ  ์ƒํƒœ๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋Ÿฌํ•œ ํŠน์„ฑ์„ ๊นŠ์ด ์ดํ•ดํ•˜๊ณ  ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์„ฑ๊ณต์ ์ธ ๊ฐœ๋ฐœ์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

Claude Code๋Š” ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ํŠน์„ฑ๊ณผ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์ดํ•ดํ•˜๊ณ  ์žˆ์–ด, ๊ฐ ์–ธ์–ด์˜ ์žฅ์ ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์žฅ์—์„œ๋Š” ์ฃผ์š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ณ„๋กœ Claude Code๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ์ „๋žต๊ณผ ์‹ค์ „ ํ™œ์šฉ๋ฒ•์„ ์ฒด๊ณ„์ ์œผ๋กœ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

6.1 TypeScript/JavaScript

TypeScript์™€ JavaScript๋Š” ํ˜„๋Œ€ ์›น ๊ฐœ๋ฐœ ์ƒํƒœ๊ณ„์˜ ์ค‘์‹ฌ์ด๋ฉฐ, ๋™์  ํƒ€์ดํ•‘์˜ ์œ ์—ฐ์„ฑ๊ณผ ์ •์  ํƒ€์ดํ•‘์˜ ์•ˆ์ „์„ฑ์„ ๋ชจ๋‘ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Claude Code๋Š” TypeScript์˜ ๊ฐ•๋ ฅํ•œ ํƒ€์ž… ์‹œ์Šคํ…œ์„ ํ™œ์šฉํ•˜์—ฌ ์•ˆ์ „ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, JavaScript์˜ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„๊ณผ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ํŠน์„ฑ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TypeScript ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ”„๋กœ์ ํŠธ ์„ค์ •

๊ฒฌ๊ณ ํ•œ TypeScript ํ”„๋กœ์ ํŠธ๋Š” ์—„๊ฒฉํ•œ ํƒ€์ž… ์ฒดํฌ์™€ ํ˜„๋Œ€์ ์ธ ๊ฐœ๋ฐœ ๋„๊ตฌ์˜ ํ†ตํ•ฉ์—์„œ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. Claude Code๋Š” ํ”„๋กœ์ ํŠธ์˜ ๊ทœ๋ชจ์™€ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๋Š” ์ตœ์ ์˜ ์„ค์ •์„ ์ œ์•ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

bash
# ๊ธฐ๋ณธ TypeScript ํ”„๋กœ์ ํŠธ ์„ค์ •
claude "์—„๊ฒฉํ•œ ํƒ€์ž… ์ฒดํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” TypeScript ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์ •ํ•ด์ค˜.
tsconfig.json์„ ์ตœ์ ํ™”ํ•˜๊ณ , ESLint์™€ Prettier๋„ TypeScript์— ๋งž๊ฒŒ ๊ตฌ์„ฑํ•ด์ค˜"

# ๋Œ€๊ทœ๋ชจ ๋ชจ๋…ธ๋ ˆํฌ ์„ค์ •
claude "๋Œ€๊ทœ๋ชจ TypeScript ๋ชจ๋…ธ๋ ˆํฌ๋ฅผ ์„ค์ •ํ•ด์ค˜.
- Nx ์›Œํฌ์ŠคํŽ˜์ด์Šค ๊ตฌ์„ฑ
- ํ”„๋กœ์ ํŠธ ๊ฐ„ ์˜์กด์„ฑ ๊ด€๋ฆฌ
- ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋นŒ๋“œ ์‹œ์Šคํ…œ
- ์ปจ์‹œ์Šคํ„ดํŠธ ์ฝ”๋“œ ์Šคํƒ€์ผ ์ ์šฉ
- ์‚ฌ์ดํด๋ฆญ ์˜์กด์„ฑ ๊ฐ์ง€"

# ๋งˆ์ดํฌ๋กœํ”„๋ก ํŠธ์—”๋“œ ์•„ํ‚คํ…์ฒ˜
claude "TypeScript ๋งˆ์ดํฌ๋กœํ”„๋ก ํŠธ์—”๋“œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌ์„ฑํ•ด์ค˜.
- Module Federation ์„ค์ •
- ๋Ÿฐํƒ€์ž„ ํƒ€์ž… ์•ˆ์ „์„ฑ ๋ณด์žฅ
- ์‚ฌ์ด๋“œ์นด ๋กœ๋”ฉ๊ณผ ๋ฒ„์ „ ๊ด€๋ฆฌ
- ๊ณต์œ  ์ƒํƒœ ๋ฐ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ
- ํ…Œ์ŠคํŠธ ์ „๋žต๊ณผ ๋ชฉ ์„ค์ •"

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ tsconfig.json ์„ค์ •

json
{
  "compilerOptions": {
    // ์ตœ์‹  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œ์ค€ ์ง€์›
    "target": "ES2022",
    "module": "ESNext",
    "lib": ["ES2022", "DOM", "DOM.Iterable"],
    
    // ์ตœ๋Œ€ ํƒ€์ž… ์•ˆ์ „์„ฑ
    "strict": true,
    "noUncheckedIndexedAccess": true,
    "noImplicitOverride": true,
    "exactOptionalPropertyTypes": true,
    "noImplicitReturns": true,
    "noFallthroughCasesInSwitch": true,
    "noUncheckedSideEffectImports": true,
    
    // ์ถ”๊ฐ€ ์—„๊ฒฉ์„ฑ ์˜ต์…˜
    "allowUnusedLabels": false,
    "allowUnreachableCode": false,
    "forceConsistentCasingInFileNames": true,
    "skipLibCheck": true,
    
    // ๋ชจ๋“  ํƒ€์ž… ๋ฐ ๋‚ด๋ณด๋‚ด๊ธฐ
    "moduleResolution": "bundler",
    "allowImportingTsExtensions": true,
    "noEmit": true,
    "isolatedModules": true,
    
    // ์„ฑ๋Šฅ ์ตœ์ ํ™”
    "incremental": true,
    "tsBuildInfoFile": ".tsbuildinfo",
    
    // ๊ฒฝ๋กœ ๋งคํ•‘
    "baseUrl": ".",
    "paths": {
      "@/*": ["./src/*"],
      "@/components/*": ["./src/components/*"],
      "@/utils/*": ["./src/utils/*"],
      "@/types/*": ["./src/types/*"]
    }
  },
  "include": [
    "src/**/*",
    "types/**/*",
    "tests/**/*"
  ],
  "exclude": [
    "node_modules",
    "dist",
    "build",
    "coverage"
  ]
}

๊ณ ๊ธ‰ TypeScript ํƒ€์ž… ํŒจํ„ด

TypeScript์˜ ์ง„์ •ํ•œ ์žฅ์ ์€ ๋‹จ์ˆœํ•œ ํƒ€์ž… ์ฒดํฌ๋ฅผ ๋„˜์–ด์„œ ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํƒ€์ž… ๋ ˆ๋ฒจ์—์„œ ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

bash
# Branded Types๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™ ์ ์šฉ
claude "Branded Types๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•ด์ค˜.
- UserId, Email, PhoneNumber ๋“ฑ ๋„๋ฉ”์ธ ํƒ€์ž… ์ •์˜
- ๋Ÿฐํƒ€์ž„ ๊ฒ€์ฆ ํ•จ์ˆ˜์™€ ์—ฐ๋™
- API ์‘๋‹ต ํƒ€์ž… ์•ˆ์ „์„ฑ ๋ณด์žฅ
- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ์™€ ๋™๊ธฐํ™”"

# Conditional Types๋กœ API ํƒ€์ž… ์ž๋™ ์ƒ์„ฑ
claude "Conditional Types๋ฅผ ํ™œ์šฉํ•ด์„œ OpenAPI ์Šคํ‚ค๋งˆ์—์„œ 
TypeScript ํƒ€์ž…์„ ์ž๋™ ์ƒ์„ฑํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค์–ด์ค˜.
- Path Parameter์™€ Query Parameter ํƒ€์ž… ์ถ”๋ก 
- Response ํƒ€์ž… ์ž๋™ ๋งคํ•‘
- HTTP Status Code๋ณ„ ํƒ€์ž… ๊ตฌ๋ถ„
- ์—๋Ÿฌ ํƒ€์ž… ์œ ๋‹ˆ์˜จ ์ƒ์„ฑ"

# Template Literal Types๋กœ DSL ๊ตฌํ˜„
claude "Template Literal Types๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํƒ€์ž… ์•ˆ์ „ํ•œ DSL์„ ๋งŒ๋“ค์–ด์ค˜.
- CSS-in-JS ํƒ€์ž… ์ฒดํฌ
- SQL ์ฟผ๋ฆฌ ๋นŒ๋” ํƒ€์ž… ์•ˆ์ „์„ฑ
- Event Name ์ž๋™ ์™„์„ฑ
- i18n ํ‚ค ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ"

์„ฑ๋Šฅ ์ตœ์ ํ™”๋œ TypeScript ํŒจํ„ด

๋Œ€๊ทœ๋ชจ TypeScript ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์ปดํŒŒ์ผ ์‹œ๊ฐ„๊ณผ ๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ ๋ชจ๋‘๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

bash
# ์ ์ง„์  ํƒ€์ž… ๋กœ๋”ฉ
claude "๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์˜ TypeScript ์ปดํŒŒ์ผ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•ด์ค˜.
- Project References๋กœ ์ ์ง„์  ๋นŒ๋“œ
- Type-only imports ํ™œ์šฉ
- ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํƒ€์ž… ์ œ๊ฑฐ
- ๋™์  import๋กœ ํƒ€์ž… ๋กœ๋”ฉ ์ตœ์ ํ™”
- Watch mode ์„ฑ๋Šฅ ํŠœ๋‹"

# ๋Ÿฐํƒ€์ž„ ํƒ€์ž… ๊ฒ€์ฆ ์ตœ์ ํ™”
claude "๋Ÿฐํƒ€์ž„ ํƒ€์ž… ๊ฒ€์ฆ์„ ์„ฑ๋Šฅ์— ์˜ํ–ฅ ์—†์ด ๊ตฌํ˜„ํ•ด์ค˜.
- Zod๋กœ ๋Ÿฐํƒ€์ž„ ์Šคํ‚ค๋งˆ ๊ฒ€์ฆ
- Type Guards ์ตœ์ ํ™”
- ๋น„๋™๊ธฐ ๊ฒ€์ฆ ๋ฐฐ์นญ
- ์บ์‹œ ์ „๋žต๊ณผ ๋ฉ”๋ชจ์ด์ œ์ด์…˜
- ์—๋Ÿฌ ๋ฐ”์šด๋”๋ฆฌ์™€ ๋กœ๊น…"

### ํƒ€์ž… ์•ˆ์ „์„ฑ ๊ทน๋Œ€ํ™”

**1. ๊ณ ๊ธ‰ ํƒ€์ž… ํ™œ์šฉ**

```bash
claude "์ด JavaScript ์ฝ”๋“œ๋ฅผ TypeScript๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ด์ค˜.
์œ ๋‹ˆ์˜จ ํƒ€์ž…, ์ œ๋„ค๋ฆญ, ์กฐ๊ฑด๋ถ€ ํƒ€์ž…์„ ํ™œ์šฉํ•ด์„œ
ํƒ€์ž… ์•ˆ์ „์„ฑ์„ ์ตœ๋Œ€ํ•œ ํ™•๋ณดํ•ด์ค˜"

2. ํƒ€์ž… ์ถ”๋ก  ๊ฐœ์„ 

bash
claude "์ด ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ํƒ€์ž…์ด ๋„ˆ๋ฌด ๋„“๊ฒŒ ์ถ”๋ก ๋˜๊ณ  ์žˆ์–ด.
ํƒ€์ž… ๊ฐ€๋“œ์™€ const assertion์„ ์‚ฌ์šฉํ•ด์„œ ๋” ์ •ํ™•ํ•œ ํƒ€์ž…์„ ์ถ”๋ก ํ•˜๋„๋ก ํ•ด์ค˜"

3. Zod๋ฅผ ํ™œ์šฉํ•œ ๋Ÿฐํƒ€์ž„ ๊ฒ€์ฆ

bash
claude "API ์‘๋‹ต์„ Zod ์Šคํ‚ค๋งˆ๋กœ ๊ฒ€์ฆํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค์–ด์ค˜.
ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํƒ€์ž…๋„ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋„๋ก ํ•ด์ค˜"

JavaScript ๋ชจ๋˜ ํŒจํ„ด

1. ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

bash
claude "์ด ๋ช…๋ นํ˜• ์ฝ”๋“œ๋ฅผ ํ•จ์ˆ˜ํ˜• ์Šคํƒ€์ผ๋กœ ๋ฆฌํŒฉํ† ๋งํ•ด์ค˜.
๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ•˜๊ณ , ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ,
ํ•จ์ˆ˜ ์กฐํ•ฉ์œผ๋กœ ๋กœ์ง์„ ๊ตฌ์„ฑํ•ด์ค˜"

2. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ตœ์ ํ™”

bash
claude "์—ฌ๋Ÿฌ API ํ˜ธ์ถœ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์ตœ์ ํ™”ํ•ด์ค˜.
Promise.all, Promise.allSettled๋ฅผ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•˜๊ณ ,
์—๋Ÿฌ ์ฒ˜๋ฆฌ์™€ ์žฌ์‹œ๋„ ๋กœ์ง๋„ ์ถ”๊ฐ€ํ•ด์ค˜"

TypeScript/JavaScript CLAUDE.md ์˜ˆ์‹œ

markdown
# TypeScript/JavaScript Guidelines

## ํƒ€์ž… ์ •์˜ ๊ทœ์น™
- ์ธํ„ฐํŽ˜์ด์Šค > ํƒ€์ž… ๋ณ„์นญ (ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ)
- any ์‚ฌ์šฉ ๊ธˆ์ง€ (unknown ์‚ฌ์šฉ)
- ๋ช…์‹œ์  ๋ฐ˜ํ™˜ ํƒ€์ž… ์„ ํ˜ธ

## ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ
```typescript
// ์ข‹์€ ์˜ˆ
const fetchData = async (): Promise<Result<Data, Error>> => {
  try {
    const data = await api.get('/data');
    return { ok: true, value: data };
  } catch (error) {
    return { ok: false, error };
  }
};

๋ถˆ๋ณ€์„ฑ

์—๋Ÿฌ ์ฒ˜๋ฆฌ


### TypeScript ์‹ค์ „ ๋””๋ฒ„๊น…๊ณผ ๋ชจ๋‹ˆํ„ฐ๋ง

```bash
# ๊ณ ๊ธ‰ ๋””๋ฒ„๊น… ์„ค์ •
claude "TypeScript ํ”„๋กœ์ ํŠธ์— ๊ณ ๊ธ‰ ๋””๋ฒ„๊น… ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ด์ค˜.
- Source Map ์ตœ์ ํ™”๋กœ ๋””๋ฒ„๊น… ์„ฑ๋Šฅ ํ–ฅ์ƒ
- Chrome DevTools ์—ฐ๋™
- TypeScript ์ปดํŒŒ์ผ๋Ÿฌ ์—๋Ÿฌ ์ถ”์ 
- ๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ ํ”„๋กœํŒŒ์ผ๋ง
- ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ํƒ์ง€ ๋„๊ตฌ"

# ํ”„๋กœ๋•์…˜ ๋ชจ๋‹ˆํ„ฐ๋ง
claude "TypeScript ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ”„๋กœ๋•์…˜ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์„ค์ •ํ•ด์ค˜.
- ๋Ÿฐํƒ€์ž„ ํƒ€์ž… ์—๋Ÿฌ ์ˆ˜์ง‘
- ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ์ง€์  ์ถ”์ 
- ๋ฒˆ๋“ค ํฌ๊ธฐ ๋ชจ๋‹ˆํ„ฐ๋ง
- TypeScript ์ปดํŒŒ์ผ ์‹œ๊ฐ„ ์ถ”์ 
- ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€ ๋ฆฌํฌํŠธ"

6.2 Python - ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํŒŒ์ด์ฌ

Python์€ "์ฝ๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ"๋ฅผ ์ฒ ํ•™์œผ๋กœ ํ•˜๋Š” ์–ธ์–ด๋กœ, ๋ช…ํ™•ํ•˜๊ณ  ๊ฐ„๊ฒฐํ•œ ๋ฌธ๋ฒ•์„ ํ†ตํ•ด ๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ์šฐ์•„ํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. Claude Code๋Š” Python์˜ ๋™์  ํŠน์„ฑ๊ณผ Duck Typing์˜ ์žฅ์ ์„ ํ™œ์šฉํ•˜๋ฉด์„œ๋„, ํƒ€์ž… ํžŒํŠธ์™€ ์ •์  ๋ถ„์„ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ด๋Š” ๋ชจ๋˜ Python ๊ฐœ๋ฐœ ํŒจํ„ด์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

Python ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐํ™”

ํ™•์žฅ ๊ฐ€๋Šฅํ•œ Python ํ”„๋กœ์ ํŠธ๋Š” ๋ช…ํ™•ํ•œ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ์™€ ์˜์กด์„ฑ ๊ด€๋ฆฌ์—์„œ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. Claude Code๋Š” PEP ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•˜๋Š” ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ์™€ ํ˜„๋Œ€์ ์ธ ๊ฐœ๋ฐœ ๋„๊ตฌ ์„ค์ •์„ ์ œ์•ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

bash
# ๊ธฐ๋ณธ Python ํ”„๋กœ์ ํŠธ ์„ค์ •
claude "Python ํŒจํ‚ค์ง€ ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ฒ” ์‚ฌ๋ก€์— ๋”ฐ๋ผ ์„ค์ •ํ•ด์ค˜.
pyproject.toml, ๊ฐ€์ƒ ํ™˜๊ฒฝ, ํƒ€์ž… ํžŒํŠธ, 
๊ทธ๋ฆฌ๊ณ  ํ…Œ์ŠคํŠธ ์„ค์ •์„ ํฌํ•จํ•ด์ค˜"

# ๋Œ€๊ทœ๋ชจ FastAPI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
claude "FastAPI๋กœ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ API ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•ด์ค˜.
- ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™ (SQLAlchemy 2.0)
- Pydantic v2๋กœ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ
- OAuth2/JWT ์ธ์ฆ ์‹œ์Šคํ…œ
- ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ ๋Œ€๋น„
- ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ๋กœ๊น… ์‹œ์Šคํ…œ"

# ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด๋ง ํŒŒ์ดํ”„๋ผ์ธ
claude "Apache Airflow๋กœ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•ด์ค˜.
- ETL ์›Œํฌํ”Œ๋กœ์šฐ ์ž๋™ํ™”
- Pandas/Polars ์„ฑ๋Šฅ ์ตœ์ ํ™”
- ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ
- ์—๋Ÿฌ ๋ณต๊ตฌ์™€ ์žฌ์‹œ๋„ ๋กœ์ง
- ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ์•Œ๋ฆผ ์‹œ์Šคํ…œ"

# ๋จธ์‹ ๋Ÿฌ๋‹ ํ”„๋กœ๋•์…˜ ์‹œ์Šคํ…œ
claude "MLOps ํŒŒ์ดํ”„๋ผ์ธ์„ Python์œผ๋กœ ๊ตฌ์ถ•ํ•ด์ค˜.
- MLflow๋กœ ์‹คํ—˜ ์ถ”์ ๊ณผ ๋ชจ๋ธ ๋ฒ„์ „ ๊ด€๋ฆฌ
- Celery๋กœ ๋น„๋™๊ธฐ ๋งค์น˜ ํ•™์Šต
- FastAPI๋กœ ๋ชจ๋ธ ์„œ๋น™ API
- ์‹ค์‹œ๊ฐ„ ๋ชจ๋ธ ๋ชจ๋‹ˆํ„ฐ๋ง
- A/B ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ"

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ pyproject.toml ์„ค์ •

toml
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"

[tool.poetry]
name = "enterprise-python-app"
version = "0.1.0"
description = "Enterprise-grade Python application"
authors = ["Team <team@company.com>"]
readme = "README.md"
packages = [{include = "app", from = "src"}]

[tool.poetry.dependencies]
python = "^3.11"
fastapi = "^0.104.0"
uvicorn = {extras = ["standard"], version = "^0.24.0"}
sqlalchemy = "^2.0.0"
alembic = "^1.12.0"
pydantic = "^2.5.0"
celery = "^5.3.0"
redis = "^5.0.0"
structlog = "^23.2.0"
prometheus-client = "^0.19.0"

[tool.poetry.group.dev.dependencies]
pytest = "^7.4.0"
pytest-asyncio = "^0.21.0"
pytest-cov = "^4.1.0"
mypy = "^1.7.0"
black = "^23.11.0"
ruff = "^0.1.0"
pre-commit = "^3.5.0"

# ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋„๊ตฌ
locust = "^2.17.0"  # ๋กœ๋“œ ํ…Œ์ŠคํŠธ
opentelemetry-api = "^1.21.0"  # ๋ถ„์‚ฐ ์ถ”์ 
jinja2 = "^3.1.0"  # ํ…œํ”Œ๋ฆฟ ์—”์ง„

# ์ฝ”๋“œ ํ’ˆ์งˆ ๋„๊ตฌ
[tool.mypy]
python_version = "3.11"
strict = true
warn_return_any = true
warn_unused_configs = true
disallow_untyped_defs = true
disallow_incomplete_defs = true
check_untyped_defs = true
disallow_untyped_decorators = true
no_implicit_optional = true
warn_redundant_casts = true
warn_unused_ignores = true
warn_no_return = true
warn_unreachable = true
strict_equality = true

[tool.black]
line-length = 88
target-version = ['py311']
include = '\.pyi?$'
extend-exclude = '''
^/(
  (
      \.eggs
    | \.git
    | \.mypy_cache
    | \.tox
    | \.venv
    | _build
    | buck-out
    | build
    | dist
  )/
)
'''

[tool.ruff]
select = [
    "E",   # pycodestyle errors
    "W",   # pycodestyle warnings  
    "F",   # pyflakes
    "I",   # isort
    "B",   # flake8-bugbear
    "C4",  # flake8-comprehensions
    "UP",  # pyupgrade
    "N",   # pep8-naming
    "S",   # bandit
]
ignore = [
    "E501",  # line too long
    "B008",  # do not perform function calls in argument defaults
    "S101",  # use of assert
]
line-length = 88
target-version = "py311"

[tool.pytest.ini_options]
minversion = "7.0"
addopts = "-ra -q --cov=src --cov-report=term-missing --cov-report=html"
testpaths = ["tests"]
python_files = ["test_*.py"]
python_classes = ["Test*"]
python_functions = ["test_*"]
asyncio_mode = "auto"

๊ณ ๊ธ‰ ํƒ€์ž… ์‹œ์Šคํ…œ๊ณผ ์ •์  ๋ถ„์„

Python์˜ ๋™์  ํŠน์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ํƒ€์ž… ์•ˆ์ „์„ฑ์„ ํ™•๋ณดํ•˜๋Š” ๊ฒƒ์ด ํ˜„๋Œ€ Python ๊ฐœ๋ฐœ์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

bash
# ๊ณ ๊ธ‰ ํƒ€์ž… ํžŒํŠธ ํŒจํ„ด
claude "์ด Python ์ฝ”๋“œ์— ๊ณ ๊ธ‰ ํƒ€์ž… ํžŒํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค˜.
- ์ œ๋„ค๋ฆญ๊ณผ ํ”„๋กœํ† ์ฝœ์„ ํ™œ์šฉํ•œ ์ถ”์ƒํ™”
- Union๊ณผ Literal์„ ์ด์šฉํ•œ ์ •ํ™•ํ•œ ํƒ€์ž… ์ •์˜
- TypeGuard๋กœ ๋Ÿฐํƒ€์ž„ ํƒ€์ž… ์ฒดํฌ
- NewType์œผ๋กœ ๋„๋ฉ”์ธ ํƒ€์ž… ์ƒ์„ฑ
- mypy strict ๋ชจ๋“œ ํ†ต๊ณผ ๋ณด์žฅ"

# Pydantic v2 ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ
claude "Pydantic v2๋กœ ๊ณ ๊ธ‰ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•ด์ค˜.
- Field validators์™€ model validators
- ๋น„๋™๊ธฐ ๊ฒ€์ฆ์ž์™€ ์ปค์Šคํ…€ ์‹œ๋ฆฌ์–ผ๋ผ์ด์ €
- Discriminated Unions๋กœ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ
- JSON Schema ์ž๋™ ์ƒ์„ฑ
- ์„ฑ๋Šฅ ์ตœ์ ํ™”๋œ ์„ค์ •"

# ์ •์  ๋ถ„์„ ๋„๊ตฌ ํ†ตํ•ฉ
claude "Python ์ฝ”๋“œ ํ’ˆ์งˆ์„ ์œ„ํ•œ ์ •์  ๋ถ„์„ ๋„๊ตฌ๋ฅผ ์„ค์ •ํ•ด์ค˜.
- mypy + Pylance๋กœ ์ตœ๋Œ€ ํƒ€์ž… ์ฒดํฌ
- ruff๋กœ ๋น ๋ฅธ ๋ฆฐํŒ…๊ณผ ํฌ๋งคํŒ…
- bandit์œผ๋กœ ๋ณด์•ˆ ์ทจ์•ฝ์  ๊ฒ€์‚ฌ
- vulture๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ ํƒ์ง€
- ์ „์ฒด CI/CD ํŒŒ์ดํ”„๋ผ์ธ ํ†ตํ•ฉ"

์‹ค์ „ ํƒ€์ž… ํžŒํŠธ ์˜ˆ์‹œ

python
from typing import (
    AsyncGenerator, Awaitable, Callable, 
    Generic, Literal, Protocol, TypeGuard, 
    TypeVar, Union, overload
)
from dataclasses import dataclass
from pydantic import BaseModel, Field, field_validator
from datetime import datetime
from decimal import Decimal

# Domain Types with NewType
from typing import NewType
UserId = NewType('UserId', int)
Email = NewType('Email', str)
ProductId = NewType('ProductId', str)

# Protocol for dependency injection
class DatabaseProtocol(Protocol):
    async def execute(self, query: str) -> list[dict[str, any]]: ...
    async def fetch_one(self, query: str) -> dict[str, any] | None: ...

# Generic Repository Pattern
T = TypeVar('T', bound=BaseModel)

class Repository(Generic[T]):
    def __init__(self, db: DatabaseProtocol, model_class: type[T]) -> None:
        self._db = db
        self._model_class = model_class
    
    async def find_by_id(self, id_: int) -> T | None:
        result = await self._db.fetch_one(
            f"SELECT * FROM {self._model_class.__tablename__} WHERE id = {id_}"
        )
        return self._model_class(**result) if result else None

# Advanced Pydantic Models
class UserCreateRequest(BaseModel):
    email: Email = Field(..., pattern=r'^[\w\.-]+@[\w\.-]+\.\w+$')
    name: str = Field(..., min_length=1, max_length=100)
    age: int = Field(..., ge=18, le=120)
    
    @field_validator('email')
    @classmethod
    def validate_email_domain(cls, v: str) -> str:
        allowed_domains = ['company.com', 'partner.com']
        domain = v.split('@')[1]
        if domain not in allowed_domains:
            raise ValueError(f'Email domain must be one of {allowed_domains}')
        return v

# Type Guards for runtime validation
def is_valid_user_id(value: any) -> TypeGuard[UserId]:
    return isinstance(value, int) and value > 0

# Discriminated Union for complex data structures
class SuccessResponse(BaseModel):
    status: Literal['success'] = 'success'
    data: dict[str, any]
    timestamp: datetime = Field(default_factory=datetime.now)

class ErrorResponse(BaseModel):
    status: Literal['error'] = 'error'
    message: str
    error_code: int
    timestamp: datetime = Field(default_factory=datetime.now)

APIResponse = Union[SuccessResponse, ErrorResponse]

# Async Context Manager with proper typing
class AsyncDatabaseTransaction:
    def __init__(self, db: DatabaseProtocol) -> None:
        self._db = db
        self._transaction: any = None
    
    async def __aenter__(self) -> DatabaseProtocol:
        self._transaction = await self._db.begin()
        return self._db
    
    async def __aexit__(self, exc_type: type[Exception] | None, 
                       exc_val: Exception | None, 
                       exc_tb: any) -> None:
        if exc_type is None:
            await self._transaction.commit()
        else:
            await self._transaction.rollback()

Python ์„ฑ๋Šฅ ์ตœ์ ํ™” - ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์ˆ˜์ค€

๋Œ€๊ทœ๋ชจ Python ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์ฒ˜๋ฆฌ๋Ÿ‰, ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ, ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ๊ฐ€ ๋ชจ๋‘ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

bash
# ๊ณ ์„ฑ๋Šฅ ๋น„๋™๊ธฐ ์‹œ์Šคํ…œ
claude "๋Œ€์šฉ๋Ÿ‰ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•ด์ค˜.
- asyncio + aiohttp๋กœ ๋Œ€๋Ÿ‰ HTTP ์š”์ฒญ ์ฒ˜๋ฆฌ
- asyncpg๋กœ ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™
- ๋น„๋™๊ธฐ ์ปจํ…์ŠคํŠธ ๋งค๋‹ˆ์ €์™€ ์„ธ๋งˆํฌ์–ด
- ๋ฐฑํ”„๋ ˆ์…”์™€ ์„œํ‚ท ๊ด€๋ฆฌ
- ์—๋Ÿฌ ์ „ํŒŒ์™€ ๋กœ๊น… ์ „๋žต"

# ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™” ์ „๋žต
claude "Pandas/Polars๋กœ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์ตœ์ ํ™”ํ•ด์ค˜.
- ์ฒญํฌ ๋‹จ์œ„ ์ŠคํŠธ๋ฆฌ๋ฐ ์ฒ˜๋ฆฌ
- ์ œ๋„ˆ๋ ˆ์ดํ„ฐ์™€ ์ดํ„ฐ๋ ˆ์ดํ„ฐ ์ตœ์ ํ™”
- ๋ฉ”๋ชจ๋ฆฌ ๋งคํ•‘ ํŒŒ์ผ๊ณผ ํŒŒ์ผ“ ํ˜•์‹
- ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ์™€ ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์‹ฑ
- ๊ฐ€๋น„์ง€ ์ปด๋ ‰์…˜ ์ตœ์ ํ™”"

# Celery๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—… ์ฒ˜๋ฆฌ
claude "Celery๋กœ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ๋น„๋™๊ธฐ ์ž‘์—… ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•ด์ค˜.
- Redis Sentinel๋กœ ๊ณ ๊ฐ€์šฉ์„ฑ ๋ธŒ๋กœ์ปค
- ๋™์  ์›Œ์ปค ์Šค์ผ€์ผ๋ง
- ์ž‘์—… ์šฐ์„ ์ˆœ์œ„์™€ ๋ผ์šฐํŒ…
- ์‹คํŒจ ์ฒ˜๋ฆฌ์™€ ์žฌ์‹œ๋„ ์ „๋žต
- ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘"

# ์„ฑ๋Šฅ ํ”„๋กœํŒŒ์ผ๋ง๊ณผ ๋ณ‘๋ชฉ ๋ถ„์„
claude "Python ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ์„ ์ฐพ์•„์„œ ์ตœ์ ํ™”ํ•ด์ค˜.
- cProfile๊ณผ py-spy๋กœ ํ”„๋กœํŒŒ์ผ๋ง
- ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ๋ถ„์„ (memory_profiler)
- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ ์ตœ์ ํ™”
- ์บ์‹œ ์ „๋žต ๋ฐ ๋ฉ”๋ชจ์ด์ œ์ด์…˜
- JIT ์ปดํŒŒ์ผ๋Ÿฌ (Numba) ํ™œ์šฉ"

๊ณ ์„ฑ๋Šฅ ๋น„๋™๊ธฐ ํŒจํ„ด ์˜ˆ์‹œ

python
import asyncio
import aiohttp
import asyncpg
from typing import AsyncIterator, AsyncContextManager
from contextlib import asynccontextmanager
import structlog
from dataclasses import dataclass
from datetime import datetime

# ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜ ํ’€
class AsyncDatabasePool:
    def __init__(self, dsn: str, min_size: int = 10, max_size: int = 100):
        self.dsn = dsn
        self.min_size = min_size
        self.max_size = max_size
        self.pool: asyncpg.Pool | None = None
        self.logger = structlog.get_logger()
    
    async def initialize(self) -> None:
        """๋น„๋™๊ธฐ ์ปค๋„ฅ์…˜ ํ’€ ์ดˆ๊ธฐํ™”"""
        self.pool = await asyncpg.create_pool(
            self.dsn,
            min_size=self.min_size,
            max_size=self.max_size,
            command_timeout=60
        )
        self.logger.info("Database pool initialized", 
                        min_size=self.min_size, max_size=self.max_size)
    
    @asynccontextmanager
    async def acquire(self) -> AsyncIterator[asyncpg.Connection]:
        """์ปค๋„ฅ์…˜ ํš๋“ ๋ฐ ์ž๋™ ๋ฐ˜๋‚ฉ"""
        if not self.pool:
            raise RuntimeError("Pool not initialized")
        
        async with self.pool.acquire() as conn:
            try:
                yield conn
            except Exception as e:
                self.logger.error("Database operation failed", error=str(e))
                raise
    
    async def close(self) -> None:
        """์ปค๋„ฅ์…˜ ํ’€ ์ข…๋ฃŒ"""
        if self.pool:
            await self.pool.close()
            self.logger.info("Database pool closed")

# ๋น„๋™๊ธฐ HTTP ํด๋ผ์ด์–ธํŠธ ๋ž˜ํผ
class AsyncHTTPClient:
    def __init__(self, timeout: int = 30, max_connections: int = 100):
        self.timeout = aiohttp.ClientTimeout(total=timeout)
        self.connector = aiohttp.TCPConnector(
            limit=max_connections,
            limit_per_host=20,
            keepalive_timeout=30
        )
        self.session: aiohttp.ClientSession | None = None
        self.logger = structlog.get_logger()
    
    async def __aenter__(self) -> 'AsyncHTTPClient':
        self.session = aiohttp.ClientSession(
            timeout=self.timeout,
            connector=self.connector
        )
        return self
    
    async def __aexit__(self, exc_type, exc_val, exc_tb) -> None:
        if self.session:
            await self.session.close()
    
    async def get_multiple(self, urls: list[str], 
                          concurrency: int = 10) -> AsyncIterator[dict]:
        """์—ฌ๋Ÿฌ URL์„ ๋™์‹œ์— ์š”์ฒญํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ŠคํŠธ๋ฆฌ๋ฐ"""
        semaphore = asyncio.Semaphore(concurrency)
        
        async def fetch_one(url: str) -> dict:
            async with semaphore:
                try:
                    async with self.session.get(url) as response:
                        data = await response.json()
                        return {"url": url, "status": response.status, "data": data}
                except Exception as e:
                    self.logger.error("HTTP request failed", url=url, error=str(e))
                    return {"url": url, "status": 500, "error": str(e)}
        
        # ๋น„๋™๊ธฐ ์ œ๋„ˆ๋ ˆ์ดํ„ฐ๋กœ ๊ฒฐ๊ณผ ์ŠคํŠธ๋ฆฌ๋ฐ
        tasks = [fetch_one(url) for url in urls]
        for task in asyncio.as_completed(tasks):
            result = await task
            yield result

# ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ํŒจํ„ด
async def process_large_dataset_chunks(
    query: str, 
    db_pool: AsyncDatabasePool,
    chunk_size: int = 10000
) -> AsyncIterator[list[dict]]:
    """๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์…‹์„ ์ฒญํฌ ๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌ"""
    offset = 0
    
    while True:
        chunked_query = f"{query} LIMIT {chunk_size} OFFSET {offset}"
        
        async with db_pool.acquire() as conn:
            rows = await conn.fetch(chunked_query)
            
        if not rows:
            break
            
        # dict๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฆฌํ„ด
        chunk = [dict(row) for row in rows]
        yield chunk
        
        offset += chunk_size
        
        # ๋‚ด๋ถ€ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๋น„๋™๊ธฐ ์ง€์—ฐ
        await asyncio.sleep(0.01)

# ๋ฌด์ œํ•œ ์žฌ์‹œ๋„์™€ ์ง€์ˆ˜ ๋ฐฑ์˜คํ”„
async def retry_with_exponential_backoff(
    func: Callable[[], Awaitable[T]],
    max_retries: int = 3,
    base_delay: float = 1.0,
    max_delay: float = 60.0
) -> T:
    """์ง€์ˆ˜ ๋ฐฑ์˜คํ”„์™€ ํ•จ๊ป˜ ์žฌ์‹œ๋„"""
    logger = structlog.get_logger()
    
    for attempt in range(max_retries + 1):
        try:
            return await func()
        except Exception as e:
            if attempt == max_retries:
                logger.error("Max retries exceeded", error=str(e))
                raise
            
            delay = min(base_delay * (2 ** attempt), max_delay)
            logger.warning(
                "Operation failed, retrying",
                attempt=attempt + 1,
                max_retries=max_retries,
                delay=delay,
                error=str(e)
            )
            await asyncio.sleep(delay)
    
    # ์ด ์ง€์ ์— ๋„๋‹ฌํ•  ์ˆ˜ ์—†์Œ
    raise RuntimeError("Unexpected execution path")

Python ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ CLAUDE.md ์˜ˆ์‹œ

๋Œ€๊ทœ๋ชจ Python ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•œ ํฌ๊ด„์ ์ธ ๊ฐ€์ด๋“œ๋ผ์ธ

markdown
# Enterprise Python Guidelines

## ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

src/

โ”œโ”€โ”€ app/

โ”‚ โ”œโ”€โ”€ api/ # FastAPI ๋ผ์šฐํ„ฐ์™€ ์—”๋“œํฌ์ธํŠธ

โ”‚ โ”œโ”€โ”€ core/ # ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋„๋ฉ”์ธ ๋ชจ๋ธ

โ”‚ โ”œโ”€โ”€ db/ # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชจ๋ธ๊ณผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜

โ”‚ โ”œโ”€โ”€ services/ # ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์„œ๋น„์Šค

โ”‚ โ””โ”€โ”€ utils/ # ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜

โ”œโ”€โ”€ tests/

โ””โ”€โ”€ scripts/ # ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜๊ณผ ์šด์˜ ์Šคํฌ๋ฆฝํŠธ


## ์ฝ”๋“œ ํ’ˆ์งˆ ๊ธฐ์ค€
- **PEP 8 + ruff**: ๋ชจ๋“  ์ฝ”๋“œ๋Š” ruff ๋ฆฐํ„ฐ ํ†ต๊ณผ ํ•„์ˆ˜
- **ํƒ€์ž… ํžŒํŠธ**: mypy strict ๋ชจ๋“œ 100% ์ปค๋ฒ„๋ฆฌ์ง€
- **๋ณต์žก๋„**: ํ•จ์ˆ˜๋‹น ๋งฅ๋™ ๋ณต์žก๋„ 10 ์ดํ•˜
- **๋์ŠคํŠธ๋ง**: ๊ณ ํ’ˆ์งˆ ๋์ŠคํŠธ๋ง ํ•„์ˆ˜ (Google Style)

## ํƒ€์ž… ํžŒํŠธ ๊ทœ์น™
```python
from typing import TypeVar, Generic, Protocol, TypeGuard, NewType
from datetime import datetime
from decimal import Decimal

# Domain Types
UserId = NewType('UserId', int)
Email = NewType('Email', str)

# Repository Protocol
T = TypeVar('T')

class Repository(Protocol, Generic[T]):
    async def find_by_id(self, id_: int) -> T | None: ...
    async def save(self, entity: T) -> T: ...
    async def delete(self, id_: int) -> bool: ...

# Type Guards
def is_valid_email(value: str) -> TypeGuard[Email]:
    return '@' in value and '.' in value.split('@')[1]

# Pydantic Models
class UserCreate(BaseModel):
    email: Email = Field(..., description="์‚ฌ์šฉ์ž ์ด๋ฉ”์ผ")
    name: str = Field(..., min_length=1, max_length=100)
    
    @field_validator('email')
    @classmethod
    def validate_email(cls, v: str) -> str:
        if not is_valid_email(v):
            raise ValueError('์œ ํšจํ•˜์ง€ ์•Š์€ ์ด๋ฉ”์ผ ํ˜•์‹')
        return v

๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๊ทœ์น™

์„ฑ๋Šฅ ๊ธฐ์ค€

ํ…Œ์ŠคํŠธ ์ „๋žต

๋ณด์•ˆ ๊ทœ์น™

๋กœ๊น…๊ณผ ๋ชจ๋‹ˆํ„ฐ๋ง

python
import structlog

logger = structlog.get_logger()

# ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง
logger.info(
    "User created successfully", 
    user_id=user.id,
    email=user.email,
    timestamp=datetime.now().isoformat()
)

# ์—๋Ÿฌ ๋กœ๊น…
logger.error(
    "Database connection failed",
    error=str(e),
    retry_count=retry_count,
    max_retries=max_retries
)

CI/CD ์ฒดํฌ๋ฆฌ์ŠคํŠธ


### Python ์‹ค์ „ ๋””๋ฒ„๊น…๊ณผ ๋ชจ๋‹ˆํ„ฐ๋ง

```bash
# ํ”„๋กœ๋•์…˜ ๋””๋ฒ„๊น… ํ™˜๊ฒฝ
claude "Python ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ”„๋กœ๋•์…˜ ๋””๋ฒ„๊น… ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ด์ค˜.
- ์›๊ฒฉ ๋””๋ฒ„๊น…๊ณผ ๋กœ๊ทธ ์ˆ˜์ง‘
- APM ๋„๊ตฌ (New Relic, DataDog) ์—ฐ๋™
- ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ์ง€์  ์‹ค์‹œ๊ฐ„ ์ถ”์ 
- ์˜ˆ์™ธ ๋ฐ ์˜ค๋ฅ˜ ์ž๋™ ์ˆ˜์ง‘
- ๋น„๋™๊ธฐ ์ž‘์—… ๋ชจ๋‹ˆํ„ฐ๋ง"

# ๋Œ€์šฉ๋Ÿ‰ ์‹œ์Šคํ…œ ๋ชจ๋‹ˆํ„ฐ๋ง
claude "Python ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์˜ ์ข…ํ•ฉ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์„ค์ •ํ•ด์ค˜.
- Prometheus + Grafana ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘
- ๋ถ„์‚ฐ ๋กœ๊น… (ELK Stack)
- ๋น„๋™๊ธฐ ์ž‘์—… ๋Œ€์‹œ๋ณด๋“œ
- ์ž๋™ ์•Œ๋ฆผ๊ณผ ์—์Šค์ผ€์ผ๋ ˆ์ด์…˜
- ์„ฑ๋Šฅ ํšŒ๊ท€ ๊ฐ์ง€"

[S2ST4] ์–ธ์–ด ์ „๋žต โ€” Java/Kotlin, Go, Rust

6.3 Java/Kotlin - ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ JVM

Java๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์˜ ํ‘œ์ค€์ด๋ฉฐ, Kotlin์€ Java์™€์˜ ์™„๋ฒฝํ•œ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ํ˜„๋Œ€์ ์ด๊ณ  ๊ฐ„๊ฒฐํ•œ ๋ฌธ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Claude Code๋Š” Java์˜ ๊ฐ•๋ ฅํ•œ ์ƒํƒœ๊ณ„์™€ JVM์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋ฉฐ, Kotlin์˜ null ์•ˆ์ „์„ฑ๊ณผ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋”์šฑ ์•ˆ์ „ํ•˜๊ณ  ํ‘œํ˜„๋ ฅ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Java ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ”„๋กœ์ ํŠธ ํ˜„๋Œ€ํ™”

๋ ˆ๊ฑฐ์‹œ Java ์‹œ์Šคํ…œ์„ ํ˜„๋Œ€์ ์ธ ์•„ํ‚คํ…์ฒ˜๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ๋‹จ์ˆœํ•œ ๋ฒ„์ „ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ๋„˜์–ด์„œ ์ „์ฒด์ ์ธ ๊ฐœ๋ฐœ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋ณ€ํ™”๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. Claude Code๋Š” ์ด๋Ÿฌํ•œ ๋ณต์žกํ•œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ฒด๊ณ„์ ์œผ๋กœ ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

bash
# ๊ธฐ๋ณธ ํ˜„๋Œ€ํ™” ์ž‘์—…
claude "์ด ๋ ˆ๊ฑฐ์‹œ Java 8 ์ฝ”๋“œ๋ฅผ Java 17+ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ด์„œ ํ˜„๋Œ€ํ™”ํ•ด์ค˜.
- Records๋กœ ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค ๋ณ€ํ™˜
- Pattern Matching์œผ๋กœ instanceof ๊ฐ„์†Œํ™”
- Text Blocks๋กœ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ
- Optional๋กœ null ์•ˆ์ „์„ฑ ๊ฐ•ํ™”
- Stream API๋กœ ์ปฌ๋ ‰์…˜ ์ฒ˜๋ฆฌ ์ตœ์ ํ™”"

# ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
claude "๋ชจ๋†€๋ฆฌ์‹ Spring ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋ถ„ํ•ดํ•ด์ค˜.
- ๋„๋ฉ”์ธ ๊ฒฝ๊ณ„ ์‹๋ณ„๊ณผ ์„œ๋น„์Šค ๋ถ„๋ฆฌ
- Spring Cloud Gateway๋กœ API ๊ฒŒ์ดํŠธ์›จ์ด ๊ตฌ์„ฑ
- ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜๊ณผ ์‚ฌ๊ฐ€ ํŒจํ„ด ์ ์šฉ
- ์„œ๋น„์Šค ๋ฉ”์‹œ์™€ ๋ถ„์‚ฐ ์ถ”์  ์„ค์ •
- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ถ„๋ฆฌ ์ „๋žต"

# ์„ฑ๋Šฅ ์ตœ์ ํ™”
claude "Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์„ ํ”„๋กœํŒŒ์ผ๋งํ•˜๊ณ  ์ตœ์ ํ™”ํ•ด์ค˜.
- JVM ํŠœ๋‹๊ณผ GC ์ตœ์ ํ™”
- ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ํƒ์ง€์™€ ํ•ด๊ฒฐ
- ์Šค๋ ˆ๋“œ ํ’€ ์„ค์ • ์ตœ์ ํ™”
- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜ ํ’€๋ง
- JIT ์ปดํŒŒ์ผ๋Ÿฌ ์ตœ์ ํ™”"
mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}, "flowchart": {"htmlLabels": false, "useMaxWidth": false}}}%%
graph TD
    A[src/main/java/com/company/app/] --> B[config/<br/>Spring ์„ค์ • ํด๋ž˜์Šค]
    A --> C[domain/<br/>๋น„์ฆˆ๋‹ˆ์Šค ์˜์—ญ]
    A --> D[infrastructure/<br/>์™ธ๋ถ€ ์‹œ์Šคํ…œ ์—ฐ๋™]
    A --> E[presentation/<br/>์ปจํŠธ๋กค๋Ÿฌ์™€ DTO]
    A --> F[shared/<br/>๊ณตํ†ต ์œ ํ‹ธ๋ฆฌํ‹ฐ]
    A --> G[security/<br/>๋ณด์•ˆ ์„ค์ •]
    
    C --> H[model/<br/>๋„๋ฉ”์ธ ๋ชจ๋ธ]
    C --> I[service/<br/>๋น„์ฆˆ๋‹ˆ์Šค ์„œ๋น„์Šค]
    C --> J[repository/<br/>๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค]
    
    K[resources/] --> L[application.yml<br/>ํ™˜๊ฒฝ๋ณ„ ์„ค์ •]
    K --> M[logback.xml<br/>๋กœ๊น… ์„ค์ •]
    K --> N[schema.sql<br/>๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ]
    
    classDef configStyle fill:#e2e8f0,stroke:#334155,stroke-width:2px,color:#1e293b
    classDef domainStyle fill:#f1f5f9,stroke:#475569,stroke-width:2px,color:#1e293b
    
    class B,D,E,F,G,H,I,J,L,M,N domainStyle
    class A,C,K configStyle

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ Java ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

Spring Boot ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํŒจํ„ด

1. ๊ณ ๊ธ‰ ์˜์กด์„ฑ ์ฃผ์ž…๊ณผ ์„ค์ • ๊ด€๋ฆฌ

bash
# ๋ณต์žกํ•œ ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„ ์ตœ์ ํ™”
claude "Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์˜์กด์„ฑ ์ฃผ์ž…์„ ์ตœ์ ํ™”ํ•ด์ค˜.
- Constructor injection์œผ๋กœ ๋ถˆ๋ณ€์„ฑ ๋ณด์žฅ
- ์ˆœํ™˜ ์˜์กด์„ฑ ํƒ์ง€์™€ ํ•ด๊ฒฐ
- Configuration Properties๋กœ ํƒ€์ž… ์•ˆ์ „ํ•œ ์„ค์ •
- Profile๋ณ„ Bean ์กฐ๊ฑด๋ถ€ ์ƒ์„ฑ
- ํ…Œ์ŠคํŠธ์šฉ Test Configuration ๋ถ„๋ฆฌ"

# ๋ฉ€ํ‹ฐ ๋ชจ๋“ˆ ํ”„๋กœ์ ํŠธ ์„ค์ •
claude "๋Œ€๊ทœ๋ชจ Spring Boot ๋ฉ€ํ‹ฐ ๋ชจ๋“ˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์ •ํ•ด์ค˜.
- ๊ณตํ†ต ๋ชจ๋“ˆ๊ณผ ๋„๋ฉ”์ธ๋ณ„ ๋ชจ๋“ˆ ๋ถ„๋ฆฌ
- ๋ชจ๋“ˆ ๊ฐ„ ์˜์กด์„ฑ ๊ด€๋ฆฌ
- ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ์™€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ „๋žต
- ๋นŒ๋“œ ์ตœ์ ํ™”์™€ ๋ณ‘๋ ฌ ์ปดํŒŒ์ผ
- ๋„์ปค ์ด๋ฏธ์ง€ ๊ณ„์ธตํ™”"

2. ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ

bash
# WebFlux ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
claude "๊ธฐ์กด Spring MVC REST API๋ฅผ Spring WebFlux๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ด์ค˜.
- Mono์™€ Flux๋ฅผ ํ™œ์šฉํ•œ ๋…ผ๋ธ”๋กœํ‚น ์ฒ˜๋ฆฌ
- R2DBC๋กœ ๋ฐ˜์‘ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™
- WebClient๋กœ ์™ธ๋ถ€ API ํ˜ธ์ถœ ์ตœ์ ํ™”
- ๋ฐฑํ”„๋ ˆ์…” ์ฒ˜๋ฆฌ์™€ ์—๋Ÿฌ ๋ณต๊ตฌ
- ์„ฑ๋Šฅ ๋ฒค์น˜๋งˆํฌ์™€ ๋น„๊ต ๋ถ„์„"

# ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์•„ํ‚คํ…์ฒ˜
claude "Spring MVC์™€ WebFlux๋ฅผ ํ˜ผํ•ฉํ•œ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•ด์ค˜.
- CPU ์ง‘์•ฝ์  ์ž‘์—…์€ MVC๋กœ ์ฒ˜๋ฆฌ
- I/O ์ง‘์•ฝ์  ์ž‘์—…์€ WebFlux๋กœ ์ฒ˜๋ฆฌ
- ๊ณตํ†ต ๋ณด์•ˆ ์„ค์ •๊ณผ ์ธ์ฆ ์ฒ˜๋ฆฌ
- ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ๋ฉ”ํŠธ๋ฆญ ํ†ตํ•ฉ
- ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ์ „๋žต"

Kotlin ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ฐœ๋ฐœ ํŒจํ„ด

Kotlin์€ Java์˜ ํ‘œํ˜„๋ ฅ ๋ถ€์กฑ์„ ํ•ด๊ฒฐํ•˜๋ฉด์„œ๋„ ๊ธฐ์กด Java ์ƒํƒœ๊ณ„์™€ ์™„๋ฒฝํ•˜๊ฒŒ ํ˜ธํ™˜๋˜๋Š” ํ˜„๋Œ€์ ์ธ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์—์„œ๋Š” ํŠนํžˆ null ์•ˆ์ „์„ฑ๊ณผ ๊ฐ„๊ฒฐํ•œ ๋ฌธ๋ฒ•์ด ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

bash
# Java ์ฝ”๋“œ๋ฒ ์ด์Šค ์ ์ง„์  Kotlin ์ „ํ™˜
claude "๊ธฐ์กด Java Spring Boot ํ”„๋กœ์ ํŠธ๋ฅผ ์ ์ง„์ ์œผ๋กœ Kotlin์œผ๋กœ ์ „ํ™˜ํ•ด์ค˜.
- ์ƒˆ ๊ธฐ๋Šฅ์€ Kotlin์œผ๋กœ ์ž‘์„ฑ
- data class๋กœ DTO ๊ฐ„์†Œํ™”
- sealed class๋กœ ์ƒํƒœ ๊ด€๋ฆฌ
- extension functions๋กœ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜ ์ •๋ฆฌ
- coroutines๋กœ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๊ฐœ์„ "

# Kotlin DSL ํ™œ์šฉ
claude "Kotlin DSL์„ ํ™œ์šฉํ•ด์„œ ์„ค์ •๊ณผ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ฐœ์„ ํ•ด์ค˜.
- build.gradle.kts๋กœ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ ํƒ€์ž… ์•ˆ์ „์„ฑ ํ™•๋ณด
- Spring Security DSL๋กœ ๋ณด์•ˆ ์„ค์ • ๊ฐ„์†Œํ™”
- ํ…Œ์ŠคํŠธ DSL๋กœ ๊ฐ€๋…์„ฑ ๋†’์€ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ
- ๋„๋ฉ”์ธ ํŠนํ™” ์–ธ์–ด ๊ตฌํ˜„"

Kotlin ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์ฝ”๋“œ ์˜ˆ์‹œ

kotlin
// ํƒ€์ž… ์•ˆ์ „ํ•œ ์„ค์ • ๊ด€๋ฆฌ
@ConfigurationProperties(prefix = "app")
data class AppProperties(
    val database: DatabaseProperties,
    val security: SecurityProperties,
    val features: FeatureFlags
) {
    data class DatabaseProperties(
        val url: String,
        val maxPoolSize: Int = 20,
        val connectionTimeout: Duration = Duration.ofSeconds(30)
    )
    
    data class SecurityProperties(
        val jwtSecret: String,
        val jwtExpiration: Duration = Duration.ofHours(24),
        val corsAllowedOrigins: List<String> = emptyList()
    )
    
    data class FeatureFlags(
        val enableNewPaymentSystem: Boolean = false,
        val enableAdvancedAnalytics: Boolean = false
    )
}

// ๊ฒฐ๊ณผ ํƒ€์ž…์œผ๋กœ ์—๋Ÿฌ ์ฒ˜๋ฆฌ
sealed class Result<out T> {
    data class Success<T>(val value: T) : Result<T>()
    data class Error(val exception: Throwable) : Result<Nothing>()
    
    inline fun <R> map(transform: (T) -> R): Result<R> = when (this) {
        is Success -> Success(transform(value))
        is Error -> this
    }
    
    inline fun <R> flatMap(transform: (T) -> Result<R>): Result<R> = when (this) {
        is Success -> transform(value)
        is Error -> this
    }
}

// ์ฝ”๋ฃจํ‹ด์„ ํ™œ์šฉํ•œ ์„œ๋น„์Šค ๊ณ„์ธต
@Service
class UserService(
    private val userRepository: UserRepository,
    private val emailService: EmailService,
    private val auditService: AuditService
) {
    suspend fun createUser(request: CreateUserRequest): Result<User> = runCatching {
        // ๋ณ‘๋ ฌ ๊ฒ€์ฆ
        val (emailExists, usernameExists) = coroutineScope {
            val emailCheck = async { userRepository.existsByEmail(request.email) }
            val usernameCheck = async { userRepository.existsByUsername(request.username) }
            emailCheck.await() to usernameCheck.await()
        }
        
        when {
            emailExists -> throw UserAlreadyExistsException("Email already exists")
            usernameExists -> throw UserAlreadyExistsException("Username already exists")
        }
        
        val user = User(
            email = request.email,
            username = request.username,
            hashedPassword = hashPassword(request.password)
        )
        
        // ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ
        coroutineScope {
            val saveUser = async { userRepository.save(user) }
            val sendEmail = async { emailService.sendWelcomeEmail(user.email) }
            val audit = async { auditService.logUserCreation(user.id) }
            
            saveUser.await().also {
                sendEmail.await()
                audit.await()
            }
        }
    }.fold(
        onSuccess = { Result.Success(it) },
        onFailure = { Result.Error(it) }
    )
}

// Extension functions๋กœ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ™•์žฅ
fun String.isValidEmail(): Boolean = 
    matches("""^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$""".toRegex())

fun <T> List<T>.chunkedParallel(size: Int, block: suspend (List<T>) -> Unit) = runBlocking {
    chunked(size).map { chunk ->
        async { block(chunk) }
    }.awaitAll()
}

// ํƒ€์ž… ์•ˆ์ „ํ•œ ์ฟผ๋ฆฌ ๋นŒ๋”
class UserQueryBuilder {
    private val criteria = mutableListOf<String>()
    private val parameters = mutableMapOf<String, Any>()
    
    fun byEmail(email: String) = apply {
        criteria.add("email = :email")
        parameters["email"] = email
    }
    
    fun byAgeRange(min: Int, max: Int) = apply {
        criteria.add("age BETWEEN :minAge AND :maxAge")
        parameters["minAge"] = min
        parameters["maxAge"] = max
    }
    
    fun activeOnly() = apply {
        criteria.add("active = true")
    }
    
    fun build(): Pair<String, Map<String, Any>> {
        val query = "SELECT * FROM users" + 
            if (criteria.isNotEmpty()) " WHERE " + criteria.joinToString(" AND ")
            else ""
        return query to parameters
    }
}

Java/Kotlin ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ „๋žต

bash
# JVM ์„ฑ๋Šฅ ํŠœ๋‹
claude "Java/Kotlin ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ JVM ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•ด์ค˜.
- G1GC vs ZGC vs Parallel GC ๋น„๊ต ๋ถ„์„
- ํž™ ํฌ๊ธฐ์™€ ๋ฉ”ํƒ€์ŠคํŽ˜์ด์Šค ํŠœ๋‹
- JIT ์ปดํŒŒ์ผ๋Ÿฌ ์ตœ์ ํ™” ์˜ต์…˜
- ์Šค๋ ˆ๋“œ ๋กœ์ปฌ ํ• ๋‹น ๋ฒ„ํผ(TLAB) ์„ค์ •
- Flight Recorder๋กœ ์„ฑ๋Šฅ ํ”„๋กœํŒŒ์ผ๋ง"

# ๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™”
claude "๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ตœ์ ํ™”ํ•˜๊ณ  GC ์••๋ฐ•์„ ์ค„์—ฌ์ค˜.
- ๊ฐ์ฒด ํ’€๋ง๊ณผ ์žฌ์‚ฌ์šฉ ์ „๋žต
- ์˜คํ”„ํž™ ์บ์‹ฑ ๊ตฌํ˜„
- WeakReference์™€ SoftReference ํ™œ์šฉ
- ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ํƒ์ง€์™€ ํ•ด๊ฒฐ
- ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌ๋ฐ ์ฒ˜๋ฆฌ"

# ๋™์‹œ์„ฑ ์ตœ์ ํ™”
claude "Java/Kotlin์˜ ๋™์‹œ์„ฑ ๊ธฐ๋Šฅ์„ ์ตœ์ ํ™”ํ•ด์ค˜.
- Virtual Threads (Project Loom) ํ™œ์šฉ
- CompletableFuture vs Kotlin Coroutines ๋น„๊ต
- ๋ฝํ”„๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ ๊ตฌํ˜„
- Actor ๋ชจ๋ธ๊ณผ CSP ํŒจํ„ด
- ๋ฐฑํ”„๋ ˆ์…”์™€ ํ”Œ๋กœ์šฐ ์ œ์–ด"

Java/Kotlin ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ CLAUDE.md ์˜ˆ์‹œ

๋Œ€๊ทœ๋ชจ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์—์„œ์˜ ์ข…ํ•ฉ์ ์ธ ๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ๋ผ์ธ

markdown
# Java/Kotlin Enterprise Guidelines

## ์–ธ์–ด ์„ ํƒ ๊ธฐ์ค€
- **์‹ ๊ทœ ๊ฐœ๋ฐœ**: Kotlin ์šฐ์„ , ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ํ‘œํ˜„
- **๋ ˆ๊ฑฐ์‹œ ํ†ตํ•ฉ**: Java ์œ ์ง€, ์ ์ง„์  Kotlin ๋„์ž…
- **์„ฑ๋Šฅ ํฌ๋ฆฌํ‹ฐ์ปฌ**: ํ”„๋กœํŒŒ์ผ๋ง ํ›„ ๊ฒฐ์ •
- **ํŒ€ ์—ญ๋Ÿ‰**: ํ•™์Šต ๊ณก์„  ๊ณ ๋ คํ•œ ๋‹จ๊ณ„์  ๋„์ž…

## Java ๊ฐœ๋ฐœ ๊ทœ์น™
- **๋ฒ„์ „**: Java 17+ LTS ๋ฒ„์ „ ์‚ฌ์šฉ
- **๊ธฐ๋Šฅ ํ™œ์šฉ**: Records, Pattern Matching, Sealed Classes
- **Null ์ฒ˜๋ฆฌ**: Optional ์ ๊ทน ํ™œ์šฉ, null ๋ฆฌํ„ด ๊ธˆ์ง€
- **์ŠคํŠธ๋ฆผ**: ์ปฌ๋ ‰์…˜ ์ฒ˜๋ฆฌ๋Š” Stream API ์‚ฌ์šฉ
- **๋ฌธ์ž์—ด**: Text Blocks๋กœ ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ

## Kotlin ๊ฐœ๋ฐœ ๊ทœ์น™
- **Null Safety**: nullable ํƒ€์ž… ๋ช…์‹œ์  ์ฒ˜๋ฆฌ
- **๋ถˆ๋ณ€์„ฑ**: val ์„ ํ˜ธ, ๋ถˆ๋ณ€ ์ปฌ๋ ‰์…˜ ์‚ฌ์šฉ
- **ํ™•์žฅ ํ•จ์ˆ˜**: ๊ธฐ์กด ํด๋ž˜์Šค ํ™•์žฅ, ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋Œ€์ฒด
- **๋ฐ์ดํ„ฐ ํด๋ž˜์Šค**: DTO์™€ Value Object ํ‘œํ˜„
- **์ฝ”๋ฃจํ‹ด**: ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์˜ ๊ธฐ๋ณธ ์„ ํƒ

## Spring Boot ํŒจํ„ด
```kotlin
// ์ปจํŠธ๋กค๋Ÿฌ (RESTful API)
@RestController
@RequestMapping("/api/v1/users")
@Validated
class UserController(
    private val userService: UserService
) {
    @GetMapping("/{id}")
    suspend fun getUser(
        @PathVariable @Positive id: Long
    ): ResponseEntity<UserDto> = 
        userService.findById(id)
            .map { ResponseEntity.ok(it) }
            .getOrElse { 
                when (it) {
                    is UserNotFoundException -> ResponseEntity.notFound().build()
                    else -> ResponseEntity.internalServerError().build()
                }
            }
    
    @PostMapping
    suspend fun createUser(
        @Valid @RequestBody request: CreateUserRequest
    ): ResponseEntity<UserDto> = 
        userService.createUser(request)
            .map { ResponseEntity.status(201).body(it) }
            .getOrElse { ResponseEntity.badRequest().build() }
}

// ์„œ๋น„์Šค ๊ณ„์ธต (๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง)
@Service
@Transactional
class UserService(
    private val userRepository: UserRepository,
    private val passwordEncoder: PasswordEncoder,
    private val eventPublisher: ApplicationEventPublisher
) {
    suspend fun createUser(request: CreateUserRequest): Result<UserDto> = 
        runCatching {
            validateUniqueConstraints(request)
            
            val user = User(
                email = request.email,
                username = request.username,
                password = passwordEncoder.encode(request.password)
            )
            
            userRepository.save(user).also {
                eventPublisher.publishEvent(UserCreatedEvent(it.id))
            }
        }.mapCatching { it.toDto() }
}

ํ…Œ์ŠคํŠธ ์ „๋žต

kotlin
// ํ…Œ์ŠคํŠธ ์˜ˆ์‹œ
@ExtendWith(MockKExtension::class)
class UserServiceTest {
    @MockK
    private lateinit var userRepository: UserRepository
    
    @MockK
    private lateinit var passwordEncoder: PasswordEncoder
    
    @InjectMockKs
    private lateinit var userService: UserService
    
    @Test
    fun `should create user successfully`() = runTest {
        // Given
        val request = CreateUserRequestBuilder()
            .withEmail("test@example.com")
            .withUsername("testuser")
            .build()
            
        every { passwordEncoder.encode(any()) } returns "encoded_password"
        coEvery { userRepository.save(any()) } returns UserBuilder().build()
        
        // When
        val result = userService.createUser(request)
        
        // Then
        result.isSuccess shouldBe true
        coVerify { userRepository.save(any()) }
    }
}

์„ฑ๋Šฅ ๊ธฐ์ค€

๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ

๋ฐฐํฌ์™€ ์šด์˜

Java/Kotlin ์‹ค์ „ ๋””๋ฒ„๊น…๊ณผ ๋ฌธ์ œ ํ•ด๊ฒฐ

bash
# ๋ณต์žกํ•œ ๋™์‹œ์„ฑ ๋ฌธ์ œ ํ•ด๊ฒฐ
claude "๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฐ๋“œ๋ฝ์„ ํƒ์ง€ํ•˜๊ณ  ํ•ด๊ฒฐํ•ด์ค˜.
- ์Šค๋ ˆ๋“œ ๋คํ”„ ๋ถ„์„๊ณผ ํ•ด์„
- ๋ฝ ๊ฒฝํ•ฉ ์ง€์  ์‹๋ณ„
- ๋ฝํ”„๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ ์šฉ
- Virtual Threads ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
- ์„ฑ๋Šฅ ๋ฒค์น˜๋งˆํฌ์™€ ๊ฒ€์ฆ"

# ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ์ง„๋‹จ
claude "Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ์ง„๋‹จํ•˜๊ณ  ํ•ด๊ฒฐํ•ด์ค˜.
- ํž™ ๋คํ”„ ๋ถ„์„๊ณผ MAT ๋„๊ตฌ ํ™œ์šฉ
- ๊ฐ•ํ•œ ์ฐธ์กฐ ์ฒด์ธ ์ถ”์ 
- ๋ฆฌ์Šค๋„ˆ์™€ ์ฝœ๋ฐฑ ๋ˆ„์ˆ˜ ํƒ์ง€
- ์˜คํ”„ํž™ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ํ™•์ธ
- ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ํŒจํ„ด ์ตœ์ ํ™”"

# ํ”„๋กœ๋•์…˜ ์ด์Šˆ ๋Œ€์‘
claude "ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์˜ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ง„๋‹จํ•ด์ค˜.
- APM ๋„๊ตฌ๋กœ ๋ณ‘๋ชฉ ์ง€์  ์‹๋ณ„
- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ ์„ฑ๋Šฅ ๋ถ„์„
- GC ๋กœ๊ทธ ๋ถ„์„๊ณผ ํŠœ๋‹
- JIT ์ปดํŒŒ์ผ๋Ÿฌ ์ตœ์ ํ™” ํ™•์ธ
- ์ž๋™ ๋ณต๊ตฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ๊ตฌํ˜„"

6.4 Go

Go๋Š” ๋‹จ์ˆœํ•จ๊ณผ ์„ฑ๋Šฅ์„ ๋™์‹œ์— ์ถ”๊ตฌํ•˜๋Š” ์–ธ์–ด๋กœ, ๋ช…์‹œ์ ์ด๊ณ  ์ฝ๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ๊ฐ•๋ ฅํ•œ ๋™์‹œ์„ฑ ๋ชจ๋ธ๊ณผ ์ปดํŒŒ์ผ ์†๋„, ๊ทธ๋ฆฌ๊ณ  ์ตœ์†Œํ•œ์˜ ๋Ÿฐํƒ€์ž„ ์˜์กด์„ฑ์œผ๋กœ ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐœ๋ฐœ์— ์ด์ƒ์ ์ž…๋‹ˆ๋‹ค. Claude Code๋Š” Go์˜ ๊ด€์šฉ๊ตฌ์  ํŒจํ„ด๊ณผ ๋™์‹œ์„ฑ ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ๋ฅผ ํ™œ์šฉํ•œ ํšจ์œจ์ ์ธ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Go ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

Go ํ”„๋กœ์ ํŠธ์˜ ์„ฑ๊ณต์€ ๋ช…ํ™•ํ•œ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ์™€ ์˜์กด์„ฑ ๊ด€๋ฆฌ์—์„œ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. Claude Code๋Š” Go ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ํ‘œ์ค€ ํ”„๋กœ์ ํŠธ ๋ ˆ์ด์•„์›ƒ๊ณผ Clean Architecture ์›์น™์„ ์ ์šฉํ•œ ๊ตฌ์กฐ๋ฅผ ์ œ์•ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}, "flowchart": {"htmlLabels": false, "useMaxWidth": false}}}%%
graph TD
    A[Go ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ] --> B[cmd/<br/>๋ฉ”์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜<br/>์ง„์ž…์ ๊ณผ ์‹คํ–‰ ํŒŒ์ผ]
    A --> C[internal/<br/>๋‚ด๋ถ€ ํŒจํ‚ค์ง€<br/>์™ธ๋ถ€์—์„œ import ๋ถˆ๊ฐ€]
    A --> D[pkg/<br/>๊ณต๊ฐœ ํŒจํ‚ค์ง€<br/>์™ธ๋ถ€์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ]
    A --> E[api/<br/>API ์ •์˜<br/>OpenAPI, gRPC ์Šคํ‚ค๋งˆ]
    A --> F[web/<br/>์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜<br/>์ •์  ํŒŒ์ผ, ํ…œํ”Œ๋ฆฟ]
    A --> G[configs/<br/>์„ค์ • ํŒŒ์ผ<br/>ํ™˜๊ฒฝ๋ณ„ ๊ตฌ์„ฑ]
    
    C --> H[handler/<br/>HTTP ํ•ธ๋“ค๋Ÿฌ]
    C --> I[service/<br/>๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง]
    C --> J[repository/<br/>๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ]
    C --> K[domain/<br/>๋„๋ฉ”์ธ ๋ชจ๋ธ]
    
    classDef publicStyle fill:#f1f5f9,stroke:#475569,stroke-width:2px,color:#1e293b
    classDef internalStyle fill:#e2e8f0,stroke:#334155,stroke-width:2px,color:#1e293b
    
    class B,D,E,F,G publicStyle
    class C,H,I,J,K internalStyle
bash
claude "Go ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด์ค˜.
Clean Architecture๋ฅผ ์ ์šฉํ•˜๊ณ , 
์˜์กด์„ฑ ์ฃผ์ž…๊ณผ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•ด์„œ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ค˜"

Go ๋™์‹œ์„ฑ ํŒจํ„ด

1. ๊ณ ๋ฃจํ‹ด๊ณผ ์ฑ„๋„

bash
claude "์ด ์ˆœ์ฐจ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๋ฅผ ๊ณ ๋ฃจํ‹ด๊ณผ ์ฑ„๋„์„ ์‚ฌ์šฉํ•ด์„œ ๋ณ‘๋ ฌํ™”ํ•ด์ค˜.
์ ์ ˆํ•œ ์—๋Ÿฌ ์ฒ˜๋ฆฌ์™€ ์ปจํ…์ŠคํŠธ ์ทจ์†Œ๋„ ๊ตฌํ˜„ํ•ด์ค˜"

2. ๋™์‹œ์„ฑ ํŒจํ„ด

bash
claude "Worker Pool ํŒจํ„ด์„ ๊ตฌํ˜„ํ•ด์ค˜.
์ž‘์—… ํ, ์›Œ์ปค ๊ณ ๋ฃจํ‹ด, ๊ฒฐ๊ณผ ์ˆ˜์ง‘์„ ํฌํ•จํ•˜๊ณ ,
graceful shutdown๋„ ์ง€์›ํ•ด์ค˜"

Go CLAUDE.md ์˜ˆ์‹œ

markdown
# Go Project Guidelines

## ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

cmd/ # ๋ฉ”์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

internal/ # ๋‚ด๋ถ€ ํŒจํ‚ค์ง€

pkg/ # ๊ณต๊ฐœ ํŒจํ‚ค์ง€

api/ # API ์ •์˜


## ์ฝ”๋”ฉ ๊ทœ์น™
- ์—๋Ÿฌ๋Š” ํ•ญ์ƒ ์ฒ˜๋ฆฌ
- ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์‚ฌ์šฉํ•˜๋Š” ์ชฝ์—์„œ ์ •์˜
- ๊ณ ๋ฃจํ‹ด ๋ฆฌํฌ ๋ฐฉ์ง€

## ์—๋Ÿฌ ์ฒ˜๋ฆฌ
```go
if err != nil {
    return fmt.Errorf("failed to process: %w", err)
}

ํ…Œ์ŠคํŠธ

6.5 Rust

Rust๋Š” ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ๋™์‹œ์— ๋ณด์žฅํ•˜๋Š” ์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ, ์†Œ์œ ๊ถŒ ์‹œ์Šคํ…œ๊ณผ ํƒ€์ž… ์‹œ์Šคํ…œ์„ ํ†ตํ•ด ์ปดํŒŒ์ผ ํƒ€์ž„์— ๋งŽ์€ ๋ฒ„๊ทธ๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Claude Code๋Š” Rust์˜ ๋…ํŠนํ•œ ์†Œ์œ ๊ถŒ ๋ชจ๋ธ๊ณผ ํŠธ๋ ˆ์ดํŠธ ์‹œ์Šคํ…œ์„ ์ดํ•ดํ•˜๊ณ , ์•ˆ์ „ํ•˜๋ฉด์„œ๋„ ์„ฑ๋Šฅ์ด ๋›ฐ์–ด๋‚œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Rust ์•ˆ์ „์„ฑ ํ™œ์šฉ

Rust์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „์„ฑ์„ ๋Ÿฐํƒ€์ž„ ๋น„์šฉ ์—†์ด ๋ณด์žฅํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. Claude Code๋Š” ์†Œ์œ ๊ถŒ, ์ฐจ์šฉ, ์ƒ๋ช…์ฃผ๊ธฐ ๋“ฑ Rust์˜ ํ•ต์‹ฌ ๊ฐœ๋…์„ ํ™œ์šฉํ•œ ์•ˆ์ „ํ•œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

bash
claude "์ด C++ ์ฝ”๋“œ๋ฅผ Rust๋กœ ์žฌ์ž‘์„ฑํ•ด์ค˜.
์†Œ์œ ๊ถŒ, ์ƒ๋ช…์ฃผ๊ธฐ, ํŠธ๋ ˆ์ดํŠธ๋ฅผ ํ™œ์šฉํ•ด์„œ
๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•˜๋ฉด์„œ๋„ ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•ด์ค˜"

Rust ์—๋Ÿฌ ์ฒ˜๋ฆฌ

1. Result ํƒ€์ž… ํ™œ์šฉ

bash
claude "์ด ํ•จ์ˆ˜๋“ค์˜ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐœ์„ ํ•ด์ค˜.
Result ํƒ€์ž…๊ณผ ? ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ,
์ปค์Šคํ…€ ์—๋Ÿฌ ํƒ€์ž…๋„ ์ •์˜ํ•ด์ค˜"

2. ๋น„๋™๊ธฐ Rust

bash
claude "Tokio๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋น„๋™๊ธฐ ์›น ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค์–ด์ค˜.
๋™์‹œ ์š”์ฒญ ์ฒ˜๋ฆฌ, ํƒ€์ž„์•„์›ƒ, ๊ทธ๋ฆฌ๊ณ  graceful shutdown์„ ๊ตฌํ˜„ํ•ด์ค˜"

Rust CLAUDE.md ์˜ˆ์‹œ

markdown
# Rust Project Guidelines

## ์•ˆ์ „์„ฑ ๊ทœ์น™
- unsafe ์ตœ์†Œํ™”
- unwrap() ์‚ฌ์šฉ ๊ธˆ์ง€
- clippy ๊ฒฝ๊ณ  ๋ชจ๋‘ ํ•ด๊ฒฐ

## ์—๋Ÿฌ ์ฒ˜๋ฆฌ
```rust
use thiserror::Error;

#[derive(Error, Debug)]
pub enum AppError {
    #[error("IO error: {0}")]
    Io(#[from] std::io::Error),
    
    #[error("Parse error: {0}")]
    Parse(String),
}

์„ฑ๋Šฅ

์˜์กด์„ฑ


## ์–ธ์–ด ๊ฐ„ ์ƒํ˜ธ ์šด์šฉ์„ฑ

ํ˜„๋Œ€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ๊ฐ ์–ธ์–ด์˜ ์žฅ์ ์„ ํ™œ์šฉํ•˜๋Š” ๋ฉ€ํ‹ฐ ์–ธ์–ด ์•„ํ‚คํ…์ฒ˜๊ฐ€ ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. Claude Code๋Š” ์–ธ์–ด ๊ฐ„ ๊ฒฝ๊ณ„๋ฅผ ๋„˜๋‚˜๋“œ๋Š” ํ†ตํ•ฉ ์†”๋ฃจ์…˜์„ ์„ค๊ณ„ํ•˜๊ณ , ํƒ€์ž… ์•ˆ์ „์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ๋‹ค์–‘ํ•œ ์–ธ์–ด๋กœ ๊ตฌ์„ฑ๋œ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

### ๋‹ค๊ตญ์–ด ํ”„๋กœ์ ํŠธ

์„œ๋กœ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๊ฐœ๋ฐœ๋œ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ํ†ตํ•ฉํ•  ๋•Œ๋Š” API ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ผ๊ด€์„ฑ๊ณผ ํƒ€์ž… ์•ˆ์ „์„ฑ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. Claude Code๋Š” ์ด๋Ÿฌํ•œ ํ†ตํ•ฉ ๊ณผ์ •์„ ์ž๋™ํ™”ํ•˜๊ณ  ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

```bash
claude "Python ๋ฐฑ์—”๋“œ์™€ TypeScript ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š”
ํƒ€์ž… ์•ˆ์ „ํ•œ API ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ƒ์„ฑํ•ด์ค˜.
OpenAPI ์ŠคํŽ™์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž๋™ ์ƒ์„ฑ๋˜๋„๋ก ํ•ด์ค˜"

FFI (Foreign Function Interface)

bash
claude "Rust๋กœ ์ž‘์„ฑ๋œ ๊ณ ์„ฑ๋Šฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ 
Python์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐ”์ธ๋”ฉ์„ ๋งŒ๋“ค์–ด์ค˜.
PyO3๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ํƒ€์ž… ๋ณ€ํ™˜๋„ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•ด์ค˜"

์–ธ์–ด๋ณ„ ์ตœ์ ํ™” ์ „๋žต

๊ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์„ค๊ณ„ ๋ชฉํ‘œ์™€ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด, ์–ธ์–ด๋ณ„๋กœ ์ตœ์ ํ™” ์ ‘๊ทผ ๋ฐฉ์‹์ด ๋‹ฌ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค. Claude Code๋Š” ๊ฐ ์–ธ์–ด์˜ ํŠน์„ฑ์— ๋งž๋Š” ์ตœ์ ํ™” ์ „๋žต์„ ์ ์šฉํ•˜์—ฌ ์ตœ์ƒ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1. ์„ฑ๋Šฅ ์ค‘์‹ฌ ์–ธ์–ด (C++, Rust, Go)

์„ฑ๋Šฅ์ด ํ•ต์‹ฌ ์š”๊ตฌ์‚ฌํ•ญ์ธ ์–ธ์–ด๋“ค์€ ์‹คํ–‰ ์†๋„, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰, ์ฒ˜๋ฆฌ๋Ÿ‰ ์ตœ์ ํ™”์— ์ง‘์ค‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Claude Code๋Š” ๋ฒค์น˜๋งˆํ‚น๊ณผ ํ”„๋กœํŒŒ์ผ๋ง์„ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ์ตœ์ ํ™”๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

bash
# ๋ฒค์น˜๋งˆํฌ ๊ธฐ๋ฐ˜ ์ตœ์ ํ™”
claude "์ด ํ•จ์ˆ˜์˜ ์„ฑ๋Šฅ์„ ํ”„๋กœํŒŒ์ผ๋งํ•˜๊ณ  ์ตœ์ ํ™”ํ•ด์ค˜.
๋ฒค์น˜๋งˆํฌ๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ๋ณ‘๋ชฉ ์ง€์ ์„ ์ฐพ์•„์„œ ๊ฐœ์„ ํ•ด์ค˜"

2. ์ƒ์‚ฐ์„ฑ ์ค‘์‹ฌ ์–ธ์–ด (Python, Ruby, JavaScript)

bash
# ๊ฐœ๋ฐœ ์†๋„ ์ตœ์ ํ™”
claude "์ด ํ”„๋กœํ† ํƒ€์ž…์„ ๋น ๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•ด์ค˜.
์ผ๋‹จ ์ž‘๋™ํ•˜๊ฒŒ ๋งŒ๋“  ํ›„, ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์ตœ์ ํ™”ํ•ด์ค˜"

3. ์•ˆ์ „์„ฑ ์ค‘์‹ฌ ์–ธ์–ด (Rust, Haskell, Kotlin)

bash
# ํƒ€์ž… ์‹œ์Šคํ…œ ํ™œ์šฉ
claude "์ด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ํƒ€์ž… ์‹œ์Šคํ…œ์œผ๋กœ ๋ณด์žฅํ•ด์ค˜.
๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์—†๋„๋ก ์ปดํŒŒ์ผ ํƒ€์ž„์— ๊ฒ€์ฆํ•ด์ค˜"

์‹ค์ „ ํŒ: ์–ธ์–ด ์„ ํƒ ๊ฐ€์ด๋“œ

ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์€ ํ”„๋กœ์ ํŠธ ์„ฑ๊ณต์˜ ํ•ต์‹ฌ ์š”์†Œ์ž…๋‹ˆ๋‹ค. Claude Code๋Š” ๋‹ค์–‘ํ•œ ์š”์†Œ๋ฅผ ์ข…ํ•ฉ์ ์œผ๋กœ ๊ณ ๋ คํ•˜์—ฌ ์ตœ์ ์˜ ์–ธ์–ด ์„ ํƒ์„ ๋„์™€์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ธ์–ด ์„ ํƒ ๊ธฐ์ค€

ํšจ๊ณผ์ ์ธ ์–ธ์–ด ์„ ํƒ์„ ์œ„ํ•ด์„œ๋Š” ๊ธฐ์ˆ ์  ์š”๊ตฌ์‚ฌํ•ญ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํŒ€์˜ ์—ญ๋Ÿ‰, ํ”„๋กœ์ ํŠธ ์ผ์ •, ์žฅ๊ธฐ์  ์œ ์ง€๋ณด์ˆ˜์„ฑ ๋“ฑ์„ ์ข…ํ•ฉ์ ์œผ๋กœ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

bash
# ํ”„๋กœ์ ํŠธ ์š”๊ตฌ์‚ฌํ•ญ ๋ถ„์„
claude "์ด ํ”„๋กœ์ ํŠธ์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ถ„์„ํ•˜๊ณ ,
๊ฐ€์žฅ ์ ํ•ฉํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์ถ”์ฒœํ•ด์ค˜.
์„ฑ๋Šฅ, ๊ฐœ๋ฐœ ์†๋„, ํŒ€ ์—ญ๋Ÿ‰, ์ƒํƒœ๊ณ„๋ฅผ ๊ณ ๋ คํ•ด์ค˜"

์–ธ์–ด๋ณ„ ์ ํ•ฉํ•œ ๋„๋ฉ”์ธ

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}, "flowchart": {"htmlLabels": false, "useMaxWidth": false}}}%%
graph LR
    subgraph languages [์–ธ์–ด๋ณ„ ์ „๋ฌธ ๋ถ„์•ผ]
        A[Python<br/>๋ฐ์ดํ„ฐ ๊ณผํ•™, AI/ML<br/>์Šคํฌ๋ฆฝํŒ…] 
        B[JavaScript/TS<br/>์›น ๊ฐœ๋ฐœ<br/>ํ’€์Šคํƒ]
        C[Go<br/>๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค<br/>DevOps]
        D[Rust<br/>์‹œ์Šคํ…œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ<br/>WebAssembly]
        E[Java/Kotlin<br/>์—”ํ„ฐํ”„๋ผ์ด์ฆˆ<br/>Android]
    end
    
    subgraph strengths [ํ•ต์‹ฌ ๊ฐ•์ ]
        F[ํ’๋ถ€ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ<br/>๋น ๋ฅธ ํ”„๋กœํ† ํƒ€์ดํ•‘]
        G[์œ ๋‹ˆ๋ฒ„์„ค ์–ธ์–ด<br/>์ƒํƒœ๊ณ„ ํ†ตํ•ฉ]
        H[๋‹จ์ˆœํ•จ๊ณผ ์„ฑ๋Šฅ<br/>๋™์‹œ์„ฑ ๋ชจ๋ธ]
        I[์•ˆ์ „์„ฑ๊ณผ ์„ฑ๋Šฅ<br/>๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ]
        J[์„ฑ์ˆ™ํ•œ ์ƒํƒœ๊ณ„<br/>ํ”Œ๋žซํผ ์•ˆ์ •์„ฑ]
    end
    
    A -.-> F
    B -.-> G
    C -.-> H
    D -.-> I
    E -.-> J
    
    classDef langStyle fill:#e2e8f0,stroke:#334155,stroke-width:2px,color:#1e293b
    classDef strengthStyle fill:#f1f5f9,stroke:#475569,stroke-width:2px,color:#1e293b
    
    class A,B,C,D,E langStyle
    class F,G,H,I,J strengthStyle

๋งˆ์น˜๋ฉฐ

์–ธ์–ด๋ณ„ ํŠน์„ฑ์„ ๊นŠ์ด ์ดํ•ดํ•˜๊ณ  ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์€ Claude Code๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉํ•˜๋Š” ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. ๊ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ๊ณ ์œ ํ•œ ์ฒ ํ•™๊ณผ ๊ฐ•์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•  ๋•Œ ์ง„์ •ํ•œ ๊ฐ€์น˜๋ฅผ ๋ฐœํœ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์›์น™ ์š”์•ฝ

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}, "flowchart": {"htmlLabels": false, "useMaxWidth": false}}}%%
mindmap
  root((ํ•ต์‹ฌ ์›์น™))
    ์–ธ์–ด ์ฒ ํ•™ ์กด์ค‘
      ๊ฐ€์น˜์™€ ์„ค๊ณ„ ์›์น™ ์ดํ•ด
      ์–ธ์–ด ๊ณ ์œ  ํŠน์„ฑ ๋ฐ˜์˜
      ํŒŒ๋ผ๋‹ค์ž„ ์ผ๊ด€์„ฑ ์œ ์ง€
    ์ƒํƒœ๊ณ„ ํ™œ์šฉ
      ํ‘œ์ค€ ๋„๊ตฌ ์ ๊ทน ํ™œ์šฉ
      ๊ฒ€์ฆ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ
      ํ”„๋ ˆ์ž„์›Œํฌ ๋ชจ๋ฒ” ์‚ฌ๋ก€
      ๊ฐœ๋ฐœ ํšจ์œจ์„ฑ ๊ทน๋Œ€ํ™”
    ๊ด€์šฉ๊ตฌ ๋”ฐ๋ฅด๊ธฐ
      ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ฒ€์ฆ ํŒจํ„ด
      ์ผ๊ด€๋œ ์ฝ”๋”ฉ ์Šคํƒ€์ผ
      ํŒ€ ํ˜‘์—… ํ–ฅ์ƒ
      ์œ ์ง€๋ณด์ˆ˜์„ฑ ํ™•๋ณด
    ๊ฐ•์  ๊ทน๋Œ€ํ™”
      ๊ณ ์œ  ์žฅ์  ์‹๋ณ„
      ์ ํ•ฉํ•œ ์•„ํ‚คํ…์ฒ˜ ์ ์šฉ
      ์„ฑ๋Šฅ ํŠน์„ฑ ํ™œ์šฉ
      ๋ฌธ์ œ ์˜์—ญ ์ตœ์ ํ™”
  1. ์–ธ์–ด ์ฒ ํ•™ ์กด์ค‘: ๊ฐ ์–ธ์–ด๊ฐ€ ์ถ”๊ตฌํ•˜๋Š” ๊ฐ€์น˜์™€ ์„ค๊ณ„ ์›์น™์„ ๊นŠ์ด ์ดํ•ดํ•˜๊ณ  ์ฝ”๋“œ์— ๋ฐ˜์˜
  2. ์ƒํƒœ๊ณ„ ํ™œ์šฉ: ์–ธ์–ด๋ณ„ ํ‘œ์ค€ ๋„๊ตฌ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ ๊ทน ํ™œ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ ํšจ์œจ์„ฑ ๊ทน๋Œ€ํ™”
  3. ๊ด€์šฉ๊ตฌ ๋”ฐ๋ฅด๊ธฐ: ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๊ฒ€์ฆ๋œ ์ฝ”๋”ฉ ์Šคํƒ€์ผ๊ณผ ํŒจํ„ด์„ ์ค€์ˆ˜ํ•˜์—ฌ ์ผ๊ด€์„ฑ ์žˆ๋Š” ์ฝ”๋“œ ์ž‘์„ฑ
  4. ๊ฐ•์  ๊ทน๋Œ€ํ™”: ๊ฐ ์–ธ์–ด์˜ ๊ณ ์œ ํ•œ ์žฅ์ ์„ ์‚ด๋ฆฌ๋Š” ์•„ํ‚คํ…์ฒ˜์™€ ์„ค๊ณ„ ํŒจํ„ด ์ ์šฉ

์‹ค๋ฌด ์ ์šฉ ์ „๋žต

๋‹ค์Œ ์žฅ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์–ธ์–ด๋ณ„ ํŠน์„ฑ์„ ํ™œ์šฉํ•˜์—ฌ ํšจ์œจ์ ์ธ ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค ์ „๋ฐ˜์— ๊ฑธ์ณ Claude Code๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ ์ƒ์‚ฐ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ์ „๋žต์„ ํƒ๊ตฌํ•ด๋ด…์‹œ๋‹ค.


[S2ST5] Frontend Design โ€” ํ”„๋ก ํŠธ์—”๋“œ ๋””์ž์ธ ํ”Œ๋Ÿฌ๊ทธ์ธ

[S2ST6] Laravel Boost โ€” Laravel ํ”„๋ ˆ์ž„์›Œํฌ ๋ถ€์ŠคํŠธ

[S2ST7] Books โ€” ์ค‘๊ธ‰ ๊ตฌ์กฐ ์„ค์ • ํ•™์Šต

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /ํ•™์Šต์šฉ_Books_New/

[S2ST8] ์‹ค์ „ Tips โ€” DB/ํ”„๋กœ์ ํŠธ/๊ฐœ๋ฐœ ์ค‘๊ธ‰

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /Tips/

[S2ST9] ์™ธ๋ถ€ ์—ฐ๋™ Guide โ€” 5๋Œ€ ์„œ๋น„์Šค ์ค‘๊ธ‰

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /์™ธ๋ถ€_์—ฐ๋™_์„ค์ •_Guide/

[S2ST10] .claude References โ€” ADK ์•„ํ‚คํ…์ฒ˜

๐Ÿ“ ๊ฒฝ๋กœ: .claude/references/

S2WF โ€” ์›Œํฌํ”Œ๋กœ์šฐ (Workflow)

[S2WF1(์„น์…˜06b)] ํ”„๋กฌํ”„ํŒ… ๊ณ ๊ธ‰ ๊ธฐ๋ฒ•

7.2 ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ(TDD) ์‹ค์ฒœ

ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ(TDD)์€ ๋†’์€ ํ’ˆ์งˆ์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๊ฒ€์ฆ๋œ ๋ฐฉ๋ฒ•๋ก ์ž…๋‹ˆ๋‹ค. Claude Code๋Š” TDD์˜ ๊ฐ ๋‹จ๊ณ„์—์„œ ์ ์ ˆํ•œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ƒ์„ฑ, ์ตœ์†Œ ๊ตฌํ˜„, ๊ทธ๋ฆฌ๊ณ  ๋ฆฌํŒฉํ† ๋ง์„ ์ง€์›ํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ TDD ์›์น™์„ ํšจ๊ณผ์ ์œผ๋กœ ์‹ค์ฒœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

TDD ์‚ฌ์ดํด

TDD์˜ Red-Green-Refactor ์‚ฌ์ดํด์€ ์ฝ”๋“œ ํ’ˆ์งˆ๊ณผ ์„ค๊ณ„์˜ ์ ์ง„์  ๊ฐœ์„ ์„ ํ†ตํ•ด ๊ฒฌ๊ณ ํ•œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ธฐ๋ฐ˜์ด ๋ฉ๋‹ˆ๋‹ค.

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}}}%%
flowchart LR
    A[Red<br/>์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ž‘์„ฑ] --> B[Green<br/>์ตœ์†Œ ๊ตฌํ˜„์œผ๋กœ ํ†ต๊ณผ]
    B --> C[Refactor<br/>์ฝ”๋“œ ํ’ˆ์งˆ ๊ฐœ์„ ]
    C --> A
    
    subgraph activities [TDD ํ™œ๋™]
        D[ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ •์˜<br/>์—ฃ์ง€ ์ผ€์ด์Šค ๊ณ ๋ ค<br/>์‹คํŒจ ํ™•์ธ]
        E[์ตœ์†Œํ•œ์˜ ์ฝ”๋“œ<br/>ํ…Œ์ŠคํŠธ ํ†ต๊ณผ ์ง‘์ค‘<br/>์„ฑ๋Šฅ์€ ๋‚˜์ค‘์—]
        F[์ค‘๋ณต ์ œ๊ฑฐ<br/>๊ฐ€๋…์„ฑ ํ–ฅ์ƒ<br/>์„ค๊ณ„ ๊ฐœ์„ ]
    end
    
    A -.-> D
    B -.-> E
    C -.-> F
    
    classDef cycleStyle fill:#e2e8f0,stroke:#334155,stroke-width:3px,color:#1e293b
    classDef activityStyle fill:#f1f5f9,stroke:#475569,stroke-width:2px,color:#1e293b
    
    class A,B,C cycleStyle
    class D,E,F activityStyle

TDD with Claude Code

1. Red Phase - ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

bash
claude "calculateDiscount ํ•จ์ˆ˜๋ฅผ ์œ„ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•ด์ค˜.
๋‹ค์Œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ํฌํ•จํ•ด์•ผ ํ•ด
- ์ผ๋ฐ˜ ํ• ์ธ (10%)
- VIP ํ• ์ธ (20%)
- ์ตœ๋Œ€ ํ• ์ธ ํ•œ๋„
- ์—ฃ์ง€ ์ผ€์ด์Šค (์Œ์ˆ˜, 0, null)"

2. Green Phase - ์ตœ์†Œ ๊ตฌํ˜„

bash
claude "์ž‘์„ฑํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๋Š” ์ตœ์†Œํ•œ์˜ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์ค˜.
์•„์ง ์ตœ์ ํ™”๋Š” ํ•˜์ง€ ๋ง๊ณ , ํ…Œ์ŠคํŠธ ํ†ต๊ณผ์—๋งŒ ์ง‘์ค‘ํ•ด์ค˜"

3. Refactor Phase - ๊ฐœ์„ 

bash
claude "์ด์ œ ํ…Œ์ŠคํŠธ๋Š” ์œ ์ง€ํ•˜๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ๊ฐœ์„ ํ•ด์ค˜.
์ค‘๋ณต ์ œ๊ฑฐ, ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ, ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์ง„ํ–‰ํ•ด์ค˜"

TDD ์‹ค์ „ ์˜ˆ์ œ

bash
# ์‚ฌ์šฉ์ž ์Šคํ† ๋ฆฌ
claude "์‚ฌ์šฉ์ž ์Šคํ† ๋ฆฌ: '์‚ฌ์šฉ์ž๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค'
์ด๋ฅผ ์œ„ํ•œ TDD ์‚ฌ์ดํด์„ ์‹œ์ž‘ํ•ด์ค˜"

# Claude์˜ ์‘๋‹ต ๊ณผ์ •
# 1. ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ •์˜
# 2. API ์—”๋“œํฌ์ธํŠธ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ
# 3. ์„œ๋น„์Šค ๋ ˆ์ด์–ด ํ…Œ์ŠคํŠธ ์ž‘์„ฑ
# 4. ์‹ค์ œ ๊ตฌํ˜„
# 5. ๋ฆฌํŒฉํ† ๋ง

[S2WF2(์„น์…˜21)] ํ”„๋กฌํ”„ํŠธ ํ…œํ”Œ๋ฆฟ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

์˜ค์ „: ๊ธฐ์กด ์‹œ์Šคํ…œ ์ดํ•ด
โ€” SAL Grid Edition

claude "ํ˜„์žฌ ์ฃผ๋ฌธ ์‹œ์Šคํ…œ์ด ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š”์ง€ ๋ถ„์„ํ•ด์ค˜"

์˜คํ›„: ๊ฒฐ์ œ ๊ธฐ๋Šฅ ์„ค๊ณ„
โ€” SAL Grid Edition

claude "Stripe๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฐ์ œ ๊ธฐ๋Šฅ์„ ์„ค๊ณ„ํ•ด์ค˜.

๋ณด์•ˆ, ์—๋Ÿฌ ์ฒ˜๋ฆฌ, ์žฌ์‹œ๋„ ๋กœ์ง์„ ๊ณ ๋ คํ•ด์ค˜"


### Day 2: ๊ตฌํ˜„

```bash
# ์˜ค์ „: ๋ฐฑ์—”๋“œ ๊ตฌํ˜„
claude "๊ฒฐ์ œ API ์—”๋“œํฌ์ธํŠธ๋ฅผ TDD๋กœ ๊ตฌํ˜„ํ•ด์ค˜"

# ์˜คํ›„: ํ”„๋ก ํŠธ์—”๋“œ ๊ตฌํ˜„
claude "๊ฒฐ์ œ UI๋ฅผ ๊ตฌํ˜„ํ•ด์ค˜. 
์นด๋“œ ์ •๋ณด ์ž…๋ ฅ, ๊ฒ€์ฆ, ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ํฌํ•จํ•ด์ค˜"

Day 3: ํ†ตํ•ฉ๊ณผ ํ…Œ์ŠคํŠธ

bash
# ์˜ค์ „: ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ
claude "๊ฒฐ์ œ ํ”Œ๋กœ์šฐ ์ „์ฒด๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” E2E ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ด์ค˜"

# ์˜คํ›„: ๋ฌธ์„œํ™”์™€ ๋ฐฐํฌ
claude "๊ฒฐ์ œ ๊ธฐ๋Šฅ ์‚ฌ์šฉ ๊ฐ€์ด๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ ,
๋ฐฐํฌ ์ฒดํฌ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด์ค˜"

์›Œํฌํ”Œ๋กœ์šฐ ์ตœ์ ํ™” ํŒ

1. ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ

bash
# ๊ธด ์ž‘์—… ์‹œ ์ปจํ…์ŠคํŠธ ์ €์žฅ
claude "์ง€๊ธˆ๊นŒ์ง€์˜ ์ž‘์—…์„ ์š”์•ฝํ•˜๊ณ ,
๋‹ค์Œ์— ํ•ด์•ผ ํ•  ์ผ์„ ์ •๋ฆฌํ•ด์ค˜"

# ์ปจํ…์ŠคํŠธ ๋ณต์›
claude "์ด์ „์— ์ž‘์—…ํ•˜๋˜ ๊ฒฐ์ œ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ๊ณ„์†ํ•ด์ค˜.
๋งˆ์ง€๋ง‰์œผ๋กœ ์ž‘์—…ํ•œ ๋ถ€๋ถ„๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์ค˜"

2. ๋ณ‘๋ ฌ ์ž‘์—…

bash
# ๋…๋ฆฝ์ ์ธ ์ž‘์—… ์‹๋ณ„
claude "์ด ๊ธฐ๋Šฅ๋“ค ์ค‘ ๋™์‹œ์— ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์„ ์ฐพ์•„์ค˜"

# ๋ฉ€ํ‹ฐ ์ธ์Šคํ„ด์Šค ํ™œ์šฉ
# Terminal 1: ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ
# Terminal 2: ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ
# Terminal 3: ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

3. ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ

bash
claude "๋ฐ˜๋ณต์ ์ธ ์ž‘์—…์„ ์ž๋™ํ™”ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค์–ด์ค˜
- ์ƒˆ ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑ
- ํ…Œ์ŠคํŠธ ํŒŒ์ผ ์ƒ์„ฑ
- ๋ฐฐํฌ ์ „ ์ฒดํฌ
- ์„ฑ๋Šฅ ์ธก์ •"

์›Œํฌํ”Œ๋กœ์šฐ CLAUDE.md ์˜ˆ์‹œ

markdown
# Development Workflow

## ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค
1. ์ด์Šˆ ์ƒ์„ฑ ๋ฐ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ
2. ํƒ์ƒ‰: ๊ด€๋ จ ์ฝ”๋“œ ๋ถ„์„ (30๋ถ„)
3. ๊ณ„ํš: ๊ตฌํ˜„ ์ „๋žต ์ˆ˜๋ฆฝ (30๋ถ„)
4. ๊ตฌํ˜„: TDD๋กœ ๊ฐœ๋ฐœ (2-4์‹œ๊ฐ„)
5. ๋ฆฌ๋ทฐ: ์ž์ฒด ์ฝ”๋“œ ๋ฆฌ๋ทฐ (30๋ถ„)
6. PR ์ƒ์„ฑ ๋ฐ ๋ฆฌ๋ทฐ ์š”์ฒญ

## ์ผ์ผ ๋ฃจํ‹ด
- 09:00: ์ด์Šˆ ํ™•์ธ ๋ฐ ์šฐ์„ ์ˆœ์œ„ ์ •๋ฆฌ
- 09:30: ์ง‘์ค‘ ์ฝ”๋”ฉ (ํฌ๋ชจ๋„๋กœ ๊ธฐ๋ฒ•)
- 14:00: ์ฝ”๋“œ ๋ฆฌ๋ทฐ
- 16:00: ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ
- 17:00: ๋‹ค์Œ ๋‚  ๊ณ„ํš

## ํ’ˆ์งˆ ์ฒดํฌ๋ฆฌ์ŠคํŠธ
- [ ] ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€ 80% ์ด์ƒ
- [ ] ๋ชจ๋“  ํ•จ์ˆ˜์— JSDoc
- [ ] ์„ฑ๋Šฅ ํ”„๋กœํŒŒ์ผ๋ง ์™„๋ฃŒ
- [ ] ์ ‘๊ทผ์„ฑ ๊ฒ€์‚ฌ ํ†ต๊ณผ
- [ ] ๋ณด์•ˆ ์Šค์บ” ํ†ต๊ณผ

[S2WF3(์„น์…˜05b)] ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ ์ „๋žต

8.5 ํšจ์œจ์ ์ธ ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ

์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ์ตœ์ ํ™”

์ž‘์—… ์ปจํ…์ŠคํŠธ ์ €์žฅ

bash
# Terminal 1์—์„œ ์ž‘์—… ์ค‘๋‹จ ์‹œ
claude "ํ˜„์žฌ ์ž‘์—… ์ƒํ™ฉ์„ ์š”์•ฝํ•ด์ค˜.
๋‹ค์Œ์— ๋‹ค์‹œ ์‹œ์ž‘ํ•  ๋•Œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•ด์ค˜"

์ปจํ…์ŠคํŠธ ๋ณต์›

bash
# ๋‹ค์‹œ ์ž‘์—… ์‹œ์ž‘ ์‹œ
claude "์ด์ „์— ์ž‘์—…ํ•˜๋˜ ์‚ฌ์šฉ์ž ์ธ์ฆ ๊ธฐ๋Šฅ์„ ๊ณ„์†ํ•ด์ค˜.
๋งˆ์ง€๋ง‰ ์ƒํƒœ๋ถ€ํ„ฐ ์ด์–ด์„œ ์ง„ํ–‰ํ•ด์ค˜"

๋ธŒ๋žœ์น˜๋ณ„ ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ

bash
# ๋ธŒ๋žœ์น˜ ์ „ํ™˜ ์‹œ ์ปจํ…์ŠคํŠธ ์ž๋™ ๋กœ๋“œ
claude "ํ˜„์žฌ ๋ธŒ๋žœ์น˜(feature/user-auth)์˜ ์ปจํ…์ŠคํŠธ๋ฅผ ๋กœ๋“œํ•ด์ค˜.
๊ด€๋ จ ํŒŒ์ผ๋“ค๊ณผ ์ž‘์—… ๊ธฐ๋ก์„ ํ™•์ธํ•ด์ค˜"

์ธ์Šคํ„ด์Šค ๊ฐ„ ์ •๋ณด ๊ณต์œ 

๊ณตํ†ต ๋ฌธ์„œ ํ™œ์šฉ

markdown
# shared/context.md
## ํ˜„์žฌ ์ง„ํ–‰ ์ƒํ™ฉ
- Frontend: ๋กœ๊ทธ์ธ ์ปดํฌ๋„ŒํŠธ 50% ์™„๋ฃŒ
- Backend: ์ธ์ฆ API 80% ์™„๋ฃŒ  
- Database: ์Šคํ‚ค๋งˆ ์™„๋ฃŒ, ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•„์š”
- Testing: ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ ์ค‘

## ๊ณตํ†ต ๊ฒฐ์ •์‚ฌํ•ญ
- JWT ํ† ํฐ ๋งŒ๋ฃŒ ์‹œ๊ฐ„: 1์‹œ๊ฐ„
- API ์‘๋‹ต ํ˜•์‹: { success, data, message }
- ์—๋Ÿฌ ์ฝ”๋“œ ์ฒด๊ณ„: HTTP ์ƒํƒœ ์ฝ”๋“œ + ์ปค์Šคํ…€ ์ฝ”๋“œ

8.6 ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ์‹ค์ „ ์˜ˆ์ œ

์‹œ๋‚˜๋ฆฌ์˜ค: ์ „์ž์ƒ๊ฑฐ๋ž˜ ํ”Œ๋žซํผ ๊ตฌ์ถ•

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

ecommerce/
โ”œโ”€โ”€ frontend/          # React ์•ฑ
โ”œโ”€โ”€ backend/           # Node.js API  
โ”œโ”€โ”€ admin-panel/       # ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€
โ”œโ”€โ”€ mobile-app/        # React Native
โ””โ”€โ”€ infrastructure/    # Docker, K8s

ํŒ€ ๊ตฌ์„ฑ๊ณผ ์ธ์Šคํ„ด์Šค ๋ฐฐ์น˜

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}, "flowchart": {"htmlLabels": false, "useMaxWidth": false}}}%%
graph LR
    subgraph devA [๊ฐœ๋ฐœ์ž A: ํ”„๋ก ํŠธ์—”๋“œ]
        A1[Terminal A1<br/>Frontend ๊ฐœ๋ฐœ<br/>React + TypeScript]
        A2[Terminal A2<br/>Mobile App ๊ฐœ๋ฐœ<br/>React Native]
    end
    
    subgraph devB [๊ฐœ๋ฐœ์ž B: ๋ฐฑ์—”๋“œ]
        B1[Terminal B1<br/>Backend API ๊ฐœ๋ฐœ<br/>Node.js + Express]
        B2[Terminal B2<br/>Infrastructure ๊ด€๋ฆฌ<br/>Docker + K8s]
    end
    
    subgraph devC [๊ฐœ๋ฐœ์ž C: ๊ด€๋ฆฌ ๋ฐ ํ’ˆ์งˆ]
        C1[Terminal C1<br/>Admin Panel ๊ฐœ๋ฐœ<br/>Next.js + Dashboard]
        C2[Terminal C2<br/>์ „์ฒด ํ…Œ์ŠคํŠธ ๋ฐ QA<br/>Jest + Cypress]
    end
    
    subgraph shared [๊ณต์œ  ๋ฆฌ์†Œ์Šค]
        S1[๊ณตํ†ต API ์ŠคํŽ™<br/>OpenAPI]
        S2[๊ณต์œ  ์ปดํฌ๋„ŒํŠธ<br/>Design System]
        S3[ํ†ตํ•ฉ ๋ฌธ์„œ<br/>Architecture Docs]
    end
    
    A1 --> S1
    A1 --> S2
    A2 --> S1
    A2 --> S2
    B1 --> S1
    B2 --> S3
    C1 --> S2
    C1 --> S3
    C2 --> S3
    
    classDef devStyle fill:#e2e8f0,stroke:#334155,stroke-width:2px,color:#1e293b
    classDef sharedStyle fill:#f1f5f9,stroke:#475569,stroke-width:2px,color:#1e293b
    
    class A1,A2,B1,B2,C1,C2 devStyle
    class S1,S2,S3 sharedStyle

1์ฃผ์ฐจ: ํ”„๋กœ์ ํŠธ ์„ค์ •

Day 1-2: ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ

bash
# Terminal A1 (Frontend)
claude "React + TypeScript + Vite ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์ •ํ•ด์ค˜.
์ƒํƒœ ๊ด€๋ฆฌ, ๋ผ์šฐํŒ…, UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จํ•ด์ค˜"

# Terminal B1 (Backend)
claude "Express + TypeScript + Prisma ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์ •ํ•ด์ค˜.
์ธ์ฆ, ๋กœ๊น…, ์—๋Ÿฌ ํ•ธ๋“ค๋ง์„ ํฌํ•จํ•ด์ค˜"

# Terminal B2 (Infrastructure)
claude "Docker Compose๋กœ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•ด์ค˜.
PostgreSQL, Redis, Nginx๋ฅผ ํฌํ•จํ•ด์ค˜"

Day 3-5: ํ•ต์‹ฌ ๊ธฐ๋Šฅ

bash
# ๋ณ‘๋ ฌ ๊ฐœ๋ฐœ ์‹œ์ž‘
# Terminal A1: ์ œํ’ˆ ๋ชฉ๋ก ์ปดํฌ๋„ŒํŠธ
# Terminal A2: ๋ชจ๋ฐ”์ผ ๋„ค๋น„๊ฒŒ์ด์…˜
# Terminal B1: ์ œํ’ˆ API
# Terminal B2: ์ธ์ฆ ์‹œ์Šคํ…œ
# Terminal C1: ๊ด€๋ฆฌ์ž ๋Œ€์‹œ๋ณด๋“œ

2์ฃผ์ฐจ: ํ†ตํ•ฉ๊ณผ ํ…Œ์ŠคํŠธ

bash
# Terminal A1: ํ”„๋ก ํŠธ์—”๋“œ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ
claude "React Testing Library๋กœ ํ•ต์‹ฌ ํ”Œ๋กœ์šฐ๋ฅผ ํ…Œ์ŠคํŠธํ•ด์ค˜"

# Terminal B1: API ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ  
claude "Jest + Supertest๋กœ API ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ…Œ์ŠคํŠธํ•ด์ค˜"

# Terminal C2: E2E ํ…Œ์ŠคํŠธ
claude "Playwright๋กœ ์ „์ฒด ์‚ฌ์šฉ์ž ํ”Œ๋กœ์šฐ๋ฅผ ํ…Œ์ŠคํŠธํ•ด์ค˜"

๋ฉ€ํ‹ฐํƒœ์Šคํ‚น ์ตœ์ ํ™” ํŒ


[S2WF5] Skills ์ƒํƒœ๊ณ„ โ€” ๊ฒ€์ƒ‰, ์„ค์น˜, ์ƒ์„ฑ

[S2WF6] Plugin ๊ฐœ๋ฐœ โ€” 7๊ฐœ ํ•˜์œ„ ์Šคํ‚ฌ

[S2WF7] Code Simplifier โ€” ์ฝ”๋“œ ๋‹จ์ˆœํ™”

[S2WF8] Commit Commands โ€” ์ปค๋ฐ‹ ๋ช…๋ น์–ด ์ž๋™ํ™”

[S2WF9] Ralph Loop โ€” ๋ฐ˜๋ณต ๊ฐœ์„  ๋ฃจํ”„

[S2WF10] Create Image โ€” ์ด๋ฏธ์ง€ ์ƒ์„ฑ ์‹œ์Šคํ…œ

[S2WF11] Slideshow Web โ€” ์Šฌ๋ผ์ด๋“œ์‡ผ ์›นํŽ˜์ด์ง€ ์ƒ์„ฑ

[S2WF12] Books โ€” ์ค‘๊ธ‰ ์›Œํฌํ”Œ๋กœ์šฐ ํ•™์Šต

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /ํ•™์Šต์šฉ_Books_New/

[S2WF13] ์‹ค์ „ Tips โ€” ์‚ฌ์šฉ๋ฒ•/๊ฐœ๋ฐœ/ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…/์†Œํ†ต ์ค‘๊ธ‰

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /Tips/

[S2WF14] .claude ์ฐธ๊ณ  โ€” Methods/Commands ์ค‘๊ธ‰

๐Ÿ“ ๊ฒฝ๋กœ: .claude/methods/, .claude/commands/

S2TO โ€” ํŒ€์šด์šฉ (Team Operations)

[S2TO1(์„น์…˜07b)] ์„œ๋ธŒ์—์ด์ „ํŠธ ๋ณ‘๋ ฌ ๊ฐœ๋ฐœ

bash
# Terminal 1 (Frontend Studio)
cd frontend/
claude "๋‹น์‹ ์€ ํ”„๋ก ํŠธ์—”๋“œ UX ์ „๋ฌธ๊ฐ€์ž…๋‹ˆ๋‹ค. 
๋‹ค์Œ ์—ญํ• ์— ์ง‘์ค‘ํ•ด์ฃผ์„ธ์š”
- React/Vue/Angular ์ปดํฌ๋„ŒํŠธ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„
- ๋ฐ˜์‘ํ˜• ๋””์ž์ธ๊ณผ ์ ‘๊ทผ์„ฑ ์ตœ์ ํ™”
- ์„ฑ๋Šฅ ์ค‘์‹ฌ์˜ ์ƒํƒœ ๊ด€๋ฆฌ ๊ตฌํ˜„
- ๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์„ฑ๊ณผ Progressive Web App ๊ธฐ๋Šฅ
- ์‚ฌ์šฉ์ž ์ธํ„ฐ๋ž™์…˜ ํŒจํ„ด๊ณผ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ตœ์ ํ™”

ํ˜„์žฌ ํ”„๋กœ์ ํŠธ: [ํ”„๋กœ์ ํŠธ๋ช…]
๊ธฐ์ˆ  ์Šคํƒ: React 18 + TypeScript + Vite
ํ’ˆ์งˆ ๊ธฐ์ค€: Lighthouse 95+ ์ ์ˆ˜ ์œ ์ง€"

๊ณ ๊ธ‰ ํ”„๋ก ํŠธ์—”๋“œ ํŒจํ„ด ์˜ˆ์‹œ

bash
# ์ปดํฌ๋„ŒํŠธ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„
claude "์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ๋””์ž์ธ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•ด์ค˜
- Atomic Design ๋ฐฉ๋ฒ•๋ก  ์ ์šฉ
- ํƒ€์ž… ์•ˆ์ „ํ•œ ํ…Œ๋งˆ ์‹œ์Šคํ…œ
- ์ž๋™ํ™”๋œ ์Šคํ† ๋ฆฌ๋ถ ๋ฌธ์„œํ™”
- ์ปดํฌ๋„ŒํŠธ ์„ฑ๋Šฅ ๋ฒค์น˜๋งˆํ‚น
- ์‹œ๊ฐ์  ํšŒ๊ท€ ํ…Œ์ŠคํŠธ ํ†ตํ•ฉ"

# ์ƒํƒœ ๊ด€๋ฆฌ ์ตœ์ ํ™”
claude "๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•ด์ค˜
- ์„œ๋ฒ„ ์ƒํƒœ์™€ ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ ๋ถ„๋ฆฌ
- ์˜ตํ‹ฐ๋ฏธ์Šคํ‹ฑ ์—…๋ฐ์ดํŠธ ํŒจํ„ด
- ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋™๊ธฐํ™” ์ „๋žต
- ์˜คํ”„๋ผ์ธ ๋ชจ๋“œ ์ง€์›
- ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ"

Backend Engine (์ธ์Šคํ„ด์Šค #2) - ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ๋งˆ์Šคํ„ฐ

๋ฐฑ์—”๋“œ ์ธ์Šคํ„ด์Šค๋Š” ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ์•ˆ์ „ํ•œ ์„œ๋ฒ„ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋Š” ์ „๋ฌธ๊ฐ€๋กœ์„œ ์šด์˜๋ฉ๋‹ˆ๋‹ค.

bash
# Terminal 2 (Backend Engine)
cd backend/
claude "๋‹น์‹ ์€ ๋ฐฑ์—”๋“œ ์‹œ์Šคํ…œ ์•„ํ‚คํ…ํŠธ์ž…๋‹ˆ๋‹ค.
๋‹ค์Œ ์˜์—ญ์— ์ „๋ฌธ์„ฑ์„ ๋ฐœํœ˜ํ•ด์ฃผ์„ธ์š”
- ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์™€ ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„
- RESTful/GraphQL API ์„ค๊ณ„์™€ ๋ฒ„์ „ ๊ด€๋ฆฌ
- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ตœ์ ํ™”์™€ ์บ์‹ฑ ์ „๋žต
- ๋ณด์•ˆ, ์ธ์ฆ, ๊ถŒํ•œ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ
- ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์™€ ๋ฉ”์‹œ์ง€ ํ ์•„ํ‚คํ…์ฒ˜
- ๋ชจ๋‹ˆํ„ฐ๋ง, ๋กœ๊น…, ์•Œ๋ฆผ ์‹œ์Šคํ…œ

ํ˜„์žฌ ํ™˜๊ฒฝ: Node.js/Python + PostgreSQL + Redis
์„ฑ๋Šฅ ๋ชฉํ‘œ: 99.9% ๊ฐ€์šฉ์„ฑ, 200ms ์ดํ•˜ ์‘๋‹ต์‹œ๊ฐ„
๋ณด์•ˆ ๊ธฐ์ค€: OWASP Top 10 ์™„์ „ ์ค€์ˆ˜"

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๋ฐฑ์—”๋“œ ํŒจํ„ด

bash
# ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์„ค๊ณ„
claude "ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ค๊ณ„ํ•ด์ค˜
- ์„œ๋น„์Šค ๊ฒฝ๊ณ„์™€ ๋ฐ์ดํ„ฐ ์†Œ์œ ๊ถŒ ์ •์˜
- API Gateway์™€ ์„œ๋น„์Šค ๋ฉ”์‹œ ๊ตฌ์„ฑ
- ๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜๊ณผ ์‚ฌ๊ฐ€ ํŒจํ„ด
- ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค์™€ ๋ฒŒํฌํ—ค๋“œ ํŒจํ„ด
- ์ด๋ฒคํŠธ ์†Œ์‹ฑ๊ณผ CQRS ์ ์šฉ"

# ๊ณ ์„ฑ๋Šฅ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ
claude "๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•ด์ค˜
- ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ (Kafka/RabbitMQ)
- ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ์ตœ์ ํ™”์™€ ๋ณ‘๋ ฌํ™”
- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒค๋”ฉ๊ณผ ๋ ˆํ”Œ๋ฆฌ์ผ€์ด์…˜
- ์บ์‹œ ๊ณ„์ธตํ™” ์ „๋žต (L1/L2/L3)
- ์‹ค์‹œ๊ฐ„ ๋ถ„์„๊ณผ ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘"

DevOps Pipeline (์ธ์Šคํ„ด์Šค #3) - ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ์ „๋ฌธ๊ฐ€

์ธํ”„๋ผ ์ธ์Šคํ„ด์Šค๋Š” ํ˜„๋Œ€์ ์ธ ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ํ™˜๊ฒฝ์˜ ๊ตฌ์ถ•๊ณผ ์šด์˜์„ ์ „๋‹ดํ•ฉ๋‹ˆ๋‹ค.

bash
# Terminal 3 (DevOps Pipeline)
cd infrastructure/
claude "๋‹น์‹ ์€ DevOps์™€ ํด๋ผ์šฐ๋“œ ์•„ํ‚คํ…์ฒ˜ ์ „๋ฌธ๊ฐ€์ž…๋‹ˆ๋‹ค.
๋‹ค์Œ ์˜์—ญ์„ ๋‹ด๋‹นํ•ด์ฃผ์„ธ์š”
- Infrastructure as Code (Terraform/Pulumi)
- ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ (Kubernetes/Docker Swarm)
- CI/CD ํŒŒ์ดํ”„๋ผ์ธ ์ž๋™ํ™” (GitLab CI/GitHub Actions)
- ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ ์ตœ์ ํ™” (AWS/GCP/Azure)
- ๋ณด์•ˆ ๊ฐ•ํ™”์™€ ์ปดํ”Œ๋ผ์ด์–ธ์Šค ๊ด€๋ฆฌ
- ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ์ž๋™ ์Šค์ผ€์ผ๋ง
- ์žฌํ•ด ๋ณต๊ตฌ์™€ ๋ฐฑ์—… ์ „๋žต

๋ชฉํ‘œ ํ™˜๊ฒฝ: Production-Ready Kubernetes Cluster
๊ฐ€์šฉ์„ฑ ๋ชฉํ‘œ: 99.99% uptime
๋ณด์•ˆ ๊ธฐ์ค€: SOC 2 Type II ์ค€์ˆ˜"

๊ณ ๊ธ‰ DevOps ํŒจํ„ด

bash
# GitOps ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•
claude "์™„์ „ ์ž๋™ํ™”๋œ GitOps ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌํ˜„ํ•ด์ค˜
- ๋ฉ€ํ‹ฐ ํ™˜๊ฒฝ ๋ฐฐํฌ ์ „๋žต (dev/staging/prod)
- ๋ธ”๋ฃจ-๊ทธ๋ฆฐ ๋ฐฐํฌ์™€ ์นด๋‚˜๋ฆฌ ๋ฆด๋ฆฌ์Šค
- ์ž๋™ ๋กค๋ฐฑ๊ณผ ํ—ฌ์Šค์ฒดํฌ ์‹œ์Šคํ…œ
- ์‹œํฌ๋ฆฟ ๊ด€๋ฆฌ์™€ ์•”ํ˜ธํ™” (Vault/Sealed Secrets)
- ์ฝ”๋“œ ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ์™€ ๋ณด์•ˆ ์Šค์บ”
- ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ์ž๋™ํ™”"

# ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ ํ”Œ๋žซํผ
claude "์ข…ํ•ฉ์ ์ธ ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ ํ”Œ๋žซํผ์„ ๊ตฌ์ถ•ํ•ด์ค˜
- ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘๊ณผ ์‹œ๊ฐํ™” (Prometheus/Grafana)
- ๋ถ„์‚ฐ ์ถ”์  (Jaeger/Zipkin)
- ๊ตฌ์กฐํ™”๋œ ๋กœ๊น… (ELK/Fluentd)
- ์•Œ๋ฆผ๊ณผ ์ธ์‹œ๋˜ํŠธ ๊ด€๋ฆฌ (PagerDuty/Slack)
- SLI/SLO ์ •์˜์™€ ์—๋Ÿฌ ๋ฒ„์ง“ ๊ด€๋ฆฌ"

QA & Monitoring (์ธ์Šคํ„ด์Šค #4) - ํ’ˆ์งˆ ๋ณด์ฆ ์ „๋ฌธ๊ฐ€

QA ์ธ์Šคํ„ด์Šค๋Š” ์†Œํ”„ํŠธ์›จ์–ด ํ’ˆ์งˆ์˜ ๋ชจ๋“  ์ธก๋ฉด์„ ์ฑ…์ž„์ง€๋Š” ์ „๋ฌธ๊ฐ€์ž…๋‹ˆ๋‹ค.

bash
# Terminal 4 (QA & Monitoring)
claude "๋‹น์‹ ์€ ํ’ˆ์งˆ ๋ณด์ฆ๊ณผ ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ์ „๋ฌธ๊ฐ€์ž…๋‹ˆ๋‹ค.
๋‹ค์Œ ํ’ˆ์งˆ ์˜์—ญ์„ ๋‹ด๋‹นํ•ด์ฃผ์„ธ์š”
- ํ…Œ์ŠคํŠธ ํ”ผ๋ผ๋ฏธ๋“œ ์ „๋žต (Unit/Integration/E2E)
- ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ์™€ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ (JMeter/k6)
- ๋ณด์•ˆ ํ…Œ์ŠคํŠธ์™€ ์ทจ์•ฝ์  ์Šค์บ” (OWASP ZAP)
- ์ ‘๊ทผ์„ฑ ํ…Œ์ŠคํŠธ์™€ ์‚ฌ์šฉ์„ฑ ํ‰๊ฐ€
- ๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์„ฑ๊ณผ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ํ…Œ์ŠคํŠธ
- ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์™€ ํ™˜๊ฒฝ ๊ตฌ์„ฑ
- ํ’ˆ์งˆ ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘๊ณผ ๋ฆฌํฌํŒ…

ํ’ˆ์งˆ ๋ชฉํ‘œ: ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€ 90%+
์„ฑ๋Šฅ ๊ธฐ์ค€: ์‘๋‹ต์‹œ๊ฐ„ 200ms ์ดํ•˜
๋ณด์•ˆ ์ˆ˜์ค€: Zero known vulnerabilities"

๊ณ ๊ธ‰ QA ์ž๋™ํ™” ํŒจํ„ด

bash
# ์ง€๋Šฅํ˜• ํ…Œ์ŠคํŠธ ์ž๋™ํ™”
claude "AI ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•ด์ค˜
- ์‹œ๊ฐ์  ํšŒ๊ท€ ํ…Œ์ŠคํŠธ (Applitools/Percy)
- ์ž๋™ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ƒ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜
- ํ”Œ๋ ˆ์ดํ‚ค ํ…Œ์ŠคํŠธ ํƒ์ง€์™€ ํ•ด๊ฒฐ
- ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์ตœ์ ํ™”์™€ ๋ณ‘๋ ฌํ™”
- ์‹คํŒจ ๋ถ„์„๊ณผ ์ž๋™ ๋ฒ„๊ทธ ๋ฆฌํฌํŒ…"

# ํ”„๋กœ๋•์…˜ ๋ชจ๋‹ˆํ„ฐ๋ง
claude "์‹ค์‹œ๊ฐ„ ํ’ˆ์งˆ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•ด์ค˜
- ์‹ค์‚ฌ์šฉ์ž ๋ชจ๋‹ˆํ„ฐ๋ง (RUM)
- ํ•ฉ์„ฑ ํŠธ๋žœ์žญ์…˜ ๋ชจ๋‹ˆํ„ฐ๋ง
- ์—๋Ÿฌ ์ถ”์ ๊ณผ ํฌ๋ž˜์‹œ ๋ฆฌํฌํŒ…
- A/B ํ…Œ์ŠคํŠธ ํ”Œ๋žซํผ
- ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ ์ˆ˜์ง‘๊ณผ ๋ถ„์„"

์ปจํ…์ŠคํŠธ ํŠนํ™”

๊ฐ ์ธ์Šคํ„ด์Šค์— ํŠนํ™”๋œ CLAUDE.md ์„ค์ •

frontend/CLAUDE.md

markdown
# Frontend Development Context

## ์ฃผ์š” ๊ธฐ์ˆ  ์Šคํƒ
- React 18 + TypeScript
- Tailwind CSS
- React Query + Zustand

## ์ปดํฌ๋„ŒํŠธ ๊ทœ์น™
- ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋งŒ ์‚ฌ์šฉ
- Props๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ •์˜
- Storybook ์Šคํ† ๋ฆฌ ํ•„์ˆ˜

## ์„ฑ๋Šฅ ์ตœ์ ํ™”
- React.memo ์ ๊ทน ํ™œ์šฉ
- ๋ฒˆ๋“ค ํฌ๊ธฐ ์ตœ์ ํ™”
- ์ด๋ฏธ์ง€ ์ตœ์ ํ™”

backend/CLAUDE.md

markdown
# Backend Development Context

## ์ฃผ์š” ๊ธฐ์ˆ  ์Šคํƒ
- Node.js + Express + TypeScript
- PostgreSQL + Prisma
- Redis for caching

## API ์„ค๊ณ„ ์›์น™
- RESTful ์„ค๊ณ„
- ์ผ๊ด€๋œ ์—๋Ÿฌ ์‘๋‹ต
- Rate limiting ์ ์šฉ

## ๋ณด์•ˆ ์š”๊ตฌ์‚ฌํ•ญ
- JWT ํ† ํฐ ์ธ์ฆ
- ์ž…๋ ฅ ๊ฒ€์ฆ ํ•„์ˆ˜
- SQL Injection ๋ฐฉ์ง€

Integration Hub (์ธ์Šคํ„ด์Šค #5) - ์•„ํ‚คํ…์ฒ˜ ์กฐ์ •์ž

ํ†ตํ•ฉ ํ—ˆ๋ธŒ๋Š” ๋ชจ๋“  ์ธ์Šคํ„ด์Šค ๊ฐ„์˜ ์ผ๊ด€์„ฑ๊ณผ ํ˜‘์—…์„ ๋ณด์žฅํ•˜๋Š” ์ค‘์•™ ์กฐ์ • ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

bash
# Terminal 5 (Integration Hub)
claude "๋‹น์‹ ์€ ์‹œ์Šคํ…œ ํ†ตํ•ฉ๊ณผ ์•„ํ‚คํ…์ฒ˜ ์กฐ์ • ์ „๋ฌธ๊ฐ€์ž…๋‹ˆ๋‹ค.
๋‹ค์Œ ํ†ตํ•ฉ ์˜์—ญ์„ ๋‹ด๋‹นํ•ด์ฃผ์„ธ์š”
- ํฌ๋กœ์Šค ๋„๋ฉ”์ธ ์ด์Šˆ ํ•ด๊ฒฐ๊ณผ ์˜์‚ฌ๊ฒฐ์ •
- ์•„ํ‚คํ…์ฒ˜ ์ผ๊ด€์„ฑ ๊ฒ€์ฆ๊ณผ ๊ฐ€์ด๋“œ๋ผ์ธ ์ ์šฉ
- ํŒ€ ๊ฐ„ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜๊ณผ ์ง€์‹ ๊ณต์œ 
- ๊ธฐ์ˆ  ๋ถ€์ฑ„ ๊ด€๋ฆฌ์™€ ๋ฆฌํŒฉํ† ๋ง ๊ณ„ํš
- ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ์ง€์  ๋ถ„์„๊ณผ ์ตœ์ ํ™” ๋ฐฉํ–ฅ
- ํ”„๋กœ์ ํŠธ ๋กœ๋“œ๋งต๊ณผ ์šฐ์„ ์ˆœ์œ„ ์กฐ์ •

์ฑ…์ž„ ๋ฒ”์œ„: ์ „์ฒด ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜
๋ชฉํ‘œ: ์ผ๊ด€๋œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜๊ณผ ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜
์›์น™: ๋‹จ์ˆœ์„ฑ, ํ™•์žฅ์„ฑ, ์œ ์ง€๋ณด์ˆ˜์„ฑ"

[S2WF4(์„น์…˜10)] ํ”Œ๋Ÿฌ๊ทธ์ธ & ํ™•์žฅ ์ƒํƒœ๊ณ„ โ€” MCP ์„œ๋ฒ„ ํ†ตํ•ฉ

11.8 ๊ณ ๊ธ‰ ์ปค์Šคํ„ฐ๋งˆ์ด์ œ์ด์…˜

Claude Code Action์˜ ์ง„์ •ํ•œ ๊ฐ€์น˜๋Š” ์กฐ์ง์˜ ํŠน์ˆ˜ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๊ฒŒ ๊นŠ์ด ์žˆ๋Š” ์ปค์Šคํ„ฐ๋งˆ์ด์ œ์ด์…˜์„ ํ†ตํ•ด ์‹คํ˜„๋ฉ๋‹ˆ๋‹ค. MCP(Model Context Protocol) ์„œ๋ฒ„ ํ†ตํ•ฉ, ์ปค์Šคํ…€ ๋„๊ตฌ ๊ฐœ๋ฐœ, ๊ทธ๋ฆฌ๊ณ  ์กฐ์ง๋ณ„ ์›Œํฌํ”Œ๋กœ์šฐ ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด Claude๋ฅผ ํŒ€์˜ ์ „์šฉ AI ์–ด์‹œ์Šคํ„ดํŠธ๋กœ ๋ฐœ์ „์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

MCP ์„œ๋ฒ„ ํ†ตํ•ฉ๊ณผ ํ™•์žฅ

MCP(Model Context Protocol)๋Š” Claude์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๋Š” ํ‘œ์ค€ํ™”๋œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์กฐ์ง์˜ ๋‚ด๋ถ€ ์‹œ์Šคํ…œ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, API์™€์˜ ํ†ตํ•ฉ์„ ํ†ตํ•ด Claude๊ฐ€ ๋” ํ’๋ถ€ํ•œ ์ปจํ…์ŠคํŠธ๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ MCP ์„œ๋ฒ„ ํ†ตํ•ฉ

yaml
# Sequential Thinking MCP ์„œ๋ฒ„ ํ†ตํ•ฉ
- uses: anthropics/claude-code-action@beta
  with:
    anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
    mcp_config: |
      {
        "mcpServers": {
          "sequential-thinking": {
            "command": "npx",
            "args": [
              "-y",
              "@modelcontextprotocol/server-sequential-thinking"
            ]
          }
        }
      }
    allowed_tools: "mcp__sequential-thinking__sequentialthinking"

๊ณ ๊ธ‰ MCP ์„œ๋ฒ„ ์„ค์ • - ๋‚ด๋ถ€ ์‹œ์Šคํ…œ ํ†ตํ•ฉ

bash
# ์กฐ์ง ํŠนํ™” MCP ์„œ๋ฒ„ ์„ค๊ณ„
claude "์šฐ๋ฆฌ ์กฐ์ง์„ ์œ„ํ•œ ์ปค์Šคํ…€ MCP ์„œ๋ฒ„๋“ค์„ ์„ค๊ณ„ํ•ด์ค˜.
๋‹ค์Œ ์‹œ์Šคํ…œ๊ณผ์˜ ํ†ตํ•ฉ์ด ํ•„์š”ํ•ด

๋‚ด๋ถ€ ์‹œ์Šคํ…œ ์—ฐ๋™
- JIRA API: ์ด์Šˆ ํŠธ๋ž˜ํ‚น๊ณผ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ
- Confluence: ๋ฌธ์„œ์™€ ์ง€์‹ ๋ฒ ์ด์Šค ์ ‘๊ทผ
- Slack API: ํŒ€ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜๊ณผ ์•Œ๋ฆผ
- Jenkins: CI/CD ํŒŒ์ดํ”„๋ผ์ธ ์ƒํƒœ
- DataDog: ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ์„ฑ๋Šฅ ๋ฉ”ํŠธ๋ฆญ

์™ธ๋ถ€ ์„œ๋น„์Šค ํ†ตํ•ฉ
- AWS API: ์ธํ”„๋ผ ์ƒํƒœ์™€ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ
- Kubernetes API: ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜
- Database connections: ์Šคํ‚ค๋งˆ ์ •๋ณด์™€ ์ฟผ๋ฆฌ ์‹คํ–‰
- Security scanners: ์ทจ์•ฝ์  ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ

๊ฐ MCP ์„œ๋ฒ„์˜ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•๊ณผ ๋ณด์•ˆ ์„ค์ •์„ ํฌํ•จํ•ด์ค˜."

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ MCP ์„œ๋ฒ„ ๊ตฌ์„ฑ ์˜ˆ์‹œ

yaml
# ์ข…ํ•ฉ์ ์ธ MCP ์„œ๋ฒ„ ์„ค์ •
- uses: anthropics/claude-code-action@beta
  with:
    anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
    mcp_config: |
      {
        "mcpServers": {
          "jira-integration": {
            "command": "node",
            "args": ["./scripts/mcp-jira-server.js"],
            "env": {
              "JIRA_URL": "${{ secrets.JIRA_URL }}",
              "JIRA_TOKEN": "${{ secrets.JIRA_TOKEN }}",
              "JIRA_PROJECT_KEY": "${{ vars.JIRA_PROJECT_KEY }}"
            }
          },
          "database-inspector": {
            "command": "python",
            "args": ["./scripts/mcp-db-server.py"],
            "env": {
              "DB_CONNECTION_STRING": "${{ secrets.DB_READ_ONLY_CONNECTION }}",
              "DB_TYPE": "postgresql"
            }
          },
          "security-scanner": {
            "command": "npx",
            "args": ["-y", "@company/security-mcp-server"],
            "env": {
              "SCANNER_API_KEY": "${{ secrets.SECURITY_SCANNER_API_KEY }}",
              "SCAN_LEVEL": "comprehensive"
            }
          },
          "monitoring-integration": {
            "command": "node",
            "args": ["./scripts/mcp-monitoring-server.js"],
            "env": {
              "DATADOG_API_KEY": "${{ secrets.DATADOG_API_KEY }}",
              "GRAFANA_URL": "${{ secrets.GRAFANA_URL }}",
              "GRAFANA_TOKEN": "${{ secrets.GRAFANA_TOKEN }}"
            }
          }
        }
      }
    allowed_tools: |
      mcp__jira-integration__create-issue,
      mcp__jira-integration__update-issue,
      mcp__jira-integration__search-issues,
      mcp__database-inspector__query-schema,
      mcp__database-inspector__explain-query,
      mcp__security-scanner__scan-code,
      mcp__security-scanner__check-vulnerabilities,
      mcp__monitoring-integration__get-metrics,
      mcp__monitoring-integration__create-alert

์กฐ์ง๋ณ„ ์ปค์Šคํ…€ ๋„๊ตฌ ๊ฐœ๋ฐœ

์ฝ”๋“œ ํ’ˆ์งˆ ๊ฒ€์‚ฌ ๋„๊ตฌ

bash
# ์กฐ์ง ํŠนํ™” ์ฝ”๋“œ ํ’ˆ์งˆ ๋„๊ตฌ
claude "์šฐ๋ฆฌ ํŒ€์˜ ์ฝ”๋”ฉ ํ‘œ์ค€์„ ์ž๋™์œผ๋กœ ๊ฒ€์‚ฌํ•˜๋Š” ์ปค์Šคํ…€ ๋„๊ตฌ๋ฅผ ๋งŒ๋“ค์–ด์ค˜.
๋‹ค์Œ ๊ฒ€์‚ฌ ํ•ญ๋ชฉ์„ ํฌํ•จํ•ด์ค˜

์ฝ”๋”ฉ ํ‘œ์ค€ ๊ฒ€์‚ฌ
- ํ•จ์ˆ˜ ๋„ค์ด๋ฐ ๊ทœ์น™ (camelCase, ๋™์‚ฌ๋กœ ์‹œ์ž‘)
- ํŒŒ์ผ ๊ตฌ์กฐ ๊ทœ์น™ (feature/component ๊ธฐ๋ฐ˜)
- ์ฝ”๋ฉ˜ํŠธ ์ž‘์„ฑ ๊ทœ์น™ (JSDoc, docstring)
- ์—๋Ÿฌ ์ฒ˜๋ฆฌ ํŒจํ„ด ์ผ๊ด€์„ฑ
- ๋กœ๊น… ํ˜•์‹ ํ‘œ์ค€ํ™”

์„ฑ๋Šฅ ๊ฒ€์‚ฌ
- ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ํŒจํ„ด ๊ฐ์ง€
- ๋น„ํšจ์œจ์ ์ธ ๋ฃจํ”„์™€ ์ฟผ๋ฆฌ
- ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง ๊ฐ์ง€
- ๋ฒˆ๋“ค ํฌ๊ธฐ ์ตœ์ ํ™” ๊ธฐํšŒ

๋ณด์•ˆ ๊ฒ€์‚ฌ
- ํ•˜๋“œ์ฝ”๋”ฉ๋œ ์‹œํฌ๋ฆฟ ํƒ์ง€
- SQL ์ธ์ ์…˜ ์ทจ์•ฝ์ 
- XSS ๊ณต๊ฒฉ ๋ฒกํ„ฐ
- ๊ถŒํ•œ ๋ถ€์—ฌ ๋ˆ„๋ฝ"

์ž๋™ ๋ฌธ์„œํ™” ๋„๊ตฌ

yaml
# ์ปค์Šคํ…€ ๋ฌธ์„œํ™” ์ž๋™ํ™”
- uses: anthropics/claude-code-action@beta
  with:
    anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
    custom_instructions: |
      ๋‹น์‹ ์€ ์šฐ๋ฆฌ ์กฐ์ง์˜ ๋ฌธ์„œํ™” ์ „๋ฌธ๊ฐ€์ž…๋‹ˆ๋‹ค.
      ๋‹ค์Œ ๋ฌธ์„œํ™” ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•ด์ฃผ์„ธ์š”
      
      API ๋ฌธ์„œํ™”
      - OpenAPI 3.0 ์ŠคํŽ™ ์ค€์ˆ˜
      - ์š”์ฒญ/์‘๋‹ต ์˜ˆ์‹œ ํฌํ•จ
      - ์—๋Ÿฌ ์ฝ”๋“œ์™€ ๋ฉ”์‹œ์ง€ ์„ค๋ช…
      - ๋ฒ„์ „ ๊ด€๋ฆฌ ์ •๋ณด
      
      ์ฝ”๋“œ ๋ฌธ์„œํ™”
      - ํ•จ์ˆ˜๋ณ„ JSDoc/docstring
      - ๋ณต์žกํ•œ ๋กœ์ง ์ธ๋ผ์ธ ์ฃผ์„
      - README ์—…๋ฐ์ดํŠธ
      - ์•„ํ‚คํ…์ฒ˜ ๋‹ค์ด์–ด๊ทธ๋žจ
      
      ์‚ฌ์šฉ์ž ๋ฌธ์„œํ™”
      - ์„ค์น˜์™€ ์„ค์ • ๊ฐ€์ด๋“œ
      - ์‚ฌ์šฉ ์˜ˆ์‹œ์™€ ํŠœํ† ๋ฆฌ์–ผ
      - ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€์ด๋“œ
      - FAQ ์„น์…˜
    allowed_tools: |
      Edit,Replace,GitLog,GitDiff,
      mcp__docs-generator__create-api-docs,
      mcp__docs-generator__update-readme,
      mcp__docs-generator__generate-diagrams

์›Œํฌํ”Œ๋กœ์šฐ ์ตœ์ ํ™”์™€ ์ž๋™ํ™”

์ง€๋Šฅํ˜• ์›Œํฌํ”Œ๋กœ์šฐ ๋ผ์šฐํŒ…

bash
# ์ปจํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ž๋™ํ™”
claude "PR ๋‚ด์šฉ์„ ๋ถ„์„ํ•ด์„œ ์ž๋™์œผ๋กœ ์ ์ ˆํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์„ ํƒํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค์–ด์ค˜.
๋‹ค์Œ ๋ถ„๋ฅ˜ ๊ธฐ์ค€์„ ์‚ฌ์šฉํ•ด์ค˜

๋ณ€๊ฒฝ ์œ ํ˜• ๋ถ„์„
- ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (feature): ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๊ตฌํ˜„
- ๋ฒ„๊ทธ ์ˆ˜์ • (bugfix): ๊ธฐ์กด ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •
- ๋ฆฌํŒฉํ† ๋ง (refactor): ์ฝ”๋“œ ๊ตฌ์กฐ ๊ฐœ์„ 
- ๋ฌธ์„œํ™” (docs): ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ
- ์„ค์ • (config): ์„ค์ • ํŒŒ์ผ ๋ณ€๊ฒฝ
- ํ…Œ์ŠคํŠธ (test): ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๊ด€๋ จ

์˜ํ–ฅ๋„ ๋ถ„์„
- Critical: ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ณ€๊ฒฝ
- High: ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์— ์ง์ ‘ ์˜ํ–ฅ
- Medium: ๋‚ด๋ถ€ ๋กœ์ง ๊ฐœ์„ 
- Low: ๋ฌธ์„œ๋‚˜ ์ฃผ์„ ์—…๋ฐ์ดํŠธ

๊ฐ ๋ถ„๋ฅ˜์— ๋”ฐ๋ฅธ ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ
- ํ•„์š”ํ•œ ๋ฆฌ๋ทฐ์–ด ์ž๋™ ํ• ๋‹น
- ์ ์ ˆํ•œ ํ…Œ์ŠคํŠธ ์ „๋žต ์„ ํƒ
- ๋ฐฐํฌ ์Šน์ธ ํ”„๋กœ์„ธ์Šค ๊ฒฐ์ •
- ๋ชจ๋‹ˆํ„ฐ๋ง ์ˆ˜์ค€ ์„ค์ •"

๋™์  ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ

yaml
# ์ง€๋Šฅํ˜• ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ ์‹œ์Šคํ…œ
name: Adaptive Quality Gates
on:
  pull_request:
    types: [opened, synchronize]

jobs:
  analyze-changes:
    runs-on: ubuntu-latest
    outputs:
      risk_level: ${{ steps.analysis.outputs.risk_level }}
      test_strategy: ${{ steps.analysis.outputs.test_strategy }}
      review_requirements: ${{ steps.analysis.outputs.review_requirements }}
      
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
          
      - uses: anthropics/claude-code-action@beta
        id: analysis
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          direct_prompt: |
            ์ด PR์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ถ„์„ํ•˜๊ณ  ๋‹ค์Œ์„ ๊ฒฐ์ •ํ•ด์ฃผ์„ธ์š”
            
            1. ์œ„ํ—˜๋„ ํ‰๊ฐ€ (low/medium/high/critical)
            2. ํ•„์š”ํ•œ ํ…Œ์ŠคํŠธ ์ „๋žต (unit/integration/e2e/performance)
            3. ๋ฆฌ๋ทฐ ์š”๊ตฌ์‚ฌํ•ญ (standard/senior/architect/security)
            
            ๋ถ„์„ ๊ธฐ์ค€
            - ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ์˜ ์ˆ˜์™€ ์ค‘์š”๋„
            - ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ณ€๊ฒฝ ์—ฌ๋ถ€
            - ๋ณด์•ˆ ๊ด€๋ จ ์ฝ”๋“œ ์ˆ˜์ •
            - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ
            - API ์ธํ„ฐํŽ˜์ด์Šค ๋ณ€๊ฒฝ
            - ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ๋ณ€๊ฒฝ
            
            ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์Œ ํ˜•์‹์œผ๋กœ GitHub Actions output์— ์„ค์ •ํ•ด์ฃผ์„ธ์š”
            echo "risk_level=medium" >> $GITHUB_OUTPUT
            echo "test_strategy=integration,e2e" >> $GITHUB_OUTPUT  
            echo "review_requirements=senior,security" >> $GITHUB_OUTPUT

  quality-gate-low:
    needs: analyze-changes
    if: needs.analyze-changes.outputs.risk_level == 'low'
    runs-on: ubuntu-latest
    steps:
      - name: Fast Track Review
        run: echo "Low risk changes - fast track approved"

  quality-gate-high:
    needs: analyze-changes
    if: contains(fromJson('["high", "critical"]'), needs.analyze-changes.outputs.risk_level)
    runs-on: ubuntu-latest
    steps:
      - uses: anthropics/claude-code-action@beta
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          direct_prompt: |
            ์ด๋Š” ๋†’์€ ์œ„ํ—˜๋„์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.
            ๋‹ค์Œ ๊ฐ•ํ™”๋œ ๊ฒ€ํ† ๋ฅผ ์ˆ˜ํ–‰ํ•ด์ฃผ์„ธ์š”
            
            1. ์„ธ๋ถ€์ ์ธ ์ฝ”๋“œ ๋ฆฌ๋ทฐ
            2. ๋ณด์•ˆ ์ทจ์•ฝ์  ์ „์ฒด ๊ฒ€์‚ฌ
            3. ์„ฑ๋Šฅ ์˜ํ–ฅ ๋ถ„์„
            4. ๋กค๋ฐฑ ๊ณ„ํš ์ˆ˜๋ฆฝ
            5. ๋ชจ๋‹ˆํ„ฐ๋ง ๊ณ„ํš ์ œ์•ˆ
            
            ์ถ”๊ฐ€๋กœ ๋‹ค์Œ ํŒ€๋“ค์„ ๋ฆฌ๋ทฐ์— ํฌํ•จ์‹œ์ผœ์ฃผ์„ธ์š”
            @security-team @architecture-team @senior-engineers

[S2TO2] Asana ์—ฐ๋™ โ€” ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ํ†ตํ•ฉ

[S2TO3] Linear ์—ฐ๋™ โ€” ์ด์Šˆ ๊ด€๋ฆฌ ํ†ตํ•ฉ

[S2TO4] Firebase ์—ฐ๋™ โ€” BaaS ํ†ตํ•ฉ

[S2TO5] Context7 โ€” ๋ฌธ๋งฅ ๊ด€๋ฆฌ ๋„๊ตฌ

[S2TO6] Books 1๊ถŒ โ€” ์ค‘๊ธ‰ ํŒ€์šด์šฉ ํ•™์Šต

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /ํ•™์Šต์šฉ_Books_New/1๊ถŒ_Claude_ClaudeCode_์‚ฌ์šฉ๋ฒ•/

[S2TO7] ์‹ค์ „ Tips โ€” Multi-Role/์„œ๋ธŒ์—์ด์ „ํŠธ/MCP ์ค‘๊ธ‰

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /Tips/๋„๊ตฌ_ํ™œ์šฉ/

[S2TO8] .claude ์ฐธ๊ณ  โ€” Subagents/Skills ์ค‘๊ธ‰

๐Ÿ“ ๊ฒฝ๋กœ: .claude/subagents/, .claude/skills/

S2QC โ€” ํ’ˆ์งˆ๊ด€๋ฆฌ (Quality Control)

[S2QC1(์„น์…˜11)] ๋ณด์•ˆ ์œ„ํ—˜ & ์ฒดํฌ๋ฆฌ์ŠคํŠธ

10.8 ๋ณด์•ˆ ๊ฐ•ํ™”

๋ณด์•ˆ์€ ํ˜‘์—… ๋„๊ตฌ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์š”์†Œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ, ์ธ์ฆ/์ธ๊ฐ€ ์‹œ์Šคํ…œ, ์•…์„ฑ ๊ณต๊ฒฉ ๋ฐฉ์ง€๋ฅผ ํ†ตํ•ด ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ธ์ฆ/์ธ๊ฐ€ ๋ณด์•ˆ

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ณด์•ˆ์€ ๋‹ค์ธต์  ๋ฐฉ์–ด ์ฒด๊ณ„๋ฅผ ํ†ตํ•ด ๊ตฌ์ถ•๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ๋ณด์•ˆ ์œ„ํ˜‘์— ๋Œ€ํ•ด ์ ์ ˆํ•œ ๋Œ€์‘์ฑ…์„ ๋งˆ๋ จํ•˜์—ฌ ์‹œ์Šคํ…œ์˜ ์ „๋ฐ˜์ ์ธ ๋ณด์•ˆ ์ˆ˜์ค€์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

bash
claude "๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•ด์ค˜.
CSRF ๋ฐฉ์ง€, Rate limiting, 
์ž…๋ ฅ ๊ฒ€์ฆ, SQL Injection ๋ฐฉ์ง€,
XSS ๋ฐฉ์ง€๋ฅผ ๊ตฌํ˜„ํ•ด์ค˜"

ํ•ต์‹ฌ ๋ณด์•ˆ ์š”์†Œ

  1. CSRF ๋ฐฉ์ง€: ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์š”์ฒญ ์œ„์กฐ ๊ณต๊ฒฉ ์ฐจ๋‹จ
  2. Rate Limiting: ๋ฌด์ฐจ๋ณ„ ๋Œ€์ž… ๊ณต๊ฒฉ๊ณผ DDoS ๊ณต๊ฒฉ ๋ฐฉ์ง€
  3. ์ž…๋ ฅ ๊ฒ€์ฆ: ๋ชจ๋“  ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋Œ€ํ•œ ์—„๊ฒฉํ•œ ๊ฒ€์ฆ๊ณผ ์ •์ œ
  4. SQL Injection ๋ฐฉ์ง€: ๋งค๊ฐœ๋ณ€์ˆ˜ํ™”๋œ ์ฟผ๋ฆฌ์™€ ORM ํ™œ์šฉ
  5. XSS ๋ฐฉ์ง€: ์ถœ๋ ฅ ์ธ์ฝ”๋”ฉ๊ณผ ์ฝ˜ํ…์ธ  ๋ณด์•ˆ ์ •์ฑ… ์ ์šฉ

์ถ”๊ฐ€ ๋ณด์•ˆ ๊ณ ๋ ค์‚ฌํ•ญ

์‹ค์‹œ๊ฐ„ ํ†ต์‹  ๋ณด์•ˆ

์‹ค์‹œ๊ฐ„ ํ†ต์‹ ์€ ์ง€์†์ ์ธ ์—ฐ๊ฒฐ๊ณผ ๋นˆ๋ฒˆํ•œ ๋ฐ์ดํ„ฐ ๊ตํ™˜์œผ๋กœ ์ธํ•ด ํŠน๋ณ„ํ•œ ๋ณด์•ˆ ๊ณ ๋ ค์‚ฌํ•ญ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ ์ธ์ฆ, ๋ฉ”์‹œ์ง€ ๊ฒ€์ฆ, ์•…์šฉ ๋ฐฉ์ง€๋ฅผ ํ†ตํ•ด ์•ˆ์ „ํ•œ ์‹ค์‹œ๊ฐ„ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.

bash
claude "Socket.io ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•ด์ค˜.
๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ณ„ ๊ถŒํ•œ ๊ฒ€์‚ฌ, ๋ฉ”์‹œ์ง€ ๊ฒ€์ฆ,
์ŠคํŒธ ๋ฐฉ์ง€, ์•…์„ฑ ์‚ฌ์šฉ์ž ์ฐจ๋‹จ์„ ๊ตฌํ˜„ํ•ด์ค˜"

์‹ค์‹œ๊ฐ„ ํ†ต์‹  ๋ณด์•ˆ ์ „๋žต

  1. ์—ฐ๊ฒฐ ์ธ์ฆ: Socket.io ์—ฐ๊ฒฐ ์‹œ JWT ํ† ํฐ ๊ฒ€์ฆ
  2. ๊ถŒํ•œ ๊ฒ€์‚ฌ: ๋„ค์ž„์ŠคํŽ˜์ด์Šค์™€ ๋ฃธ๋ณ„ ์ ‘๊ทผ ๊ถŒํ•œ ํ™•์ธ
  3. ๋ฉ”์‹œ์ง€ ๊ฒ€์ฆ: ์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง€์˜ ํ˜•์‹๊ณผ ๋‚ด์šฉ ๊ฒ€์ฆ
  4. ์ŠคํŒธ ๋ฐฉ์ง€: ๋ฉ”์‹œ์ง€ ๋นˆ๋„ ์ œํ•œ๊ณผ ํŒจํ„ด ๋ถ„์„
  5. ์•…์„ฑ ์‚ฌ์šฉ์ž ์ฐจ๋‹จ: ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ์ž๋™ ์ฐจ๋‹จ ์‹œ์Šคํ…œ

11.6 ๋ณด์•ˆ๊ณผ ๊ถŒํ•œ ๊ด€๋ฆฌ

Claude Code Action์„ ์•ˆ์ „ํ•˜๊ฒŒ ์šด์˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฒ ์ €ํ•œ ๋ณด์•ˆ ์„ค๊ณ„์™€ ๊ถŒํ•œ ๊ด€๋ฆฌ๊ฐ€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ, ์ ‘๊ทผ ์ œ์–ด, ๊ฐ์‚ฌ ์ถ”์ ์ด ์ค‘์š”ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

API ํ‚ค ๋ณด์•ˆ๊ณผ ์‹œํฌ๋ฆฟ ๊ด€๋ฆฌ

๊ณ„์ธตํ™”๋œ ์‹œํฌ๋ฆฟ ๊ด€๋ฆฌ ์ „๋žต

bash
# ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์‹œํฌ๋ฆฟ ๊ด€๋ฆฌ ์ „๋žต
claude "Claude Code Action์„ ์œ„ํ•œ ํฌ๊ด„์ ์ธ ์‹œํฌ๋ฆฟ ๊ด€๋ฆฌ ์ „๋žต์„ ์„ค๊ณ„ํ•ด์ค˜.
๋‹ค์Œ ์š”์†Œ๋ฅผ ํฌํ•จํ•ด์ค˜

์‹œํฌ๋ฆฟ ๊ณ„์ธต ๊ตฌ์กฐ
- Organization level secrets (์ „์‚ฌ ๊ณตํ†ต)
- Repository level secrets (ํ”„๋กœ์ ํŠธ๋ณ„)  
- Environment level secrets (ํ™˜๊ฒฝ๋ณ„)

๋ณด์•ˆ ๋ชจ๋ฒ” ์‚ฌ๋ก€
- ์‹œํฌ๋ฆฟ ๋กœํ…Œ์ด์…˜ ์ •์ฑ… (30-90์ผ)
- ์ ‘๊ทผ ๊ถŒํ•œ ์ตœ์†Œํ™” ์›์น™
- ์•”ํ˜ธํ™”์™€ ์ „์†ก ๋ณด์•ˆ
- ๊ฐ์‚ฌ ๋กœ๊ทธ์™€ ๋ชจ๋‹ˆํ„ฐ๋ง
- ์‚ฌ๊ณ  ๋Œ€์‘ ์ ˆ์ฐจ

๊ทœ์ • ์ค€์ˆ˜
- SOC 2 Type II ์š”๊ตฌ์‚ฌํ•ญ
- GDPR ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ
- HIPAA ๋ณด๊ฑด์˜๋ฃŒ ๊ทœ์ •
- ์—…๊ณ„๋ณ„ ํŠน์ˆ˜ ์š”๊ตฌ์‚ฌํ•ญ"

API ํ‚ค ๋ณด์•ˆ ๊ฐ•ํ™”

yaml
# ๊ณ ๊ธ‰ ์‹œํฌ๋ฆฟ ๋ณด์•ˆ ์„ค์ •
name: Secure Claude Action
on:
  issue_comment:
    types: [created]

jobs:
  security-validation:
    runs-on: ubuntu-latest
    environment: production
    steps:
      - name: API Key Validation
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        run: |
          # API ํ‚ค ํ˜•์‹ ๊ฒ€์ฆ
          if [[ ! "$ANTHROPIC_API_KEY" =~ ^sk-ant-api03- ]]; then
            echo "Invalid API key format"
            exit 1
          fi
          
          # API ํ‚ค ํ™œ์„ฑํ™” ์ƒํƒœ ํ™•์ธ
          response=$(curl -s -H "x-api-key: $ANTHROPIC_API_KEY" \
                     https://api.anthropic.com/v1/models)
          if [[ $? -ne 0 ]]; then
            echo "API key validation failed"
            exit 1
          fi
          
      - name: Rate Limiting Check
        run: |
          # API ์‚ฌ์šฉ๋Ÿ‰ ๋ชจ๋‹ˆํ„ฐ๋ง
          echo "Checking current API usage..."
          # ์‚ฌ์šฉ๋Ÿ‰์ด ์ž„๊ณ„๊ฐ’์„ ์ดˆ๊ณผํ•˜๋ฉด ์ค‘๋‹จ
          
      - name: Security Context Validation
        run: |
          # ์š”์ฒญ์ž ๊ถŒํ•œ ํ™•์ธ
          if [[ "${{ github.actor }}" == "dependabot[bot]" ]]; then
            echo "Bot users not allowed"
            exit 1
          fi
          
          # ๋ฏผ๊ฐํ•œ ํŒŒ์ผ ๋ณ€๊ฒฝ ๊ฐ์ง€
          if git diff --name-only | grep -E "(secrets|keys|config)" > /dev/null; then
            echo "Sensitive files detected - additional approval required"
            # ์ถ”๊ฐ€ ์Šน์ธ ํ”„๋กœ์„ธ์Šค ํŠธ๋ฆฌ๊ฑฐ
          fi

      - uses: anthropics/claude-code-action@beta
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          timeout_minutes: 30  # ์‹คํ–‰ ์‹œ๊ฐ„ ์ œํ•œ
          disallowed_tools: "WebFetch,FileDelete,Bash(rm),Bash(curl)"

์ ‘๊ทผ ์ œ์–ด์™€ ๊ถŒํ•œ ์ตœ์†Œํ™”

์„ธ๋ฐ€ํ•œ ๊ถŒํ•œ ์ œ์–ด ์‹œ์Šคํ…œ

bash
# ์—ญํ•  ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ์ œ์–ด (RBAC) ์„ค๊ณ„
claude "Claude Code Action์„ ์œ„ํ•œ RBAC ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•ด์ค˜.
๋‹ค์Œ ์—ญํ• ๊ณผ ๊ถŒํ•œ์„ ์ •์˜ํ•ด์ค˜

์—ญํ•  ์ •์˜
- Admin: ์ „์ฒด ์„ค์ •๊ณผ ์‹œํฌ๋ฆฟ ๊ด€๋ฆฌ
- Senior Developer: ๋ชจ๋“  ์ฝ”๋“œ ๋ณ€๊ฒฝ ๊ถŒํ•œ
- Developer: ์ œํ•œ๋œ ์ฝ”๋“œ ๋ณ€๊ฒฝ ๊ถŒํ•œ  
- Reviewer: ์ฝ๊ธฐ ์ „์šฉ ๋ฆฌ๋ทฐ ๊ถŒํ•œ
- External Contributor: ์ตœ์†Œํ•œ์˜ ์ƒํ˜ธ์ž‘์šฉ

๊ถŒํ•œ ๋งคํŠธ๋ฆญ์Šค
- ํŒŒ์ผ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๊ถŒํ•œ
- ๋ธŒ๋žœ์น˜๋ณ„ ์ ‘๊ทผ ์ œ์–ด
- ๋ฏผ๊ฐํ•œ ๋””๋ ‰ํ† ๋ฆฌ ๋ณดํ˜ธ
- ์‹œ์Šคํ…œ ๋ช…๋ น์–ด ์‹คํ–‰ ๊ถŒํ•œ
- ์™ธ๋ถ€ API ํ˜ธ์ถœ ๊ถŒํ•œ

๊ตฌํ˜„ ๋ฐฉ๋ฒ•
- GitHub Team ๊ธฐ๋ฐ˜ ๊ถŒํ•œ ๋งคํ•‘
- ๋™์  ๊ถŒํ•œ ๊ฒ€์ฆ ๋กœ์ง
- ๊ฐ์‚ฌ ๋กœ๊ทธ ์ž๋™ ์ƒ์„ฑ
- ๊ถŒํ•œ ์—์Šค์ปฌ๋ ˆ์ด์…˜ ํ”„๋กœ์„ธ์Šค"

๋ฏผ๊ฐํ•œ ํŒŒ์ผ๊ณผ ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ

yaml
# ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ ์„ค์ •
- uses: anthropics/claude-code-action@beta
  with:
    anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
    
    # ์ ‘๊ทผ ๊ธˆ์ง€ ํŒŒ์ผ ํŒจํ„ด
    disallowed_paths: |
      - "**/.env*"
      - "**/secrets/**"
      - "**/keys/**"
      - "**/*password*"
      - "**/*secret*"
      - "**/config/production.yaml"
      
    # ํ—ˆ์šฉ๋œ ๋„๊ตฌ๋งŒ ์‚ฌ์šฉ
    allowed_tools: "Edit,Replace,GitLog,GitDiff"
    disallowed_tools: "Bash,WebFetch,FileDelete,NetworkAccess"
    
    # ์ปค์Šคํ…€ ๋ณด์•ˆ ์ง€์นจ
    custom_instructions: |
      ๋ณด์•ˆ ์ง€์นจ
      1. ์ ˆ๋Œ€๋กœ ์‹œํฌ๋ฆฟ์ด๋‚˜ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ฝ”๋“œ์— ํ•˜๋“œ์ฝ”๋”ฉํ•˜์ง€ ๋งˆ์„ธ์š”
      2. ๋ชจ๋“  ์™ธ๋ถ€ ์ž…๋ ฅ์€ ๊ฒ€์ฆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
      3. ๋ฏผ๊ฐํ•œ ์ •๋ณด๋Š” ๋กœ๊ทธ์— ๋‚จ๊ธฐ์ง€ ๋งˆ์„ธ์š”
      4. ๋ณด์•ˆ ๊ด€๋ จ ๋ณ€๊ฒฝ์‚ฌํ•ญ์€ ๋ณ„๋„ ์Šน์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
      5. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ •๋ณด๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ๋งŒ ๊ด€๋ฆฌํ•˜์„ธ์š”

๊ฐ์‚ฌ์™€ ๋ชจ๋‹ˆํ„ฐ๋ง

ํฌ๊ด„์ ์ธ ๊ฐ์‚ฌ ์ถ”์  ์‹œ์Šคํ…œ

bash
# ๊ฐ์‚ฌ ๋กœ๊ทธ ์‹œ์Šคํ…œ ์„ค๊ณ„
claude "Claude Code Action์˜ ๋ชจ๋“  ํ™œ๋™์„ ์ถ”์ ํ•˜๋Š” ๊ฐ์‚ฌ ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•ด์ค˜.
๋‹ค์Œ ์š”์†Œ๋ฅผ ํฌํ•จํ•ด์ค˜

๋กœ๊ทธ ์ˆ˜์ง‘ ๋Œ€์ƒ
- ๋ชจ๋“  API ํ˜ธ์ถœ๊ณผ ์‘๋‹ต
- ํŒŒ์ผ ๋ณ€๊ฒฝ๊ณผ ์ปค๋ฐ‹ ๋‚ด์—ญ
- ๊ถŒํ•œ ์š”์ฒญ๊ณผ ์Šน์ธ/๊ฑฐ๋ถ€
- ์—๋Ÿฌ์™€ ์˜ˆ์™ธ ์ƒํ™ฉ
- ์„ฑ๋Šฅ๊ณผ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰

๋กœ๊ทธ ํ˜•์‹๊ณผ ๊ตฌ์กฐ
- ๊ตฌ์กฐํ™”๋œ JSON ๋กœ๊ทธ
- ํƒ€์ž„์Šคํƒฌํ”„์™€ ์ƒ๊ด€๊ด€๊ณ„ ID
- ์‚ฌ์šฉ์ž์™€ ์•ก์…˜ ์ปจํ…์ŠคํŠธ
- ๋น„์ฆˆ๋‹ˆ์Šค ์˜ํ–ฅ๋„ ๋ถ„๋ฅ˜
- ๋ณด์•ˆ ์ด๋ฒคํŠธ ๋งˆํ‚น

์ €์žฅ๊ณผ ๋ถ„์„
- ์ค‘์•™ํ™”๋œ ๋กœ๊ทธ ์ˆ˜์ง‘ (ELK Stack)
- ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ๊ณผ ๋Œ€์‹œ๋ณด๋“œ
- ์ด์ƒ ํŒจํ„ด ์ž๋™ ๊ฐ์ง€
- ๊ทœ์ • ์ค€์ˆ˜ ๋ฆฌํฌํŒ…
- ์žฅ๊ธฐ ๋ณด์กด ์ •์ฑ…"

์‹ค์‹œ๊ฐ„ ๋ณด์•ˆ ๋ชจ๋‹ˆํ„ฐ๋ง

yaml
# ๋ณด์•ˆ ๋ชจ๋‹ˆํ„ฐ๋ง ์›Œํฌํ”Œ๋กœ์šฐ
name: Security Monitoring
on:
  workflow_run:
    workflows: ["Claude AI Assistant"]
    types: [completed]

jobs:
  security-audit:
    runs-on: ubuntu-latest
    steps:
      - name: Audit Log Collection
        run: |
          # Claude Action ์‹คํ–‰ ๋กœ๊ทธ ์ˆ˜์ง‘
          echo "Collecting audit logs..."
          
          # ๋ณด์•ˆ ์ด๋ฒคํŠธ ๊ฐ์ง€
          if grep -i "security\|password\|secret" $GITHUB_EVENT_PATH; then
            echo "Security-related activity detected"
            # ์•Œ๋ฆผ ๋ฐœ์†ก
          fi
          
      - name: Anomaly Detection
        run: |
          # ๋น„์ •์ƒ์ ์ธ ํŒจํ„ด ๊ฐ์ง€
          # - ๋น„์ •์ƒ์ ์œผ๋กœ ๋งŽ์€ ํŒŒ์ผ ๋ณ€๊ฒฝ
          # - ๋ฏผ๊ฐํ•œ ํŒŒ์ผ์— ๋Œ€ํ•œ ์ ‘๊ทผ ์‹œ๋„
          # - ํ‰์†Œ์™€ ๋‹ค๋ฅธ ์‹œ๊ฐ„๋Œ€์˜ ํ™œ๋™
          
      - name: Compliance Reporting
        run: |
          # ๊ทœ์ • ์ค€์ˆ˜ ๋ฆฌํฌํŠธ ์ƒ์„ฑ
          echo "Generating compliance report..."

[S2QC2(์„น์…˜13b)] Git ์ „๋žต โ€” ์ปค๋ฐ‹ & ๋ธŒ๋žœ์น˜

๋ธŒ๋žœ์น˜ ์ „๋žต

์ฒด๊ณ„์ ์ธ Git ๋ธŒ๋žœ์น˜ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์ „๋žต๊ณผ ๊ทœ์น™์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. Git Flow๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์‹ค์šฉ์ ์ธ ๋ธŒ๋žœ์น˜ ์ „๋žต์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

Git ๋ธŒ๋žœ์น˜ ์ „๋žต

๋ธŒ๋žœ์น˜ ๋ช…๋ช… ๊ทœ์น™

๋ธŒ๋žœ์น˜ ํ”Œ๋กœ์šฐ

main

โ”œโ”€โ”€ develop

โ”‚ โ”œโ”€โ”€ feature/user-auth

โ”‚ โ”œโ”€โ”€ feature/payment

โ”‚ โ””โ”€โ”€ fix/123

โ””โ”€โ”€ hotfix/critical-bug

๋จธ์ง€ ์ „๋žต


### 4๋‹จ๊ณ„: Commit (์ปค๋ฐ‹)

**์ฝ”๋“œ ๊ฒ€์ฆ**

```bash
# ์ž๋™ ๊ฒ€์ฆ
claude "์ปค๋ฐ‹ํ•˜๊ธฐ ์ „์— ๋‹ค์Œ์„ ํ™•์ธํ•ด์ค˜
- ๋ชจ๋“  ํ…Œ์ŠคํŠธ ํ†ต๊ณผ
- ๋ฆฐํŒ… ๊ทœ์น™ ์ค€์ˆ˜
- ํƒ€์ž… ์ฒดํฌ ํ†ต๊ณผ
- ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€ ํ™•์ธ"

# ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ž‘์„ฑ
claude "๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ถ„์„ํ•ด์„œ ์˜๋ฏธ ์žˆ๋Š” ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์ž‘์„ฑํ•ด์ค˜.
conventional commits ํ˜•์‹์„ ๋”ฐ๋ฅด๊ณ ,
๋ณ€๊ฒฝ ์ด์œ ์™€ ์˜ํ–ฅ์„ ๋ช…ํ™•ํžˆ ์„ค๋ช…ํ•ด์ค˜"

[S2QC3(์„น์…˜22)] ๋””๋ฒ„๊น… ๋งˆ์Šคํ„ฐ ์ „๋žต

3.4 ํ…Œ์ŠคํŠธ ์‹คํ–‰๊ณผ ๋””๋ฒ„๊น…

ํ…Œ์ŠคํŠธ ์ž‘์„ฑ

ํ’ˆ์งˆ ๋†’์€ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์œ„ํ•œ ์ฒด๊ณ„์ ์ธ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

bash
# ๋‹จ์œ„ ํ…Œ์ŠคํŠธ
claude "calculateDiscount ํ•จ์ˆ˜์— ๋Œ€ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ด์ค˜"

# ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ
claude "์‚ฌ์šฉ์ž ๋“ฑ๋ก API์— ๋Œ€ํ•œ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ด์ค˜"

# ์—ฃ์ง€ ์ผ€์ด์Šค
claude "์ด ํ•จ์ˆ˜์˜ ์—ฃ์ง€ ์ผ€์ด์Šค๋ฅผ ์ฐพ์•„์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค˜"

# ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€
claude "ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ํ™•์ธํ•˜๊ณ  ๋ˆ„๋ฝ๋œ ๋ถ€๋ถ„์— ํ…Œ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค˜"

๋””๋ฒ„๊น… ์ „๋žต

๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ ํšจ๊ณผ์ ์œผ๋กœ ์›์ธ์„ ํŒŒ์•…ํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๋Š” ์ฒด๊ณ„์ ์ธ ์ ‘๊ทผ๋ฒ•์ž…๋‹ˆ๋‹ค.

1. ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ๋ถ„์„

bash
claude "์ด ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ์„ค๋ช…ํ•˜๊ณ  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ œ์‹œํ•ด์ค˜
TypeError: Cannot read property 'name' of undefined"

2. ๋กœ๊ทธ ์ถ”๊ฐ€

bash
claude "๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ ๊ฐ™์€ ๋ถ€๋ถ„์— ๋””๋ฒ„๊ทธ ๋กœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค˜"

3. ๋‹จ๊ณ„๋ณ„ ์ถ”์ 

bash
claude "์ด ํ•จ์ˆ˜์˜ ์‹คํ–‰ ํ๋ฆ„์„ ๋‹จ๊ณ„๋ณ„๋กœ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์ค˜"

4. ์„ฑ๋Šฅ ๋ถ„์„

bash
claude "์ด ์ฝ”๋“œ์˜ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ์ง€์ ์„ ์ฐพ์•„์„œ ์ตœ์ ํ™”ํ•ด์ค˜"

์‹ค์‹œ๊ฐ„ ๋””๋ฒ„๊น… ์„ธ์…˜

๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ๋Œ€ํ™”ํ˜•์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ •์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ ๋””๋ฒ„๊น… ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ํ†ตํ•ด Claude Code์™€์˜ ํšจ๊ณผ์ ์ธ ํ˜‘์—… ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…์‹œ๋‹ค.

์‹œ๋‚˜๋ฆฌ์˜ค 1: ์„œ๋ฒ„ ์‹œ์ž‘ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ

bash
# ๋Œ€ํ™”ํ˜• ๋””๋ฒ„๊น… ์‹œ์ž‘
claude

> ์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘๋˜์ง€ ์•Š์•„. ํฌํŠธ 3000์—์„œ ์ด๋ฏธ ์‚ฌ์šฉ ์ค‘์ด๋ผ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์™€.
< ํฌํŠธ 3000์„ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ด๋“œ๋ฆด๊ฒŒ์š”
  lsof -i :3000

> ํ™•์ธํ–ˆ๋”๋‹ˆ ์ด์ „์— ์‹คํ–‰ํ•œ node ํ”„๋กœ์„ธ์Šค๊ฐ€ PID 12345๋กœ ์‹คํ–‰ ์ค‘์ด์•ผ.
< ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ข…๋ฃŒํ•˜๊ณ , ํ–ฅํ›„ ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.
  1. ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ ์Šคํฌ๋ฆฝํŠธ ์ƒ์„ฑ
  2. package.json์— ์žฌ์‹œ์ž‘ ์Šคํฌ๋ฆฝํŠธ ์ถ”๊ฐ€
  3. graceful shutdown ์ฝ”๋“œ ๊ตฌํ˜„

> ์ข‹์•„, ์ง„ํ–‰ํ•ด์ค˜. ๊ทธ๋ฆฌ๊ณ  ์™œ ์„œ๋ฒ„๊ฐ€ ์ œ๋Œ€๋กœ ์ข…๋ฃŒ๋˜์ง€ ์•Š์•˜๋Š”์ง€๋„ ์•Œ๊ณ  ์‹ถ์–ด.
< ์„œ๋ฒ„ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•ด๋ณด๋‹ˆ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋“ค์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.
  1. SIGTERM ์‹œ๊ทธ๋„ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์—†์–ด์„œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ•์ œ ์ข…๋ฃŒ๋จ
  2. ํ™œ์„ฑ ์—ฐ๊ฒฐ์ด ์ •๋ฆฌ๋˜์ง€ ์•Š๊ณ  ์žˆ์Œ
  3. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ํ’€์ด ๋‹ซํžˆ์ง€ ์•Š์Œ
  
  ์ด์ œ ์ด ๋ฌธ์ œ๋“ค์„ ํ•˜๋‚˜์”ฉ ํ•ด๊ฒฐํ•ด๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค...

์‹œ๋‚˜๋ฆฌ์˜ค 2: ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ์ถ”์ 

bash
claude

> ์„œ๋ฒ„๊ฐ€ ๋ฉฐ์น  ๋™์•ˆ ์‹คํ–‰๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ๊ณ„์† ์ฆ๊ฐ€ํ•ด. ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„.
< ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ์ง„ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
  1. ํ˜„์žฌ ์ฝ”๋“œ์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ํŒจํ„ด ๊ฒ€์ƒ‰
  2. ๋ฉ”๋ชจ๋ฆฌ ํ”„๋กœํŒŒ์ผ๋ง ๋„๊ตฌ ์„ค์ •
  3. ์˜์‹ฌ๋˜๋Š” ์ฝ”๋“œ ์˜์—ญ์— ๋ชจ๋‹ˆํ„ฐ๋ง ์ถ”๊ฐ€

> ์–ด๋–ค ํŒจํ„ด๋“ค์ด ์œ„ํ—˜ํ•œ๊ฐ€?
< ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŒจํ„ด๋“ค์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.
  - ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๊ฐ€ ์ œ๊ฑฐ๋˜์ง€ ์•Š๋Š” ๊ณณ 3๊ฐœ
  - ์ „์—ญ ๋ณ€์ˆ˜์— ๊ณ„์† ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ์บ์‹œ
  - ์ˆœํ™˜ ์ฐธ์กฐ๊ฐ€ ์žˆ๋Š” ๊ฐ์ฒด ๊ตฌ์กฐ
  ๊ฐ๊ฐ ์ˆ˜์ • ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ๋“œ๋ฆด๊นŒ์š”?

7.4 ๋ฆฌํŒฉํ† ๋ง๊ณผ ์ฝ”๋“œ ํ’ˆ์งˆ ๊ฐœ์„ 

๋ฆฌํŒฉํ† ๋ง์€ ์ฝ”๋“œ์˜ ์™ธ๋ถ€ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ์ค‘์š”ํ•œ ํ™œ๋™์ž…๋‹ˆ๋‹ค. Claude Code๋Š” ์ฝ”๋“œ ์Šค๋ฉœ์„ ์ž๋™์œผ๋กœ ํƒ์ง€ํ•˜๊ณ , ์•ˆ์ „ํ•œ ๋ฆฌํŒฉํ† ๋ง ์ „๋žต์„ ์ œ์‹œํ•˜๋ฉฐ, ์ง€์†์ ์ธ ์ฝ”๋“œ ํ’ˆ์งˆ ํ–ฅ์ƒ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ฒด๊ณ„์ ์ธ ๋ฆฌํŒฉํ† ๋ง

ํšจ๊ณผ์ ์ธ ๋ฆฌํŒฉํ† ๋ง์€ ๋‹จ์ˆœํ•œ ์ฝ”๋“œ ์ •๋ฆฌ๋ฅผ ๋„˜์–ด์„œ, ์‹œ์Šคํ…œ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ์ „๋žต์  ํ™œ๋™์ž…๋‹ˆ๋‹ค.

1. ์ฝ”๋“œ ์Šค๋ฉœ ํƒ์ง€

bash
claude "์ด ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ๋ฆฌํŒฉํ† ๋ง์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ์ฐพ์•„์ค˜.
๋‹ค์Œ์„ ์ค‘์ ์ ์œผ๋กœ ํ™•์ธํ•ด์ค˜
- ์ค‘๋ณต ์ฝ”๋“œ
- ๊ธด ํ•จ์ˆ˜
- ๋ณต์žกํ•œ ์กฐ๊ฑด๋ฌธ
- ๋ถ€์ ์ ˆํ•œ ์ด๋ฆ„"

2. ๋‹จ๊ณ„๋ณ„ ๋ฆฌํŒฉํ† ๋ง

bash
# 1๋‹จ๊ณ„: ํ…Œ์ŠคํŠธ ํ™•๋ณด
claude "๋ฆฌํŒฉํ† ๋ง ์ „์— ํ˜„์žฌ ๋™์ž‘์„ ๋ณด์žฅํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ด์ค˜"

# 2๋‹จ๊ณ„: ์ž‘์€ ๋‹จ์œ„๋กœ ๊ฐœ์„ 
claude "ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ๋ฆฌํŒฉํ† ๋ง์„ ์ง„ํ–‰ํ•ด์ค˜.
๊ฐ ๋‹จ๊ณ„๋งˆ๋‹ค ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ•˜๋Š”์ง€ ํ™•์ธํ•ด์ค˜"

# 3๋‹จ๊ณ„: ์„ฑ๋Šฅ ๊ฒ€์ฆ
claude "๋ฆฌํŒฉํ† ๋ง ์ „ํ›„์˜ ์„ฑ๋Šฅ์„ ๋น„๊ตํ•ด์ค˜.
๋ฒค์น˜๋งˆํฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ถ„์„ํ•ด์ค˜"

์ฝ”๋“œ ํ’ˆ์งˆ ๋ฉ”ํŠธ๋ฆญ

bash
claude "์ฝ”๋“œ ํ’ˆ์งˆ์„ ์ธก์ •ํ•˜๊ณ  ๊ฐœ์„  ๋ฐฉ์•ˆ์„ ์ œ์‹œํ•ด์ค˜
- ์ˆœํ™˜ ๋ณต์žก๋„
- ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€
- ๊ธฐ์ˆ  ๋ถ€์ฑ„
- ์˜์กด์„ฑ ๋ณต์žก๋„"

[S2QC4] QA Review Agent โ€” QA ์ „๋ฌธ ์—์ด์ „ํŠธ


[S2QC5] Books โ€” ์ค‘๊ธ‰ ํ’ˆ์งˆ๊ด€๋ฆฌ ํ•™์Šต

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /ํ•™์Šต์šฉ_Books_New/

[S2QC6] ์‹ค์ „ Tips โ€” ๋ณด์•ˆ/๊ฒ€์ฆ/SAL Grid/Git ์ค‘๊ธ‰

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /Tips/

[S2QC7] .claude ์ฐธ๊ณ  โ€” Rules/Compliance ์ค‘๊ธ‰

๐Ÿ“ ๊ฒฝ๋กœ: .claude/rules/, .claude/compliance/

S2CM โ€” ๋น„์šฉ๊ด€๋ฆฌ (Cost Management)

[S2CM1(์„น์…˜24)] ๋ชจ๋‹ˆํ„ฐ๋ง & ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ „๋žต

11.9 ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ์„ฑ๋Šฅ ์ตœ์ ํ™”

Claude Code Action์˜ ์•ˆ์ •์ ์ธ ์šด์˜์„ ์œ„ํ•ด์„œ๋Š” ํฌ๊ด„์ ์ธ ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ์ง€์†์ ์ธ ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์˜ ๊ฑด๊ฐ•์„ฑ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ถ”์ ํ•˜๊ณ , ๋ณ‘๋ชฉ ์ง€์ ์„ ์‚ฌ์ „์— ์‹๋ณ„ํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ง€์†์ ์œผ๋กœ ๊ฐœ์„ ํ•˜๋Š” ์ฒด๊ณ„์ ์ธ ์ ‘๊ทผ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ข…ํ•ฉ์ ์ธ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ

๋‹ค์ธต์  ๋ชจ๋‹ˆํ„ฐ๋ง ์•„ํ‚คํ…์ฒ˜

bash
# ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๋ชจ๋‹ˆํ„ฐ๋ง ์ „๋žต
claude "Claude Code Action์„ ์œ„ํ•œ ์ข…ํ•ฉ์ ์ธ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•ด์ค˜.
๋‹ค์Œ ๊ณ„์ธต๋ณ„ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ํฌํ•จํ•ด์ค˜

์ธํ”„๋ผ ๊ณ„์ธต
- GitHub Actions ๋Ÿฌ๋„ˆ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰
- API ์‘๋‹ต ์‹œ๊ฐ„๊ณผ ์ฒ˜๋ฆฌ๋Ÿ‰
- ๋„คํŠธ์›Œํฌ ์ง€์—ฐ ์‹œ๊ฐ„๊ณผ ํŒจํ‚ท ์†์‹ค
- ์ €์žฅ์†Œ I/O ์„ฑ๋Šฅ
- ๋ฉ”๋ชจ๋ฆฌ์™€ CPU ์‚ฌ์šฉ ํŒจํ„ด

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต
- Claude API ํ˜ธ์ถœ ์„ฑ๊ณต๋ฅ ๊ณผ ์ง€์—ฐ ์‹œ๊ฐ„
- ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰ ์‹œ๊ฐ„๊ณผ ์„ฑ๊ณต๋ฅ 
- ์˜ค๋ฅ˜ ๋ฐœ์ƒ ๋นˆ๋„์™€ ํŒจํ„ด
- ์‚ฌ์šฉ์ž ์š”์ฒญ ์ฒ˜๋ฆฌ ์ƒํƒœ
- ์บ์‹œ ํžˆํŠธ์œจ๊ณผ ํšจ์œจ์„ฑ

๋น„์ฆˆ๋‹ˆ์Šค ๊ณ„์ธต
- ์‚ฌ์šฉ์ž ๋งŒ์กฑ๋„์™€ ํ”ผ๋“œ๋ฐฑ
- ์ฝ”๋“œ ํ’ˆ์งˆ ๊ฐœ์„  ์ง€ํ‘œ
- ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ ์ธก์ •
- ๋น„์šฉ ํšจ์œจ์„ฑ๊ณผ ROI
- ํŒ€ ํ˜‘์—… ํšจ๊ณผ์„ฑ

๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ ํ†ตํ•ฉ
- Prometheus + Grafana ๋Œ€์‹œ๋ณด๋“œ
- DataDog APM๊ณผ ๋กœ๊ทธ ๋ถ„์„
- AWS CloudWatch (Bedrock ์‚ฌ์šฉ ์‹œ)
- Google Cloud Monitoring (Vertex ์‚ฌ์šฉ ์‹œ)
- ์ปค์Šคํ…€ ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘๊ณผ ์•Œ๋ฆผ"

์‹ค์‹œ๊ฐ„ ๋Œ€์‹œ๋ณด๋“œ์™€ ์•Œ๋ฆผ ์‹œ์Šคํ…œ

yaml
# ๋ชจ๋‹ˆํ„ฐ๋ง ์›Œํฌํ”Œ๋กœ์šฐ
name: Claude Action Monitoring
on:
  schedule:
    - cron: '*/5 * * * *'  # 5๋ถ„๋งˆ๋‹ค ์‹คํ–‰
  workflow_run:
    workflows: ["Claude AI Assistant"]
    types: [completed, requested, in_progress]

jobs:
  health-check:
    runs-on: ubuntu-latest
    steps:
      - name: API Health Check
        id: health
        run: |
          # Anthropic API ์ƒํƒœ ํ™•์ธ
          ANTHROPIC_STATUS=$(curl -s -w "%{http_code}" -H "x-api-key: ${{ secrets.ANTHROPIC_API_KEY }}" \
                            https://api.anthropic.com/v1/models -o /dev/null)
          
          # API ์‘๋‹ต ์‹œ๊ฐ„ ์ธก์ •
          RESPONSE_TIME=$(curl -w "%{time_total}" -s -o /dev/null \
                         -H "x-api-key: ${{ secrets.ANTHROPIC_API_KEY }}" \
                         https://api.anthropic.com/v1/models)
          
          echo "api_status=$ANTHROPIC_STATUS" >> $GITHUB_OUTPUT
          echo "response_time=$RESPONSE_TIME" >> $GITHUB_OUTPUT
          
      - name: Usage Metrics Collection
        run: |
          # API ์‚ฌ์šฉ๋Ÿ‰ ์ˆ˜์ง‘
          echo "Collecting usage metrics..."
          
          # GitHub Actions ์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ
          gh api /repos/${{ github.repository }}/actions/workflows \
            --jq '.workflows[] | select(.name == "Claude AI Assistant") | .id' > workflow_id.txt
          
          # ์ตœ๊ทผ ์‹คํ–‰ ํ†ต๊ณ„ ์ˆ˜์ง‘
          WORKFLOW_ID=$(cat workflow_id.txt)
          gh api "/repos/${{ github.repository }}/actions/workflows/$WORKFLOW_ID/runs?per_page=100" \
            --jq '.workflow_runs | group_by(.conclusion) | map({conclusion: .[0].conclusion, count: length})'
            
      - name: Performance Analysis
        run: |
          # ์„ฑ๋Šฅ ์ง€ํ‘œ ๋ถ„์„
          echo "Analyzing performance metrics..."
          
          # ํ‰๊ท  ์‹คํ–‰ ์‹œ๊ฐ„ ๊ณ„์‚ฐ
          # ์„ฑ๊ณต๋ฅ  ๊ณ„์‚ฐ
          # ์—๋Ÿฌ ํŒจํ„ด ๋ถ„์„
          
      - name: Alert on Issues
        if: steps.health.outputs.api_status != '200' || steps.health.outputs.response_time > '2.0'
        run: |
          # Slack ์•Œ๋ฆผ ๋ฐœ์†ก
          curl -X POST -H 'Content-type: application/json' \
            --data '{"text":"๐Ÿšจ Claude Code Action Alert: API issues detected"}' \
            ${{ secrets.SLACK_WEBHOOK_URL }}

์„ฑ๋Šฅ ์ตœ์ ํ™” ์ „๋žต

์ง€๋Šฅํ˜• ์บ์‹ฑ๊ณผ ์š”์ฒญ ์ตœ์ ํ™”

bash
# ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐฉ์•ˆ
claude "Claude Code Action์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋Š” ์ „๋žต์„ ์ˆ˜๋ฆฝํ•ด์ค˜.
๋‹ค์Œ ์˜์—ญ๋ณ„ ์ตœ์ ํ™”๋ฅผ ํฌํ•จํ•ด์ค˜

API ํ˜ธ์ถœ ์ตœ์ ํ™”
- ์š”์ฒญ ๋ฐฐ์นญ๊ณผ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ
- ๊ฒฐ๊ณผ ์บ์‹ฑ ์ „๋žต (Redis, Memcached)
- ์ง€๋Šฅํ˜• ์žฌ์‹œ๋„ ๋กœ์ง
- ๋ถ€๋ถ„ ์‘๋‹ต๊ณผ ์ŠคํŠธ๋ฆฌ๋ฐ
- ์ปจํ…์ŠคํŠธ ์••์ถ•๊ณผ ์ตœ์ ํ™”

์›Œํฌํ”Œ๋กœ์šฐ ์ตœ์ ํ™”
- ์กฐ๊ฑด๋ถ€ ์‹คํ–‰๊ณผ ์Šคํ‚ต ๋กœ์ง
- ์˜์กด์„ฑ ์ตœ์ ํ™”์™€ ๋ณ‘๋ ฌํ™”
- ์•„ํ‹ฐํŒฉํŠธ ์บ์‹ฑ๊ณผ ์žฌ์‚ฌ์šฉ
- ํ™˜๊ฒฝ ์ค€๋น„ ์‹œ๊ฐ„ ๋‹จ์ถ•
- ๋ฆฌ์†Œ์Šค ํšจ์œจ์  ํ• ๋‹น

์ฝ”๋“œ ๋ถ„์„ ์ตœ์ ํ™”
- ์ฆ๋ถ„ ๋ถ„์„ (๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ)
- ์ง€๋Šฅํ˜• ํ•„ํ„ฐ๋ง (๊ด€๋ จ ํŒŒ์ผ๋งŒ)
- ์‚ฌ์ „ ์ปดํŒŒ์ผ๋œ ๋ถ„์„ ๊ฒฐ๊ณผ ํ™œ์šฉ
- ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ „์ฒ˜๋ฆฌ
- ์˜ˆ์ธก์  ํ”„๋ฆฌํŽ˜์นญ

๋ชจ๋ธ ํ™œ์šฉ ์ตœ์ ํ™”
- ์ ์ ˆํ•œ ๋ชจ๋ธ ์„ ํƒ (์ž‘์—…๋ณ„)
- ํ”„๋กฌํ”„ํŠธ ์ตœ์ ํ™”์™€ ์••์ถ•
- ์ปจํ…์ŠคํŠธ ์œˆ๋„์šฐ ๊ด€๋ฆฌ
- ํ† ํฐ ์‚ฌ์šฉ๋Ÿ‰ ์ตœ์ ํ™”
- ์‘๋‹ต ํ’ˆ์งˆ vs ์†๋„ ๊ท ํ˜•"

์Šค๋งˆํŠธ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ

yaml
# ์ ์‘์  ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ
name: Adaptive Resource Management
on:
  schedule:
    - cron: '0 */6 * * *'  # 6์‹œ๊ฐ„๋งˆ๋‹ค.

jobs:
  resource-optimization:
    runs-on: ubuntu-latest
    steps:
      - name: Analyze Usage Patterns
        id: analysis
        run: |
          # ์‚ฌ์šฉ ํŒจํ„ด ๋ถ„์„
          PEAK_HOURS=$(gh api "/repos/${{ github.repository }}/actions/workflows" \
                      --jq '.workflows[] | select(.name == "Claude AI Assistant") | .id' | \
                      xargs -I {} gh api "/repos/${{ github.repository }}/actions/workflows/{}/runs" \
                      --jq '.workflow_runs[0:50] | group_by(.created_at[11:13]) | 
                            map({hour: .[0].created_at[11:13], count: length}) | 
                            sort_by(.count) | reverse | .[0:3] | map(.hour) | join(",")')
          
          echo "peak_hours=$PEAK_HOURS" >> $GITHUB_OUTPUT
          
      - name: Optimize Configuration
        run: |
          # ์‚ฌ์šฉ ํŒจํ„ด์— ๋”ฐ๋ฅธ ์„ค์ • ์ตœ์ ํ™”
          echo "Peak hours: ${{ steps.analysis.outputs.peak_hours }}"
          
          # ๋Ÿฌ๋„ˆ ํƒ€์ž… ์กฐ์ •
          # ํƒ€์ž„์•„์›ƒ ์„ค์ • ์ตœ์ ํ™”
          # ๋ชจ๋ธ ์„ ํƒ ์ „๋žต ์—…๋ฐ์ดํŠธ
          
      - name: Update Scaling Policy
        run: |
          # ์ž๋™ ์Šค์ผ€์ผ๋ง ์ •์ฑ… ์—…๋ฐ์ดํŠธ
          echo "Updating scaling policies based on usage patterns..."

๋น„์šฉ ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ์ตœ์ ํ™”

์ง€๋Šฅํ˜• ๋น„์šฉ ๊ด€๋ฆฌ

bash
# ๋น„์šฉ ์ตœ์ ํ™” ์ „๋žต
claude "Claude Code Action์˜ ์šด์˜ ๋น„์šฉ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์ตœ์ ํ™”ํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค์–ด์ค˜.
๋‹ค์Œ ์š”์†Œ๋ฅผ ํฌํ•จํ•ด์ค˜

๋น„์šฉ ์ถ”์ 
- API ํ˜ธ์ถœ ๋น„์šฉ (ํ† ํฐ ์‚ฌ์šฉ๋Ÿ‰ ๊ธฐ๋ฐ˜)
- GitHub Actions ๋Ÿฐํƒ€์ž„ ๋น„์šฉ
- ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผ ๋น„์šฉ (Bedrock/Vertex)
- ์Šคํ† ๋ฆฌ์ง€์™€ ๋„คํŠธ์›Œํฌ ๋น„์šฉ
- ๋ชจ๋‹ˆํ„ฐ๋ง ๋„๊ตฌ ๋น„์šฉ

๋น„์šฉ ์ตœ์ ํ™”
- ํ† ํฐ ํšจ์œจ์ ์ธ ํ”„๋กฌํ”„ํŠธ ์„ค๊ณ„
- ์บ์‹ฑ์„ ํ†ตํ•œ ์ค‘๋ณต ํ˜ธ์ถœ ๋ฐฉ์ง€
- ์Šค๋งˆํŠธ ๋ชจ๋ธ ์„ ํƒ (๋น„์šฉ vs ์„ฑ๋Šฅ)
- ์˜ˆ์•ฝ ์ธ์Šคํ„ด์Šค์™€ ํ• ์ธ ํ™œ์šฉ
- ์ž๋™ ์Šค์ผ€์ผ๋ง๊ณผ ๋ฆฌ์†Œ์Šค ํ•ด์ œ

์˜ˆ์‚ฐ ๊ด€๋ฆฌ
- ํŒ€๋ณ„/ํ”„๋กœ์ ํŠธ๋ณ„ ๋น„์šฉ ํ• ๋‹น
- ์˜ˆ์‚ฐ ์ž„๊ณ„๊ฐ’๊ณผ ์•Œ๋ฆผ ์„ค์ •
- ์›”๋ณ„ ๋น„์šฉ ์˜ˆ์ธก๊ณผ ๊ณ„ํš
- ๋น„์šฉ ๋Œ€๋น„ ํšจ๊ณผ ์ธก์ •
- ์˜ˆ์‚ฐ ์ดˆ๊ณผ ๋ฐฉ์ง€ ๋ฉ”์ปค๋‹ˆ์ฆ˜

๋ฆฌํฌํŒ…๊ณผ ๋ถ„์„
- ์‹ค์‹œ๊ฐ„ ๋น„์šฉ ๋Œ€์‹œ๋ณด๋“œ
- ์‚ฌ์šฉ ํŒจํ„ด๋ณ„ ๋น„์šฉ ๋ถ„์„
- ROI ๊ณ„์‚ฐ๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ๊ฐ€์น˜
- ๋น„์šฉ ํŠธ๋ Œ๋“œ์™€ ์˜ˆ์ธก
- ์ตœ์ ํ™” ๊ธฐํšŒ ์‹๋ณ„"

[S2CM2] Books 1๊ถŒ โ€” ์ค‘๊ธ‰ ๋น„์šฉ๊ด€๋ฆฌ ํ•™์Šต

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /ํ•™์Šต์šฉ_Books_New/1๊ถŒ_Claude_ClaudeCode_์‚ฌ์šฉ๋ฒ•/

[S2CM3] ์‹ค์ „ Tips โ€” AI ๋น„์šฉ ํ™œ์šฉ๋ฒ• ์ค‘๊ธ‰

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /Tips/๋„๊ตฌ_ํ™œ์šฉ/

S3 ๊ณ ๊ธ‰ (Advanced)


S3CO โ€” ๊ฐœ๋… (Concept)


[S3CO1] Books โ€” ๊ณ ๊ธ‰ ๊ฐœ๋… ํ•™์Šต

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /ํ•™์Šต์šฉ_Books_New/

[S3CO2] ์‹ค์ „ Tips โ€” ์›น๊ฐœ๋ฐœ ๊ธฐ์ดˆ๊ฐœ๋… ๊ณ ๊ธ‰

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /Tips/์›น๊ฐœ๋ฐœ_๊ธฐ์ดˆ๊ฐœ๋…/

S3ST โ€” ์ŠคํŠธ๋Ÿญ์ฒ˜ (Structure)

[S3ST1(์„น์…˜23)] Git Worktree ๊ณ ๊ธ‰ ํ†ตํ•ฉ & ๋ณ‘๋ ฌ ๊ฐœ๋ฐœ ์ „๋žต

8.2 Git Worktree์™€์˜ ๊ณ ๊ธ‰ ํ†ตํ•ฉ ์ „๋žต

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ Worktree ์•„ํ‚คํ…์ฒ˜

Git Worktree๋ฅผ ํ™œ์šฉํ•œ ๋ณ‘๋ ฌ ๊ฐœ๋ฐœ์€ ๋‹จ์ˆœํ•œ ๋ธŒ๋žœ์น˜ ๋ถ„๋ฆฌ๋ฅผ ๋„˜์–ด์„œ ๊ฐ ์ž‘์—… ์˜์—ญ์˜ ๋…๋ฆฝ์„ฑ๊ณผ ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ์ „๋žต์  ์ ‘๊ทผ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

bash
# ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์›ŒํฌํŠธ๋ฆฌ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์„ฑ
# 1. ๊ธฐ๋Šฅ๋ณ„ ๊ฒฉ๋ฆฌ๋œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ
git worktree add ../project-auth-service feature/auth-microservice
git worktree add ../project-payment-gateway feature/payment-integration
git worktree add ../project-user-dashboard feature/dashboard-redesign
git worktree add ../project-mobile-api feature/mobile-optimization
git worktree add ../project-security-audit hotfix/security-vulnerabilities

# 2. ๊ฐ ์›ŒํฌํŠธ๋ฆฌ์— ํŠนํ™”๋œ Claude ์„ค์ •
cd ../project-auth-service
echo "# Authentication Service Context" > CLAUDE.md
echo "Focus: OAuth2/JWT implementation, security best practices" >> CLAUDE.md
echo "Tech Stack: Node.js + Express + Passport" >> CLAUDE.md
echo "Security Level: CRITICAL - all inputs must be validated" >> CLAUDE.md
claude "๋‹น์‹ ์€ ๋ณด์•ˆ ์ธ์ฆ ์‹œ์Šคํ…œ ์ „๋ฌธ๊ฐ€์ž…๋‹ˆ๋‹ค. 
OAuth2์™€ JWT๋ฅผ ํ™œ์šฉํ•œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์ธ์ฆ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•ด์ฃผ์„ธ์š”.
๋ณด์•ˆ ๋ชจ๋ฒ” ์‚ฌ๋ก€์™€ OWASP ๊ฐ€์ด๋“œ๋ผ์ธ์„ ์—„๊ฒฉํžˆ ์ค€์ˆ˜ํ•ด์ฃผ์„ธ์š”."

cd ../project-payment-gateway
echo "# Payment Gateway Context" > CLAUDE.md
echo "Focus: PCI DSS compliance, payment processing" >> CLAUDE.md
echo "Tech Stack: Python + FastAPI + Stripe/PayPal" >> CLAUDE.md
echo "Compliance: PCI DSS Level 1, SOX compliance required" >> CLAUDE.md
claude "๋‹น์‹ ์€ ๊ฒฐ์ œ ์‹œ์Šคํ…œ ์ „๋ฌธ๊ฐ€์ž…๋‹ˆ๋‹ค.
PCI DSS ์ค€์ˆ˜์™€ ๊ธˆ์œต ๋ณด์•ˆ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š”
์•ˆ์ „ํ•˜๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๊ฒฐ์ œ ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๊ตฌํ˜„ํ•ด์ฃผ์„ธ์š”."

cd ../project-user-dashboard
echo "# User Dashboard Context" > CLAUDE.md
echo "Focus: React performance, user experience" >> CLAUDE.md
echo "Tech Stack: React 18 + TypeScript + Tailwind" >> CLAUDE.md
echo "Performance: Lighthouse 95+, Core Web Vitals optimized" >> CLAUDE.md
claude "๋‹น์‹ ์€ ํ”„๋ก ํŠธ์—”๋“œ UX ์ „๋ฌธ๊ฐ€์ž…๋‹ˆ๋‹ค.
์‚ฌ์šฉ์ž ์ค‘์‹ฌ์˜ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ๊ตฌํ˜„ํ•ด์ฃผ์„ธ์š”.
์„ฑ๋Šฅ ์ตœ์ ํ™”์™€ ์ ‘๊ทผ์„ฑ์„ ์ตœ์šฐ์„ ์œผ๋กœ ๊ณ ๋ คํ•ด์ฃผ์„ธ์š”."

์ง€๋Šฅํ˜• Worktree ๊ด€๋ฆฌ ์‹œ์Šคํ…œ

Worktree ๊ด€๋ฆฌ๋ฅผ ์ž๋™ํ™”ํ•˜์—ฌ ๊ฐœ๋ฐœ์ž์˜ ์ธ์ง€ ๋ถ€๋‹ด์„ ์ค„์ด๊ณ  ์ผ๊ด€๋œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

bash
# ๊ณ ๊ธ‰ ์›ŒํฌํŠธ๋ฆฌ ๊ด€๋ฆฌ ์ž๋™ํ™”
claude "์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ Git Worktree ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•ด์ค˜

์ฃผ์š” ๊ธฐ๋Šฅ
1. ๊ธฐ๋Šฅ๋ณ„ ํ…œํ”Œ๋ฆฟ ๊ธฐ๋ฐ˜ ์›ŒํฌํŠธ๋ฆฌ ์ƒ์„ฑ
2. ํ™˜๊ฒฝ๋ณ„ CLAUDE.md ์ž๋™ ์„ค์ •
3. ์˜์กด์„ฑ ์ถฉ๋Œ ํƒ์ง€์™€ ํ•ด๊ฒฐ
4. ์ž‘์—… ์ง„ํ–‰๋ฅ  ์ถ”์ ๊ณผ ๋ฆฌํฌํŒ…
5. ์ž๋™ ์ •๋ฆฌ์™€ ์•„์นด์ด๋น™
6. ํŒ€ ํ˜‘์—…์„ ์œ„ํ•œ ์›ŒํฌํŠธ๋ฆฌ ๊ณต์œ 

๊ธฐ์ˆ  ์š”๊ตฌ์‚ฌํ•ญ
- Shell scripting with error handling
- JSON/YAML ์„ค์ • ํŒŒ์ผ ์ง€์›
- ํฌ๋กœ์Šค ํ”Œ๋žซํผ ํ˜ธํ™˜์„ฑ (Linux/macOS/Windows)
- ๋กœ๊น…๊ณผ ๊ฐ์‚ฌ ์ถ”์ 
- ๋ฐฑ์—…๊ณผ ๋ณต๊ตฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜"

์ƒ์„ฑ๋˜๋Š” ์Šคํฌ๋ฆฝํŠธ ์˜ˆ์‹œ

bash
#!/bin/bash
# new-feature.sh

FEATURE_NAME=$1
WORKTREE_PATH="../project-$FEATURE_NAME"

# ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ
git checkout -b "feature/$FEATURE_NAME"

# Worktree ์ถ”๊ฐ€
git worktree add "$WORKTREE_PATH" "feature/$FEATURE_NAME"

# ์ƒˆ ํ„ฐ๋ฏธ๋„์—์„œ Claude ์‹œ์ž‘
cd "$WORKTREE_PATH"
osascript -e "tell app \"Terminal\" to do script \"cd $WORKTREE_PATH && claude\""

echo "Feature branch 'feature/$FEATURE_NAME' created in $WORKTREE_PATH"

8.3 ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋™์‹œ ๊ฐœ๋ฐœ

์„œ๋น„์Šค๋ณ„ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋ถ„๋ฆฌ

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}, "flowchart": {"htmlLabels": false, "useMaxWidth": false}}}%%
graph TB
    subgraph project [๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ]
        A[user-service<br/>Terminal 1<br/>์‚ฌ์šฉ์ž ๊ด€๋ฆฌ]
        B[product-service<br/>Terminal 2<br/>์ƒํ’ˆ ๊ด€๋ฆฌ]
        C[order-service<br/>Terminal 3<br/>์ฃผ๋ฌธ ์ฒ˜๋ฆฌ]
        D[payment-service<br/>Terminal 4<br/>๊ฒฐ์ œ ์ฒ˜๋ฆฌ]
        E[api-gateway<br/>Terminal 5<br/>ํ†ตํ•ฉ ๊ด€๋ฆฌ]
    end
    
    subgraph terminals [๋ณ‘๋ ฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ]
        T1[Claude Instance 1<br/>์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐ ํ”„๋กœํ•„]
        T2[Claude Instance 2<br/>์ƒํ’ˆ ์นดํƒˆ๋กœ๊ทธ ๋ฐ ๊ฒ€์ƒ‰]
        T3[Claude Instance 3<br/>์ฃผ๋ฌธ ์›Œํฌํ”Œ๋กœ์šฐ]
        T4[Claude Instance 4<br/>๊ฒฐ์ œ ํ†ตํ•ฉ]
        T5[Claude Instance 5<br/>API ๋ผ์šฐํŒ… ๋ฐ ๋ณด์•ˆ]
    end
    
    A -.-> T1
    B -.-> T2
    C -.-> T3
    D -.-> T4
    E -.-> T5
    
    T1 --> T5
    T2 --> T5
    T3 --> T5
    T4 --> T5
    
    classDef serviceStyle fill:#e2e8f0,stroke:#334155,stroke-width:2px,color:#1e293b
    classDef terminalStyle fill:#f1f5f9,stroke:#475569,stroke-width:2px,color:#1e293b
    
    class A,B,C,D,E serviceStyle
    class T1,T2,T3,T4,T5 terminalStyle

์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹  ๊ด€๋ฆฌ

API ๊ฒŒ์ดํŠธ์›จ์ด ๊ฐœ๋ฐœ

bash
# Terminal 1 (API Gateway)
claude "API Gateway๋ฅผ ๊ตฌํ˜„ํ•ด์ค˜.
๋ผ์šฐํŒ…, ์ธ์ฆ, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ, ๋ชจ๋‹ˆํ„ฐ๋ง์„ ํฌํ•จํ•ด์ค˜"

๊ฐœ๋ณ„ ์„œ๋น„์Šค ๊ฐœ๋ฐœ

bash
# Terminal 2 (User Service)
claude "์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•ด์ค˜.
ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ, ํ”„๋กœํ•„ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•ด์ค˜"

# Terminal 3 (Product Service)  
claude "์ƒํ’ˆ ๊ด€๋ฆฌ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•ด์ค˜.
์ƒํ’ˆ CRUD, ์žฌ๊ณ  ๊ด€๋ฆฌ, ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•ด์ค˜"

์„œ๋น„์Šค ๊ฐ„ ๊ณ„์•ฝ ๊ด€๋ฆฌ

bash
# OpenAPI ์ŠคํŽ™ ๋™๊ธฐํ™”
claude "๊ฐ ์„œ๋น„์Šค์˜ OpenAPI ์ŠคํŽ™์„ ์ƒ์„ฑํ•˜๊ณ ,
API Gateway์—์„œ ํ†ตํ•ฉ ๋ฌธ์„œ๋ฅผ ๋งŒ๋“ค์–ด์ค˜"

8.4 ํ”„๋ก ํŠธ์—”๋“œ-๋ฐฑ์—”๋“œ ๋ณ‘๋ ฌ ์ž‘์—…

API ์šฐ์„  ๊ฐœ๋ฐœ

1๋‹จ๊ณ„: API ์ŠคํŽ™ ์ •์˜

bash
# ๊ณตํ†ต ์ž‘์—…
claude "์‚ฌ์šฉ์ž ๊ด€๋ฆฌ API์˜ OpenAPI ์ŠคํŽ™์„ ์ •์˜ํ•ด์ค˜.
์—”๋“œํฌ์ธํŠธ, ์š”์ฒญ/์‘๋‹ต ์Šคํ‚ค๋งˆ, ์—๋Ÿฌ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•ด์ค˜"

2๋‹จ๊ณ„: ๋ณ‘๋ ฌ ๊ฐœ๋ฐœ

bash
# Terminal 1 (Backend)
claude "์ •์˜๋œ API ์ŠคํŽ™์— ๋”ฐ๋ผ ๋ฐฑ์—”๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์ค˜.
Mock ๋ฐ์ดํ„ฐ๋กœ ๋จผ์ € ๋™์ž‘ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ค˜"

# Terminal 2 (Frontend)  
claude "API ์ŠคํŽ™์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์ค˜.
MSW๋ฅผ ์‚ฌ์šฉํ•ด์„œ API๋ฅผ ๋ชจํ‚นํ•ด์ค˜"

ํƒ€์ž… ๊ณต์œ  ์ „๋žต

bash
# ๊ณตํ†ต ํƒ€์ž… ์ •์˜
claude "๋ฐฑ์—”๋“œ์™€ ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๊ณต์œ ํ•  ํƒ€์ž… ์ •์˜๋ฅผ ๋งŒ๋“ค์–ด์ค˜.
Zod ์Šคํ‚ค๋งˆ์—์„œ TypeScript ํƒ€์ž…์„ ์ž๋™ ์ƒ์„ฑํ•˜๋„๋ก ํ•ด์ค˜"

์‹ค์‹œ๊ฐ„ ๋™๊ธฐํ™”

bash
# API ๋ณ€๊ฒฝ ์‹œ ์ž๋™ ์—…๋ฐ์ดํŠธ
claude "๋ฐฑ์—”๋“œ API๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ํ”„๋ก ํŠธ์—”๋“œ ํƒ€์ž…๋„ 
์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•ด์ค˜"

[S3ST3] ๋ฉ€ํ‹ฐ์„ธ์…˜ โ€” ์ปจํ…์ŠคํŠธ ๊ด€๋ฆฌ & ์‹ค์ „ ์˜ˆ์ œ

๊ณ ๊ธ‰ ๋ฉ€ํ‹ฐ์„ธ์…˜ ์•„ํ‚คํ…์ฒ˜

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์„ธ์…˜ ๊ด€๋ฆฌ ์ „๋žต

๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋‹จ์ผ ์„ธ์…˜์œผ๋กœ ๋ชจ๋“  ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์„ธ์…˜์„ ์ฒด๊ณ„์ ์œผ๋กœ ์šด์˜ํ•˜๋Š” ๊ณ ๊ธ‰ ์ „๋žต์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์„ธ์…˜ ๋ถ„๋ฆฌ ํŒจํ„ด

bash
# ํŒจํ„ด 1: ์—ญํ• ๋ณ„ ์„ธ์…˜ ๋ถ„๋ฆฌ
Terminal 1: claude --session "architect"     # ์„ค๊ณ„/๊ตฌ์กฐ ์ „๋‹ด
Terminal 2: claude --session "implementer"   # ๊ตฌํ˜„ ์ „๋‹ด
Terminal 3: claude --session "reviewer"      # ๋ฆฌ๋ทฐ/๊ฒ€์ฆ ์ „๋‹ด

# ํŒจํ„ด 2: ๋ ˆ์ด์–ด๋ณ„ ์„ธ์…˜ ๋ถ„๋ฆฌ
Terminal 1: claude --session "frontend"      # UI/UX ์ž‘์—…
Terminal 2: claude --session "backend"       # API/DB ์ž‘์—…
Terminal 3: claude --session "infra"         # DevOps/๋ฐฐํฌ ์ž‘์—…

์ปจํ…์ŠคํŠธ ์ „๋‹ฌ ๊ธฐ๋ฒ•

์„ธ์…˜ ๊ฐ„ ์ปจํ…์ŠคํŠธ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•:

1. CLAUDE.md ๊ธฐ๋ฐ˜ ๊ณต์œ  ์ปจํ…์ŠคํŠธ

markdown
# CLAUDE.md์— ์„ธ์…˜ ๊ฐ„ ๊ณต์œ  ์ •๋ณด ๊ธฐ๋ก
## ํ˜„์žฌ ์ž‘์—… ์ƒํƒœ
- Frontend: ๋กœ๊ทธ์ธ UI ์™„๋ฃŒ, ๋Œ€์‹œ๋ณด๋“œ ์ง„ํ–‰ ์ค‘
- Backend: Auth API ์™„๋ฃŒ, Payment API ์ง„ํ–‰ ์ค‘
- ๊ณต์œ  ๊ทœ์น™: API ์‘๋‹ต์€ { success, data, error } ํ˜•์‹

2. ํŒŒ์ผ ๊ธฐ๋ฐ˜ ์ปจํ…์ŠคํŠธ ์ „๋‹ฌ

bash
# ์„ธ์…˜ A์—์„œ ๊ฒฐ๊ณผ๋ฅผ ํŒŒ์ผ๋กœ ์ €์žฅ
claude "API ์ŠคํŽ™์„ api-spec.md๋กœ ์ •๋ฆฌํ•ด์ค˜"

# ์„ธ์…˜ B์—์„œ ํŒŒ์ผ ์ฐธ์กฐ
claude "api-spec.md๋ฅผ ์ฝ๊ณ  ํ”„๋ก ํŠธ์—”๋“œ API ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ตฌํ˜„ํ•ด์ค˜"

3. Git ๊ธฐ๋ฐ˜ ์ปจํ…์ŠคํŠธ ๋™๊ธฐํ™”

bash
# ์„ธ์…˜ A: ์ž‘์—… ์™„๋ฃŒ ํ›„ ์ปค๋ฐ‹
git commit -m "feat: auth API ์™„๋ฃŒ"

# ์„ธ์…˜ B: ์ตœ์‹  ์ฝ”๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์—…
git pull && claude "์ตœ๊ทผ ์ปค๋ฐ‹๋œ auth API๋ฅผ ํ™•์ธํ•˜๊ณ  ํ”„๋ก ํŠธ์—”๋“œ ์—ฐ๋™ํ•ด์ค˜"

์ปจํ…์ŠคํŠธ ์œˆ๋„์šฐ ์ตœ์ ํ™”

์ „๋žต๋ฐฉ๋ฒ•ํšจ๊ณผ
ํ”„๋กฌํ”„ํŠธ ์••์ถ•/compact ๋ช…๋ น ์ฃผ๊ธฐ์  ์‚ฌ์šฉํ† ํฐ 50% ์ ˆ๊ฐ
์„ ํƒ์  ๋กœ๋”ฉํ•„์š”ํ•œ ํŒŒ์ผ๋งŒ @ ์ฐธ์กฐ๋ถˆํ•„์š”ํ•œ ์ปจํ…์ŠคํŠธ ์ œ๊ฑฐ
์„ธ์…˜ ์žฌ์‹œ์ž‘์ž‘์—… ์ „ํ™˜ ์‹œ ์ƒˆ ์„ธ์…˜ ์‹œ์ž‘์ด์ „ ์ปจํ…์ŠคํŠธ ์˜ค์—ผ ๋ฐฉ์ง€
CLAUDE.md ์ตœ์ ํ™”200์ค„ ์ด๋‚ด๋กœ ํ•ต์‹ฌ๋งŒ ๊ธฐ๋ก์ž๋™ ๋กœ๋”ฉ ๋น„์šฉ ์ตœ์†Œํ™”

๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ ์‹ค์ „ ์˜ˆ์ œ

ํ”„๋กœ์ ํŠธ: 10,000+ ํŒŒ์ผ SaaS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

์„ธ์…˜ ๊ตฌ์„ฑ:
โ”œโ”€โ”€ ์„ธ์…˜ 1 (์„ค๊ณ„): ์•„ํ‚คํ…์ฒ˜ ๊ฒฐ์ •, ์˜์กด์„ฑ ๊ด€๋ฆฌ
โ”‚   โ””โ”€โ”€ CLAUDE.md + ์•„ํ‚คํ…์ฒ˜ ๋ฌธ์„œ ์ฐธ์กฐ
โ”œโ”€โ”€ ์„ธ์…˜ 2 (ํ”„๋ก ํŠธ): React ์ปดํฌ๋„ŒํŠธ ๊ฐœ๋ฐœ
โ”‚   โ””โ”€โ”€ ์ปดํฌ๋„ŒํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋งŒ ์Šค์ฝ”ํ”„
โ”œโ”€โ”€ ์„ธ์…˜ 3 (๋ฐฑ์—”๋“œ): API + DB ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
โ”‚   โ””โ”€โ”€ api/ + database/ ๋””๋ ‰ํ† ๋ฆฌ ์Šค์ฝ”ํ”„
โ”œโ”€โ”€ ์„ธ์…˜ 4 (ํ…Œ์ŠคํŠธ): E2E + ๋‹จ์œ„ ํ…Œ์ŠคํŠธ
โ”‚   โ””โ”€โ”€ tests/ ๋””๋ ‰ํ† ๋ฆฌ + ํ…Œ์ŠคํŠธ ์„ค์ •
โ””โ”€โ”€ ์„ธ์…˜ 5 (๋ฆฌ๋ทฐ): ์ฝ”๋“œ ๋ฆฌ๋ทฐ + ํ’ˆ์งˆ ๊ฒ€์ฆ
    โ””โ”€โ”€ git diff ๊ธฐ๋ฐ˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋งŒ ๊ฒ€ํ† 

๋™๊ธฐํ™” ํฌ์ธํŠธ:
- ๋งค ๊ธฐ๋Šฅ ์™„๋ฃŒ ์‹œ git commit
- API ์ŠคํŽ™ ๋ณ€๊ฒฝ ์‹œ api-spec.md ์—…๋ฐ์ดํŠธ
- ์•„ํ‚คํ…์ฒ˜ ๋ณ€๊ฒฝ ์‹œ CLAUDE.md ์—…๋ฐ์ดํŠธ
๐Ÿ’ก ํ•ต์‹ฌ ์›์น™: ์„ธ์…˜์€ ๊ฐ€๋ณ๊ฒŒ, ์ปจํ…์ŠคํŠธ๋Š” ํŒŒ์ผ๋กœ ๊ณต์œ ํ•˜๊ณ , ๋™๊ธฐํ™”๋Š” Git์œผ๋กœ.

[S3ST2] Hooks ์„ค์ • ๊ตฌ์กฐ

[S3ST4] TeammateMode โ€” ํŒ€์› ๋ชจ๋“œ ์„ค์ •


[S3ST5] Books โ€” ๊ณ ๊ธ‰ ๊ตฌ์กฐ ์„ค์ • ํ•™์Šต

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /ํ•™์Šต์šฉ_Books_New/

[S3ST6] ์‹ค์ „ Tips โ€” DB/ํ”„๋กœ์ ํŠธ/๊ฐœ๋ฐœ ๊ณ ๊ธ‰

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /Tips/

[S3ST7] .claude ์ฐธ๊ณ  โ€” Rules/Methods/Compliance ๊ณ ๊ธ‰

๐Ÿ“ ๊ฒฝ๋กœ: .claude/rules/, .claude/methods/, .claude/compliance/

S3WF โ€” ์›Œํฌํ”Œ๋กœ์šฐ (Workflow)

[S3WF1(์„น์…˜09)] Hooks ์‹œ์Šคํ…œ

9.1 ์ง€๋Šฅํ˜• Headless ๋ชจ๋“œ ์•„ํ‚คํ…์ฒ˜

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ Headless ํ†ตํ•ฉ ์ „๋žต

Claude Code์˜ Headless ๋ชจ๋“œ๋Š” ๋‹จ์ˆœํ•œ ๋ช…๋ นํ–‰ ๋„๊ตฌ๋ฅผ ๋„˜์–ด์„œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์ž๋™ํ™” ์ƒํƒœ๊ณ„์˜ ํ•ต์‹ฌ ์ธํ”„๋ผ๋กœ ๊ธฐ๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋“œ๋Š” ๋‹ค์–‘ํ•œ ์ž๋™ํ™” ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋งž์ถฐ ์œ ์—ฐํ•˜๊ฒŒ ํ™•์žฅ๋˜๋ฉฐ, ๋Œ€๊ทœ๋ชจ ๊ฐœ๋ฐœ ์กฐ์ง์˜ ๋ณต์žกํ•œ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•ฉ๋‹ˆ๋‹ค.

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}}}%%
graph TD
    A[Headless ๋ชจ๋“œ] --> B[ํ™˜๊ฒฝ ๊ฐ์ง€]
    A --> C[์ปจํ…์ŠคํŠธ ๋ถ„์„]
    A --> D[์ „๋žต ์ˆ˜๋ฆฝ]
    
    B --> E[Production<br/>์ตœ๊ณ  ํ’ˆ์งˆ ๋ชจ๋ธ]
    B --> F[Staging<br/>ํ‘œ์ค€ ๊ฒ€์ฆ]
    B --> G[Development<br/>๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ]
    
    C --> H[ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ]
    C --> I[๊ธฐ์ˆ  ์Šคํƒ]
    C --> J[ํŒ€ ๊ตฌ์กฐ]
    
    D --> K[๋ถ„์„ ๊นŠ์ด]
    D --> L[์šฐ์„ ์ˆœ์œ„ ์˜์—ญ]
    D --> M[๋ฆฌ์†Œ์Šค ํ• ๋‹น]
    
    E --> N[์ข…ํ•ฉ ํ’ˆ์งˆ ๋ถ„์„]
    F --> O[ํ‘œ์ค€ ๊ฒ€์ฆ ํ”„๋กœ์„ธ์Šค]
    G --> P[๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„]
    
    classDef envStyle fill:#e2e8f0,stroke:#334155,stroke-width:2px,color:#1e293b
    classDef analysisStyle fill:#f1f5f9,stroke:#475569,stroke-width:2px,color:#1e293b
    
    class A,B,C,D envStyle
    class E,F,G,H,I,J,K,L,M,N,O,P analysisStyle

์ง€๋Šฅํ˜• ์ปจํ…์ŠคํŠธ ์ธ์‹ ์‹œ์Šคํ…œ

Headless ๋ชจ๋“œ๋Š” ์‹คํ–‰ ํ™˜๊ฒฝ, ํ”„๋กœ์ ํŠธ ์ƒํƒœ, ํŒ€ ๊ทœ์น™์„ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜์—ฌ ์ตœ์ ํ™”๋œ ๋ถ„์„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‹จ์ˆœํ•œ ๋ช…๋ น ์‹คํ–‰์„ ๋„˜์–ด์„œ ํ”„๋กœ์ ํŠธ์˜ ์ „์ฒด์ ์ธ ๋งฅ๋ฝ์„ ์ดํ•ดํ•˜๊ณ  ์ ์ ˆํ•œ ํŒ๋‹จ์„ ๋‚ด๋ฆฌ๋Š” ์ง€๋Šฅํ˜• ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.

๊ณ ๊ธ‰ Headless ์‹คํ–‰ ํŒจํ„ด

bash
# ํ™˜๊ฒฝ๋ณ„ ์ ์‘ํ˜• ๋ถ„์„
claude --headless --context production \
  "ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ์ข…ํ•ฉ ์œ„ํ—˜๋„ ํ‰๊ฐ€๋ฅผ ์ˆ˜ํ–‰ํ•ด์ฃผ์„ธ์š”.
   ๋ณด์•ˆ, ์„ฑ๋Šฅ, ์•ˆ์ •์„ฑ, ๋น„์ฆˆ๋‹ˆ์Šค ์ž„ํŒฉํŠธ๋ฅผ ์ข…ํ•ฉ ๋ถ„์„ํ•˜๊ณ 
   ๋ฐฐํฌ ์Šน์ธ ์—ฌ๋ถ€๋ฅผ JSON ํ˜•ํƒœ๋กœ ์ œ๊ณตํ•ด์ฃผ์„ธ์š”."

# ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ ๋ถ„์„
claude --headless --stream --output-format json \
  "๋Œ€์šฉ๋Ÿ‰ ์ฝ”๋“œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ถ„์„ํ•˜๋ฉฐ
   ์ค‘์š”ํ•œ ์ด์Šˆ ๋ฐœ๊ฒฌ ์‹œ ์ฆ‰์‹œ ์•Œ๋ฆผ์„ ์ œ๊ณตํ•ด์ฃผ์„ธ์š”."

# ์ง€๋Šฅํ˜• ์กฐ๊ฑด๋ถ€ ์‹คํ–‰
#!/bin/bash
# advanced-quality-gate.sh

set -euo pipefail

# ํ™˜๊ฒฝ ๊ฐ์ง€ ๋ฐ ์„ค์ •
DETECT_ENV=$(claude --headless --quiet \
  "ํ˜„์žฌ Git ๋ธŒ๋žœ์น˜์™€ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ถ„์„ํ•˜์—ฌ
   ์ ์ ˆํ•œ ํ’ˆ์งˆ ๊ฒ€์ฆ ์ˆ˜์ค€์„ ๊ฒฐ์ •ํ•ด์ฃผ์„ธ์š” (minimal/standard/strict)")

case $DETECT_ENV in
  "strict")
    QUALITY_THRESHOLD=95
    SECURITY_SCAN=true
    PERFORMANCE_TEST=true
    ;;
  "standard")
    QUALITY_THRESHOLD=85
    SECURITY_SCAN=true
    PERFORMANCE_TEST=false
    ;;
  "minimal")
    QUALITY_THRESHOLD=75
    SECURITY_SCAN=false
    PERFORMANCE_TEST=false
    ;;
esac

# ์ ์‘ํ˜• ํ’ˆ์งˆ ๋ถ„์„
QUALITY_RESULT=$(claude --headless --output quality-report.json \
  "์ฝ”๋“œ ํ’ˆ์งˆ์„ $QUALITY_THRESHOLD% ๊ธฐ์ค€์œผ๋กœ ๋ถ„์„ํ•ด์ฃผ์„ธ์š”.
   ๊ธฐ์ค€: ๋ณต์žก๋„, ์ค‘๋ณต๋„, ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€, ๋ฌธ์„œํ™” ์ˆ˜์ค€
   ๊ฒฐ๊ณผ: pass/fail๊ณผ ์ƒ์„ธ ๊ฐœ์„  ๋ฐฉ์•ˆ")

# ์กฐ๊ฑด๋ถ€ ๋ณด์•ˆ ์Šค์บ”
if [ "$SECURITY_SCAN" = true ]; then
  SECURITY_RESULT=$(claude --headless --output security-report.json \
    "OWASP Top 10๊ณผ SANS Top 25 ๊ธฐ์ค€์œผ๋กœ
     ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ์ข…ํ•ฉ ๋ถ„์„ํ•ด์ฃผ์„ธ์š”.
     ์‹ฌ๊ฐ๋„๋ณ„ ๋ถ„๋ฅ˜์™€ ์ˆ˜์ • ์šฐ์„ ์ˆœ์œ„ ํฌํ•จ")
fi

# ์ง€๋Šฅํ˜• ์˜์‚ฌ๊ฒฐ์ •
DECISION=$(claude --headless \
  "ํ’ˆ์งˆ ๋ฆฌํฌํŠธ์™€ ๋ณด์•ˆ ๋ฆฌํฌํŠธ๋ฅผ ์ข…ํ•ฉํ•˜์—ฌ
   ๋ฐฐํฌ ์Šน์ธ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•ด์ฃผ์„ธ์š”.
   ๊ฒฐ์ • ๊ทผ๊ฑฐ์™€ ํ•จ๊ป˜ ๋ช…ํ™•ํ•œ approve/reject ๋‹ต๋ณ€")

if [[ $DECISION == *"approve"* ]]; then
  echo "โœ… ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ ํ†ต๊ณผ - ๋ฐฐํฌ ์Šน์ธ"
  exit 0
else
  echo "โŒ ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ ์‹คํŒจ - ๊ฐœ์„  ํ•„์š”"
  claude --headless "๊ฐœ์„  ๋ฐฉ์•ˆ๊ณผ ์˜ˆ์ƒ ์†Œ์š” ์‹œ๊ฐ„์„ ์ œ์‹œํ•ด์ฃผ์„ธ์š”"
  exit 1
fi

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ ๊ตฌ์„ฑ ๊ด€๋ฆฌ

๋‹ค์ธต ๊ตฌ์„ฑ ์‹œ์Šคํ…œ

bash
# ๊ธฐ๋ณธ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ (๋ชจ๋“  ํ™˜๊ฒฝ ๊ณตํ†ต)
export CLAUDE_API_KEY="sk-ant-..."
export CLAUDE_MODEL="claude-3-sonnet-20240229"  # ๋น„์šฉ ํšจ์œจ์  ๊ธฐ๋ณธ ๋ชจ๋ธ
export CLAUDE_HEADLESS=true
export CLAUDE_TIMEOUT=300  # 5๋ถ„ ํƒ€์ž„์•„์›ƒ
export CLAUDE_RETRY_COUNT=3
export CLAUDE_LOG_LEVEL="info"

# ํ™˜๊ฒฝ๋ณ„ ์„ธ๋ถ€ ๊ตฌ์„ฑ
case "$ENVIRONMENT" in
  "production")
    export CLAUDE_MODEL="claude-3-opus-20240229"  # ์ตœ๊ณ  ํ’ˆ์งˆ
    export CLAUDE_OUTPUT_FORMAT="structured-json"
    export CLAUDE_VALIDATION_STRICT=true
    export CLAUDE_AUDIT_ENABLED=true
    ;;
  "staging")
    export CLAUDE_MODEL="claude-3-sonnet-20240229"
    export CLAUDE_OUTPUT_FORMAT="json"
    export CLAUDE_VALIDATION_STANDARD=true
    ;;
  "development")
    export CLAUDE_MODEL="claude-3-haiku-20240307"  # ๋น ๋ฅธ ๋ฐ˜์‘
    export CLAUDE_OUTPUT_FORMAT="markdown"
    export CLAUDE_VALIDATION_MINIMAL=true
    ;;
esac

# ํ”„๋กœ์ ํŠธ๋ณ„ ์ปจํ…์ŠคํŠธ ๊ตฌ์„ฑ
export CLAUDE_PROJECT_TYPE="web-application"
export CLAUDE_TECH_STACK="react,node,typescript,postgresql"
export CLAUDE_TEAM_SIZE="12"
export CLAUDE_COMPLIANCE_LEVEL="SOC2"  # SOC2, HIPAA, PCI-DSS ๋“ฑ
export CLAUDE_QUALITY_GATES="security,performance,accessibility"

# ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ ์„ค์ •
export CLAUDE_CACHE_ENABLED=true
export CLAUDE_CACHE_TTL=3600  # 1์‹œ๊ฐ„
export CLAUDE_PARALLEL_ANALYSIS=true
export CLAUDE_MAX_CONCURRENT=4
export CLAUDE_MEMORY_LIMIT="2GB"

# ๋ณด์•ˆ ๋ฐ ๊ทœ์ • ์ค€์ˆ˜
export CLAUDE_DATA_RESIDENCY="us-east-1"
export CLAUDE_PII_DETECTION=true
export CLAUDE_SENSITIVE_DATA_MASKING=true
export CLAUDE_AUDIT_LOG_RETENTION="90d"

๋™์  ๊ตฌ์„ฑ ๋กœ๋”

bash
#!/bin/bash
# claude-config-loader.sh

# ํ”„๋กœ์ ํŠธ๋ณ„ ๋™์  ๊ตฌ์„ฑ ๋กœ๋“œ
load_claude_config() {
    local project_root="$(git rev-parse --show-toplevel)"
    local config_file="$project_root/.claude/ci-config.json"
    
    if [[ -f "$config_file" ]]; then
        # JSON ๊ตฌ์„ฑ ํŒŒ์ผ์—์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋กœ๋“œ
        eval "$(jq -r 'to_entries[] | "export CLAUDE_\(.key | ascii_upcase)=\(.value)"' "$config_file")"
    fi
    
    # Git ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ์ž๋™ ์„ค์ •
    export CLAUDE_GIT_BRANCH="$(git rev-parse --abbrev-ref HEAD)"
    export CLAUDE_GIT_COMMIT="$(git rev-parse HEAD)"
    export CLAUDE_GIT_AUTHOR="$(git log -1 --pretty=format:'%an')"
    
    # ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ ์ž๋™ ํƒ์ง€
    local file_count=$(find . -name "*.ts" -o -name "*.js" -o -name "*.py" | wc -l)
    if (( file_count > 1000 )); then
        export CLAUDE_PROJECT_SCALE="large"
        export CLAUDE_ANALYSIS_DEPTH="comprehensive"
    elif (( file_count > 100 )); then
        export CLAUDE_PROJECT_SCALE="medium"
        export CLAUDE_ANALYSIS_DEPTH="standard"
    else
        export CLAUDE_PROJECT_SCALE="small"
        export CLAUDE_ANALYSIS_DEPTH="focused"
    fi
}

# ์‚ฌ์šฉ๋ฒ•
load_claude_config

[S3WF2(์„น์…˜17)] ๊ณ ๊ธ‰ ๊ฟ€ํŒ & ์›Œํฌํ”Œ๋กœ์šฐ

7.3 ๋น„์ฃผ์–ผ ๋””์ž์ธ ๊ตฌํ˜„ ์›Œํฌํ”Œ๋กœ์šฐ

๋น„์ฃผ์–ผ ๋””์ž์ธ์„ ์ •ํ™•ํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ํ˜„๋Œ€ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์˜ ํ•ต์‹ฌ ์—ญ๋Ÿ‰์ž…๋‹ˆ๋‹ค. Claude Code๋Š” ๋””์ž์ธ ์˜๋„๋ฅผ ์ •ํ™•ํžˆ ํŒŒ์•…ํ•˜๊ณ , ๋ฐ˜์‘ํ˜• ๋ ˆ์ด์•„์›ƒ๊ณผ ์ธํ„ฐ๋ž™์…˜๊นŒ์ง€ ๊ณ ๋ คํ•œ ์™„์„ฑ๋„ ๋†’์€ ๊ตฌํ˜„์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๋””์ž์ธ์„ ์ฝ”๋“œ๋กœ

์ฒด๊ณ„์ ์ธ ๋””์ž์ธ ๊ตฌํ˜„ ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ๋””์ž์ด๋„ˆ์™€ ๊ฐœ๋ฐœ์ž ๊ฐ„์˜ ํ˜‘์—…์„ ์›ํ™œํ•˜๊ฒŒ ํ•˜๊ณ , ์ผ๊ด€๋œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

1. ์Šคํฌ๋ฆฐ์ƒท ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ

bash
# ๋””์ž์ธ ํŒŒ์ผ ์ œ๊ณต
claude "์ด Figma ๋””์ž์ธ ์Šคํฌ๋ฆฐ์ƒท์„ ๋ณด๊ณ  
React ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌํ˜„ํ•ด์ค˜. 
๋ฐ˜์‘ํ˜• ๋””์ž์ธ๊ณผ ๋‹คํฌ ๋ชจ๋“œ๋„ ์ง€์›ํ•ด์•ผ ํ•ด"

2. ๋ฐ˜๋ณต์  ๊ฐœ์„ 

bash
# ์ดˆ๊ธฐ ๊ตฌํ˜„
claude "๊ธฐ๋ณธ ๋ ˆ์ด์•„์›ƒ๊ณผ ์Šคํƒ€์ผ์„ ๋จผ์ € ๊ตฌํ˜„ํ•ด์ค˜"

# ์„ธ๋ถ€ ์กฐ์ •
claude "ํŒจ๋”ฉ์„ ์กฐ๊ธˆ ๋Š˜๋ฆฌ๊ณ , ํฐํŠธ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•ด์ค˜.
ํ˜ธ๋ฒ„ ํšจ๊ณผ์™€ ํŠธ๋žœ์ง€์…˜๋„ ์ถ”๊ฐ€ํ•ด์ค˜"

# ์ธํ„ฐ๋ž™์…˜ ์ถ”๊ฐ€
claude "ํด๋ฆญ ์‹œ ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค˜"

์ปดํฌ๋„ŒํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ตฌ์ถ•

bash
claude "๋””์ž์ธ ์‹œ์Šคํ…œ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปดํฌ๋„ŒํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด์ค˜.
Button, Card, Modal ๋“ฑ ๊ธฐ๋ณธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํฌํ•จํ•˜๊ณ ,
Storybook์œผ๋กœ ๋ฌธ์„œํ™”ํ•ด์ค˜"

7.4 ๋ฆฌํŒฉํ† ๋ง๊ณผ ์ฝ”๋“œ ํ’ˆ์งˆ ๊ฐœ์„ 

๋ฆฌํŒฉํ† ๋ง์€ ์ฝ”๋“œ์˜ ์™ธ๋ถ€ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ์ค‘์š”ํ•œ ํ™œ๋™์ž…๋‹ˆ๋‹ค. Claude Code๋Š” ์ฝ”๋“œ ์Šค๋ฉœ์„ ์ž๋™์œผ๋กœ ํƒ์ง€ํ•˜๊ณ , ์•ˆ์ „ํ•œ ๋ฆฌํŒฉํ† ๋ง ์ „๋žต์„ ์ œ์‹œํ•˜๋ฉฐ, ์ง€์†์ ์ธ ์ฝ”๋“œ ํ’ˆ์งˆ ํ–ฅ์ƒ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ฒด๊ณ„์ ์ธ ๋ฆฌํŒฉํ† ๋ง

ํšจ๊ณผ์ ์ธ ๋ฆฌํŒฉํ† ๋ง์€ ๋‹จ์ˆœํ•œ ์ฝ”๋“œ ์ •๋ฆฌ๋ฅผ ๋„˜์–ด์„œ, ์‹œ์Šคํ…œ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ์ „๋žต์  ํ™œ๋™์ž…๋‹ˆ๋‹ค.

1. ์ฝ”๋“œ ์Šค๋ฉœ ํƒ์ง€

bash
claude "์ด ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ๋ฆฌํŒฉํ† ๋ง์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ์ฐพ์•„์ค˜.
๋‹ค์Œ์„ ์ค‘์ ์ ์œผ๋กœ ํ™•์ธํ•ด์ค˜
- ์ค‘๋ณต ์ฝ”๋“œ
- ๊ธด ํ•จ์ˆ˜
- ๋ณต์žกํ•œ ์กฐ๊ฑด๋ฌธ
- ๋ถ€์ ์ ˆํ•œ ์ด๋ฆ„"

2. ๋‹จ๊ณ„๋ณ„ ๋ฆฌํŒฉํ† ๋ง

bash
# 1๋‹จ๊ณ„: ํ…Œ์ŠคํŠธ ํ™•๋ณด
claude "๋ฆฌํŒฉํ† ๋ง ์ „์— ํ˜„์žฌ ๋™์ž‘์„ ๋ณด์žฅํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ด์ค˜"

# 2๋‹จ๊ณ„: ์ž‘์€ ๋‹จ์œ„๋กœ ๊ฐœ์„ 
claude "ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ๋ฆฌํŒฉํ† ๋ง์„ ์ง„ํ–‰ํ•ด์ค˜.
๊ฐ ๋‹จ๊ณ„๋งˆ๋‹ค ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ•˜๋Š”์ง€ ํ™•์ธํ•ด์ค˜"

# 3๋‹จ๊ณ„: ์„ฑ๋Šฅ ๊ฒ€์ฆ
claude "๋ฆฌํŒฉํ† ๋ง ์ „ํ›„์˜ ์„ฑ๋Šฅ์„ ๋น„๊ตํ•ด์ค˜.
๋ฒค์น˜๋งˆํฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ถ„์„ํ•ด์ค˜"

์ฝ”๋“œ ํ’ˆ์งˆ ๋ฉ”ํŠธ๋ฆญ

bash
claude "์ฝ”๋“œ ํ’ˆ์งˆ์„ ์ธก์ •ํ•˜๊ณ  ๊ฐœ์„  ๋ฐฉ์•ˆ์„ ์ œ์‹œํ•ด์ค˜
- ์ˆœํ™˜ ๋ณต์žก๋„
- ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€
- ๊ธฐ์ˆ  ๋ถ€์ฑ„
- ์˜์กด์„ฑ ๋ณต์žก๋„"

7.5 ๋ฌธ์„œํ™” ์ž๋™ํ™”

๋ฌธ์„œํ™”๋Š” ์ฝ”๋“œ์˜ ์ง€์†์ ์ธ ์œ ์ง€๋ณด์ˆ˜์™€ ํŒ€ ํ˜‘์—…์— ํ•„์ˆ˜์ ์ธ ์š”์†Œ์ž…๋‹ˆ๋‹ค. Claude Code๋Š” ์ฝ”๋“œ์—์„œ ์ž๋™์œผ๋กœ ๋ฌธ์„œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์‹œ๊ฐ์  ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์—ฌ ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์„ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฌธ์„œํ™” ์ž๋™ํ™”๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ์—์„œ ๋ฌธ์„œ๋กœ

ํšจ๊ณผ์ ์ธ ๋ฌธ์„œํ™”๋Š” ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์ง„ํ™”ํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž์˜ ์ˆ˜์ž‘์—…์„ ์ตœ์†Œํ™”ํ•˜๋ฉด์„œ๋„ ํ•ญ์ƒ ์ตœ์‹  ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

1. API ๋ฌธ์„œ ์ž๋™ ์ƒ์„ฑ

bash
claude "์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•ด์„œ API ๋ฌธ์„œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ค˜.
OpenAPI(Swagger) ์ŠคํŽ™์œผ๋กœ ๋งŒ๋“ค๊ณ ,
์˜ˆ์ œ ์š”์ฒญ/์‘๋‹ต๋„ ํฌํ•จํ•ด์ค˜"

2. ์ฝ”๋“œ ์ฃผ์„์—์„œ ๋ฌธ์„œ๋กœ

bash
claude "JSDoc/TSDoc ์ฃผ์„์„ ํŒŒ์‹ฑํ•ด์„œ 
๊ฐœ๋ฐœ์ž ๋ฌธ์„œ๋ฅผ ์ƒ์„ฑํ•ด์ค˜.
ํ•จ์ˆ˜ ์„ค๋ช…, ํŒŒ๋ผ๋ฏธํ„ฐ, ๋ฐ˜ํ™˜๊ฐ’, ์˜ˆ์ œ๋ฅผ ํฌํ•จํ•ด์ค˜"

๋‹ค์ด์–ด๊ทธ๋žจ ์ƒ์„ฑ

bash
claude "์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜๋ฅผ Mermaid ๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ๊ทธ๋ ค์ค˜.
์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๊ด€๊ณ„์™€ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ํ‘œ์‹œํ•ด์ค˜"

์‹ค์ „ ์›Œํฌํ”Œ๋กœ์šฐ: ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ์‹œ๋‚˜๋ฆฌ์˜ค

์‹ค์ œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ EPCC ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ ์šฉ๋˜๋Š”์ง€ ๊ตฌ์ฒด์ ์ธ ์˜ˆ์‹œ๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๊ฒฐ์ œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” 3์ผ๊ฐ„์˜ ์ „์ฒด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํ†ตํ•ด ๊ฐ ๋‹จ๊ณ„๋ณ„ Claude Code ํ™œ์šฉ๋ฒ•์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ ๊ฐœ์š”: ์ƒˆ๋กœ์šด ๊ฒฐ์ œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

๋ณต์žกํ•œ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ์‹œ ์ฒด๊ณ„์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์ด ์–ด๋–ป๊ฒŒ ์œ„ํ—˜์„ ์ค„์ด๊ณ  ํ’ˆ์งˆ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š”์ง€ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}}}%%
gantt
    title 3์ผ๊ฐ„ ๊ฒฐ์ œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ์›Œํฌํ”Œ๋กœ์šฐ
    dateFormat  X
    axisFormat %d
    
    section Day 1: ํƒ์ƒ‰๊ณผ ๊ณ„ํš
    ๊ธฐ์กด ์‹œ์Šคํ…œ ๋ถ„์„     :active, d1-morning, 0, 1
    ๊ฒฐ์ œ ๊ธฐ๋Šฅ ์„ค๊ณ„      :d1-afternoon, after d1-morning, 1
    ์•„ํ‚คํ…์ฒ˜ ๋ฌธ์„œํ™”     :d1-doc, after d1-afternoon, 1
    
    section Day 2: ๊ตฌํ˜„
    ๋ฐฑ์—”๋“œ API ๊ฐœ๋ฐœ     :d2-backend, 1, 1
    ํ”„๋ก ํŠธ์—”๋“œ UI      :d2-frontend, after d2-backend, 1
    ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ    :d2-test, after d2-frontend, 1
    
    section Day 3: ํ†ตํ•ฉ๊ณผ ๋ฐฐํฌ
    ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ        :d3-integration, 2, 1
    E2E ํ…Œ์ŠคํŠธ        :d3-e2e, after d3-integration, 1
    ๋ฌธ์„œํ™” ๋ฐ ๋ฐฐํฌ ์ค€๋น„  :d3-deploy, after d3-e2e, 1

Day 1: ํƒ์ƒ‰๊ณผ ๊ณ„ํš


[S3WF3] Review-Evaluate Loop โ€” 97์  ์ˆœํ™˜ ํ‰๊ฐ€

[S3WF4] Books โ€” ๊ณ ๊ธ‰ ์›Œํฌํ”Œ๋กœ์šฐ ํ•™์Šต

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /ํ•™์Šต์šฉ_Books_New/

[S3WF5] ์‹ค์ „ Tips โ€” ๊ฐœ๋ฐœ/๋ฐฑ์—…/์„ธ์…˜ ๊ณ ๊ธ‰

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /Tips/

[S3WF6] Custom Skills โ€” ์ปค์Šคํ…€ ์Šคํ‚ฌ ์‹ฌํ™” 3์ข…

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /Custom_Skills/

[S3WF7] .claude ์ฐธ๊ณ  โ€” Methods/Commands ๊ณ ๊ธ‰

๐Ÿ“ ๊ฒฝ๋กœ: .claude/methods/, .claude/commands/

S3TO โ€” ํŒ€์šด์šฉ (Team Operations)

[S3TO1(์„น์…˜08)] Agent Teams โ€” ๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ ํ˜‘์—…

8.3 ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋™์‹œ ๊ฐœ๋ฐœ

์„œ๋น„์Šค๋ณ„ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋ถ„๋ฆฌ

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}, "flowchart": {"htmlLabels": false, "useMaxWidth": false}}}%%
graph TB
    subgraph project [๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ]
        A[user-service<br/>Terminal 1<br/>์‚ฌ์šฉ์ž ๊ด€๋ฆฌ]
        B[product-service<br/>Terminal 2<br/>์ƒํ’ˆ ๊ด€๋ฆฌ]
        C[order-service<br/>Terminal 3<br/>์ฃผ๋ฌธ ์ฒ˜๋ฆฌ]
        D[payment-service<br/>Terminal 4<br/>๊ฒฐ์ œ ์ฒ˜๋ฆฌ]
        E[api-gateway<br/>Terminal 5<br/>ํ†ตํ•ฉ ๊ด€๋ฆฌ]
    end
    
    subgraph terminals [๋ณ‘๋ ฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ]
        T1[Claude Instance 1<br/>์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐ ํ”„๋กœํ•„]
        T2[Claude Instance 2<br/>์ƒํ’ˆ ์นดํƒˆ๋กœ๊ทธ ๋ฐ ๊ฒ€์ƒ‰]
        T3[Claude Instance 3<br/>์ฃผ๋ฌธ ์›Œํฌํ”Œ๋กœ์šฐ]
        T4[Claude Instance 4<br/>๊ฒฐ์ œ ํ†ตํ•ฉ]
        T5[Claude Instance 5<br/>API ๋ผ์šฐํŒ… ๋ฐ ๋ณด์•ˆ]
    end
    
    A -.-> T1
    B -.-> T2
    C -.-> T3
    D -.-> T4
    E -.-> T5
    
    T1 --> T5
    T2 --> T5
    T3 --> T5
    T4 --> T5
    
    classDef serviceStyle fill:#e2e8f0,stroke:#334155,stroke-width:2px,color:#1e293b
    classDef terminalStyle fill:#f1f5f9,stroke:#475569,stroke-width:2px,color:#1e293b
    
    class A,B,C,D,E serviceStyle
    class T1,T2,T3,T4,T5 terminalStyle

์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹  ๊ด€๋ฆฌ

API ๊ฒŒ์ดํŠธ์›จ์ด ๊ฐœ๋ฐœ

bash
# Terminal 1 (API Gateway)
claude "API Gateway๋ฅผ ๊ตฌํ˜„ํ•ด์ค˜.
๋ผ์šฐํŒ…, ์ธ์ฆ, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ, ๋ชจ๋‹ˆํ„ฐ๋ง์„ ํฌํ•จํ•ด์ค˜"

๊ฐœ๋ณ„ ์„œ๋น„์Šค ๊ฐœ๋ฐœ

bash
# Terminal 2 (User Service)
claude "์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•ด์ค˜.
ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ, ํ”„๋กœํ•„ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•ด์ค˜"

# Terminal 3 (Product Service)  
claude "์ƒํ’ˆ ๊ด€๋ฆฌ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•ด์ค˜.
์ƒํ’ˆ CRUD, ์žฌ๊ณ  ๊ด€๋ฆฌ, ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ํฌํ•จํ•ด์ค˜"

์„œ๋น„์Šค ๊ฐ„ ๊ณ„์•ฝ ๊ด€๋ฆฌ

bash
# OpenAPI ์ŠคํŽ™ ๋™๊ธฐํ™”
claude "๊ฐ ์„œ๋น„์Šค์˜ OpenAPI ์ŠคํŽ™์„ ์ƒ์„ฑํ•˜๊ณ ,
API Gateway์—์„œ ํ†ตํ•ฉ ๋ฌธ์„œ๋ฅผ ๋งŒ๋“ค์–ด์ค˜"

8.4 ํ”„๋ก ํŠธ์—”๋“œ-๋ฐฑ์—”๋“œ ๋ณ‘๋ ฌ ์ž‘์—…

API ์šฐ์„  ๊ฐœ๋ฐœ

1๋‹จ๊ณ„: API ์ŠคํŽ™ ์ •์˜

bash
# ๊ณตํ†ต ์ž‘์—…
claude "์‚ฌ์šฉ์ž ๊ด€๋ฆฌ API์˜ OpenAPI ์ŠคํŽ™์„ ์ •์˜ํ•ด์ค˜.
์—”๋“œํฌ์ธํŠธ, ์š”์ฒญ/์‘๋‹ต ์Šคํ‚ค๋งˆ, ์—๋Ÿฌ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•ด์ค˜"

2๋‹จ๊ณ„: ๋ณ‘๋ ฌ ๊ฐœ๋ฐœ

bash
# Terminal 1 (Backend)
claude "์ •์˜๋œ API ์ŠคํŽ™์— ๋”ฐ๋ผ ๋ฐฑ์—”๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์ค˜.
Mock ๋ฐ์ดํ„ฐ๋กœ ๋จผ์ € ๋™์ž‘ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ค˜"

# Terminal 2 (Frontend)  
claude "API ์ŠคํŽ™์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์ค˜.
MSW๋ฅผ ์‚ฌ์šฉํ•ด์„œ API๋ฅผ ๋ชจํ‚นํ•ด์ค˜"

ํƒ€์ž… ๊ณต์œ  ์ „๋žต

bash
# ๊ณตํ†ต ํƒ€์ž… ์ •์˜
claude "๋ฐฑ์—”๋“œ์™€ ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๊ณต์œ ํ•  ํƒ€์ž… ์ •์˜๋ฅผ ๋งŒ๋“ค์–ด์ค˜.
Zod ์Šคํ‚ค๋งˆ์—์„œ TypeScript ํƒ€์ž…์„ ์ž๋™ ์ƒ์„ฑํ•˜๋„๋ก ํ•ด์ค˜"

์‹ค์‹œ๊ฐ„ ๋™๊ธฐํ™”

bash
# API ๋ณ€๊ฒฝ ์‹œ ์ž๋™ ์—…๋ฐ์ดํŠธ
claude "๋ฐฑ์—”๋“œ API๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ํ”„๋ก ํŠธ์—”๋“œ ํƒ€์ž…๋„ 
์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•ด์ค˜"

[S3TO2(์„น์…˜26)] MCP ์„œ๋ฒ„ ์‹ค์ „ ํ™œ์šฉ 10์ข… (์™ธ๋ถ€ AI ์—ฐ๋™)

11.7 ๋‹ค์ค‘ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ ์„ค์ •

ํ˜„๋Œ€์ ์ธ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์—์„œ๋Š” ๋‹ค์–‘ํ•œ ํด๋ผ์šฐ๋“œ ํ”„๋กœ๋ฐ”์ด๋”๋ฅผ ํ™œ์šฉํ•œ ์œ ์—ฐํ•œ ์ธํ”„๋ผ ๊ตฌ์„ฑ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. Claude Code Action์€ ์ง์ ‘ Anthropic API๋ฟ๋งŒ ์•„๋‹ˆ๋ผ AWS Bedrock๊ณผ Google Vertex AI๋ฅผ ํ†ตํ•œ ์ ‘๊ทผ๋„ ์ง€์›ํ•˜์—ฌ, ์กฐ์ง์˜ ํด๋ผ์šฐ๋“œ ์ „๋žต์— ๋งž๋Š” ์ตœ์ ์˜ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

AWS Bedrock ํ†ตํ•ฉ

AWS Bedrock์„ ํ†ตํ•œ Claude ์ ‘๊ทผ์€ AWS์˜ ๋ณด์•ˆ ๋ฐ ๊ทœ์ • ์ค€์ˆ˜ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

OIDC ๊ธฐ๋ฐ˜ Bedrock ์„ค์ •

yaml
# AWS Bedrock์„ ํ†ตํ•œ Claude Code Action
name: Claude via AWS Bedrock
on:
  issue_comment:
    types: [created]
  pull_request_review_comment:
    types: [created]

permissions:
  id-token: write  # OIDC ํ† ํฐ ์ƒ์„ฑ์„ ์œ„ํ•ด ํ•„์š”
  contents: write
  pull-requests: write
  issues: write

jobs:
  claude-bedrock:
    runs-on: ubuntu-latest
    environment: production
    
    steps:
      - name: Configure AWS Credentials (OIDC)
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }}
          role-session-name: claude-code-action
          aws-region: us-west-2
          
      - name: Validate AWS Permissions
        run: |
          # Bedrock ์ ‘๊ทผ ๊ถŒํ•œ ํ™•์ธ
          aws bedrock list-foundation-models --region us-west-2
          
          # Cross-region inference ๊ถŒํ•œ ํ™•์ธ
          aws bedrock list-inference-profiles --region us-west-2
          
      - name: Generate GitHub App Token
        id: app-token
        uses: actions/create-github-app-token@v2
        with:
          app-id: ${{ secrets.APP_ID }}
          private-key: ${{ secrets.APP_PRIVATE_KEY }}
          
      - uses: anthropics/claude-code-action@beta
        with:
          github_token: ${{ steps.app-token.outputs.token }}
          model: "anthropic.claude-3-7-sonnet-20250219-beta:0"  # Cross-region inference
          use_bedrock: "true"
          timeout_minutes: 45
          
          custom_instructions: |
            AWS Bedrock ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.
            ๋‹ค์Œ AWS ํŠนํ™” ๊ณ ๋ ค์‚ฌํ•ญ์„ ์ ์šฉํ•ด์ฃผ์„ธ์š”
            - AWS ๋ณด์•ˆ ๋ชจ๋ฒ” ์‚ฌ๋ก€ ์ค€์ˆ˜
            - CloudTrail ๋กœ๊น… ๊ณ ๋ ค
            - VPC ๋„คํŠธ์›Œํฌ ์ •์ฑ… ์ธ์‹
            - AWS ๋ฆฌ์†Œ์Šค ํƒœ๊น… ํ‘œ์ค€ ์ ์šฉ

AWS IAM ์—ญํ• ๊ณผ ์ •์ฑ… ์„ค์ •

bash
# AWS IAM ์„ค์ • ์ตœ์ ํ™”
claude "Claude Code Action์„ ์œ„ํ•œ AWS IAM ์„ค์ •์„ ์ตœ์ ํ™”ํ•ด์ค˜.
๋‹ค์Œ์„ ํฌํ•จํ•ด์ค˜

IAM ์—ญํ•  ์ •์˜
- GitHub Actions์šฉ OIDC ์‹ ๋ขฐ ๊ด€๊ณ„
- Bedrock ๋ชจ๋ธ ์ ‘๊ทผ ๊ถŒํ•œ
- CloudWatch ๋กœ๊น… ๊ถŒํ•œ
- ์ตœ์†Œ ๊ถŒํ•œ ์›์น™ ์ ์šฉ

๋ณด์•ˆ ๊ฐ•ํ™” ์„ค์ •
- ์กฐ๊ฑด๋ถ€ ์ ‘๊ทผ ์ œ์–ด
- ๋ฆฌ์†Œ์Šค ๊ธฐ๋ฐ˜ ์ •์ฑ…
- ์‹œ๊ฐ„ ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ์ œํ•œ
- IP ์ฃผ์†Œ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ

Cross-region inference ์„ค์ •
- ๋‹ค์ค‘ ๋ฆฌ์ „ ๋ชจ๋ธ ์ ‘๊ทผ
- ์ง€์—ฐ ์‹œ๊ฐ„ ์ตœ์ ํ™”
- ๊ฐ€์šฉ์„ฑ ํ–ฅ์ƒ ์ „๋žต
- ๋น„์šฉ ์ตœ์ ํ™” ๊ณ ๋ ค์‚ฌํ•ญ"

Google Vertex AI ํ†ตํ•ฉ

Google Cloud์˜ AI/ML ํ”Œ๋žซํผ์ธ Vertex AI๋ฅผ ํ†ตํ•œ Claude ์ ‘๊ทผ ์„ค์ •

Vertex AI OIDC ์„ค์ •

yaml
# Google Vertex AI๋ฅผ ํ†ตํ•œ Claude Code Action
name: Claude via Google Vertex AI  
on:
  issue_comment:
    types: [created]
  pull_request_review_comment:
    types: [created]

permissions:
  id-token: write  # OIDC ํ† ํฐ ์ƒ์„ฑ์„ ์œ„ํ•ด ํ•„์š”
  contents: write
  pull-requests: write
  issues: write

jobs:
  claude-vertex:
    runs-on: ubuntu-latest
    environment: production
    
    steps:
      - name: Authenticate to Google Cloud
        uses: google-github-actions/auth@v2
        with:
          workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }}
          service_account: ${{ secrets.GCP_SERVICE_ACCOUNT }}
          
      - name: Set up Cloud SDK
        uses: google-github-actions/setup-gcloud@v2
        
      - name: Validate GCP Permissions
        run: |
          # Vertex AI ์ ‘๊ทผ ๊ถŒํ•œ ํ™•์ธ
          gcloud ai models list --region=us-central1
          
          # ํ”„๋กœ์ ํŠธ ์„ค์ • ํ™•์ธ
          gcloud config list project
          
      - name: Generate GitHub App Token
        id: app-token
        uses: actions/create-github-app-token@v2
        with:
          app-id: ${{ secrets.APP_ID }}
          private-key: ${{ secrets.APP_PRIVATE_KEY }}
          
      - uses: anthropics/claude-code-action@beta
        with:
          github_token: ${{ steps.app-token.outputs.token }}
          model: "claude-3-7-sonnet@20250219"
          use_vertex: "true"
          timeout_minutes: 45
          
          custom_instructions: |
            Google Vertex AI ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.
            ๋‹ค์Œ GCP ํŠนํ™” ๊ณ ๋ ค์‚ฌํ•ญ์„ ์ ์šฉํ•ด์ฃผ์„ธ์š”
            - Google Cloud ๋ณด์•ˆ ๋ชจ๋ฒ” ์‚ฌ๋ก€ ์ค€์ˆ˜
            - Cloud Audit Logs ์ธ์‹
            - VPC ๋ฐ ๋ฐฉํ™”๋ฒฝ ์ •์ฑ… ๊ณ ๋ ค
            - Google Cloud ๋ฆฌ์†Œ์Šค ๋ผ๋ฒจ๋ง ํ‘œ์ค€ ์ ์šฉ

๋ฉ€ํ‹ฐ ํด๋ผ์šฐ๋“œ ์ „๋žต๊ณผ ํŽ˜์ผ์˜ค๋ฒ„

์ง€๋Šฅํ˜• ํด๋ผ์šฐ๋“œ ์„ ํƒ๊ณผ ์žฅ์•  ์กฐ์น˜

bash
# ๋ฉ€ํ‹ฐ ํด๋ผ์šฐ๋“œ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„
claude "Claude Code Action์„ ์œ„ํ•œ ๋ฉ€ํ‹ฐ ํด๋ผ์šฐ๋“œ ์ „๋žต์„ ์„ค๊ณ„ํ•ด์ค˜.
๋‹ค์Œ ์š”์†Œ๋ฅผ ํฌํ•จํ•ด์ค˜

ํด๋ผ์šฐ๋“œ ์„ ํƒ ๊ธฐ์ค€
- ์ง€์—ญ๋ณ„ ๊ฐ€์šฉ์„ฑ๊ณผ ์ง€์—ฐ ์‹œ๊ฐ„
- ๋น„์šฉ ํšจ์œจ์„ฑ๊ณผ ์˜ˆ์‚ฐ ๊ด€๋ฆฌ
- ๊ทœ์ • ์ค€์ˆ˜ ์š”๊ตฌ์‚ฌํ•ญ
- ์„ฑ๋Šฅ๊ณผ ์ฒ˜๋ฆฌ๋Ÿ‰ ํŠน์„ฑ
- ์žฅ์•  ๋ณต๊ตฌ ๋Šฅ๋ ฅ

ํŽ˜์ผ์˜ค๋ฒ„ ์‹œ๋‚˜๋ฆฌ์˜ค
- Primary: Direct Anthropic API
- Secondary: AWS Bedrock (if primary fails)
- Tertiary: Google Vertex AI (if both fail)

์ž๋™ ์ „ํ™˜ ๋กœ์ง
- ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ํ—ฌ์Šค์ฒดํฌ
- ์ง€๋Šฅํ˜• ๋ผ์šฐํŒ… ์•Œ๊ณ ๋ฆฌ์ฆ˜
- ์„ฑ๋Šฅ ๊ธฐ๋ฐ˜ ๋™์  ์„ ํƒ
- ๋น„์šฉ ์ตœ์ ํ™” ๊ณ ๋ ค
- ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์šฐ์„ ์ˆœ์œ„"

๋™์  ํด๋ผ์šฐ๋“œ ์„ ํƒ ์›Œํฌํ”Œ๋กœ์šฐ

yaml
# ์ง€๋Šฅํ˜• ํด๋ผ์šฐ๋“œ ์„ ํƒ ์‹œ์Šคํ…œ
name: Smart Cloud Selection
on:
  issue_comment:
    types: [created]

jobs:
  cloud-selection:
    runs-on: ubuntu-latest
    outputs:
      selected_cloud: ${{ steps.selector.outputs.cloud }}
      
    steps:
      - name: Cloud Status Check
        id: selector
        run: |
          # ๊ฐ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค ์ƒํƒœ ํ™•์ธ
          ANTHROPIC_STATUS=$(curl -s https://status.anthropic.com/api/v2/status.json | jq -r '.status.indicator')
          AWS_STATUS=$(curl -s https://status.aws.amazon.com/rss/bedrock-us-west-2.rss | grep -c "operational" || echo 0)
          GCP_STATUS=$(curl -s https://status.cloud.google.com/incidents.json | jq -r '.incidents | length')
          
          # ์ง€์—ญ๋ณ„ ์ง€์—ฐ ์‹œ๊ฐ„ ์ธก์ •
          ANTHROPIC_LATENCY=$(curl -w "%{time_total}" -s -o /dev/null https://api.anthropic.com/v1/models || echo 999)
          
          # ๋น„์šฉ ๊ณ ๋ ค์‚ฌํ•ญ (์‹œ๊ฐ„๋Œ€๋ณ„ ์š”๊ธˆ ์ฐจ์ด)
          HOUR=$(date +%H)
          if [[ $HOUR -ge 9 && $HOUR -le 17 ]]; then
            COST_FACTOR="peak"
          else
            COST_FACTOR="off-peak"
          fi
          
          # ์ง€๋Šฅํ˜• ์„ ํƒ ๋กœ์ง
          if [[ "$ANTHROPIC_STATUS" == "none" && $ANTHROPIC_LATENCY -lt 2 ]]; then
            echo "cloud=anthropic" >> $GITHUB_OUTPUT
          elif [[ $AWS_STATUS -gt 0 ]]; then
            echo "cloud=bedrock" >> $GITHUB_OUTPUT
          elif [[ $GCP_STATUS -eq 0 ]]; then
            echo "cloud=vertex" >> $GITHUB_OUTPUT
          else
            echo "cloud=anthropic" >> $GITHUB_OUTPUT  # fallback
          fi

  claude-anthropic:
    needs: cloud-selection
    if: needs.cloud-selection.outputs.selected_cloud == 'anthropic'
    runs-on: ubuntu-latest
    steps:
      - uses: anthropics/claude-code-action@beta
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

  claude-bedrock:
    needs: cloud-selection
    if: needs.cloud-selection.outputs.selected_cloud == 'bedrock'
    runs-on: ubuntu-latest
    steps:
      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }}
          aws-region: us-west-2
          
      - uses: anthropics/claude-code-action@beta
        with:
          model: "anthropic.claude-3-7-sonnet-20250219-beta:0"
          use_bedrock: "true"

  claude-vertex:
    needs: cloud-selection
    if: needs.cloud-selection.outputs.selected_cloud == 'vertex'
    runs-on: ubuntu-latest
    steps:
      - name: Authenticate to Google Cloud
        uses: google-github-actions/auth@v2
        with:
          workload_identity_provider: ${{ secrets.GCP_WORKLOAD_IDENTITY_PROVIDER }}
          service_account: ${{ secrets.GCP_SERVICE_ACCOUNT }}
          
      - uses: anthropics/claude-code-action@beta
        with:
          model: "claude-3-7-sonnet@20250219"
          use_vertex: "true"

[S3TO3] MCP โ€” ๊ณ ๊ธ‰ ์ปค์Šคํ„ฐ๋งˆ์ด์ œ์ด์…˜ & ์ž๋™ํ™”

11.8 ๊ณ ๊ธ‰ ์ปค์Šคํ„ฐ๋งˆ์ด์ œ์ด์…˜

Claude Code Action์˜ ์ง„์ •ํ•œ ๊ฐ€์น˜๋Š” ์กฐ์ง์˜ ํŠน์ˆ˜ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๊ฒŒ ๊นŠ์ด ์žˆ๋Š” ์ปค์Šคํ„ฐ๋งˆ์ด์ œ์ด์…˜์„ ํ†ตํ•ด ์‹คํ˜„๋ฉ๋‹ˆ๋‹ค. MCP(Model Context Protocol) ์„œ๋ฒ„ ํ†ตํ•ฉ, ์ปค์Šคํ…€ ๋„๊ตฌ ๊ฐœ๋ฐœ, ๊ทธ๋ฆฌ๊ณ  ์กฐ์ง๋ณ„ ์›Œํฌํ”Œ๋กœ์šฐ ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด Claude๋ฅผ ํŒ€์˜ ์ „์šฉ AI ์–ด์‹œ์Šคํ„ดํŠธ๋กœ ๋ฐœ์ „์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

MCP ์„œ๋ฒ„ ํ†ตํ•ฉ๊ณผ ํ™•์žฅ

MCP(Model Context Protocol)๋Š” Claude์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๋Š” ํ‘œ์ค€ํ™”๋œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์กฐ์ง์˜ ๋‚ด๋ถ€ ์‹œ์Šคํ…œ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, API์™€์˜ ํ†ตํ•ฉ์„ ํ†ตํ•ด Claude๊ฐ€ ๋” ํ’๋ถ€ํ•œ ์ปจํ…์ŠคํŠธ๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ MCP ์„œ๋ฒ„ ํ†ตํ•ฉ

yaml
# Sequential Thinking MCP ์„œ๋ฒ„ ํ†ตํ•ฉ
- uses: anthropics/claude-code-action@beta
  with:
    anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
    mcp_config: |
      {
        "mcpServers": {
          "sequential-thinking": {
            "command": "npx",
            "args": [
              "-y",
              "@modelcontextprotocol/server-sequential-thinking"
            ]
          }
        }
      }
    allowed_tools: "mcp__sequential-thinking__sequentialthinking"

๊ณ ๊ธ‰ MCP ์„œ๋ฒ„ ์„ค์ • - ๋‚ด๋ถ€ ์‹œ์Šคํ…œ ํ†ตํ•ฉ

bash
# ์กฐ์ง ํŠนํ™” MCP ์„œ๋ฒ„ ์„ค๊ณ„
claude "์šฐ๋ฆฌ ์กฐ์ง์„ ์œ„ํ•œ ์ปค์Šคํ…€ MCP ์„œ๋ฒ„๋“ค์„ ์„ค๊ณ„ํ•ด์ค˜.
๋‹ค์Œ ์‹œ์Šคํ…œ๊ณผ์˜ ํ†ตํ•ฉ์ด ํ•„์š”ํ•ด

๋‚ด๋ถ€ ์‹œ์Šคํ…œ ์—ฐ๋™
- JIRA API: ์ด์Šˆ ํŠธ๋ž˜ํ‚น๊ณผ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ
- Confluence: ๋ฌธ์„œ์™€ ์ง€์‹ ๋ฒ ์ด์Šค ์ ‘๊ทผ
- Slack API: ํŒ€ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜๊ณผ ์•Œ๋ฆผ
- Jenkins: CI/CD ํŒŒ์ดํ”„๋ผ์ธ ์ƒํƒœ
- DataDog: ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ์„ฑ๋Šฅ ๋ฉ”ํŠธ๋ฆญ

์™ธ๋ถ€ ์„œ๋น„์Šค ํ†ตํ•ฉ
- AWS API: ์ธํ”„๋ผ ์ƒํƒœ์™€ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ
- Kubernetes API: ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜
- Database connections: ์Šคํ‚ค๋งˆ ์ •๋ณด์™€ ์ฟผ๋ฆฌ ์‹คํ–‰
- Security scanners: ์ทจ์•ฝ์  ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ

๊ฐ MCP ์„œ๋ฒ„์˜ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•๊ณผ ๋ณด์•ˆ ์„ค์ •์„ ํฌํ•จํ•ด์ค˜."

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ MCP ์„œ๋ฒ„ ๊ตฌ์„ฑ ์˜ˆ์‹œ

yaml
# ์ข…ํ•ฉ์ ์ธ MCP ์„œ๋ฒ„ ์„ค์ •
- uses: anthropics/claude-code-action@beta
  with:
    anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
    mcp_config: |
      {
        "mcpServers": {
          "jira-integration": {
            "command": "node",
            "args": ["./scripts/mcp-jira-server.js"],
            "env": {
              "JIRA_URL": "${{ secrets.JIRA_URL }}",
              "JIRA_TOKEN": "${{ secrets.JIRA_TOKEN }}",
              "JIRA_PROJECT_KEY": "${{ vars.JIRA_PROJECT_KEY }}"
            }
          },
          "database-inspector": {
            "command": "python",
            "args": ["./scripts/mcp-db-server.py"],
            "env": {
              "DB_CONNECTION_STRING": "${{ secrets.DB_READ_ONLY_CONNECTION }}",
              "DB_TYPE": "postgresql"
            }
          },
          "security-scanner": {
            "command": "npx",
            "args": ["-y", "@company/security-mcp-server"],
            "env": {
              "SCANNER_API_KEY": "${{ secrets.SECURITY_SCANNER_API_KEY }}",
              "SCAN_LEVEL": "comprehensive"
            }
          },
          "monitoring-integration": {
            "command": "node",
            "args": ["./scripts/mcp-monitoring-server.js"],
            "env": {
              "DATADOG_API_KEY": "${{ secrets.DATADOG_API_KEY }}",
              "GRAFANA_URL": "${{ secrets.GRAFANA_URL }}",
              "GRAFANA_TOKEN": "${{ secrets.GRAFANA_TOKEN }}"
            }
          }
        }
      }
    allowed_tools: |
      mcp__jira-integration__create-issue,
      mcp__jira-integration__update-issue,
      mcp__jira-integration__search-issues,
      mcp__database-inspector__query-schema,
      mcp__database-inspector__explain-query,
      mcp__security-scanner__scan-code,
      mcp__security-scanner__check-vulnerabilities,
      mcp__monitoring-integration__get-metrics,
      mcp__monitoring-integration__create-alert

์กฐ์ง๋ณ„ ์ปค์Šคํ…€ ๋„๊ตฌ ๊ฐœ๋ฐœ

์ฝ”๋“œ ํ’ˆ์งˆ ๊ฒ€์‚ฌ ๋„๊ตฌ

bash
# ์กฐ์ง ํŠนํ™” ์ฝ”๋“œ ํ’ˆ์งˆ ๋„๊ตฌ
claude "์šฐ๋ฆฌ ํŒ€์˜ ์ฝ”๋”ฉ ํ‘œ์ค€์„ ์ž๋™์œผ๋กœ ๊ฒ€์‚ฌํ•˜๋Š” ์ปค์Šคํ…€ ๋„๊ตฌ๋ฅผ ๋งŒ๋“ค์–ด์ค˜.
๋‹ค์Œ ๊ฒ€์‚ฌ ํ•ญ๋ชฉ์„ ํฌํ•จํ•ด์ค˜

์ฝ”๋”ฉ ํ‘œ์ค€ ๊ฒ€์‚ฌ
- ํ•จ์ˆ˜ ๋„ค์ด๋ฐ ๊ทœ์น™ (camelCase, ๋™์‚ฌ๋กœ ์‹œ์ž‘)
- ํŒŒ์ผ ๊ตฌ์กฐ ๊ทœ์น™ (feature/component ๊ธฐ๋ฐ˜)
- ์ฝ”๋ฉ˜ํŠธ ์ž‘์„ฑ ๊ทœ์น™ (JSDoc, docstring)
- ์—๋Ÿฌ ์ฒ˜๋ฆฌ ํŒจํ„ด ์ผ๊ด€์„ฑ
- ๋กœ๊น… ํ˜•์‹ ํ‘œ์ค€ํ™”

์„ฑ๋Šฅ ๊ฒ€์‚ฌ
- ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ํŒจํ„ด ๊ฐ์ง€
- ๋น„ํšจ์œจ์ ์ธ ๋ฃจํ”„์™€ ์ฟผ๋ฆฌ
- ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง ๊ฐ์ง€
- ๋ฒˆ๋“ค ํฌ๊ธฐ ์ตœ์ ํ™” ๊ธฐํšŒ

๋ณด์•ˆ ๊ฒ€์‚ฌ
- ํ•˜๋“œ์ฝ”๋”ฉ๋œ ์‹œํฌ๋ฆฟ ํƒ์ง€
- SQL ์ธ์ ์…˜ ์ทจ์•ฝ์ 
- XSS ๊ณต๊ฒฉ ๋ฒกํ„ฐ
- ๊ถŒํ•œ ๋ถ€์—ฌ ๋ˆ„๋ฝ"

์ž๋™ ๋ฌธ์„œํ™” ๋„๊ตฌ

yaml
# ์ปค์Šคํ…€ ๋ฌธ์„œํ™” ์ž๋™ํ™”
- uses: anthropics/claude-code-action@beta
  with:
    anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
    custom_instructions: |
      ๋‹น์‹ ์€ ์šฐ๋ฆฌ ์กฐ์ง์˜ ๋ฌธ์„œํ™” ์ „๋ฌธ๊ฐ€์ž…๋‹ˆ๋‹ค.
      ๋‹ค์Œ ๋ฌธ์„œํ™” ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•ด์ฃผ์„ธ์š”
      
      API ๋ฌธ์„œํ™”
      - OpenAPI 3.0 ์ŠคํŽ™ ์ค€์ˆ˜
      - ์š”์ฒญ/์‘๋‹ต ์˜ˆ์‹œ ํฌํ•จ
      - ์—๋Ÿฌ ์ฝ”๋“œ์™€ ๋ฉ”์‹œ์ง€ ์„ค๋ช…
      - ๋ฒ„์ „ ๊ด€๋ฆฌ ์ •๋ณด
      
      ์ฝ”๋“œ ๋ฌธ์„œํ™”
      - ํ•จ์ˆ˜๋ณ„ JSDoc/docstring
      - ๋ณต์žกํ•œ ๋กœ์ง ์ธ๋ผ์ธ ์ฃผ์„
      - README ์—…๋ฐ์ดํŠธ
      - ์•„ํ‚คํ…์ฒ˜ ๋‹ค์ด์–ด๊ทธ๋žจ
      
      ์‚ฌ์šฉ์ž ๋ฌธ์„œํ™”
      - ์„ค์น˜์™€ ์„ค์ • ๊ฐ€์ด๋“œ
      - ์‚ฌ์šฉ ์˜ˆ์‹œ์™€ ํŠœํ† ๋ฆฌ์–ผ
      - ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€์ด๋“œ
      - FAQ ์„น์…˜
    allowed_tools: |
      Edit,Replace,GitLog,GitDiff,
      mcp__docs-generator__create-api-docs,
      mcp__docs-generator__update-readme,
      mcp__docs-generator__generate-diagrams

์›Œํฌํ”Œ๋กœ์šฐ ์ตœ์ ํ™”์™€ ์ž๋™ํ™”

์ง€๋Šฅํ˜• ์›Œํฌํ”Œ๋กœ์šฐ ๋ผ์šฐํŒ…

bash
# ์ปจํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ž๋™ํ™”
claude "PR ๋‚ด์šฉ์„ ๋ถ„์„ํ•ด์„œ ์ž๋™์œผ๋กœ ์ ์ ˆํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์„ ํƒํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค์–ด์ค˜.
๋‹ค์Œ ๋ถ„๋ฅ˜ ๊ธฐ์ค€์„ ์‚ฌ์šฉํ•ด์ค˜

๋ณ€๊ฒฝ ์œ ํ˜• ๋ถ„์„
- ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (feature): ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๊ตฌํ˜„
- ๋ฒ„๊ทธ ์ˆ˜์ • (bugfix): ๊ธฐ์กด ๊ธฐ๋Šฅ ์˜ค๋ฅ˜ ์ˆ˜์ •
- ๋ฆฌํŒฉํ† ๋ง (refactor): ์ฝ”๋“œ ๊ตฌ์กฐ ๊ฐœ์„ 
- ๋ฌธ์„œํ™” (docs): ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ
- ์„ค์ • (config): ์„ค์ • ํŒŒ์ผ ๋ณ€๊ฒฝ
- ํ…Œ์ŠคํŠธ (test): ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๊ด€๋ จ

์˜ํ–ฅ๋„ ๋ถ„์„
- Critical: ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ณ€๊ฒฝ
- High: ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์— ์ง์ ‘ ์˜ํ–ฅ
- Medium: ๋‚ด๋ถ€ ๋กœ์ง ๊ฐœ์„ 
- Low: ๋ฌธ์„œ๋‚˜ ์ฃผ์„ ์—…๋ฐ์ดํŠธ

๊ฐ ๋ถ„๋ฅ˜์— ๋”ฐ๋ฅธ ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ
- ํ•„์š”ํ•œ ๋ฆฌ๋ทฐ์–ด ์ž๋™ ํ• ๋‹น
- ์ ์ ˆํ•œ ํ…Œ์ŠคํŠธ ์ „๋žต ์„ ํƒ
- ๋ฐฐํฌ ์Šน์ธ ํ”„๋กœ์„ธ์Šค ๊ฒฐ์ •
- ๋ชจ๋‹ˆํ„ฐ๋ง ์ˆ˜์ค€ ์„ค์ •"

๋™์  ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ

yaml
# ์ง€๋Šฅํ˜• ํ’ˆ์งˆ ๊ฒŒ์ดํŠธ ์‹œ์Šคํ…œ
name: Adaptive Quality Gates
on:
  pull_request:
    types: [opened, synchronize]

jobs:
  analyze-changes:
    runs-on: ubuntu-latest
    outputs:
      risk_level: ${{ steps.analysis.outputs.risk_level }}
      test_strategy: ${{ steps.analysis.outputs.test_strategy }}
      review_requirements: ${{ steps.analysis.outputs.review_requirements }}
      
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
          
      - uses: anthropics/claude-code-action@beta
        id: analysis
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          direct_prompt: |
            ์ด PR์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ถ„์„ํ•˜๊ณ  ๋‹ค์Œ์„ ๊ฒฐ์ •ํ•ด์ฃผ์„ธ์š”
            
            1. ์œ„ํ—˜๋„ ํ‰๊ฐ€ (low/medium/high/critical)
            2. ํ•„์š”ํ•œ ํ…Œ์ŠคํŠธ ์ „๋žต (unit/integration/e2e/performance)
            3. ๋ฆฌ๋ทฐ ์š”๊ตฌ์‚ฌํ•ญ (standard/senior/architect/security)
            
            ๋ถ„์„ ๊ธฐ์ค€
            - ๋ณ€๊ฒฝ๋œ ํŒŒ์ผ์˜ ์ˆ˜์™€ ์ค‘์š”๋„
            - ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋ณ€๊ฒฝ ์—ฌ๋ถ€
            - ๋ณด์•ˆ ๊ด€๋ จ ์ฝ”๋“œ ์ˆ˜์ •
            - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ
            - API ์ธํ„ฐํŽ˜์ด์Šค ๋ณ€๊ฒฝ
            - ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ๋ณ€๊ฒฝ
            
            ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์Œ ํ˜•์‹์œผ๋กœ GitHub Actions output์— ์„ค์ •ํ•ด์ฃผ์„ธ์š”
            echo "risk_level=medium" >> $GITHUB_OUTPUT
            echo "test_strategy=integration,e2e" >> $GITHUB_OUTPUT  
            echo "review_requirements=senior,security" >> $GITHUB_OUTPUT

  quality-gate-low:
    needs: analyze-changes
    if: needs.analyze-changes.outputs.risk_level == 'low'
    runs-on: ubuntu-latest
    steps:
      - name: Fast Track Review
        run: echo "Low risk changes - fast track approved"

  quality-gate-high:
    needs: analyze-changes
    if: contains(fromJson('["high", "critical"]'), needs.analyze-changes.outputs.risk_level)
    runs-on: ubuntu-latest
    steps:
      - uses: anthropics/claude-code-action@beta
        with:
          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
          direct_prompt: |
            ์ด๋Š” ๋†’์€ ์œ„ํ—˜๋„์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.
            ๋‹ค์Œ ๊ฐ•ํ™”๋œ ๊ฒ€ํ† ๋ฅผ ์ˆ˜ํ–‰ํ•ด์ฃผ์„ธ์š”
            
            1. ์„ธ๋ถ€์ ์ธ ์ฝ”๋“œ ๋ฆฌ๋ทฐ
            2. ๋ณด์•ˆ ์ทจ์•ฝ์  ์ „์ฒด ๊ฒ€์‚ฌ
            3. ์„ฑ๋Šฅ ์˜ํ–ฅ ๋ถ„์„
            4. ๋กค๋ฐฑ ๊ณ„ํš ์ˆ˜๋ฆฝ
            5. ๋ชจ๋‹ˆํ„ฐ๋ง ๊ณ„ํš ์ œ์•ˆ
            
            ์ถ”๊ฐ€๋กœ ๋‹ค์Œ ํŒ€๋“ค์„ ๋ฆฌ๋ทฐ์— ํฌํ•จ์‹œ์ผœ์ฃผ์„ธ์š”
            @security-team @architecture-team @senior-engineers

[S3TO4] Greptile โ€” AI ์ฝ”๋“œ ๊ฒ€์ƒ‰

[S3TO5] Serena โ€” ์ฝ”๋“œ ์ดํ•ด AI

[S3TO6] Books 1๊ถŒ โ€” ๊ณ ๊ธ‰ ํŒ€์šด์šฉ ํ•™์Šต

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /ํ•™์Šต์šฉ_Books_New/1๊ถŒ_Claude_ClaudeCode_์‚ฌ์šฉ๋ฒ•/

[S3TO7] ์‹ค์ „ Tips โ€” Multi-Role/์„œ๋ธŒ์—์ด์ „ํŠธ ๊ณ ๊ธ‰

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /Tips/๋„๊ตฌ_ํ™œ์šฉ/

[S3TO8] .claude ์ฐธ๊ณ  โ€” Subagents/Skills/References ๊ณ ๊ธ‰

๐Ÿ“ ๊ฒฝ๋กœ: .claude/subagents/, .claude/skills/, .claude/references/

S3QC โ€” ํ’ˆ์งˆ๊ด€๋ฆฌ (Quality Control)

[S3QC1(์„น์…˜27)] AI ์ฝ”๋“œ ๋ฆฌ๋ทฐ 8๊ฐ€์ง€ ๋งˆ์Šคํ„ฐ ํŒจํ„ด

12.2 AI ์ฆ๊ฐ• ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์ƒํƒœ๊ณ„

์ „ํ†ต์ ์ธ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ๋„˜์–ด์„œ AI์™€ ์ธ๊ฐ„์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ•์ ์„ ํ™œ์šฉํ•œ ๋‹ค์ธต์  ํ’ˆ์งˆ ๋ณด์žฅ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}}}%%
flowchart TD
    A[์ฝ”๋“œ ์ž‘์„ฑ ์™„๋ฃŒ] --> B[AI ์‚ฌ์ „ ๋ฆฌ๋ทฐ]
    B --> C{ํ’ˆ์งˆ ๊ธฐ์ค€ ์ถฉ์กฑ}
    C -->|๊ธฐ์ค€ ๋ฏธ๋‹ฌ| D[์ž๋™ ๊ฐœ์„  ์ œ์•ˆ]
    C -->|๊ธฐ์ค€ ์ถฉ์กฑ| E[PR ์ƒ์„ฑ]
    D --> F[๊ฐœ๋ฐœ์ž ์ˆ˜์ •]
    F --> B
    
    E --> G[๋งฅ๋ฝ ์ธ์‹ AI ๋ฆฌ๋ทฐ]
    G --> H[์—ญํ• ๋ณ„ ์ „๋ฌธ ๋ฆฌ๋ทฐ]
    
    subgraph specialists [์ „๋ฌธ๊ฐ€ ๋ฆฌ๋ทฐ ์ฒด๊ณ„]
        I[๋ณด์•ˆ ์ „๋ฌธ๊ฐ€<br/>Security Champion]
        J[์„ฑ๋Šฅ ์ „๋ฌธ๊ฐ€<br/>Performance Specialist]
        K[์•„ํ‚คํ…์ฒ˜ ์ „๋ฌธ๊ฐ€<br/>Architecture Guardian]
        L[UX ์ „๋ฌธ๊ฐ€<br/>User Experience Advocate]
    end
    
    H --> I
    H --> J
    H --> K
    H --> L
    
    subgraph analysis [์ „๋ฌธ ๋ถ„์„ ์˜์—ญ]
        I --> M[๋ณด์•ˆ ์œ„ํ˜‘ ๋ชจ๋ธ๋ง<br/>์ทจ์•ฝ์  ํŒจํ„ด ๋ถ„์„<br/>์ปดํ”Œ๋ผ์ด์–ธ์Šค ๊ฒ€์ฆ]
        J --> N[์„ฑ๋Šฅ ๋ณ‘๋ชฉ ๋ถ„์„<br/>์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ตœ์ ํ™”<br/>๋ฆฌ์†Œ์Šค ํšจ์œจ์„ฑ]
        K --> O[์„ค๊ณ„ ์›์น™ ์ค€์ˆ˜<br/>์˜์กด์„ฑ ๊ด€๋ฆฌ<br/>ํ™•์žฅ์„ฑ ํ‰๊ฐ€]
        L --> P[์‚ฌ์šฉ์„ฑ ํ‰๊ฐ€<br/>์ ‘๊ทผ์„ฑ ๊ฒ€์ฆ<br/>์ธํ„ฐ๋ ‰์…˜ ํ’ˆ์งˆ]
    end
    
    M --> Q[์ข…ํ•ฉ ๋ฆฌ๋ทฐ ๋ฆฌํฌํŠธ]
    N --> Q
    O --> Q
    P --> Q
    
    Q --> R{๋ฆฌ๋ทฐ ๊ฒฐ๊ณผ}
    R -->|์Šน์ธ| S[๋ณ‘ํ•ฉ ์Šน์ธ]
    R -->|์ˆ˜์ • ์š”์ฒญ| T[๊ฐœ๋ฐœ์ž ํ”ผ๋“œ๋ฐฑ]
    T --> F
    S --> U[์ž๋™ ๋ฐฐํฌ]
    
    subgraph feedback [ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„]
        U --> V[์šด์˜ ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘]
        V --> W[๋ฆฌ๋ทฐ ํšจ๊ณผ์„ฑ ๋ถ„์„]
        W --> X[๋ฆฌ๋ทฐ ํ”„๋กœ์„ธ์Šค ๊ฐœ์„ ]
        X --> B
    end
    
    classDef processStyle fill:#e2e8f0,stroke:#334155,stroke-width:2px,color:#1e293b
    classDef specialistStyle fill:#f1f5f9,stroke:#475569,stroke-width:2px,color:#1e293b
    classDef analysisStyle fill:#ecfdf5,stroke:#059669,stroke-width:2px,color:#064e3b
    classDef decisionStyle fill:#fef3c7,stroke:#d97706,stroke-width:2px,color:#92400e
    classDef feedbackStyle fill:#ddd6fe,stroke:#7c3aed,stroke-width:2px,color:#5b21b6
    
    class A,B,E,G,H,Q processStyle
    class I,J,K,L specialistStyle
    class M,N,O,P analysisStyle
    class C,R decisionStyle
    class V,W,X feedbackStyle

์ง€๋Šฅํ˜• ์‚ฌ์ „ ๋ฆฌ๋ทฐ ์‹œ์Šคํ…œ

๊ฐœ๋ฐœ์ž๊ฐ€ PR์„ ์ƒ์„ฑํ•˜๊ธฐ ์ „์— AI๊ฐ€ ๋‹ค๊ฐ๋„๋กœ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ํ’ˆ์งˆ์„ ์‚ฌ์ „์— ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

bash
# ์ข…ํ•ฉ์  ์‚ฌ์ „ ํ’ˆ์งˆ ๊ฒ€์ฆ
claude "์ด ์ฝ”๋“œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋‹ค์Œ ๊ด€์ ์—์„œ ์ข…ํ•ฉ ๋ถ„์„ํ•ด์ค˜

๐Ÿ” ์ •์  ๋ถ„์„ ๊ด€์ 
- ์ฝ”๋”ฉ ํ‘œ์ค€๊ณผ ์ปจ๋ฒค์…˜ ์ค€์ˆ˜
- ๋ณต์žก๋„์™€ ๊ฐ€๋…์„ฑ ํ‰๊ฐ€
- ์ž ์žฌ์  ๋ฒ„๊ทธ์™€ ์ทจ์•ฝ์ 
- ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ๊ฐ€๋Šฅ์„ฑ
- ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜์™€ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ

๐Ÿ—๏ธ ์•„ํ‚คํ…์ฒ˜ ๊ด€์ 
- ๊ธฐ์กด ์„ค๊ณ„ ์›์น™๊ณผ์˜ ์ผ๊ด€์„ฑ
- ์˜์กด์„ฑ๊ณผ ๊ฒฐํ•ฉ๋„ ๋ถ„์„
- ํ™•์žฅ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ
- ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ์„ฑ๊ณผ ๋ชจํ‚น ์šฉ์ด์„ฑ
- API ์„ค๊ณ„์™€ ์ธํ„ฐํŽ˜์ด์Šค ํ’ˆ์งˆ

๐Ÿง  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ด€์ 
- ์š”๊ตฌ์‚ฌํ•ญ ์ถฉ์กฑ๋„ ๊ฒ€์ฆ
- ์—ฃ์ง€ ์ผ€์ด์Šค์™€ ์˜ˆ์™ธ ์ƒํ™ฉ ์ฒ˜๋ฆฌ
- ๋ฐ์ดํ„ฐ ํ๋ฆ„๊ณผ ์ƒํƒœ ๊ด€๋ฆฌ
- ๋ณด์•ˆ๊ณผ ๊ถŒํ•œ ์ฒ˜๋ฆฌ
- ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์˜ํ–ฅ๋„

๐Ÿ“Š ํ’ˆ์งˆ ๋ฉ”ํŠธ๋ฆญ ๊ด€์ 
- ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€์™€ ํ…Œ์ŠคํŠธ ํ’ˆ์งˆ
- ๋ฌธ์„œํ™” ์™„์„ฑ๋„
- ๋กœ๊น…๊ณผ ๋ชจ๋‹ˆํ„ฐ๋ง ์ค€๋น„๋„
- ๊ตญ์ œํ™”์™€ ์ ‘๊ทผ์„ฑ ๊ณ ๋ ค
- ์„ฑ๋Šฅ ๋ฒค์น˜๋งˆํฌ ์˜ํ–ฅ

๊ฐ ๊ด€์ ๋ณ„๋กœ 1-10์  ํ‰๊ฐ€์™€ ๊ตฌ์ฒด์ ์ธ ๊ฐœ์„  ๋ฐฉ์•ˆ์„ ์ œ์‹œํ•ด์ค˜"

๋งฅ๋ฝ ์ธ์‹ ๋ฆฌ๋ทฐ ์–ด์‹œ์Šคํ„ดํŠธ

ํ”„๋กœ์ ํŠธ์˜ ํžˆ์Šคํ† ๋ฆฌ์™€ ํŒ€์˜ ํŒจํ„ด์„ ํ•™์Šตํ•˜์—ฌ ๋” ์ •ํ™•ํ•œ ๋ฆฌ๋ทฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

bash
# ๋งฅ๋ฝ ๊ธฐ๋ฐ˜ ์ง€๋Šฅํ˜• ๋ฆฌ๋ทฐ
claude "์ด PR์„ ๋ฆฌ๋ทฐํ•˜๋˜, ๋‹ค์Œ ๋งฅ๋ฝ์„ ๊ณ ๋ คํ•ด์„œ ๋ถ„์„ํ•ด์ค˜

๐Ÿ“ˆ ํ”„๋กœ์ ํŠธ ๋งฅ๋ฝ
- ์ตœ๊ทผ 3๊ฐœ์›”๊ฐ„ ๋ฒ„๊ทธ ํŒจํ„ด ๋ถ„์„
- ์„ฑ๋Šฅ ์ด์Šˆ ํžˆ์Šคํ† ๋ฆฌ
- ๋ณด์•ˆ ์ธ์‹œ๋˜ํŠธ ๊ฒฝํ—˜
- ํŒ€์˜ ๊ธฐ์ˆ  ๋ถ€์ฑ„ ํ˜„ํ™ฉ
- ๋‹ค๊ฐ€์˜ค๋Š” ๋งˆ์ผ์Šคํ†ค๊ณผ ์••๋ฐ•

๐Ÿ‘ฅ ํŒ€ ๋งฅ๋ฝ
- ์ž‘์„ฑ์ž์˜ ๊ธฐ์ˆ  ์ˆ˜์ค€๊ณผ ๊ฒฝํ—˜
- ์ฝ”๋“œ ๋ฆฌ๋ทฐ์–ด์˜ ์ „๋ฌธ ๋ถ„์•ผ
- ํŒ€ ๋‚ด ์ฝ”๋”ฉ ์Šคํƒ€์ผ ์ง„ํ™”
- ๊ณผ๊ฑฐ ๋ฆฌ๋ทฐ ํ”ผ๋“œ๋ฐฑ ํŒจํ„ด
- ํ•™์Šต ๋ชฉํ‘œ์™€ ์„ฑ์žฅ ๋ฐฉํ–ฅ

๐ŸŽฏ ๋น„์ฆˆ๋‹ˆ์Šค ๋งฅ๋ฝ
- ๊ธฐ๋Šฅ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ์ค‘์š”๋„
- ๊ณ ๊ฐ ์˜ํ–ฅ๋„์™€ ์œ„ํ—˜์„ฑ
- ์šด์˜ ๋ณต์žก๋„ ์ฆ๊ฐ€ ์—ฌ๋ถ€
- ๊ธฐ์ˆ ์  ์˜์กด์„ฑ ๋ณ€ํ™”
- ํ–ฅํ›„ ํ™•์žฅ ๊ณ„ํš

์ด ๋งฅ๋ฝ์„ ๋ฐ”ํƒ•์œผ๋กœ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•ด์„œ ๋ฆฌ๋ทฐ ์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ž‘์„ฑํ•ด์ค˜.
๋‹จ์ˆœํ•œ ๋ฌธ์ œ ์ง€์ ๋ณด๋‹ค๋Š” ๊ต์œก์ ์ด๊ณ  ๊ฑด์„ค์ ์ธ ํ”ผ๋“œ๋ฐฑ์„ ์ค‘์‹ฌ์œผ๋กœ ํ•ด์ค˜"

์—ญํ• ๋ณ„ ์ „๋ฌธํ™”๋œ ๋ฆฌ๋ทฐ ํ”„๋กœ์„ธ์Šค

mermaid
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#f8fafc", "primaryTextColor": "#1e293b", "primaryBorderColor": "#e2e8f0", "lineColor": "#94a3b8", "secondaryColor": "#f1f5f9", "tertiaryColor": "#e2e8f0"}}}%%
graph LR
    subgraph security [๋ณด์•ˆ ์ „๋ฌธ ๋ฆฌ๋ทฐ]
        A[๋ณด์•ˆ ์œ„ํ˜‘ ๋ชจ๋ธ๋ง]
        B[OWASP Top 10 ์ฒดํฌ]
        C[์ธ์ฆ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ]
        D[๋ฐ์ดํ„ฐ ๋ณดํ˜ธ ๋ฐ ์•”ํ˜ธํ™”]
    end
    
    subgraph performance [์„ฑ๋Šฅ ์ „๋ฌธ ๋ฆฌ๋ทฐ]
        E[์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ณต์žก๋„ ๋ถ„์„]
        F[๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ ์ตœ์ ํ™”]
        G[๋„คํŠธ์›Œํฌ I/O ํšจ์œจ์„ฑ]
        H[ํ”„๋ก ํŠธ์—”๋“œ ๋ Œ๋”๋ง ์„ฑ๋Šฅ]
    end
    
    subgraph architecture [์•„ํ‚คํ…์ฒ˜ ์ „๋ฌธ ๋ฆฌ๋ทฐ]
        I[์„ค๊ณ„ ์›์น™ ์ค€์ˆ˜]
        J[์˜์กด์„ฑ ๋ฐ ๊ฒฐํ•ฉ๋„]
        K[ํ™•์žฅ์„ฑ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ]
        L[ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ์„ฑ]
    end
    
    subgraph ux [์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๋ฆฌ๋ทฐ]
        M[์‚ฌ์šฉ์„ฑ ํ‰๊ฐ€]
        N[์ ‘๊ทผ์„ฑ ๊ฒ€์ฆ]
        O[์ธํ„ฐ๋ ‰์…˜ ํ’ˆ์งˆ]
        P[์„ฑ๋Šฅ ์ธ์‹ ์˜ํ–ฅ]
    end
    
    subgraph outcomes [๋ฆฌ๋ทฐ ๊ฒฐ๊ณผ]
        Q[์‹ฌ๊ฐ๋„ ํ‰๊ฐ€<br/>Critical/High/Medium/Low]
        R[๊ฐœ์„  ๋ฐฉ์•ˆ ์ œ์‹œ]
        S[์šฐ์„ ์ˆœ์œ„ ๋ฐ ๋กœ๋“œ๋งต]
        T[ํ•™์Šต ๋ฆฌ์†Œ์Šค ์ถ”์ฒœ]
    end
    
    A --> Q
    B --> R
    C --> S
    D --> T
    
    E --> Q
    F --> R
    G --> S
    H --> T
    
    I --> Q
    J --> R
    K --> S
    L --> T
    
    M --> Q
    N --> R
    O --> S
    P --> T
    
    classDef securityStyle fill:#fee2e2,stroke:#dc2626,stroke-width:2px,color:#7f1d1d
    classDef performanceStyle fill:#fef3c7,stroke:#d97706,stroke-width:2px,color:#92400e
    classDef architectureStyle fill:#ecfdf5,stroke:#059669,stroke-width:2px,color:#064e3b
    classDef uxStyle fill:#ddd6fe,stroke:#7c3aed,stroke-width:2px,color:#5b21b6
    classDef outcomeStyle fill:#f1f5f9,stroke:#475569,stroke-width:2px,color:#1e293b
    
    class A,B,C,D securityStyle
    class E,F,G,H performanceStyle
    class I,J,K,L architectureStyle
    class M,N,O,P uxStyle
    class Q,R,S,T outcomeStyle

Security Champion - ๋ณด์•ˆ ์ „๋ฌธ ๋ฆฌ๋ทฐ

bash
# ๋ณด์•ˆ ์ค‘์‹ฌ ์‹ฌ์ธต ๋ถ„์„
claude "๋ณด์•ˆ ์ „๋ฌธ๊ฐ€ ๊ด€์ ์—์„œ ์ด ์ฝ”๋“œ๋ฅผ ๋ฆฌ๋ทฐํ•ด์ค˜

๐Ÿ›ก๏ธ ๋ณด์•ˆ ์œ„ํ˜‘ ๋ชจ๋ธ๋ง
- OWASP Top 10 ์ฒดํฌ๋ฆฌ์ŠคํŠธ
- ์ž…๋ ฅ ๊ฒ€์ฆ๊ณผ ์ถœ๋ ฅ ์ธ์ฝ”๋”ฉ
- ์ธ์ฆ๊ณผ ๊ถŒํ•œ ๋ถ€์—ฌ ๋กœ์ง
- ์„ธ์…˜ ๊ด€๋ฆฌ์™€ ํ† ํฐ ์ฒ˜๋ฆฌ
- ์•”ํ˜ธํ™”์™€ ํ‚ค ๊ด€๋ฆฌ

๐Ÿ” ํ”„๋ผ์ด๋ฒ„์‹œ ๋ณดํ˜ธ
- ๊ฐœ์ธ์ •๋ณด ์ฒ˜๋ฆฌ ๋ฐฉ์‹
- ๋ฐ์ดํ„ฐ ๋งˆ์Šคํ‚น๊ณผ ์ต๋ช…ํ™”
- ๋กœ๊น… ์‹œ ๋ฏผ๊ฐ์ •๋ณด ๋…ธ์ถœ
- GDPR/CCPA ์ปดํ”Œ๋ผ์ด์–ธ์Šค
- ๋ฐ์ดํ„ฐ ๋ณด์กด๊ณผ ์‚ญ์ œ ์ •์ฑ…

โš ๏ธ ์ทจ์•ฝ์  ํŒจํ„ด ๋ถ„์„
- SQL Injection ๊ฐ€๋Šฅ์„ฑ
- XSS ๊ณต๊ฒฉ ๋ฒกํ„ฐ
- CSRF ๋ณดํ˜ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜
- ํŒŒ์ผ ์—…๋กœ๋“œ ๋ณด์•ˆ
- API ๋ณด์•ˆ ๊ณ ๋ ค์‚ฌํ•ญ

๊ฐ ์œ„ํ—˜์š”์†Œ๋ณ„๋กœ ์‹ฌ๊ฐ๋„(Critical/High/Medium/Low)๋ฅผ ํ‰๊ฐ€ํ•˜๊ณ 
๊ตฌ์ฒด์ ์ธ ์™„ํ™” ๋ฐฉ๋ฒ•์„ ์ œ์‹œํ•ด์ค˜"

Performance Specialist - ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฆฌ๋ทฐ

bash
# ์„ฑ๋Šฅ ์ค‘์‹ฌ ์ „๋ฌธ ๋ฆฌ๋ทฐ
claude "์„ฑ๋Šฅ ์ „๋ฌธ๊ฐ€ ๊ด€์ ์—์„œ ์ด ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•ด์ค˜

โšก ๊ณ„์‚ฐ ๋ณต์žก๋„ ๋ถ„์„
- ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‹œ๊ฐ„/๊ณต๊ฐ„ ๋ณต์žก๋„
- ์ค‘์ฒฉ ๋ฃจํ”„์™€ ์žฌ๊ท€ ์ตœ์ ํ™”
- ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์„ ํƒ์˜ ์ ์ ˆ์„ฑ
- ์บ์‹ฑ ๊ธฐํšŒ์™€ ๋ฉ”๋ชจ์ด์ œ์ด์…˜
- ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ์„ฑ

๐Ÿ—„๏ธ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ํŒจํ„ด
- N+1 ์ฟผ๋ฆฌ ๋ฌธ์ œ
- ์ธ๋ฑ์Šค ํ™œ์šฉ๋„
- ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ์ตœ์ ํ™”
- ์ปค๋„ฅ์…˜ ํ’€ ํšจ์œจ์„ฑ
- ํŠธ๋žœ์žญ์…˜ ๊ฒฝ๊ณ„ ์„ค์ •

๐ŸŒ ๋„คํŠธ์›Œํฌ์™€ I/O
- API ํ˜ธ์ถœ ์ตœ์ ํ™”
- ํŽ˜์ด๋กœ๋“œ ํฌ๊ธฐ ์ตœ์†Œํ™”
- ์••์ถ•๊ณผ ์บ์‹ฑ ์ „๋žต
- ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๊ธฐํšŒ
- ํƒ€์ž„์•„์›ƒ๊ณผ ์žฌ์‹œ๋„ ๋กœ์ง

๐Ÿ“ฑ ํ”„๋ก ํŠธ์—”๋“œ ์„ฑ๋Šฅ
- ๋ฒˆ๋“ค ํฌ๊ธฐ ์˜ํ–ฅ
- ๋ Œ๋”๋ง ์„ฑ๋Šฅ
- ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰
- ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ์ตœ์ ํ™”
- ์ด๋ฏธ์ง€์™€ ๋ฆฌ์†Œ์Šค ๋กœ๋”ฉ

์„ฑ๋Šฅ ์˜ํ–ฅ๋„๋ฅผ ์ •๋Ÿ‰์ ์œผ๋กœ ์˜ˆ์ธกํ•˜๊ณ  ๋ฒค์น˜๋งˆํฌ ๋ฐฉ๋ฒ•์„ ์ œ์•ˆํ•ด์ค˜"

UX Advocate - ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๋ฆฌ๋ทฐ

bash
# ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ค‘์‹ฌ ์ฝ”๋“œ ๋ฆฌ๋ทฐ
claude "UX ๊ด€์ ์—์„œ ์ด ์ฝ”๋“œ ๋ณ€๊ฒฝ์ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ๋ถ„์„ํ•ด์ค˜

๐ŸŽจ ์ธํ„ฐํŽ˜์ด์Šค ์ผ๊ด€์„ฑ
- ๋””์ž์ธ ์‹œ์Šคํ…œ ์ค€์ˆ˜
- ์ƒํ˜ธ์ž‘์šฉ ํŒจํ„ด ์ผ๊ด€์„ฑ
- ์ ‘๊ทผ์„ฑ(a11y) ํ‘œ์ค€ ์ค€์ˆ˜
- ๋‹คํฌ๋ชจ๋“œ์™€ ํ…Œ๋งˆ ์ง€์›
- ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ณ ๋ ค

โšก ์„ฑ๋Šฅ๊ณผ ๋ฐ˜์‘์„ฑ
- ๋กœ๋”ฉ ์ƒํƒœ์™€ ํ”ผ๋“œ๋ฐฑ
- ์ธํ„ฐ๋ž™์…˜ ์ง€์—ฐ ์‹œ๊ฐ„
- ์• ๋‹ˆ๋ฉ”์ด์…˜ ์„ฑ๋Šฅ
- ์˜คํ”„๋ผ์ธ ๊ฒฝํ—˜
- ์ ์ง„์  ํ–ฅ์ƒ(Progressive Enhancement)

๐ŸŒ ๊ธ€๋กœ๋ฒŒ ์‚ฌ์šฉ์ž ๊ณ ๋ ค
- ๊ตญ์ œํ™”(i18n) ์ค€๋น„๋„
- ๋‹ค์–‘ํ•œ ๋””๋ฐ”์ด์Šค ์ง€์›
- ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ ๋Œ€์‘
- ๋ฌธํ™”์  ์ ์‘์„ฑ
- ์‹œ๊ฐ„๋Œ€์™€ ์ง€์—ญํ™”

๐Ÿง  ์ธ์ง€ ๋ถ€ํ•˜
- ์ •๋ณด ๊ตฌ์กฐ์™€ ๋„ค๋น„๊ฒŒ์ด์…˜
- ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ๋ช…ํ™•์„ฑ
- ๋„์›€๋ง๊ณผ ๊ฐ€์ด๋“œ
- ํ•™์Šต ๊ณก์„  ์ตœ์†Œํ™”
- ์ธ์ง€์  ๋งˆ์ฐฐ ์š”์†Œ

์‚ฌ์šฉ์ž ์—ฌ์ •์˜ ๊ฐ ๋‹จ๊ณ„์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ ๊ณผ ๊ฐœ์„  ๋ฐฉ์•ˆ์„ ์ œ์‹œํ•ด์ค˜"

[S3QC3] AI ์ฝ”๋“œ ๋ฆฌ๋ทฐ โ€” ํ’ˆ์งˆ ์ธก์ • & ํŒ€ ์„ฑ์žฅ ์‹œ์Šคํ…œ

์ž๋™ํ™”๋œ ๋ฆฌ๋ทฐ ํ’ˆ์งˆ ์ธก์ •

๋ฆฌ๋ทฐ ํ”„๋กœ์„ธ์Šค ์ž์ฒด์˜ ํšจ๊ณผ์„ฑ์„ ์ง€์†์ ์œผ๋กœ ์ธก์ •ํ•˜๊ณ  ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.

bash
# ๋ฆฌ๋ทฐ ํ”„๋กœ์„ธ์Šค ํšจ๊ณผ์„ฑ ๋ถ„์„
claude "์šฐ๋ฆฌ ํŒ€์˜ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ถ„์„ํ•˜๊ณ  ๊ฐœ์„  ๋ฐฉ์•ˆ์„ ์ œ์‹œํ•ด์ค˜

๐Ÿ“Š ์ •๋Ÿ‰์  ์ง€ํ‘œ ๋ถ„์„
- ๋ฆฌ๋ทฐ ์™„๋ฃŒ ์‹œ๊ฐ„ (๋ชฉํ‘œ: 24์‹œ๊ฐ„ ์ด๋‚ด)
- ๋ฆฌ๋ทฐ ๋ผ์šด๋“œ ์ˆ˜ (๋ชฉํ‘œ: ํ‰๊ท  2๋ผ์šด๋“œ ์ดํ•˜)
- ๋ฐœ๊ฒฌ๋œ ๊ฒฐํ•จ ์ˆ˜์™€ ์‹ฌ๊ฐ๋„
- ํ”„๋กœ๋•์…˜ ๋ฒ„๊ทธ ์˜ˆ๋ฐฉ๋ฅ 
- ๋ฆฌ๋ทฐ์–ด ์ฐธ์—ฌ๋„์™€ ํ’ˆ์งˆ

๐ŸŽฏ ํ’ˆ์งˆ ์ง€ํ‘œ ์ถ”์ 
- ๋ฆฌ๋ทฐ ์ฝ”๋ฉ˜ํŠธ์˜ ๊ฑด์„ค์„ฑ
- ํ•™์Šต ํšจ๊ณผ์™€ ์ง€์‹ ์ „์ˆ˜
- ํŒ€ ํ‘œ์ค€ ๊ฐœ์„  ๊ธฐ์—ฌ๋„
- ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค ๋ฐœ๊ตด
- ๊ธฐ์ˆ  ๋ถ€์ฑ„ ์˜ˆ๋ฐฉ ํšจ๊ณผ

๐Ÿš€ ํ”„๋กœ์„ธ์Šค ์ตœ์ ํ™”
- ๋ฆฌ๋ทฐ ๋ณ‘๋ชฉ ์ง€์  ์‹๋ณ„
- ์ž๋™ํ™” ๊ธฐํšŒ ๋ฐœ๊ตด
- ๋ฆฌ๋ทฐ์–ด ์›Œํฌ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ
- ์ „๋ฌธ ์˜์—ญ๋ณ„ ๋ผ์šฐํŒ…
- ๊ต์œก๊ณผ ๋ฉ˜ํ† ๋ง ํ†ตํ•ฉ

์›”๋ณ„ ํŠธ๋ Œ๋“œ์™€ ๊ฐœ์„  ๋กœ๋“œ๋งต์„ ํฌํ•จํ•œ ๋ฆฌํฌํŠธ๋ฅผ ์ƒ์„ฑํ•ด์ค˜"

์ง„ํ™”ํ•˜๋Š” ๋ฆฌ๋ทฐ ๊ธฐ์ค€

ํŒ€์˜ ์„ฑ์žฅ๊ณผ ํ”„๋กœ์ ํŠธ ์ง„ํ™”์— ๋”ฐ๋ผ ๋ฆฌ๋ทฐ ๊ธฐ์ค€๋„ ๋™์ ์œผ๋กœ ์กฐ์ •๋ฉ๋‹ˆ๋‹ค.

markdown
# ๐Ÿ”„ Dynamic Code Review Standards v3.0

## ๐Ÿ“ˆ ์ ์‘ํ˜• ํ’ˆ์งˆ ๊ธฐ์ค€

### ํ”„๋กœ์ ํŠธ ๋‹จ๊ณ„๋ณ„ ๋ฆฌ๋ทฐ ๊ฐ•๋„
```bash
# ํ˜„์žฌ ํ”„๋กœ์ ํŠธ ๋‹จ๊ณ„ ํ‰๊ฐ€
if [ ํ”„๋กœ์ ํŠธ_๋‹จ๊ณ„ == "MVP" ]; then
    ๋ฆฌ๋ทฐ_๊ธฐ์ค€="๊ธฐ๋Šฅ ๋™์ž‘ + ๋ณด์•ˆ ๊ธฐ๋ณธ"
    ์Šน์ธ_์ž„๊ณ„๊ฐ’=70
elif [ ํ”„๋กœ์ ํŠธ_๋‹จ๊ณ„ == "์„ฑ์žฅ" ]; then
    ๋ฆฌ๋ทฐ_๊ธฐ์ค€="ํ™•์žฅ์„ฑ + ์„ฑ๋Šฅ + ํ…Œ์ŠคํŠธ"
    ์Šน์ธ_์ž„๊ณ„๊ฐ’=85
elif [ ํ”„๋กœ์ ํŠธ_๋‹จ๊ณ„ == "์„ฑ์ˆ™" ]; then
    ๋ฆฌ๋ทฐ_๊ธฐ์ค€="๋ชจ๋“  ํ’ˆ์งˆ ๊ธฐ์ค€ + ํ˜์‹ ์„ฑ"
    ์Šน์ธ_์ž„๊ณ„๊ฐ’=95
fi

ํŒ€์›๋ณ„ ๋งž์ถคํ˜• ๊ธฐ์ค€

๋น„์ฆˆ๋‹ˆ์Šค ์ž„ํŒฉํŠธ๋ณ„ ๋ฆฌ๋ทฐ ๊นŠ์ด

๐ŸŽ“ ๋ฆฌ๋ทฐ๋ฅผ ํ†ตํ•œ ํŒ€ ์„ฑ์žฅ ์‹œ์Šคํ…œ

์ง€์‹ ์ „์ˆ˜ ์ถ”์ 

bash
# ํ•™์Šต ํšจ๊ณผ ์ธก์ •
claude "์ด๋ฒˆ ๋‹ฌ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ํ†ตํ•œ ํŒ€ ํ•™์Šต ํšจ๊ณผ๋ฅผ ๋ถ„์„ํ•ด์ค˜
- ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ฐ€์žฅ ๋งŽ์ด ๋ฐฐ์šด ๊ฐœ๋…
- ๋ฐ˜๋ณต๋˜๋Š” ์‹ค์ˆ˜ ํŒจํ„ด๊ณผ ๊ต์œก ํ•„์š” ์˜์—ญ
- ์‹œ๋‹ˆ์–ด๊ฐ€ ์ „์ˆ˜ํ•œ ์ง€์‹์˜ ์ •์ฐฉ๋„
- ํŒ€ ์ „์ฒด ๊ธฐ์ˆ  ์ˆ˜์ค€ ํ–ฅ์ƒ ์ง€ํ‘œ
- ๋‹ค์Œ ๋‹ฌ ์ง‘์ค‘ ๊ต์œก ์ฃผ์ œ ์ถ”์ฒœ

๊ฐœ์ธ๋ณ„ ์„ฑ์žฅ ๊ณ„ํš๊ณผ ๋ฉ˜ํ† ๋ง ๋งค์นญ์„ ์ œ์•ˆํ•ด์ค˜"

ํ˜์‹  ์•„์ด๋””์–ด ๋ฐœ๊ตด

bash
# ๋ฆฌ๋ทฐ ๊ณผ์ •์—์„œ ๋‚˜์˜จ ํ˜์‹  ์•„์ด๋””์–ด ์ถ”์ 
claude "์ตœ๊ทผ ์ฝ”๋“œ ๋ฆฌ๋ทฐ์—์„œ ์ œ๊ธฐ๋œ ํ˜์‹ ์  ์•„์ด๋””์–ด๋“ค์„ ์ •๋ฆฌํ•ด์ค˜
- ์ƒˆ๋กœ์šด ๊ธฐ์ˆ  ๋„์ž… ์ œ์•ˆ
- ํ”„๋กœ์„ธ์Šค ๊ฐœ์„  ์•„์ด๋””์–ด
- ๋„๊ตฌ์™€ ์ž๋™ํ™” ๊ธฐํšŒ
- ์•„ํ‚คํ…์ฒ˜ ์ง„ํ™” ๋ฐฉํ–ฅ
- ํŒ€ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ ๋ฐฉ์•ˆ

๊ฐ ์•„์ด๋””์–ด์˜ ์‹คํ˜„ ๊ฐ€๋Šฅ์„ฑ๊ณผ ROI๋ฅผ ํ‰๊ฐ€ํ•˜๊ณ 
์‹คํ–‰ ๊ณ„ํš์„ ์ˆ˜๋ฆฝํ•ด์ค˜"

[S3QC2] MCP ์„œ๋ฒ„ ๋ณด์•ˆ ๊ด€๋ฆฌ


[S3QC4] Books โ€” ๊ณ ๊ธ‰ ํ’ˆ์งˆ๊ด€๋ฆฌ ํ•™์Šต

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /ํ•™์Šต์šฉ_Books_New/

[S3QC5] ์‹ค์ „ Tips โ€” ๋ณด์•ˆ/๊ฒ€์ฆ/SAL Grid/๋งˆ๋ฌด๋ฆฌ ๊ณ ๊ธ‰

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /Tips/

[S3QC6] .claude ์ฐธ๊ณ  โ€” Compliance/Rules/Subagents ๊ณ ๊ธ‰

๐Ÿ“ ๊ฒฝ๋กœ: .claude/subagents/, .claude/skills/, .claude/compliance/, .claude/rules/

S3CM โ€” ๋น„์šฉ๊ด€๋ฆฌ (Cost Management)


[S3CM1] Books 1๊ถŒ โ€” ๊ณ ๊ธ‰ ๋น„์šฉ๊ด€๋ฆฌ ํ•™์Šต

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /ํ•™์Šต์šฉ_Books_New/1๊ถŒ_Claude_ClaudeCode_์‚ฌ์šฉ๋ฒ•/

[S3CM2] ์‹ค์ „ Tips โ€” AI ๋น„์šฉ ํ™œ์šฉ๋ฒ• ๊ณ ๊ธ‰

๐Ÿ“ ๊ฒฝ๋กœ: ๋ถ€์ˆ˜์ _๊ณ ์œ ๊ธฐ๋Šฅ/์ฝ˜ํ…์ธ /Tips/๋„๊ตฌ_ํ™œ์šฉ/

[S3CM3] .claude ์ฐธ๊ณ  โ€” Compliance/Subagents ๊ณ ๊ธ‰

๐Ÿ“ ๊ฒฝ๋กœ: .claude/subagents/, .claude/compliance/

๋ถ€๋ก




ํ†ต๊ณ„

ํ•ญ๋ชฉ์ˆ˜๋Ÿ‰
์ด ์…€18๊ฐœ (3 Stage ร— 6 Area)
ํ™œ์„ฑ ์…€18๊ฐœ (๋ชจ๋“  ์…€ ํ™œ์„ฑ)
SAL ID ๋ถ€์—ฌ ํ•ญ๋ชฉ169๊ฐœ
์ฐธ๊ณ  ์ž๋ฃŒ ํ•ด์ฒด โ†’ ๊ฐœ๋ณ„ SAL ID59๊ฐœ (18 ๋ธ”๋ก โ†’ 59 SAL ID)
์ชผ๊ฐฌ ์„น์…˜6๊ฐœ โ†’ 12๊ฐœ variant
์ค‘๋ณต0๊ฑด (SAL ID ์ค‘๋ณต ์—†์Œ)

ํŒŒ์ผ ์ˆœ์„œ ์ธ๋ฑ์Šค

S1CO โ†’ S1ST โ†’ S1WF โ†’ S1TO โ†’ S1QC โ†’ S1CM
โ†’ S2CO โ†’ S2ST โ†’ S2WF โ†’ S2TO โ†’ S2QC โ†’ S2CM
โ†’ S3CO โ†’ S3ST โ†’ S3WF โ†’ S3TO โ†’ S3QC โ†’ S3CM
โ†’ ๋ถ€๋ก