๐Ÿ“š 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)์ด๋‹ค.

์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ž‘๋™ํ•˜๋Š” ๊น”๋”ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์„๊นŒ? ๊ทธ๊ฒƒ์€ ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ๋กœ ๊ฐœ๋ฐœ์„ ์ด๋Œ์–ด๋‚˜๊ฐ€๋Š” ๊ฒƒ์ด๋‹ค.

ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ์˜ ๊ทœ์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์˜ค์ง ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•  ๊ฒฝ์šฐ์—๋งŒ ์ƒˆ๋กœ์šด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  • ์ค‘๋ณต์„ ์ œ๊ฑฐํ•œ๋‹ค.

์œ„ ๋‘ ๊ฐ€์ง€ ๊ทœ์น™์— ์˜ํ•ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ˆœ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฒฐ์ •๋œ๋‹ค.

  1. ๋นจ๊ฐ•: ์‹คํŒจํ•˜๋Š” ์ž‘์€ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. ์ฒ˜์Œ์—๋Š” ์ปดํŒŒ์ผ์กฐ์ฐจ ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.
  2. ์ดˆ๋ก: ๊ฐ€๋Šฅํ•œ ๋นจ๋ฆฌ ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ•˜๊ฒŒ๋” ๋งŒ๋“ ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์–ด๋–ค ์ฃ„์•…์„ ์ €์งˆ๋Ÿฌ๋„ ์ข‹๋‹ค.
  3. ๋ฆฌํŒฉํ† ๋ง: ์ผ๋‹จ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๊ฒŒ๋งŒ ํ•˜๋Š” ์™€์ค‘์— ์ƒ๊ฒจ๋‚œ ๋ชจ๋“  ์ค‘๋ณต์„ ์ œ๊ฑฐํ•œ๋‹ค.


TDD์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ํ•  ๋•Œ ๋˜ ์ค‘์š”ํ•œ ํ•œ ๊ฐ€์ง€๋Š” ์ž์‹ ๊ฐ์— ๊ด€ํ•œ ์ด์•ผ๊ธฐ์ด๋‹ค. TDD ๋ฐฉ์‹์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋ฉด ํ•œ ๋‹จ๊ณ„ ํ•œ ๋‹จ๊ณ„ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด๋‚˜๊ฐ€๋ฉด์„œ ์ด์ „์— ๊ตฌํ˜„ํ•œ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์‹œ ๋’ค๋Œ์•„๋ณผ ์ผ์ด ์—†๋‹ค. ์™œ๋ƒ๋ฉด ํ…Œ์ŠคํŠธ๊ฐ€ ๋‚˜์˜ ์ฝ”๋“œ๋ฅผ ๋ณด์žฅํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ผ๋‹จ ํ…Œ์ŠคํŠธ ํ•˜๋‚˜๋ฅผ ์ž‘๋™ํ•˜๊ฒŒ ํ•˜๋ฉด, ๊ทธ๊ฒŒ ์ง€๊ธˆ ํ˜„์žฌ ๊ทธ๋ฆฌ๊ณ  ์•ž์œผ๋กœ ์˜์›ํžˆ ์ž‘๋™ํ•  ๊ฑฐ๋ผ๋Š” ๊ฑธ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ž์‹ ๊ฐ์€

  • ๋‚ด๊ฐ€ ๋ง์„ค์ด์ง€ ์•Š๊ณ  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋ฉฐ,
  • ๋ณด๋‹ค ๋” ์ ๊ทน์ ์œผ๋กœ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ํ•˜๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋ฉฐ,
  • ๋‚˜๋ฅผ ์—ฌ์œ ๋กญ๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค.

๋‚ด๊ฐ€ ์ž‘์„ฑํ•˜๋Š” ์ฝ”๋“œ์— ์ž์‹ ๊ฐ์„ ๊ฐ€์ง„ ์—ฌ์œ  ๋„˜์น˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด์—ฌ.. ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž.


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