Skip to content

TDD(Test Driven Development)

Zin0_0 edited this page Dec 19, 2020 · 2 revisions

TDD๋ž€ ๋ฌด์—‡์ธ๊ฐ€??

  • TDD๋Š” Test-Driven-Development์˜ ์•ฝ์ž๋กœ ๋ง ๊ทธ๋Œ€๋กœ ํ…Œ์ŠคํŠธ๊ฐ€ ์ด๋„๋Š” ๊ฐœ๋ฐœ์ด๋ผ๋Š” ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก ์ด๋‹ค.
  • ์•„์ฃผ ์งง์€ ๊ฐœ๋ฐœ ์‚ฌ์ดํด์„ ๋ฐ˜๋ณตํ•˜๋ฉฐ, ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ฑ„ํƒํ•˜๊ณ ์žˆ๋Š” ๋ฐฉ๋ฒ•๋ก  ์ค‘์— ํ•˜๋‚˜์ด๋‹ค.
    • ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ฒ€์ฆํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ ~> ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์†Œํ•œ์˜ ์ฝ”๋“œ ๊ตฌํ˜„ ~> ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ํ‘œ์ค€(์š”๊ตฌ์‚ฌํ•ญ ๋ช…์„ธ)์— ๋งž๋„๋ก ๋ฆฌํŒฉํ† ๋ง
    • ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ, ์„ค๊ณ„ ์ƒ์˜ ์˜ค์ ์„ ๋น ๋ฅด๊ฒŒ ํŒŒ์•…ํ•˜์—ฌ ์ˆ˜์ •ํ•˜๋ฉฐ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

ํ• ๊ณ ๋ž˜DO์˜ TDD

API ์„œ๋ฒ„์—์„œ ์œ ๋‹› ํ…Œ์ŠคํŠธ๋ฅผ ๊ฒ€์ฆํ•˜๋ฉฐ TDD ๋ฐฉ๋ฒ•๋ก ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ–ˆ๋‹ค.

  • service์™€ api ๋ชจ๋‘ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ TDD๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด ์ •์„์ด์ง€๋งŒ, ํ• ๊ณ ๋ž˜DO๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ๋Š” API ํ…Œ์ŠคํŠธ๋งŒ ์ง„ํ–‰ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.
    • ์ด์œ  1) MVCS์—์„œ ์„œ๋น„์Šค ๋‹จ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ๋Œ€ํ•œ ๊ฐœ๋…์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, MVC๋กœ ์„ค๊ณ„ํ•œ ํ›„์— ํ•„์š”ํ•˜๋ฉด MVCS๋กœ ๋ฆฌํŒฉํ† ๋ง ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ฒฐ์ •
    • ์ด์œ  2) ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์šฐ์„  ์ˆœ์œ„์— ๋‘๊ณ , validation๊ณผ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋Š” ์–ด๋Š ์ •๋„ API ์‘๋‹ต์ด ๊ฐ–์ถฐ์ง„ ์ดํ›„ ์ง„ํ–‰ํ•˜์ž๋Š” ์˜๊ฒฌ

์‹ค์ œ๋กœ TDD๋ฅผ ๋„์ž…ํ•œ ์‚ฌ๋ก€

  • API ๊ตฌํ˜„

    • ๋‹ค์Œ์€ ํ• ๊ณ ๋ž˜DO ์„œ๋น„์Šค์—์„œ ํŠน์ • ์œ ์ €์˜ ๋ชจ๋“  ํ• ์ผ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” API๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์ง„ํ–‰ํ–ˆ๋˜ ์ฝ”๋“œ์˜ ์ผ๋ถ€๋ถ„์ด๋‹ค.
    • image
    • ๋จผ์ €, API ๋ช…์„ธ์— ๋”ฐ๋ผ์„œ ๋ฐ˜ํ™˜๋ผ์•ผํ•˜๋Š” response ๊ฐ’์„ ๋ฏธ๋ฆฌ ์ •ํ•ด๋‘๊ณ , ์ด์— ๋งž์ถ”์–ด ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ–ˆ๋‹ค.
    • ์ดํ›„, API URL์— ๋”ฐ๋ผ router์— ๋“ฑ๋กํ•˜๊ณ , controller์—์„œ ์š”์ฒญ์— ๋Œ€ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์—ฐ๊ฒฐํ•˜๊ณ  ์‘๋‹ต ๊ฐ’์„ ๋ฐ˜ํ™˜ ~> service ๋‹จ์˜ ๋น„์ฆˆ๋‹ˆ์Šค๋กœ์ง ์ž‘์„ฑ ์ˆœ์„œ๋กœ ์ง„ํ–‰ํ–ˆ๋‹ค.
      • ์ฒ˜์Œ MVC ํŒจํ„ด์œผ๋กœ ์ง„ํ–‰ํ•  ๋•Œ๋Š”, controller์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ–ˆ์—ˆ๋Š”๋ฐ, ์ด๋Š” ์ž˜๋ชป๋œ ๋ฐฉ๋ฒ•์ด๋‹ค.
      • ๋ฉ˜ํ† ๋‹˜๊ป˜์„œ controller์˜ ์ฑ…์ž„์ด ์•„๋‹Œ๋ฐ ์ฑ…์ž„์„ ์ฃผ์—ˆ๋‹ค๊ณ  ๋ง์”€ํ•˜์…จ๋‹ค.
      • controller์˜ ์ฑ…์ž„์€ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ธํ”„๋ผ์™€ ๊ด€๋ จ๋œ ์—ญํ• ๋งŒ์„ ํ•œ๋‹ค (validation ๋“ฑ)
      • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด๋ž€, ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ €์žฅํ•˜๊ณ  ์‚ฌ์šฉํ• ๊ฑด์ง€์— ๊ด€๋ จ๋œ ๋‚ด์šฉ๋“ค์„ ๋‹ด๋‹นํ•œ๋‹ค.
  • validation & ์—๋Ÿฌ ์ฒ˜๋ฆฌ

    • ๋‹ค์Œ์€ ํ• ๊ณ ๋ž˜DO ์„œ๋น„์Šค์—์„œ ์ž์‹ ์˜ ์„น์…˜์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” API๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์ง„ํ–‰ํ–ˆ๋˜ ์ฝ”๋“œ์˜ ์ผ๋ถ€๋ถ„์ด๋‹ค.
    • image
    • API ์‘๋‹ต์— ๋Œ€ํ•œ ์˜ˆ์™ธ ์ผ€์ด์Šค๋“ค์„ ์ž‘์„ฑํ•œ ๋‹ค์Œ, router -> controller -> dto -> service ์ˆœ์„œ๋กœ ์ง„ํ–‰ํ–ˆ๋‹ค.

์ง์ ‘ ๋Š๋‚€ ์žฅ๋‹จ์ 

์žฅ์ 

  • MVC to MVCS

    • controller์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ service ๋‹จ์œผ๋กœ ์˜ฎ๊ธฐ๋ฉด์„œ, ๋ฏฟ๋Š” ๊ตฌ์„์ด ์žˆ์–ด์„œ ์ž์‹ ์žˆ๊ฒŒ ๊ตฌ์กฐ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
    • ๋˜ํ•œ, ์—ฐ๊ฒฐ์ด ์ž˜ ๋˜์—ˆ๋Š”์ง€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉฐ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด ๋ถ€๋ถ„๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋ผ์„œ ํŽธํ–ˆ๋‹ค.
  • validation & ์—๋Ÿฌ ์ฒ˜๋ฆฌ

    • class-validator๋ฅผ ์ฒ˜์Œ ์จ์„œ class-validator ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ์— ๋งŽ์ด ๋ฏธ์ˆ™ํ–ˆ๋‹ค.
      ๊ณต์‹ ๋ฌธ์„œ์— ์นœ์ ˆํ•œ ์‚ฌ์šฉ๋ฒ•์ด ๋งŽ์ง€ ์•Š๊ณ  TypeScript๊ฐ€ ์•„๋‹Œ JavaScript๋กœ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์‹œ๋„ ์—†์–ด์„œ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์ง์ ‘ ํ™•์ธํ–ˆ๋‹ค.
      ๋ฏธ๋ฆฌ ์ž‘์„ฑํ•ด๋‘” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ํ†ต๊ณผ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋ฉฐ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ validation์„ ํ•˜๊ณ ์žˆ๋Š”์ง€ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ–ˆ๋‹ค.
      ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๋˜ํ•œ, ์ œ๋Œ€๋กœ ์—๋Ÿฌ๋ฅผ ์žก๊ณ ์žˆ๋Š”์ง€ ์ •์˜ํ•ด๋‘”๋Œ€๋กœ custom ์—๋Ÿฌ๊ฐ€ ๋ฐ˜ํ™˜๋˜๋Š”์ง€ ์œ ์šฉํ•˜๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
  • ๋น ๋ฅธ ๊ฐœ๋ฐœ

    • ํ•˜๋‹จ์— ์–ธ๊ธ‰ํ•  ๋‹จ์ ๊ณผ ๋Œ€๋น„๋˜๊ฒ ์ง€๋งŒ, ์–ด๋–ป๊ฒŒ TDD๋ฅผ ํ•ด์•ผํ•˜๋Š”๊ฐ€์— ๋Œ€ํ•œ ๊ฐ์ด ์˜จ ๋’ค ๋ถ€ํ„ฐ๋Š” ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ์ •๋ง ๋นจ๋ผ์ง„๋‹ค.
    • ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋‚˜ validation, ์‚ฌ์†Œํ•œ ์˜คํƒ€, ๋กœ์ง ๋“ฑ ๊ตฌ์กฐ๊ฐ€ ์žกํžˆ๋ฉด์„œ ๋ฆฌํŒฉํ† ๋งํ•˜๊ฑฐ๋‚˜ ์ฝ”๋“œ๋ฅผ ์ „๋ฉด์ ์œผ๋กœ ์ˆ˜์ •ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ํ˜„์ €ํžˆ ์ค„์–ด๋“ ๋‹ค.
    • ๋ฌด์—‡๋ณด๋‹ค๋„ test code๊ฐ€ ํ†ต๊ณผ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๋ฉด์„œ ๊ฐœ๋ฐœํ•  ๋ง›์ด ๋‚œ๋‹ค๋Š” ๋Š๋‚Œ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
  • ๊ธฐํƒ€

    • ์œ„์˜ ์‚ฌํ•ญ๋“ค ์™ธ์—๋„ ์‚ฌ์†Œํ•œ ์˜คํƒ€๋‚˜, ๋กœ์ง์ด ์ž˜๋ชป๋œ ๊ฒฝ์šฐ์— ์–ด๋–ค ๋ถ€๋ถ„์„ ํ™•์ธํ•ด์•ผํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค์— ์ •์˜ํ•ด ๋‘” ์ด๋ฆ„์„ ํ†ตํ•ด ์—ญ์ถ”์ ํ•˜๋ฉฐ ํŽธํ•˜๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋‹จ์ 

  • Test code๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ง€ ์•Š์•˜๋‹ค๊ฑฐ๋‚˜, API ํ…Œ์ŠคํŠธ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋Š”์ง€, db๋Š” ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•ด์•ผํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๋Š” ์ƒํƒœ์—์„œ ์ƒˆ๋กญ๊ฒŒ ๋ฐฐ์šด๋‹ค๋Š” ๋Ÿฌ๋‹์ปค๋ธŒ๋ฅผ ๋ฌด์‹œํ•  ์ˆ˜ ์—†๋‹ค.

    • ์ €๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ์ฒ˜์Œ TDD๋ฅผ ์ง„ํ–‰ํ–ˆ๊ณ , API test๋ฅผ ์ฒ˜์Œ ํ•ด๋ณด๋ฉด์„œ ์–ด๋–ป๊ฒŒ TDD๋ฅผ ํ•ด์•ผํ•˜๋Š”์ง€ ๊ฐˆํ”ผ๋ฅผ ์ž˜ ๋ชป์žก์•˜์—ˆ๋˜ ๊ธฐ์–ต์ด ๋‚œ๋‹ค.
    • ํ•˜๋‚˜ํ•˜๋‚˜ ์ƒˆ๋กญ๊ฒŒ ๋ฐฐ์›Œ์•ผ ํ•œ๋‹ค๋Š” ๋ถ€๋‹ด๊ฐ์ด ์ ์ง€๋Š” ์•Š์€ ๊ฒƒ ๊ฐ™์•„์„œ ๋‹จ์ ์œผ๋กœ ๋Š๊ผˆ์—ˆ๋‹ค.
  • ๊ธฐํš์˜ ํฐ ๋ฐฉํ–ฅ์ด ๋ฐ”๋€Œ๋Š” ๊ฒฝ์šฐ test code ๋ฆฌํŒฉํ† ๋ง์ด ํ•„์š”ํ•˜๋‹ค.

    • ํ• ๊ณ ๋ž˜DO์˜ ์„œ๋น„์Šค๋Š” 3์ฃผ, 4์ฃผ ์ฐจ์— ํฐ ๋ฆฌํŒฉํ† ๋ง์„ ์ง„ํ–‰ํ–ˆ์—ˆ๋‹ค. ์ด ๋•Œ, ์ฒ˜์Œ์— ๊ธฐํšํ–ˆ๊ณ  ์ •์˜ํ–ˆ๋˜ ์‚ฌํ•ญ๋“ค์ด ํฌ๊ฒŒ ๋ณ€ํ•˜๋ฉด์„œ ํž˜๋“ค์—ˆ๋˜ ๊ธฐ์–ต์ด ๋‚œ๋‹ค.
      ๋ณตํ•ฉ์ ์œผ๋กœ ์ˆ˜์ •ํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์—์„œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ์ „๋ฉด์ ์ธ ์ˆ˜์ •์— ์†Œ์š”ํ•œ ์‹œ๊ฐ„์ด ์ ์ง€ ์•Š์•˜๊ณ ,
  • ๋ชจ๋“  ํŒ€์—์„œ TDD๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์–ด๋Š ์ผ€์ด์Šค ๋ฒ”์œ„๊นŒ์ง€ test๋ฅผ ์ง„ํ–‰ํ•  ๊ฒƒ์ธ์ง€ ๋…ผ์˜๊ฐ€ ๋˜์ง€ ์•Š์€ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ํž˜๋“ค๋‹ค.

    • ํ• ๊ณ ๋ž˜DO์—์„œ๋Š” ๋ฐฑ์—”๋“œ ๊ตฌํ˜„ ์‹œ, TDD๋ฅผ ์ง„ํ–‰ํ–ˆ๋Š”๋ฐ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค๋ณด๋‹ˆ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ TDD๋ฅผ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ํ•ด๋‹น ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋ถˆ์•ˆ๊ฐ์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋Š๊ผˆ๋‹ค.
      • ์‹ค์ œ ํ˜„์—…์—์„œ ๋งŽ์€ ํŒ€๋“ค์ด TDD๋ฅผ ์‰ฝ๊ฒŒ ๋„์ž…ํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๊ฐ€ ์œ„์˜ ๋‘ ์ด์œ ๋ผ๊ณ  ํ•œ๋‹ค.
    • ํ• ๊ณ ๋ž˜DO์—์„œ๋Š” ์–ด๋Š ์ผ€์ด์Šค ๋ฒ”์œ„๊นŒ์ง€ testํ• ์ง€ ์ •ํ•˜์ง€ ์•Š์•˜๋Š”๋ฐ, ๋ฐฑ์—”๋“œ ๋ฆฌํŒฉํ† ๋ง์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ํž˜๋“ค์—ˆ๋‹ค.
      ์ด ๊ฒฝํ—˜์„ ํ† ๋Œ€๋กœ, ์•ž์œผ๋กœ TDD๋ฅผ ์ฑ„ํƒํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ๊ฒ€์ฆํ•  ์ผ€์ด์Šค ๋ฒ”์œ„๋ฅผ ๋ฏธ๋ฆฌ ๋งž์ถ”๊ณ  ์ง„ํ–‰ํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐฐ์› ๋‹ค.

๊ธฐํƒ€

TDD๋ฅผ ํ–ˆ๋‹ค๊ณ  ๋งํ•˜๋ฉด์„œ ์กฐ๊ธˆ ๋ถ€๋„๋Ÿฝ์ง€๋งŒ, ์‚ฌ์‹ค ํ”„๋กœ์ ํŠธ๊ฐ€ ๋งˆ๋ฌด๋ฆฌ๋˜๋Š” ๋‹จ๊ณ„์—์„œ test coverage๋ฅผ ์ ‘ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.
test coverage๋Š” ํ˜„์žฌ ์ž‘์„ฑ๋œ test code๊ฐ€ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” ์„œ๋น„์Šค์—์„œ ์–ด๋Š ์ˆ˜์ค€์œผ๋กœ ๊ฒ€์ฆํ•ด์ฃผ๊ณ  ์žˆ๋Š”์ง€ ์ฒ™๋„๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.
ํ• ๊ณ ๋ž˜DO์—์„œ๋Š” Jest๋กœ ๋ชจ๋“ˆ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ๋Š”๋ฐ, coverage option์„ ์ œ๊ณตํ•œ๋‹ค.
๋ณดํ†ต์€ istanbul์„ ์ด์šฉํ•œ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ, Jest์— ์ด istanbul์ด ๋‚ด์žฅ๋˜์–ด ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

์‚ฌ์šฉ๋ฒ•

  • test ์‹คํ–‰ ์˜ต์…˜์— --coverage๋ฅผ ๋ถ™์—ฌ์ฃผ๋ฉด coverage ์ˆ˜์น˜๋ฅผ console์— ๋ณด์—ฌ์ฃผ๋ฉฐ, npm ์‹คํ–‰๊ณผ ๊ฐ™์€ ๋ ˆ๋ฒจ์˜ ๋””๋ ‰ํ† ๋ฆฌ์— coverage๋ผ๋Š” ๋””ํ…ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ด์„œ ๊ฒฐ๊ณผ๋ฅผ ์ค€๋‹ค.
  • image
  • ์‹คํ–‰ ํ›„์— console์— ์œ„์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ์–ด๋–ค ํŒŒ์ผ์˜ ์–ด๋–ค ๋ถ€๋ถ„์„ ํ…Œ์ŠคํŠธ ํ•˜๊ณ  ์žˆ๊ณ  ๋ˆ„๋ฝ๋˜์—ˆ๋Š”์ง€ %๋กœ ํ‘œ์‹œํ•ด์ค€๋‹ค.

ํ• ๊ณ ๋ž˜DO์˜ ๊ฒฐ๊ณผ

image image

์กฐ๊ธˆ ๋ถ€๋„๋Ÿฝ์ง€๋งŒ ์ฒ˜์Œ ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ์ธก์ •ํ•œ ๊ฒƒ ์น˜๊ณ ๋Š” ๊ฝค๋‚˜ ๋†’์€ ์ˆ˜์น˜๊ฐ€ ๋‚˜์˜จ ๊ฒƒ ๊ฐ™๋‹ค.

๋ถˆ๊ณผ 2๋‹ฌ ์ „ ์ฏค์˜ ์ €์ฒ˜๋Ÿผ TDD์— ๋Œ€ํ•ด ๋‘๋ ต๊ฑฐ๋‚˜ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋Š”๊ฑฐ์ง€??? ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋ถ„๋“ค์—๊ฒŒ ๋„์›€์ด ๋˜๋ฉด ์ข‹๊ฒ ๋‹ค๋Š” ๋งˆ์Œ์— ์ด ๊ธ€์„ ๋‚จ๊น๋‹ˆ๋‹ค.

Reference

Clone this wiki locally