8์ฃผ์ฐจ ๊ณผ์ ์ฒดํฌํฌ์ธํธ
๊ธฐ๋ณธ ๊ณผ์
ํ์
- ๋ฐ๋ณต ์ ํ ์ ํ
- ์ผ์ ์์ฑ ๋๋ ์์ ์ ๋ฐ๋ณต ์ ํ์ ์ ํํ ์ ์๋ค.
- ๋ฐ๋ณต ์ ํ์ ๋ค์๊ณผ ๊ฐ๋ค: ๋งค์ผ, ๋งค์ฃผ, ๋งค์, ๋งค๋
- 31์ผ์ ๋งค์์ ์ ํํ๋ค๋ฉด -> ๋งค์ ๋ง์ง๋ง์ด ์๋, 31์ผ์๋ง ์์ฑํ์ธ์.
- ์ค๋ 29์ผ์ ๋งค๋ ์ ์ ํํ๋ค๋ฉด -> 29์ผ์๋ง ์์ฑํ์ธ์!
- ๋ฐ๋ณต ์ผ์ ํ์
- ์บ๋ฆฐ๋ ๋ทฐ์์ ๋ฐ๋ณต ์ผ์ ์ ์๊ฐ์ ์ผ๋ก ๊ตฌ๋ถํ์ฌ ํ์ํ๋ค.
- ์์ด์ฝ์ ๋ฃ๋ ํ๊ทธ๋ฅผ ๋ฃ๋ ์์ ๋กญ๊ฒ ํด๋ณด์ธ์!
- ์บ๋ฆฐ๋ ๋ทฐ์์ ๋ฐ๋ณต ์ผ์ ์ ์๊ฐ์ ์ผ๋ก ๊ตฌ๋ถํ์ฌ ํ์ํ๋ค.
- ๋ฐ๋ณต ์ข
๋ฃ
- ๋ฐ๋ณต ์ข ๋ฃ ์กฐ๊ฑด์ ์ง์ ํ ์ ์๋ค.
- ์ต์ : ํน์ ๋ ์ง๊น์ง, ํน์ ํ์๋งํผ, ๋๋ ์ข ๋ฃ ์์ (์์ ํน์ฑ์, 2025-06-30๊น์ง)
- ๋ฐ๋ณต ์ผ์ ๋จ์ผ ์์
- ๋ฐ๋ณต์ผ์ ์ ์์ ํ๋ฉด ๋จ์ผ ์ผ์ ์ผ๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.
- ๋ฐ๋ณต์ผ์ ์์ด์ฝ๋ ์ฌ๋ผ์ง๋๋ค.
- ๋ฐ๋ณต ์ผ์ ๋จ์ผ ์ญ์
- ๋ฐ๋ณต์ผ์ ์ ์ญ์ ํ๋ฉด ํด๋น ์ผ์ ๋ง ์ญ์ ํฉ๋๋ค.
์ ํ (์์ X)
- [ ] ๋ฐ๋ณต ๊ฐ๊ฒฉ ์ค์ - ๊ฐ ๋ฐ๋ณต ์ ํ์ ๋ํด ๊ฐ๊ฒฉ์ ์ค์ ํ ์ ์๋ค. - ์: 2์ผ๋ง๋ค, 3์ฃผ๋ง๋ค, 2๊ฐ์๋ง๋ค ๋ฑ - [ ] ์์ธ ๋ ์ง ์ฒ๋ฆฌ: - ๋ฐ๋ณต ์ผ์ ์ค ํน์ ๋ ์ง๋ฅผ ์ ์ธํ ์ ์๋ค. - ๋ฐ๋ณต ์ผ์ ์ค ํน์ ๋ ์ง์ ์ผ์ ์ ์์ ํ ์ ์๋ค. - [ ] ์์ผ ์ง์ (์ฃผ๊ฐ ๋ฐ๋ณต์ ๊ฒฝ์ฐ): - ์ฃผ๊ฐ ๋ฐ๋ณต ์ ํน์ ์์ผ์ ์ ํํ ์ ์๋ค. - [ ] ์๊ฐ ๋ฐ๋ณต ์ต์ : - ๋งค์ ํน์ ๋ ์ง์ ๋ฐ๋ณต๋๋๋ก ์ค์ ํ ์ ์๋ค. - ๋งค์ ํน์ ์์์ ์์ผ์ ๋ฐ๋ณต๋๋๋ก ์ค์ ํ ์ ์๋ค. - [ ] ๋ฐ๋ณต ์ผ์ ์ ์ฒด ์์ ๋ฐ ์ญ์ - ๋ฐ๋ณต ์ผ์ ์ ๋ชจ๋ ์ผ์ ์ ์์ ํ ์ ์๋ค. - ๋ฐ๋ณต ์ผ์ ์ ๋ชจ๋ ์ผ์ ์ ์ญ์ ํ ์ ์๋ค.- ์ด ์ฑ์ ์ ํฉํ ํ ์คํธ ์ ๋ต์ ๋ง๋ค์๋์?
๊ฐ ํ์๋ค์ ํ ์คํธ ์ ๋ต์?
ํ์๋ค๊ณผ ํจ๊ป ์ ๋ต์ ์๊ณ ์ฌํ๊ณผ์ ์งํํ์ต๋๋ค!
๊ธฐ๋ฅ ํ๊ท ํ ์คํธ
ํฉ์๋ ํ ์คํธ ์ ๋ต๊ณผ ๊ทธ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?
"ํ๊ทํ ์คํธ ์ค์ฌ์ ์์ ์ฑ ๋ณด์ฅ ์ ๋ต"
ํ๊ท ํ ์คํธ๋ ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ๋ ๋ฆฌํฉํฐ๋ง์ด ๊ธฐ์กด ๊ธฐ๋ฅ์ ๊นจ๋จ๋ฆฌ์ง ์์๋์ง ๋ณด์ฅํ๋ ๊ฒ์ด ํต์ฌ ๋ชฉ์ ์ ๋๋ค. ๋จ์ํ "์ ์ฒด ํ ์คํธ"๊ฐ ์๋๋ผ ๊ธฐ์กด ๊ธฐ๋ฅ ์ ์ง์ ์ด์ ์ ๋ง์ถ ์์ ๋ง ์ญํ ์ ํฉ๋๋ค.
ํต์ฌ ์ ๋ต
-
ํ๊ทํ ์คํธ ์ค์ฌ ์ ๊ทผ
- ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ ์ ๊ธฐ์กด ๊ธฐ๋ฅ์ด ๊นจ์ง์ง ์์์์ ๋ณด์ฅ
- ๊ธฐ๋ฅ ๊ฐ ์ํธ์์ฉ ๊ฒ์ฆ์ ์ง์ค
- ํตํฉ์ ์ธ ๊ด์ ์์์ ๊ธฐ๋ฅ ๊ฒ์ฆ
-
๊ธฐ์กด ๊ธฐ๋ฅ ์ ์ง ๋ณด์ฅ
- ์คํค๋ง ๋ณ๊ฒฝ๊ณผ ํ๋ ์ถ๊ฐ์ ๋ํ ๋์
- ์๋ก์ด ํ๋๋ ๋ก์ง ์ถ๊ฐ ์ ๊ธฐ์กด ๋ก์ง์ ์์ ์ฑ ๋ณด์ฅ
- ์ฐ๊ด ๊ธฐ๋ฅ๋ค์ ์ ์ ๋์ ๊ฒ์ฆ
-
์ค์ ์ฌ์ฉ์ ์๋๋ฆฌ์ค ์ค์ฌ ํ ์คํธ
- ์ด์ ๊ธฐ๋ฅ ์ฌํ ์คํธ๊ฐ ์๋ ๊ธฐ๋ฅ ๊ฐ ์ํธ์์ฉ ๊ฒ์ฆ
- ์ค์ ์ฌ์ฉ์ ํ๋ก์ฐ๋ฅผ ์๋ฎฌ๋ ์ด์ ํ๋ realisticํ ํ ์คํธ ๊ตฌํ
์ ํ ์ด์
๋ฌธ์ ์ํฉ
์ ๊ท ๊ธฐ๋ฅ ๊ฐ๋ฐ ์งํ ๊ณผ์ ์์ ๊ธฐ์กด ๊ธฐ๋ฅ๊ณผ ํ ์คํธ ์ฝ๋์ ์์ ์ฑ์ ๋ณด์ํ๊ธฐ ์ํด ํ๊ท ํ ์คํธ ๋์ ์ ๊ฒํ ํ๊ฒ ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ํ์๋ค ๊ฐ ํ๊ท ํ ์คํธ์ ๋ํ ์ดํด๋๊ฐ ์์ดํ์ฌ ๋ช ํํ ๊ฐ๋ ์ ๋ฆฝ์ด ํ์ํ ์ํฉ์ด์์ต๋๋ค.
ํนํ ํ๊ท ํ ์คํธ์ ํ์์ฑ์ ๋ํ ๊ทผ๋ณธ์ ์ธ ์๋ฌธ์ด ์ ๊ธฐ๋์์ต๋๋ค. ํ ํ์์ด "ํ๊ท ํ ์คํธ๊ฐ ์๋ก์ด ๊ธฐ๋ฅ์ ๋ถ์ผ ๋ ์์ ์ฑ์ ์ฃผ๋ ๊ฒ๊ณผ ์ ์ฒด ํ ์คํธ๋ฅผ ํ๋ ๊ฒ๊ณผ ์ฐจ์ด๊ฐ ๋ฌด์์ธ์ง", "ํ๊ท ํ ์คํธ๋ ๊ผญ ์ ๊ท ๊ธฐ๋ฅ ๋ถ์ผ ๋๋ง ์๋ฏธ ์๋ ๊ฑด๊ฐ์?"๋ผ๋ ์ง๋ฌธ์ ๋์ง๋ฉด์ ํ ์ฐจ์์ ๋ ผ์๊ฐ ์์๋์์ต๋๋ค.
๋ํ ํ๊ท ํ ์คํธ์ ์ ํ ์ ํ์ ๋ํ ๊ณ ๋ฏผ๋ ์์์ต๋๋ค. ์๊ฐ์ ํ๊ท ํ ์คํธ(Storybook์ ํฌ๋ก๋งํฑ์ ํ์ฉํ UI ๊ธฐ์ค ํ ์คํธ)๋ฅผ ์งํํ ๊ฒ์ธ์ง, ์๋๋ฉด ๊ธฐ๋ฅ ํ๊ท ํ ์คํธ(์ ๋ํ ์คํธ์ ํจ๊ป ์ฌ์ฉํ๋ ๋ฐฉ์)๋ฅผ ์งํํ ๊ฒ์ธ์ง์ ๋ํ ๊ฒฐ์ ์ด ํ์ํ์ต๋๋ค. UI ํฝ์ ๊ธฐ๋ฐ ํ๊ท ํ ์คํธ ์ ๋ต์ ํ์์ฑ์ ๋ํด์๋ ํ ๋ด์์ ํฌ๊ฒ ํ์ํ๋ค๋ ์๊ฒฌ์ด ์์ด, ๊ธฐ๋ฅ ํ๊ท ํ ์คํธ ์ค์ฌ์ผ๋ก ๋ ผ์๋ฅผ ์งํํ๊ธฐ๋ก ํ์ต๋๋ค.
์ฃผ์ ๋ ผ์ ๊ณผ์
1๋จ๊ณ: ํ๊ท ํ ์คํธ์ ๋ณธ์ง์ ์๋ฏธ ํ๊ตฌ ์์ ์ ๊ธฐ๋ ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ผ๋ก, ํ๊ท ํ ์คํธ๋ ์ ๊ธฐ๋ฅ์ด ์๋๋ผ ๊ธฐ์กด ๊ธฐ๋ฅ์ด ๊นจ์ง์ง ์์๋์ง ํ์ธํ๋ ๊ฒ์ ๋ชฉ์ ์ด ์๋ค๋ ์ ์ด ๊ฐ์กฐ๋์์ต๋๋ค. ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๋ ํํ ๋ฐ์ํ๋ ๋ฌธ์ ๋ ์ด๋ฏธ ์์ ํ ๊ธฐ๋ฅ์ด ๋กค๋ฐฑ๋๊ฑฐ๋ ๋ค๋ฅธ ๋ถ๋ถ์ ์ฌ์ด๋์ดํํธ๋ฅผ ์ฃผ๋ ๊ฒ์ธ๋ฐ, ์ด๋ฅผ ๋ฐฉ์งํ๋ ๊ฒ์ด ํ๊ท ํ ์คํธ์ ํต์ฌ ์ญํ ์ด๋ผ๊ณ ์ ์ํ์ต๋๋ค.
"๊ธฐ๋ฅ A, B๋ฅผ ๊ฐ๋ฐํ ํ ๋ค์ ํ ์คํธํ๋ ๊ฒ์ด ํ๊ท ํ ์คํธ์ธ๊ฐ?"๋ผ๋ ๊ทผ๋ณธ์ ์ธ ์ง๋ฌธ๋ถํฐ ์์ํ์ฌ, ๋จ์ํ ๊ธฐ๋ฅ ์ฌํ ์คํธ์ ํ๊ท ํ ์คํธ์ ์ฐจ์ด์ ์ ๋ช ํํ ๊ตฌ๋ถํ๊ณ ์ ํ์ต๋๋ค.
์ด๋ฌํ ๋ ผ์ ๊ณผ์ ์์ ํ๊ท ํ ์คํธ์ ์ ์ฒด ํ ์คํธ ๊ฐ์ ๋ช ํํ ์ฐจ์ด์ ์ ์ ๋ฆฌํ์ต๋๋ค:
| ๊ตฌ๋ถ | ํ๊ทํ
์คํธ (Regression Test) | ์ ์ฒดํ
์คํธ (Full Test Suite) |
|---|---|---|
| ๋ชฉ์ | ๊ธฐ์กด ๊ธฐ๋ฅ์ด ์ฌ์ ํ ์ ์๋ํ๋์ง ํ์ธ | ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ๊ธฐ๋ฅ์ ๊ฒ์ฆ |
| ์คํ ์์ | ์ฝ๋ ๋ณ๊ฒฝ ํ | ์ ๊ธฐ์ ๋๋ ๋ฆด๋ฆฌ์ค ์ |
| ํ ์คํธ ๋ฒ์ | ๋ณ๊ฒฝ ์ํฅ์ ๋ฐ์ ์ ์๋ ๊ธฐ์กด ๊ธฐ๋ฅ๋ค | ๋ชจ๋ ๊ธฐ๋ฅ (์ ๊ท + ๊ธฐ์กด) |
| ์คํ ์๊ฐ | โก ๋น ๋ฆ (์ผ๋ถ ํ ์คํธ๋ง) | โฑ๏ธ ์ค๋ ๊ฑธ๋ฆผ (๋ชจ๋ ํ ์คํธ) |
| ์ฃผ์ ๊ด์ฌ์ฌ | ๊ธฐ์กด ๊ธฐ๋ฅ์ ์์ ์ฑ | ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ์ฑ |
์ด๋ฌํ ๋น๊ต ๋ถ์์ ํตํด ํ๊ท ํ ์คํธ๊ฐ ๋จ์ํ "์ ์ฒด ํ ์คํธ"๊ฐ ์๋๋ผ ์์ ์ฑ์ ๋ณด์ฅํ๋ ์์ ๋ง ์ญํ ์ ํ๋ค๋ ์ ์ ๋ช ํํ ํ์ต๋๋ค.
2๋จ๊ณ: ๊ตฌ์ฒด์ ๋ชฉ์ ๊ณผ ์ ์ฉ ์์ ๋์ถ ์คํค๋ง ๋ณ๊ฒฝ์ด๋ ์๋ก์ด ํ๋ ์ถ๊ฐ ์์๋ ๊ธฐ์กด ๊ธฐ๋ฅ์ด ๊ทธ๋๋ก ์ ์ง๋๋์ง ํ์ธํ๋ ๊ฒ์ด ํ๊ท ํ ์คํธ์ ์ฃผ์ ๋ชฉ์ ์ด๋ผ๊ณ ์ ์ํ์ต๋๋ค. ๊ตฌ์ฒด์ ์ธ ํ ์คํธ ์๋๋ฆฌ์ค๋ฅผ ํตํด ๊ฐ๋ ์ ๋ช ํํ ํ์ต๋๋ค:
// ์์
describe('๊ธฐ์กด ๋ฐ๋ณต ๊ณ์ฐ ๋ก์ง์ด excludeDates ์ถ๊ฐ ํ์๋ ๋์ผํ๊ฒ ๋์ํ๋ค');
describe('weekday ๊ธฐ๋ฅ ์ถ๊ฐ ์ดํ์๋ ๊ธฐ๋ณธ ์ฃผ๊ฐ/์๊ฐ/์ฐ๊ฐ ๋ก์ง์ ๋์ผํ๊ฒ ๋์ํ๋ค');
3๋จ๊ณ: ํ ์ฐจ์์ ํต์ฌ ๊ฐ์น ํฉ์ ๋ ผ์๋ฅผ ํตํด ๋์ถ๋ ํ๊ท ํ ์คํธ์ ํต์ฌ ๊ฐ์น๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๊ธฐ์กด ๊ธฐ๋ฅ์ ์ ์ง ๋ณด์ฅ: ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ ์ ๊ธฐ์กด ๊ธฐ๋ฅ์ด ์ ์ ๋์ํ๋์ง ํ์ธ
- ์ฐ๊ด ๊ธฐ๋ฅ ๊ฒ์ฆ: ์ฌ๋ฌ ๊ธฐ๋ฅ์ด ๋์ํ ๋ ๊ธฐ์กด ๋์ ์ค ์ฐ๊ด๋ ๊ธฐ๋ฅ๋ค์ ์ ์ ๋์ ํ์ธ
- ์์ ๋ง ์ญํ : ์ ๊ธฐ๋ฅ ์ถ๊ฐ ์ ์ฌ์ด๋์ดํํธ ๋ฐฉ์ง ๋ฐ ์ํํธ์จ์ด ์ ์ฒด ์์ ์ฑ ๊ฐ์
์ต์ข ์๋ฆฝ ์ ๋ต
ํ๊ท ํ ์คํธ ์ ํ ๊ฒฐ์ ์๊ฐ์ ํ๊ท ํ ์คํธ๋ณด๋ค๋ ๊ธฐ๋ฅ ํ๊ท ํ ์คํธ์ ์ง์คํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ์ด๋ ํ์ฌ ํ๋ก์ ํธ์ ์ ๊ท ๊ธฐ๋ฅ ๊ฐ๋ฐ ํน์ฑ์ ๊ธฐ๋ฅ์ ์์ ์ฑ์ด ๋ ์ค์ํ๋ค๊ณ ํ๋จํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
ํ๊ท ํ ์คํธ ์์ฑ ๋ฐฉํฅ ๋จ์ํ ๊ธฐ๋ฅ ์ฌํ ์คํธ๊ฐ ์๋ ๊ธฐ๋ฅ ๊ฐ ์ํธ์์ฉ ๊ฒ์ฆ์ ์ค์ ์ ๋๊ธฐ๋ก ํ์ต๋๋ค. ์๋ก์ด ํ๋๋ ๋ก์ง ์ถ๊ฐ ์ ๊ธฐ์กด ๋ก์ง์ ์์ ์ฑ์ ๋ณด์ฅํ๊ณ , ํตํฉ์ ์ธ ๊ด์ ์์ ๊ธฐ๋ฅ์ ๊ฒ์ฆํ๋ ๊ฒ์ ๋ชฉํ๋ก ์ค์ ํ์ต๋๋ค.
์ค๋ฌด์ ๊ณ ๋ ค์ฌํญ "๋จ์ผ ์ผ์ ์์ฑ ๊ธฐ๋ฅ ๊ฒ์ฆ"๊ณผ ๊ฐ์ด ์ด๋ฏธ ์กด์ฌํ๋ ํ ์คํธ ์ฝ๋์์ ์ค๋ณต ๋ฌธ์ ๋ ํจ๊ป ๊ฒํ ํ์ฌ, ํจ์จ์ ์ธ ํ ์คํธ ์ฝ๋ ์์ฑ ๋ฐฉ์์ ๋ชจ์ํ์ต๋๋ค.
์ถ๊ฐ๋ก ์์ฑ๋ ํ ์คํธ ์ฝ๋๋ ์ด๋ค ๊ฒ๋ค์ด ์๋์?
ํ์ผ ์์น : src/__tests__/ํ๊ทํ
์คํธ.spec.tsx ์ฌ์ง์ PR
'ํ๊ทํ ์คํธ: ๋ฐ๋ณต์ผ์ ๊ณผ ๊ธฐ์กด ๋จ์ผ์ผ์ ์ถฉ๋ ๊ฒ์ฌ'
-
๋ฐ๋ณต์ผ์ ์์ฑ ์ ๊ธฐ์กด ๋จ์ผ์ผ์ ๊ณผ ์ถฉ๋ํ๋ ๊ฒฝ์ฐ ๊ฒฝ๊ณ ๊ฐ ํ์๋๋ค
- ๋ชฉ์ : ๋ฐ๋ณต์ผ์ ๊ธฐ๋ฅ ์ถ๊ฐ ํ ๊ธฐ์กด ์ถฉ๋ ๊ฒ์ฌ ๋ก์ง์ด ์ ์ ๋์ํ๋์ง ๊ฒ์ฆ
- ๊ฒ์ฆ: '์ผ์ ๊ฒน์นจ ๊ฒฝ๊ณ ' ๋ฉ์์ง์ ๊ตฌ์ฒด์ ์ธ ์ถฉ๋ ์ ๋ณด ํ์ ํ์ธ
-
๋ฐ๋ณต์ผ์ ์ ํน์ ๋ ์ง๊ฐ ๊ธฐ์กด ์ผ์ ๊ณผ ์ถฉ๋ํ์ง ์๋ ๊ฒฝ์ฐ ์ ์ ์์ฑ๋๋ค
- ๋ชฉ์ : ์ถฉ๋ํ์ง ์๋ ๋ฐ๋ณต์ผ์ ์ด ์ ์์ ์ผ๋ก ์์ฑ๋๋์ง ๊ฒ์ฆ
- ๊ฒ์ฆ: ์ถฉ๋ ๊ฒฝ๊ณ ์์ด ์ ์ ์์ฑ ๋ฐ ์ฑ๊ณต ๋ฉ์์ง ํ์ธ
'ํ๊ทํ ์คํธ: ๊ฒ์ ๊ธฐ๋ฅ
-
๋ฐ๋ณต์ผ์ ์ด ๊ฒ์ ๊ธฐ๋ฅ์ ์ ์์ ์ผ๋ก ํฌํจ๋๋ค
- ๋ชฉ์ : ๋ฐ๋ณต์ผ์ ๊ณผ ๋จ์ผ์ผ์ ์ด ๊ฒ์ ๊ธฐ๋ฅ์์ ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ๋์ง ๊ฒ์ฆ
- ๊ฒ์ฆ: ๊ฒ์ ์กฐ๊ฑด์ ๋ง๋ ๋ฐ๋ณต์ผ์ ๋ค์ด ๋ชจ๋ ํ์๋๋์ง ํ์ธ
-
๋ฐ๋ณต์ผ์ ์ด ์๋ ์ํ์์ ๊ฒ์ ๊ฒฐ๊ณผ๊ฐ ์์ผ๋ฉด ์ ์ ํ ๋ฉ์์ง๋ฅผ ํ์ํ๋ค
- ๋ชฉ์ : ๋ฐ๋ณต์ผ์ ํ๊ฒฝ์์ ๊ฒ์ ๊ฒฐ๊ณผ๊ฐ ์์ ๋์ UI ๋์ ๊ฒ์ฆ
- ๊ฒ์ฆ: "๊ฒ์ ๊ฒฐ๊ณผ๊ฐ ์์ต๋๋ค." ๋ฉ์์ง ํ์ ํ์ธ
'ํ๊ทํ ์คํธ: ์๋ฆผ ๊ธฐ๋ฅ
- ๋ฐ๋ณต์ผ์ ์ ๋ํ ์๋ฆผ์ด ๊ฐ ์ผ์ ๋ง๋ค ์ ์ ๋์ํ๋ค
- ๋ชฉ์ : ๋ฐ๋ณต์ผ์ ์ ๊ฐ ์ธ์คํด์ค๋ณ๋ก ์๋ฆผ ๊ธฐ๋ฅ์ด ์ ์ ๋์ํ๋์ง ๊ฒ์ฆ
- ๊ฒ์ฆ: ๊ฐ๋ณ ๋ฐ๋ณต์ผ์ ์ ๋ํ ์ ํํ ์๋ฆผ ๋ฉ์์ง ํ์ ํ์ธ
๊ณผ์ ์ ํํ๊ณ
๊ธฐ์ ์ ์ฑ์ฅ
๋ฉด์ ์ค๋น๋ก ์ธํด Full AI ๋ฐ์ด๋ธ์ฝ๋ฉ์ ์งํํด๋ณธ ์ฃผ์ฐจ์์ต๋๋ค. TDD์ ๊ฐ๋ ์ Claude Code์ ์ ์ฉํ๊ณ ์ฝ๋๋ฅผ ํ๋์ฉ ๊ฒ์ํ๋ฉด์ ์ค๋ฌด ๊ด๋ฆฌ์์ ์ ์ฅ์ ์ดํดํ ์ ์์์ต๋๋ค. ๋ฌด์๋ณด๋ค ์ค์ํ๊ฑด, ๋ด๊ฐ ์ผ๋ง๋ ํ ์คํธ ์ฝ๋๋ฅผ ์ดํดํ๊ณ ์์ผ๋ฉฐ Claude Code๊ฐ ๋ง๋ค์ด์ค ์ฝ๋๋ฅผ ์ผ๋งํผ ์ฆ๋นํ๊ณ ์ดํดํ ์ ์๋์ง๊ฐ ํต์ฌ์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ด๋ฒ ๊ณผ์ ๋ฅผ ํตํด TDD ๋ฐฉ๋ฒ๋ก ์ ๋ํ ์ดํด๊ฐ ํฌ๊ฒ ํฅ์๋์์ต๋๋ค. ํนํ RED ๋จ๊ณ์์ ๋จ์ํ import ์ค๋ฅ๊ฐ ์๋ ๋ ผ๋ฆฌ์ ์ผ๋ก ์๋ชป๋ ๊ตฌํ์ผ๋ก ํ ์คํธ๋ฅผ ์คํจ์ํค๋ ๊ฒ์ ์ค์์ฑ์ ๊นจ๋ฌ์์ต๋๋ค. Claude Code์ thinking ๋ชจ๋๋ก RED/GREEN/๋ฆฌํฉํ ๋ง ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ์งํ๋๋ ํ๋ก์ธ์ค๋ฅผ ํ์ธํ๊ณ ์ ์ฉ์ํค๋ฉด์ TDD์ ๋ณธ์ง์ ์ธ ๋ชฉ์ ์ ๋ช ํํ ์ดํดํ ์ ์์์ต๋๋ค.
๋ณต์กํ ๋ ์ง ๋ก์ง ๊ตฌํ์์ ๋ง์ ๋์ ์ ๊ฒฝํํ์ต๋๋ค. ์ค๋ ์ 2์ 29์ผ ์ฒ๋ฆฌ๋ 31์ผ ๋งค์ ๋ฐ๋ณต ์ ํด๋น ์ผ์ด ์๋ ๋ฌ์ ๊ฑด๋๋ฐ๋ ๋ก์ง ๋ฑ์ ์์๋ณด๋ค ๋ณต์กํ์ง๋ง, ์์ ๋จ์๋ก ๋๋์ด ์ฐจ๊ทผ์ฐจ๊ทผ ํด๊ฒฐํด ๋๊ฐ๋ ๊ณผ์ ์ด ๋งค์ฐ ์๋ฏธ ์์์ต๋๋ค.
์ฝ๋ ํ์ง
๊ฐ์ฅ ๋ง์กฑ์ค๋ฌ์ ๋ ๊ตฌํ์ isValidRecurrenceDate() ํจ์๋ฅผ ํตํ ๋ ์ง ์ ํจ์ฑ ๊ฒ์ฆ ๋ก์ง์ด์์ต๋๋ค. ๋ณต์กํ ๋ ์ง ๊ณ์ฐ์ ์์ ํ๊ฒ ์ฒ๋ฆฌํ ์ ์์๊ณ , ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์คํ์ผ๋ก ์์ฑํ isNotTargetEvent ํฌํผ ํจ์๋ ๊ฐ๋
์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ ์ธก๋ฉด์์ ์ข์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ์์ต๋๋ค.
๋ค๋ง ์์ฌ์ด ๋ถ๋ถ์ด ์์ต๋๋ค. ๋ฐ๋ณต ์ข
๋ฃ์ผ ์ค์ ์์ ์บ๋ฆฐ๋ ์์ด์ฝ ํด๋ฆญ ๋ฐฉ์์ ์์ ํ ๊ตฌํํ์ง ๋ชปํ๊ณ , medium.integration.spec.tsx์ ๋ฐ๋ณต ์ ํ ์ ํ ํ์ธ ํ
์คํธ๋ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ๋ํ ํ์ฌ๋ unit ํ
์คํธ ์ค์ฌ์ผ๋ก๋ง ๊ตฌํํ๋๋ฐ, E2E ํ
์คํธ์ ํ์์ฑ์ ๋ํด์๋ ๋ ๊ณ ๋ฏผํด๋ด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค.
AI์ ํจ๊ป ์ฝ๋ฉํ๋ฉด์ ๊ฐ์ฅ ๊ณ ๋ฏผํ๋ ๋ถ๋ถ์ ํ
์คํธ ์ฝ๋ ์์ฑ์ ์ ๊ทผ ๋ฐฉ์์ด์์ต๋๋ค. "๋ชจ๋ ์๊ตฌ์ฌํญ์ ํ ๋ฒ์ ๊ตฌํ ํ ํ
์คํธ๋ก ๊ฒ์ฆ"๋ณด๋ค๋ "๋จ๊ณ๋ณ ์๊ตฌ์ฌํญ ๊ตฌํ ํ ๋จ๊ณ๋ณ๋ก ํ
์คํธ๋ก ๊ฒ์ฆ" ๋ฐฉ์์ ์ ํํ๋๋ฐ, ์ด ๊ฒฐ์ ์ด ํ
์คํธ ์ฝ๋ ์์ฑ ๊ณผ์ ์ ๋์ฑ ์์ ์ ์ผ๋ก ๋ง๋ค์ด ์ฃผ์์ต๋๋ค. ๋งค ๋จ๊ณ๋ง๋ค pnpm test๋ฅผ ์คํํ์ฌ ๊ธฐ์กด ๊ธฐ๋ฅ์ ์ฌ์ด๋์ดํํธ๊ฐ ์๋์ง ํ์ธํ๊ณ , AI์ ์ฝ๋๋ฅผ ์ ๋ ์ ๋ขฐํ ์ ์๋(?) ์ต๊ด๋ ์ ์ฐฉ๋์์ต๋๋ค.
ํ์ต ํจ๊ณผ ๋ถ์
๊ฐ์ฅ ํฐ ๋ฐฐ์์ TDD์ RED-GREEN-REFACTOR ์ฌ์ดํด์์ ๊ฐ ๋จ๊ณ์ ๋ช ํํ ๋ชฉ์ ์ ์ดํดํ๊ฒ ๋์์ต๋๋ค. ๋จ์ํ ํ ์คํธ๋ฅผ ์์ฑํ๊ณ ํต๊ณผ์ํค๋ ๊ฒ์ด ์๋๋ผ, ๊ฐ ๋จ๊ณ๊ฐ ์ ํ์ํ์ง, ์ด๋ค ๋ฐฉ์์ผ๋ก ์งํํด์ผ ํ๋์ง๋ฅผ ๊ณ ๋ฏผํ๋ฉฐ ์งํํ์์ต๋๋ค. ๋ํ ํ์๋ค๊ณผ ํ๊ท ํ ์คํธ์ ๊ฐ๋ ๊ณผ ์ค๋ฌด ํ์ฉ ๋ฐฉ์์ ๋ํด ํ ๋ก ํ๋ฉด์, ํ ์คํธ๊ฐ ๋จ์ํ ๊ฒ์ฆ ๋๊ตฌ๊ฐ ์๋ ๊ฐ๋ฐ ์ ๋ต์ ํต์ฌ์์ ๊นจ๋ฌ์์ต๋๋ค.
์์ผ๋ก ๋ ํ์ต์ด ํ์ํ ์์ญ๋ค๋ ๋ช ํํด์ก์ต๋๋ค. React Testing Library๋ฅผ ํ์ฉํ ๋ ์ ๊ตํ ํตํฉ ํ ์คํธ ์์ฑ ๋ฐฉ๋ฒ์ ์ตํ๊ณ ์ถ๊ณ , ์บ๋ฆฐ๋ ์ปดํฌ๋ํธ ๊ฐ์ ๋ณต์กํ UI ์์๋ฅผ ์ด๋ป๊ฒ ํจ๊ณผ์ ์ผ๋ก ํ ์คํธํ ์ ์์์ง๋ ๊ณ ๋ฏผํด๋ด์ผ๊ฒ ์ต๋๋ค. E2E ํ ์คํธ์ unit ํ ์คํธ ์ฌ์ด์ ๊ท ํ์กํ ์ ๋ต์ ์๋ฆฝํ๋ ๊ฒ๋ ํ์ํฉ๋๋ค. ๋ํ, E2E/unit ํ ์คํธ์ ๋ํ ์ดํด๋ ๋ช ํํ๋ ํตํฉํ ์คํธ์ ๋ํ ์ดํด๋๊ฐ ๋ฎ์ ๊ฒ ๊ฐ์ ์ด ๋ถ๋ถ๋ ์ถ๊ฐ ๊ณต๋ถ๊ฐ ํ์ํด๋ณด์ ๋๋ค.
์ค๋ฌด ์ ์ฉ ๊ฐ๋ฅ์ฑ์ ๋งค์ฐ ๋๋ค๊ณ ์๊ฐํฉ๋๋ค. TDD๋ฅผ ํตํ ์์ ์ ์ธ ๊ธฐ๋ฅ ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ ์ด๋ค ํ๋ก์ ํธ์์๋ ๋์์ด ๋ ๊ฒ์ด๊ณ , AI ๋๊ตฌ๋ฅผ ํ์ฉํ ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฐ ํ์ง ๊ด๋ฆฌ ๋ฐฉ์๋ ์ค์ ํ ๊ฐ๋ฐ์์ ์ถฉ๋ถํ ํ์ฉํ ์ ์์ ๊ฒ์ด๋ผ ์๊ฐํฉ๋๋ค. ์คํ ์ฝ์น๋์ด QnA์๊ฐ์ ๊ณต์ ํด์ฃผ์ BMAD๋ฅผ ํตํ agent ๋ฐฉ์๋ ์ ์ฉํด๋ณด๋ ค๊ณ ํฉ๋๋ค. ํนํ ํ๊ท ํ ์คํธ ์ค์ฌ์ ๊ฐ๋ฐ ๋ฌธํ๋ ๊ธฐ์กด ๊ธฐ๋ฅ์ ๋ณดํธํ๋ฉด์๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์์ ํ๊ฒ ์ถ๊ฐํ ์ ์๋ ์ข์ ๋ฐฉ๋ฒ๋ก ์ด๋ผ๊ณ ํ์ ํฉ๋๋ค.
๊ณผ์ ํผ๋๋ฐฑ
๊ณผ์ ๋ฅผ ์งํํ๋ฉด์ ๋ช ๊ฐ์ง ์ ๋งคํ๋ ๋ถ๋ถ๋ค์ด ์์์ต๋๋ค. ๋ฐ๋ณต ์ข
๋ฃ์ผ ์ค์ ์์ ์ฒ์์๋ input ๋ฐฉ์์ผ๋ก ์๋ํ์ง๋ง repeatEndDate์ ์ ํํ ๊ฐ์ด ๋ค์ด๊ฐ์ง ์์์ ์บ๋ฆฐ๋ ์์ด์ฝ ํด๋ฆญ ๋ฐฉ์์ผ๋ก ์ ํํด์ผ ํ๋๋ฐ, ์ด๋ค ๋ฐฉ์์ผ๋ก ์งํํ๋๊ฒ ๋ ์ข์์ง ๊ณ ๋ฏผํ๋ ์๊ฐ์ด ๊ธธ์์ต๋๋ค. ์ด์ ๋ํด ๋ฐ์ ์๋ฃ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋์ ์์ ์ฝ๋๋ฅผ ๋ค์ด์ฃผ๊ฑฐ๋ ํ์ผ๋ฉด ์ ์ฒ๋ผ ํ
์คํธ ์ฝ๋๋ฅผ ์ฒ์ ์ ํ๋ ์๊ฐ์๋ค๋ ์ดํดํ๊ธฐ ์ฌ์ ์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ญ๋๋ค!
ํ์ง๋ง ์ ๋ฐ์ ์ผ๋ก ๊ณผ์ ์ ๊ตฌ์ฑ์ ๋งค์ฐ ์ข์์ต๋๋ค. ์ฒดํฌ๋ฐ์ค ํํ๋ก ์๊ตฌ์ฌํญ์ด ๋ช ํํ๊ฒ ์ ์๋์ด ์์ด์ ์งํ ์ํฉ์ ๋จ๊ณ๋ณ๋ก ์งํํ ์ ์์๊ณ , TDD ๋ฐฉ๋ฒ๋ก ์ ๊ฐ์ ํ์ฌ ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ์ ์์ฐ์ค๋ฝ๊ฒ ๊ฒฝํํ ์ ์์์ต๋๋ค. ํนํ ํ์๊ณผ์ ๊ฐ๋ฐ ๋ฐฉ์ ๋ ผ์๋ฅผ ํตํด ํ์ ๊ฒฝํ์ ์์ ์ ์์๋ ์ฌํ ๊ฐ์ ์, Claude Code ๊ฐ์ AI ๋๊ตฌ๋ฅผ ํ์ฉํ์ฌ ํ๋์ ์ธ ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ์ฒดํํ ์ ์์๋ ์ ์ด ๊ฐ์ฅ ํฐ ์ํ์ด์์ต๋๋ค. ํ๊ท ํ ์คํธ ์ ๋ต ์๋ฆฝ์ ์ํด ๋ ผ์ํ ๋ด์ฉ๋ค์ด ์ค๋ฌด์๋ ์ถฉ๋ถํ ์ ์ฉ ๋ ์ ์๋ ๋ถ๋ถ์ด๋ผ ์๊ฐ๋์์ต๋๋ค. ๋ฐฐ์์์ ๋๋ผ ๊ฒ์ด ์๋ ์ค๋ฌด ์ ์ฉ๊น์ง ๊ณ ๋ คํ ์ ์์๋ ์ฃผ์ฐจ์๋ ๊ฒ ๊ฐ์ ํ์ ์์ ํ ์คํธ ์ฝ๋๊ฐ ์๋ค๋ฉด ํผ์์ ์ฃผ๋์ ์ผ๋ก ์งํํ ์ ์์๊ฑฐ๋ ์์ ๊ฐ์ด ์๊ฒผ์ต๋๋ค.
๋ฆฌ๋ทฐ ๋ฐ๊ณ ์ถ์ ๋ด์ฉ
-
RED ํ ์คํธ ์ฝ๋ ์ดํด๋ ์ด๋ฒ ๊ณผ์ ์์ TDD ๋ฐฉ์์ ์ ์ฉํ๋ฉด์ RED-GREEN-REFACTOR ์ฌ์ดํด์ ๊ฑฐ์ณ ๊ฐ๋ฐํ๋๋ฐ, ํนํ RED ๋จ๊ณ์์ "๋ ผ๋ฆฌ์ ์ผ๋ก ์๋ชป๋ ๊ตฌํ"์ผ๋ก ํ ์คํธ๋ฅผ ์คํจ์ํค๋ ๋ฐฉ๋ฒ์ด ์ฌ๋ฐ๋ฅธ TDD ์ ๊ทผ์ธ์ง ๊ถ๊ธํฉ๋๋ค. ์๋ฅผ ๋ค์ด unitํ ์คํธ ์ฝ๋ ์์ฑ์ ์ค์ ๊ตฌํํ์ฌ ํ ์คํธ๊ฐ ์คํจํ๋๋ก ํ ๊ฒ์ด ์ ์ ํ RED ๋จ๊ณ ๊ตฌํ์ด์๋์ง ๊ถ๊ธํฉ๋๋ค.
-
์์ฒญ์ฌํญ์ ๊ธฐ๋ฅ ํ ์คํธ ์ฝ๋ ์์ ๋ฐฉ์์ ๋ํด ํ์๊ณผ ๊ฐ๋ฐ ๋ฐฉ์์ ๋ ผ์ํ ๋ ๊ธฐ๋ณธ ๊ณผ์ ํ ์คํธ ์ฝ๋ ์์ฑ์ "๋ชจ๋ ์๊ตฌ์ฌํญ์ ํ ๋ฒ์ ๊ตฌํ ํ ๊ฒ์ฆ" vs "๋จ๊ณ๋ณ ์๊ตฌ์ฌํญ ๊ตฌํ" ์ค์์ ํ์๋ฅผ ์ ํํ์ต๋๋ค. ๊ทธ ์ด์ ๋ AI์๊ฒ ๋งก๊ธฐ๋ค๋ณด๋ ๋จ๊ณ์ ์ผ๋ก ์ปจํ ์คํธ๋ฅผ ๋๋ ์ ์์ ํ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ์ง๋ง ์ค๋ฌด์์๋ ํ์๋ค๊ณผ ์์ ํ ๋ ์ด๋ค ์ ๊ทผ ๋ฐฉ์์ด ๋ ํจ๊ณผ์ ์ธ์ง, ๊ทธ๋ฆฌ๊ณ ํ๋ก์ ํธ ๊ท๋ชจ๋ ํ ๊ตฌ์ฑ์ ๋ฐ๋ผ ์ด๋ค ๊ธฐ์ค์ผ๋ก ์งํํด์ผํ ์ง๋ ๊ณ ๋ฏผ์ด ๋ฉ๋๋ค.
-
ํจ์ ๋ถ๋ฆฌ ๊ธฐ์ค๊ณผ ์ด๋ฆ ๋ณต์กํ ๋ ์ง ๋ก์ง(์ค๋ ์ฒ๋ฆฌ, 31์ผ ๋งค์ ๋ฐ๋ณต ๋ฑ)์ ๊ตฌํํ๋ฉด์
isValidRecurrenceDate()์getNextRecurrenceDate()ํจ์๋ก ๋๋์ด ์์ ํ๋๋ฐ, ํ์ฌ์ ํจ์ ๋ถ๋ฆฌ ๊ธฐ์ค๊ณผ ๋ช ๋ช ์ด ์ ์ ํ ๊น์? ์ด๊ธฐ์๋repeat์ผ๋ก ์์ ํ์์ผ๋ AI์ถ์ฒํด์ค ๋ช ๋ช ์ผ๋ก ๋ณ๊ฒฝํ์์ต๋๋ค. ์ ์ฑํฐ์ ํด๋ฆฐ์ฝ๋ ๊ธฐ์ค์ ์ ์ฉํด์ ์ข ๋ ๋ช ํํ ํจ์๋ช ์ผ๋ก ๋ฐ๊พธ์์ด์ผํ์๊น์? ๋ํ ๋ ์ง ์ฒ๋ฆฌ ๋ก์ง์์ ๋ ์์ ํ๊ณ ๊ฐ๋ ์ฑ ์ข์ ๊ตฌํ ๋ฐฉ๋ฒ์ด ์๋์ง๋ ๊ถ๊ธํฉ๋๋ค.
// ๋ฐฐ์ด ํ์์ผ๋ก ๋ฝ์์ ์ฌ์ฉํ๋ค๋ณด๋ ๊ฐ๋
์ฑ ์ ํ
expect(recurringEvents[0].date).toBe('2024-01-31');
expect(recurringEvents[1].date).toBe('2024-03-31');
expect(recurringEvents[2].date).toBe('2024-05-31');
- ํ ์คํธ์ ๊ฒฝ๊ณ ํ์ฌ unit ํ ์คํธ ์์ฃผ๋ก ๊ตฌํํ๋๋ฐ, ์บ๋ฆฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ํน์ฑ์ UI ์ธํฐ๋์ ์ด ์ค์ํ ๋ถ๋ถ๋ค(๋ฐ๋ณต ์ ํ ์ ํ, ์บ๋ฆฐ๋ ์์ด์ฝ ํด๋ฆญ ๋ฑ)์ ๋ํด์๋ ์ด๋ ์ ๋๊น์ง ํตํฉ ํ ์คํธ๋ E2E ํ ์คํธ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ์ ์ ํ ๊น์? ์์ ๊ธฐ๋ฅ์ ์ง๊ธ๋ ์ถฉ๋ถํ ํ ์คํธ๊ฐ ๋ง๋ค๊ณ ์๊ฐํ๋๋ฐ unit, ํตํฉํ ์คํธ, E2E๊น์ง ์ถ๊ฐํ์ฌ ๋น๋ํด์ง๋ ๊ฒ์ด ๋น์ฐํ ๊ฒ์ธ์ง, ๊ทธ๋งํผ ์๊ฐ์ ๋ค์ฌ์ ์์ฑํด์ผ ํ ์คํธ๋ก ์ถฉ๋ถํ ๊ฒ์ฆ์ ํ ์ ์๋ ๊ฒ์ธ์ง ๊ถ๊ธํฉ๋๋ค.
๊ณผ์ ํผ๋๋ฐฑ
undefined