๊ตญ์ ๊ฐ๋ฐํ ์ ๋ฐ์ ๊ฑธ์ณ ๊ฒฌ๊ณ ํ๊ณ ์ ์ง๋ณด์ ๊ฐ๋ฅํ๋ฉฐ ๊ณ ํ์ง ์ฝ๋๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๊ฒ์ฆ ๊ธฐ์ ์ ๋ง์คํฐํ์ธ์. ํจ๊ณผ์ ์ธ ์ฝ๋ ๋ณด์ฆ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก, ์ผ๋ฐ์ ์ธ ํจ์ , ๋๊ตฌ๋ฅผ ์ดํด๋ณด์ธ์.
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๊ฒ์ฆ: ๊ธ๋ก๋ฒ ๊ฐ๋ฐ์ ์ํ ์ฝ๋ ํ์ง ๋ณด์ฆ ์์ค ํฅ์
ํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ญ๋์ ์ธ ํ๊ฒฝ์์ ๊ฒฌ๊ณ ํ๊ณ ์ ์ง๋ณด์ ๊ฐ๋ฅํ๋ฉฐ ํ์ฅ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฅ๋ ฅ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋ค์ํ ์ง์ญ๊ณผ ๊ธฐ์ ์คํ์ ๊ฑธ์ณ ์์ ํ๋ ๊ธ๋ก๋ฒ ๊ฐ๋ฐํ์๊ฒ ์ผ๊ด๋ ์ฝ๋ ํ์ง์ ๋ณด์ฅํ๋ ๊ฒ์ ์ค์ํ ๊ณผ์ ์ ๋๋ค. ์ด๋ฌํ ๋ ธ๋ ฅ์ ํต์ฌ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๊ฒ์ฆ์ด ์์ต๋๋ค. ์ด๋ ์ฐ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ขฐ์ฑ๊ณผ ๋ฌด๊ฒฐ์ฑ์ ๋ท๋ฐ์นจํ๋ ์ฝ๋ ํ์ง ๋ณด์ฆ์ ํต์ฌ์ ์ธ ๊ดํ์ ๋๋ค.
์น ๊ฐ๋ฐ์์ ์ด๋์๋ ์กด์ฌํ๋ฉฐ Node.js๋ฅผ ํตํด ์๋ฒ ์ฌ์ด๋ ํ๊ฒฝ์ผ๋ก ์์ญ์ ํ์ฅํ๊ณ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ง์ ๊ตญ์ ํ๋ก์ ํธ์์ ์ฌ์ค์์ ํ์ค ์ธ์ด๊ฐ ๋์์ต๋๋ค. ์ค๋๋ CommonJS ํจํด์ด๋ ๋ ํ๋์ ์ธ ECMAScript ๋ชจ๋(ESM)์ด๋ , ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ชจ๋์ ํน์ฑ์ ๊ฐ๋ฐ์๊ฐ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ณ ๊ด๋ฆฌ ๊ฐ๋ฅํ๋ฉฐ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ถ๋ถ์ผ๋ก ๋๋ ์ ์๊ฒ ํด์ค๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ๋ชจ๋์ฑ์ ์๋ก์ด ๋์ ๊ณผ์ , ํนํ ์ด ๋ชจ๋๋ค์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ํธ ์์ฉํ๊ณ , ์ฌ์ ์ ์ ์๋ ํ์ค์ ์ค์ํ๋ฉฐ, ์ ์ฒด ์ฝ๋๋ฒ ์ด์ค์ ๊ธ์ ์ ์ผ๋ก ๊ธฐ์ฌํ๋๋ก ๋ณด์ฅํ๋ ๋ฐ ์์ด ์๋ก์ด ๊ณผ์ ๋ฅผ ์ ๊ธฐํฉ๋๋ค.
์ด ํฌ๊ด์ ์ธ ๊ฐ์ด๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๊ฒ์ฆ์ ๋ณต์ก์ฑ์ ๊น์ด ํ๊ณ ๋ค์ด ๊ทธ ์ค์์ฑ, ์ฌ์ฉ๋๋ ๋ค์ํ ๊ธฐ์ , ํ๋ก์ธ์ค๋ฅผ ์ฉ์ดํ๊ฒ ํ๋ ๋๊ตฌ, ๊ทธ๋ฆฌ๊ณ ๊ธ๋ก๋ฒ ๊ฐ๋ฐํ์ ์ํ ํจ๊ณผ์ ์ธ ์ฝ๋ ํ์ง ๋ณด์ฆ ์ ๋ต์ ๊ตฌํํ๊ธฐ ์ํ ์คํ ๊ฐ๋ฅํ ํต์ฐฐ๋ ฅ์ ํ๊ตฌํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๊ฒ์ฆ์ด ์ ์ค์ํ๊ฐ?
'์ด๋ป๊ฒ'์ ๋ํด ์์๋ณด๊ธฐ ์ ์, '์'๋ฅผ ํ์คํ ํด๋ก์๋ค. ๋ชจ๋ ๊ฒ์ฆ์ ๋จ์ํ ๊ด๋ฃ์ ์ธ ๋จ๊ณ๊ฐ ์๋๋ผ ์ ๋ฌธ ์ํํธ์จ์ด ์์ง๋์ด๋ง์ ๊ทผ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ ๋๋ค. ๋น๋๊ธฐ์ ์ผ๋ก, ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ์๊ฐ๋์ ๊ฑธ์ณ ํ์ ์ด ์ด๋ฃจ์ด์ง๋ ๊ธ๋ก๋ฒ ํ๊ฒฝ์์๋ ๋ช ํ์ฑ๊ณผ ํ์ค ์ค์๊ฐ ๋์ฑ ์ค์ํด์ง๋๋ค.
1. ์ฝ๋ ์ ์ง๋ณด์์ฑ ๋ฐ ๊ฐ๋ ์ฑ ํฅ์
์ ๊ฒ์ฆ๋ ๋ชจ๋์ ์ดํด, ์์ ๋ฐ ๋๋ฒ๊น ํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค. ๋ชจ๋์ด ํ๋ฆฝ๋ ํจํด์ ๋ฐ๋ฅด๊ณ ๋ช ํํ ์ธํฐํ์ด์ค๋ฅผ ๋ ธ์ถํ ๋, ๋ค์ํ ๋ฌธํ์ ๋ฐฐ๊ฒฝ๊ณผ ๊ฒฝํ ์์ค์ ๊ฐ์ง ๊ฐ๋ฐ์๋ค์ด ๋ ํฐ ์์ ๊ฐ์ ๊ฐ์ง๊ณ ์ฝ๋๋ฒ ์ด์ค์ ๊ธฐ์ฌํ ์ ์์ต๋๋ค. ์ด๋ ์๋ก์ด ํ์์ ์จ๋ณด๋ฉํ๊ฑฐ๋ ์ง์ญ ๊ฐ์ ์์ ์ด ์ธ๊ณ๋ ๋ ์ธ์ง ๋ถํ๋ฅผ ํฌ๊ฒ ์ค์ฌ์ค๋๋ค.
2. ๋ฐํ์ ์ค๋ฅ ๋ฐ ๋ฒ๊ทธ ๋ฐฉ์ง
์๋ชป ๊ตฌ์กฐํ๋๊ฑฐ๋ ๋ถ์ ์ ํ๊ฒ ๋ด๋ณด๋ด์ง ๋ชจ๋์ ๋ฏธ๋ฌํ๊ณ ๋ต๋ตํ ๋ฐํ์ ์ค๋ฅ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ฆ์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ๊ฐ๋ฐ ์ฃผ๊ธฐ ์ด๊ธฐ์, ์ข ์ข ์ฝ๋๊ฐ ํ ์คํธ ํ๊ฒฝ์ ๋๋ฌํ๊ธฐ ์ ์ ์ก์๋ด๋ ์ฌ์ ๋ฐฉ์ด ์ญํ ์ ํฉ๋๋ค. ์ด๋ ๋ถ์ฐ๋ ํ์๊ฒ ํนํ ์ค์ํ๋ฉฐ, ๋ฒ๊ทธ ์์ ๋น์ฉ์ ๋ฐฐํฌ ๋จ๊ณ๋ง๋ค ๊ธฐํ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํฉ๋๋ค.
3. ์ฌ์ฌ์ฉ์ฑ ๋ฐ ์ผ๊ด์ฑ ์ฆ์ง
๋ชจ๋์ ๋์์ธ์ ๋ณธ์ง์ ์ฌ์ฌ์ฉ์ฑ์ ๋๋ค. ๊ฒ์ฆ์ ๋ชจ๋์ด ์ ์ ์๋ ์์กด์ฑ๊ณผ ์ถ๋ ฅ์ ๊ฐ์ง ๋ ๋ฆฝ์ ์ธ ๋จ์๋ก ์ค๊ณ๋๋๋ก ๋ณด์ฅํฉ๋๋ค. ๋ชจ๋ ์ ๋ฐ์ ๊ฑธ์น ์ด๋ฌํ ์ผ๊ด์ฑ์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌ์ถํ๋ ๋ฌธํ๋ฅผ ์กฐ์ฑํ์ฌ, ๊ฐ๋ฐ์ด ์ด๋์์ ์ด๋ฃจ์ด์ง๋ ๋ ๋น ๋ฅธ ๊ฐ๋ฐ ์ฃผ๊ธฐ์ ๋ ์ผ๊ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ํคํ ์ฒ๋ก ์ด์ด์ง๋๋ค.
4. ํ์ ๋ฐ ์ปค๋ฎค๋์ผ์ด์ ๊ฐ์
๋ชจ๋์ด ํฉ์๋ ๊ท์น๊ณผ ๊ด๋ก์ ๋ฐ๋ผ ๊ฒ์ฆ๋ ๋, ์ด๋ ๊ฐ๋ฐํ์ ์ํ ๊ณต์ ๋ ์ธ์ด ์ญํ ์ ํฉ๋๋ค. ์ด๋ฌํ ๊ณต์ ๋ ์ดํด๋ ์คํด๋ฅผ ์ค์ด๊ณ , ํนํ ๋๋ฉด ์ํต์ด ์ ํ๋ ์๊ฒฉ ํ๊ฒฝ์์ ๋ ์ํํ ํ์ ์ ์ด์งํฉ๋๋ค. ๊ฐ๋ฐ์๋ค์ ๊ฒ์ฆ ํ๋ก์ธ์ค์ ์์กดํ์ฌ ํ์ค์ ๊ฐ์ ํ ์ ์์ผ๋ฏ๋ก, ์คํ์ผ ์ ํธ๋๋ ๊ตฌ์กฐ์ ์ ๊ทผ ๋ฐฉ์์ ๋ํ ๋ ผ์์ ์ต์ํํ ์ ์์ต๋๋ค.
5. ๋ณด์ ๊ฐํ
์ฃผ์ ์ด์ ์ ์๋์ง๋ง, ๋ชจ๋ ๊ฒ์ฆ์ ์ ์ฉ๋ ์ ์๋ ์๋ํ์ง ์์ ๊ธฐ๋ฅ์ด๋ ์์กด์ฑ์ ๋ ธ์ถํ์ง ์๋๋ก ๋ณด์ฅํจ์ผ๋ก์จ ๊ฐ์ ์ ์ผ๋ก ๋ณด์์ ๊ธฐ์ฌํ ์ ์์ต๋๋ค. ์ ์ ํ๊ฒ ๋ฒ์๊ฐ ์ง์ ๋๊ณ ๊ฒ์ฆ๋ ๋ชจ๋์ ์ทจ์ฝ์ ์ ๋์ ํ ๊ฐ๋ฅ์ฑ์ด ์ ์ต๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ์์คํ ์ ์ดํด
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋์ ํจ๊ณผ์ ์ผ๋ก ๊ฒ์ฆํ๋ ค๋ฉด, ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋ชจ๋ ์์คํ ์ ์ดํดํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค. ๊ฐ ์์คํ ์๋ ๊ฒ์ฆ ๋๊ตฌ์ ๊ดํ์ด ๊ณ ๋ คํด์ผ ํ ๊ณ ์ ํ ๋ฏธ๋ฌํ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
1. CommonJS
์๋ฒ ์ฌ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ, ํนํ Node.js ํ๊ฒฝ์ ์ฌ์ค์ ํ์ค์ ๋๋ค. CommonJS๋ ๋ชจ๋์ ๊ฐ์ ธ์ค๊ธฐ ์ํด ๋๊ธฐ์ `require()` ๊ธฐ๋ฐ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๊ณ , ๋ด๋ณด๋ด๊ธฐ ์ํด `module.exports` ๋๋ `exports`๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์์:
// math.js
const add = (a, b) => a + b;
module.exports = { add };
// app.js
const math = require('./math');
console.log(math.add(5, 3)); // Output: 8
CommonJS์์์ ๊ฒ์ฆ์ ์ข ์ข `require()` ๊ฒฝ๋ก๊ฐ ์ฌ๋ฐ๋ฅธ์ง, ๋ด๋ณด๋ธ ๊ฐ์ฒด๊ฐ ์์๋๋ก ๊ตฌ์กฐํ๋์๋์ง, ๊ทธ๋ฆฌ๊ณ ๋ฌธ์ ๋ฅผ ์ผ์ผํค๋ ์ํ ์์กด์ฑ์ด ์๋์ง ํ์ธํ๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค.
2. ECMAScript Modules (ESM)
ES6(ECMAScript 2015)์ ํจ๊ป ๋์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋์ ๊ณต์ ํ์ค์ ๋๋ค. ESM์ ์ ์ธ์ ์ด๊ณ ๋น๋๊ธฐ์ ์ธ `import` ๋ฐ `export` ๊ตฌ๋ฌธ์ ์ฌ์ฉํฉ๋๋ค. ํ๋ก ํธ์๋(Webpack, Rollup๊ณผ ๊ฐ์ ๋ฒ๋ค๋ฌ๋ฅผ ํตํด)์ ๋ฐฑ์๋(Node.js ์ง์์ด ์ฑ์ํด์ง๊ณ ์์) ๊ฐ๋ฐ ๋ชจ๋์์ ์ ์ ๋ ๋๋ฆฌ ํผ์ง๊ณ ์์ต๋๋ค.
์์:
// utils.js
export const multiply = (a, b) => a * b;
// main.js
import { multiply } from './utils';
console.log(multiply(4, 6)); // Output: 24
ESM์ ๋ํ ๊ฒ์ฆ์ ์ผ๋ฐ์ ์ผ๋ก import/export ๋ฌธ์ ํ์ธํ๊ณ , ๋ช ๋ช ๋ ๋ด๋ณด๋ด๊ธฐ๊ฐ ์ ์ธ๊ณผ ์ผ์นํ๋์ง ํ์ธํ๋ฉฐ, ๋ชจ๋ ๋ก๋ฉ์ ๋น๋๊ธฐ์ ํน์ฑ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค.
3. AMD (Asynchronous Module Definition)
์๋ก์ด ํ๋ก์ ํธ์์๋ ๋ ์ผ๋ฐ์ ์ด์ง๋ง, AMD๋ ํนํ RequireJS์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ๊ป ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ ์ธ๊ธฐ๊ฐ ์์์ต๋๋ค. ๋น๋๊ธฐ์ ์ ์ ๊ตฌ๋ฌธ์ ์ฌ์ฉํฉ๋๋ค.
์์:
// calculator.js
define(['dependency1', 'dependency2'], function(dep1, dep2) {
return {
subtract: function(a, b) {
return a - b;
}
};
});
// main.js
require(['calculator'], function(calc) {
console.log(calc.subtract(10, 4)); // Output: 6
});
AMD์ ๋ํ ๊ฒ์ฆ์ `define` ํจ์์ ์ฌ๋ฐ๋ฅธ ๊ตฌ์กฐ, ์์กด์ฑ ๋ฐฐ์ด ๋ฐ ์ฝ๋ฐฑ ๋งค๊ฐ๋ณ์์ ์ค์ ์ ๋ ์ ์์ต๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๊ฒ์ฆ์ ์ํ ํต์ฌ ๊ธฐ์
ํจ๊ณผ์ ์ธ ๋ชจ๋ ๊ฒ์ฆ์ ์ ์ ๋ถ์, ์๋ํ๋ ํ ์คํธ, ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ฒ ์ฌ๋ก ์ค์๋ฅผ ๊ฒฐํฉํ ๋ค๊ฐ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค. ๊ธ๋ก๋ฒ ํ์ ๊ฒฝ์ฐ, ๋ชจ๋ ๊ฐ๋ฐ ํ๋ธ์ ๊ฑธ์ณ ์ผ๊ด๋ ํ๋ก์ธ์ค๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ์ด ํต์ฌ์ ๋๋ค.
1. ๋ฆฐํ (Linting)
๋ฆฐํ ์ ์คํ์ผ ์ค๋ฅ, ์ ์ฌ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ์ค๋ฅ ๋ฐ ์์ฌ์ค๋ฌ์ด ๊ตฌ๋ฌธ์ ์๋ณํ๊ธฐ ์ํด ์ฝ๋๋ฅผ ์ ์ ์ผ๋ก ๋ถ์ํ๋ ํ๋ก์ธ์ค์ ๋๋ค. ๋ฆฐํฐ๋ ๋ชจ๋ ๊ฐ์ ธ์ค๊ธฐ, ๋ด๋ณด๋ด๊ธฐ ๋ฐ ์ ๋ฐ์ ์ธ ์ฝ๋ ๊ตฌ์กฐ์ ๊ด๋ จ๋ ๊ท์น์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
์ฃผ์ ๋ฆฐํ ๋๊ตฌ:
- ESLint: ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๊ณ ๊ตฌ์ฑ ๊ฐ๋ฅ์ฑ์ด ๋์ ์๋ฐ์คํฌ๋ฆฝํธ์ฉ ๋ฆฐํฐ์ ๋๋ค. ESLint๋ ์์ผ๋์นด๋ ๊ฐ์ ธ์ค๊ธฐ ๊ธ์ง, ์ผ๊ด๋ ๋ด๋ณด๋ด๊ธฐ ์คํ์ผ ๋ณด์ฅ, ๋ชจ๋ ๋ด ์ฌ์ฉ๋์ง ์๋ ๋ณ์ ํ๋๊ทธ ์ง์ ๊ณผ ๊ฐ์ ๋ชจ๋ ๊ท์น์ ๊ฐ์ ํ๋๋ก ํน์ ๊ท์น์ผ๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ํ๋ฌ๊ทธ์ธ ์ํคํ ์ฒ๋ฅผ ํตํด ํน์ ํ๋ก์ ํธ ์๊ตฌ ์ฌํญ์ด๋ ํ ํฉ์์ ๋ง์ถ ์ฌ์ฉ์ ์ง์ ๊ท์น์ ๋ง๋ค ์ ์์ต๋๋ค. ๊ธ๋ก๋ฒ ํ์ ๊ฒฝ์ฐ, ๊ณต์ ๋ ESLint ๊ตฌ์ฑ์ ๋ชจ๋ ๊ธฐ์ฌ์์ ๊ฑธ์ณ ํต์ผ๋ ์ฝ๋ฉ ํ์ค์ ๋ณด์ฅํฉ๋๋ค.
- JSHint/JSLint: ๋ ์ค๋๋์์ง๋ง ์ฌ์ ํ ์๋ํ๋ ๋ฆฐํฐ๋ก, ๋ ์๊ฒฉํ ์ฝ๋ฉ ๊ท์น์ ์ ์ฉํฉ๋๋ค. ESLint๋ณด๋ค ์ ์ฐ์ฑ์ ๋จ์ด์ง์ง๋ง ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ์ ๋ฌธ์ ๋ฅผ ์ก์๋ผ ์ ์์ต๋๋ค.
๋ฆฐํ ์ด ๋ชจ๋ ๊ฒ์ฆ์ ๋์์ด ๋๋ ๋ฐฉ์:
- ๊ฐ์ ธ์ค๊ธฐ/๋ด๋ณด๋ด๊ธฐ ๊ตฌ๋ฌธ ๊ฒ์ฌ: `import` ๋ฐ `require` ๋ฌธ์ด ์ฌ๋ฐ๋ฅด๊ฒ ํ์ํ๋๊ณ ๋ชจ๋์ด ์๋ํ ๋๋ก ๋ด๋ณด๋ด์ง๋์ง ํ์ธํฉ๋๋ค.
- ์ฌ์ฉ๋์ง ์๋ ๋ณ์/๋ชจ๋ ์์: ๊ฐ์ ธ์ค์ง ์์ ๋ด๋ณด๋ด๊ธฐ๋ ๋ชจ๋ ๋ด์์ ์ ํ ์ฌ์ฉ๋์ง ์๋ ๋ณ์๋ฅผ ์๋ณํ์ฌ ๋ ๊นจ๋ํ๊ณ ํจ์จ์ ์ธ ์ฝ๋๋ฅผ ์ด์งํฉ๋๋ค.
- ๋ชจ๋ ๊ฒฝ๊ณ ๊ฐ์ : Node.js ๋ชจ๋ ๋ด์์ ์ง์ ์ ์ธ DOM ์กฐ์์ ๋ฐฉ์งํ๊ฑฐ๋, ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ์ค๋ ํน์ ๋ฐฉ์์ ๊ฐ์ ํ๋ ๊ท์น์ ์ค์ ํ ์ ์์ต๋๋ค.
- ์์กด์ฑ ๊ด๋ฆฌ: ์ผ๋ถ ESLint ํ๋ฌ๊ทธ์ธ์ ๋ชจ๋ ์์กด์ฑ๊ณผ ๊ด๋ จ๋ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์๋ณํ๋ ๋ฐ ๋์์ ์ค ์ ์์ต๋๋ค.
๊ธ๋ก๋ฒ ๊ตฌํ ํ:
์ ์ฅ์์ ์ค์ํ๋ `.eslintrc.js` (๋๋ ๋๋ฑํ) ํ์ผ์ ์ ์งํ๊ณ ๋ชจ๋ ๊ฐ๋ฐ์๊ฐ ์ด๋ฅผ ์ฌ์ฉํ๋๋ก ํ์ญ์์ค. ESLint๋ฅผ ํตํฉ ๊ฐ๋ฐ ํ๊ฒฝ(IDE)๊ณผ ์ง์์ ํตํฉ/์ง์์ ๋ฐฐํฌ(CI/CD) ํ์ดํ๋ผ์ธ์ ํตํฉํ์ญ์์ค. ์ด๋ ๊ฐ๋ฐ์์ ์์น์ ๊ด๊ณ์์ด ๋ชจ๋ ์ปค๋ฐ์ ๋ํด ๋ฆฐํ ๊ฒ์ฌ๊ฐ ์ผ๊ด๋๊ฒ ์ํ๋จ์ ๋ณด์ฅํฉ๋๋ค.
2. ์ ์ ํ์ ๊ฒ์ฌ
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋์ ํ์ ์ธ์ด์ด์ง๋ง, ์ ์ ํ์ ๊ฒ์ฌ๊ธฐ๋ ๋ฐํ์ ์ ์ ๋ชจ๋ ๊ฒฝ๊ณ ์ ๋ฐ์ ๊ฑธ์ณ ํ์ ์ผ๊ด์ฑ์ ํ์ธํจ์ผ๋ก์จ ์ฝ๋ ํ์ง์ ํฌ๊ฒ ํฅ์์ํค๊ณ ์ค๋ฅ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
์ฃผ์ ์ ์ ํ์ ๊ฒ์ฌ๊ธฐ:
- TypeScript: ์ ์ ํ์ดํ์ ์ถ๊ฐํ ์๋ฐ์คํฌ๋ฆฝํธ์ ์์ ์งํฉ์ ๋๋ค. TypeScript ์ปดํ์ผ๋ฌ๋ ๋น๋ ๊ณผ์ ์์ ํ์ ์ค๋ฅ๋ฅผ ํ์ธํฉ๋๋ค. ๋ชจ๋์ ๋ํ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ์ฌ ์ ๋ ฅ์ผ๋ก ์์ํ๋ ๋ฐ์ดํฐ ํ์ ๊ณผ ๋ฐํํ๋ ๋ฐ์ดํฐ ํ์ ์ ๋ช ์ํ ์ ์์ต๋๋ค. ์ด๋ ๋ณต์กํ ์ฝ๋๋ฒ ์ด์ค์์ ์์ ํ๋ ๋๊ท๋ชจ ๋ถ์ฐ ํ์๊ฒ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
- Flow: Facebook์์ ๊ฐ๋ฐํ Flow๋ ์ ์ง์ ์ผ๋ก ์ฑํํ ์ ์๋ ๋ ๋ค๋ฅธ ์๋ฐ์คํฌ๋ฆฝํธ์ฉ ์ ์ ํ์ ๊ฒ์ฌ๊ธฐ์ ๋๋ค.
์ ์ ํ์ ๊ฒ์ฌ๊ฐ ๋ชจ๋ ๊ฒ์ฆ์ ๋์์ด ๋๋ ๋ฐฉ์:
- ์ธํฐํ์ด์ค ๊ฐ์ : ๋ชจ๋ ๋ด์ ํจ์์ ํด๋์ค๊ฐ ์ ์๋ ์๊ทธ๋์ฒ๋ฅผ ์ค์ํ๋๋ก ๋ณด์ฅํ์ฌ, ๋ชจ๋์ด ์ํธ ์์ฉํ ๋ ํ์ ๋ถ์ผ์น๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
- ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ: ๋ชจ๋ ๊ฐ์ ์ ๋ฌ๋๋ ๋ฐ์ดํฐ๊ฐ ์์ ํ์๊ณผ ์ผ์นํจ์ ๋ณด์ฅํ์ฌ ๋ฐ์ดํฐ ์์ ๋ฌธ์ ๋ฅผ ์ค์ ๋๋ค.
- ์๋ ์์ฑ ๋ฐ ๋ฆฌํฉํ ๋ง ๊ฐ์ : ํ์ ์ ๋ณด๋ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ํฅ์์์ผ ์ฝ๋๋ฅผ ๋ ์ฝ๊ฒ ์ดํดํ๊ณ ๋ฆฌํฉํ ๋งํ ์ ์๊ฒ ํ๋ฉฐ, ์ด๋ ํนํ ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค๋ก ์์ ํ๋ ์๊ฒฉ ํ์๊ฒ ์ ์ตํฉ๋๋ค.
- ์กฐ๊ธฐ ์ค๋ฅ ๊ฐ์ง: ๋ฐํ์๋ณด๋ค ํจ์ฌ ์ด๋ฅด๊ณ ์ ๋ ดํ ๊ฐ๋ฐ ์๋ช ์ฃผ๊ธฐ ์์ ์ธ ์ปดํ์ผ ํ์์ ํ์ ๊ด๋ จ ์ค๋ฅ๋ฅผ ์ก์๋ ๋๋ค.
๊ธ๋ก๋ฒ ๊ตฌํ ํ:
TypeScript ๋๋ Flow๋ฅผ ํ๋ก์ ํธ ์ ์ฒด ํ์ค์ผ๋ก ์ฑํํ์ญ์์ค. ๋ชจ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ช ํํ ๋ฌธ์๋ฅผ ์ ๊ณตํ๊ณ , ๋น๋ ํ๋ก์ธ์ค ๋ฐ CI/CD ํ์ดํ๋ผ์ธ์ ํ์ ๊ฒ์ฌ๋ฅผ ํตํฉํ์ญ์์ค. ์ ๊ธฐ์ ์ธ ๊ต์ก ์ธ์ ์ ํตํด ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์ด ์ ์ ํ์ดํ ๊ดํ์ ์ต์ํด์ง๋๋ก ๋์ธ ์ ์์ต๋๋ค.
3. ์ ๋ ๋ฐ ํตํฉ ํ ์คํธ
์ ์ ๋ถ์์ด ๋ฐํ์ ์ ์ ๋ฌธ์ ๋ฅผ ์ก์๋ด๋ ๋ฐ๋ฉด, ํ ์คํธ๋ ๋ชจ๋์ ์ค์ ๋์์ ๊ฒ์ฆํฉ๋๋ค. ๊ฐ๋ณ ๋ชจ๋์ ๊ฒฉ๋ฆฌํ์ฌ ํ ์คํธํ๋ ์ ๋ ํ ์คํธ์ ๋ชจ๋์ด ์ด๋ป๊ฒ ์ํธ ์์ฉํ๋์ง ํ ์คํธํ๋ ํตํฉ ํ ์คํธ ๋ชจ๋ ์ค์ํฉ๋๋ค.
์ฃผ์ ํ ์คํธ ํ๋ ์์ํฌ:
- Jest: ์ฌ์ฉ ํธ์์ฑ, ๋ด์ฅ๋ ๋จ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ๋ชจํน ๊ธฐ๋ฅ์ผ๋ก ์ ๋ช ํ ์ธ๊ธฐ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ ์คํธ ํ๋ ์์ํฌ์ ๋๋ค. Jest์ ์ค๋ ์ท ํ ์คํ ๊ณผ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง ๊ธฐ๋ฅ์ ๋ชจ๋ ๊ฒ์ฆ์ ํนํ ์ ์ฉํฉ๋๋ค.
- Mocha: ๋ค์ํ ๋จ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(์: Chai) ๋ฐ ๋ชจํน ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ ์ ์ฐํ๊ณ ๊ธฐ๋ฅ์ด ํ๋ถํ ์๋ฐ์คํฌ๋ฆฝํธ ํ ์คํธ ํ๋ ์์ํฌ์ ๋๋ค.
- Cypress: ์ฃผ๋ก ์๋ํฌ์๋ ํ ์คํธ ํ๋ ์์ํฌ์ด์ง๋ง, ๋ธ๋ผ์ฐ์ ํ๊ฒฝ์์ ๋ชจ๋ ์ํธ ์์ฉ์ ํตํฉ ํ ์คํธ์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํ ์คํ ์ด ๋ชจ๋ ๊ฒ์ฆ์ ๋์์ด ๋๋ ๋ฐฉ์:
- ํ๋ ๊ฒ์ฆ: ์ฃ์ง ์ผ์ด์ค ๋ฐ ์ค๋ฅ ์กฐ๊ฑด์ ํฌํจํ์ฌ ๋ชจ๋์ด ์ฌ์์ ๋ฐ๋ผ ์์๋๋ก ์๋ํ๋์ง ํ์ธํฉ๋๋ค.
- ๊ณ์ฝ ํ ์คํธ: ํตํฉ ํ ์คํธ๋ ๋ชจ๋ ๊ฐ์ ๊ณ์ฝ ํ ์คํธ ํํ๋ก ์์ฉํ์ฌ, ์ธํฐํ์ด์ค๊ฐ ํธํ ๊ฐ๋ฅํ ์ํ๋ฅผ ์ ์งํ๋์ง ๊ฒ์ฆํฉ๋๋ค.
- ํ๊ท ๋ฐฉ์ง: ํ ์คํธ๋ ์์ ๋ง ์ญํ ์ ํ์ฌ, ํ ๋ชจ๋์ ๋ณ๊ฒฝ์ด ์์กดํ๋ ๋ชจ๋์ ์๋์น ์๊ฒ ์์์ํค์ง ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
- ๋ฆฌํฉํ ๋ง์ ๋ํ ์์ ๊ฐ: ํฌ๊ด์ ์ธ ํ ์คํธ ์ค์ํธ๋ ๊ฐ๋ฐ์์๊ฒ ๋ชจ๋์ ๋ฆฌํฉํ ๋งํ ์ ์๋ ์์ ๊ฐ์ ์ฃผ๋ฉฐ, ํ ์คํธ๊ฐ ๋์ ๋ ๋ชจ๋ ํ๊ท๋ฅผ ์ ์ํ๊ฒ ๋๋ฌ๋ผ ๊ฒ์ด๋ผ๋ ๊ฒ์ ์๊ฒ ํด์ค๋๋ค.
๊ธ๋ก๋ฒ ๊ตฌํ ํ:
๋ช ํํ ํ ์คํธ ์ ๋ต์ ์๋ฆฝํ๊ณ ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ(TDD) ๋๋ ํ๋ ์ฃผ๋ ๊ฐ๋ฐ(BDD) ์ ๊ทผ ๋ฐฉ์์ ์ฅ๋ คํ์ญ์์ค. ํ ์คํธ ์ค์ํธ๊ฐ ๋ก์ปฌ์์ ์ฝ๊ฒ ์คํ ๊ฐ๋ฅํ๊ณ CI/CD ํ์ดํ๋ผ์ธ์ ์ผ๋ถ๋ก ์๋ ์คํ๋๋๋ก ํ์ญ์์ค. ์์ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง ์์ค์ ๋ฌธ์ํํ์ญ์์ค. ํ๋ก ํธ์๋ ๋ชจ๋์ ๋ํด ๊ต์ฐจ ๋ธ๋ผ์ฐ์ ๋๋ ๊ต์ฐจ ํ๊ฒฝ ํ ์คํธ๋ฅผ ์ฉ์ดํ๊ฒ ํ๋ ๋๊ตฌ ์ฌ์ฉ์ ๊ณ ๋ คํ์ญ์์ค.
4. ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ๊ทธ ๊ฒ์ฆ ๊ธฐ๋ฅ
Webpack, Rollup, Parcel๊ณผ ๊ฐ์ ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ, ํนํ ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ด๋ค์ ๋ชจ๋์ ์ฒ๋ฆฌํ๊ณ , ์์กด์ฑ์ ํด๊ฒฐํ๋ฉฐ, ์ต์ ํ๋ ๋ฒ๋ค๋ก ํจํค์งํฉ๋๋ค. ์ด ๊ณผ์ ์์ ๊ฒ์ฆ์ ํ ํํ๋ก ๊ฐ์ฃผ๋ ์ ์๋ ๊ฒ์ฌ๋ฅผ ์ํํฉ๋๋ค.
๋ฒ๋ค๋ฌ๊ฐ ๋ชจ๋ ๊ฒ์ฆ์ ๋์์ด ๋๋ ๋ฐฉ์:
- ์์กด์ฑ ํด๊ฒฐ: ๋ฒ๋ค๋ฌ๋ ๋ชจ๋ ๋ชจ๋ ์์กด์ฑ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ณ๋๊ณ ์ต์ข ๋ฒ๋ค์ ํฌํจ๋๋๋ก ๋ณด์ฅํฉ๋๋ค. `import`/`require` ๊ฒฝ๋ก์ ์ค๋ฅ๋ ์ข ์ข ์ฌ๊ธฐ์ ์กํ๋๋ค.
- ๋ฐ๋ ์ฝ๋ ์ ๊ฑฐ (ํธ๋ฆฌ ์์ดํน): ๋ฒ๋ค๋ฌ๋ ๋ชจ๋์์ ์ฌ์ฉ๋์ง ์๋ ๋ด๋ณด๋ด๊ธฐ๋ฅผ ์๋ณํ๊ณ ์ ๊ฑฐํ์ฌ ์ต์ข ์ถ๋ ฅ์ ํ์ํ ์ฝ๋๋ง ํฌํจ๋๋๋ก ํ ์ ์์ผ๋ฉฐ, ์ด๋ ๋ถํ์ํ ์ฝ๋ ์ฆ๊ฐ์ ๋ํ ๊ฒ์ฆ์ ํ ํํ์ ๋๋ค.
- ๊ตฌ๋ฌธ ๋ฐ ๋ชจ๋ ํ์ ๋ณํ: ๋ค๋ฅธ ๋ชจ๋ ํ์(์: CommonJS๋ฅผ ESM์ผ๋ก ๋๋ ๊ทธ ๋ฐ๋๋ก)์ ๋ณํํ๊ณ ํธํ์ฑ์ ๋ณด์ฅํ๋ฉฐ, ๊ทธ ๊ณผ์ ์์ ๊ตฌ๋ฌธ ์ค๋ฅ๋ฅผ ์ก์๋ผ ์ ์์ต๋๋ค.
- ์ฝ๋ ๋ถํ : ์ฃผ๋ก ์ต์ ํ ๊ธฐ์ ์ด์ง๋ง, ์ฝ๋๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๋ถํ ํ๊ธฐ ์ํด ๋ชจ๋ ๊ฒฝ๊ณ๋ฅผ ์ดํดํ๋ ๋ฐ ์์กดํฉ๋๋ค.
๊ธ๋ก๋ฒ ๊ตฌํ ํ:
ํ๋ก์ ํธ์ ์ฌ์ฉํ ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ฅผ ํ์คํํ๊ณ ๋ชจ๋ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ผ๊ด๋๊ฒ ๊ตฌ์ฑํ์ญ์์ค. ๋น๋ ์๊ฐ ์ค๋ฅ๋ฅผ ์กฐ๊ธฐ์ ์ก์๋ด๊ธฐ ์ํด ๋ฒ๋ค๋ง ํ๋ก์ธ์ค๋ฅผ CI/CD ํ์ดํ๋ผ์ธ์ ํตํฉํ์ญ์์ค. ๋น๋ ํ๋ก์ธ์ค์ ๋ชจ๋ ์ฒ๋ฆฌ์ ๊ด๋ จ๋ ํน์ ๊ตฌ์ฑ์ ๋ฌธ์ํํ์ญ์์ค.
5. ์ฝ๋ ๋ฆฌ๋ทฐ
์ธ๊ฐ์ ๊ฐ๋ ์ ์ฌ์ ํ ํ์ง ๋ณด์ฆ์ ํ์์ ์ธ ๋ถ๋ถ์ ๋๋ค. ๋๋ฃ ์ฝ๋ ๋ฆฌ๋ทฐ๋ ์๋ํ๋ ๋๊ตฌ๊ฐ ์์ ํ ๋ณต์ ํ ์ ์๋ ๊ฒ์ฆ ๊ณ์ธต์ ์ ๊ณตํฉ๋๋ค.
์ฝ๋ ๋ฆฌ๋ทฐ๊ฐ ๋ชจ๋ ๊ฒ์ฆ์ ๋์์ด ๋๋ ๋ฐฉ์:
- ์ํคํ ์ฒ ์ค์: ๋ฆฌ๋ทฐ์ด๋ ์๋ก์ด ๋ชจ๋์ด ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ํคํ ์ฒ ๋ฐ ํ๋ฆฝ๋ ๋์์ธ ํจํด๊ณผ ์ผ์นํ๋์ง ํ๊ฐํ ์ ์์ต๋๋ค.
- ๋น์ฆ๋์ค ๋ก์ง ๊ฒ์ฆ: ๋ชจ๋ ๋ด์ ๋ก์ง์ ์ ํ์ฑ์ ๊ฒ์ฆํ์ฌ ๋น์ฆ๋์ค ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋์ง ํ์ธํ ์ ์์ต๋๋ค.
- ๊ฐ๋ ์ฑ ๋ฐ ์ ์ง๋ณด์์ฑ ํ์ธ: ๋ฆฌ๋ทฐ์ด๋ ์ฝ๋ ๋ช ํ์ฑ, ์ด๋ฆ ์ง์ ๊ท์น ๋ฐ ์ ๋ฐ์ ์ธ ์ ์ง๋ณด์์ฑ์ ๋ํ ํผ๋๋ฐฑ์ ์ ๊ณตํ ์ ์์ผ๋ฉฐ, ์ด๋ ๊ธ๋ก๋ฒ ํ์ ์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
- ์ง์ ๊ณต์ : ์ฝ๋ ๋ฆฌ๋ทฐ๋ ๋ค๋ฅธ ํ๊ณผ ์ง์ญ์ ๊ฐ๋ฐ์๋ค์ด ์ง์๊ณผ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณต์ ํ ์ ์๋ ํ๋ฅญํ ๊ธฐํ์ ๋๋ค.
๊ธ๋ก๋ฒ ๊ตฌํ ํ:
๋ฆฌ๋ทฐ์ด์ ์์ฑ์์ ๋ํ ๋ช ํํ ๊ธฐ๋์น๊ฐ ์ ์๋ ์ฝ๋ ๋ฆฌ๋ทฐ ํ๋ก์ธ์ค๋ฅผ ์๋ฆฝํ์ญ์์ค. ๊ตฌ์กฐํ๋ ๋ฆฌ๋ทฐ๋ฅผ ์ฉ์ดํ๊ฒ ํ๋ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ ๊ธฐ๋ฅ(์: GitHub ํ ๋ฆฌํ์คํธ, GitLab ๋จธ์ง ๋ฆฌํ์คํธ)์ ํ์ฉํ์ญ์์ค. ๋ค๋ฅธ ์๊ฐ๋๋ฅผ ์์ฉํ๊ธฐ ์ํด ๋น๋๊ธฐ์ ๋ฆฌ๋ทฐ๋ฅผ ์ฅ๋ คํ๋, ์ค์ํ ๋ณ๊ฒฝ์ด๋ ์ง์ ์ ๋ฌ์ ์ํด ๋๊ธฐ์ ๋ฆฌ๋ทฐ ์ธ์ ๋ ๊ณ ๋ คํ์ญ์์ค.
๊ธ๋ก๋ฒ ๋ชจ๋ ๊ฒ์ฆ ์ ๋ต์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
๊ธ๋ก๋ฒ ํ ์ ๋ฐ์ ๊ฑธ์ณ ํจ๊ณผ์ ์ธ ๋ชจ๋ ๊ฒ์ฆ์ ๊ตฌํํ๋ ค๋ฉด ์ ๋ต์ ์ด๊ณ ์ผ๊ด๋ ์ ๊ทผ ๋ฐฉ์์ด ํ์ํฉ๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ๋ชจ๋ฒ ์ฌ๋ก์ ๋๋ค:
1. ๋ช ํํ ์ฝ๋ฉ ํ์ค ๋ฐ ๊ฐ์ด๋๋ผ์ธ ์๋ฆฝ
๋ชจ๋ ํ์์ด ๋ฐ๋ผ์ผ ํ ํฌ๊ด์ ์ธ ์คํ์ผ ๊ฐ์ด๋์ ์ฝ๋ฉ ๊ท์น์ ์ ์ํ์ญ์์ค. ์ฌ๊ธฐ์๋ ๋ชจ๋ ์ด๋ฆ ์ง์ , ๋ด๋ณด๋ด๊ธฐ/๊ฐ์ ธ์ค๊ธฐ ๊ตฌ๋ฌธ, ํ์ผ ๊ตฌ์กฐ ๋ฐ ๋ฌธ์ํ์ ๋ํ ๊ท์น์ด ํฌํจ๋ฉ๋๋ค. ESLint, Prettier(์ฝ๋ ์์ ์ง์ ์ฉ) ๋ฐ TypeScript์ ๊ฐ์ ๋๊ตฌ๋ ์ด๋ฌํ ํ์ค์ ๊ฐ์ ํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
2. ๊ตฌ์ฑ ์ค์ํ
๋ฆฐํฐ, ํฌ๋งคํฐ, ํ์ ๊ฒ์ฌ๊ธฐ ๋ฐ ๋น๋ ๋๊ตฌ์ ๋ํ ๋ชจ๋ ๊ตฌ์ฑ ํ์ผ์ด ์ค์ ์ ์ฅ์(์: `.eslintrc.js`, `tsconfig.json`, `webpack.config.js`)์ ์ ์ฅ๋๋๋ก ํ์ญ์์ค. ์ด๋ ๋ถ์ผ์น๋ฅผ ๋ฐฉ์งํ๊ณ ๋ชจ๋ ์ฌ๋์ด ๋์ผํ ๊ท์น ์งํฉ์ผ๋ก ์์ ํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
3. CI/CD ํ์ดํ๋ผ์ธ์์ ๋ชจ๋ ๊ฒ ์๋ํ
CI/CD ํ์ดํ๋ผ์ธ์ ์ฝ๋ ํ์ง์ ๋ฌธ์ง๊ธฐ ์ญํ ์ ํด์ผ ํฉ๋๋ค. ๋ฆฐํ , ํ์ ๊ฒ์ฌ, ์ ๋ ํ ์คํธ ๋ฐ ๋น๋ ํ๋ก์ธ์ค๋ฅผ ์๋ํํ์ญ์์ค. ์ด๋ฌํ ๋จ๊ณ์์ ๋ฐ์ํ๋ ๋ชจ๋ ์คํจ๋ ์ฝ๋๊ฐ ๋ณํฉ๋๊ฑฐ๋ ๋ฐฐํฌ๋๋ ๊ฒ์ ๋ง์์ผ ํฉ๋๋ค. ์ด๋ ๋ถ์ฐ๋ ํ์ ์ค์ํ ์๋ ๊ฐ์ ๊ณผ ๊ด๊ณ์์ด ํ์ง ๊ฒ์ฌ๊ฐ ์ผ๊ด๋๊ฒ ์ํ๋จ์ ๋ณด์ฅํฉ๋๋ค.
4. ์ฃผ์ธ์์ ๋ฐ ์ฑ ์๊ฐ ๋ฌธํ ์กฐ์ฑ
์์น๋ ์ฐ์ฐจ์ ๊ด๊ณ์์ด ๋ชจ๋ ํ์์ด ์ฝ๋ ํ์ง์ ๋ํ ์ฃผ์ธ์์์ ๊ฐ๋๋ก ์ฅ๋ คํ์ญ์์ค. ์ฌ๊ธฐ์๋ ํ ์คํธ ์์ฑ, ์ฝ๋ ๋ฆฌ๋ทฐ์ ์ ๊ทน์ ์ผ๋ก ์ฐธ์ฌ, ์ ์ฌ์ ์ธ ๋ฌธ์ ์ ๋ํ ์ฐ๋ ค ์ ๊ธฐ๊ฐ ํฌํจ๋ฉ๋๋ค.
5. ํฌ๊ด์ ์ธ ๋ฌธ์ ์ ๊ณต
๋ชจ๋ ์์คํ ์ ํ, ์ฝ๋ฉ ํ์ค, ๊ฒ์ฆ ํ๋ก์ธ์ค ๋ฐ ๊ฐ๋ฐ ํ๊ฒฝ ์ค์ ๋ฐฉ๋ฒ์ ๋ฌธ์ํํ์ญ์์ค. ์ด ๋ฌธ์๋ ๋ชจ๋ ํ์์ด ์ฝ๊ฒ ์ ๊ทผํ ์ ์์ด์ผ ํ๋ฉฐ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํ ์ฐธ์กฐ ์ง์ ์ญํ ์ ํด์ผ ํฉ๋๋ค.
6. ์ง์์ ์ธ ํ์ต ๋ฐ ์ ์
์๋ฐ์คํฌ๋ฆฝํธ ์ํ๊ณ๋ ๋น ๋ฅด๊ฒ ๋ฐ์ ํฉ๋๋ค. ์ ๊ธฐ์ ์ผ๋ก ๊ฒ์ฆ ๋๊ตฌ์ ์ ๋ต์ ๊ฒํ ํ๊ณ ์ ๋ฐ์ดํธํ์ฌ ์๋ก์ด ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ํตํฉํ๊ณ ์๋ก์ด ๊ณผ์ ๋ฅผ ํด๊ฒฐํ์ญ์์ค. ๊ธ๋ก๋ฒ ํ์ด ์ต์ ์ํ๋ฅผ ์ ์งํ ์ ์๋๋ก ๊ต์ก๊ณผ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํ์ญ์์ค.
7. ๋ชจ๋ ธ๋ ํฌ ํ์ฉ (์ ์ ํ ๊ฒฝ์ฐ)
์ฌ๋ฌ ๊ด๋ จ ๋ชจ๋์ด๋ ํจํค์ง๊ฐ ์๋ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ Lerna ๋๋ Nx์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ธ๋ ํฌ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค. ์ด๋ฌํ ๋๊ตฌ๋ ๋๊ท๋ชจ ๋ถ์ฐ ์ฝ๋๋ฒ ์ด์ค ๋ด์์ ์์กด์ฑ์ ๊ด๋ฆฌํ๊ณ , ํจํค์ง ์ ๋ฐ์ ๊ฑธ์ณ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ฉฐ, ์ผ๊ด์ฑ์ ๊ฐ์ ํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ธ ํจ์ ๊ณผ ์ด๋ฅผ ํผํ๋ ๋ฐฉ๋ฒ
์ต์ ์ ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋๋ผ๋ ๊ธ๋ก๋ฒ ๊ฐ๋ฐํ์ ๋ชจ๋ ๊ฒ์ฆ์์ ํจ์ ์ ๋น ์ง ์ ์์ต๋๋ค.
1. ํ๊ฒฝ ๊ฐ ์ผ๊ด์ฑ ์๋ ๋๊ตฌ ์ฌ์ฉ
๋ฌธ์ ์ : ๊ฐ๋ฐ์๋ค์ด ๋ค๋ฅธ ๋ฒ์ ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์ฝ๊ฐ ๋ค๋ฅธ ๊ตฌ์ฑ์ ๊ฐ์ง๊ณ ์์ผ๋ฉด ๊ฒ์ฆ ํ์ธ์์ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค.
ํด๊ฒฐ์ฑ : ํน์ ๋ฒ์ ์ Node.js, npm/yarn ๋ฐ ๋ชจ๋ ๊ฐ๋ฐ ๋๊ตฌ๋ฅผ ํ์คํํ์ญ์์ค. ์ ๊ธ ํ์ผ(`package-lock.json`, `yarn.lock`)์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ๋จธ์ ๊ณผ CI/CD ํ์ดํ๋ผ์ธ์์ ์ผ๊ด๋ ์์กด์ฑ ๋ฒ์ ์ ๋ณด์ฅํ์ญ์์ค.
2. ๋ถ์ถฉ๋ถํ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง
๋ฌธ์ ์ : ์ ์ ํ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง ์์ด ๋ฆฐํ ๋ฐ ํ์ ๊ฒ์ฌ์๋ง ์์กดํ๋ฉด ๊ธฐ๋ฅ์ ๋ฒ๊ทธ๊ฐ ๊ฐ์ง๋์ง ์์ ์ฑ๋ก ๋จ๊ฒ ๋ฉ๋๋ค.
ํด๊ฒฐ์ฑ : ๋ช ํํ ๋ชฉํ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง ์งํ๋ฅผ ์ ์ํ๊ณ CI ํ์ดํ๋ผ์ธ์์ ์ด๋ฅผ ๊ฐ์ ํ์ญ์์ค. ๋ชจ๋ ์๋ก์ด ๊ธฐ๋ฅ ๋ฐ ๋ฒ๊ทธ ์์ ์ ๋ํ ํ ์คํธ ์์ฑ์ ์ฅ๋ คํ๊ณ , ํ ์คํธ๊ฐ ์ฃ์ง ์ผ์ด์ค์ ์ ์ฌ์ ์คํจ ๋ชจ๋๋ฅผ ํฌํจํ๋๋ก ํ์ญ์์ค.
3. ์๋ ํ๋ก์ธ์ค์ ๋ํ ๊ณผ๋ํ ์์กด
๋ฌธ์ ์ : ๊ฐ๋ฐ์๊ฐ ์๋์ผ๋ก ๊ฒ์ฌ๋ฅผ ์คํํ๊ฑฐ๋ ์๋ํ ์์ด ์ฒ ์ ํ ๋ฆฌ๋ทฐ๋ฅผ ์ํํ๋ ๊ฒ์ ์์กดํ๋ ๊ฒ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ๊ณ ์ผ๊ด์ฑ์ด ์์ต๋๋ค.
ํด๊ฒฐ์ฑ : CI/CD ํ์ดํ๋ผ์ธ ๋ด์์ ๊ฐ๋ฅํ ํ ๋ง์ ๊ฒ์ฆ ๋จ๊ณ๋ฅผ ์๋ํํ์ญ์์ค. ์ฝ๋ ๋ฆฌ๋ทฐ๋ ์๋ํ๋ ๊ฒ์ฌ๋ฅผ ๋ณด์ํด์ผ ํ๋ฉฐ ๋์ฒดํด์๋ ์ ๋ฉ๋๋ค.
4. ๋ชจ๋ ์์คํ ํน์ฑ ๋ฌด์
๋ฌธ์ ์ : CommonJS ํ๋ก์ ํธ์ฉ์ผ๋ก ๋ง๋ค์ด์ง ๊ฒ์ฆ ๊ท์น์ ESM ํ๋ก์ ํธ์ ์ ์ฉํ๊ฑฐ๋ ๊ทธ ๋ฐ๋์ ๊ฒฝ์ฐ, ๋ถ์ ํํ ๊ฒ์ฌ๋ ๋์น๋ ์ค๋ฅ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
ํด๊ฒฐ์ฑ : ์ฌ์ฉ ์ค์ธ ๋ชจ๋ ์์คํ ์ ํน์ ์๊ตฌ ์ฌํญ๊ณผ ๊ด๋ก๋ฅผ ์ดํดํ๊ณ ๊ฒ์ฆ ๋๊ตฌ๋ฅผ ๊ทธ์ ๋ง๊ฒ ๊ตฌ์ฑํ์ญ์์ค. ์๋ฅผ ๋ค์ด, ESLint์๋ ESM์ ๋ํ ํน์ ๊ท์น์ด ์์ต๋๋ค.
5. ๋ถ์คํ๊ฒ ์ ์๋ ๋ชจ๋ ์ธํฐํ์ด์ค
๋ฌธ์ ์ : ์๋ฌต์ ์ธ ์์กด์ฑ์ด๋ ๋ถ๋ถ๋ช ํ ๋ฐํ ๊ฐ์ ๊ฐ์ง ๋ชจ๋์ ๊ฒ์ฆํ๊ณ ํ ์คํธํ๊ธฐ ์ด๋ ต์ต๋๋ค.
ํด๊ฒฐ์ฑ : TypeScript๋ JSDoc์ ์ฌ์ฉํ์ฌ ๋ชจ๋์ ์์ ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ์ ๋ช ํํ๊ฒ ์ ์ํ์ญ์์ค. ๊ฐ ๋ด๋ณด๋ธ ์ํฐํฐ์ ๋ชฉ์ ๊ณผ ์ฌ์ฉ๋ฒ์ ๋ฌธ์ํํ์ญ์์ค.
๊ฒฐ๋ก : ์ฝ๋๋ฒ ์ด์ค์ ๋ํ ์ ๋ขฐ ๊ตฌ์ถ
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๊ฒ์ฆ์ ์ผํ์ฑ ์์ ์ด ์๋๋ผ ์ฝ๋ ํ์ง์ ๋ํ ์ง์์ ์ธ ์ฝ์์ ๋๋ค. ๊ธ๋ก๋ฒ ๊ฐ๋ฐํ์๊ฒ ๊ฐ๋ ฅํ ๊ฒ์ฆ ํ๋ก์ธ์ค๋ฅผ ์๋ฆฝํ๊ณ ์ ์งํ๋ ๊ฒ์ ์ ๋ขฐํ ์ ์๊ณ , ์ ์ง๋ณด์ ๊ฐ๋ฅํ๋ฉฐ, ํ์ฅ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ์๋ํ๋ ๋๊ตฌ(๋ฆฐํ , ์ ์ ํ์ดํ, ํ ์คํธ)์ ์๊ฒฉํ ํ๋ก์ธ์ค(์ฝ๋ ๋ฆฌ๋ทฐ, ๋ช ํํ ๊ฐ์ด๋๋ผ์ธ)์ ์กฐํฉ์ ์์ฉํจ์ผ๋ก์จ ์ง๋ฆฌ์ ๊ฒฝ๊ณ๋ฅผ ์ด์ํ๋ ํ์ง ๋ฌธํ๋ฅผ ์กฐ์ฑํ ์ ์์ต๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๊ฒ์ฆ์ ํฌ์ํ๋ ๊ฒ์ ํ๋ก์ ํธ์ ์ฅ๊ธฐ์ ์ธ ๊ฑด๊ฐ์ ํฌ์ํ๊ณ , ๊ฐ๋ฐ ๋ง์ฐฐ์ ์ค์ด๋ฉฐ, ๊ถ๊ทน์ ์ผ๋ก ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ๋ ๋์ ์ํํธ์จ์ด๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด๋ ์ฝ๋์ ๋ํ ์ ๋ขฐ, ํ์ ๋ํ ์ ๋ขฐ, ๊ทธ๋ฆฌ๊ณ ๊ฐ๋ฐ์์ ์์น์ ๊ด๊ณ์์ด ํ์ํ ์ํํธ์จ์ด๋ฅผ ๋ง๋๋ ์ง๋จ์ ๋ฅ๋ ฅ์ ๋ํ ์ ๋ขฐ๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ์ ๋๋ค.