undefined

TDD ๋ฒ•์น™ ์„ธ ๊ฐ€์ง€

TDD: ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์งœ๊ธฐ ์ „์— ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ถ€ํ„ฐ ์งœ๋Š” ๊ฐœ๋ฐœ ๋ฐฉ์‹

  1. ์‹คํŒจํ•˜๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๊นŒ์ง€ ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค.
  2. ์ปดํŒŒ์ผ์€ ์‹คํŒจํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ์‹คํ–‰์ด ์‹คํŒจํ•˜๋Š” ์ •๋„๋กœ๋งŒ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  3. ํ˜„์žฌ ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•  ์ •๋„๋กœ๋งŒ ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

์œ„ ๊ทœ์น™์„ ๋”ฐ๋ฉด ๊ฐœ๋ฐœ๊ณผ ํ…Œ์ŠคํŠธ๊ฐ€ ์•ฝ 30์ดˆ ์ฃผ๊ธฐ๋กœ ํ•จ๊ป˜ ๋‚˜์˜จ๋‹ค.

ํ•˜์ง€๋งŒ ๋ฐฉ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ์‹ฌ๊ฐํ•œ ๊ด€๋ฆฌ ๋ฌธ์ œ๋ฅผ ์œ ๋ฐœํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

 

๊นจ๋—ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์œ ์ง€ํ•˜๊ธฐ

์ง€์ €๋ถ„ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์งœ๋Š” ๊ฒƒ์€ ํ…Œ์ŠคํŠธ๋ฅผ ์•ˆ ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋ชปํ•˜๋‹ค.

  • ์‹ค์ œ ์ฝ”๋“œ๊ฐ€ ์ง„ํ™”ํ•˜๋ฉด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋„ ๋ณ€ํ•ด์•ผ ํ•œ๋‹ค.
    • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ์ง€์ €๋ถ„ํ•˜๋ฉด ๋ณ€๊ฒฝํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค.
  • ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•  ์ˆ˜๋ก ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์งœ๋Š” ์‹œ๊ฐ„๋ณด๋‹ค ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์‹œ๊ฐ„์ด ๋” ๊ธธ์–ด์ง„๋‹ค.
  • ์ƒˆ ๋ฒ„์ „์„ ์ถœ์‹œํ•  ๋•Œ๋งˆ๋‹ค ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์œ ์ง€ ๋ณด์ˆ˜ ํ•˜๋Š” ๋น„์šฉ์ด ๋Š˜์–ด๋‚˜๊ฒŒ ๋œ๋‹ค.

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ์‹ค์ œ ์ฝ”๋“œ ๋ชป์ง€์•Š๊ฒŒ ๊นจ๋—ํ•˜๊ฒŒ ์งœ์•ผํ•œ๋‹ค.

 

ํ…Œ์ŠคํŠธ๋Š” ์œ ์—ฐ์„ฑ, ์œ ์ง€๋ณด์ˆ˜์„ฑ, ์žฌ์‚ฌ์šฉ์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค.

ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๊ฐ€ ์—†์œผ๋ฉด ์˜๋„์น˜ ์•Š์€ ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ• ๊นŒ ๋ด ์ฝ”๋“œ ๋ณ€๊ฒฝ์„ ์ฃผ์ €ํ•˜๊ฒŒ ๋œ๋‹ค.

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

 

๊นจ๋—ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ

๊นจ๋—ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฑด ๊ฐ€๋…์„ฑ์ด๋‹ค. (์‹ค์ œ ์ฝ”๋“œ๋ณด๋‹ค๋„ ๋”!)

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ์ตœ์†Œ์˜ ํ‘œํ˜„์œผ๋กœ ๋งŽ์€ ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ช…๋ฃŒ์„ฑ, ๋‹จ์ˆœ์„ฑ, ํ’๋ถ€ํ•œ ํ‘œํ˜„์ด ํ•„์š”ํ•˜๋‹ค.

 

BUILD-OPERATE-CHECK ํŒจํ„ด

ํ…Œ์ŠคํŠธ๋ฅผ ๋ช…ํ™•ํžˆ ์„ธ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.

  1. BUILD: ํ…Œ์ŠคํŠธ ์ž๋ฃŒ๋ฅผ ๋งŒ๋“ ๋‹ค.
  2. OPERATE: ํ…Œ์ŠคํŠธ ์ž๋ฃŒ๋ฅผ ์กฐ์ž‘ํ•œ๋‹ค.
  3. CHECK: ์กฐ์ž‘ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•œ๋‹ค.

์„ธ์„ธํ•œ ์ฝ”๋“œ๋Š” ๋‹ค๋ฅธ ํ•จ์ˆ˜๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์ œ๊ฑฐํ•˜๊ณ  ์ง„์งœ ํ•„์š”ํ•œ ์ž๋ฃŒ ์œ ํ˜•๊ณผ ํ•จ์ˆ˜๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ์งœ์•ผํ•œ๋‹ค.

์„ธ์„ธํ•œ ์ฝ”๋“œ(์˜ˆ์ œ์—์„œ ์‹œ์Šคํ…œ ์กฐ์ž‘ API)๋ฅผ ํ•จ์ˆ˜๋กœ ๋ถ„๋ฆฌํ•œ ๊ฒƒ์€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํŠน์ˆ˜ API๊ฐ€ ๋œ๋‹ค.

 

์ด์ค‘ ํ‘œ์ค€

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ์‹ค์ œ ํ™˜๊ฒฝ์ด ์•„๋‹ˆ๋ผ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ๋Œ์•„๊ฐ€๋Š” ์ฝ”๋“œ์ด๋‹ค.

๋”ฐ๋ผ์„œ ์‹ค์ œ ์ฝ”๋“œ๋งŒํผ ํšจ์œจ์ ์ผ ํ•„์š”๋Š” ์—†๋‹ค.

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

 

ํ…Œ์ŠคํŠธ ๋‹น assert ํ•˜๋‚˜

์žฅ์ 

  • ๊ฒฐ๋ก ์ด ํ•˜๋‚˜์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๋ฅผ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹จ์ 

  • ์ค‘๋ณต ์ฝ”๋“œ๊ฐ€ ๋งŽ์•„์ง„๋‹ค.
  • ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค๊ฐ€ ๋Š˜์–ด๋‚œ๋‹ค.

trade-off๊ฐ€ ์กด์žฌํ•˜๋ฏ€๋กœ assert ๋ฌธ ๊ฐœ์ˆ˜๋Š” ์ตœ๋Œ€ํ•œ ์ค„์ด๋˜, ์—ฌ๋Ÿฌ assert๋ฌธ์„ ๋„ฃ๋Š” ๊ฒƒ์„ ์ฃผ์ €ํ•  ํ•„์š”๋Š” ์—†๋‹ค.

 

ํ…Œ์ŠคํŠธ ๋‹น ๊ฐœ๋… ํ•˜๋‚˜

์—ฌ๋Ÿฌ ๊ฐœ๋…์„ ์—ฐ์†์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ธด ํ•จ์ˆ˜๋Š” ํ”ผํ•œ๋‹ค.

์—ฌ๋Ÿฌ ๊ฐœ๋…์ด ํ•œ ํ•จ์ˆ˜์— ์กด์žฌํ•˜๋ฉด ๋…์ž๊ฐ€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค.

๊ฐœ๋… ๋‹น assert๋ฌธ ์ˆ˜๋ฅผ ์ตœ์†Œ๋กœ ์ค„์—ฌ๋ผ. ํ…Œ์ŠคํŠธ ํ•จ์ˆ˜ ํ•˜๋‚˜๋Š” ๊ฐœ๋… ํ•˜๋‚˜๋งŒ ํ…Œ์ŠคํŠธํ•˜๋ผ.

 

F.I.R.S.T

๊นจ๋—ํ•œ ํ…Œ์ŠคํŠธ๋Š” ๋‹ค์Œ ๋‹ค์„ฏ ๊ฐ€์ง€ ๊ทœ์น™์„ ๋”ฐ๋ฅธ๋‹ค.

  • Fast: ํ…Œ์ŠคํŠธ๋ฅผ ์ž์ฃผ ๋Œ๋ฆด ์ˆ˜ ์žˆ๋„๋ก ๋นจ๋ผ์•ผ ํ•œ๋‹ค.
  • Independent: ๊ฐ ํ…Œ์ŠคํŠธ๋Š” ์„œ๋กœ ์˜์กดํ•˜๋ฉด ์•ˆ ๋œ๋‹ค. ์–ด๋–ค ์ˆœ์„œ๋กœ ์‹คํ–‰ํ•ด๋„ ๊ดœ์ฐฎ์•„์•ผ ํ•œ๋‹ค.
  • Repeatable: ์–ด๋–ค ํ™˜๊ฒฝ์—์„œ๋„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค. ํ™˜๊ฒฝ์ด ํ…Œ์ŠคํŠธ ์‹คํŒจ์˜ ์ด์œ ๊ฐ€ ๋˜๋ฉด ์•ˆ๋œ๋‹ค.
  • Self-Validating: ํ…Œ์ŠคํŠธ๋Š” ์„ฑ๊ณต ์•„๋‹ˆ๋ฉด ์‹คํŒจ๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋‚ด์•ผ ํ•œ๋‹ค. ๊ฐœ๋ฐœ์ž์˜ ์ฃผ๊ด€์ด ํ•„์š”ํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
  • Timely: ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋Š” ํ…Œ์ŠคํŠธํ•˜๋ ค๋Š” ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์ง์ „์— ๊ตฌํ˜„ํ•œ๋‹ค.

 

๊ฒฐ๋ก 

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

๋งˆ๋ฌด๋ฆฌ

์ด์ „ ํšŒ์‚ฌ์—์„œ Django๋กœ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์„ ๋งก์•˜๋˜ ์ ์ด ์žˆ๋‹ค.

๊ทธ๋•Œ ๋ฐฑ์—”๋“œ์— ์ฒ˜์Œ ์œ ๋‹› ํ…Œ์ŠคํŠธ๋ฅผ ๋„์ž…ํ–ˆ์—ˆ๋˜ ๊ฒฝํ—˜์ด ์žˆ์–ด ์ฝ๋Š” ๋ฐ ๋ฌด๋ฆฌ๋Š” ์—†์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

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

 

๊ทธ๋ž˜์„œ์ธ์ง€ ์ด ์žฅ์—์„œ ๊ฐ€์žฅ ์™€๋‹ฟ์•˜๋˜ ๋ถ€๋ถ„์€ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€์˜€๋‹ค.

  • ํ…Œ์ŠคํŠธ API๋กœ ์ค‘๋ณต ์ฝ”๋“œ์™€ ํ…Œ์ŠคํŠธ์˜ ๋ณธ์งˆ์„ ํ๋ฆฌ๋Š” ์„ธ๋ถ€์ ์ธ ์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ
  • ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๋‹น ํ•˜๋‚˜์˜ ๊ฐœ๋…๋งŒ ํ…Œ์ŠคํŠธํ•˜๋ผ

 

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

ํ…Œ์ŠคํŠธ๋งŒ ์ž˜ ๋Œ์•„๊ฐ€๋ฉด ๋˜์ง€๋ž€ ์ƒ๊ฐ์ด ๊นŠ์ด ๋ฐ•ํ˜€์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. (์กฐ๊ธˆ ๊ท€์ฐฎ์•„ํ•˜๊ธฐ๋„ ํ–ˆ๋‹ค๐Ÿฅฒ)

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