๋ฐ์ผํ๋ก ์๋ฐ์คํฌ๋ฆฝํธ์ ์๋์ด๋ค. ์ต๊ทผ 2~3๋ ๋์ ์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ฐ์ฅ ์ธ๊ธฐ์๋ ์ธ์ด ์์ 1์๋ฅผ ์ ์งํ๊ณ ์๊ณ , ์ฌ์ ํ ๋น ๋ฅธ ์๋๋ก ์ฑ์ฅํ๊ณ ์๋ค. 10์ฌ๋ ์ , ์น ํ์ค์ด๋ผ๋ ๊ฐ๋ ์กฐ์ฐจ ์์ ๋๋ถํฐ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ํด ์ค๋ ๋ ๊ฐ์ ๊ฐ๋ฐ์์๊ฒ๋ ์ ๋ง ๊ฐ๊ฐ๋ฌด๋ํ ์๋๊ฐ ์๋๊น ์ถ๋ค. ๋น์์๋ ๊ฐ๋ฐ ํ๊ฒฝ์ด๋ผ๋ ๋จ์ด์กฐ์ฐจ ๋ถ๋๋ฌ์ธ๋งํผ ์ฒ๋ฐํ ํ๊ฒฝ์ด์๋๋ฐ, ์ง๊ธ ์์์ ธ๋์ค๋ ์๋ก์ด ๊ธฐ์ ๊ณผ ๊ฐ๋ฐ ๋๊ตฌ๋ฅผ ๋ฐ๋ผ๋ณด๊ณ ์์ผ๋ฉด ๊ฐํ ํ์์ ์๋๋ผ๊ณ ๋ ํ ์ ์์ ๊ฒ ๊ฐ๋ค.
๊ทธ ์ค์์๋ ๊ฐ์ธ์ ์ผ๋ก ๊ฐ์ฅ ๊ณ ๋ฌด์ ์ธ ๊ฒ์ ๋ฐ๋ก "ํ ์คํธ ๋ฐฉ๋ฒ๋ก ๊ณผ ๋๊ตฌ์ ๋ฐ์ "์ด๋ค. ์ง๋ ๋ช ๋ ๊ฐ ํ๋ก ํธ์๋์ ํ ์คํธ๋ ๋์๊ฒ ๋ฟ์ ์ ์๋ ๋จผ ํ๋๊ณผ๋ ๊ฐ์๋ค. ๊ธฐ์กด์ ์ด๋ค ๋ฐฉ์์ ์๋ํด ๋ณด์๋ ํ๋ก ํธ์๋ ์ฝ๋๋ฅผ ํ ์คํธํ๊ธฐ์๋ ์ ํฉํ์ง ์์๊ณ , ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ ธ๋ ฅ์ ๋นํด ์ค์ ๋ก ์ป๊ฒ ๋๋ ํจ๊ณผ๋ ๋ฏธ๋ฏธํ๊ฒ๋ง ๋๊ปด์ก๋ค. ํ์ง๋ง ์ต๊ทผ์ ๋ฑ์ฅํ ํ ์คํธ ๋๊ตฌ๋ค์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ ์ํ๊ณ๊ฐ ๋ช ๋ ๊ฐ์ ์ํ์ฐฉ์ค๋ฅผ ํตํด ์์์จ ๊ฒฝํ์ ์ฑ๊ณผ๋ฅผ ๊ณผ์ํ๋ฏ, ์ด๋ฌํ ๊ณ ๋ฏผ๋ค์ ๋ํ ํ๋ฅญํ ํด๊ฒฐ์ฑ ์ ์ ์ํด์ฃผ๊ณ ์๋ค.
์ด ๊ธ์์๋ ์ด๋ฌํ ์ต์ ํ ์คํธ ๋๊ตฌ๋ค ์ค ๊ฐ์ฅ ์ฃผ๋ชฉํ ๋ง ๋งํ ๋๊ตฌ์ธ ์คํ ๋ฆฌ๋ถ๊ณผ Cypress๋ฅผ ์๊ฐํ๊ณ ์ค์ ๋ก ์ฌ์ฉํด ๋ณด๋ฉด์, ์ค์ฉ์ ์ธ ํ๋ก ํธ์๋ ํ ์คํธ๋ฅผ ์ํด ์ด๋ค ์ ๋ต์ ์ธ์์ผ ํ๋์ง๋ฅผ ์ด์ผ๊ธฐํด ๋ณด๋๋ก ํ๊ฒ ๋ค.
๋จผ์ , ์ด ๊ธ์์ ๋งํ๋ ํ ์คํธ์ ์๋ฏธ์ ๋ํด ์ข ๋ ํ์คํ ํด ๋ ํ์๊ฐ ์์ ๊ฒ ๊ฐ๋ค. ์ํํธ์จ์ด ๊ด์ ์์ ํ ์คํธ๋ฅผ ์ ์ํ๋ค๋ฉด "์ ํ๋ฆฌ์ผ์ด์ ์ด ์๊ตฌ ์ฌํญ์ ๋ง๊ฒ ๋์ํ๋์ง๋ฅผ ๊ฒ์ฆํ๋ ํ์" ์ ๋๊ฐ ๋ ๊ฒ์ด๋ค. ๋ณดํต์ ๊ฐ๋ฐ์ ๊ฒฐ๊ณผ๋ฌผ์ด ์ต์ข ์ ์ผ๋ก ์ฌ์ฉ์์๊ฒ ์ ๋ฌ๋๊ธฐ ์ง์ ์ QA(Quality Assuarance)๋ผ๋ ๊ณผ์ ์ ๊ฑฐ์น๋๋ฐ, ์ด ๊ณผ์ ์ ํ ์คํธ๋ผ๊ณ ๋ณด๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค. ํ์ง๋ง ์ค์ ๋ก ์ ์ฒด ๊ฐ๋ฐ ๊ณผ์ ์ ์ดํด๋ณด๋ฉด ์ด๋ฌํ ๊ฒ์ฆ์ด ๊ฐ ๋จ๊ณ์์ ๊พธ์คํ ์ด๋ฃจ์ด์ง๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์๋ฅผ ๋ค์ด ํ๋กํ ํ์ ๊ณผ์ ์์ UX๋ฅผ ๋ฏธ๋ฆฌ ๊ฒ์ฆํ๊ณ ๊ฐ์ ํ๋ ์ผ, ์๋ฒ์ API๋ฅผ ํธ์ถํ๊ณ ๊ธฐ๋๊ฐ์ ํ์ธํ๋ ์ผ, ๋งํฌ์ ์ด ๋๋ ์ดํ์ ๋์์ธ ์์๊ณผ ๋น๊ตํด๋ณด๋ ์ผ ๋ฑ์ด๋ค. ์ฌ์ค์ ์ด๋ฌํ ๋ชจ๋ ์ผ๋ ํ ์คํธ์ ๋ฒ์ฃผ์ ์ํ๋ค๊ณ ๋ณผ ์ ์๋ค.
์ค์ ๊ฐ๋ฐ ๊ณผ์ ์์ ์ผ๋ง๋ ๋ง์ ํ ์คํธ๊ฐ ์ด๋ฃจ์ด์ง๋์ง๋ฅผ ์์๋ณด๊ธฐ ์ํด ์ข ๋ ๊ตฌ์ฒด์ ์ธ ์๋ฅผ ๋ค์ด๋ณด์. ๋ฆฌ์กํธ๋ก ๊ฐ๋จํ ํ ์ผ ๊ด๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค๊ณ ์๊ณ , ํ์ฌ "์๋ฃํ๊ธฐ" ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ์ค์ด๋ค. ์ฌ์ฉ์์ ํด๋ฆญ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ ํด๋น ํ ์ผ ํญ๋ชฉ์ ์ํ๋ฅผ "์๋ฃ" ์ํ๋ก ๋ณ๊ฒฝํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ค. ๋ณ๊ฒฝ์ด ์ ๋์๋์ง๋ฅผ ํ์ธํ๊ธฐ ์ํด ํด๋น ํญ๋ชฉ์ ํด๋ฆญํ ๋ค์ ๊ฐ๋ฐ ๋๊ตฌ๋ฅผ ์ด์ด์ ํด๋น ์ปดํฌ๋ํธ์ ์ํ(state)๋ฅผ ํ์ธํ๋ค. "์๋ฃ" ์ํ๊ฐ ๋ ํ ์ผ ํญ๋ชฉ์ UI์์ ์ฒดํฌ๋ฐ์ค์ ์ทจ์์ ์ฒ๋ฆฌ๊ฐ ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ํด๋น ์ปดํฌ๋ํธ์ CSS๋ฅผ ์ถ๊ฐํ๊ณ , ๋ค์ ํด๋น ํญ๋ชฉ์ ํด๋ฆญํ ๋ค์ ํ๋ฉด์ ๋์์ธ ์์๊ณผ ๋์ผํ๊ฒ ํํ๋๋์ง๋ฅผ ํ์ธํ๋ค. ์ถํ์ "์๋ฃ" ์ํ๋ฅผ ์ปดํฌ๋ํธ๊ฐ ์๋ ๋ฆฌ๋์ค์ ์คํ ์ด์์ ๊ด๋ฆฌํด์ผ ํ๋ค๋ ๊ฒ์ ์๊ฒ ๋์ด, ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋ง ํ ๋ค์ ๋ค์ ํด๋น ํญ๋ชฉ์ ํด๋ฆญํ๊ณ , ํ๋ฉด์ ์ด์ ๊ณผ ๋์ผํ ๊ฒฐ๊ณผ๊ฐ ํ์๋๋์ง๋ฅผ ํ์ธํ๋ค.
์์ ์์ ์์ ํด๋น ํญ๋ชฉ์ ํด๋ฆญํ ๋ค์ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๋ ๊ณผ์ ์ ๋ชจ๋ ํ ์คํธ์ด๋ค. ์ฌ์ค ๊ฐ๋ฐ์๋ ์ด๋ฏธ ๊ฐ๋ฐ ๊ณผ์ ์์ ์ ๋ง์ ํ ์คํธ๋ฅผ ์งํํ๊ณ ์์ผ๋ฉฐ, ์๋ฐํ ๋งํด์ ๊ฐ๋ฐ์๊ฐ ์์ค ์ฝ๋๋ฅผ ์ ๋ ฅ/์์ ํ๊ณ ์ ์ฅํ ๋ค์ ์งํํ๋ ์ผ์ ๋๋ถ๋ถ ํ ์คํธ์ ๊ด๋ จ์ด ์๋ค๊ณ ๋ณผ ์ ์๋ค.
(์์ผ๋ก๋ ์๋ฏธ๋ฅผ ๋ช ํํ๊ฒ ํ๊ธฐ ์ํด "ํ ์คํธ"๋ผ๋ ์ฉ์ด๋ฅผ "๊ฐ๋ฐ์๊ฐ ์์ฑํ๋ ์๋ํ ํ ์คํธ"๋ผ๋ ์๋ฏธ๋ก ํ์ ์ง์ด ์ฌ์ฉํ๋๋ก ํ๊ฒ ๋ค.)
๋ฌธ์ ๋ ์ด๋ฌํ ํ ์คํธ๊ฐ ๋๋ถ๋ถ ๋ฐ๋ณต์ ์ธ ์์ ์ด๋ผ๋ ๊ฒ์ด๋ค. ์์ ๊ฐ๋จํ ์์ ์์๋ "ํด๋น ํญ๋ชฉ์ ํด๋ฆญ" ํ๊ณ ๊ฒฐ๊ณผ๋ฅผ "ํ์ธ" ํ๋ ๊ณผ์ ์ด ๊ณ์ํด์ ๋ฐ๋ณต๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด๋ฐ ๋ฐ๋ณต๋ ์์ ์ ๋งค๋ฒ ์๋์ผ๋ก ์งํํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ณต์กํด์ง์๋ก ํ ์คํธ์ ๋ํ ๋น์ฉ์ด ์ ์ ์ฆ๊ฐํ๊ฒ ๋๋ค. ํ ์คํธ ๋น์ฉ์ด ์ฆ๊ฐํ๋ฉด ํ ์คํธ๋ฅผ ์ํํ ํ๊ฒ ๋๋ฉฐ, ์ด๋ ๊ฒฐ๊ตญ ์ ํ๋ฆฌ์ผ์ด์ ํ์ง์ ์ ํ๋ก ์ด์ด์ง๋ค. ๋ํ ์ฝ๋๋ฅผ ์์ ํ ๋๋ง๋ค ๋งค๋ฒ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ํ ์คํธํด์ผ ํ๋ ๋ถ๋ด ๋๋ฌธ์ ์ฝ๋ ๊ฐ์ ์ ๋ง์ค์ด๊ฒ ๋๊ณ , ์ด๋ ์ฝ๋์ ํ์ง ๋ํ ์ ํ์ํจ๋ค.
์ด๋ฌํ ๋ฐ๋ณต๋ ํ ์คํธ ์์ ์ ์ฝ๋๋ก ์์ฑํด์ ์๋ํ๋ฅผ ํ๊ฒ ๋๋ฉด ํ ์คํธ์ ๋ํ ๋น์ฉ์ด ์ค์ด๋ค๊ณ , ํ ์คํธ๊ฐ ๋๋ฝ๋๊ฑฐ๋ ์๋ชป ๊ฒ์ฆํ๋ ๋ฑ์ ์ค์๋ ๋ฐฉ์งํ ์ ์๋ค. ๋ํ ์ฝ๋ ์์ ์ ๋ํ ๋๋ ค์์ด ์์ด์ ธ ์ ๊ทน์ ์ผ๋ก ๋ฆฌํฉํ ๋ง ๋ฑ์ ์ฝ๋ ๊ฐ์ ์ ํ ์ ์๊ฒ ๋๊ณ , ์ด๋ ๊ณง ์ฝ๋์ ํ์ง์ ํฅ์์ผ๋ก ์ด์ด์ง๊ฒ ๋๋ค.
์๋ง ์๋ํ ํ ์คํธ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ค์ํ๋ค๋ ์ฌ์ค์๋ ๋ชจ๋๊ฐ ๋์ํ ๊ฒ์ด๋ค. ํ์ง๋ง ๊ทธ๋ ๋ค๊ณ ๋ชจ๋ ํ ์คํธ์ ๋ํด ์๋ํ ํ ์คํธ๋ฅผ ์์ฑํด์ผ ํ๋ ๊ฒ์ ์๋๋ค. ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ ์ง ๋ณด์ํ๋ ๋ฐ๋ ๋น์ฉ์ด ๋ค๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ํฌ์ ๋ ๋น์ฉ์ ๋นํด ์ป๋ ํจ๊ณผ๊ฐ ์ ๋ค๋ฉด ์ฐจ๋ผ๋ฆฌ ์๋์ผ๋ก ํ ์คํธํ๋ ๊ฒ์ด ๋ ๋ซ๋ค. ๊ฐ๋ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ์ต์ง๋ก 100%๋ก ๋ง์ถ๋ ค๊ณ ํ๋ค๋ ๊ฐ, ์ค์ํ ๋ก์ง์ด ๊ฑฐ์ ์๋ ๋จ์ํ ์ฝ๋๊น์ง๋ ๋ชจ๋ ํ ์คํธ๋ฅผ ํ๋ ค๊ณ ํ๋ ๋ฑ ๊ณผํ ๋ชฉํ๋ฅผ ์ค์ ํ๋ ๊ฒฝ์ฐ๋ฅผ ๋ณผ ์ ์๋๋ฐ, ์ด๋ ๋ ์ค์ํ ๊ณณ์ ํฌ์ํ ์ ์๋ ์์คํ ๋น์ฉ์ ๋ญ๋นํ๊ณ ์๋ ๊ฒ์ด๋ค.
์ฌ์ง์ด ๊ธฐ์กด์ ์์ฑ๋์ด ์๋ ํ ์คํธ๋ผ๊ณ ํ๋๋ผ๋, ๋ถํ์ํ๋ค๊ณ ์๊ฐ๋๋ฉด ์ ๊ฑฐํ๋ ๊ฒ ๋ซ๋ค. ํ ์คํธ ์ฝ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ณํํจ์ ๋ฐ๋ผ ๊ณ์ํด์ ๊ด๋ฆฌํด ์ฃผ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ ํ ์ฝ๋์์ ๋ถํ์ํ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ข์ ์ต๊ด์ด๋ฏ์ด, ํ ์คํธ ์ฝ๋์์๋ ๋ถํ์ํ ์ฝ๋๋ ์ ๊ทน์ ์ผ๋ก ์ ๊ฑฐํ๋ฉด์ ์ ์ง ๋ณด์ ๋น์ฉ์ ์ค์ฌ๋๊ฐ๋ ๊ฒ์ด ์ค์ํ๋ค. ์ฌ์ง์ด TDD์ ์ฐฝ์์์ธ ์ผํธ ๋ฐฑ์กฐ์ฐจ๋ ํ ์คํธ์ ๋ํด ๋ค์๊ณผ ๊ฐ์ ์๊ฒฌ์ ๋ฐํ ๋ฐ ์๋ค.
...๋๋ ํ ์คํธ ์ฝ๋๊ฐ ์๋๋ผ ์ ๋๋ก ์๋ํ๋ ์ ํ ์ฝ๋์ ๋ํ ๋ณด์๋ฅผ ๋ฐ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋์ ์์น์ "ํน์ ์์ค์ ์ ๋ขฐ๋ฅผ ๋ณด์ฅํ๋ ์ต์ํ์ ํ ์คํธ ์ฝ๋๋ง ์์ฑํ๋ค"์ด๋ค...(์ค๋ต)... ๋ฑํ ์ค์๋ฅผ ๋ฒํ ๊ฒ ๊ฐ์ง ์์ ์ฝ๋๋ ํ ์คํธํ์ง ์๋๋ค.
...์๋ฒฝํ๊ฒ ๋ชจ๋ ๊ฒ์ ๋ค ํ ์คํธํ๋ ค๊ณ ํ๋ฉด, ํ ์คํธ ์ฝ๋๋ ํ์ฐ์ ์ผ๋ก ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฌ์ด ๋ณต์กํ ์ฝ๋๊ฐ ๋๋ค...(์ค๋ต)... ๋ง์ฝ ์ฝ๋๊ฐ ๋๋ฌด ๊ฐ๋จํด์ ์ค๋ฅ๊ฐ ๋ ํ๋ฅ ์ด ๊ฑฐ์ ์๋ค๋ฉด, ํ ์คํธ๋ฅผ ํ์ง ์๋ ํธ์ด ๋ซ๋ค.
Extreme Programming Explained ์ฑ ๋ด์ฉ ์ค
ํ ์คํธ์ ๊ธฐํ ๋น์ฉ์ ๊ฐ๋ ํด๋ณด๊ธฐ ์ํด์๋ ์ข์ ํ ์คํธ๊ฐ ๋ฌด์์ธ์ง๋ฅผ ์์์ผ ํ๋ค. ์ด๋ค ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋๋์ ๋ฐ๋ผ์ ์์ฑ์ด๋ ์ ์ง๋ณด์์ ๋๋ ๋น์ฉ๋ ๋ค๋ฅด๊ณ , ์ป์ ์ ์๋ ํจ๊ณผ๋ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฌ๋ฉด ์ด๋ค ํ ์คํธ๊ฐ ์ข์ ํ ์คํธ์ผ๊น? ์ฌ์ค ์ด ์ง๋ฌธ์ ๋๋ตํ๋ ๊ฒ์ ์ฐธ ์ด๋ ต๋ค. ํ ์คํธ์ ๊ฐ์น๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๊ฒฉ, ๊ฐ๋ฐ ๋๊ตฌ ๋ฐ ์ธ์ด, ์ฌ์ฉ์ ํ๊ฒฝ ๋ฑ ๋ค์ํ ์์ธ์ ์ํด ์ํฅ์ ๋ฐ๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ง๋ง ๋น๋ก ์๋ฒฝํ ํ ์คํธ์ ๊ธฐ์ค์ ์ก์ ์๋ ์์ด๋, ์ข์ ํ ์คํธ๊ฐ ๊ณตํต์ ์ผ๋ก ๊ฐ๊ณ ์๋ ํน์ง๋ค์ ๋ํด์๋ ์๋ 5๊ฐ์ง ์ ๋๋ก ์ ๋ฆฌํ ์ ์์ ๊ฒ ๊ฐ๋ค.
ํ ์คํธ์ ์คํ ์๋๊ฐ ๋น ๋ฅด๋ค๋ ๊ฒ์ ์ฝ๋๋ฅผ ์์ ํ ๋๋ง๋ค ๋น ๋ฅธ ํผ๋๋ฐฑ์ ๋ฐ์ ์ ์๋ค๋ ์๋ฏธ์ด๋ค. ์ด๋ ๊ฐ๋ฐ ์๋๋ฅผ ๋น ๋ฅด๊ฒ ํ๊ณ , ํ ์คํธ๋ฅผ ๋ ์์ฃผ ์คํํ ์ ์๋๋ก ํ๋ค. ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ธฐ ์ํด ์์ญ ๋ถ์ ๊ธฐ๋ค๋ ค์ผ ํ๋ ํ ์คํธ๋ ๊ฐ๋ฐ ๊ณผ์ ์์ ๊ฑฐ์ ๋ฌด์ฉ์ง๋ฌผ์ ๊ฐ๊น์ธ ๊ฒ์ด๋ค.
์ด ๋ง์ "์ธํฐํ์ด์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ํ ์คํธ๋ฅผ ์์ฑํ๋ผ"๊ฑฐ๋ "๊ตฌํ ์ข ์์ ์ธ ํ ์คํธ๋ฅผ ์์ฑํ์ง ๋ง๋ผ"๋ ์ง์นจ๊ณผ ๊ฐ์ ๋งฅ๋ฝ์ด๋ผ ๋ณผ ์ ์๋ค. ์ข ๋ ๋์ ๊ด์ ์์๋ ํ ์คํธ์ ๋จ์๋ฅผ ๋๋ฌด ์๊ฒ ์ชผ๊ฐ๋ ๊ฒฝ์ฐ๋ ํด๋น๋๋ค. ์์ ๋ฆฌํฉํ ๋ง์๋ ํ ์คํธ๊ฐ ๊นจ์ง๋ค๋ฉด ์ฝ๋๋ฅผ ๊ฐ์ ํ ๋ ๋ฏฟ๊ณ ์์งํ ์ ์์ ๋ฟ ์๋๋ผ, ์คํ๋ ค ํ ์คํธ๋ฅผ ์์ ํ๋ ๋น์ฉ์ ๋ฐ์์์ผ ์ฝ๋ ๊ฐ์ ์ ๋ฐฉํดํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณ๊ฒ ๋๋ค.
๋ฌ๋ฆฌ ํํํ๋ฉด "์๋ชป๋ ์ฝ๋๋ฅผ ๊ฒ์ฆํ๋ ํ ์คํธ๋ ์คํจํด์ผ ํ๋ค"๋ผ๊ณ ํ ์ ์๋ค. ํ ์คํธ๊ฐ ๊ธฐ๋ํ๋ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌ์ฒด์ ์ผ๋ก ๋ช ์ํ์ง ์๊ฑฐ๋ ์์ ๊ฐ๋ฅํ ์๋๋ฆฌ์ค๋ฅผ ๋ชจ๋ ๊ฒ์ฆํ์ง ์์ผ๋ฉด ์ ํ ์ฝ๋์ ์๋ ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ์ง ๋ชปํ ์ ์๋ค. ๋ํ ๋ชจ์ ๊ฐ์ฒด(Mock)๋ฅผ ๊ณผํ๊ฒ ์ฌ์ฉํ๋ฉด ์์กด์ฑ์ด ์๋ ๊ฐ์ฒด์ ๋์์ด ๋ฐ๋์ด๋ ํ ์คํธ ์ฝ๋๊ฐ ์ฐ๊ฒฐ ๊ณผ์ ์์์ ๋ฒ๊ทธ๋ฅผ ์ ํ ๊ฒ์ถํ์ง ๋ชปํ๊ฒ ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ํ ์คํธ ๋ช ์ธ๋ ๊ตฌ์ฒด์ ์ด์ด์ผ ํ๋ฉฐ, ๋ชจ์ ๊ฐ์ฒด์ ์ฌ์ฉ์ ์ต๋ํ ์ง์ํ๋ ๊ฒ์ด ์ข๋ค.
์ด์ ์ฑ๊ณตํ๋ ํ ์คํธ๊ฐ ์ค๋์ ์คํจํ๊ฑฐ๋, ํน์ ๊ธฐ๊ธฐ์์ ์ฑ๊ณตํ๋ ํ ์คํธ๊ฐ ๋ค๋ฅธ ๊ธฐ๊ธฐ์์๋ ์คํจํ๋ค๋ฉด ํด๋น ํ ์คํธ๋ฅผ ์ ๋ขฐํ ์ ์์ ๊ฒ์ด๋ค. ์ฆ, ํ ์คํธ๋ ์ธ๋ถ ํ๊ฒฝ์ ์ํฅ์ ์ต์ํํด์ ์ธ์ ์ด๋์ ์คํํด๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฅํด์ผ ํ๋ค. ์ด๋ฌํ ์ธ๋ถ ํ๊ฒฝ์ ํ์ฌ ์๊ฐ, ํ์ฌ ๊ธฐ๊ธฐ์ OS, ๋คํธ์ํฌ ์ํ ๋ฑ์ ํฌํจํ๋ฉฐ, ์ง์ ์กฐ์ํ ์ ์๋๋ก ๋ชจ์ ๊ฐ์ฒด๋ ๋ณ๋์ ๋๊ตฌ๋ฅผ ํ์ฉํด์ผ๋ง ํ๋ค.
์ ํ ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ์ค์ํ๋ค๋ ๊ฒ์ ์ด์ ๋๊ตฌ๋ ์ธ์ ํ๋ ์ฌ์ค์ด๋ค. ์ข์ ํ์ง์ ์ฝ๋๋ "๊ธฐ๊ณ๊ฐ ์ฝ๊ธฐ ์ข์" ์ฝ๋๊ฐ ์๋ "์ฌ๋์ด ์ฝ๊ธฐ ์ข์" ์ฝ๋์ด๋ค. ํ ์คํธ ์ฝ๋๋ ํ์ง์ ๋์ด๊ธฐ ์ํด ์ ํ ์ฝ๋์ ๋์ผํ ๊ธฐ์ค์ ๊ฐ๊ณ ๊ด๋ฆฌํด์ผ ํ๋ค. ์ฆ, ํ ์คํธ ์ฝ๋๋ฅผ ๋ณด๊ณ ํ ๋์ ์ด๋ค ๋ด์ฉ์ ํ ์คํธํ๋์ง๋ฅผ ํ์ ํ ์ ์์ด์ผ ํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ถํ์ ํด๋น ์ฝ๋๋ฅผ ์์ ํ๊ฑฐ๋ ์ ๊ฑฐํ๊ธฐ๊ฐ ์ด๋ ค์์ ธ์ ๊ด๋ฆฌ ๋น์ฉ์ด ๋์ด๋๊ฒ ๋๋ค. ํ ์คํธ ์ค๋น๋ฅผ ์ํ ์ฅํฉํ ์ฝ๋๊ฐ ๋ฐ๋ณตํด์ ์ฌ์ฉ๋๊ฑฐ๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ฆํ๋ ์ฝ๋๊ฐ ๋ถํ์ํ๊ฒ ๋ณต์กํ๋ค๋ฉด ๋ณ๋์ ํจ์ ๋๋ ๋จ์ธ๋ฌธ์ ๋ง๋ค์ด์ ์ถ์ํ์ํค๋ ๊ฒ์ด ์ข๋ค.
์์์ ์ค๋ช ํ ์ข์ ํ ์คํธ์ ์์ ์ค ํ๋๋ฅผ ๋ง์กฑํ๋ ๊ฒ์ ํฌ๊ฒ ์ด๋ ต์ง ์๋ค. ํ์ง๋ง ๋ฌธ์ ๋ ๊ฐ๊ฐ์ ์์๋ค์ด ์๋ก ์์ถฉ๋๋ ๊ฒฝ์ฐ๊ฐ ์๋ค๋ ๊ฒ์ด๋ค. ์๋ฅผ ๋ค์ด, ํ ์คํธ๋ฅผ ์์ฃผ ์์ ๋จ์๋ก ์์ฑํ๋ฉด ๋น๊ต์ ์คํ ์๋๊ฐ ๋น ๋ฅด๊ณ ๋ชจ๋ ์๋๋ฆฌ์ค๋ฅผ ๊ฒ์ฆํ๋ ๊ฒ์ด ์ฝ๋ค. ๋์ ์์ ๋จ์์ ๋ณ๊ฒฝ์๋ ํ ์คํธ๊ฐ ๊นจ์ง๊ฒ ๋์ด ์ ์ง ๋ณด์ ๋น์ฉ์ด ์ฆ๊ฐํ๊ณ , ๋ชจ์ ๊ฐ์ฒด์ ์ฌ์ฉ์ด ๋์ด๋๊ฒ ๋์ด ๋ฒ๊ทธ๋ฅผ ๊ฒ์ถํ๊ธฐ๊ฐ ์ด๋ ค์์ง๋ค. ๋ํ ํ ์คํธ ๋ช ์ธ๋ฅผ ๋๋ฌด ์์ธํ๊ฒ ์์ฑํ๋ฉด ๋ ๋ง์ ์ํฉ์ ๋ฒ๊ทธ๋ฅผ ๊ฒ์ถํ ์ ์์ง๋ง, ํ ์คํธ ์ฝ๋๊ฐ ๋ณต์กํด์ ธ์ ์๋๊ฐ ๋ช ํํ ๋๋ฌ๋์ง ์์ ์ ์๋ค.
๊ฒฐ๊ตญ ๋ชจ๋ ์์๋ฅผ 100% ๋ง์กฑํ๋ ํ ์คํธ๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ฌ์ค์ ๋ถ๊ฐ๋ฅํ๋ค. ๊ทธ๋ ๊ธฐ์ ํ๋ก์ ํธ, ์๋น์ค ๋ชจ๋ ๋ฑ์ ํน์ฑ์ ๋ฐ๋ผ ์ด๋ค ๊ฒ์ ํฌ๊ธฐํ๊ณ ์ด๋ค ๊ฒ์ ์ป์ ๊ฒ์ธ๊ฐ๋ฅผ ์ ํ๋จํด์ ์ ๋ต์ ์ธ์์ผ ํ๋ค. ํนํ ํ๋ก ํธ์๋ ์ฝ๋๋ ๊ทธ๋ํฝ ์ฌ์ฉ์ ์ธํฐํ์ด์ค(GUI)์ ๋ฐ์ ํ๊ฒ ๊ด๊ณ๋์ด ์๊ณ ์ฌ์ฉ์์ ๋ค์ํ ์คํ ํ๊ฒฝ์ ๊ณ ๋ คํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ํ๋ซํผ์์ ์ฌ์ฉ๋๋ ์ ๋ต์ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๋ค. ์๊ฐ์ ์์, ์๋ฒ์์ ํต์ , ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)๋ฅผ ํตํ ์ ๋ ฅ ๋ฑ์ ๊ฐ๊ฐ ์ด๋ป๊ฒ ํ ์คํธ ํด์ผ ํ ์ง ๊ณ ๋ฏผํ๋ฉฐ ์์ ๋ง์ ์ ๋ต์ ์ธ์์ผ ํ๋ค.
ํ๋ก ํธ์๋ ํ ์คํธ์ ์ ๋ต์ ์ธ์ธ ๋๋ ๋๊ตฌ์ ์ญํ ๋ํ ์์ฃผ ์ค์ํ๋ค. ๊ธ์ ์์ํ ๋ ์ต์ ํ ์คํธ ๋๊ตฌ๋ฅผ ์ธ๊ธํ ๊ฒ์ ์ด๋ฌํ ๋๊ตฌ๋ค์ด ๋ ํจ์จ์ ์ธ ์ ๋ต์ ์ธ์ธ ์ ์๋๋ก ๋์์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ฅผ ๋ค์ด ๊ธฐ์กด E2E(End To End) ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ํ ์คํธ๋ ์ฌ์ฉ์์ ๊ด์ ์์ ํ ์คํธํ ์ ์์ด ๋ด๋ถ ๊ตฌํ์ ์ํฅ์ ๊ฑฐ์ ๋ฐ์ง ์๋ ๋ฐ๋ฉด, ํ ์คํธ ์ฝ๋๊ฐ ๋ณต์กํ๊ณ ์คํ์ด ๋๋ฆฌ๋ฉฐ ๊ฒฐ๊ณผ๊ฐ ์์ ์ ์ด์ง ์๋ค๋ ๋จ์ ์ด ์์๋ค. ํ์ง๋ง ์ต์ E2E ๋๊ตฌ์ธ Cypress๋ฅผ ์ฌ์ฉํ๋ฉด ๊ธฐ์กด E2E ํ ์คํธ์ ์ฅ์ ์ ์ ์งํ๋ฉด์๋ ์ง๊ด์ ์ด๊ณ ๋น ๋ฅด๊ณ ์์ ์ ์ธ ํ ์คํธ๋ฅผ ์์ฑํ ์ ์๋ค. ์ฆ, ํ ์คํธ ๋๊ตฌ์ ๋ฐ์ ์ด ๋ ๋์ ํ ์คํธ ์ ๋ต์ ์ธ์ธ ์ ์๋๋ก ๋์์ฃผ๋ ๊ฒ์ด๋ค.
ํด์ฐ, ์๋๊ฐ ์ ๋ง ๊ธธ์๋ค. ์ด์ ์ผ ์ด ๊ธ์ ์ ๋ชฉ์ด "์ค์ฉ์ ์ธ ํ๋ก ํธ์๋ ํ ์คํธ ์ ๋ต"์ธ ์ด์ ๋ฅผ ๋ชจ๋ ์ค๋ช ํ ๊ฒ ๊ฐ๋ค. ๊ฒฐ๊ตญ ํจ์จ์ ์ธ ํ ์คํธ๋ฅผ ์์ฑํ๊ธฐ ์ํด์๋ ํ๋ก ํธ์๋์ ๋ง๋ ์ค์ฉ์ ์ธ ์ ๋ต์ด ํ์ํ๋ฉฐ, ์ต์ ํ ์คํธ ๋๊ตฌ๋ค์ด ๊ธฐ์กด๋ณด๋ค ๋ ์ค์ฉ์ ์ธ ์ ๋ต์ ์ธ์ธ ์ ์๋๋ก ๋์์ค๋ค๊ณ ํ ์ ์๋ค.
์ง๊ธ๋ถํฐ๋ ๊ฐ๋จํ ํ ์ผ ๊ด๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ ๋ก ํ ์คํธํด๋ณด๋ฉฐ ์ค์ฉ์ ์ธ ํ ์คํธ ์ ๋ต์ด ๋ฌด์์ธ์ง๋ฅผ ์์๋ณด๋๋ก ํ๊ฒ ๋ค.
ํ ์คํธ์ ์ฌ์ฉํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์๋ ค์ง ํ๋ก์ ํธ์ธ TodoMVC๋ฅผ ์ฐธ๊ณ ํ์ผ๋ฉฐ, ๋ฆฌ์กํธ์ ๋ฆฌ๋์ค์ ์กฐํฉ์ผ๋ก ๊ฐ๋ฐํ์๋ค. ํ์ง๋ง ํน์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์ ๋ ์ ๋ต์ ๋ค๋ฃจ๋ ๊ฒ์ ์๋๊ธฐ ๋๋ฌธ์, ๋ฆฌ์กํธ๋ก ์์ฑํ์ง ์์ ์ ํ๋ฆฌ์ผ์ด์ ์๋ ์ถฉ๋ถํ ์ ์ฉํ ์ ์์ ๊ฒ์ด๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด ์คํ๋ ๋ชจ์ต์ ๋ค์๊ณผ ๊ฐ๋ค.
(๊ทธ๋ฆผ 1: TodoMVC ์ ํ๋ฆฌ์ผ์ด์ ์คํ ํ๋ฉด)
(์๋ TodoMVC๋ ์์์ ๋ฐ์ดํฐ ์ ์ฅ์ ์ํด localStorage๋ฅผ ์ฌ์ฉํ๊ณ ์์ง๋ง, ์ด ์์ ์์๋ ์ค์ ์๋ฒ์์ ํต์ ์ ํ ์คํธํ๊ธฐ ์ํด ๋ณ๋์ ๋ก์ปฌ ์๋ฒ๋ฅผ ์ฌ์ฉํ๋๋ก ๋ณ๊ฒฝํ๋ค.)
์๋ฒ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๊ฐ ์ด๋ฏธ ์กด์ฌํ๋ค๊ณ ๊ฐ์ ํ๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒ์ ์คํํ ๋ค์ ํ ์ผ์ ์๋ก ์ถ๊ฐํ๋ ์๋๋ฆฌ์ค๋ฅผ ์๊ฐํด๋ณด์. ๋ด๋ถ์ ์ธ ์คํ ๋จ๊ณ๋ฅผ ๊ณ ๋ คํด ์์๋๋ก ๋์ดํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด๋ค.
๋ง์ ์ผ์ ํ๋ ๊ฒ ๊ฐ์ง๋ง, ๊ฐ๊ฐ์ ๋จ๊ณ๋ฅผ ์ญํ ์ ๋ฐ๋ผ ๋ถ๋ฅํด ๋ณด๋ฉด ํฌ๊ฒ ๋ ๊ฐ์ง๋ก ๋ถ๋ฅํ ์ ์๋ค. ์ฒซ ๋ฒ์งธ๋ ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ๋ฅผ ์๊ฐ์ ์ผ๋ก ํ๋ฉด์ ํ์ํ๋ ์ผ๋ก, 1,3,7์ ํด๋นํ๋ค. ๋ ๋ฒ์งธ๋ ์ธ๋ถ ์ ๋ ฅ(์ฌ์ฉ์ ์ ๋ ฅ, ์๋ฒ ํต์ )์ ๋ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ฌ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ์ผ๋ก, 2,4,5,6์ ํด๋นํ๋ค. ์๋ง MVC ํจํด์์ ์ฃผ๋ก ์ฌ์ฉํ๋ ๋ชจ๋ธ๊ณผ ๋ทฐ์ ๊ตฌ๋ถ๊ณผ ๋น์ทํ๋ค๊ณ ๋ณด๋ฉด ๋ ๊ฒ์ด๋ค.
์ด๋ฌํ ๋ถ๋ฅ๊ฐ ์ค์ํ ์ด์ ๋ ๊ฐ ๋ถ๋ถ์ ํ ์คํธํ ๋ ๋ค๋ฅธ ์ ๋ต์ ์ฌ์ฉํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ํนํ ์๊ฐ์ ์์์ ๋ํ ํ ์คํธ๋ ์ฝ๋๋ฅผ ์ด์ฉํด ์๋ํํ๊ธฐ๊ฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๋ณ๊ฒฝ์ ์๊ฐ์ ์์์ ๊ฐ์ด ํ ์คํธํ๋ฉด ์์ฑ๊ณผ ์ ์ง๋ณด์์ ๋ง์ ๋น์ฉ์ด ๋ ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค๊ณํ ๋ ์ด ๋์ ๋ถ๋ฆฌํด์ ํ ์คํธํ ์ ์๋ ๊ตฌ์กฐ๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ค์ํ๋ค. ๋ฆฌ์กํธ๋ Vue์ ๊ฐ์ ์ต์ ํ๋ ์์ํฌ๋ ์๊ฐ์ ์์์ ์ํ ๊ด๋ฆฌ๋ฅผ ๋ถ๋ฆฌํ ์ ์๋ ๋ฐฉ๋ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๊ณ ์๋ค.
๋จผ์ , ์๊ฐ์ ์์๋ฅผ ์ด๋ป๊ฒ ํ ์คํธํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ดํด๋ณด์.
ํํ ํ๋ก ํธ์๋์์ ์ฌ์ฉํ๋ 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์ ๋ณต์ฌํ๊ณ ํ ์คํธ ์ฝ๋์ ๋ถ์ฌ๋ฃ์ ๋๊ฐ ๋ง๋ค.
์ด๋ฐ ๋ฐฉ์์ ์์๋๋ ๊ฒฐ๊ณผ๋ฅผ ๋จผ์ ์์ฑํ๋ ์ผ๋ฐ์ ์ธ ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ(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>
"
`;
์ฌ์ค ๋ฆฌ์กํธ์ ์ปดํฌ๋ํธ๊ฐ ๋ฐํํ๋ ๊ฒ์ ์ค์ 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์ ์๋ฐํ ๋งํด ์๊ฐ์ ์์์ ๊ฒฐ๊ณผ๋ฌผ์ด ์๋ ์๊ฐ์ ์์๋ฅผ ํํํ๊ธฐ ์ํ ๋ด๋ถ ๊ตฌํ ๋ฐฉ์, ์ฆ "์ด๋ป๊ฒ"์ ๊ฐ๊น๋ค. ์๊ฐ์ ์์์ ์ต์ข ๊ฒฐ๊ณผ๋ฌผ์ HTML ๊ตฌ์กฐ๊ฐ ์๋ ํ๋ฉด์ ํ์๋๋ ์ด๋ฏธ์ง์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ฌํ ๊ตฌํ ์ข
์์ ์ธ ํ
์คํธ๋ ์์ ๋ณ๊ฒฝ์๋ ๊นจ์ง๊ธฐ ์ฌ์ ๊ด๋ฆฌ ๋น์ฉ์ ์ฆ๊ฐ์ํจ๋ค. Header
์ปดํฌ๋ํธ์ ๋ํ ํ
์คํธ๋ฅผ ์๋ก ๋ค์ด ๋ณด์. ๋ง์ฝ header
ํ๊ทธ ๋์ div
ํ๊ทธ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, new-todo
ํด๋์ค๋ฅผ add-todo
๋ก ๋ณ๊ฒฝํ๋ฉด ์ค์ ๊ฒฐ๊ณผ ์ด๋ฏธ์ง์ ๋ณํ๊ฐ ์๋๋ผ๋ ํ
์คํธ๊ฐ ๊นจ์ง๊ฒ ๋๋ค. ์ด์ ๊ฐ์ด HTML์ด๋ CSS๋ฅผ ๋ฆฌํฉํ ๋งํ ๋์๋ ํ
์คํธ ์ฝ๋๋ฅผ ๊ฐฑ์ ์์ผ์ฃผ์ด์ผ ํ๋ฉฐ, ์ด๋ก ์ธํด ๊ฐ๋ฐ ์๋๊ฐ ์คํ๋ ค ๋๋ ค์ง๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
์ข์ ํ ์คํธ์ ๋๋ค๋ฅธ ์กฐ๊ฑด์ "์๋๊ฐ ๋ช ํํ๊ฒ ๋๋ฌ๋์ผ ํ๋ค"์ด๋ค. ํ์ง๋ง HTML์ ๊ตฌ์กฐ๋ ์ค์ ํ๋ฉด์ ๊ทธ๋ ค์ง๋ ์ด๋ฏธ์ง๋ฅผ ๊ทธ๋๋ก ๋ํ๋ด์ง ์๋๋ค. ๋น๋ก CSS๊น์ง ํจ๊ป ํ ์คํธํ๋ค๊ณ ํ ์ง๋ผ๋, ๋ณต์กํ HTML๊ณผ CSS์ ์ฝ๋๋ฅผ ๋ณด๊ณ ์ค์ ์ ์ด๋ฏธ์ง๋ฅผ ๋จธ๋ฆฟ์์ ์ ํํ๊ฒ ๊ทธ๋ ค๋ด๋ ๊ฒ์ ์ฌ์ค์ ๋ถ๊ฐ๋ฅํ๋ค. ํ ์คํธ๋ฅผ ์์ฑํ ๋ ์์๋๋ HTML ๊ฒฐ๊ด๊ฐ์ ๋ฏธ๋ฆฌ ์ฝ๋๋ก ์์ฑํ ์ ์๋ ์ด์ ๋ ๋์ผํ๋ค. ๊ฒฐ๊ตญ ๋ธ๋ผ์ฐ์ ์ ํ์๋ ๊ฒฐ๊ณผ๋ฅผ ์ค์ ๋์ผ๋ก ํ์ธํ ๋ค์์์ผ, ์ง๊ธ ์์ฑ๋ HTML์ด ์ค์ ์ํ๋ ๊ฒฐ๊ณผ๋ผ๋ ๊ฒ์ ํ์ ํ ์ ์๋ ๊ฒ์ด๋ค.
์ด๋ฐ ํ ์คํธ ์ฝ๋๋ ๊ด๋ฆฌ๊ฐ ์ด๋ ต๋ค. ๋ค๋ฅธ ๊ฐ๋ฐ์, ํน์ ์ฌ์ง์ด ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ ๋ณธ์ธ์กฐ์ฐจ ๋์ค์ ์ฝ๋๋ฅผ ๋ณผ ๋ ์ด๋ค ์๋๋ฅผ ๊ฐ๊ณ ์๋์ง๋ฅผ ํ์ ํ๊ธฐ๊ฐ ์ด๋ ต๋ค. ๊ฒฐ๊ตญ, ํ ์คํธ๊ฐ ๊นจ์ง ๋๋ง๋ค ๋ณ๋ค๋ฅธ ์๊ฐ์์ด ์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ณต์ฌํด์ ๋ถ์ฌ๋ฃ๊ฑฐ๋ ์ค๋ ์ท์ ๊ฐฑ์ ํ๊ฒ ๋๊ณ , ์ด๋ ํ ์คํธ์ ์ ๋ขฐ๋์ ํจ๊ณผ๋ฅผ ๋จ์ด๋จ๋ฆฌ๊ฒ ๋๋ค.
๊ฒฐ๊ตญ ์๊ฐ์ ์์๋ ์ค์ ํ๋ฉด์ ํ์๋๋ ์ด๋ฏธ์ง๋ฅผ ํฝ์ ๋จ์๋ก ๋น๊ตํ์ง ์๋ ์ด์ ํจ๊ณผ์ ์ธ ํ ์คํธ๋ผ๊ณ ํ๊ธฐ ์ด๋ ต๋ค. ๊ทธ๋ ๋ค๋ฉด ๋จ์ ๋ฐฉ๋ฒ์ ์ค์ ๋ทฐ ์ปดํฌ๋ํธ๋ฅผ ๋ธ๋ผ์ฐ์ ์์ ์คํํ ๋ค์ ํ๋ฉด์ ํ์๋ ๊ฒฐ๊ณผ๋ฅผ ์คํฌ๋ฆฐ์ท์ผ๋ก ์ ์ฅํด์ ์์๋๋ ์ด๋ฏธ์ง์ ๋น๊ตํ๋ ๋ฐฉ๋ฒ์ผ ๊ฒ์ด๋ค. ๋์์ธ ์์์ ์์๋๋ ๊ฒฐ๊ด๊ฐ์ผ๋ก ์ฌ์ฉํ๋ค๋ฉด, ๋งค๋ฒ ์ฝ๋๋ฅผ ์์ฑํ ๋๋ง๋ค ์คํฌ๋ฆฐ์ท์ ์์ฑํด์ ๋์์ธ ์์๊ณผ ๋น๊ตํด๋ณด๊ณ ๋์ผํ์ง๋ฅผ ๊ฒ์ฆํ ์ ์๋ค.
ํ์ง๋ง ์ด ๋ฐฉ๋ฒ ์ญ์ ๊ฐ๋จํ์ง ์๋ค. ๋์์ธ ์์์ ๋ณดํต ๊ฐ๋ฐ์ ํ์ํ ์ปดํฌ๋ํธ ๋จ์๋ก ์ ํํ ๋ถ๋ฆฌ๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ํ ๋์์ธ ์์์๋ ๋ฐ์ ๊ฐ๋ฅํ ๋ชจ๋ ์๋๋ฆฌ์ค๊ฐ ๊ณ ๋ ค๋์ด ์์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์, ์ปดํฌ๋ํธ๊ฐ ๊ฐ๋ ๋ชจ๋ ์ํ๋ฅผ ๊ฒ์ฆํ๊ธฐ ์ํ ๊ธฐ๋๊ฐ์ผ๋ก ์ฌ์ฉํ๊ธฐ์๋ ์ ์ ํ์ง ์๋ค. ๊ทธ ์ธ์๋ ํ๋ฉด ํด์๋, ๋ธ๋ผ์ฐ์ ์ ๊ณ ์ ํ ๋ ๋๋ง ๋ฐฉ์, ๋ทฐ ํฌํธ์ ํฌ๊ธฐ ๋ฐ ์ฌ๋ฐฑ ๋ฑ์ ๋ค์ํ ์กฐ๊ฑด๋ค์ ๊ณ ๋ คํ๋ฉด์ ์ด๋ฏธ์ง๋ฅผ ํฝ์ ๋จ์๋ก ๋น๊ตํ๋ ๊ฒ์ ๊ธฐ์ ์ ์ผ๋ก ๋ง์ ์ด๋ ค์์ด ์๋ค.
ํ๋ฌดํ๊ฒ ๋ค๋ฆด ์๋ ์์ง๋ง, ๋ด ์๊ฐ์ ํ์ฌ ๊ฐ์ฅ ํจ์จ์ ์ธ ์๊ฐ์ ํ ์คํธ ๋๊ตฌ๋ ์ฌ์ ํ "๊ฐ๋ฐ์์ ๋"์ด๋ค. ๋น๋ก ์๊ฐ์ ํ ์คํธ์ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ์ต๊ทผ์๋ ๋ง์ ๋๊ตฌ๋ค์ด ๋ง๋ค์ด์ง๊ณ ์์ง๋ง, ์์ง "๊ฐ๋ฐ์์ ๋"๋ณด๋ค ํจ์จ์ ์ธ ํด๊ฒฐ์ฑ ์ ์ ์ํ์ง๋ ๋ชปํ๊ณ ์๋ค๊ณ ์๊ฐํ๋ค. ์ค์ HTML๊ณผ CSS๋ฅผ ๊ฐ๋ฐํ๋ ๊ณผ์ ์ ์๊ฐํด๋ณด์. ๊ฐ๋ฐ์๋ HTML ํ๊ทธ ํ๋, CSS์ ์คํ์ผ ํ๋๋ฅผ ์ถ๊ฐํ๊ณ ์์ ํ ๋๋ง๋ค ๋งค๋ฒ ๋์ผ๋ก ํ๋ฉด์ ํ์ธํ๊ณ , ๋งค ์๊ฐ ๋ค๋ฅธ ๊ฒฐ๊ด๊ฐ์ ๊ธฐ๋ํ๋ค. ์ด๋ฌํ ์ผ๋ จ์ ๊ณผ์ ์ ๋ชจ๋ ์๋ํํ ์ ์๋ ๋๊ตฌ๊ฐ ๋์ค๊ธฐ๊น์ง๋ ์์ง ์๊ฐ์ด ๋ ํ์ํ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ์๊ฐ์ ํ ์คํธ๋ ์๋ํํ ์ ์๋ ๊ฒ์ผ๊น? ๋๋ต์ ๋ฐ๋ฐ์ด๋ค. ์์ง์ ์๋ฒฝํ ์๋ํ๋ฅผ ํ ์ ์์ง๋ง, UI๋ฅผ ๊ฐ๋ฐํ๋ ๋ฐฉ์์ ๊ฐ์ ํ ์๋ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ์ํ ์๋ก์ด ๋์์ ์ ์ํด์ฃผ๋ ๋๊ตฌ๊ฐ ๋ฐ๋ก ์คํ ๋ฆฌ๋ถ์ด๋ค.
(์ต๊ทผ์๋ Applitools, Chromatic์ ๊ฐ์ด ๋ธ๋ผ์ฐ์ ๋ ๋๋ง ๋ฐฉ์์ ์ํ ์ฐจ์ด๋ฅผ ์ดํดํ๊ณ ์ด๋ฏธ์ง๋ฅผ ๋น๊ตํด ์ฃผ๋ ์๊ฐ์ ํ ์คํธ ๋๊ตฌ๋ค์ด ๋ง์ด ๋ฐ์ ํ๊ณ ์๋ค. ํ์ง๋ง ์ด๋ฌํ ๋๊ตฌ๋ค์ ์ฃผ๋ก ํ๊ท ํ ์คํธ์ ์ฉ๋๋ก ์ฌ์ฉ๋๋ฉฐ, ์์ผ๋ก ์๊ฐํ ์คํ ๋ฆฌ๋ถ๊ณผ ๊ฒฐํฉํ์ฌ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋ ํจ๊ณผ์ ์ด๋ค. 2๋ถ์์ ์คํ ๋ฆฌ๋ถ์ ์ฌ์ฉ๋ฒ๊ณผ ํจ๊ป ์ด๋ฌํ ์๊ฐ์ ํ๊ท ํ ์คํธ ๋๊ตฌ๋ค์ ์๊ฐํ๋๋ก ํ๊ฒ ๋ค.)
๊ณต์ ํํ์ด์ง์์๋ ์คํ ๋ฆฌ๋ถ์ "UI ๊ฐ๋ฐ ํ๊ฒฝ"์ด๋ผ๊ณ ์๊ฐํ๊ณ ์๋ค. ์ฌ์ค์ ํ ์คํธ ๋๊ตฌ๋ผ๊ธฐ ๋ณด๋ค๋ UI๊ฐ๋ฐ์ ์ํ ๋ ๋์ ํ๊ฒฝ์ ์ ๊ณตํด์ฃผ๋ ๋๊ตฌ์ ๊ฐ๊น๋ค. ์ผ์ข ์ ์ปดํฌ๋ํธ ๊ฐค๋ฌ๋ฆฌ๋ผ๊ณ ํ ์ ์๋๋ฐ, ์๋์ ๊ทธ๋ฆผ์์ ๋ณผ ์ ์๋ฏ์ด ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋๋ ๋ชจ๋ ์ปดํฌ๋ํธ์ ์กฐํฉ์ ํ์ด์ง๋ณ๋ก ๋ฑ๋กํด ๋๊ณ ํธ๋ฆฌํ๊ฒ ๋์ผ๋ก ํ์ธํ ์ ์๋๋ก ๋ค๋น๊ฒ์ด์ ์ ์ ๊ณตํ๋ค.
(๊ทธ๋ฆผ 2: ์คํ ๋ฆฌ๋ถ ์์ - ํ ์คํธ ํ์ผ์์ ์ฌ์ฉ๋๋ ์ปดํฌ๋ํธ์ ๋ชฉ๋ก)
๊ทธ๋ฌ๋ฉด ์ด ๋๊ตฌ๊ฐ ์ด๋ป๊ฒ ์๊ฐ์ ํ ์คํธ๋ฅผ ๋์์ค ์ ์์๊น? ๊ธ์ ์๋ถ๋ถ์์ ์ฝ๋๋ฅผ ์ ์ฅํ ํ์ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๋ ๋ชจ๋ ๊ณผ์ ์ด ์ฌ์ค์ ๋ชจ๋ ํ ์คํธ๋ผ๊ณ ํ๋ ๊ฒ์ ๊ธฐ์ตํด๋ณด์. ์ปดํฌ๋ํธ์ ๋ชจ๋ ๊ฐ๋ฅํ ์กฐํฉ๊ณผ ์ ๋ ฅ๊ฐ์ด ๋ฏธ๋ฆฌ ์ ์ฅ๋ ์ํ๋ ์ํ๋ก ๋ฑ๋ก๋์ด ์์ผ๋ฉด ์ด๋ฌํ ๊ณผ์ ์์์ ๋ฐ๋ณต๋ ์์ ์ ์๋น ๋ถ๋ถ ์๋ํํ ์ ์๋ค.
์ข ๋ ์์ธํ ์ค๋ช ์ ์ํด ํ์ผ ์ ๋ก๋ ์๋ฃ ํ์ ๋ด์ ์์ด์ฝ ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ๋ฅผ ์๋ก ๋ค์ด๋ณด์. ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ํ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๊ธฐ ์ํด์๋ ์๋ก์ด ํ์ผ์ ์ ๋ก๋ํ๊ณ ์ ๋ก๋๊ฐ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ค. ํ์ ์ด ํ์๋์ด ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๋๋ฐ, ์์ด์ฝ์ด ๋๋ฌด ์ปค์ ๊ธ์๋ฅผ ๋ฎ์ด๋ฒ๋ฆฐ ๊ฒ์ ํ์ธํ๋ค. ์ฝ๋๋ฅผ ๋ค์ ์์ ํ ํ์ ํ์ธํ๊ธฐ ์ํด ๋ ๋ค์ ํ์ผ์ ์ ๋ก๋ํ๊ณ ์๋ฃํ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค. ๋ค์ ํ์ธํ๋๋ ์ด๋ฒ์ ์์ด์ฝ์ด ๋๋ฌด ์์ ๊ฒ ๊ฐ๋ค. ์ฝ๋๋ฅผ ์์ ํ๊ณ ๋ ๋ค์ ์์ ์์ ์ ๋ฐ๋ณตํ๋ค.
์ด๋ฌํ ์ผ๋ จ์ ๋ฐ๋ณต ์์ ์ ์๊ฐ์ ์์์ ๋ํ ํ ์คํธ๊ฐ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ์ ๊ฒฐํฉ๋์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ผ์ ์ ๋ก๋ํ๊ณ ์ ๋ก๋ ๋๊ธฐ๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๊ณผ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ๋ฅผ ์ํ๋ ์ํ๋ก ๋ง๋ค๊ธฐ ์ํ ์์ ์ด๋ค. ๋ง์ฝ ์คํ ๋ฆฌ๋ถ์ "์ ๋ก๋ ์๋ฃ ํ์ " ์ปดํฌ๋ํธ๊ฐ ๋ฐ๋ก ๋ฑ๋ก๋์ด ์๊ฑฐ๋, "์ ๋ก๋ ์๋ฃ ํ์ ์ด ๋ณด์ฌ์ง ์ํ"๊ฐ ๋ฏธ๋ฆฌ ๋ฑ๋ก๋์ด ์์๋ค๋ฉด, ๋ฐ๋ณต์ ์ธ ์ํ ์กฐ์ ๊ณผ์ ์ด ํ์ ์์ด ๋น์ฃผ์ผ ์์์ ๋ณ๊ฒฝ๋ง์ ํ์ธํ๋ฉด์ ์ฝ๋๋ฅผ ์์ ํ ์ ์์์ ๊ฒ์ด๋ค.
์ง๊ธ๊น์ง ํ ์คํธ ์๋ํ์ ์ค์์ฑ๊ณผ ์ข์ ํ ์คํธ ์ฝ๋์ ์กฐ๊ฑด, ํ ์คํธ ์ ๋ต์ด ์ ์ค์ํ์ง์ ๋ํด์ ์์๋ณด์๋ค. ๊ทธ๋ฆฌ๊ณ ์๊ฐ์ ํ ์คํธ๋ฅผ ์๋ํํ๋ ๊ฒ์ด ์ ์ด๋ ค์ด์ง, ์คํ ๋ฆฌ๋ถ์ด ์ด๋ค ๋์์ ์ ์ํ๊ณ ์๋์ง์ ๋ํด์๋ ์ค๋ช ํ๋ค. ๋ฌผ๋ก ํ๋ก ํธ์๋ ์ฝ๋๋ฅผ ํ ์คํธํ๋ ์ ๋ต์ ๋ค์ํ๋ฉฐ, ์ด ๊ธ์์ ์ ์ํ๋ ๋ฐฉํฅ์ด ๊ผญ ๋ง์ง ์์ ์๋ ์๋ค. ์ด ๊ธ์ ์ต๋ํ "์ค์ฉ์ ์ธ" ์ ๋ต์ด ๋ฌด์์ธ๊ฐ๋ฅผ ํ๊ตฌํด ๊ฐ๋ ๊ณผ์ ์์ ์์์ฃผ๊ธธ ๋ฐ๋๋ค.
2๋ถ์์๋ ์ค์ ๋ก ์คํ ๋ฆฌ๋ถ์ ์ฌ์ฉํด๋ณด๋ฉด์ ์๊ฐ์ ํ ์คํธ๋ฅผ ์ํ ์ข ๋ ์์ธํ ์ ๋ต์ ์์๋ณด๋๋ก ํ๊ฒ ๋ค.
(์์ง ๋ค๋ฃจ์ง ๋ชปํ "์ดํ๋ฆฌ์ผ์ด์ ์ ์ํ ๊ด๋ฆฌ"์ ๋ํ ํ ์คํธ๋ 3๋ถ์์ Cypress์ ํจ๊ป ์ค๋ช ํ ์์ ์ด๋ค.)