๊ฒฌ๊ณ ํ JavaScript ํ ์คํธ ์๋ํ ์ธํ๋ผ ๊ตฌ์ถ์ ํ์ํฉ๋๋ค. ์์ ์ ์ธ ์ํํธ์จ์ด ๊ฒ์ฆ์ ์ํ ํ์ ๊ตฌ์ฑ ์์, ํ๋ ์์ํฌ, ๋ชจ๋ฒ ์ฌ๋ก ๋ฐ ์ค์ ๊ตฌํ ์ ๋ต์ ๋ค๋ฃน๋๋ค.
JavaScript ํ ์คํธ ์๋ํ ์ธํ๋ผ: ํฌ๊ด์ ์ธ ๊ฒ์ฆ ์์คํ
์ค๋๋ ๋น ๋ฅด๊ฒ ๋ณํํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๊ฒฝ์์ ๊ฒฌ๊ณ ํ ํ ์คํธ๋ ๋ฌด์๋ณด๋ค ์ค์ํฉ๋๋ค. ์ ์ ์๋๊ณ ์๋ํ๋ ํ ์คํธ ์ธํ๋ผ๋ ๋ ์ด์ ์ฌ์น๊ฐ ์๋๋ผ JavaScript ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ง, ์ ๋ขฐ์ฑ ๋ฐ ์ ์ง ๊ด๋ฆฌ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํ ํ์ ์์์ ๋๋ค. ์ด ํฌ๊ด์ ์ธ ๊ฐ์ด๋๋ ๋จ์, ํตํฉ, ์๋ ํฌ ์๋ ํ ์คํธ์ ์ด๋ฅด๋ ๊ฐ๋ ฅํ JavaScript ํ ์คํธ ์๋ํ ์ธํ๋ผ๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํ ํ์ ๊ตฌ์ฑ ์์, ํ๋ ์์ํฌ ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ํ์ํฉ๋๋ค.
JavaScript ํ ์คํธ ์๋ํ ์ธํ๋ผ์ ํฌ์ํด์ผ ํ๋ ์ด์
๊ฒฌ๊ณ ํ ํ ์คํธ ์ธํ๋ผ๋ ์๋ง์ ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
- ํ๊ท ๋ฒ๊ทธ ๊ฐ์: ์๋ํ๋ ํ ์คํธ๋ ์๋ก์ด ์ฝ๋ ๋ณ๊ฒฝ์ผ๋ก ์ธํด ๋ฐ์ํ๋ ํ๊ท๋ฅผ ์ ์ํ๊ฒ ์๋ณํ์ฌ ๊ฒฐํจ์ด ํ๋ก๋์ ํ๊ฒฝ์ ๋๋ฌํ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๊ธ๋ก๋ฒ ์ ์ ์๊ฑฐ๋ ํ๋ซํผ์์ ์ผํ ์นดํธ ๊ธฐ๋ฅ์ ๋ํ ์ฌ์ํ ๋ณ๊ฒฝ์ด ํน์ ์ง์ญ ์ฌ์ฉ์์ ๊ฒฐ์ ํ๋ก์ธ์ค๋ฅผ ์๋์น ์๊ฒ ์ค๋จ์ํค๋ ์ํฉ์ ์์ํด ๋ณด์ญ์์ค. ํฌ๊ด์ ์ธ ํ๊ท ํ ์คํธ๋ ์ด ๋ฌธ์ ๊ฐ ๊ณ ๊ฐ์๊ฒ ์ํฅ์ ๋ฏธ์น๊ธฐ ์ ์ ๋ฐ๊ฒฌํ ์ ์์ต๋๋ค.
- ๋ ๋น ๋ฅธ ํผ๋๋ฐฑ ๋ฃจํ: ์๋ํ๋ ํ ์คํธ๋ ๊ฐ๋ฐ์์๊ฒ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ ์ฃผ๊ธฐ ์ด๊ธฐ์ ๋ฒ๊ทธ๋ฅผ ์๋ณํ๊ณ ์์ ํ ์ ์๊ฒ ํฉ๋๋ค. ์ด๋ ํนํ ์ ์์ผ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ค์ํฉ๋๋ค.
- ์ฝ๋ ํ์ง ํฅ์: ํ ์คํธ๋ฅผ ์์ฑํ๋ฉด ๊ฐ๋ฐ์๊ฐ ๋ ๋ชจ๋ํ๋๊ณ , ํ ์คํธ ๊ฐ๋ฅํ๋ฉฐ, ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํ๋๋ก ์ฅ๋ คํฉ๋๋ค. ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ(TDD)์ ์ด ์์น์ ๊ทน๋จ์ผ๋ก ๋์ด์ฌ๋ ค ์ฝ๋ ์์ฒด๋ณด๋ค ํ ์คํธ๋ฅผ ๋จผ์ ์์ฑํฉ๋๋ค.
- ๋ฐฐํฌ์ ๋ํ ์์ ๊ฐ ์ฆ๊ฐ: ํฌ๊ด์ ์ธ ํ ์คํธ ์ค์ํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฒ์ ์ ๋ฐฐํฌํ ๋ ์์ ๊ฐ์ ์ค๋๋ค. ์ฝ๋๊ฐ ์ฒ ์ ํ ํ ์คํธ๋์๋ค๋ ๊ฒ์ ์๋ฉด ํ๋ก๋์ ์ค๋จ ์ํ์ด ์ค์ด๋ญ๋๋ค.
- ์๋ ํ ์คํธ ๋ ธ๋ ฅ ๊ฐ์: ์๋ํ๋ QA ์์ง๋์ด๋ฅผ ๋ฐ๋ณต์ ์ธ ์๋ ํ ์คํธ ์์ ์์ ํด๋ฐฉ์์ผ ๋ ๋ณต์กํ ํ์์ ํ ์คํธ ๋ฐ ์ฌ์ฉ์ ๊ฒฝํ ๊ฐ์ ์ ์ง์คํ ์ ์๊ฒ ํฉ๋๋ค. ์ด๋ฌํ ์ด์ ์ ์ ํ์ ๋ ์ ๋ต์ ์ด๊ณ ์ฌ์ ์๋ฐฉ์ ์ธ QA ํ๋ก์ธ์ค๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
- ํ์ ๊ฐ์ : ์ ๋ฌธ์ํ๋ ํ ์คํธ ์ธํ๋ผ๋ ๊ฐ๋ฐ์, ํ ์คํฐ ๋ฐ ์ด์ํ ๊ฐ์ ํ์ ์ ์ด์งํฉ๋๋ค. ๋ชจ๋ ์ฌ๋์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ง๊ณผ ์ด๋ฅผ ์ ์งํ๊ธฐ ์ํ ํ๋ก์ธ์ค์ ๋ํด ๊ณต์ ๋ ์ดํด๋ฅผ ๊ฐ๊ฒ ๋ฉ๋๋ค.
JavaScript ํ ์คํธ ์๋ํ ์ธํ๋ผ์ ํ์ ๊ตฌ์ฑ ์์
์์ ํ JavaScript ํ ์คํธ ์๋ํ ์ธํ๋ผ๋ ์ฌ๋ฌ ์ฃผ์ ๊ตฌ์ฑ ์์๋ฅผ ํฌํจํฉ๋๋ค:
1. ํ ์คํธ ํ๋ ์์ํฌ
ํ ์คํธ ํ๋ ์์ํฌ๋ ํ ์คํธ๋ฅผ ์์ฑํ๊ณ ์คํํ๊ธฐ ์ํ ๊ตฌ์กฐ์ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ธ๊ธฐ ์๋ JavaScript ํ ์คํธ ํ๋ ์์ํฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- Jest: Facebook์์ ๊ฐ๋ฐํ Jest๋ React, Vue, Angular ๋ฐ ๊ธฐํ JavaScript ํ๋ก์ ํธ์์ ๋ณ๋ ์ค์ ์์ด ๋ฐ๋ก ์๋ํ๋ ์ ๋ก-๊ตฌ์ฑ(zero-configuration) ํ ์คํธ ํ๋ ์์ํฌ์ ๋๋ค. ๋ด์ฅ๋ ๋ชจํน(mocking), ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง ๋ฐ ์ค๋ ์ท ํ ์คํธ ๊ธฐ๋ฅ์ด ํฌํจ๋์ด ์์ต๋๋ค. Jest๋ ๋จ์์ฑ๊ณผ ์ฌ์ฉ ํธ์์ฑ์ ์ค์ ์ ๋์ด ๋ง์ ํ์์ ์ธ๊ธฐ ์๋ ์ ํ์ ๋๋ค.
- Mocha: ํ๋ถํ ๊ธฐ๋ฅ ์ธํธ๋ฅผ ์ ๊ณตํ๊ณ ๋ค์ํ ์ด์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(์: Chai, Should.js)๋ฅผ ์ง์ํ๋ ์ ์ฐํ๊ณ ํ์ฅ ๊ฐ๋ฅํ ํ ์คํธ ํ๋ ์์ํฌ์ ๋๋ค. Mocha๋ ๋ ๋ง์ ์ฌ์ฉ์ ์ ์ ๋ฐ ๋ค๋ฅธ ๋๊ตฌ์์ ํตํฉ์ ํ์ฉํฉ๋๋ค.
- Jasmine: ๋ช ํํ๊ณ ์ฝ๊ธฐ ์ฌ์ด ํ ์คํธ ์ฌ์์ ๊ฐ์กฐํ๋ ํ๋ ์ฃผ๋ ๊ฐ๋ฐ(BDD) ํ๋ ์์ํฌ์ ๋๋ค. Jasmine์ ์ข ์ข Angular ํ๋ก์ ํธ์ ํจ๊ป ์ฌ์ฉ๋์ง๋ง ๋ชจ๋ JavaScript ์ฝ๋์ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค.
- Cypress: ์ต์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํด ์ค๊ณ๋ ์๋ ํฌ ์๋ ํ ์คํธ ํ๋ ์์ํฌ์ ๋๋ค. Cypress๋ ๋ธ๋ผ์ฐ์ ์ ์ํธ ์์ฉํ๊ณ ์ฌ์ฉ์ ์ํธ ์์ฉ์ ์๋ฎฌ๋ ์ด์ ํ๊ธฐ ์ํ ๊ฐ๋ ฅํ API๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ณต์กํ ์ฌ์ฉ์ ํ๋ฆ๊ณผ UI ์ํธ ์์ฉ ํ ์คํธ์ ํ์ํฉ๋๋ค.
- Playwright: Microsoft์์ ๊ฐ๋ฐํ Playwright๋ ์ฌ๋ฌ ๋ธ๋ผ์ฐ์ (Chromium, Firefox, WebKit)์ ํฌ๋ก์ค ํ๋ซํผ ํ ์คํธ๋ฅผ ์ง์ํ๋ ์ต์ ์๋ ํฌ ์๋ ํ ์คํธ ํ๋ ์์ํฌ์ ๋๋ค. ์๋ ๋๊ธฐ ๋ฐ ๋คํธ์ํฌ ๊ฐ๋ก์ฑ๊ธฐ์ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
ํ๋ ์์ํฌ ์ ํ์ ํ๋ก์ ํธ์ ํน์ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ํ๋ก์ ํธ ๊ท๋ชจ, ๋ณต์ก์ฑ, ํ ์ ๋ฌธ์ฑ ๋ฐ ์ํ๋ ์ฌ์ฉ์ ์ ์ ์์ค๊ณผ ๊ฐ์ ์์๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
2. ์ด์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ด์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ ์คํธ์ ์ค์ ๊ฒฐ๊ณผ๊ฐ ์์ ๊ฒฐ๊ณผ์ ์ผ์นํ๋์ง ํ์ธํ๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ์ด์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- Chai: ์ฌ๋ฌ ์คํ์ผ์ ์ด์ค์ (์: expect, should, assert)์ ์ง์ํ๋ ๋ค์ฌ๋ค๋ฅํ ์ด์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- Should.js: ๋ ์์ฐ์ด์ ๊ฐ๊น์ด ์ด์ค์ ์ ์ํด `should` ํค์๋๋ฅผ ์ฌ์ฉํ๋ ํํ๋ ฅ์ด ํ๋ถํ ์ด์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- Assert (Node.js): Node.js์ ๋ด์ฅ ์ด์ค์ ๋ชจ๋์ ๋๋ค. ๊ธฐ๋ณธ์ ์ด์ง๋ง ๊ฐ๋จํ ํ ์คํธ์๋ ์ข ์ข ์ถฉ๋ถํฉ๋๋ค.
Jest๋ ์์ฒด ๋ด์ฅ ์ด์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจํ๊ณ ์์ด ๋ณ๋์ ์ข ์์ฑ์ด ํ์ ์์ต๋๋ค.
3. ๋ชจํน ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๋ชจํน ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ข ์์ฑ์ ์ ์ด๋ ๋์ฒด๋ฌผ(๋ชฉ, mock)๋ก ๊ต์ฒดํ์ฌ ํ ์คํธ ๋์ ์ฝ๋๋ฅผ ๊ฒฉ๋ฆฌํ ์ ์์ต๋๋ค. ์ด๋ ๊ฐ๋ณ ๊ตฌ์ฑ ์์๋ฅผ ๊ฒฉ๋ฆฌํ์ฌ ํ ์คํธํ๋ ค๋ ๋จ์ ํ ์คํธ์ ํ์์ ์ ๋๋ค. ์ธ๊ธฐ ์๋ ๋ชจํน ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- Sinon.JS: ์คํ์ด(spy), ์คํ (stub) ๋ฐ ๋ชฉ(mock)์ ์ ๊ณตํ๋ ๊ฐ๋ ฅํ ๋ชจํน ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- Testdouble.js: ๋ช ํ์ฑ๊ณผ ์ ์ง ๊ด๋ฆฌ์ฑ์ ๊ฐ์กฐํ๋ ๋ชจํน ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
Jest๋ ๋ํ ๋ด์ฅ ๋ชจํน ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์์ฑ์ ์ค์ ๋๋ค.
4. ํ ์คํธ ๋ฌ๋
ํ ์คํธ ๋ฌ๋๋ ํ ์คํธ ์ค์ํธ๋ฅผ ์คํํ๊ณ ๊ฒฐ๊ณผ์ ๋ํ ํผ๋๋ฐฑ์ ์ ๊ณตํฉ๋๋ค. ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- Jest CLI: Jest ํ ์คํธ๋ฅผ ์คํํ๊ธฐ ์ํ ๋ช ๋ น์ค ์ธํฐํ์ด์ค์ ๋๋ค.
- Mocha CLI: Mocha ํ ์คํธ๋ฅผ ์คํํ๊ธฐ ์ํ ๋ช ๋ น์ค ์ธํฐํ์ด์ค์ ๋๋ค.
- Karma: ์ค์ ๋ธ๋ผ์ฐ์ ์์ ํ ์คํธ๋ฅผ ์คํํ ์ ์๊ฒ ํด์ฃผ๋ ํ ์คํธ ๋ฌ๋์ ๋๋ค. Karma๋ ์ข ์ข Angular ํ๋ก์ ํธ์ ํจ๊ป ์ฌ์ฉ๋ฉ๋๋ค.
5. ์ง์์ ์ธ ํตํฉ(CI) ์์คํ
CI ์์คํ ์ ์ฝ๋๊ฐ ๋ฆฌํฌ์งํ ๋ฆฌ์ ํธ์๋ ๋๋ง๋ค ์๋์ผ๋ก ํ ์คํธ๋ฅผ ์คํํฉ๋๋ค. ์ด๋ ์ฝ๋ ํ์ง์ ๋ํ ์ง์์ ์ธ ํผ๋๋ฐฑ์ ์ ๊ณตํ๊ณ ํ๊ท๋ฅผ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ธ๊ธฐ ์๋ CI ์์คํ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- GitHub Actions: GitHub์ ์ง์ ํตํฉ๋ CI/CD ํ๋ซํผ์ ๋๋ค.
- Jenkins: ๋๋ฆฌ ์ฌ์ฉ๋๋ ์คํ ์์ค CI/CD ์๋ฒ์ ๋๋ค.
- CircleCI: ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ CI/CD ํ๋ซํผ์ ๋๋ค.
- Travis CI: ๋ ๋ค๋ฅธ ์ธ๊ธฐ ์๋ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ CI/CD ํ๋ซํผ์ ๋๋ค.
- GitLab CI/CD: GitLab์ ํตํฉ๋ CI/CD ํ๋ซํผ์ ๋๋ค.
JavaScript ํ ์คํธ๋ฅผ ์คํํ๋๋ก CI ์์คํ ์ ๊ตฌ์ฑํ๋ ๊ฒ์ ๋์ ์์ค์ ์ํํธ์จ์ด ํ์ง์ ์ ์งํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฝ๋๊ฐ ํ ๋ฆฌํ์คํธ์ ํธ์๋ ๋๋ง๋ค Jest ํ ์คํธ๋ฅผ ์คํํ๋๋ก GitHub Actions๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ํ ์คํธ๊ฐ ์คํจํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ ๋๊น์ง ํ ๋ฆฌํ์คํธ ๋ณํฉ์ด ์ฐจ๋จ๋ ์ ์์ต๋๋ค.
6. ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง ๋๊ตฌ
์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง ๋๊ตฌ๋ ํ ์คํธ๊ฐ ์ฝ๋์ ๋ช ํผ์ผํธ๋ฅผ ๋ค๋ฃจ๋์ง ์ธก์ ํฉ๋๋ค. ์ด๋ ์ฝ๋์์ ์ ์ ํ๊ฒ ํ ์คํธ๋์ง ์์ ์์ญ์ ์๋ณํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ธ๊ธฐ ์๋ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง ๋๊ตฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- Istanbul: JavaScript์ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง ๋๊ตฌ์ ๋๋ค.
- nyc: Istanbul์ ์ํ ๋ช ๋ น์ค ์ธํฐํ์ด์ค์ ๋๋ค.
Jest๋ ๋ด์ฅ๋ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง ๋ณด๊ณ ๊ธฐ๋ฅ์ ํฌํจํ์ฌ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง ์ธก์ ๊ณผ์ ์ ๋จ์ํํฉ๋๋ค.
7. ๋ณด๊ณ ๋ฐ ์๊ฐํ ๋๊ตฌ
๋ณด๊ณ ๋ฐ ์๊ฐํ ๋๊ตฌ๋ ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ๋ถ์ํ๊ณ ์ดํดํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ ํ ์คํธ ์คํจ, ์ฑ๋ฅ ๋ณ๋ชฉ ํ์ ๋ฐ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง ๊ฒฉ์ฐจ์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- Jest ๋ฆฌํฌํฐ: Jest๋ ๋ค์ํ ์ ํ์ ํ ์คํธ ๋ณด๊ณ ์๋ฅผ ์์ฑํ๊ธฐ ์ํด ๋ค์ํ ๋ฆฌํฌํฐ๋ฅผ ์ง์ํฉ๋๋ค.
- Mocha ๋ฆฌํฌํฐ: Mocha๋ ๋ํํ ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ์ํ HTML ๋ฆฌํฌํฐ๋ฅผ ํฌํจํ์ฌ ๋ค์ํ ๋ฆฌํฌํฐ๋ฅผ ์ง์ํฉ๋๋ค.
- SonarQube: ์ฝ๋ ํ์ง์ ์ง์์ ์ผ๋ก ๊ฒ์ฌํ๊ธฐ ์ํ ํ๋ซํผ์ ๋๋ค. SonarQube๋ CI ์์คํ ๊ณผ ํตํฉํ์ฌ ์ฝ๋๋ฅผ ๋ถ์ํ๊ณ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง, ์ฝ๋ ์ค๋ฉ ๋ฐ ๋ณด์ ์ทจ์ฝ์ ์ ๋ํ ํผ๋๋ฐฑ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
JavaScript ํ ์คํธ ์๋ํ ์ธํ๋ผ ๊ตฌ์ถ: ๋จ๊ณ๋ณ ๊ฐ์ด๋
๊ฒฌ๊ณ ํ JavaScript ํ ์คํธ ์๋ํ ์ธํ๋ผ๋ฅผ ๊ตฌ์ถํ๋ ค๋ฉด ์ ๋ต์ ์ธ ์ ๊ทผ์ด ํ์ํฉ๋๋ค. ๋ค์์ ๋จ๊ณ๋ณ ๊ฐ์ด๋์ ๋๋ค:
1. ํ ์คํธ ์ ๋ต ์ ์
ํ ์คํธ ์์ฑ์ ์์ํ๊ธฐ ์ ์ ํ ์คํธ ์ ๋ต์ ์ ์ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ํ์ํ ํ ์คํธ ์ ํ(๋จ์, ํตํฉ, ์๋ ํฌ ์๋), ๊ฐ ํ ์คํธ ์ ํ์ ๋ฒ์, ์ฌ์ฉํ ๋๊ตฌ ๋ฐ ํ๋ ์์ํฌ๋ฅผ ์๋ณํ๋ ์์ ์ด ํฌํจ๋ฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ ์ํ๊ณผ ๊ณผ์ ๋ฅผ ๊ณ ๋ คํ์ญ์์ค. ์๋ฅผ ๋ค์ด, ๋ณต์กํ ๊ณ์ฐ์ด ์๋ ๊ธ์ต ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ด๋ฒ์ํ ๋จ์ ๋ฐ ํตํฉ ํ ์คํธ๊ฐ ํ์ํ ๋ฐ๋ฉด, ์ฌ์ฉ์ ์ธํฐํ์ด์ค๊ฐ ๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํฌ๊ด์ ์ธ ์๋ ํฌ ์๋ ํ ์คํธ์ ์ด์ ์ ๋๋ฆด ์ ์์ต๋๋ค.
2. ํ ์คํธ ํ๋ ์์ํฌ ๋ฐ ๋๊ตฌ ์ ํ
ํ๋ก์ ํธ์ ์๊ตฌ ์ฌํญ๊ณผ ํ์ ์ ๋ฌธ ์ง์์ ๊ฐ์ฅ ์ ํฉํ ํ ์คํธ ํ๋ ์์ํฌ, ์ด์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ๋ชจํน ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ๊ธฐํ ๋๊ตฌ๋ฅผ ์ ํํ์ญ์์ค. ์์์ ๋๊ตฌ๋ก ์์ํ์ฌ ํ์์ ๋ฐ๋ผ ์ ์ฐจ์ ์ผ๋ก ๋ ์ถ๊ฐํ์ญ์์ค. ํ ๋ฒ์ ๋ชจ๋ ๊ฒ์ ๊ตฌํํ๋ ค๊ณ ํ์ง ๋ง์ญ์์ค. ๊ฒฌ๊ณ ํ ๊ธฐ๋ฐ์์ ์์ํ์ฌ ์ ์ง์ ์ผ๋ก ๊ตฌ์ถํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
3. ํ ์คํธ ํ๊ฒฝ ์ค์
๊ฐ๋ฐ ๋ฐ ํ๋ก๋์ ํ๊ฒฝ๊ณผ ๊ฒฉ๋ฆฌ๋ ์ ์ฉ ํ ์คํธ ํ๊ฒฝ์ ๋ง๋์ญ์์ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ค๋ฅธ ํ๊ฒฝ์ ๋ณ๊ฒฝ ์ฌํญ์ด ํ ์คํธ์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ก ๋ณด์ฅํฉ๋๋ค. ๋ถ์ผ์น๋ฅผ ์ต์ํํ๊ณ ์ ๋ขฐํ ์ ์๋ ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด ๋ชจ๋ ํ๊ฒฝ์์ ์ผ๊ด๋ ๊ตฌ์ฑ์ ์ฌ์ฉํ์ญ์์ค.
4. ๋จ์ ํ ์คํธ ์์ฑ
๊ฐ๋ณ ๊ตฌ์ฑ ์์ ๋ฐ ํจ์์ ๋ํ ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ์ญ์์ค. ๋จ์ ํ ์คํธ๋ ๋น ๋ฅด๊ณ , ๊ฒฉ๋ฆฌ๋์ด ์์ผ๋ฉฐ, ๊ฒฐ์ ์ ์ด์ด์ผ ํฉ๋๋ค. ๋จ์ ํ ์คํธ์์ ๋์ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๋ชฉํ๋ก ํ์ญ์์ค. ๋ชจํน ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ ์์๋ฅผ ์ข ์์ฑ์์ ๊ฒฉ๋ฆฌํ์ญ์์ค. ๋ช ํํ๊ณ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅํ ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ค๋น-์คํ-๊ฒ์ฆ(Arrange-Act-Assert) ํจํด์ ๋ฐ๋ฅด์ญ์์ค. ์ด ํจํด์ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ์ค์ ํ๊ณ (์ค๋น), ํ ์คํธ ๋์ ์ฝ๋๋ฅผ ์คํํ๊ณ (์คํ), ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๋(๊ฒ์ฆ) ๊ณผ์ ์ ํฌํจํฉ๋๋ค.
5. ํตํฉ ํ ์คํธ ์์ฑ
์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ ๊ตฌ์ฑ ์์๊ฐ ํจ๊ป ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋์ง ํ์ธํ๊ธฐ ์ํด ํตํฉ ํ ์คํธ๋ฅผ ์์ฑํ์ญ์์ค. ํตํฉ ํ ์คํธ๋ ์ผ๋ฐ์ ์ผ๋ก ๋จ์ ํ ์คํธ๋ณด๋ค ๋๋ฆฌ์ง๋ง ๋ ํฌ๊ด์ ์ธ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ฐ ๊ตฌ์ฑ ์์์ ๋ด๋ถ ๋ ผ๋ฆฌ๋ณด๋ค๋ ๊ตฌ์ฑ ์์ ๊ฐ์ ์ํธ ์์ฉ์ ํ ์คํธํ๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค. ํตํฉ ํ ์คํธ์๋ ์ค์ ์ข ์์ฑ ๋๋ ์ค์ ์ข ์์ฑ์ ๋จ์ํ๋ ๋ฒ์ (์: ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค)์ ์ฌ์ฉํ์ญ์์ค.
6. ์๋ ํฌ ์๋ ํ ์คํธ ์์ฑ
์ฌ์ฉ์ ์ํธ ์์ฉ์ ์๋ฎฌ๋ ์ด์ ํ๊ณ ์ฌ์ฉ์ ๊ด์ ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์๋๋ก ์๋ํ๋์ง ํ์ธํ๊ธฐ ์ํด ์๋ ํฌ ์๋ ํ ์คํธ๋ฅผ ์์ฑํ์ญ์์ค. ์๋ ํฌ ์๋ ํ ์คํธ๋ ๊ฐ์ฅ ๋๋ฆฌ๊ณ ๋ณต์กํ ์ ํ์ ํ ์คํธ์ด์ง๋ง ์ ํ๋ฆฌ์ผ์ด์ ํ์ง์ ๋ํ ๊ฐ์ฅ ํ์ค์ ์ธ ํ๊ฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. Cypress ๋๋ Playwright์ ๊ฐ์ ์๋ ํฌ ์๋ ํ ์คํธ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ํธ ์์ฉ์ ์๋ํํ์ญ์์ค. ์ค์ํ ์ฌ์ฉ์ ํ๋ฆ๊ณผ ํต์ฌ ๊ธฐ๋ฅ ํ ์คํธ์ ์ค์ ์ ๋ก๋๋ค. ์๋ ํฌ ์๋ ํ ์คํธ๊ฐ UI ๋ณ๊ฒฝ์ ๋ํด ๊ฒฌ๊ณ ํ๊ณ ๋ณต์๋ ฅ์ด ์๋์ง ํ์ธํ์ญ์์ค.
7. ์ง์์ ์ธ ํตํฉ(CI)๊ณผ ํตํฉ
์ฝ๋๊ฐ ๋ฆฌํฌ์งํ ๋ฆฌ์ ํธ์๋ ๋๋ง๋ค ํ ์คํธ๊ฐ ์๋์ผ๋ก ์คํ๋๋๋ก CI ์์คํ ๊ณผ ํ ์คํธ๋ฅผ ํตํฉํ์ญ์์ค. ํ ์คํธ ๊ฒฐ๊ณผ์ ๋ํ ํผ๋๋ฐฑ์ ์ ๊ณตํ๊ณ ํ๊ท๋ฅผ ๋ฐฉ์งํ๋๋ก CI ์์คํ ์ ๊ตฌ์ฑํ์ญ์์ค. ํ ์คํธ๊ฐ ์คํจํ ๋ ๊ฐ๋ฐ์์๊ฒ ์๋ฆฌ๋ ์๋ ์๋ฆผ์ ์ค์ ํ์ญ์์ค. CI ์์คํ ์ ์ฌ์ฉํ์ฌ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง ๋ณด๊ณ ์๋ฅผ ์์ฑํ๊ณ ์๊ฐ ๊ฒฝ๊ณผ์ ๋ฐ๋ฅธ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ์ถ์ ํ์ญ์์ค. CI/CD ํ์ดํ๋ผ์ธ์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ํ๊ฒฝ์ ๋ฐฐํฌํ๋ ๊ฒ์ ์๋ํํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค.
8. ํ ์คํธ ์ธํ๋ผ ๋ชจ๋ํฐ๋ง ๋ฐ ์ ์ง ๊ด๋ฆฌ
ํ ์คํธ ์ธํ๋ผ๊ฐ ํจ๊ณผ์ ์ด๊ณ ์ ๋ขฐํ ์ ์๋๋ก ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํ๊ณ ์ ์ง ๊ด๋ฆฌํ์ญ์์ค. ์ค๋ณต๋๊ฑฐ๋ ์ค๋๋ ํ ์คํธ๋ฅผ ์๋ณํ๊ณ ์ ๊ฑฐํ๊ธฐ ์ํด ์ ๊ธฐ์ ์ผ๋ก ํ ์คํธ ์ค์ํธ๋ฅผ ๊ฒํ ํ์ญ์์ค. ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ํ๋๋ก ํ ์คํธ๋ฅผ ์ ๋ฐ์ดํธํ์ญ์์ค. ํ ์คํธ์ ์ฑ๋ฅ๊ณผ ์์ ์ฑ์ ํฅ์์ํค๊ธฐ ์ํด ๋๊ตฌ์ ํ๋ก์ธ์ค์ ํฌ์ํ์ญ์์ค. ํ ์คํธ ์คํ ์๊ฐ์ ์ถ์ ํ๊ณ ๋๋ฆฌ๊ฒ ์คํ๋๋ ํ ์คํธ๋ฅผ ์๋ณํ์ญ์์ค. ์ ๋ขฐํ ์ ์๋ ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด ๋ถ์์ ํ ํ ์คํธ(๋๋ก๋ ํต๊ณผํ๊ณ ๋๋ก๋ ์คํจํ๋ ํ ์คํธ)๋ฅผ ํด๊ฒฐํ์ญ์์ค. ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ๋ณํ์ ์ ์ํ๊ธฐ ์ํด ์ ๊ธฐ์ ์ผ๋ก ํ ์คํธ ์ ๋ต์ ๊ฒํ ํ๊ณ ์ ๋ฐ์ดํธํ์ญ์์ค.
JavaScript ํ ์คํธ ์๋ํ ๋ชจ๋ฒ ์ฌ๋ก
๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ฉด ๋ ํจ๊ณผ์ ์ด๊ณ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅํ JavaScript ํ ์คํธ ์๋ํ ์ธํ๋ผ๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค:
- ๋ช ํํ๊ณ ๊ฐ๊ฒฐํ ํ ์คํธ ์์ฑ: ํ ์คํธ๋ ์ดํดํ๊ณ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ฌ์์ผ ํฉ๋๋ค. ๊ฐ ํ ์คํธ์ ๋ชฉ์ ์ ์ค๋ช ํ๊ธฐ ์ํด ์ค๋ช ์ ์ธ ํ ์คํธ ์ด๋ฆ๊ณผ ์ฃผ์์ ์ฌ์ฉํ์ญ์์ค.
- ์ค๋น-์คํ-๊ฒ์ฆ ํจํด ๋ฐ๋ฅด๊ธฐ: ์ด ํจํด์ ๊ตฌ์กฐํ๋๊ณ ์กฐ์งํ๋ ํ ์คํธ๋ฅผ ์์ฑํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ํ ์คํธ ๊ฒฉ๋ฆฌ ์ ์ง: ๊ฐ ํ ์คํธ๋ ๋จ์ผ ๊ธฐ๋ฅ ๋จ์๋ฅผ ๊ฒฉ๋ฆฌํ์ฌ ํ ์คํธํด์ผ ํฉ๋๋ค. ๋ชจํน์ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ์ข ์์ฑ์์ ๊ฒฉ๋ฆฌํ์ญ์์ค.
- ๋น ๋ฅธ ํ ์คํธ ์์ฑ: ๋๋ฆฐ ํ ์คํธ๋ ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ฅผ ๋ฆ์ถ ์ ์์ต๋๋ค. ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ ์คํ๋๋๋ก ํ ์คํธ๋ฅผ ์ต์ ํํ์ญ์์ค.
- ๊ฒฐ์ ๋ก ์ ํ ์คํธ ์์ฑ: ํ ์คํธ๋ ํ๊ฒฝ์ ๊ด๊ณ์์ด ํญ์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. ํ ์คํธ ๊ฒฐ๊ณผ์ ์ํฅ์ ์ค ์ ์๋ ๋ฌด์์ ๋ฐ์ดํฐ ์ฌ์ฉ์ด๋ ์ธ๋ถ ์์ธ์ ์์กดํ๋ ๊ฒ์ ํผํ์ญ์์ค.
- ์๋ฏธ ์๋ ์ด์ค์ ์ฌ์ฉ: ์ด์ค์ ์ ํ ์คํธํ๋ ๋ด์ฉ์ ๋ช ํํ๊ฒ ๋ํ๋ด์ผ ํฉ๋๋ค. ํ ์คํธ ์คํจ๋ฅผ ์ง๋จํ๋ ๋ฐ ๋์์ด ๋๋๋ก ์ค๋ช ์ ์ธ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์ฌ์ฉํ์ญ์์ค.
- ์ฝ๋ ์ค๋ณต ํผํ๊ธฐ: ํฌํผ ํจ์ ๋ฐ ํ ์คํธ ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธ์ ์ฝ๋ ์ค๋ณต์ ์ค์ด์ญ์์ค.
- ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง ์ถ์ : ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๋ชจ๋ํฐ๋งํ์ฌ ์ฝ๋์์ ์ ์ ํ๊ฒ ํ ์คํธ๋์ง ์์ ์์ญ์ ์๋ณํ์ญ์์ค. ๋์ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๋ชฉํ๋ก ํ๋, ์์ ์ํด ํ์ง์ ํฌ์ํ์ง ๋ง์ญ์์ค.
- ๋ชจ๋ ๊ฒ์ ์๋ํ: ํ ์คํธ ์คํ, ๋ณด๊ณ , ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง ๋ถ์์ ํฌํจํ์ฌ ํ ์คํธ ํ๋ก์ธ์ค์ ๊ฐ๋ฅํ ํ ๋ง์ ๋ถ๋ถ์ ์๋ํํ์ญ์์ค.
- ์ ๊ธฐ์ ์ผ๋ก ํ ์คํธ ๊ฒํ ๋ฐ ์ ๋ฐ์ดํธ: ํ ์คํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ํ๊ธฐ ์ํด ์ ๊ธฐ์ ์ผ๋ก ๊ฒํ ํ๊ณ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค.
- ์ค๋ช ์ ์ธ ์ด๋ฆ ์ฌ์ฉ: ํ ์คํธ ์ด๋ฆ์ ์ค๋ช ์ ์ผ๋ก ์ง์ ํ์ญ์์ค. ์๋ฅผ ๋ค์ด `testFunction()` ๋์ `shouldReturnTrueWhenInputIsPositive()`๋ฅผ ์ฌ์ฉํ์ญ์์ค.
์ค์ ์ ์ฉ ์ฌ๋ก
๊ฒฌ๊ณ ํ JavaScript ํ ์คํธ ์๋ํ ์ธํ๋ผ๊ฐ ์ด๋ป๊ฒ ์ ์ฉ๋ ์ ์๋์ง ๋ช ๊ฐ์ง ์ค์ ์ฌ๋ก๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
์ฌ๋ก 1: ์ ์์๊ฑฐ๋ ํ๋ซํผ
์ ์ธ๊ณ์ ์ผ๋ก ์ ํ์ ํ๋งคํ๋ ์ ์ ์๊ฑฐ๋ ํ๋ซํผ์ ์ผํ ์นดํธ, ๊ฒฐ์ ํ๋ก์ธ์ค ๋ฐ ๊ฒฐ์ ๊ฒ์ดํธ์จ์ด ํตํฉ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ํฌ๊ด์ ์ธ ํ ์คํธ ์ธํ๋ผ์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค:
- ๋จ์ ํ ์คํธ: ์ผํ ์นดํธ ๋ก์ง, ์ ํ ๋์คํ๋ ์ด ๋ฐ ์ธ๊ธ ๊ณ์ฐ๊ณผ ๊ฐ์ ๊ฐ๋ณ ๊ตฌ์ฑ ์์์ ๋ํ ํ ์คํธ.
- ํตํฉ ํ ์คํธ: ์ผํ ์นดํธ์ ์ ํ ์นดํ๋ก๊ทธ ๊ฐ์ ์ํธ ์์ฉ ๋ฐ ๊ฒฐ์ ๊ฒ์ดํธ์จ์ด์์ ํตํฉ์ ํ์ธํ๊ธฐ ์ํ ํ ์คํธ.
- ์๋ ํฌ ์๋ ํ ์คํธ: ์ ํ ๊ฒ์์์ ์ฃผ๋ฌธ ์๋ฃ๊น์ง ์ ์ฒด ์ฌ์ฉ์ ํ๋ฆ์ ์๋ฎฌ๋ ์ด์ ํ๋ฉฐ, ์ฌ๋ฌ ๊ตญ๊ฐ์ ๊ฑธ์ณ ๋ค์ํ ๊ฒฐ์ ๋ฐฉ๋ฒ๊ณผ ๋ฐฐ์ก ์ฃผ์๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ์ ํฌํจ.
- ์ฑ๋ฅ ํ ์คํธ: ํ๋ซํผ์ด ํนํ ํผํฌ ์ผํ ์์ฆ ๋์ ๋ง์ ์์ ๋์ ์ฌ์ฉ์์ ๊ฑฐ๋๋ฅผ ์ฒ๋ฆฌํ ์ ์๋์ง ํ์ธํ๊ธฐ ์ํ ํ ์คํธ.
์ฌ๋ก 2: ๊ธ์ต ์ ํ๋ฆฌ์ผ์ด์
์ฌ์ฉ์ ๊ณ์ ์ ๊ด๋ฆฌํ๊ณ , ๊ฑฐ๋๋ฅผ ์ฒ๋ฆฌํ๋ฉฐ, ๋ณด๊ณ ์๋ฅผ ์์ฑํ๋ ๊ธ์ต ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์ ์์ค์ ์ ํ์ฑ๊ณผ ๋ณด์์ด ํ์ํฉ๋๋ค. ํฌ๊ด์ ์ธ ํ ์คํธ ์ธํ๋ผ์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค:
- ๋จ์ ํ ์คํธ: ์ด์ ๊ณ์ฐ, ์ธ๊ธ ๊ณ์ฐ ๋ฐ ํตํ ๋ณํ๊ณผ ๊ฐ์ ๊ธ์ต ๊ณ์ฐ์ ์ํํ๋ ๊ฐ๋ณ ํจ์์ ๋ํ ํ ์คํธ.
- ํตํฉ ํ ์คํธ: ๊ณ์ ๊ด๋ฆฌ ๋ชจ๋, ๊ฑฐ๋ ์ฒ๋ฆฌ ๋ชจ๋ ๋ฐ ๋ณด๊ณ ๋ชจ๋๊ณผ ๊ฐ์ ๋ค๋ฅธ ๋ชจ๋ ๊ฐ์ ์ํธ ์์ฉ์ ํ์ธํ๊ธฐ ์ํ ํ ์คํธ.
- ์๋ ํฌ ์๋ ํ ์คํธ: ๊ณ์ ์์ฑ์์ ์๊ธ ์ ๊ธ, ์๊ธ ์ธ์ถ ๋ฐ ๋ณด๊ณ ์ ์์ฑ์ ์ด๋ฅด๊ธฐ๊น์ง ์์ ํ ๊ธ์ต ๊ฑฐ๋๋ฅผ ์๋ฎฌ๋ ์ด์ ํ๊ธฐ ์ํ ํ ์คํธ.
- ๋ณด์ ํ ์คํธ: ์ ํ๋ฆฌ์ผ์ด์ ์ด SQL ์ธ์ ์ , ์ฌ์ดํธ ๊ฐ ์คํฌ๋ฆฝํ (XSS) ๋ฐ ์ฌ์ดํธ ๊ฐ ์์ฒญ ์์กฐ(CSRF)์ ๊ฐ์ ์ผ๋ฐ์ ์ธ ๋ณด์ ์ทจ์ฝ์ ์ผ๋ก๋ถํฐ ๋ณดํธ๋๋์ง ํ์ธํ๊ธฐ ์ํ ํ ์คํธ.
์ฌ๋ก 3: ์์ ๋ฏธ๋์ด ํ๋ซํผ
์์ ๋ฏธ๋์ด ํ๋ซํผ์ ์ฌ์ฉ์ ์ธ์ฆ, ์ฝํ ์ธ ๊ฒ์ ๋ฐ ์์ ์ํธ ์์ฉ๊ณผ ๊ฐ์ ํต์ฌ ๊ธฐ๋ฅ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ํฌ๊ด์ ์ธ ํ ์คํธ ์ธํ๋ผ์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค:
- ๋จ์ ํ ์คํธ: ์ฌ์ฉ์ ์ธ์ฆ ๋ก์ง, ์ฝํ ์ธ ๊ฒ์ ๋ก์ง ๋ฐ ์์ ์ํธ ์์ฉ ๋ก์ง๊ณผ ๊ฐ์ ๊ฐ๋ณ ๊ตฌ์ฑ ์์์ ๋ํ ํ ์คํธ.
- ํตํฉ ํ ์คํธ: ์ฌ์ฉ์ ์ธ์ฆ ๋ชจ๋, ์ฝํ ์ธ ๊ด๋ฆฌ ๋ชจ๋ ๋ฐ ์์ ๋คํธ์ํฌ ๋ชจ๋๊ณผ ๊ฐ์ ๋ค๋ฅธ ๋ชจ๋ ๊ฐ์ ์ํธ ์์ฉ์ ํ์ธํ๊ธฐ ์ํ ํ ์คํธ.
- ์๋ ํฌ ์๋ ํ ์คํธ: ๊ณ์ ์์ฑ, ์ฝํ ์ธ ๊ฒ์, ๋ค๋ฅธ ์ฌ์ฉ์ ํ๋ก์ฐ, ๊ฒ์๋ฌผ์ ์ข์์ ๋๋ ๋๊ธ ๋ฌ๊ธฐ์ ๊ฐ์ ์ฌ์ฉ์ ์ํธ ์์ฉ์ ์๋ฎฌ๋ ์ด์ ํ๊ธฐ ์ํ ํ ์คํธ.
- ์ฑ๋ฅ ํ ์คํธ: ํ๋ซํผ์ด ํนํ ํผํฌ ์ฌ์ฉ ์๊ฐ ๋์ ๋ง์ ์์ ์ฌ์ฉ์์ ์ฝํ ์ธ ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋์ง ํ์ธํ๊ธฐ ์ํ ํ ์คํธ.
๊ฒฐ๋ก
๊ฒฌ๊ณ ํ JavaScript ํ ์คํธ ์๋ํ ์ธํ๋ผ๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ์ ์ฅ๊ธฐ์ ์ผ๋ก ์ฑ๊ณผ๋ฅผ ๊ฑฐ๋๋ ํฌ์์ ๋๋ค. ํฌ๊ด์ ์ธ ํ ์คํธ ์ ๋ต์ ๊ตฌํํ๊ณ , ์ฌ๋ฐ๋ฅธ ๋๊ตฌ๋ฅผ ์ ํํ๋ฉฐ, ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ฉด JavaScript ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ง, ์ ๋ขฐ์ฑ ๋ฐ ์ ์ง ๊ด๋ฆฌ์ฑ์ ๋ณด์ฅํ ์ ์์ต๋๋ค. ์ด๋ ํ๋ก๋์ ๊ฒฐํจ์ ์ํ์ ์ค์ด๊ณ ๊ฐ๋ฐ์ ๊ฒฝํ์ ํฅ์์ํฌ ๋ฟ๋ง ์๋๋ผ ์ฌ์ฉ์์๊ฒ ๊ณ ํ์ง ์ํํธ์จ์ด๋ฅผ ์์ ์๊ฒ ์ ๊ณตํ ์ ์๊ฒ ํด์ค๋๋ค. ํ๋ฅญํ ํ ์คํธ ์ธํ๋ผ๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ์ ๋ฐ๋ณต์ ์ธ ๊ณผ์ ์์ ๊ธฐ์ตํ์ญ์์ค. ์๊ฒ ์์ํ๊ณ , ๊ฐ์ฅ ์ค์ํ ์์ญ์ ์ง์คํ๋ฉฐ, ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ํ ์คํธ ํ๋ก์ธ์ค๋ฅผ ์ง์์ ์ผ๋ก ๊ฐ์ ํ์ญ์์ค.