JavaScript ํ ์คํธ ํ๋ ์์ํฌ์ ๊ฒฌ๊ณ ํ ๊ฒ์ฆ ์ธํ๋ผ ๊ตฌํ ๋ฐฉ๋ฒ์ ํ์ํฉ๋๋ค. ๋ค์ํ ํ๋ก์ ํธ์ ๊ฑธ์ณ ์ฝ๋ ํ์ง, ์ ๋ขฐ์ฑ, ์ ์ง๋ณด์์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐฐ์๋ณด์ธ์.
JavaScript ํ ์คํธ ํ๋ ์์ํฌ: ๊ฒฌ๊ณ ํ ๊ฒ์ฆ ์ธํ๋ผ ๊ตฌํ
์ค๋๋ ์ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๊ฒฝ์์ JavaScript ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ง, ์ ๋ขฐ์ฑ ๋ฐ ์ ์ง๋ณด์์ฑ์ ๋ณด์ฅํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ ์ ์๋๊ณ ์คํ๋ ํ ์คํธ ์ ๋ต๊ณผ ์ด๋ฅผ ๋ท๋ฐ์นจํ๋ ์ ์ ํ ํ ์คํธ ํ๋ ์์ํฌ ๋ฐ ๊ฒฌ๊ณ ํ ๊ฒ์ฆ ์ธํ๋ผ๋ ์ด๋ฌํ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ์ด ๊ธ์์๋ ๋ค์ํ JavaScript ํ ์คํธ ํ๋ ์์ํฌ๋ฅผ ์ดํด๋ณด๊ณ , ํ๋ก์ ํธ์ ๊ท๋ชจ๋ ๋ณต์ก์ฑ์ ๊ด๊ณ์์ด ํ๋ก์ ํธ๋ฅผ ์ํ ๊ฒฌ๊ณ ํ ๊ฒ์ฆ ์ธํ๋ผ๋ฅผ ๊ตฌํํ๋ ํฌ๊ด์ ์ธ ๊ฐ์ด๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
๊ฒฌ๊ณ ํ ๊ฒ์ฆ ์ธํ๋ผ๋ ์ ์ค์ํ๊ฐ?
๊ฒฌ๊ณ ํ ๊ฒ์ฆ ์ธํ๋ผ๋ ๋ค์๊ณผ ๊ฐ์ ์๋ง์ ์ด์ ์ ์ ๊ณตํฉ๋๋ค:
- ์กฐ๊ธฐ ๋ฒ๊ทธ ๋ฐ๊ฒฌ: ๊ฐ๋ฐ ์๋ช ์ฃผ๊ธฐ ์ด๊ธฐ์ ๊ฒฐํจ์ ์๋ณํ๊ณ ํด๊ฒฐํ๋ฉด ๋น์ฉ์ ์ ๊ฐํ๊ณ ์ฌ์ฉ์์๊ฒ ๋ฏธ์น๋ ์ํฅ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
- ์ฝ๋ ํ์ง ํฅ์: ํ ์คํธ๋ ๊ฐ๋ฐ์๊ฐ ๋ ๊นจ๋ํ๊ณ , ๋ชจ๋ํ๋์์ผ๋ฉฐ, ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํ๋๋ก ์ฅ๋ คํฉ๋๋ค.
- ์ ๋ขฐ๋ ์ฆ๊ฐ: ์ฒ ์ ํ ํ ์คํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ์ฑ๊ณผ ์ ํ์ฑ์ ๋ํ ํ์ ์ ์ฃผ์ด ๋ ๋น ๋ฅด๊ณ ๋น๋ฒํ ๋ฐฐํฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ์ํ ๊ฐ์: ์ ํ ์คํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ธฐ์น ์์ ์ค๋ฅ๋ ๋ณด์ ์ทจ์ฝ์ ์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์ ์ต๋๋ค.
- ํ์ ๊ฐํ: ๊ณต์ ๋ ํ ์คํธ ์ ๋ต์ ๊ฐ๋ฐ์, ํ ์คํฐ ๋ฐ ๊ธฐํ ์ดํด๊ด๊ณ์ ๊ฐ์ ๋ ๋์ ์ปค๋ฎค๋์ผ์ด์ ๊ณผ ํ์ ์ ์ด์งํฉ๋๋ค.
์ด๋ฌํ ์ด์ ๋ค์ ๋ณดํธ์ ์ด๋ฉฐ, ์ ์ธ๊ณ์ ๋ถ์ฐ๋ ํ์ด๋ ์๊ท๋ชจ ์คํํธ์ ์์ ๊ฐ๋ฐ๋ ํ๋ก์ ํธ์๋ ๋์ผํ๊ฒ ์ ์ฉ๋ฉ๋๋ค. ํจ๊ณผ์ ์ธ ํ ์คํธ๋ ์ง๋ฆฌ์ ๊ฒฝ๊ณ๋ฅผ ์ด์ํ์ฌ ์ ๋ฐ์ ์ผ๋ก ๋ ๋์ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ๊ธฐ์ฌํฉ๋๋ค.
์ฌ๋ฐ๋ฅธ JavaScript ํ ์คํธ ํ๋ ์์ํฌ ์ ํํ๊ธฐ
๋ช ๊ฐ์ง ํ๋ฅญํ JavaScript ํ ์คํธ ํ๋ ์์ํฌ๊ฐ ์์ผ๋ฉฐ, ๊ฐ๊ฐ ์ฅ๋จ์ ์ด ์์ต๋๋ค. ํ๋ก์ ํธ์ ๊ฐ์ฅ ์ ํฉํ ์ ํ์ ํน์ ์๊ตฌ์ฌํญ๊ณผ ์ ํธ๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ๋ค์์ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ๋ช ๊ฐ์ง ์ต์ ์ ๋๋ค:
Jest
ํ์ด์ค๋ถ์์ ๊ฐ๋ฐํ Jest๋ ํฌ๊ด์ ์ด๊ณ ์ฌ์ฉํ๊ธฐ ์ฌ์ด ํ ์คํธ ํ๋ ์์ํฌ๋ก, ํนํ React ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํ์ง๋ง ๋ชจ๋ JavaScript ํ๋ก์ ํธ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํน์ง์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ ๋ก ๊ตฌ์ฑ: Jest๋ ์์ํ๋ ๋ฐ ์ต์ํ์ ๊ตฌ์ฑ๋ง ํ์ํ๋ฏ๋ก ์ด๋ณด์์๊ฒ ์ด์์ ์ ๋๋ค.
- ๋ด์ฅ๋ ๋ชจํน(Mocking): Jest๋ ๋ด์ฅ๋ ๋ชจํน ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ์ธ๋ถ ์ข ์์ฑ์ ์์กดํ๋ ์ฝ๋ ํ ์คํธ ๊ณผ์ ์ ๋จ์ํํฉ๋๋ค.
- ์ค๋ ์ท ํ ์คํธ: Jest๋ UI ์ปดํฌ๋ํธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋ ๋๋ง๋๋์ง ์ฝ๊ฒ ํ์ธํ ์ ์๋ ์ค๋ ์ท ํ ์คํธ๋ฅผ ์ง์ํฉ๋๋ค.
- ๋ฐ์ด๋ ์ฑ๋ฅ: Jest๋ ํ ์คํธ๋ฅผ ๋ณ๋ ฌ๋ก ์คํํ์ฌ ํ ์คํธ ์คํ ์๊ฐ์ ๋จ์ถํฉ๋๋ค.
์์ (Jest):
// sum.js
function sum(a, b) {
return a + b;
}
module.exports = sum;
// sum.test.js
const sum = require('./sum');
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
Mocha
Mocha๋ ์ ์ฐํ๊ณ ํ์ฅ ๊ฐ๋ฅํ ํ ์คํธ ํ๋ ์์ํฌ๋ก, ๋ง์ถคํ ํ ์คํธ ์๋ฃจ์ ์ ๊ตฌ์ถํ๊ธฐ ์ํ ๊ฒฌ๊ณ ํ ๊ธฐ๋ฐ์ ์ ๊ณตํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๋จ์ธ(assertion)์ด๋ ๋ชจํน ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํฌํจ๋์ด ์์ง ์์ผ๋ฏ๋ก ๋ณ๋๋ก ์ถ๊ฐํด์ผ ํฉ๋๋ค(๋ณดํต Chai์ Sinon.JS). Mocha๋ ๋ค์์ ์ ๊ณตํฉ๋๋ค:
- ์ ์ฐ์ฑ: Mocha๋ฅผ ์ฌ์ฉํ๋ฉด ํ์์ ๊ฐ์ฅ ์ ํฉํ ๋จ์ธ ๋ฐ ๋ชจํน ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
- ํ์ฅ์ฑ: Mocha๋ ๋ค์ํ ํ ์คํธ ์๋๋ฆฌ์ค๋ฅผ ์ง์ํ๊ธฐ ์ํด ํ๋ฌ๊ทธ์ธ์ผ๋ก ์ฝ๊ฒ ํ์ฅํ ์ ์์ต๋๋ค.
- ๋น๋๊ธฐ ํ ์คํธ: Mocha๋ ๋น๋๊ธฐ ์ฝ๋ ํ ์คํธ๋ฅผ ์ํ ํ๋ฅญํ ์ง์์ ์ ๊ณตํฉ๋๋ค.
์์ (Mocha์ Chai):
// sum.js
function sum(a, b) {
return a + b;
}
module.exports = sum;
// test/sum.test.js
const sum = require('../sum');
const chai = require('chai');
const expect = chai.expect;
describe('Sum', () => {
it('should add 1 + 2 to equal 3', () => {
expect(sum(1, 2)).to.equal(3);
});
});
Jasmine
Jasmine์ ํ๋ ์ฃผ๋ ๊ฐ๋ฐ(BDD) ํ๋ ์์ํฌ๋ก, ํ ์คํธ ์์ฑ์ ์ํ ๊นจ๋ํ๊ณ ๊ฐ๋ ์ฑ ๋์ ๊ตฌ๋ฌธ์ ์ ๊ณตํฉ๋๋ค. ์ฃผ๋ก Angular ์ ํ๋ฆฌ์ผ์ด์ ํ ์คํธ์ ์ฌ์ฉ๋ฉ๋๋ค. Jasmine์ ํน์ง์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- BDD ๊ตฌ๋ฌธ: Jasmine์ BDD ๊ตฌ๋ฌธ์ ํ ์คํธ๋ฅผ ์ฝ๊ณ ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
- ๋ด์ฅ๋ ๋จ์ธ: Jasmine์ ํฌ๊ด์ ์ธ ๋ด์ฅ ๋จ์ธ ์ธํธ๋ฅผ ํฌํจํฉ๋๋ค.
- ์คํ์ด(Spies): Jasmine์ ํจ์ ํธ์ถ์ ๋ชจํนํ๊ณ ์คํฐ๋นํ๊ธฐ ์ํ ์คํ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค.
์์ (Jasmine):
// sum.js
function sum(a, b) {
return a + b;
}
module.exports = sum;
// sum.spec.js
const sum = require('./sum');
describe('Sum', () => {
it('should add 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toEqual(3);
});
});
๊ธฐํ ํ๋ ์์ํฌ
์ฃผ๋ชฉํ ๋งํ ๋ค๋ฅธ JavaScript ํ ์คํธ ํ๋ ์์ํฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- Chai: Mocha, Jasmine ๋๋ ๋ค๋ฅธ ํ ์คํธ ํ๋ ์์ํฌ์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ ๋จ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- Sinon.JS: JavaScript์ฉ ๋ ๋ฆฝํ ํ ์คํธ ์คํ์ด, ์คํ ๋ฐ ๋ชจํน ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- Karma: ์ค์ ๋ธ๋ผ์ฐ์ ์์ ํ ์คํธ๋ฅผ ์คํํ ์ ์๊ฒ ํด์ฃผ๋ ํ ์คํธ ๋ฌ๋์ ๋๋ค.
- Cypress: ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํด ํน๋ณํ ์ค๊ณ๋ ์๋ํฌ์๋ ํ ์คํธ ํ๋ ์์ํฌ์ ๋๋ค.
- Playwright: ์ต์ ์น ์ฑ์ ์ํ ์์ ์ ์ธ ์๋ํฌ์๋ ํ ์คํธ ํ๋ ์์ํฌ์ ๋๋ค.
- WebdriverIO: ๊ด๋ฒ์ํ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ง์ํ๋ ๋ ๋ค๋ฅธ ์๋ํฌ์๋ ํ ์คํธ ํ๋ ์์ํฌ์ ๋๋ค.
ํ ์คํธ์ ์ข ๋ฅ
ํฌ๊ด์ ์ธ ๊ฒ์ฆ ์ธํ๋ผ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ํ ์ธก๋ฉด์ ๋ค๋ฃจ๊ธฐ ์ํด ์ฌ๋ฌ ์ข ๋ฅ์ ํ ์คํธ๋ฅผ ํฌํจํด์ผ ํฉ๋๋ค.
๋จ์ ํ ์คํธ
๋จ์ ํ ์คํธ๋ ๊ฐ๋ณ ์ปดํฌ๋ํธ๋ ํจ์๋ฅผ ๊ฒฉ๋ฆฌํ์ฌ ํ ์คํธํ๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋น ๋ฅด๊ณ ์์ฑ ๋ฐ ์ ์ง๋ณด์๊ฐ ์ฝ์ต๋๋ค. ๋จ์ ํ ์คํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ ๋ถ๋ถ์ด ์์๋๋ก ์๋ํ๋์ง ํ์ธํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋จ์ ํ ์คํธ๋ ํจ์๊ฐ ๋ ์ซ์์ ํฉ์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ณ์ฐํ๋์ง, ์ฃ์ง ์ผ์ด์ค๋ฅผ ์ ๋๋ก ์ฒ๋ฆฌํ๋์ง, ๋๋ ์ ํจํ์ง ์์ ์ ๋ ฅ์ด ์ฃผ์ด์ก์ ๋ ์์๋ ์ค๋ฅ๋ฅผ ๋ฐ์์ํค๋์ง ๊ฒ์ฆํ ์ ์์ต๋๋ค. ์ด๋ ์ ์์๊ฑฐ๋ ํ๋ซํผ์ ๊ธ์ต ๊ณ์ฐ, ์บ๋ฆฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ์ง ํ์ ์ง์ ๋๋ ๊ธฐํ ๊ฒฉ๋ฆฌ๋ ๊ธฐ๋ฅ์ ์ ์ฉ๋ฉ๋๋ค.
ํตํฉ ํ ์คํธ
ํตํฉ ํ ์คํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ๋ฌ ๋ถ๋ถ์ด ํจ๊ป ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋์ง ๊ฒ์ฆํฉ๋๋ค. ์ปดํฌ๋ํธ๋ ๋ชจ๋ ๊ฐ์ ์ํธ์์ฉ์ ํ ์คํธํฉ๋๋ค. ํตํฉ ํ ์คํธ๋ ๋จ์ ํ ์คํธ๋ณด๋ค ๋ณต์กํ์ง๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ด๋ป๊ฒ ๋์ํ๋์ง์ ๋ํ ๋ ํ์ค์ ์ธ ์๊ฐ์ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํตํฉ ํ ์คํธ๋ ์ฌ์ฉ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๊ณต์ ์ผ๋ก ๋ก๊ทธ์ธํ ์ ์๋์ง, ๋ฐ์ดํฐ๊ฐ ๋ค๋ฅธ ์๋น์ค ๊ฐ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ ๋ฌ๋๋์ง, ๋๋ ๊ฒฐ์ ๊ฒ์ดํธ์จ์ด ํตํฉ์ด ์์๋๋ก ์๋ํ๋์ง ๊ฒ์ฆํ ์ ์์ต๋๋ค. ์ ์ธ๊ณ์ ์ผ๋ก ๋ถ์ฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํตํฉ ํ ์คํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ค๋ฅธ ๋ ์ง ํ์์ด๋ ํตํ ๊ธฐํธ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋์ง ๊ฒ์ฆํ ์ ์์ต๋๋ค. ํตํฉ ํ ์คํธ๋ ์์คํ ์ ๋ฐ์ ๊ฑธ์ณ ์ํํ ์๋์ ๋ณด์ฅํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
์๋ํฌ์๋(E2E) ํ ์คํธ
์๋ํฌ์๋ ํ ์คํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ์ ์ค์ ์ฌ์ฉ์ ์ํธ์์ฉ์ ์๋ฎฌ๋ ์ด์ ํฉ๋๋ค. ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ถํฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊น์ง ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ํ๋ฆ์ ํ ์คํธํฉ๋๋ค. E2E ํ ์คํธ๋ ๊ฐ์ฅ ํฌ๊ด์ ์ธ ์ ํ์ ํ ์คํธ์ด์ง๋ง ์์ฑ ๋ฐ ์ ์ง๋ณด์์ ๊ฐ์ฅ ๋ง์ ์๊ฐ์ด ์์๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, E2E ํ ์คํธ๋ ์ฌ์ฉ์๊ฐ ๊ณ์ ์ ๋ง๋ค๊ณ , ์ ํ์ ํ์ํ๊ณ , ์ฅ๋ฐ๊ตฌ๋์ ํญ๋ชฉ์ ์ถ๊ฐํ๊ณ , ๊ตฌ๋งค๋ฅผ ์๋ฃํ ์ ์๋์ง ๊ฒ์ฆํ ์ ์์ต๋๋ค. ๊ตญ์ ์ ์์๊ฑฐ๋ ํ๋ซํผ์์ E2E ํ ์คํธ๋ ํ๋์ค์ ์ฌ์ฉ์๊ฐ ์ ๋ก์ ํ๋์ค ์ฃผ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ๊ณต์ ์ผ๋ก ๊ตฌ๋งค๋ฅผ ์๋ฃํ ์ ์๋์ง ๊ฒ์ฆํ ์ ์์ต๋๋ค. Cypress๋ Playwright์ ๊ฐ์ ๋๊ตฌ๊ฐ ์ด๋ฌํ ์ ํ์ ํ ์คํธ์ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค. ์ฌ๋ฌ ๋ธ๋ผ์ฐ์ ์ ์ด์ ์ฒด์ ์์ ์๋ํฌ์๋ ํ ์คํธ๋ฅผ ์คํํ๋ฉด ํธํ์ฑ ๋ฌธ์ ๋ฅผ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
์๊ฐ์ ํ๊ท ํ ์คํธ
์๊ฐ์ ํ๊ท ํ ์คํธ๋ UI ์ปดํฌ๋ํธ๋ ์ ์ฒด ํ์ด์ง์ ์คํฌ๋ฆฐ์ท์ ๊ธฐ์ค ์ด๋ฏธ์ง์ ๋น๊ตํฉ๋๋ค. ์ด๋ฌํ ์ ํ์ ํ ์คํธ๋ ์ฝ๋ ์์ ์ผ๋ก ์ธํด ์๋์น ์์ ์๊ฐ์ ๋ณํ๋ฅผ ๊ฐ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์๊ฐ์ ํ๊ท ํ ์คํธ๋ ์ฌ๋ฌ ๋ธ๋ผ์ฐ์ ์ ์ฅ์น์์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ ๋ฐ ํนํ ์ ์ฉํฉ๋๋ค. Percy๋ Applitools์ ๊ฐ์ ๋๊ตฌ๋ ์ด ํ๋ก์ธ์ค๋ฅผ ์๋ํํฉ๋๋ค. ์ด๋ฌํ ํ ์คํธ๋ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ์ผ๊ด๋ ๋ชจ์๊ณผ ๋๋์ ์ ์งํ๋ ๋ฐ, ํนํ ๋ธ๋๋ฉ ๋ชฉ์ ์ผ๋ก ๋งค์ฐ ์ค์ํฉ๋๋ค.
์ ๊ทผ์ฑ ํ ์คํธ
์ ๊ทผ์ฑ ํ ์คํธ๋ ์ฅ์ ๊ฐ ์๋ ์ฌ๋๋ค๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ด๋ฌํ ํ ์คํธ๋ ์ ์ ํ ์๋งจํฑ HTML, ์ถฉ๋ถํ ์์ ๋๋น, ํค๋ณด๋ ๋ด๋น๊ฒ์ด์ ๊ณผ ๊ฐ์ ์ฌํญ์ ํ์ธํฉ๋๋ค. ์ ๊ทผ์ฑ ํ ์คํธ๋ ์ค๋ฆฌ์ ์ผ๋ก ์ค์ํ ๋ฟ๋ง ์๋๋ผ ๋ง์ ๊ตญ๊ฐ์์ ๋ฒ์ ์ผ๋ก ์๊ตฌ๋ฉ๋๋ค. axe-core๋ WAVE์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ทผ์ฑ ํ ์คํธ๋ฅผ ์๋ํํ ์ ์์ต๋๋ค. ์ ๊ทผ์ฑ์ ๋ณด์ฅํ๋ ๊ฒ์ ์ ์ธ๊ณ ๊ณ ๊ฐ์ ์ํ ํฌ์ฉ์ ์ด๊ณ ์ฌ์ฉ์ ์นํ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋ ๋ฐ ํ์์ ์ ๋๋ค.
๊ฒ์ฆ ์ธํ๋ผ ๊ตฌํํ๊ธฐ
๊ฒฌ๊ณ ํ ๊ฒ์ฆ ์ธํ๋ผ๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ์๋ ๋ช ๊ฐ์ง ์ฃผ์ ๋จ๊ณ๊ฐ ํฌํจ๋ฉ๋๋ค:
1. ํ ์คํธ ์ ๋ต ์ ์
์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ ์ํํ ํ ์คํธ ์ ํ, ์ฌ์ฉํ ํ ์คํธ ๋๊ตฌ, ๋ฐ๋ฅผ ํ ์คํธ ํ๋ก์ธ์ค๋ฅผ ๊ฐ๋ต์ ์ผ๋ก ์ค๋ช ํ๋ ๋ช ํํ ํ ์คํธ ์ ๋ต์ ์ ์ํ๋ ๊ฒ์ ๋๋ค. ํ ์คํธ ์ ๋ต์ ์ ์ฒด ๊ฐ๋ฐ ๋ชฉํ์ ์ผ์นํด์ผ ํ๋ฉฐ ๋ช ํํ๊ณ ๊ฐ๊ฒฐํ๊ฒ ๋ฌธ์ํ๋์ด์ผ ํฉ๋๋ค. ํ๋จ์๋ ๋ ๋ง์ ๋จ์ ํ ์คํธ๋ฅผ, ์๋จ์๋ ๋ ์ ๊ณ ํฌ๊ด์ ์ธ ํ ์คํธ(E2E ํ ์คํธ ๋ฑ)๋ฅผ ๋ฐฐ์นํ๋ ํ ์คํธ ํผ๋ผ๋ฏธ๋๋ฅผ ๋ง๋๋ ๊ฒ์ ๊ณ ๋ คํด ๋ณด์ธ์.
2. ํ ์คํธ ํ๊ฒฝ ์ค์
๋ค์์ผ๋ก, ํ๋ก๋์ ํ๊ฒฝ๊ณผ ๊ฒฉ๋ฆฌ๋ ํ ์คํธ ํ๊ฒฝ์ ์ค์ ํด์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํ ์คํธ๊ฐ ์ค์๋ก ํ๋ก๋์ ์์คํ ์ ์ํฅ์ ๋ฏธ์น๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ํ ์คํธ๊ฐ ์ ํํ๋๋ก ํ ์คํธ ํ๊ฒฝ์ ๊ฐ๋ฅํ ํ ํ๋ก๋์ ํ๊ฒฝ๊ณผ ์ ์ฌํด์ผ ํฉ๋๋ค. Docker์ ๊ฐ์ ์ปจํ ์ด๋ํ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์ฌํ ๊ฐ๋ฅํ ํ ์คํธ ํ๊ฒฝ์ ๋ง๋๋ ๊ฒ์ ๊ณ ๋ คํด ๋ณด์ธ์.
3. ํ ์คํธ ์์ฑ
ํ ์คํธ ํ๊ฒฝ์ด ์ค์ ๋๋ฉด ํ ์คํธ ์์ฑ์ ์์ํ ์ ์์ต๋๋ค. ๋ช ํํ๊ณ ๊ฐ๊ฒฐํ๋ฉฐ ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์ด ํ ์คํธ๋ฅผ ์์ฑํ๊ธฐ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด์ธ์. ํ ์คํธ์ ๋จ์ธ์ ์์ ์ ์ธ ์ด๋ฆ์ ์ฌ์ฉํ์ธ์. ํ ์คํธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋จ์ผ ์ธก๋ฉด์ ์ง์คํ๋๋ก ์ ์งํ์ธ์. ๋๋ฌด ๊นจ์ง๊ธฐ ์ฝ๊ฑฐ๋ ์ธ๋ถ ์์ธ์ ์์กดํ๋ ํ ์คํธ๋ ์์ฑํ์ง ๋ง์ธ์. ๋ชจํน๊ณผ ์คํฐ๋น์ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ๋ฅผ ๊ฒฉ๋ฆฌํ๊ณ ํ ์คํธ๋ฅผ ๋จ์ํํ์ธ์.
4. ํ ์คํธ ์๋ํ
ํ ์คํธ๊ฐ ์ผ๊ด๋๊ณ ๋น๋ฒํ๊ฒ ์คํ๋๋๋ก ํ ์คํธ ํ๋ก์ธ์ค๋ฅผ ์๋ํํ์ธ์. Jenkins, Travis CI, GitHub Actions ๋๋ GitLab CI/CD์ ๊ฐ์ ์ง์์ ํตํฉ(CI) ์๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๊ฐ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ปค๋ฐ๋ ๋๋ง๋ค ์๋์ผ๋ก ํ ์คํธ๋ฅผ ์คํํ์ธ์. ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ํ๊ณ ํ ์คํธ๊ฐ ์คํจํ๋ฉด ๋น๋๋ฅผ ์คํจํ๋๋ก CI ์๋ฒ๋ฅผ ๊ตฌ์ฑํ์ธ์. ์ด๋ ๊ฐ๋ฐ ๊ณผ์ ์ด๊ธฐ์ ๊ฒฐํจ์ ๋ฐ๊ฒฌํ๊ณ ํ๋ก๋์ ์์คํ ์ ๋์ ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
5. ํ ์คํธ ๊ฒฐ๊ณผ ๋ชจ๋ํฐ๋ง ๋ฐ ๋ถ์
์ ๊ธฐ์ ์ผ๋ก ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ ๋ถ์ํ์ฌ ์ถ์ธ์ ํจํด์ ํ์ ํ์ธ์. ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธ๋ก ์ปค๋ฒ๋๋ ์ฝ๋์ ๋ฐฑ๋ถ์จ์ ์ธก์ ํ์ธ์. ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ถฉ๋ถํ ํ ์คํธ๋์ง ์์ ์์ญ์ ์๋ณํ๊ณ ์๋ก์ด ํ ์คํธ๋ฅผ ์ถ๊ฐํ์ฌ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๊ฐ์ ํ์ธ์. ์ฝ๋ ๋ถ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฌ์ ์ธ ๊ฒฐํจ๊ณผ ์ทจ์ฝ์ ์ ์๋ณํ์ธ์. ์๋ณ๋ ๋ชจ๋ ๋ฌธ์ ๋ฅผ ์ ์์ ํด๊ฒฐํ์ธ์.
6. ์ฝ๋ ๋ฆฌ๋ทฐ์ ํตํฉ
ํ ์คํธ๋ฅผ ์ฝ๋ ๋ฆฌ๋ทฐ ํ๋ก์ธ์ค์ ํตํฉํ์ธ์. ๋ชจ๋ ์ฝ๋ ๋ณ๊ฒฝ์๋ ์ ์ ํ ํ ์คํธ๊ฐ ๋๋ฐ๋๋๋ก ํ์ธ์. ์ฝ๋๊ฐ ๋ฉ์ธ ๋ธ๋์น์ ๋ณํฉ๋๊ธฐ ์ ์ ๋ชจ๋ ํ ์คํธ๊ฐ ํต๊ณผํด์ผ ํฉ๋๋ค. ์ด๋ ์ฝ๋๋ฒ ์ด์ค์ ๊ฒฐํจ์ด ๋์ ๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์ ์ ์ด๊ณ ์ ๋ขฐํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค. SonarQube์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ด ๋ฆฌ๋ทฐ๋ฅผ ์๋ํํ๊ณ ์๋ ๋ฆฌ๋ทฐ๊ฐ ์ํ๋๊ธฐ ์ ์๋ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์๋ณํ ์ ์์ต๋๋ค.
7. ์ ์ ํ ๋จ์ธ ์ ํ
์ฌ๋ฐ๋ฅธ ๋จ์ธ ๋ฉ์๋๋ฅผ ์ ํํ๋ ๊ฒ์ ํจ๊ณผ์ ์ด๊ณ ๊ฐ๋ ์ฑ ์๋ ํ ์คํธ๋ฅผ ๋ง๋๋ ๋ฐ ์ค์ํฉ๋๋ค. Chai์ ๊ฐ์ ๋จ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ๋ค์ํ ๋จ์ธ ์คํ์ผ์ ์ ๊ณตํฉ๋๋ค:
- Expect: BDD ์คํ์ผ ๊ตฌ๋ฌธ์ ์ ๊ณตํฉ๋๋ค.
- Should: ๋ ์์ฐ์ค๋ฌ์ด ๊ตฌ๋ฌธ์ ์ํด `Object.prototype`์ ํ์ฅํฉ๋๋ค (์ฃผ์ํด์ ์ฌ์ฉ).
- Assert: ๋ ์ ํต์ ์ธ ๋จ์ธ ์คํ์ผ์ ์ ๊ณตํฉ๋๋ค.
ํ ๋ด์์ ํ์์ ๊ฐ์ฅ ์ ํฉํ๊ณ ๊ฐ๋ ์ฑ์ ๋์ด๋ ์คํ์ผ์ ์ ํํ์ธ์. ์ผ๋ฐ์ ์ผ๋ก `expect`๋ ๋ช ํ์ฑ๊ณผ ์์ ์ฑ ๋๋ฌธ์ ์ ํธ๋ฉ๋๋ค. ํญ์ ๋จ์ธ์ด ํ ์คํธ ๋์ ์ฝ๋์ ์์ ๋์์ ์ ํํ๊ฒ ๋ฐ์ํ๋๋ก ํ์ธ์.
8. ์ง์์ ์ธ ๊ฐ์
๊ฒ์ฆ ์ธํ๋ผ๋ ์ผํ์ฑ ํ๋ก์ ํธ๊ฐ ์๋๋ผ ์ง์์ ์ธ ํ๋ก์ธ์ค์ ๋๋ค. ํ ์คํธ ์ ๋ต, ๋๊ตฌ ๋ฐ ํ๋ก์ธ์ค๋ฅผ ์ง์์ ์ผ๋ก ๊ฒํ ํ๊ณ ๊ฐ์ ํ์ธ์. ์ต์ ํ ์คํธ ๋ํฅ๊ณผ ๊ธฐ์ ์ ๋ํ ์ต์ ์ ๋ณด๋ฅผ ์ ์งํ์ธ์. ๊ฐ๋ฐ์๋ค์ด ์๋ก์ด ํ ์คํธ ๊ธฐ์ ์ ๋ฐฐ์ฐ๊ณ ์ฑํํ๋๋ก ์ฅ๋ คํ์ธ์. ์ ๊ธฐ์ ์ผ๋ก ํ ์คํธ ์ธํ๋ผ์ ํจ๊ณผ๋ฅผ ํ๊ฐํ๊ณ ํ์์ ๋ฐ๋ผ ์กฐ์ ํ์ธ์. ๊ฐ์ ํ ์์ญ์ ์ฐพ๊ธฐ ์ํด ํ๊ณ ๋ฅผ ๊ฐ์ตํ๋ ๊ฒ์ ๊ณ ๋ คํด ๋ณด์ธ์. ์ง์์ ์ธ ๊ฐ์ ์ ๋ํ ๋ ธ๋ ฅ์ ๊ฒ์ฆ ์ธํ๋ผ๊ฐ ์๊ฐ์ด ์ง๋๋ ํจ๊ณผ์ ์ด๊ณ ๊ด๋ จ์ฑ์ ์ ์งํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
ํจ๊ณผ์ ์ธ ํ ์คํธ ์์ฑ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
๋ค์์ ํจ๊ณผ์ ์ธ ํ ์คํธ ์์ฑ์ ์ํ ๋ช ๊ฐ์ง ๋ชจ๋ฒ ์ฌ๋ก์ ๋๋ค:
- ์ฝ๋ ์์ฑ ์ ํ ์คํธ ์์ฑ (ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ - TDD): ์ด๋ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ ์ ์๊ตฌ์ฌํญ๊ณผ ์ค๊ณ์ ๋ํด ์๊ฐํ๊ฒ ๋ง๋ญ๋๋ค.
- ํ ์คํธ๋ฅผ ์๊ณ ์ง์ค์ ์ผ๋ก ์ ์ง: ๊ฐ ํ ์คํธ๋ ์ฝ๋์ ๋จ์ผ ์ธก๋ฉด์ ์ด์ ์ ๋ง์ถฐ์ผ ํฉ๋๋ค.
- ํ ์คํธ์ ์์ ์ ์ธ ์ด๋ฆ ์ฌ์ฉ: ํ ์คํธ ์ด๋ฆ์ ๋ฌด์์ ํ ์คํธํ๋์ง ๋ช ํํ๊ฒ ์ค๋ช ํด์ผ ํฉ๋๋ค.
- ์์ ๋์์ ๊ฒ์ฆํ๊ธฐ ์ํด ๋จ์ธ ์ฌ์ฉ: ๋จ์ธ์ ๋ช ํํ๊ณ ๊ฐ๊ฒฐํด์ผ ํ๋ฉฐ ์ฝ๋์ ์์ ๋์์ ์ ํํ๊ฒ ๋ฐ์ํด์ผ ํฉ๋๋ค.
- ์ปดํฌ๋ํธ ๊ฒฉ๋ฆฌ๋ฅผ ์ํด ๋ชจํน๊ณผ ์คํฐ๋น ์ฌ์ฉ: ๋ชจํน๊ณผ ์คํฐ๋น์ ์ฌ์ฉํ๋ฉด ์ธ๋ถ ์ข ์์ฑ์ ์์กดํ์ง ์๊ณ ์ปดํฌ๋ํธ๋ฅผ ๊ฒฉ๋ฆฌํ์ฌ ํ ์คํธํ ์ ์์ต๋๋ค.
- ๋๋ฌด ๊นจ์ง๊ธฐ ์ฌ์ด ํ ์คํธ ์์ฑ ํผํ๊ธฐ: ๊นจ์ง๊ธฐ ์ฌ์ด ํ ์คํธ๋ ์ฝ๋์ ์์ ๋ณ๊ฒฝ์๋ ์ฝ๊ฒ ๊นจ์ง๋๋ค.
- ํ ์คํธ๋ฅผ ์์ฃผ ์คํ: ๊ฐ๋ฐ ๊ณผ์ ์ด๊ธฐ์ ๊ฒฐํจ์ ๋ฐ๊ฒฌํ๊ธฐ ์ํด ๊ฐ๋ฅํ ํ ์์ฃผ ํ ์คํธ๋ฅผ ์คํํ์ธ์.
- ํ ์คํธ๋ฅผ ์ต์ ์ํ๋ก ์ ์ง: ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ํ ์คํธ๋ฅผ ์ ๋ฐ์ดํธํ์ธ์.
- ๋ช ํํ๊ณ ๊ฐ๊ฒฐํ ์ค๋ฅ ๋ฉ์์ง ์์ฑ: ์ค๋ฅ ๋ฉ์์ง๊ฐ ์คํจ ์์ธ์ ์ ์ํ๊ฒ ํ์ ํ ์ ์๋ ์ถฉ๋ถํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋๋ก ํ์ธ์.
- ๋ฐ์ดํฐ ์ฃผ๋ ํ ์คํธ ์ฌ์ฉ: ์ฌ๋ฌ ๋ฐ์ดํฐ ์ธํธ๋ก ์คํํด์ผ ํ๋ ํ ์คํธ์ ๊ฒฝ์ฐ, ์ฝ๋ ์ค๋ณต์ ํผํ๊ธฐ ์ํด ๋ฐ์ดํฐ ์ฃผ๋ ํ ์คํธ ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ธ์.
๋ค์ํ ํ๊ฒฝ์์์ ๊ฒ์ฆ ์ธํ๋ผ ์์
ํ๋ก ํธ์๋ ๊ฒ์ฆ ์ธํ๋ผ
ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ, ๊ฒฌ๊ณ ํ ๊ฒ์ฆ ์ธํ๋ผ๋ ๋ค์์ ํฌํจํ ์ ์์ต๋๋ค:
- ๋จ์ ํ ์คํธ: Jest ๋๋ Jasmine์ ์ฌ์ฉํ ๊ฐ๋ณ ์ปดํฌ๋ํธ ํ ์คํธ.
- ํตํฉ ํ ์คํธ: React Testing Library ๋๋ Vue Test Utils๋ฅผ ์ฌ์ฉํ ์ปดํฌ๋ํธ ๊ฐ ์ํธ์์ฉ ํ ์คํธ.
- ์๋ํฌ์๋ ํ ์คํธ: Cypress ๋๋ Playwright๋ฅผ ์ฌ์ฉํ ์ฌ์ฉ์ ์ํธ์์ฉ ์๋ฎฌ๋ ์ด์ .
- ์๊ฐ์ ํ๊ท ํ ์คํธ: Percy ๋๋ Applitools๋ฅผ ์ฌ์ฉํ ์คํฌ๋ฆฐ์ท ๋น๊ต.
- ์ ๊ทผ์ฑ ํ ์คํธ: axe-core ๋๋ WAVE๋ฅผ ์ฌ์ฉํ ์ ๊ทผ์ฑ ๋ฌธ์ ํ์ธ.
์ผ๋ฐ์ ์ธ ์ํฌํ๋ก์ฐ๋ ๊ฐ๋ฐ ์ค์๋ ๋จ์ ํ ์คํธ์ ํตํฉ ํ ์คํธ๋ฅผ ์คํํ๊ณ , CI/CD ํ์ดํ๋ผ์ธ์ ์ผ๋ถ๋ก ์๋ํฌ์๋ ํ ์คํธ, ์๊ฐ์ ํ๊ท ํ ์คํธ, ์ ๊ทผ์ฑ ํ ์คํธ๋ฅผ ์คํํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค.
๋ฐฑ์๋ ๊ฒ์ฆ ์ธํ๋ผ
๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ, ๊ฒฌ๊ณ ํ ๊ฒ์ฆ ์ธํ๋ผ๋ ๋ค์์ ํฌํจํ ์ ์์ต๋๋ค:
- ๋จ์ ํ ์คํธ: Mocha ๋๋ Jest๋ฅผ ์ฌ์ฉํ ๊ฐ๋ณ ํจ์ ๋๋ ํด๋์ค ํ ์คํธ.
- ํตํฉ ํ ์คํธ: ๋ค๋ฅธ ๋ชจ๋ ๋๋ ์๋น์ค ๊ฐ์ ์ํธ์์ฉ ํ ์คํธ.
- API ํ ์คํธ: Supertest ๋๋ Postman๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ API ์๋ํฌ์ธํธ ํ ์คํธ.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์คํธ: Knex.js ๋๋ Sequelize์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํธ์์ฉ ํ ์คํธ.
- ์ฑ๋ฅ ํ ์คํธ: Artillery ๋๋ LoadView์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ ์ธก์ .
์ผ๋ฐ์ ์ธ ์ํฌํ๋ก์ฐ๋ ๊ฐ๋ฐ ์ค์๋ ๋จ์ ํ ์คํธ์ ํตํฉ ํ ์คํธ๋ฅผ ์คํํ๊ณ , CI/CD ํ์ดํ๋ผ์ธ์ ์ผ๋ถ๋ก API ํ ์คํธ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์คํธ, ์ฑ๋ฅ ํ ์คํธ๋ฅผ ์คํํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค.
ํ ์คํธ์์ ๊ตญ์ ํ(i18n) ๋ฐ ํ์งํ(l10n) ๋ค๋ฃจ๊ธฐ
์ ์ธ๊ณ ๊ณ ๊ฐ์ ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋, ๊ฒ์ฆ ์ธํ๋ผ๊ฐ ๊ตญ์ ํ(i18n)์ ํ์งํ(l10n)๋ฅผ ๋ค๋ฃจ๋์ง ํ์ธํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ด๋ ๋ค์์ ํ ์คํธํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค:
- ํ ์คํธ์ ์ฌ๋ฐ๋ฅธ ํ์งํ: ๋ชจ๋ ํ ์คํธ๊ฐ ์ฌ์ฉ์์ ์ธ์ด๋ก ์ฌ๋ฐ๋ฅด๊ฒ ๋ฒ์ญ๋๊ณ ํ์๋๋์ง ํ์ธํฉ๋๋ค.
- ๋ ์ง ๋ฐ ์๊ฐ ํ์์ ์ ์ ํ ์ฒ๋ฆฌ: ๋ ์ง์ ์๊ฐ์ด ์ฌ์ฉ์์ ๋ก์ผ์ผ์ ๋ง๋ ์ฌ๋ฐ๋ฅธ ํ์์ผ๋ก ํ์๋๋์ง ํ์ธํฉ๋๋ค.
- ์ฌ๋ฐ๋ฅธ ํตํ ํ์: ํตํ๊ฐ ์ฌ์ฉ์์ ๋ก์ผ์ผ์ ๋ง๋ ์ฌ๋ฐ๋ฅธ ํ์์ผ๋ก ํ์๋๋์ง ํ์ธํฉ๋๋ค.
- ๋ค์ํ ๋ฌธ์ ์งํฉ ์ง์: ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ค์ํ ๋ฌธ์ ์งํฉ์ ์ง์ํ๊ณ ๋น ASCII ๋ฌธ์๋ฅผ ์ฒ๋ฆฌํ ์ ์๋์ง ํ์ธํฉ๋๋ค.
- ๋ ์ด์์ ์กฐ์ : ๋ ์ด์์์ด ๋ค๋ฅธ ํ ์คํธ ๋ฐฉํฅ(์: ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์ฐ๋ ์ธ์ด)์ ๋ง๊ฒ ์ฌ๋ฐ๋ฅด๊ฒ ์กฐ์ ๋๋์ง ํ์ธํฉ๋๋ค.
i18next๋ react-intl๊ณผ ๊ฐ์ ๋๊ตฌ๋ i18n ๋ฐ l10n์ ๋์์ด ๋ ์ ์์ผ๋ฉฐ, ํ ์คํธ ํ๋ ์์ํฌ๋ ๋ค๋ฅธ ๋ก์ผ์ผ๋ก ํ ์คํธ๋ฅผ ์คํํ๋๋ก ๊ตฌ์ฑํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ค๋ฅธ ์ธ์ด์ ์ง์ญ์์ ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ๋์ง ํ์ธํ ์ ์์ต๋๋ค. ํ ์คํธ ์ค์ ์ฌ์ฉ์์ ๋ก์ผ์ผ์ ๋ชจํนํ๋ ๊ฒ๋ ํจ๊ณผ์ ์ธ ์ ๋ต์ด ๋ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ธ ๋ฌธ์ ์ ๊ณผ ํด๊ฒฐ์ฑ
- ๋ฌธ์ ์ : ์ฌ์ํ ์ฝ๋ ๋ณ๊ฒฝ์๋ ๊นจ์ง๋ ์ทจ์ฝํ ํ ์คํธ. ํด๊ฒฐ์ฑ : ๋ด๋ถ ๊ตฌํ ์ธ๋ถ์ฌํญ๋ณด๋ค๋ ์ฝ๋์ ๊ณต๊ฐ API ๋ฐ ๋์์ ์ด์ ์ ๋ง์ถ ํ ์คํธ๋ฅผ ์์ฑํฉ๋๋ค. ๋ชจํน๊ณผ ์คํฐ๋น์ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ๋ฅผ ๊ฒฉ๋ฆฌํฉ๋๋ค.
- ๋ฌธ์ ์ : ๋๋ฆฐ ํ ์คํธ ์คํ ์๊ฐ. ํด๊ฒฐ์ฑ : ํ ์คํธ๋ฅผ ๋ณ๋ ฌ๋ก ์คํํฉ๋๋ค. ํ ์คํธ ์ฝ๋๋ฅผ ์ต์ ํํฉ๋๋ค. ์บ์ฑ์ ์ฌ์ฉํ์ฌ ์ธ๋ถ ์ข ์์ฑ ์๋ฅผ ์ค์ ๋๋ค.
- ๋ฌธ์ ์ : ์ผ๊ด์ฑ ์๋ ํ ์คํธ ๊ฒฐ๊ณผ. ํด๊ฒฐ์ฑ : ํ ์คํธ ํ๊ฒฝ์ด ์์ ์ ์ด๊ณ ์ฌํ ๊ฐ๋ฅํ์ง ํ์ธํฉ๋๋ค. Docker์ ๊ฐ์ ์ปจํ ์ด๋ํ ๊ธฐ์ ์ ์ฌ์ฉํฉ๋๋ค.
- ๋ฌธ์ ์ : ๋น๋๊ธฐ ์ฝ๋ ํ ์คํธ์ ์ด๋ ค์. ํด๊ฒฐ์ฑ : ํ ์คํธ ํ๋ ์์ํฌ์์ ์ ๊ณตํ๋ ๋น๋๊ธฐ ํ ์คํธ ๊ธฐ๋ฅ์ ์ฌ์ฉํฉ๋๋ค. `async/await`์ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ๋จ์ํํฉ๋๋ค.
- ๋ฌธ์ ์ : ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง ๋ถ์กฑ. ํด๊ฒฐ์ฑ : ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ถฉ๋ถํ ํ ์คํธ๋์ง ์์ ์์ญ์ ์๋ณํฉ๋๋ค. ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด ์๋ก์ด ํ ์คํธ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
- ๋ฌธ์ ์ : ํ ์คํธ ์ฝ๋ ์ ์ง๋ณด์. ํด๊ฒฐ์ฑ : ํ ์คํธ ์ฝ๋๋ฅผ ์ผ๊ธ ์ฝ๋๋ก ์ทจ๊ธํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ๋์ผํ ์ฝ๋ฉ ํ์ค ๋ฐ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ํ ์คํธ ์ฝ๋์๋ ๋ฐ๋ฆ ๋๋ค.
๊ฒฐ๋ก
๊ฒฌ๊ณ ํ ๊ฒ์ฆ ์ธํ๋ผ๋ฅผ ๊ตฌํํ๋ ๊ฒ์ JavaScript ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ง, ์ ๋ขฐ์ฑ ๋ฐ ์ ์ง๋ณด์์ฑ์ ๋ณด์ฅํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ์ฌ๋ฐ๋ฅธ ํ ์คํธ ํ๋ ์์ํฌ๋ฅผ ์ ํํ๊ณ , ๋ช ํํ ํ ์คํธ ์ ๋ต์ ์ ์ํ๋ฉฐ, ํ ์คํธ ํ๋ก์ธ์ค๋ฅผ ์๋ํํ๊ณ , ํจ๊ณผ์ ์ธ ํ ์คํธ ์์ฑ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ฉด, ์ฌ์ฉ์์ ์์น๋ ๋ฐฐ๊ฒฝ์ ๊ด๊ณ์์ด ๊ณ ํ์ง ์ํํธ์จ์ด๋ฅผ ์ ๊ณตํ๋ ๋ฐ ๋์์ด ๋๋ ๊ฒ์ฆ ์ธํ๋ผ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ํ ์คํธ๋ ๋ณํํ๋ ์๊ตฌ์ฌํญ๊ณผ ๊ธฐ์ ์ ๋ํ ์ง์์ ์ธ ๊ฐ์ ๊ณผ ์ ์์ด ํ์ํ ์ง์์ ์ธ ๊ณผ์ ์์ ๊ธฐ์ตํ์ธ์. ๊ฐ๋ฐ ํ๋ก์ธ์ค์ ํต์ฌ ๋ถ๋ถ์ผ๋ก ํ ์คํธ๋ฅผ ์์ฉํ๋ ๊ฒ์ ๊ถ๊ทน์ ์ผ๋ก ๋ ๋์ ์ํํธ์จ์ด์ ๋ ํ๋ณตํ ์ฌ์ฉ์๋ก ์ด์ด์ง ๊ฒ์ ๋๋ค.