๐ Test-Driven Development:By Example ์ฑ ๋ฆฌ๋ทฐ | TDD์ ๋ํ์ฌ
์ฌํด 1์๋ถํฐ ์ฌ๋ด์์ โTest-Driven Development : By Exampleโ์ฑ ์ ์ด์ฉํด TDD์ ๋ํ์ฌ ์์๋ณด๊ณ ์ค์ ๋ก ์ ๋ฌด์ ์ ์ฉํด๋ณด๋ฉด์ ์ฐ๋ฆฌ ์กฐ์ง์ ๊ฐ์ฅ ์ ํฉํ ํํ์ Best Practice๋ฅผ ์ฐพ๊ธฐ ์ํ ์คํฐ๋๋ฅผ ์งํํ๊ณ ์๋ค.
โTest-Driven Development : By Exampleโ ์ฑ ์ ๋ณธ๊ฒฉ์ ์ธ ๋ชฉ์ฐจ์ ๋ค์ด๊ฐ๊ธฐ ์ ์ ์์ ๊ธ, ์ญ์์ ๊ธ, tdd ์๋ จ๋ฒ ๋ฑ ์์ฐฌ ๋ถ๋ก๋ค๋ก ์์ํ๋ค. ์ด ์ค ์ ์์ ๊ธ์์๋ ์์ผ๋ก ์ด ์ฑ ์์ ๋ค๋ฃจ๊ฒ ๋ TDD๋ฅผ ์ ๋ฐ์ ์ผ๋ก ์ค๋ฒ๋ทฐํด๋ณผ ์ ์๋ ์ค์ํ ๋ด์ฉ๋ค์ด ๋ค์ด๊ฐ์์ด์ ์ด ๋ถ๋ถ์ ๋ํ ์ ๋ฆฌ๋ก ์ด ์ฑ ์ ๋ฆฌ๋ทฐ๋ฅผ ์์ํด๋ณด๋ คํ๋ค. ๊ทธ ์ ์, ์ด์ ๊น์ง์ ๋์ ํ ์คํ ๊ฒฝํ์ ๊ฐ๋จํ ์๊ฐํด๋ณด๊ฒ ๋ค.
์ด์ ๊น์ง ๋์ ํ ์คํ ๊ฒฝํ
๊ฐ๋ฐ์ ์ค๋น๋ฅผ ํ๋ฉฐ ๋ค๋ ๋ ๋ถํธ์บ ํ์์ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ํ ์คํธ๋ฅผ ์์ฑํ์๋ค. ํ๋ก ํธ์๋์ ๋ฐฑ์๋์ ํ ์คํธ ์ฝ๋๋ฅผ ๋ชจ๋ ์์ฑํด๋ณด์๋๋ฐ, ํ๋ก ํธ์๋์์๋ ๋ฆฌ์กํธ ํ ์คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ UIํ ์คํธ, cypress๋ฅผ ์ด์ฉํ E2E ํ ์คํธ๋ฅผ ์์ฑํ์๊ณ , ๋ฐฑ์๋์์๋ mocha์ chai๋ฅผ ์ด์ฉํ API ํ ์คํธ๋ฅผ ์์ฑํ์๋ค.
๋ฌผ๋ก , ๊ณต์๋ฌธ์๋ฅผ ๋๋ฌ๋๋ฌ ์ฝ์ด๊ฐ๋ฉฐ ๊ฐ๋จํ๊ณ ์ฌ์ด ํ ์คํธ๋ฅผ ์์ฃผ๋ก ์์ฑํด๋ณธ ๊ฒ์ด์์ง๋ง, ํ๋ก ํธ์๋์์์ ํ ์คํ ๊ณผ ๋ฐฑ์๋์์์ ํ ์คํ ์ ์ฐจ์ด๋ฅผ ๋๋ ์ ์์๋ค.
ํ๋ก ํธ์๋์์์ ํ ์คํ ์์ ๊ฐ์ฅ ์ด๋ ค์ ๋ ์ ์ โ๋ฌด์์ ํ ์คํธํด์ผํ๋๊ฐโ์๋ค. ํ๋ก ํธ์๋์์ ์์ฑํ ์ ์๋ ๊ฐ์ฅ ๊ฐ๋จํ ํ ์คํธ๋ UI์ ํน์ ํ ์คํธ๊ฐ ๋ณด์ฌ์ง๋์ง๋ฅผ ๊ฒ์ฆํ๋ UI ํ ์คํธ์๋๋ฐ ์์ฑํ๋ฉด์๋ ์ด ํ ์คํธ๊ฐ ์๋ฏธ๊ฐ ์์๊น? ํ๋ ์๋ฌธ์ด ๋ค์์๋ค. ์ฝ๋ ์๋ํฐ ์์ ๋ก์ปฌ์์ ์ฝ๋๋ฅผ ์คํํ ๋ธ๋ผ์ฐ์ ์ฐฝ์ ๋์๋์ผ๋ฉด ์ฝ๋๋ฅผ ์์ฑํ๋ ๋์ ์ค์๊ฐ์ผ๋ก ์๋ง์ UI๊ฐ ํ๋ฉด์ ๋ณด์ด๋์ง ํ์ธํ ์ ์๋๋ฐ ์ด๊ฑธ ์๊ฐ์ ๋ค์ฌ ํ ์คํธ๋ก ์์ฑํด์ผํ๋๊ฑธ๊น?ํ๋ ์๊ฐ์ ํ๋ ๊ฒ ๊ฐ๋ค. ๋ฐ๋ฉด ๋ฐฑ์๋์ ๊ฒฝ์ฐ ๊ธฐ๋ฅ๋จ์๋ก ๊ฐ๊ฐ์ ํจ์๊ฐ ๋ง๋ค์ด์ง๊ณ ํด๋น ํจ์๋ค์ input๊ณผ output์ด ๋ช ํํด์ ๋ฌด์์ ํ ์คํธํด์ผํ๋์ง๋ ์ฝ๊ฒ ํ์ ํ ์ ์์๋ ๊ฒ ๊ฐ๊ณ , ์ด ํ ์คํธ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ถํ์ ๋ก์ง์ ๋ฆฌํฉํ ๋งํ๋ ๊ฒฝ์ฐ์๋ ์ ์ฉํ๊ฒ ์ฐ์ผ ์ ์์ ๊ฒ ๊ฐ์ ์๊ฐ์ด ๋ค์๋ค.
TDD์ ๋ํ์ฌ
ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ์ ๊ถ๊ทน์ ์ธ ๋ชฉํ๋ ์๋ํ๋ ๊น๋ํ ์ฝ๋(clean code that works)์ด๋ค.
์ด๋ป๊ฒ ํ๋ฉด ์๋ํ๋ ๊น๋ํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์๊น? ๊ทธ๊ฒ์ ์๋ํ๋ ํ ์คํธ๋ก ๊ฐ๋ฐ์ ์ด๋์ด๋๊ฐ๋ ๊ฒ์ด๋ค.
ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ์ ๊ท์น์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ค์ง ์๋ํ๋ ํ ์คํธ๊ฐ ์คํจํ ๊ฒฝ์ฐ์๋ง ์๋ก์ด ์ฝ๋๋ฅผ ์์ฑํ๋ค.
- ์ค๋ณต์ ์ ๊ฑฐํ๋ค.
์ ๋ ๊ฐ์ง ๊ท์น์ ์ํด ํ๋ก๊ทธ๋๋ฐ ์์๋ ๋ค์๊ณผ ๊ฐ์ด ๊ฒฐ์ ๋๋ค.
- ๋นจ๊ฐ: ์คํจํ๋ ์์ ํ ์คํธ๋ฅผ ์์ฑํ๋ค. ์ฒ์์๋ ์ปดํ์ผ์กฐ์ฐจ ๋์ง ์์ ์ ์๋ค.
- ์ด๋ก: ๊ฐ๋ฅํ ๋นจ๋ฆฌ ํ ์คํธ๊ฐ ํต๊ณผํ๊ฒ๋ ๋ง๋ ๋ค. ์ด๋ฅผ ์ํด ์ด๋ค ์ฃ์ ์ ์ ์ง๋ฌ๋ ์ข๋ค.
- ๋ฆฌํฉํ ๋ง: ์ผ๋จ ํ ์คํธ๋ฅผ ํต๊ณผํ๊ฒ๋ง ํ๋ ์์ค์ ์๊ฒจ๋ ๋ชจ๋ ์ค๋ณต์ ์ ๊ฑฐํ๋ค.
TDD์ ๋ํ ์ด์ผ๊ธฐ๋ฅผ ํ ๋ ๋ ์ค์ํ ํ ๊ฐ์ง๋ ์์ ๊ฐ์ ๊ดํ ์ด์ผ๊ธฐ์ด๋ค. TDD ๋ฐฉ์์ผ๋ก ํ๋ก๊ทธ๋๋ฐ์ ํ๋ฉด ํ ๋จ๊ณ ํ ๋จ๊ณ ๊ธฐ๋ฅ์ ๊ตฌํํด๋๊ฐ๋ฉด์ ์ด์ ์ ๊ตฌํํ ๊ธฐ๋ฅ์ ๋ํด์๋ ๋ค์ ๋ค๋์๋ณผ ์ผ์ด ์๋ค. ์๋๋ฉด ํ ์คํธ๊ฐ ๋์ ์ฝ๋๋ฅผ ๋ณด์ฅํด์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
์ผ๋จ ํ ์คํธ ํ๋๋ฅผ ์๋ํ๊ฒ ํ๋ฉด, ๊ทธ๊ฒ ์ง๊ธ ํ์ฌ ๊ทธ๋ฆฌ๊ณ ์์ผ๋ก ์์ํ ์๋ํ ๊ฑฐ๋ผ๋ ๊ฑธ ์ ์ ์๋ค.
์ด๋ฌํ ์์ ๊ฐ์
- ๋ด๊ฐ ๋ง์ค์ด์ง ์๊ณ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ฒ ํด์ฃผ๋ฉฐ,
- ๋ณด๋ค ๋ ์ ๊ทน์ ์ผ๋ก ์ปค๋ฎค๋์ผ์ด์ ํ๊ณ ํผ๋๋ฐฑ์ ๋ฐ์ ์ ์๊ฒ ํด์ฃผ๋ฉฐ,
- ๋๋ฅผ ์ฌ์ ๋กญ๊ฒ ๋ง๋ค์ด์ค๋ค.
๋ด๊ฐ ์์ฑํ๋ ์ฝ๋์ ์์ ๊ฐ์ ๊ฐ์ง ์ฌ์ ๋์น๋ ๊ฐ๋ฐ์๊ฐ ๋๊ธฐ ์ํด์ฌ.. ํ ์คํธ๋ฅผ ์์ฑํด๋ณด์.
์์ง์ ์ด ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ ์
๋ฌด์ ์ด๋ป๊ฒ ์ ์ฉํ ์ ์์์ง ์ ๊ฐ์ด ์กํ์ง ์๋๋ค. ๊ทธ๋์ ์ฑํฐ1. ํํ์์
๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ฐ๋ผ์ ์ค์ต์ ํด๋ณด๋ฉด์ TDD๋ก ์๊ฐํ๋ ๋ฒ์ ์ตํ๋ณด๋ คํ๋ค. ๋ค์ ํฌ์คํ
์์ TDD๋ฅผ ์ง์ ์ค์ตํด๋ณธ ๊ฒฐ๊ณผ๋ฌผ์ ๊ณต์ ํ๊ณ ๊ทธ ๊ณผ์ ์์ ๋ฐฐ์ด ์ , ๋๋ ์ ๋ค์ ๊ณต์ ํด๋ณด๊ฒ ๋ค. ๐ค