์‹ค์šฉ์ ์ธ ํ”„๋ก ํŠธ์—”๋“œ ํ…Œ์ŠคํŠธ ์ „๋žต (1)


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

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

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

๊ฐœ๋ฐœ์ž์™€ ํ…Œ์ŠคํŠธ

๋จผ์ €, ์ด ๊ธ€์—์„œ ๋งํ•˜๋Š” ํ…Œ์ŠคํŠธ์˜ ์˜๋ฏธ์— ๋Œ€ํ•ด ์ข€ ๋” ํ™•์‹คํžˆ ํ•ด ๋‘˜ ํ•„์š”๊ฐ€ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด ๊ด€์ ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ •์˜ํ•œ๋‹ค๋ฉด "์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์š”๊ตฌ ์‚ฌํ•ญ์— ๋งž๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ํ–‰์œ„" ์ •๋„๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค. ๋ณดํ†ต์€ ๊ฐœ๋ฐœ์˜ ๊ฒฐ๊ณผ๋ฌผ์ด ์ตœ์ข…์ ์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌ๋˜๊ธฐ ์ง์ „์— QA(Quality Assuarance)๋ผ๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๋Š”๋ฐ, ์ด ๊ณผ์ •์„ ํ…Œ์ŠคํŠธ๋ผ๊ณ  ๋ณด๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ์ „์ฒด ๊ฐœ๋ฐœ ๊ณผ์ •์„ ์‚ดํŽด๋ณด๋ฉด ์ด๋Ÿฌํ•œ ๊ฒ€์ฆ์ด ๊ฐ ๋‹จ๊ณ„์—์„œ ๊พธ์ค€ํžˆ ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ”„๋กœํ† ํƒ€์ž… ๊ณผ์ •์—์„œ UX๋ฅผ ๋ฏธ๋ฆฌ ๊ฒ€์ฆํ•˜๊ณ  ๊ฐœ์„ ํ•˜๋Š” ์ผ, ์„œ๋ฒ„์˜ API๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๊ธฐ๋Œ€๊ฐ’์„ ํ™•์ธํ•˜๋Š” ์ผ, ๋งˆํฌ์—…์ด ๋๋‚œ ์ดํ›„์— ๋””์ž์ธ ์‹œ์•ˆ๊ณผ ๋น„๊ตํ•ด๋ณด๋Š” ์ผ ๋“ฑ์ด๋‹ค. ์‚ฌ์‹ค์€ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์ผ๋„ ํ…Œ์ŠคํŠธ์˜ ๋ฒ”์ฃผ์˜ ์†ํ•œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

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

์œ„์˜ ์˜ˆ์ œ์—์„œ ํ•ด๋‹น ํ•ญ๋ชฉ์„ ํด๋ฆญํ•œ ๋‹ค์Œ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์€ ๋ชจ๋‘ ํ…Œ์ŠคํŠธ์ด๋‹ค. ์‚ฌ์‹ค ๊ฐœ๋ฐœ์ž๋Š” ์ด๋ฏธ ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ์ˆ˜ ๋งŽ์€ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์—„๋ฐ€ํžˆ ๋งํ•ด์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅ/์ˆ˜์ •ํ•˜๊ณ  ์ €์žฅํ•œ ๋‹ค์Œ ์ง„ํ–‰ํ•˜๋Š” ์ผ์€ ๋Œ€๋ถ€๋ถ„ ํ…Œ์ŠคํŠธ์™€ ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

(์•ž์œผ๋กœ๋Š” ์˜๋ฏธ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด "ํ…Œ์ŠคํŠธ"๋ผ๋Š” ์šฉ์–ด๋ฅผ "๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•˜๋Š” ์ž๋™ํ™” ํ…Œ์ŠคํŠธ"๋ผ๋Š” ์˜๋ฏธ๋กœ ํ•œ์ •์ง€์–ด ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๊ฒ ๋‹ค.)

์ž๋™ํ™” ํ…Œ์ŠคํŠธ์˜ ์ค‘์š”์„ฑ

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

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

ํ…Œ์ŠคํŠธ์˜ ๊ธฐํšŒ๋น„์šฉ

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

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

...๋‚˜๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ์ œํ’ˆ ์ฝ”๋“œ์— ๋Œ€ํ•œ ๋ณด์ˆ˜๋ฅผ ๋ฐ›๋Š”๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋‚˜์˜ ์›์น™์€ "ํŠน์ • ์ˆ˜์ค€์˜ ์‹ ๋ขฐ๋ฅผ ๋ณด์žฅํ•˜๋Š” ์ตœ์†Œํ•œ์˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋งŒ ์ž‘์„ฑํ•œ๋‹ค"์ด๋‹ค...(์ค‘๋žต)... ๋”ฑํžˆ ์‹ค์ˆ˜๋ฅผ ๋ฒ”ํ•  ๊ฒƒ ๊ฐ™์ง€ ์•Š์€ ์ฝ”๋“œ๋Š” ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š๋Š”๋‹ค.

Stack Overflow ๋‹ต๋ณ€ ์ค‘

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

Extreme Programming Explained ์ฑ… ๋‚ด์šฉ ์ค‘

์ข‹์€ ํ…Œ์ŠคํŠธ์˜ ์กฐ๊ฑด

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

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

1. ์‹คํ–‰ ์†๋„๊ฐ€ ๋นจ๋ผ์•ผ ํ•œ๋‹ค.

ํ…Œ์ŠคํŠธ์˜ ์‹คํ–‰ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค๋Š” ๊ฒƒ์€ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ๋งˆ๋‹ค ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ์ด๋Š” ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•˜๊ณ , ํ…Œ์ŠคํŠธ๋ฅผ ๋” ์ž์ฃผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ธฐ ์œ„ํ•ด ์ˆ˜์‹ญ ๋ถ„์„ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ํ…Œ์ŠคํŠธ๋Š” ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ๊ฑฐ์˜ ๋ฌด์šฉ์ง€๋ฌผ์— ๊ฐ€๊นŒ์šธ ๊ฒƒ์ด๋‹ค.

2. ๋‚ด๋ถ€ ๊ตฌํ˜„ ๋ณ€๊ฒฝ ์‹œ ๊นจ์ง€์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.

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

3. ๋ฒ„๊ทธ๋ฅผ ๊ฒ€์ถœํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

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

4. ํ…Œ์ŠคํŠธ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์•ˆ์ •์ ์ด์–ด์•ผ ํ•œ๋‹ค.

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

5. ์˜๋„๊ฐ€ ๋ช…ํ™•ํžˆ ๋“œ๋Ÿฌ๋‚˜์•ผ ํ•œ๋‹ค.

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

ํ…Œ์ŠคํŠธ ์ „๋žต์˜ ์ค‘์š”์„ฑ

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

๊ฒฐ๊ตญ ๋ชจ๋“  ์š”์†Œ๋ฅผ 100% ๋งŒ์กฑํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ์‚ฌ์‹ค์ƒ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ํ”„๋กœ์ ํŠธ, ์„œ๋น„์Šค ๋ชจ๋“ˆ ๋“ฑ์˜ ํŠน์„ฑ์— ๋”ฐ๋ผ ์–ด๋–ค ๊ฒƒ์„ ํฌ๊ธฐํ•˜๊ณ  ์–ด๋–ค ๊ฒƒ์„ ์–ป์„ ๊ฒƒ์ธ๊ฐ€๋ฅผ ์ž˜ ํŒ๋‹จํ•ด์„œ ์ „๋žต์„ ์„ธ์›Œ์•ผ ํ•œ๋‹ค. ํŠนํžˆ ํ”„๋ก ํŠธ์—”๋“œ ์ฝ”๋“œ๋Š” ๊ทธ๋ž˜ํ”ฝ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(GUI)์™€ ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ด€๊ณ„๋˜์–ด ์žˆ๊ณ  ์‚ฌ์šฉ์ž์˜ ๋‹ค์–‘ํ•œ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ๊ณ ๋ คํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ „๋žต์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ์‹œ๊ฐ์  ์š”์†Œ, ์„œ๋ฒ„์™€์˜ ํ†ต์‹ , ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI)๋ฅผ ํ†ตํ•œ ์ž…๋ ฅ ๋“ฑ์„ ๊ฐ๊ฐ ์–ด๋–ป๊ฒŒ ํ…Œ์ŠคํŠธ ํ•ด์•ผ ํ•  ์ง€ ๊ณ ๋ฏผํ•˜๋ฉฐ ์ž์‹ ๋งŒ์˜ ์ „๋žต์„ ์„ธ์›Œ์•ผ ํ•œ๋‹ค.

ํ…Œ์ŠคํŠธ ๋„๊ตฌ์˜ ์ค‘์š”์„ฑ

ํ”„๋ก ํŠธ์—”๋“œ ํ…Œ์ŠคํŠธ์˜ ์ „๋žต์„ ์„ธ์šธ ๋•Œ๋Š” ๋„๊ตฌ์˜ ์—ญํ•  ๋˜ํ•œ ์•„์ฃผ ์ค‘์š”ํ•˜๋‹ค. ๊ธ€์„ ์‹œ์ž‘ํ•  ๋•Œ ์ตœ์‹  ํ…Œ์ŠคํŠธ ๋„๊ตฌ๋ฅผ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์€ ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋“ค์ด ๋” ํšจ์œจ์ ์ธ ์ „๋žต์„ ์„ธ์šธ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ธฐ์กด E2E(End To End) ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•œ ํ…Œ์ŠคํŠธ๋Š” ์‚ฌ์šฉ์ž์˜ ๊ด€์ ์—์„œ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์–ด ๋‚ด๋ถ€ ๊ตฌํ˜„์— ์˜ํ–ฅ์„ ๊ฑฐ์˜ ๋ฐ›์ง€ ์•Š๋Š” ๋ฐ˜๋ฉด, ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•˜๊ณ  ์‹คํ–‰์ด ๋Š๋ฆฌ๋ฉฐ ๊ฒฐ๊ณผ๊ฐ€ ์•ˆ์ •์ ์ด์ง€ ์•Š๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ตœ์‹  E2E ๋„๊ตฌ์ธ Cypress๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ์กด E2E ํ…Œ์ŠคํŠธ์˜ ์žฅ์ ์€ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ์ง๊ด€์ ์ด๊ณ  ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์ธ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ํ…Œ์ŠคํŠธ ๋„๊ตฌ์˜ ๋ฐœ์ „์ด ๋” ๋‚˜์€ ํ…Œ์ŠคํŠธ ์ „๋žต์„ ์„ธ์šธ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

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

์ง€๊ธˆ๋ถ€ํ„ฐ๋Š” ๊ฐ„๋‹จํ•œ ํ•  ์ผ ๊ด€๋ฆฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹ค์ œ๋กœ ํ…Œ์ŠคํŠธํ•ด๋ณด๋ฉฐ ์‹ค์šฉ์ ์ธ ํ…Œ์ŠคํŠธ ์ „๋žต์ด ๋ฌด์—‡์ธ์ง€๋ฅผ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

๊ฐ„๋‹จํ•œ ์˜ˆ์ œ: ํ•  ์ผ ๊ด€๋ฆฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

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

screen shot 2018-12-26 at 10 52 23 am (๊ทธ๋ฆผ 1: TodoMVC ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ํ™”๋ฉด)

(์›๋ž˜ TodoMVC๋Š” ์˜์†์  ๋ฐ์ดํ„ฐ ์ €์žฅ์„ ์œ„ํ•ด localStorage๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€๋งŒ, ์ด ์˜ˆ์ œ์—์„œ๋Š” ์‹ค์ œ ์„œ๋ฒ„์™€์˜ ํ†ต์‹ ์„ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ ๋กœ์ปฌ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝํ–ˆ๋‹ค.)

ํ”„๋ก ํŠธ์—”๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์„ฑ ์š”์†Œ

์„œ๋ฒ„์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ฒ˜์Œ ์‹คํ–‰ํ•œ ๋‹ค์Œ ํ•  ์ผ์„ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž. ๋‚ด๋ถ€์ ์ธ ์‹คํ–‰ ๋‹จ๊ณ„๋ฅผ ๊ณ ๋ คํ•ด ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์„ ๊ฒƒ์ด๋‹ค.

  1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๋ฉด ํ™”๋ฉด์— ๊ธฐ๋ณธ UI๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.
  2. API ์„œ๋ฒ„์— "ํ•  ์ผ ๋ชฉ๋ก"์„ ์š”์ฒญํ•œ ๋‹ค์Œ ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ๋ฆฌ๋•์Šค ์Šคํ† ์–ด์— ์ €์žฅํ•œ๋‹ค.
  3. ์ €์žฅ๋œ ์Šคํ† ์–ด์˜ ๊ฐ’์— ๋”ฐ๋ผ ํ•  ์ผ ๋ชฉ๋ก์„ UI๋กœ ํ‘œ์‹œํ•œ๋‹ค.
  4. ์‚ฌ์šฉ์ž๊ฐ€ ์ธํ’‹ ์ƒ์ž๋ฅผ ํด๋ฆญํ•œ ๋‹ค์Œ "๋‚ฎ์ž  ์ž๊ธฐ"๋ผ๊ณ  ์ž…๋ ฅํ•œ ํ›„ ์—”ํ„ฐํ‚ค๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.
  5. API ์„œ๋ฒ„์— "ํ•  ์ผ ์ถ”๊ฐ€"๋ฅผ "๋‚ฎ์ž  ์ž๊ธฐ"๋ผ๋Š” ๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜ ์š”์ฒญํ•œ๋‹ค.
  6. ์š”์ฒญ์ด ์„ฑ๊ณตํ•˜๋ฉด ๋ฆฌ๋•์Šค ์Šคํ† ์–ด์˜ ํ•  ์ผ ๋ชฉ๋ก์— "๋‚ฎ์ž  ์ž๊ธฐ"๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.
  7. ์ €์žฅ๋œ ์Šคํ† ์–ด์˜ ๊ฐ’์— ๋”ฐ๋ผ UI๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค.

๋งŽ์€ ์ผ์„ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ, ๊ฐ๊ฐ์˜ ๋‹จ๊ณ„๋ฅผ ์—ญํ• ์— ๋”ฐ๋ผ ๋ถ„๋ฅ˜ํ•ด ๋ณด๋ฉด ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋Š” ํ˜„์žฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๋Š” ์ผ๋กœ, 1,3,7์— ํ•ด๋‹นํ•œ๋‹ค. ๋‘ ๋ฒˆ์งธ๋Š” ์™ธ๋ถ€ ์ž…๋ ฅ(์‚ฌ์šฉ์ž ์ž…๋ ฅ, ์„œ๋ฒ„ ํ†ต์‹ )์„ ๋ฐ›์•„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ผ๋กœ, 2,4,5,6์— ํ•ด๋‹นํ•œ๋‹ค. ์•„๋งˆ MVC ํŒจํ„ด์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋ธ๊ณผ ๋ทฐ์˜ ๊ตฌ๋ถ„๊ณผ ๋น„์Šทํ•˜๋‹ค๊ณ  ๋ณด๋ฉด ๋  ๊ฒƒ์ด๋‹ค.

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

๋จผ์ €, ์‹œ๊ฐ์  ์š”์†Œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด์ž.

์‹œ๊ฐ์  ์š”์†Œ์˜ ํ…Œ์ŠคํŠธ

HTML ๋น„๊ตํ•˜๊ธฐ

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

import React from "react";
import { render } from "react-dom";
import prettyHTML from "diffable-html";
import { Header } from "../components/header";

it("Header component - HTML", () => {
  const el = document.createElement("div");
  render(<Header />, el);

  const outputHTML = prettyHTML(`
    <header class="header">
      <h1>todos</h1>
      <input class="new-todo" placeholder="What needs to be done?" value="" />
    </header>
  `);

  expect(prettyHTML(el.innerHTML)).toBe(outputHTML);
});

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

์Šค๋ƒ…์ƒท ํ…Œ์ŠคํŠธ (HTML)

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

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

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

import React from "react";
import { render } from "react-dom";
import prettyHTML from "diffable-html";
import { Header } from "../components/header";

it("Header component - Snapshot", () => {
  const el = document.createElement("div");
  render(<Header />, el);

  expect(el.innerHTML).toMatchSnapshot();
});

๊ธฐ์กด์˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ณด๋‹ค ํ›จ์”ฌ ๋‹จ์ˆœํ•ด์กŒ๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์—์„œ ์‹ค์ œ ๊ฒฐ๊ด๊ฐ’์„ ํ™•์ธํ•  ์ˆ˜ ์—†๋Š” ๋Œ€์‹ , __snapshot__ ํด๋” ๋‚ด์— *.js.snap ์ด๋ผ๋Š” ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๋ฉฐ ์ด ํŒŒ์ผ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฒฐ๊ด๊ฐ’์ด ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

exports[`Header component - Snapshot 1`] = `
"
<header class=\\"header\\">
  <h1>
    todos
  </h1>
  <input class=\\"new-todo\\"
         placeholder=\\"What needs to be done?\\"
         value
  >
</header>
"
`;

์Šค๋ƒ…์ƒท ํ…Œ์ŠคํŠธ (๊ฐ€์ƒ DOM)

์‚ฌ์‹ค ๋ฆฌ์•กํŠธ์˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ์‹ค์ œ HTML์ด ์•„๋‹Œ ๋ฆฌ์•กํŠธ ์—˜๋ฆฌ๋จผํŠธ๋ผ๊ณ  ํ•˜๋Š” ๊ฐ€์ƒ์˜ DOM ๊ตฌ์กฐ์ด๋‹ค. ์‹ค์ œ HTML์˜ ์ƒ์„ฑ ๋ฐ ๋ณ€๊ฒฝ์€ react-dom ๋ชจ๋“ˆ์˜ ์—ญํ• ์ด๊ธฐ ๋•Œ๋ฌธ์— ์—„๋ฐ€ํ•˜๊ฒŒ ๋งํ•˜๋ฉด ํŠน์ • ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ์˜ ๋ฒ”์œ„์—๋Š” ํฌํ•จ๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ž˜์„œ ๋ฆฌ์•กํŠธ์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ…Œ์ŠคํŠธํ•  ๋•Œ๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฆฌ์•กํŠธ ์—˜๋ฆฌ๋จผํŠธ์˜ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

๋ฆฌ์•กํŠธ์—์„œ๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ํ…Œ์ŠคํŠธ๋ฅผ ๋•๊ธฐ ์œ„ํ•ด react-test-renderer ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‹ค์ œ๋กœ ๋ Œ๋”๋งํ•  ํ•„์š” ์—†์ด ์ปดํฌ๋„ŒํŠธ์˜ ๋™์ž‘์„ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋‹ค.

import React from "react";
import renderer from "react-test-renderer";
import { Header } from "../components/header";

it("Header component - Snapshot", () => {
  const tree = renderer.create(<Header />).toJSON();

  expect(tree).toMatchSnapshot();
});

์œ„์˜ ์˜ˆ์ œ์—์„œ๋Š” DOM ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•ด์„œ ์ง์ ‘ ๋ Œ๋”๋ง์„ ํ•˜๋Š” ์ฝ”๋“œ ๋Œ€์‹  react-test-renderer์˜ toJSON() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๊ณ  ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ธŒ๋ผ์šฐ์ €์˜ ๋ Œ๋”๋ง ์—”์ง„์ด ํ•„์š” ์—†๊ธฐ ๋•Œ๋ฌธ์— JSDom ๋“ฑ์˜ ๋„์›€ ์—†์ด๋„ Node.js ํ™˜๊ฒฝ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

Jest๋Š” ์ด ์™ธ์—๋„ ์Šค๋ƒ…์ƒท ํŒŒ์ผ์˜ ๋น„๊ต๋‚˜ ๊ฐฑ์‹ ์„ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ํŽธ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ์Šค๋ƒ…์ƒท ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ์ข€ ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ Jest์˜ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค.

HTML ๊ตฌ์กฐ ๋น„๊ต์˜ ๋ฌธ์ œ์ 

์ง€๊ธˆ๊นŒ์ง€ ์•Œ์•„๋ณธ HTML์˜ ๋ฌธ์ž์—ด ๋น„๊ต๋‚˜ ์Šค๋ƒ…์ƒท ํ…Œ์ŠคํŠธ ๋ชจ๋‘ ์‹œ๊ฐ์  ์š”์†Œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด HTML์˜ ๊ตฌ์กฐ๋ฅผ ๋น„๊ตํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค(๋ฆฌ์•กํŠธ ์—˜๋ฆฌ๋จผํŠธ์˜ ํŠธ๋ฆฌ๋„ ๊ฒฐ๊ตญ HTML ๊ตฌ์กฐ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค). ํ•˜์ง€๋งŒ ์•ž์„œ ๋งํ•œ "์ข‹์€ ํ…Œ์ŠคํŠธ์˜ ์กฐ๊ฑด"์„ ๊ณ ๋ คํ•ด๋ณผ ๋•Œ, HTML์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค.

1. ๊ตฌํ˜„ ์ข…์†์กฑ์ธ ํ…Œ์ŠคํŠธ

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

์ด๋Ÿฌํ•œ ๊ตฌํ˜„ ์ข…์†์ ์ธ ํ…Œ์ŠคํŠธ๋Š” ์ž‘์€ ๋ณ€๊ฒฝ์—๋„ ๊นจ์ง€๊ธฐ ์‰ฌ์›Œ ๊ด€๋ฆฌ ๋น„์šฉ์„ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค. Header ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์˜ˆ๋กœ ๋“ค์–ด ๋ณด์ž. ๋งŒ์•ฝ header ํƒœ๊ทธ ๋Œ€์‹  div ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, new-todo ํด๋ž˜์Šค๋ฅผ add-todo๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ์‹ค์ œ ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€์— ๋ณ€ํ™”๊ฐ€ ์—†๋”๋ผ๋„ ํ…Œ์ŠคํŠธ๊ฐ€ ๊นจ์ง€๊ฒŒ ๋œ๋‹ค. ์ด์™€ ๊ฐ™์ด HTML์ด๋‚˜ CSS๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•  ๋•Œ์—๋„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๊ฐฑ์‹ ์‹œ์ผœ์ฃผ์–ด์•ผ ํ•˜๋ฉฐ, ์ด๋กœ ์ธํ•ด ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ์˜คํžˆ๋ ค ๋Š๋ ค์ง€๋Š” ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

2. ์˜๋„๊ฐ€ ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š๋Š” ํ…Œ์ŠคํŠธ

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

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

์‹œ๊ฐ์  ํ…Œ์ŠคํŠธ ์ž๋™ํ™”์˜ ์–ด๋ ค์›€

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

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

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

๊ทธ๋ ‡๋‹ค๋ฉด ์‹œ๊ฐ์  ํ…Œ์ŠคํŠธ๋Š” ์ž๋™ํ™”ํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์ผ๊นŒ? ๋Œ€๋‹ต์€ ๋ฐ˜๋ฐ˜์ด๋‹ค. ์•„์ง์€ ์™„๋ฒฝํ•œ ์ž๋™ํ™”๋ฅผ ํ•  ์ˆ˜ ์—†์ง€๋งŒ, UI๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ์‹์„ ๊ฐœ์„ ํ•  ์ˆ˜๋Š” ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ์œ„ํ•œ ์ƒˆ๋กœ์šด ๋Œ€์•ˆ์„ ์ œ์‹œํ•ด์ฃผ๋Š” ๋„๊ตฌ๊ฐ€ ๋ฐ”๋กœ ์Šคํ† ๋ฆฌ๋ถ์ด๋‹ค.

(์ตœ๊ทผ์—๋Š” Applitools, Chromatic์™€ ๊ฐ™์ด ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๋ฐฉ์‹์— ์˜ํ•œ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•˜๊ณ  ์ด๋ฏธ์ง€๋ฅผ ๋น„๊ตํ•ด ์ฃผ๋Š” ์‹œ๊ฐ์  ํ…Œ์ŠคํŠธ ๋„๊ตฌ๋“ค์ด ๋งŽ์ด ๋ฐœ์ „ํ•˜๊ณ  ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋“ค์€ ์ฃผ๋กœ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ์˜ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ์•ž์œผ๋กœ ์†Œ๊ฐœํ•  ์Šคํ† ๋ฆฌ๋ถ๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋” ํšจ๊ณผ์ ์ด๋‹ค. 2๋ถ€์—์„œ ์Šคํ† ๋ฆฌ๋ถ์˜ ์‚ฌ์šฉ๋ฒ•๊ณผ ํ•จ๊ป˜ ์ด๋Ÿฌํ•œ ์‹œ๊ฐ์  ํšŒ๊ท€ ํ…Œ์ŠคํŠธ ๋„๊ตฌ๋“ค์„ ์†Œ๊ฐœํ•˜๋„๋ก ํ•˜๊ฒ ๋‹ค.)

์Šคํ† ๋ฆฌ๋ถ: UI ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์—์„œ๋Š” ์Šคํ† ๋ฆฌ๋ถ์„ "UI ๊ฐœ๋ฐœ ํ™˜๊ฒฝ"์ด๋ผ๊ณ  ์†Œ๊ฐœํ•˜๊ณ  ์žˆ๋‹ค. ์‚ฌ์‹ค์ƒ ํ…Œ์ŠคํŠธ ๋„๊ตฌ๋ผ๊ธฐ ๋ณด๋‹ค๋Š” UI๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋” ๋‚˜์€ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•ด์ฃผ๋Š” ๋„๊ตฌ์— ๊ฐ€๊น๋‹ค. ์ผ์ข…์˜ ์ปดํฌ๋„ŒํŠธ ๊ฐค๋Ÿฌ๋ฆฌ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์•„๋ž˜์˜ ๊ทธ๋ฆผ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ์˜ ์กฐํ•ฉ์„ ํŽ˜์ด์ง€๋ณ„๋กœ ๋“ฑ๋กํ•ด ๋†“๊ณ  ํŽธ๋ฆฌํ•˜๊ฒŒ ๋ˆˆ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„ค๋น„๊ฒŒ์ด์…˜์„ ์ œ๊ณตํ•œ๋‹ค.

screen shot 2018-12-26 at 10 57 55 am

(๊ทธ๋ฆผ 2: ์Šคํ† ๋ฆฌ๋ถ ์˜ˆ์ œ - ํ† ์ŠคํŠธ ํŒŒ์ผ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ๋ชฉ๋ก)

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

์ข€ ๋” ์ž์„ธํ•œ ์„ค๋ช…์„ ์œ„ํ•ด ํŒŒ์ผ ์—…๋กœ๋“œ ์™„๋ฃŒ ํŒ์—… ๋‚ด์˜ ์•„์ด์ฝ˜ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์˜ˆ๋กœ ๋“ค์–ด๋ณด์ž. ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•œ ํ›„ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ƒˆ๋กœ์šด ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๊ณ  ์—…๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค. ํŒ์—…์ด ํ‘œ์‹œ๋˜์–ด ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ–ˆ๋Š”๋ฐ, ์•„์ด์ฝ˜์ด ๋„ˆ๋ฌด ์ปค์„œ ๊ธ€์ž๋ฅผ ๋ฎ์–ด๋ฒ„๋ฆฐ ๊ฒƒ์„ ํ™•์ธํ–ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์ˆ˜์ •ํ•œ ํ›„์— ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋˜ ๋‹ค์‹œ ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๊ณ  ์™„๋ฃŒํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค. ๋‹ค์‹œ ํ™•์ธํ–ˆ๋”๋‹ˆ ์ด๋ฒˆ์—” ์•„์ด์ฝ˜์ด ๋„ˆ๋ฌด ์ž‘์€ ๊ฒƒ ๊ฐ™๋‹ค. ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ๋˜ ๋‹ค์‹œ ์•ž์˜ ์ž‘์—…์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

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

1๋ถ€๋ฅผ ๋งˆ์น˜๋ฉฐ

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

2๋ถ€์—์„œ๋Š” ์‹ค์ œ๋กœ ์Šคํ† ๋ฆฌ๋ถ์„ ์‚ฌ์šฉํ•ด๋ณด๋ฉด์„œ ์‹œ๊ฐ์  ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ข€ ๋” ์ƒ์„ธํ•œ ์ „๋žต์„ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

(์•„์ง ๋‹ค๋ฃจ์ง€ ๋ชปํ•œ "์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ ๊ด€๋ฆฌ"์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ๋Š” 3๋ถ€์—์„œ Cypress์™€ ํ•จ๊ป˜ ์„ค๋ช…ํ•  ์˜ˆ์ •์ด๋‹ค.)

๊น€๋™์šฐ2018.12.26
Back to list