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

์ด ๋ฌธ์„œ๋Š” Codex๋ฅผ ์“ฐ๋Š” ๊ฐœ๋ฐœํŒ€ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ์กฐ๋ฅผ ๋จผ์ € ๊ณ ์ •ํ•˜๊ณ , ํ…Œ์ŠคํŠธ๋กœ ๊ฒฝ๊ณ„๋ฅผ ์ž ๊ทธ๋Š” ์‹ค์ „ ๋ฃจํ”„๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

์•ˆ๋‚ด: ๋ณธ๋ฌธ์€ ์ƒ์„ฑํ˜• AI๋ฅผ ํ™œ์šฉํ•ด ์ดˆ์•ˆ์„ ์ž‘์„ฑํ–ˆ๊ณ , ๊ณต๊ฐœ๋œ ๊ณต์‹/์›๋ฌธ ์ž๋ฃŒ๋ฅผ ๊ต์ฐจ ํ™•์ธํ•ด ์‹ค๋ฌด ์šด์˜ ๊ด€์ ์œผ๋กœ ๋ณด๊ฐ•ํ–ˆ์Šต๋‹ˆ๋‹ค.

flowchart TD
A[์š”๊ตฌ์‚ฌํ•ญ] --> B[UseCase ์ •์˜]
B --> C[Interface ๋ถ„๋ฆฌ]
C --> D[Infra ์—ฐ๊ฒฐ]
D --> E[Test ๊ฒ€์ฆ]
E --> F[์ž‘์€ ๋ฆฌํŒฉํ† ๋ง]

๐Ÿง  ์น ํŒ ์น˜ํŠธ์‹œํŠธ

  • ๊ตฌ์กฐ๋ฅผ ๋จผ์ € ๊ณ ์ •ํ•˜๋ฉด ๊ตฌํ˜„์ด ๋นจ๋ผ์ง„๋‹ค
  • domain์€ ์™ธ๋ถ€ ์˜์กด์„ ๋ชจ๋ฅด๋ฉด ์•ˆ ๋œ๋‹ค
  • ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฒฝ๊ณ„๋ฅผ ์ง€ํ‚ค๋Š” ๊ฐ€์žฅ ๊ฐ•ํ•œ ์žฅ์น˜๋‹ค
  • ํฐ ์„ค๊ณ„๋ณด๋‹ค ์ž‘์€ ๋‹จ์œ„ ๊ฒ€์ฆ์ด ์‹ค๋ฌด์— ๋งž๋‹ค
  • ๊ฒฝ๊ณ„ ์œ„๋ฐ˜์€ ๋ฆฌ๋ทฐ๊ฐ€ ์•„๋‹ˆ๋ผ ์ž๋™ ์ฒดํฌ๋กœ ๋ง‰๋Š”๋‹ค

์‹ค๋ฌด ์‹œ๋‚˜๋ฆฌ์˜ค

  • ๋„๋ฉ”์ธ: ์ฃผ๋ฌธ ์ƒ์„ฑ
  • ์กฐ๊ฑด:
    • domain ๋ ˆ์ด์–ด ์™ธ๋ถ€ ํ”„๋ ˆ์ž„์›Œํฌ ์˜์กด ๊ธˆ์ง€
    • usecase ํ…Œ์ŠคํŠธ ๋‹จ๋… ์‹คํ–‰ ๊ฐ€๋Šฅ
    • ์˜ˆ์™ธ ์ฝ”๋“œ/๋ฉ”์‹œ์ง€ ๊ทœ์น™ ํ†ต์ผ

30๋ถ„ ์‹คํ–‰ ๋ฃจํ”„

1) ๊ตฌ์กฐ ๋ผˆ๋Œ€ ๋จผ์ € ๋งŒ๋“ค๊ธฐ (10๋ถ„)

๊ถŒ์žฅ ๊ธฐ๋ณธ ๊ตฌ์กฐ:

  • domain/: ์—”ํ‹ฐํ‹ฐ, ๋„๋ฉ”์ธ ๊ทœ์น™
  • usecase/: ์—…๋ฌด ํ๋ฆ„
  • interface/: ํฌํŠธ/๊ณ„์•ฝ
  • infra/: DB/API ๊ตฌํ˜„

Codex ์š”์ฒญ์€ ๊ตฌํ˜„๋ณด๋‹ค ๊ฒฝ๊ณ„๋ฅผ ๋จผ์ € ์ง€์‹œํ•˜๋Š” ํŽธ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

2) ์œ ์Šค์ผ€์ด์Šค + ํ…Œ์ŠคํŠธ ๊ณ ์ • (15๋ถ„)

์ตœ์†Œ ํ…Œ์ŠคํŠธ ์„ธํŠธ:

  • ์ •์ƒ ์ฃผ๋ฌธ ์ƒ์„ฑ
  • ํ•„์ˆ˜๊ฐ’ ๋ˆ„๋ฝ ์˜ˆ์™ธ
  • ์ค‘๋ณต ์ฃผ๋ฌธ ๋ฐฉ์ง€

์ด ๋‹จ๊ณ„์˜ ๋ชฉํ‘œ๋Š” ๊ธฐ๋Šฅ ํ™•์žฅ์ด ์•„๋‹ˆ๋ผ โ€œ๊ฒฝ๊ณ„๊ฐ€ ์‹ค์ œ๋กœ ์ง€์ผœ์ง€๋Š”์ง€โ€ ํ™•์ธ์ž…๋‹ˆ๋‹ค.

3) ๊ฒฝ๊ณ„ ์ ๊ฒ€ + ์ •๋ฆฌ (5๋ถ„)

  • domain import ๊ทœ์น™ ์œ„๋ฐ˜ ์—ฌ๋ถ€
  • ํ…Œ์ŠคํŠธ ํ†ต๊ณผ ์—ฌ๋ถ€
  • ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ทœ์น™ ์ผ๊ด€์„ฑ

๋ฏธ๋‹ˆ ์‚ฌ๋ก€ 2๊ฐ€์ง€

์‚ฌ๋ก€ A) ๊ตฌํ˜„๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ๊ฒฝ๊ณ„๊ฐ€ ๋ฌด๋„ˆ์ง„ ํŒ€

์ดˆ๊ธฐ์—” ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœ๋์ง€๋งŒ, ์ธํ”„๋ผ ์ฝ”๋“œ๊ฐ€ ๋„๋ฉ”์ธ์œผ๋กœ ์นจํˆฌํ•ด ๋ฆฌํŒฉํ† ๋ง ๋น„์šฉ์ด ์ปค์กŒ์Šต๋‹ˆ๋‹ค. ๊ตฌ์กฐ ์„ ์–ธ๊ณผ ๊ฒฝ๊ณ„ ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ๋ถ™์ธ ๋’ค ์ˆ˜์ • ์†๋„๊ฐ€ ์•ˆ์ •๋์Šต๋‹ˆ๋‹ค.

์‚ฌ๋ก€ B) ํ…Œ์ŠคํŠธ๊ฐ€ ์ธํ”„๋ผ์— ๋ฌถ์—ฌ ๋А๋ ธ๋˜ ํŒ€

์œ ์Šค์ผ€์ด์Šค ํ…Œ์ŠคํŠธ๋ฅผ ์ธํ”„๋ผ์—์„œ ๋ถ„๋ฆฌํ•˜์ž ํ…Œ์ŠคํŠธ ์‹œ๊ฐ„์ด ํฌ๊ฒŒ ์ค„๊ณ , ๋ฆฌ๋ทฐ ์ฃผ๊ธฐ๊ฐ€ ์งง์•„์กŒ์Šต๋‹ˆ๋‹ค.

์‹ค์Šต๋…ธํŠธ ํ…œํ”Œ๋ฆฟ

  • ๋„๊ตฌ: VS Code, Codex, pytest
  • ์ž…๋ ฅ: ์ฃผ๋ฌธ ์ƒ์„ฑ ์š”๊ตฌ์‚ฌํ•ญ 1๊ฑด
  • ์‹คํ–‰: ๊ตฌ์กฐ ๊ณ ์ • โ†’ ์œ ์Šค์ผ€์ด์Šค โ†’ ํ…Œ์ŠคํŠธ โ†’ ๊ฒฝ๊ณ„ ์ ๊ฒ€
  • ์„ฑ๊ณต ํŒ์ •: ๊ฒฝ๊ณ„ ์œ„๋ฐ˜ 0๊ฑด + ํ…Œ์ŠคํŠธ ํ†ต๊ณผ
  • ์ œ์ถœ๋ฌผ: ํด๋” ํŠธ๋ฆฌ, ํ…Œ์ŠคํŠธ ๋กœ๊ทธ, ํ•ต์‹ฌ diff

20๋ถ„ ๋„์ž… ๋ฃจํ‹ด

  • 10๋ถ„: ํ˜„์žฌ ์„œ๋น„์Šค 1๊ฐœ๋ฅผ domain/usecase/infra๋กœ ๋ถ„ํ•ด
  • 5๋ถ„: ๊ฒฝ๊ณ„ ์œ„๋ฐ˜ ์ฒดํฌ ๊ทœ์น™ 1๊ฐœ ์ถ”๊ฐ€
  • 5๋ถ„: ์œ ์Šค์ผ€์ด์Šค ํ…Œ์ŠคํŠธ 1๊ฐœ ์ถ”๊ฐ€

๋‹ค์Œ ์ฝ๊ธฐ