๐์ง๊ธ ๋๋ ์์ฑํ ๊ธฐ์กด์ ์ฝ๋์ ๋ํด์ ์ผ์ผํ ํ ์คํธ ์ฝ๋๋ฅผ ๋ง๋ค๊ณ ์๋ค. ํญ์ ํ ์คํธ ์ฝ๋์ ๋ํด์ ๊ฒ์ํ๊ณ ์์๋ณด๋ค๋ณด๋ฉด, TDD๋ผ๋ ์ฉ์ด๊ฐ ๋์จ๋ค. ์ ํํ TDD๊ฐ ๋ฌด์์ด๊ณ ์ด๋ ํ ์ฅ์ ๋ค์ด ์๋์ง ์์๋ณด์.
TDD๋ Test-Driven Development์ ์ฝ์๋ก ํ ์คํธ๋ฅผ ์ค์ฌ์ผ๋ก ๊ฐ๋ฐ์ ์งํํด ๋๊ฐ๋ ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก ์ค ํ๋์ด๋ค. ๊ทธ๋ฅ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ ํ๋์ ๋ฐฉ๋ฒ๋ก ์ด๊ธฐ ๋๋ฌธ์ ์ผ๋ จ์ ๊ณผ์ ์ ๋ฐ๋ผ ๊ฐ๋ฐํด ๋๊ฐ๋ ์์๊ฐ ์๋ค.
์ผ๋ฐ์ ์ ๊ฐ๋ฐ์ ์ฐ๋ฆฌ๊ฐ ํ๋ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ํด๋น ์ฝ๋์ ๋ํด์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ํ์ฌ ๋ด๊ฐ ์ฒํ ์ํฉ์ด ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ธ๋ฐ, TDD๋ ํ ์คํธ ์ฝ๋๋ฅผ ๋จผ์ ์์ฑํ๊ณ , ๊ทธ์ ๋ง๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ์์๋ก ๊ฐ๋ฐ์ ์งํํ๋ค. ์ด ๊ณผ์ ์์ ํ ์คํธ๊ฐ ๊ฐ๋ฐ์์ ์ค๊ณ ๋๊ตฌ๋ก์์ ๊ธฐ๋ฅ์ ํ๋ฉด์ ์ฝ๋์ ํ์ง์ ํฅ์์์ผ์ฃผ๋ ํน์ง์ด ์๋ค.
์์ TDD์ค๋ช
์ ํฌํจ๋ ๋ด์ฉ์์ ์ค๋ช
ํ๋ฏ์ด ๋ฐฉ๋ฒ๋ก ์ด๊ณ ์์๊ฐ ํ์ํ๋ค. ์ด ์์์ ํ๋ฆ์ ํ๋์ ์ฌ์ดํด์ ๊ฐ์ง๋ค.
Red-Green-refactor์ ์ฌ์ดํด์ ๊ฐ์ง๋ฉด์ ๊ฐ๋ฐ์ ์งํํ๊ฒ ๋๋ค.
ํฐ ์ฌ์ดํด๋ก ๋ณด๋ฉด ์์ ๊ณผ์ ์ด๋ผ๊ณ ๋ณผ ์ ์๊ฒ ์ง๋ง ํด๋น ์ฌ์ดํด์ ์ข๋ ์ธ๋ถํ ํ๋ฉด ์๋์ ๊ฐ์ ์ฌ์ดํด์ ๋๋ฉด์ ๊ฐ๋ฐ์ ์งํํ๊ฒ ๋๋ค๊ณ ๋ณผ ์ ์๋ค.
์ค๊ณ ๋ฐ ํ ์คํธ ์ฝ๋์์ฑ : ์ฐ์ ๊ฐ๋ฐ์๋ ์ค๊ณ๋ฅผ ๊ตฌ์ํ๊ณ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ค. ๊ฐ์ฅ ์ค์ํ ๋จ๊ณ์ด๋ค. ์ค๊ณ ๋ฐ ๊ตฌ์์ ๊ธฐ๋ฐ์ผ๋ก ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑ ํด์ผ ํ๋๋ฐ, ๊ฐ๋ฐ์๊ฐ ๋ง๋ค์ด์ผํ ๊ธฐ๋ฅ์ ๋ํด์ ์๋ฒฝํ๊ฒ ๋ถ์ํ๊ณ ์ดํดํ์ง ๋ชปํ๋ค๋ฉด, ์ ๋๋ก๋ ์ค๊ณ๊ฐ ์ด๋ฃจ์ด์ง์ง ์๊ณ , ๊ทธ์ ๋ํ ํ ์คํธ ์ฝ๋๋ง์ ์์ฑํ๊ฒ ๋๋ฉด ๋ถ๋ช ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ํ ์ด ๋จ๊ณ์์๋ ๊ทธ์ ํ ์คํธ ์ฝ๋๋ง ์์ฑํ ๋ฟ ์ค์ง์ ์ผ๋ก ์๋น์ค์ ์ํฅ์ ๋ฏธ์น๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์๋๋ค. ์ด ๋จ๊ณ์์ ๋๋๋ก ์์ ๋จ์๋ก ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
ํ ์คํธ ์คํจ : ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑ์๋ฃ ํ๋ค๋ฉด, ํ ์คํธ๋ฅผ ์คํ ํ์๋ Fail์ด ๋์ฌ๊ฒ์ด๋ค. ์๋? ๋น์ฐํ ์ค์ง์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ์ง ์์์ผ๋๊น.
์ฝ๋ ์์ฑ ๋ฐ ํ ์คํธ ์ฑ๊ณต : ์คํจํ ํ ์คํธ๋ฅผ ํต๊ณผ ์ํค๊ธฐ ์ํ ์ค์ง์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ๋ค. ํ๋์ ๊ธฐ๋ฅ์ ๊ฒ์ฆํด์ผํ ํ ์คํธ ์ผ์ด์ค๋ ์ฌ๋ฌ๊ฐ์ผ ๊ฒ์ด๋ค. ์ 1๋ฒ ๊ณผ์ ์์ ์์ ๋จ์๋ก ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ์๋ค๋ฉด. ๋ฑ ๊ทธ ์ ๋ ํ ์คํฌ ํ ์ด์ค๋ง ํต๊ณผ๋ ์ ์๋๋ก ์ต์ํ์ ์ฝ๋๋ฅผ ์์ฑํ ํ ํ ์คํธ๋ฅผ ์งํํ์ฌ PASS๋ฅผ ์ป๋๋ค.
์ ์ฒด ํ ์คํธ ์ฑ๊ณต : ์ ๋๋ก ์์ฑ๋ ํ ์คํธ ์ฝ๋๋ผ๋ฉด ๋ค๋ฅธ ์ผ์ด์ค์ ๋ํด ๋ฌธ์ ๋ฅผ ์ผ์ผํค์ง ์๊ฒ ์ง๋ง, ํน์๋ ์๋ชป ์ค๊ณ๋ ํ ์คํธ ์ฝ๋๊ฐ ์๊ฑฐ๋, ํด๋จผ ์๋ฌ๋ก ์ธํ ์ค์๊ฐ ๋ฐ์ํ์ ๋๋ ๋ค๋ฅธ ์ผ์ด์ค์ ์ํฅ์ ๋ผ์น ์๋ ์๊ธฐ ๋๋ฌธ์ ๋ฐฉ๊ธ์์ฑํ ํ ์คํธ ์ผ์ด์ค๊ฐ ์๋, ์ด์ ์ ์์ฑํ๋ ์ ์ฒด์ ์ธ ํ ์คํธ๋ฅผ ์คํํ์ฌ ๋ฌธ์ ๊ฐ ์๋์ง ํ์ธํ๋ค.
๋ฆฌํํ ๋ง ๊ณผ์ : ์์ 2~3์ ๊ณผ์ ์์ ์์ฑํ ํ ์คํธ ์ผ์ด์ค์ ํต๊ณผ์ ๊ณผ์ ์ ํด๋น ๊ธฐ๋ฅ์ด ์ ์ ๋์ํ๋์ง ํ์ธํ๋ ์ญํ ์ ํ๋ค. ํ์ฌ ๋ด๊ฐ ์์ฑํ ์ฝ๋๊ฐ 4๋ฒ ๊ณผ์ ๊น์ง ๊ฑฐ์ณ ๊ธฐ๋ฅ์ ๋ฌธ์ ๊ฐ ์์์ ํ์ธํ์ผ๋, ๋ด๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ์ข ๋ ์ฝ๋ ํ๋ฆฌํฐ๋ฅผ ๋์ด๊ธฐ ์ํ ๋ฆฌํํ ๋ง์ ์งํํ๋ค. ์ฝ๋๋ฅผ ๊น๋ํ๊ฒ ๋ค๋ฌ์๋ค๋ฉด ๋ค์ 1๋ฒ ๊ณผ์ ์ผ๋ก ๋์๊ฐ์ ํด๋น ๊ธฐ๋ฅ์ ํ์ํ ๋ค์ step์ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ๊ณ ๋ฐ๋ณตํ๋ฉด์ ๊ธฐ๋ฅ์ ์์ฑํด ๋๊ฐ๋ค.
์์ TDD์ ๋ฐ๋ณต์ ์ธ ์ฃผ๊ธฐ๋ฅผ ํตํด ์ฝ๋์ ํ์ง์ด ๋์์ง๋ ์ด์ ๋ ๋ช ๊ฐ์ง๊ฐ ์กด์ฌํ๋ค.
ํ ์คํธ๋ฅผ ๋จผ์ ์์ฑํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ์ฝ๋๊ฐ ๋์ํด์ผ ํ ๊ธฐ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ช ํํ๊ฒ ์ ์ ํด์ผํ๋ค. ์ด๋ ํ ๊ฐ์ ๋ฃ๊ณ ์ด๋ ํ ๊ฒฐ๊ณผ๊ฐ ๋์ค๊ฒ ๋์ํ ๊ฒ์ธ์ง ์ด๋ฏธ ๊ตฌ์์ ํ๊ณ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋๋ค. ์ด๋ ์ฝ๋์ ๋ช ์ธ(Specification) ์ญํ ๋ ํ๋ฏ๋ก ๊ฐ๋ฐ์์ ํด๋ผ์ด์ธํธ ๊ฐ์ ์์ฌ์ํต์ ๋์์ ์ค ์ ์๋ค.
์ต์ํ์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๋จ๊ณ์์ ๊ฐ๋ฐ์๋ ๊ฐ๊ฒฐํ๊ณ ๋จ์ํ ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋๋ค. ์ ์์ฝ๋์ ์์ฑ์ ํตํด ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ฌ์ค ์ ์๋ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ฝ๋ค.
๋ฆฌํฉํ ๋ง ๋จ๊ณ์์ ์์ฑํ ์ฝ๋๋ฅผ ๊ฐ์ ํ๊ณ ์ค๋ณต์ ์ ๊ฑฐํ์ฌ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ณ ๊ฒฐํจ์ ์๋ฐฉํ ์ ์๋ค.
์ด๊ธฐ์๋ ๊ฐ๋ฐ ์๋๊ฐ ์๋์ ์ผ๋ก ๋๋ฆด ์ ์์ง๋ง, ํ ์คํธ๋ฅผ ํตํด ๋ฐ์ํ๋ ๊ฒฐํจ์ ์ด๊ธฐ์ ์ฐพ์๋ด๋ฏ๋ก ์ดํ์ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋ฅผ ์ฌ์ ์ ์๋ฐฉํ ์ ์๋ค. ๋ฐ๋ผ์, ๊ฒฐํจ์ ์์ ํ๋ ์๊ฐ๊ณผ ๋น์ฉ์ ๋ํญ ์ค์ผ ์ ์๊ณ , ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ๋ฉด์ ์ฝ๋๋ฅผ ์ข ๋ ๊ผผ๊ผผํ ๊ฒํ ํ๊ณ ๋๋ฒ๊น ํ ์ ์์ด, ์ฝ๋์ ํ์ง์ ๋์ด๊ณ ๊ฐ๋ฐ ์์ฐ์ฑ์ ๋์ผ ์ ์๋ค.
TDD๋ ํ๋์ ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก ์ด์ง, ๊ฐ๋ฐ์ ์ํ ์ ๋ต๋ก ์ด ์๋๋ค. ๋ฐ๋ผ์ ์ฅ์ ์ด ์๋ค๋ฉด ๋ถ๋ช ๋จ์ ๋ ์กด์ฌํ๋ค.
์ฐ์ ํ ์คํธ ์ฝ๋์ ์์ฑ๋ฐฉ์๊ณผ ์ฒ์ TDD๋ฅผ ์ ์ฉํด์ ๊ฐ๋ฐ์ ์งํํ๊ฒ ๋๋ฉด ํ์ต๊ณก์ ์ด ๋์ด๋๊ณ , ์์ ๋จ์๋ก ์์ฑํ๊ณ ํ๋ฆฌ๊ณ , ์ฑ๊ณต์ํค๊ณ , ๊ณ ์น๊ณ ๋ฅผ ๋ฐ๋ณตํ๋ฉฐ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ๋ ๊ณผ์ ์ ์ถ๊ฐ์ ์ธ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ ์๊ตฌํ๋ค.
์ฒ์ ์ ํ๋ ๊ธฐ์ ์ด๋ ์ ๊ท ๊ธฐ๋ฅ์ ๋ํด์ ๊ตฌํ์ ํ ๋, ๋ช ํํ์ง ์์ ์ค๊ณ์ ๊ตฌ์์ ๊ฐ์ง๊ณ TDD์ ๋ฐ๋ผ ๊ฐ๋ฐ์ ์งํํ๊ฒ ๋๋ฉด, ์๊ตฌ์ฌํญ์ด ์์ฃผ ๋ฐ๋๊ฑฐ๋ ์ ์ ํ์ง ๋ชปํ ํ ์คํธ ์ผ์ด์ค๋ง ์์ฑํ ์ ์์ด. ์คํ๋ ค ๋นํจ์จ์ ์ผ ์ ์๋ค.
๊ฐ์ธ์ ์ธ TDD์ ๋ํ ์๊ฐ.
๐TDD์ ๋ํด์ ์์ธํ ์์๋ณด๊ธฐ ์ ๊น์ง๋ ์์ก๋ฌ์กํ๋ค. ๋ถ๋ช test์ผ์ด์ค๋ฅผ ๋จผ์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ด๋ผ๋ ๊ฒ์ ์๊ณ ๋ ์์์ง๋ง, ๋์ ๊ฐ์ ์ฃผ๋์ด์ ์ ์ฅ์์ ๋ฐ๋ณต์๋ฌ๋ ๊ฐ๋จํ CRUD๊ฐ ์๋ ์์ ํ ์๋ก์ด ๊ธฐ๋ฅ์ ๋ํ ์ ์ฉ์ด ์๊ธฐ๋ ๊ฒฝ์ฐ๋ผ๋ฉด ์ด๋ป๊ฒ TDD๋ฅผ ์คํํ ์ ์์ง? ๋ผ๋ ์๋ฌธ์ ์ด ํญ์ ๋จ์์๋ค.
์ต๊ทผ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ์ธ๋ถ์์ ๊ฐ์ ธ๋ค ์ด ์ฝ๋์ ๋ํ ๊ฒจ์ฐ ํ์ค์ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ์ฑ์ฐ๊ธฐ ์ํด์ 3~4์๊ฐ์ ๊ตฌ๊ธ์ ๋ค์ ธ๋ณธ ์ ๋ ์๋ค. ํ์ง๋ง TDD์ ๋จ์ ์ ๋ํด์ ์์๋ณด๋ฉด์ '์ ๋ด๊ฐ ์๊ฐํ ๋ถ๋ถ์ด ์ ํํ ๋จ์ ์ ์กด์ฌํ๋๊ตฌ๋'๋ฅผ ๋๊ผ๊ณ , ์์ง์ ๋ด ์ง์์ด ๋ชจ์๋ผ ์์ ๊ฐ์ ๊ฒฝ์ฐ๋ฅผ ๊ฒช์์ง๋ง, ๋ถ๋ช ์ง๊ธ๋ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ์ด ๋ถ๋ถ์ TDD๋ก ์์ฑํ๋ค๋ฉด ์ข ๋ ๊น๋ํ๊ฒ ์์ฑํ ์ ์์ง ์์์๊น? ์ ๊ฐ์ ์๊ฐ์ ํ๋ค.
ํ์ฌ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋ฆฌํํ ๋ง ํด์ผํ ์ฝ๋๊ฐ ๋์ ๋ณด์ด๋๊ฒ TDD๋ฅผ ์ ์ฉํ๋ค๋ฉด ์ฒ์ ์ฝ๋๋ฅผ ์ฐ๋ฉด์๋ถํฐ ๊น๋ํ๊ฒ ์ธ์ ์์์ํ ๋ฐ.. ์ด๋ฌํ ๋ถ๋ถ์ ๊ตณ์ด ์์ฑํ์ง ์์๋ ๋ฌ์ํ ๋ฐ์ ๊ฐ์ ์์ฐ์ฑ์ ๋นํจ์จ์ ์ธ ๋ถ๋ถ์ด ์ง๊ธ ๋์ ๋ฐํ๋๊ฒ ์ด๋ฒ ํฌ์คํ ์ ์์ฑํ๋ฉด์ TDD๊ฐ ์ ๋ง ๊ด์ฐฎ์ ๋ฐฉ๋ฒ๋ก ์ด๋ผ๋ ๊ฒ์ ๋๋ ์ ์์๋ค.
์ฐธ๊ณ ์๋ฃ(์ถ์ฒ)
Kent C. Dodds ๋ธ๋ก๊ทธ ํฌ์คํ
When I follow TDD
whizlabs ๋ธ๋ก๊ทธ ํฌ์คํ
What is TDD and its phases?