j2h30728 ๋‹˜์˜ ์ƒ์„ธํŽ˜์ด์ง€ ๏ผž [6ํŒ€ ์ด์ง€ํ˜„] Chapter ๐Ÿท 3-1. ํ”„๋ก ํŠธ์—”๋“œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๐Ÿงฆ

7์ฃผ์ฐจ ๊ณผ์ œ ์ฒดํฌํฌ์ธํŠธ

๊ธฐ๋ณธ ๊ณผ์ œ

HARD

7์ฃผ์ฐจ ๊ณผ์ œ ์ฒดํฌํฌ์ธํŠธ

๊ธฐ๋ณธ๊ณผ์ œ

  • ์ด 11๊ฐœ์˜ ํŒŒ์ผ, 115๊ฐœ์˜ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ๋ฌด์‚ฌํžˆ ์ž‘์„ฑํ•˜๊ณ  ํ†ต๊ณผ์‹œํ‚จ๋‹ค.

์งˆ๋ฌธ

Q. handlersUtils์— ๋‚จ๊ธด ์งˆ๋ฌธ์— ๋‹ต๋ณ€ํ•ด์ฃผ์„ธ์š”. ์ด๋ฒคํŠธ๋Š” ์ƒ์„ฑ, ์ˆ˜์ • ๋˜๋ฉด fetch๋ฅผ ๋‹ค์‹œ ํ•ด ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•œ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™์€๋ฐ์š”. ์–ด๋–ป๊ฒŒ ์ž‘์„ฑํ•ด์•ผ ํ…Œ์ŠคํŠธ๊ฐ€ ๋ณ‘๋ ฌ๋กœ ๋Œ์•„๋„ ์•ˆ์ •์ ์ด๊ฒŒ ๋™์ž‘ํ• ๊นŒ์š”? ์•„๋ž˜ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋˜๋‹ˆ, ๋…๋ฆฝ์ ์ด๊ฒŒ ํ…Œ์ŠคํŠธ๋ฅผ ๊ตฌ๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณด์„ธ์š”. ๊ทธ๋ฆฌ๊ณ  ์ด ๋กœ์ง์„ PR์— ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

msw ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ server ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ http ๋ชจํ‚นํ•จ์ˆ˜๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์˜ ๊ธฐ๋ณธ msw ์„œ๋ฒ„๋Š” ๊ธฐ๋ณธ ๊ฐ’์˜ handler (get, put, post, delete, patch) ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ƒ์—์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•˜์—ฌ ๊ธฐ๋ณธ ํ™˜๊ฒฝ๊ณผ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์„ ๋…๋ฆฝ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ธฐ๋ณธ ํ™˜๊ฒฝ์—์„œ์˜ ๋‹ค๋ฅธ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ์™€ ์‹œ๊ฐ„ ์„ค์ •๋“ค์„ ์ฃผ์–ด์„œ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ ํ…Œ์ŠคํŠธ๊ฐ€ ๋…๋ฆฝ์ ์ธ ์ด๋ฒคํŠธ ๋ฐ์ดํ„ฐ์™€ ํ•ธ๋“ค๋Ÿฌ ํ™˜๊ฒฝ์„ ๊ฐ–๊ฒŒ ํ•˜์—ฌ, ์ด๋ฒคํŠธ ์ƒ์„ฑ/์ˆ˜์ • ๋“ฑ ์ƒํƒœ ๋ณ€ํ™”๊ฐ€ ์™ธ๋ถ€์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋„๋ก ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. TestEventManager๋กœ ๊ฐ ํ…Œ์ŠคํŠธ๋ณ„ ์ด๋ฒคํŠธ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, server.use๋ฅผ ํ†ตํ•ด ๋ณ„๋„ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ๋ณ‘๋ ฌ ํ…Œ์ŠคํŠธ ์‹คํ–‰ ์‹œ์—๋„ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ ์—†์ด ์•ˆ์ •์ ์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, ํ…Œ์ŠคํŠธ ๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฒฉ๋ฆฌ๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋ฆฌํŒฉํ† ๋ง ์ „

์‚ฌ์‹ค, ์ตœ์ดˆ ๊ฐœ๋ฐœ์—๋Š” server.use๋กœ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์€ ํ•˜๋˜ ํŠน์ • http ๋ฉ”์„œ๋“œ๋งŒ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ get, post, put, delete ์ „๋ถ€๋ฅผ ํ•œ ๋ฒˆ์— setupMockHandler๋กœ ๊ตฌ์ถ•ํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค. put์ด๋‚˜ delete๋ฅผ ํ•˜๊ธฐ์œ„ํ•ด์„œ๋Š” ํ•„์ˆ˜์ ์œผ๋กœ get์„ ํ•ด์•ผํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ๊ฐ€? ๋ผ๋Š” ๊ด€์ ์œผ๋กœ ์„ค๊ณ„ํ•œ ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

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

์ด๋ฅผ ๊นจ๋‹ซ๊ณ  ํ•ด๋‹น ๋ถ€๋ถ„์„ ๋ฆฌํŒฉํ† ๋ง ํ•˜์—ฌ ์˜๋„ํ•˜๊ณ ์ž ํ•˜๋Š”๋Œ€๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ต์ฒดํ–ˆ์Šต๋‹ˆ๋‹ค.

Q. ํ…Œ์ŠคํŠธ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๊ตฌ๋™์‹œํ‚ค๊ธฐ ์œ„ํ•ด ์ž‘์„ฑํ–ˆ๋˜ ์„ค์ •๋“ค์„ ์†Œ๊ฐœํ•ด์ฃผ์„ธ์š”.

์‚ฌ์‹ค, ์„ค์ •์„ ๋”ฐ๋กœ ํ•˜์˜€๋Š”์ง€๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ณผ์ œ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋…๋ฆฝ์ ์ธ ํ…Œ์ŠคํŠธ ๊ตฌ๋™์ด ์•„๋ž˜์˜ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

  • setupTest ํŒŒ์ผ์—์„œ ๊ธฐ๋ณธ์ ์ธ handler ๋ฐฐ์—ด์„ ๋‘์–ด ๊ธฐ๋ณธ์ ์ธ ํ…Œ์ŠคํŠธํ™˜๊ฒฝ์„ ๊ตฌ์ถ•
  • ์ปค์Šคํ…€ํ•œ ์„ค์ •์ด๋‚˜ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ์—๋Š” handlerUtils์—์„œ ์ƒ์„ฑํ•œ ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ ธ์™€ ์ƒˆ๋กœ์šด ๊ฐœ๋ฐœํ™˜๊ฒฝ์„ ๊ตฌ์ถ•
  • ๊ฐœ๋ฐœํ™˜๊ฒฝ ๊ตฌ์ถ•์‹œ, ๋™์ผํ•œ ๋ฐ์ดํ„ฐ์ฐธ์กฐ๋ฅผ ์œ„ํ•ด์„œ eventManager๋ฅผ ๋‘์–ด ๋ฐ์ดํ„ฐ ๊ณต์œ 
  • ๋™์ผํ•œ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ๋‹จ์œ„๋กœ ๋ฌถ์–ด์„œ beforeEach, afterEach ์‚ฌ์šฉ

์‹ฌํ™” ๊ณผ์ œ

  • App ์ปดํฌ๋„ŒํŠธ ์ ์ ˆํ•œ ๋‹จ์œ„์˜ ์ปดํฌ๋„ŒํŠธ, ํ›…, ์œ ํ‹ธ ํ•จ์ˆ˜๋กœ ๋ถ„๋ฆฌํ–ˆ๋Š”๊ฐ€?
  • ํ•ด๋‹น ๋ชจ๋“ˆ๋“ค์— ๋Œ€ํ•œ ์ ์ ˆํ•œ ํ…Œ์ŠคํŠธ๋ฅผ 5๊ฐœ ์ด์ƒ ์ž‘์„ฑํ–ˆ๋Š”๊ฐ€?

๊ณผ์ œ ์…€ํ”„ํšŒ๊ณ 

์—„๋งˆ! ๋‚˜ ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์•Œ๊ฒŒ๋˜๊ณ  ์ž‘์„ฑ๋„ ํ•ด๋ดค์–ด!!

๊ธฐ์ˆ ์  ์„ฑ์žฅ

์ƒˆ๋กœ ํ•™์Šตํ•œ ๊ฐœ๋…

  • vi.useFakeTimers({ shouldAdvanceTime: true })
    • ํ†ตํ•ฉํ…Œ์ŠคํŠธ ์ค‘์—์„œ ๋‹ค๋ฅธ ํ…Œ์ŠคํŠธ์™€ ๋‹ฌ๋ฆฌ ์ •๋ง ์˜ค๋žœ ์‹œ๊ฐ„์„ ๋ถ™์žก๊ณ  ์žˆ์—ˆ๋˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์˜ ํ•ด๊ฒฐ๋ฒ•!
    • ๊ธฐ๋Šฅ :
      • notifications ์•Œ๋žŒ์˜ ๊ธฐ๋Šฅ์€ setInterval ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์ผ์ • ์‹œ๊ฐ„ ์ด๋‚ด๊ฐ€ ๋˜๋ฉด ์•Œ๋žŒ์„ ๋„์›Œ์ค˜์•ผ ํ•˜๋Š” ๊ฒƒ.
    • ๋ฌธ์ œ์  :
      • ์›ํ•˜๋Š” ์‹œ๊ฐ„์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์•Œ๋žŒ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๊ธฐ์œ„ํ•ด ํ†ตํ•ฉํ…Œ์ŠคํŠธ์—์„œ useFakeTimers๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ, ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ๊ณ„์† ํƒ€์ž„์•„์›ƒ ์—๋Ÿฌ๋งŒ ๋ฑ‰์–ด๋ƒˆ๋‹ค.
    • ํ•ด๊ฒฐ๋ฒ• :
      • useFakeTimer๋‚ด๋ถ€์— shoutdAdvancedTime ์˜ต์…˜์— true๊ฐ’์„ ์ฃผ์–ด, '์‹ค์ œ ์‹œ๊ฐ„'์ฒ˜๋Ÿผ ์‹œ๊ฐ„์ด ํ๋ฅด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ fake timer๊ฐ€ ์ž๋™์œผ๋กœ ์‹œ๊ฐ„ ๊ฒฝ๊ณผ๋ฅผ ๋ฐ˜์˜ํ•œ๋‹ค.
      • faketimer๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ณณ ๋ณด๋‹ค๋Š” ๋” ์ƒ๋‹จ์˜ ์„ธํŒ…์—์„œ beforeAll ๋‚ด๋ถ€์— vi.useFakeTimers({ shouldAdvanceTime: true })์„ ์„ค์ •ํ•˜์—ฌ ์‹ค์ œ ๋ชจ๋“  ํ…Œ์ŠคํŠธ์ฝ”๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ์‹ค์ œ ์‹œ๊ฐ„์ฒ˜๋Ÿผ ํ๋ฅด๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค!

๊ธฐ์กด ์ง€์‹์˜ ์žฌ๋ฐœ๊ฒฌ/์‹ฌํ™”

  • ์ž‘๋…„์— ๋‹ค๋ฅธ ์‚ฌ๋žŒ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋’ค์ ธ๊ฐ€๊ณ  ๋…ํ•™ํ•˜๋ฉด์„œ ์จ๋ดฃ๋˜ msw๋ฅผ ๋‹ค์‹œ ์จ๋ด์„œ ์ข‹์•˜๋‹ค!
  • ๊ทธ๋•Œ์—๋„ ์ดํ•ดํ•˜๊ธฐ ์กฐ๊ธˆ ์–ด๋ ค์› ์ง€๋งŒ, ์ด๋ฒˆ ๊ณผ์ œ๋ฅผ ํ•˜๋ฉด์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ์•Œ๊ฒŒ๋˜์–ด์„œ ์œ ์ตํ–ˆ๋‹ค. ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ํ†ตํ•ด ๋…๋ฆฝ์ ์ด๋ฉฐ ๋ณ‘๋ ฌ์ ์œผ๋กœ ํ…Œ์ŠคํŠธํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ์ข‹์•˜๋‹ค.
  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ์ƒ๊ฐ๋ณด๋‹ค ์–ด๋–ค ๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์–ด๋–ค ๋ฒ”์œ„๋ฅผ ํ•ด์•ผํ•˜๋Š”์ง€ ์„ ์ •ํ•˜๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ์–ด๋ ต๋‹ค.

๊ตฌํ˜„ ๊ณผ์ •์—์„œ์˜ ๊ธฐ์ˆ ์  ๋„์ „๊ณผ ํ•ด๊ฒฐ

  • ๋‚ด ์ธ์ƒ์— ๋‚ด ์†๊ฐ€๋ฝ์œผ๋กœ ์ง์ ‘ ์นœ ํ…Œ์ŠคํŠธ์ฝ”๋“œ!! ํฌ๊ธฐํ•˜์ง€ ์•Š๊ณ  ๊ณผ์ œํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ๊ธฐ์ˆ ์ ์ธ ๋„์ „์ด์ž ํ•ด๊ฒฐ์ด์—ˆ๋‹ค.

์ฝ”๋“œ ํ’ˆ์งˆ

ํŠนํžˆ ๋งŒ์กฑ์Šค๋Ÿฌ์šด ๊ตฌํ˜„

  • ๋งŒ์กฑ์Šค๋Ÿฌ์šด ๊ฒƒ์ด..src/__tests__/medium.integration.spec.tsx ํ†ตํ•ฉํ…Œ์ŠคํŠธ ์ฝ”๋“œ? ๋ถ€๋„๋Ÿฌ์›Œ์„œ ๋งŒ์กฑ์Šค๋Ÿฌ์šด๊ฒŒ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ „๋ถ€ ์•„์‰ฌ์›Œ!!

๋ฆฌํŒฉํ† ๋ง์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„

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

ํ•™์Šต ํšจ๊ณผ ๋ถ„์„

๊ณผ์ œ ํ”ผ๋“œ๋ฐฑ

  • easy์—์„œ๋ถ€ํ„ฐ ์ง์ ‘ ๊ฐ„๋‹จํ•œ ์œ ๋‹›ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค๊ฐ€ ์ ์  ๋ฒ”์œ„๊ฐ€ ๋„“์–ด์ง€๊ณ  describe๋„ ์ง์ ‘ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋˜๋Š” ํ•™์Šต ๋ฐฉํ–ฅ์ด ์žฌ๋ฐŒ์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํ†ตํ•ฉํ…Œ์ŠคํŠธ ์ค‘ notifications ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑํ•˜๋ฉด์„œ hard๋ฅผ ์„ ํƒํ•œ ๊ฒƒ์„ ๋ฌด์ง€ํ•˜๊ฒŒ ํ›„ํšŒํ–ˆ์—ˆ๋Š”๋ฐ, ๊ทธ๋งŒํผ ๋งŽ์ด ๊ณ ๋ฏผํ–ˆ์–ด์„œ ์ข‹์•˜์Šต๋‹ˆ๋‹ค! ๊ฐœ์ธ์‚ฌ์ •์œผ๋กœ ์‹œ๊ฐ„ ํˆฌ์ž๋ฅผ ๋ชปํ•œ๊ฒƒ์ด ์•„์‰ฌ์šธ ๋”ฐ๋ฆ„์ด๋„ค์š”.

๋ฆฌ๋ทฐ ๋ฐ›๊ณ  ์‹ถ์€ ๋‚ด์šฉ

๊ณผ์ œ ํ”ผ๋“œ๋ฐฑ

"์—„๋งˆ! ๋‚˜ ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์•Œ๊ฒŒ๋˜๊ณ  ์ž‘์„ฑ๋„ ํ•ด๋ดค์–ด!!" ใ…‹ใ…‹ ์ž˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ณผ์ œ๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•๋“ค์„ ์ ‘ํ•˜๋ฉด์„œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค๋ผ๋Š” ๊ทธ ์‹ฌ๋ฆฌ์  ์žฅ๋ฒฝ์„ ํ—ˆ๋ฌผ๋กœ ์นœ์ˆ™ํ•ด์ง€๋Š”๋ฐ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํšŒ๊ณ ๋ฅผ ๋ณด์•„ํ•˜๋‹ˆ ์ž˜ ์ˆ˜ํ–‰ํ•ด์ค€ ๊ฒƒ ๊ฐ™๋„ค์š”. ใ…Ž

"๋‚ด ์ธ์ƒ์— ๋‚ด ์†๊ฐ€๋ฝ์œผ๋กœ ์ง์ ‘ ์นœ ํ…Œ์ŠคํŠธ์ฝ”๋“œ!! ํฌ๊ธฐํ•˜์ง€ ์•Š๊ณ  ๊ณผ์ œํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ๊ธฐ์ˆ ์ ์ธ ๋„์ „์ด์ž ํ•ด๊ฒฐ์ด์—ˆ๋‹ค." ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•œ๋ฒˆ ์ณ๋ณธ ๊ฒฝํ—˜์œผ๋กœ ์•ž์œผ๋กœ ๋ชฐ๋ผ์„œ ์ƒ๊ธฐ๋Š” ๋‘๋ ค์›€์ด๋‚˜ ๊ท€์ฐฎ์Œ์„ ๋งŽ์ด ๊ทน๋ณตํ•ด์ง€๊ฒŒ ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž˜์š”.

๋‚˜๋ฅผ ๋Œ€์‹ ํ•ด์„œ ์ปดํ“จํ„ฐ๊ฐ€ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๊ธฐ์—๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•๋“ค์ด ํ•„์š”ํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜๊ณ  ๋ฐ˜๋Œ€๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ํ• ๋•Œ ๋‚˜๋ผ๋ฉด ์–ด๋–ป๊ฒŒ ํ• ๊นŒ๋ฅผ ๋– ์˜ฌ๋ ค๋ณด๊ณ  ์ด๋ฅผ ์ปดํ“จํ„ฐ๋ผ๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ ๋ผ๋Š” ์ƒ๊ฐ๋“ค์„ ๋ฐ˜๋ณตํ•˜๋‹ค๋ณด๋ฉด ์–ด๋А์ƒˆ ์ฝ”๋”ฉ์„ ์ž‘์„ฑํ• ๋•Œ์—๋„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ํŽธํ•˜๊ฒŒ ์ž‘์„ฑ์„ ํ•˜๊ฒŒ ๋˜๊ณ  ์ด๋Ÿฌํ•œ ์ƒ๊ฐ์Šต๊ด€์˜ ๊ฒฐ๊ณผ๋ฌผ๋“ค์ด ์ข‹์€ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด ์ค„๊ฑฐ์—์š”.

์ˆ˜๊ณ ํ•˜์…จ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฃผ์ฐจ๋Š” TDD๋„ค์š”. ํ™”์ดํŒ…์ž…๋‹ˆ๋‹ค.