Codex๋ฅผ ๋ถ์ด๋ฉด ๊ตฌํ ์๋๋ ์ฌ๋ผ๊ฐ์ง๋ง, ๊ฒ์ฆ ๋ฃจํ๋ฅผ ํจ๊ป ์ฌ๋ฆฌ์ง ์์ผ๋ฉด ํ๊ท ๋ฒ๊ทธ๋ ๊ฐ์ด ๋์ด๋ฉ๋๋ค. ๊ทธ๋์ TDD๋ ๋๋ฆฐ ๊ฐ๋ฐ๋ฒ์ด ์๋๋ผ, ์ฌ์์ ๋น์ฉ์ ์ค์ด๋ ์ด์ ๋ฐฉ์์ ๊ฐ๊น์ต๋๋ค.
์ด ๋ฌธ์๋ Red-Green-Refactor๋ฅผ Codex์ ๊ฒฐํฉํด ์ฒ์ ์ฌ์ฉ์๋ ๋ฐ๋ก ์ ์ฉํ ์ ์๊ฒ ์ ๋ฆฌํ ์ค์ ๊ฐ์ด๋์ ๋๋ค.
์๋ด: ๋ณธ๋ฌธ์ ์์ฑํ AI๋ฅผ ํ์ฉํด ์ด์์ ์์ฑํ๊ณ , ๊ณต๊ฐ๋ ์๋ฌธ/๊ณต์ ์๋ฃ๋ฅผ ๊ต์ฐจ ํ์ธํด ์ค๋ฌด ์ด์ ๊ด์ ์ผ๋ก ๋ณด๊ฐํ์ต๋๋ค.
flowchart LR A[Red: ์คํจ ํ ์คํธ] --> B[Green: ์ต์ ๊ตฌํ] B --> C[Refactor: ๊ตฌ์กฐ ์ ๋ฆฌ] C --> D[ํ๊ท ๊ฒ์ฆ] D --> A
๐ง ์น ํ ์นํธ์ํธ
- TDD์ ๋ชฉ์ ์ ๋๋ฆฌ๊ฒ ์ง๋ ๊ฒ ์๋๋ผ ๋ ๊นจ์ง๊ฒ ์ง๋ ๊ฒ
- Green ๋จ๊ณ์์ ์์ฌ๋ด๋ฉด ํ๊ท๊ฐ ๋์ด๋๋ค
- Refactor๋ ๋์ ๋ณ๊ฒฝ์ด ์๋๋ผ ๊ตฌ์กฐ ์ ๋ฆฌ๋ค
- Codex๋ ์์ฑ๊ธฐ๊ฐ ์๋๋ผ ๋ฃจํ ๊ฐ์๊ธฐ๋ค
- ํ ์คํธ ๋ก๊ทธ๊ฐ ๊ณง ํ ์ง์์ด๋ค
40๋ถ ์ค์ต ๋ฃจํ
1) Red: ์คํจ ํ ์คํธ 3๊ฐ ๋จผ์ (10๋ถ)
๊ณผ์ ์์: ๋ฌธ์์ด ํ์ ๊ท์น 3๊ฐ ์ถ๊ฐ
- ๋น ์ ๋ ฅ ์์ธ
- ๊ตฌ๋ถ์ ์๋ ์ ๋ ฅ ์ฒ๋ฆฌ
- ์๋ชป๋ ํฌ๋งท ์ฒ๋ฆฌ
ํต์ฌ์ ๊ตฌํ ์ ์ ์คํจ๋ฅผ ๋ช ํํ ์ฌํํ๋ ๊ฒ์ ๋๋ค.
2) Green: ์ต์ ๊ตฌํ์ผ๋ก ํต๊ณผ (15๋ถ)
์ด ๋จ๊ณ์์๋ ๊ธฐ๋ฅ ํ์ฅ/์ต์ ํ๋ฅผ ๋ฃ์ง ์์ต๋๋ค. โํต๊ณผโ๋ง ๋ชฉํ๋ก ๋๋ ํธ์ด ์์ ์ ์ ๋๋ค.
3) Refactor: ์ฝ๊ธฐ ์ข๊ฒ ์ ๋ฆฌ (10๋ถ)
์ค๋ณต ์ ๊ฑฐ, ํจ์ ๋ถ๋ฆฌ, ๋ค์ด๋ฐ ์ ๋ฆฌ๋ง ์ํํฉ๋๋ค. ๋ก์ง ๋ณ๊ฒฝ์ ๋ค์ ์ฌ์ดํด๋ก ๋๊น๋๋ค.
4) ํ๊ท ๊ฒ์ฆ (5๋ถ)
- ์ ์ฒด ํ ์คํธ ์คํ
- ๋ฆฐํธ ์คํ
- ๋ณ๊ฒฝ ๋ฒ์ ์ฌํ์ธ
๋ฏธ๋ ์ฌ๋ก 2๊ฐ์ง
์ฌ๋ก A) ๊ตฌํ๋ถํฐ ์์ํ๋ ํ
๋น ๋ฅด๊ฒ ๊ธฐ๋ฅ์ ๋ถ์์ง๋ง ํ๊ท ๋ฒ๊ทธ๊ฐ ๋ฐ๋ณต๋์ต๋๋ค. ์คํจ ํ ์คํธ๋ฅผ ๋จผ์ ์ฐ๋ ๊ท์น์ผ๋ก ๋ฐ๊พผ ๋ค ๋ฆฌ๋ทฐ ์๊ฐ์ด ์ค๊ณ ๋ฐฐํฌ ์์ ์ฑ์ด ์ฌ๋ผ๊ฐ์ต๋๋ค.
์ฌ๋ก B) Refactor ๋จ๊ณ์์ ๋ก์ง๊น์ง ๋ฐ๊พธ๋ ํ
๋ฆฌํฉํ ๋ง ์ปค๋ฐ๊ณผ ๊ธฐ๋ฅ ์ปค๋ฐ์ด ์์ฌ ์์ธ ์ถ์ ์ด ์ด๋ ค์ ์ต๋๋ค. ๋จ๊ณ ๋ถ๋ฆฌ๋ฅผ ๊ฐ์ ํ ๋ค ๋๋ฒ๊น ์๊ฐ์ด ํฌ๊ฒ ์ค์์ต๋๋ค.
์ค์ต๋ ธํธ ํ ํ๋ฆฟ
- ๋๊ตฌ: VS Code, Codex, pytest
- ์ ๋ ฅ: ๊ธฐ๋ฅ ๊ท์น 1๊ฑด
- ์คํ: Red โ Green โ Refactor โ ํ๊ท ๊ฒ์ฆ
- ์ฑ๊ณต ํ์ : ์ ์ฒด ํ ์คํธ ํต๊ณผ + ๊ธฐ๋ฅ ๋ณ๊ฒฝ ์๋ ๋ฆฌํฉํ ๋ง
- ์ ์ถ๋ฌผ: ํ ์คํธ ๋ก๊ทธ, ํต์ฌ diff, ํ๊ณ 5์ค
20๋ถ ๋์ ๋ฃจํด
- 8๋ถ: ์ค๋ ์์ ํ ๊ธฐ๋ฅ์ ์คํจ ํ ์คํธ 1~2๊ฐ ์์ฑ
- 8๋ถ: ์ต์ ๊ตฌํ์ผ๋ก ํต๊ณผ
- 4๋ถ: ์ค๋ณต ์ฝ๋/๋ค์ด๋ฐ ์ ๋ฆฌ