1.Tdd

TDD๋ž€

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

TDD ํ”„๋กœ์„ธ์Šค์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ๋‹จ๊ณ„๊ฐ€ ํฌํ•จ๋œ๋‹ค.

  1. ์‹คํŒจํ•œ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ: ๊ฐœ๋ฐœ์ž๋Š” ์ฝ”๋“œ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ์‹คํŒจํ•˜๋„๋ก ์„ค๊ณ„๋œ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. ์ด ํ…Œ์ŠคํŠธ๋Š” ์ˆ˜ํ–‰ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ์ฝ”๋“œ์˜ "์‚ฌ์–‘" ์—ญํ• ์„ ํ•œ๋‹ค.

  2. ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ์ฝ”๋“œ ์ž‘์„ฑ: ๊ฐœ๋ฐœ์ž๋Š” ํ…Œ์ŠคํŠธ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ชฉํ‘œ๋Š” ์™„๋ฒฝํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

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

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

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

Jest

Jest๋Š” Facebook์—์„œ ๊ฐœ๋ฐœํ•œ ์ธ๊ธฐ ์žˆ๋Š” JavaScript ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. 2014๋…„์— ์ฒ˜์Œ ์ถœ์‹œ๋˜์—ˆ์œผ๋ฉฐ ์ดํ›„ JavaScript ์ƒํƒœ๊ณ„์—์„œ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ํ…Œ์ŠคํŠธ ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋˜์—ˆ๋‹ค.

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

Jest์˜ ์ฃผ์š” ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋Š” TDD(ํ…Œ์ŠคํŠธ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ - Test Driven Development) ๋ฐ BDD(ํ–‰๋™ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ - Behavior Driven Development)์— ์ค‘์ ์„ ๋‘” ๊ฒƒ์ด๋‹ค. Jest๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๋Š” ๋น„๊ธฐ์ˆ ์  ์ดํ•ด ๊ด€๊ณ„์ž๊ฐ€ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ํ˜•์‹์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์š”๊ตฌ ์‚ฌํ•ญ๊ณผ ์ฝ”๋“œ์˜ ์˜ˆ์ƒ ๋™์ž‘์„ ๋” ์‰ฝ๊ฒŒ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

Jest์—๋Š” React, Angular ๋ฐ Vue.js์™€ ๊ฐ™์€ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” JavaScript ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ๋‚ด์žฅ ์ง€์›๋„ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. ์Šค๋ƒ…์ƒท ํ…Œ์ŠคํŠธ, ๋ชฉํ‚น ๋ฐ ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€ ๋ถ„์„์„ ํฌํ•จํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๊ธฐ์ˆ ์˜ ํ…Œ์ŠคํŠธ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๋Š” ๋‹ค์–‘ํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ฐ ๋งค์ฒ˜๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

Jest๋Š” Jasmine ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ ์œ„์— ๊ตฌ์ถ•๋˜์–ด ํ…Œ์ŠคํŠธ ๋ฐ ์–ด์„ค์…˜์„ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ๋ฌธ์„ ์ œ๊ณตํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Jest๋Š” ๊ฐœ์„ ๋œ ์˜ค๋ฅ˜ ๋ณด๊ณ , ๋ณ‘๋ ฌ ํ…Œ์ŠคํŠธ ์‹คํ–‰ ๋ฐ automatic mocking๊ณผ ๊ฐ™์€ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์œผ๋กœ Jasmine์„ ํ™•์žฅํ•œ๋‹ค.

Jest๋Š” ํ…Œ์ŠคํŠธ ๋™์ž‘ ๋ฐ ์ถœ๋ ฅ์„ ์‚ฌ์šฉ์ž ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ๊ณ ๋„๋กœ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค. npm, Yarn ๋ฐ Grunt๋ฅผ ํฌํ•จํ•œ ๋‹ค์–‘ํ•œ ํ…Œ์ŠคํŠธ ๋Ÿฌ๋„ˆ ๋ฐ ํƒœ์Šคํฌ ๋Ÿฌ๋„ˆ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Jest๋Š” ์˜คํ”ˆ ์†Œ์Šค ์†Œํ”„ํŠธ์›จ์–ด์ด๋ฉฐ Facebook ๋ฐ ๊ด‘๋ฒ”์œ„ํ•œ JavaScript ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์ ๊ทน์ ์œผ๋กœ ์œ ์ง€ ๊ด€๋ฆฌํ•œ๋‹ค. ํฌ๊ณ  ํ™œ๋™์ ์ธ ์‚ฌ์šฉ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๋ฐ ๋‹ค๋ฅธ ๋„๊ตฌ์™€์˜ ํ†ตํ•ฉ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ด‘๋ฒ”์œ„ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฐ ํ™•์žฅ ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค.

Describe-Context-It ํŒจํ„ด

DCI(Describe-Context-It) ํŒจํ„ด์€ Jasmine, Mocha ๋ฐ Jest์™€ ๊ฐ™์€ ํ–‰๋™ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ(BDD) ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ผ๋ฐ˜์ ์ธ ํŒจํ„ด์ด๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ๋ช…ํ™•ํ•œ ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ํ…Œ์ŠคํŠธ๋ฅผ ๋” ์ฝ๊ธฐ ์‰ฝ๊ณ  ํ‘œํ˜„๋ ฅ ์žˆ๊ฒŒ ๋งŒ๋“ค๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค.

ํ‚ค์›Œ๋“œ์„ค๋ช…

Describe

๊ด€๋ จ ํ…Œ์ŠคํŠธ ๊ทธ๋ฃน์„ ์ •์˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํ…Œ์ŠคํŠธ ์ค‘์ธ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๊ฐ„๋žตํ•œ ์„ค๋ช…๊ณผ ํ•„์š”ํ•œ ์„ค์ • ๋˜๋Š” ๊ตฌ์„ฑ์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

Context

๊ทธ๋ฃน ๋‚ด์—์„œ ํŠน์ • ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€์— ๋Œ€ํ•œ ์„ค๋ช…๊ณผ ํ•ด๋‹น ํŠน์ • ์‚ฌ๋ก€์— ํ•„์š”ํ•œ ์ถ”๊ฐ€ ์„ค์ • ๋˜๋Š” ๊ตฌ์„ฑ์ด ํฌํ•จ๋œ๋‹ค.

It

ํŠน์ • ํ…Œ์ŠคํŠธ ์–ด์„ค์…˜์„ ์ •์˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘์— ๋Œ€ํ•œ ์„ค๋ช…๊ณผ ์‹ค์ œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ๋‹ค.


const context = describe;

describe('sum function', () => {
  context('when given two positive numbers', () => {
    it('returns the correct sum', () => {
      expect(sum(2, 3)).toEqual(5);
    });
  });

  context('when given a negative and a positive number', () => {
    it('returns the correct sum', () => {
      expect(sum(-2, 3)).toEqual(1);
    });
  });

  context('when given two negative numbers', () => {
    it('returns the correct sum', () => {
      expect(sum(-2, -3)).toEqual(-5);
    });
  });
});

๋‹จ์œ„ํ…Œ์ŠคํŠธ๋ž€

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

๋‹จ์œ„ ํ…Œ์ŠคํŠธ์—์„œ ๋‹จ์œ„๋Š” ๋‹จ์ผ ํ•จ์ˆ˜, ๋ฉ”์„œ๋“œ ๋˜๋Š” ํด๋ž˜์Šค์™€ ๊ฐ™์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ์ž‘์€ ๋ถ€๋ถ„์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๊ฐ ๋‹จ์œ„๋Š” ์˜ˆ์ƒ๋˜๋Š” ์ถœ๋ ฅ ๋˜๋Š” ๋™์ž‘์„ ์ƒ์„ฑํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ์ž…๋ ฅ ๊ฐ’ ๋ฐ ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ณ„์ ์œผ๋กœ ํ…Œ์ŠคํŠธ๋œ๋‹ค.

๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ ๋‹จ๊ณ„๊ฐ€ ํฌํ•จ๋œ๋‹ค.

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

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

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

  4. ๊ฒฐ๊ณผ ๋ถ„์„: ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํ–‰๋œ ํ›„ ๊ฒฐ๊ณผ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์‹คํŒจ ๋˜๋Š” ๊ฒฐํ•จ์„ ์‹๋ณ„ํ•œ๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๋Š” ํ…Œ์ŠคํŠธ์—์„œ ์ œ๊ณตํ•œ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ๋””๋ฒ„๊น…ํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

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

์ธ๊ธฐ ์žˆ๋Š” JavaScript์šฉ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ๋Š” Jest, Mocha ๋ฐ Jasmine์ด ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ํ…Œ์ŠคํŠธ๋ฅผ ๋” ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๊ณผ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

๋‹จ์œ„ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ด ๋ณด๋ฉด์„œ ๋Š๋‚€์ 

5์ฃผ์ฐจ ๊ณผ์ œ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋‹จ์œ„ํ…Œ์ŠคํŠธ๋ฅผ ๊ธฐ๋Šฅ๋‹จ์œ„์— ๋งž์ถฐ์„œ ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•ด ๋ณธ ์ ์€ ์ฒ˜์Œ์ด์—ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๋ฌด์—‡์„ ํ…Œ์ŠคํŠธ ํ•ด์•ผํ•˜๊ณ  ์–ด๋–ป๊ฒŒ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•ด ๋‚˜๊ฐˆ๊นŒ? ํ•˜๋Š” ์ƒ๊ฐ์ด ๋จผ์ € ๋“ค์—ˆ๊ณ , ์ฐจ๊ทผ์ฐจ๊ทผ ์ž‘์„ฑํ•ด๋ณด๋ฉด์„œ ์ต์ˆ™ํ•ด์ง€๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ๊ณผ์ œ๋ฅผ ๋๋งˆ์น ์ฆ˜์—๋Š” ๋‹จ์œ„ํ…Œ์ŠคํŠธ๋ฅผ ์–ด๋””๊นŒ์ง€ ํ•ด์•ผ ๋งž๋Š”๊ฑธ๊นŒ?๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค๋ฉด์„œ ๊ณผ์ œ๋ฅผ ๋งˆ๋ฌด๋ฆฌ ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

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

Last updated