๊ธ๋ก๋ฒ ๊ฐ๋ฐํ์ ์ํ ์์ค ๋งต ํ์ฉ ์ฌ์ธต ๊ฐ์ด๋๋ก ํจ์จ์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ๋๋ฒ๊น ์ ๊ฒฝํํ์ธ์. ๋๋ ํ ๋ฐ ํธ๋์คํ์ผ๋ ์ฝ๋๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์ํ๋ ๋ฒ์ ๋ฐฐ์๋ณด์ธ์.
๋ธ๋ผ์ฐ์ ๋๋ฒ๊น ์ฌํ: ๊ธ๋ก๋ฒ ๊ฐ๋ฐ์ ์ํ ์๋ฐ์คํฌ๋ฆฝํธ ์์ค ๋งต ๋ง์คํฐํ๊ธฐ
์ค๋๋ ๊ณผ ๊ฐ์ด ๋น ๋ฅด๊ฒ ๋ณํํ๋ ์น ๊ฐ๋ฐ ํ๊ฒฝ์์ ๊ณ ํ์ง์ ์ฑ๋ฅ ์ข์ ์๋ฐ์คํฌ๋ฆฝํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ณตํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋ค์ํ ์๊ฐ๋์ ๊ธฐ์ ์คํ์์ ์์ ํ๋ ๊ธ๋ก๋ฒ ํ์ ๋ณต์กํ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋๋ฒ๊น ํ๋ ๋ฐ ์์ด ๋ ํนํ ์ด๋ ค์์ ์ง๋ฉดํฉ๋๋ค. ๊ฐ๋ฐ์์ ๋ฌด๊ธฐ๊ณ ์์ ๊ฐ์ฅ ๊ฐ๋ ฅํ์ง๋ง ๋๋ก๋ ๊ฐ๊ณผ๋๋ ๋๊ตฌ ์ค ํ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ค ๋งต(source map)์ ๋๋ค. ์ด ๊ฐ์ด๋๋ ๊ณ ๊ธ ์์ค ๋งต ํ์ฉ๋ฒ์ ๊น์ด ํ๊ณ ๋ค์ด ์ ์ธ๊ณ ๊ฐ๋ฐ์๋ค์ด ์ต์ํ(minified), ํธ๋์คํ์ผ(transpiled), ๋๋ ํ(obfuscated)๋ ์ฝ๋๋ฅผ ์ ๋ฐํ๊ฒ ๋๋ฒ๊น ํ ์ ์๋๋ก ์ง์ํฉ๋๋ค.
๋์ ๊ณผ์ ์ดํดํ๊ธฐ: ์์ค ๋งต์ด ํ์์ ์ธ ์ด์
ํ๋ ์น ๊ฐ๋ฐ ๊ดํ์ ์๋ณธ ์์ค ์ฝ๋๋ฅผ ๋ธ๋ผ์ฐ์ ์ ์ต์ ํ๋ ํ์์ผ๋ก ๋ณํํ๋ ์ฌ๋ฌ ๋น๋ ๋จ๊ณ๋ฅผ ํฌํจํฉ๋๋ค. ์ด๋ฌํ ๋จ๊ณ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ต์ํ(Minification): ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ ์ํด ๋ถํ์ํ ๋ฌธ์(๊ณต๋ฐฑ, ์ฃผ์)๋ฅผ ์ ๊ฑฐํ๊ณ ๋ณ์ ์ด๋ฆ์ ์ค์ด๋ ๊ณผ์ ์ ๋๋ค.
- ํธ๋์คํ์ผ(Transpilation): ๋ ๋์ ๋ธ๋ผ์ฐ์ ํธํ์ฑ์ ์ํด ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ตฌ๋ฌธ(์: ES6+)์ ์ด์ ๋ฒ์ (์: ES5)์ผ๋ก ๋ณํํ๋ ๊ณผ์ ์ ๋๋ค. Babel๊ณผ ๊ฐ์ ๋๊ตฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
- ๋ฒ๋ค๋ง(Bundling): HTTP ์์ฒญ์ ์ค์ด๊ธฐ ์ํด ์ฌ๋ฌ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋จ์ผ ํ์ผ๋ก ๊ฒฐํฉํ๋ ๊ณผ์ ์ ๋๋ค. Webpack์ด๋ Rollup๊ณผ ๊ฐ์ ๋๊ตฌ๊ฐ ์ด๋ฅผ ์ฉ์ดํ๊ฒ ํฉ๋๋ค.
- ๋๋ ํ(Obfuscation): ๋ณด์์ด๋ ์ง์ ์ฌ์ฐ ๋ณดํธ๋ฅผ ์ํด ์๋์ ์ผ๋ก ์ฝ๋๋ฅผ ์ฝ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋๋ ๊ณผ์ ์ด์ง๋ง, ๋๋ฒ๊น ๋ชฉ์ ์ผ๋ก๋ ๋ ์ผ๋ฐ์ ์ ๋๋ค.
์ด๋ฌํ ์ต์ ํ๋ ์ฑ๋ฅ๊ณผ ํธํ์ฑ์ ์ค์ํ์ง๋ง, ๋ธ๋ผ์ฐ์ ๊ฐ ์คํํ๋ ์ฝ๋๋ฅผ ์๋ณธ ์์ค ์ฝ๋์ ์๋นํ ๋ค๋ฅด๊ฒ ๋ง๋ญ๋๋ค. ํ๋ก๋์ ํ๊ฒฝ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ๋ธ๋ผ์ฐ์ ์ ๊ฐ๋ฐ์ ์ฝ์์ ์ต์ํ/ํธ๋์คํ์ผ๋ ์ฝ๋์ ์ค ๋ฒํธ์ ๋ณ์ ์ด๋ฆ์ ๋ณด๊ณ ํ๋๋ฐ, ์ด๋ ์ข ์ข ์ํธ ๊ฐ๊ณ ๊ทผ๋ณธ ์์ธ์ ํ์ ํ๋ ๋ฐ ๋์์ด ๋์ง ์์ต๋๋ค. ๋ฐ๋ก ์ด ์ง์ ์์ ์์ค ๋งต์ด ์ต์ ํ๋ ์ฝ๋์ ์ฌ๋์ด ์ฝ์ ์ ์๋ ์๋ณธ ์์ค ํ์ผ ์ฌ์ด์ ๋ค๋ฆฌ ์ญํ ์ ํฉ๋๋ค.
์์ค ๋งต์ด๋ ๋ฌด์์ธ๊ฐ?
์์ค ๋งต์ ์์ฑ๋ ์ฝ๋๋ฅผ ์๋ณธ ์์ค ์ฝ๋๋ก ๋ค์ ๋งคํํ๋ ํ์ผ์
๋๋ค. ๋น๋ ๋๊ตฌ๊ฐ ์ต์ํ๋๊ฑฐ๋ ํธ๋์คํ์ผ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ๋, ํด๋น .map
ํ์ผ๋ ํจ๊ป ์์ฑํ ์ ์์ต๋๋ค. ์ด .map
ํ์ผ์๋ ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ์ ๋ค์ ์ ๋ณด๋ฅผ ์๋ ค์ฃผ๋ ๋ด์ฉ์ด ํฌํจ๋ฉ๋๋ค:
- ์์ฑ๋ ์ฝ๋์ ์ด๋ ๋ถ๋ถ์ด ์๋ณธ ์์ค ์ฝ๋์ ์ด๋ ๋ถ๋ถ์ ํด๋นํ๋์ง.
- ์๋ณธ ํ์ผ ์ด๋ฆ๊ณผ ์ค ๋ฒํธ.
- ์๋ณธ ๋ณ์ ์ด๋ฆ.
๊ฐ๋ฐ์ ๋๊ตฌ๊ฐ ํน์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ํ ์์ค ๋งต์ ๊ฐ์งํ๋ฉด, ์ด ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ ์๋ณธ ์์ค ์ฝ๋์ ๋งฅ๋ฝ์์ ์ค๋ฅ, ์ค๋จ์ (breakpoint), ๋ณ์ ์กฐํ๋ฅผ ํ์ํ ์ ์์ด ๋๋ฒ๊น ์ ํจ์ฌ ์ง๊ด์ ์ธ ๊ณผ์ ์ผ๋ก ๋ง๋ค์ด ์ค๋๋ค.
์์ค ๋งต ์์ฑ: ์ค์ ์ด ํต์ฌ์ ๋๋ค
์์ค ๋งต ์์ฑ์ ์ผ๋ฐ์ ์ผ๋ก ๋น๋ ๋๊ตฌ ๋ด์์ ์ค์ ๋ฉ๋๋ค. ์ ํํ ์ค์ ์ ์ฌ์ฉ ์ค์ธ ๋๊ตฌ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
1. Webpack
Webpack์ ์ธ๊ธฐ ์๋ ๋ชจ๋ ๋ฒ๋ค๋ฌ์
๋๋ค. ์์ค ๋งต์ ํ์ฑํํ๋ ค๋ฉด ์ผ๋ฐ์ ์ผ๋ก webpack.config.js
ํ์ผ์์ devtool
์ต์
์ ์ค์ ํฉ๋๋ค. ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ผ๋ฐ์ ์ด๊ณ ํจ๊ณผ์ ์ธ ์ค์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
// webpack.config.js
module.exports = {
// ... other webpack configuration
devtool: 'eval-source-map' // Or 'cheap-module-source-map' for better performance
};
devtool
์ต์
์ค๋ช
:
'eval-source-map'
: ๊ฐ ๋ชจ๋์ ๋ํ ์์ค ๋งต์ ๋ฐ์ดํฐ URI๋ก ์์ฑํฉ๋๋ค. ๊ฐ๋ฐ ์์๋ ๋น ๋ฅด์ง๋ง ํ๋ก๋์ ํ๊ฒฝ์๋ ์ด์์ ์ด์ง ์์ต๋๋ค.'cheap-module-source-map'
: ํ๋ก๋์ ํ๊ฒฝ์ ์ ํฉํ ๊ท ํ ์กํ ์ต์ ์ ๋๋ค. 'source-map'๋ณด๋ค ๋น ๋ฅด๋ฉฐ, ์ด(column)์ด ์๋ ์๋ณธ ์ฝ๋ ์ค์๋ง ๋งคํํ์ฌ ๊ด์ฐฎ์ ๋๋ฒ๊น ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.'source-map'
: ์ค๊ณผ ์ด์ ๋ชจ๋ ๋งคํํ๋ ๊ฐ์ฅ ์ ํํ์ง๋ง ๊ฐ์ฅ ๋๋ฆฐ ์ต์ ์ ๋๋ค. ์ต๊ณ ์ ์ ๋ฐ๋๊ฐ ํ์ํ๋ค๋ฉด ํ๋ก๋์ ํ๊ฒฝ์ ๊ฐ์ฅ ์ข์ต๋๋ค.
ํ๋ก๋์ ๋น๋์ ๊ฒฝ์ฐ, ์์ค ์ฝ๋๋ฅผ ๋ณดํธํ๊ธฐ ์ํด ์ผ๋ฐ์ ์ผ๋ก ์์ค ๋งต์ ๋นํ์ฑํํ๊ฑฐ๋ ๋ ์์ธํ ์์ค ๋งต์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ํน์ ํ๋ก๋์ ๋ฌธ์ ๋ฅผ ๋๋ฒ๊น ํ ๋๋ ํด๋น ๋น๋๋ฅผ ์ํด ํน๋ณํ ์์ค ๋งต์ ์์ฑํ๋ ๊ฒ์ด ๋งค์ฐ ์ ์ฉํ ์ ์์ต๋๋ค.
2. Rollup
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์ฃผ ์ฌ์ฉ๋๋ ๋ ๋ค๋ฅธ ํ๋ฅญํ ๋ฒ๋ค๋ฌ์ธ Rollup๋ ์์ค ๋งต ์์ฑ์ ํ์ฉํฉ๋๋ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก `@rollup/plugin-babel`๊ณผ ๊ฐ์ ํ๋ฌ๊ทธ์ธ์ ํตํ๊ฑฐ๋ ์ฃผ output
์ค์ ์ ํตํด ์ํ๋ฉ๋๋ค.
// rollup.config.js
export default {
input: 'src/index.js',
output: {
file: 'dist/bundle.js',
format: 'esm',
sourcemap: true // Enable source maps
}
};
์์ค ๋งต์ ์ ํ์ ์ง์ ํ ์๋ ์์ต๋๋ค:
// rollup.config.js
export default {
// ...
output: {
// ...
sourcemap: 'inline' // Or 'hidden'
}
};
'inline'
์ ์์ค ๋งต์ ์ถ๋ ฅ ํ์ผ์ (์: ๋ฐ์ดํฐ URI๋ก) ํฌํจ์ํต๋๋ค. 'hidden'
์ ๋งต ํ์ผ์ ์์ฑํ์ง๋ง ์ถ๋ ฅ ํ์ผ์ ์ฐ๊ฒฐํ์ง๋ ์์ต๋๋ค (์ค๋ฅ ์ถ์ ์๋น์ค์ ์ ์ฉํจ).
3. Babel
์๋ฐ์คํฌ๋ฆฝํธ ํธ๋์คํ์ผ๋ฌ์ธ Babel๋ ์์ค ๋งต์ ์์ฑํ๋๋ก ์ค์ ํ ์ ์์ต๋๋ค. ์ด๋ ์ข ์ข Babel CLI๋ฅผ ํตํ๊ฑฐ๋, Babel์ด ํ๋ฌ๊ทธ์ธ์ผ๋ก ์ฌ์ฉ๋ ๊ฒฝ์ฐ (์: Webpack์์) ๋น๋ ๋๊ตฌ ์ค์ ๋ด์์ ์ํ๋ฉ๋๋ค. CLI๋ฅผ ์ฌ์ฉํ ๋:
babel src/ --out-dir lib/ --source-maps
์ด ๋ช
๋ น์ด๋ `src/`์ ํ์ผ๋ค์ `lib/`๋ก ํธ๋์คํ์ผํ๊ณ ํด๋นํ๋ .map
ํ์ผ์ ์์ฑํฉ๋๋ค.
4. Browserify
Browserify ์ฌ์ฉ์์ ๊ฒฝ์ฐ:
browserify src/main.js -o bundle.js -d
-d
ํ๋๊ทธ๋ ์์ค ๋งต ์์ฑ์ ํ์ฑํํฉ๋๋ค.
๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ์์ ์์ค ๋งต ํ์ฉํ๊ธฐ
๋น๋ ํ๋ก์ธ์ค๊ฐ ์์ค ๋งต์ ์์ฑํ๋๋ก ์ค์ ๋๋ฉด, ๋ง๋ฒ์ ๋ธ๋ผ์ฐ์ ์ ๊ฐ๋ฐ์ ๋๊ตฌ์์ ์ผ์ด๋ฉ๋๋ค. Chrome, Firefox, Edge, Safari์ ๊ฐ์ ์ต์ ๋ธ๋ผ์ฐ์ ๋ค์ ์์ค ๋งต์ ํ๋ฅญํ๊ฒ ์ง์ํฉ๋๋ค.
1. DevTools์์ ์์ค ๋งต ํ์ฑํํ๊ธฐ
๋๋ถ๋ถ์ ๋ธ๋ผ์ฐ์ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ค ๋งต์ ํ์ฑํํฉ๋๋ค. ํ์ง๋ง ์ด๋ฅผ ํ์ธํ๋ ๊ฒ์ด ์ข์ ์ต๊ด์ ๋๋ค:
- Chrome/Edge: ๊ฐ๋ฐ์ ๋๊ตฌ(F12)๋ฅผ ์ด๊ณ , '์ค์ ' ํญ(ํฑ๋๋ฐํด ์์ด์ฝ)์ผ๋ก ์ด๋ํ์ฌ 'ํ๊ฒฝ์ค์ ' ์น์ ์๋์ '์๋ฐ์คํฌ๋ฆฝํธ ์์ค ๋งต ์ฌ์ฉ'์ด ์ฒดํฌ๋์ด ์๋์ง ํ์ธํฉ๋๋ค.
- Firefox: ๊ฐ๋ฐ์ ๋๊ตฌ(F12)๋ฅผ ์ด๊ณ , '๋๋ฒ๊ฑฐ' ํญ์ผ๋ก ์ด๋ํ์ฌ ๋๋ฒ๊ฑฐ ํด๋ฐ์ ํฑ๋๋ฐํด ์์ด์ฝ์ ํด๋ฆญํ๊ณ '์์ค ๋งต ์ฌ์ฉ'์ด ์ฒดํฌ๋์ด ์๋์ง ํ์ธํฉ๋๋ค.
2. ์ค๋ฅ ๋ฐ ์ค๋จ์ ๊ด์ฐฐํ๊ธฐ
์ค๋ฅ๊ฐ ๋ฐ์ํ๊ณ ์์ค ๋งต์ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ, ๋ธ๋ผ์ฐ์ ์ฝ์์ ์ต์ํ๋ ๋ฒ์ ์ด ์๋ ์๋ณธ ์์ค ํ์ผ๊ณผ ์ค ๋ฒํธ๋ฅผ ๊ฐ๋ฆฌํค๋ ์ค๋ฅ๋ฅผ ํ์ํฉ๋๋ค. ์ด๋ ์ค๋ฅ ์๋ณ ์๋๋ฅผ ํฌ๊ฒ ๋์ฌ์ค๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ๋ฐ์ ๋๊ตฌ์ 'Sources' ํญ์์ ์ค๋จ์ ์ ์ค์ ํ ๋, ์์ฑ๋ ์ฝ๋์์ ํด๋นํ๋ ์ค์ ์ฐพ๋ ๋์ ์๋ณธ ์์ค ํ์ผ(์: .js
, .ts
, .jsx
)์ ์ง์ ์ค์ ํ ์ ์์ต๋๋ค. ์ฝ๋๋ฅผ ํ ๋จ๊ณ์ฉ ์คํํ๋ฉด ์๋ณธ ์์ค ํ์ผ์ ์ค์ด ์คํ๋๊ณ ๊ฐ์กฐ ํ์๋ฉ๋๋ค.
3. ๋ณ์ ๊ฒ์ฌํ๊ธฐ
๋ณ์๋ฅผ ๊ฒ์ฌํ๋ ๊ธฐ๋ฅ๋ ํฅ์๋ฉ๋๋ค. ์ค๋จ์ ์์ ์ผ์ ์ค์ง๋์์ ๋, ๋ณ์ ์๋ก ๋ง์ฐ์ค๋ฅผ ๊ฐ์ ธ๊ฐ๊ฑฐ๋ 'Scope' ์ฐฝ์์ ๋ณ์๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ์์ค ๋งต์ ์์ฑ๋ ์ถ๋ ฅ์์ ๋ณ์ ์ด๋ฆ์ด ์ต์ํ๋๊ฑฐ๋ ๋ณ๊ฒฝ๋์๋๋ผ๋, ์์ค ์ฝ๋์ ์์๋ ๊ทธ๋๋ก์ ์๋ณธ ๋ณ์ ์ด๋ฆ๊ณผ ์ ํํ ๊ฐ์ ๋ณผ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
4. 'Sources' ํญ ํ์ํ๊ธฐ
'Sources' ํญ์์๋ ์ผ๋ฐ์ ์ผ๋ก ํ๋ก์ ํธ ๊ตฌ์กฐ๋ฅผ ๋ฐ์ํ๋ ํ์ผ ํธ๋ฆฌ๋ฅผ ๋ณผ ์ ์์ผ๋ฉฐ, ์ฌ๊ธฐ์๋ ๋ธ๋ผ์ฐ์ ์ ๋ฒ๋ค๋ง๋๊ณ ์ต์ํ๋ ๋ฒ์ ๋ง ์ ๊ณต๋๋๋ผ๋ ์๋ณธ ์์ค ํ์ผ์ด ํฌํจ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ๋ด์์ ์ง์ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ฝ๊ฒ ํ์ํ๊ณ ํํํ ์ ์์ต๋๋ค.
๊ธ๋ก๋ฒ ์์: ๋ฒ ๋ฅผ๋ฆฐ์ ๋ณธ์ฌ๋ฅผ ๋ ๊ธ๋ก๋ฒ ์ด์ปค๋จธ์ค ํ๋ซํผ์ด ์๊ณ , ๊ฐ๋ฐํ์ ๋ฐฉ๊ฐ๋ก๋ฅด์ ๋ถ์๋ ธ์ค์์ด๋ ์ค์ ์์ต๋๋ค. ํธ์ฃผ์์ ์น๋ช ์ ์ธ ๊ฒฐ์ ์ค๋ฅ๊ฐ ๋ณด๊ณ ๋ฉ๋๋ค. ๋ฆ์ ๋ฐค ๋๋ฒ๊น ์ ํ๋ ๋ถ์๋ ธ์ค์์ด๋ ์ค์ ๊ฐ๋ฐ์๋ CI/CD ํ์ดํ๋ผ์ธ์์ ์์ฑ๋ ์์ค ๋งต์ ์ฌ์ฉํ์ฌ ์๋ณธ ํ์ ์คํฌ๋ฆฝํธ(TypeScript) ์ฝ๋์์ ์ง์ ์ค๋ฅ๋ฅผ ๊ฒ์ฌํ๊ณ , ๊ฐ๋ฐ ํ๊ฒฝ์ผ๋ก ๋์๊ฐ ํ์ ์์ด ์ ์ํ๊ฒ ๋ฌธ์ ๋ฅผ ์๋ณํ ์ ์์ต๋๋ค.
๊ณ ๊ธ ์์ค ๋งต ์๋๋ฆฌ์ค ๋ฐ ํด๊ฒฐ์ฑ
๊ธฐ๋ณธ์ ์ธ ์์ค ๋งต ์ฌ์ฉ์ ๊ฐ๋จํ์ง๋ง, ๋ช ๊ฐ์ง ๊ณ ๊ธ ์๋๋ฆฌ์ค์์๋ ์ด๋ ค์์ด ๋ฐ๋ฅผ ์ ์์ต๋๋ค.
1. ํธ๋์คํ์ผ๋ ์ธ์ด(TypeScript, CoffeeScript)๋ฅผ ์ํ ์์ค ๋งต
์๋ฐ์คํฌ๋ฆฝํธ๋ก ํธ๋์คํ์ผ๋๋ ์ธ์ด(TypeScript๋ CoffeeScript ๋ฑ)๋ฅผ ์ฌ์ฉํ ๋, ๋น๋ ํ๋ก์ธ์ค๋ ์ข ์ข ์ฌ๋ฌ ๋จ๊ณ๋ฅผ ํฌํจํฉ๋๋ค. ํจ๊ณผ์ ์ธ ๋๋ฒ๊น ์ ์ํด์๋ ๊ฐ ๊ด๋ จ ๋จ๊ณ์์ ์์ฑ๋ ์์ค ๋งต์ด ํ์ํฉ๋๋ค.
- Webpack๊ณผ TypeScript: Webpack์์ `ts-loader` ๋๋ `awesome-typescript-loader`๋ฅผ ์ฌ์ฉํ์ธ์. `tsconfig.json`์
"sourceMap": true
๊ฐ ์ค์ ๋์ด ์๋์ง ํ์ธํ์ธ์. ๊ทธ๋ฌ๋ฉด Webpack์ `devtool` ์ค์ ์ด ์ด๋ฌํ TS ์์ค ๋งต์ ์ต์ข ๋ฒ๋ค ์ถ๋ ฅ์ ๋งคํํฉ๋๋ค. - ์์: TypeScript๋ก ๋น๋๋ ๋ณต์กํ Angular ์ ํ๋ฆฌ์ผ์ด์ . ์ปดํฌ๋ํธ ํ ํ๋ฆฟ์์ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์ ์ ํ ์์ค ๋งต์ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ณ ๋๋ก ์ต์ ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์ ์คํํ๊ณ ์์์๋ ๋ถ๊ตฌํ๊ณ , ๋ธ๋ผ์ฐ์ ์ DevTools ๋ด์์ TypeScript ์ปดํฌ๋ํธ ํ์ผ์ ์ค๋จ์ ์ ์ค์ ํ ์ ์์ต๋๋ค.
2. ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฒ๋ฆฌํ๊ธฐ
๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์์ฒด ์์ค ๋งต๊ณผ ํจ๊ป ์ ๊ณต๋ฉ๋๋ค. ํ๋ก์ ํธ์ ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจํ๋ฉด, ํด๋น ์์ค ๋งต๋ ๋ธ๋ผ์ฐ์ ์ ์ํด ๋ก๋๋์ด ํ์ํ ๊ฒฝ์ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๋ก ๋๋ฒ๊น ํด ๋ค์ด๊ฐ ์ ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋๋ฒ๊น ํ๋ ค๋ ๊ฒฝ์ฐ, ๋น๋ ๋๊ตฌ๊ฐ ์์กด์ฑ์์ ์์ค ๋งต์ ์ ๊ฑฐํ์ง ์๋๋ก ์ค์ ๋์๋์ง ํ์ธํ์ธ์.
๊ธ๋ก๋ฒ ์์: ์์ธ์ ํ ์คํํธ์ ์ด ์บ๋๋ค ๊ณต๊ธ์ ์ฒด์ ์ธ๊ธฐ ์๋ ์ฐจํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๋ ๋๋ง ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ ๋, ํ๊ตญ ๊ฐ๋ฐ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ๊ณตํ๋ ์์ค ๋งต์ ํ์ฉํ์ฌ ๋ธ๋ผ์ฐ์ ๋ด์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๋ฅผ ๋จ๊ณ๋ณ๋ก ์คํํ๋ฉฐ, ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ์ ์ํธ ์์ฉ ๋ฌธ์ ๋ฅผ ์ ํํ ์ฐพ์๋ผ ์ ์์ต๋๋ค.
3. ํ๋ก๋์ ๋๋ฒ๊น : ๋ณด์๊ณผ ์ถ์ ๊ฐ๋ฅ์ฑ์ ๊ท ํ
ํ๋ก๋์ ํ๊ฒฝ์์์ ๋๋ฒ๊น ์ ๋ฏผ๊ฐํ ๋ฌธ์ ์ ๋๋ค. ํ๋ก๋์ ๋น๋์ ๋ํด ์ ์ฒด ์์ค ๋งต์ ์์ฑํ๋ฉด ์๋ณธ ์์ค ์ฝ๋๊ฐ ๋ ธ์ถ๋ ์ ์์ต๋๋ค. ์ ๋ต์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์จ๊ฒจ์ง ์์ค ๋งต(Hidden Source Maps): ๋น๋ ๋๊ตฌ๋ฅผ ์ค์ ํ์ฌ ์์ค ๋งต์ ์์ฑํ๋ ์ถ๋ ฅ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์๋ ์ฐ๊ฒฐํ์ง ์๋๋ก ํฉ๋๋ค(์: Rollup์ `sourcemap: 'hidden'`, ๋๋ Webpack์ ํน์ `devtool` ์ค์ ). ์ด ๋งต๋ค์ Sentry, Bugsnag, ๋๋ Datadog๊ณผ ๊ฐ์ ์ค๋ฅ ์ถ์ ์๋น์ค์ ์ ๋ก๋๋ ์ ์์ต๋๋ค. ์ค๋ฅ๊ฐ ๋ณด๊ณ ๋๋ฉด, ํด๋น ์๋น์ค๋ ์ ๋ก๋๋ ์์ค ๋งต์ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ์๋๋๋ก ๋๋๋ฆฌ๊ณ (de-obfuscate) ์๋ณธ ์์ค ์ฝ๋ ๋งฅ๋ฝ์์ ์ค๋ฅ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
- ์จ๋๋งจ๋ ์์ค ๋งต ์์ฑ: ์ค์ํ ๋ฌธ์ ์ ๊ฒฝ์ฐ, ํน์ ํ๋ก๋์ ๋น๋์ ๋ํด ์ผ์์ ์ผ๋ก ์์ค ๋งต ์์ฑ์ ๋ค์ ํ์ฑํํ๊ณ , ์ด๋ฅผ ์คํ ์ด์ง ํ๊ฒฝ์ด๋ ํ๋ก๋์ ์ ์ผ๋ถ์ ๋ฐฐํฌํ ํ ์ ์ํ๊ฒ ๋๋๋ฆด ์ ์์ต๋๋ค. ์ด๋ ๋ ์ํํ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค.
- `source-map-explorer` ๋๋ ์ ์ฌ ๋๊ตฌ ์ฌ์ฉ: ์ด๋ฌํ ๋๊ตฌ๋ ๋ฒ๋ค๋ ์ฝ๋์ ์์ค ๋งต์ ๋ถ์ํ์ฌ ๋ฒ๋ค ํฌ๊ธฐ์ ๋ฌด์์ด ๊ธฐ์ฌํ๋์ง ์๊ฐํํด์ฃผ๋ฉฐ, ์ด ๋ํ ๋๋ฒ๊น ์ ํ ํํ์ ๋๋ค.
4. ์์ค ๋งต ์๋ช ์ฃผ๊ธฐ์ ๋ฒ์ ๊ด๋ฆฌ
์์ค ๋งต์ ์์ฑ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ํน์ ๋ฒ์ ์ ์ฐ๊ฒฐ๋ฉ๋๋ค. ๋ง์ฝ ํด๋น ์์ค ๋งต์ ์ ๋ฐ์ดํธํ์ง ์๊ณ ์ ๋ฒ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ฐฐํฌํ๊ฑฐ๋ ์์ค ๋งต์ด ๋ถ์ผ์นํ๊ฒ ๋๋ฉด, ๋๋ฒ๊น ์ด ๋ถ์ ํํด์ง๋๋ค. ๋น๋ ๋ฐ ๋ฐฐํฌ ํ๋ก์ธ์ค๊ฐ ์ด ์ฐ๊ฒฐ์ ์ ์งํ๋๋ก ๋ณด์ฅํด์ผ ํฉ๋๋ค.
๊ธ๋ก๋ฒ ํ ๊ณ ๋ ค์ฌํญ: ๋ถ์ฐ๋ ํ์์๋ ์ผ๊ด๋ ๋น๋ ๋ฐ ๋ฐฐํฌ ํ๋ก์ธ์ค๋ฅผ ๋ณด์ฅํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์๋ํ๋ ํ์ดํ๋ผ์ธ์ ๋ฐฐํฌ๋ ๋ชจ๋ ์ํฐํฉํธ์ ์ฌ๋ฐ๋ฅธ ์์ค ๋งต์ด ๋๋ฐ๋๋๋ก ๋ณด์ฅํด์ผ ํฉ๋๋ค.
5. ๋๋ ํ๋ ์ฝ๋ ๋๋ฒ๊น
์ฝ๋๊ฐ ์๋์ ์ผ๋ก ๋๋ ํ๋ ๊ฒฝ์ฐ, ์์ค ๋งต์ ์ข ์ข ์ ๊ฑฐ๋๊ฑฐ๋ ์๋์ ์ผ๋ก ์์ฑ๋์ง ์์ต๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ๋๋ฒ๊น ์ ํจ์ฌ ๋ ์ด๋ ค์์ง๋๋ค. ์ผ๋ถ ๋-๋๋ ํ ๋๊ตฌ๊ฐ ์กด์ฌํ์ง๋ง, ์๋ฒฝํ์ง ์์ผ๋ฉฐ ์ข ์ข ์๋นํ ์์์ ์ด ํ์ํฉ๋๋ค.
6. ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ
์์ค ๋งต, ํนํ ์์ธํ ์์ค ๋งต์ ๋น๋ ์๊ฐ์ ๋๋ฆฌ๊ณ ์์ฑ๋ ์์ฐ์ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ์ํฌ ์ ์์ต๋๋ค. ํ๋ก๋์ ํ๊ฒฝ์์ `eval-source-map`์ ๊ฐ๋ฐ์๋ ํ๋ฅญํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ์ ํฉํ์ง ์์ต๋๋ค. ์์ธํจ๊ณผ ์ฑ๋ฅ์ ๊ท ํ์ ๋ง์ถ๋ ์ต์ ์ ์ ํํ๊ฑฐ๋ ์ค๋ฅ ๋ณด๊ณ ๋ฅผ ์ํด ์จ๊ฒจ์ง ์์ค ๋งต์ ์ฌ์ฉํ์ธ์.
๊ธ๋ก๋ฒ ๊ฐ๋ฐํ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
๊ธ๋ก๋ฒ ๊ฐ๋ฐ ์กฐ์ง ์ ์ฒด์์ ์์ค ๋งต์ ํจ์จ์ฑ์ ๊ทน๋ํํ๋ ค๋ฉด:
- ๋น๋ ์ค์ ํ์คํ: ๋ชจ๋ ๊ฐ๋ฐ์์ CI/CD ํ์ดํ๋ผ์ธ์ด ์์ค ๋งต ์์ฑ์ ์ํด, ํนํ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ํด ์ผ๊ด๋ ๋น๋ ๋๊ตฌ ์ค์ ์ ์ฌ์ฉํ๋๋ก ๋ณด์ฅํ์ธ์.
- ํ ๊ต์ก: ๊ฐ๋ฐ์๋ค์๊ฒ ์์ค ๋งต์ ์ฌ์ฉํ์ฌ ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ๊ธฐ์ ์ผ๋ก ๊ต์กํ์ธ์. ๋๋ฒ๊น ๊ธฐ์ ๊ณผ ์ผ๋ฐ์ ์ธ ํจ์ ์ ๊ณต์ ํ์ธ์.
- ์ค๋ฅ ์ถ์ ๊ณผ ํตํฉ: ์จ๊ฒจ์ง ์์ค ๋งต์ ์์งํ๊ณ ํ์ฉํ ์ ์๋ ๊ฐ๋ ฅํ ์ค๋ฅ ์ถ์ ์๋น์ค๋ฅผ ๊ตฌํํ์ธ์. ์ด๋ ์ง์ ์ ์ธ ์ฌ์ฉ์ ์ํธ ์์ฉ ์์ด ์ฌ๋ฌ ์ง์ญ ๋ฐ ์๊ฐ๋์ ๊ฑธ์ณ ํ๋ก๋์ ๋ฌธ์ ๋ฅผ ๋๋ฒ๊น ํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
- ์์ค ๋งต ๋ฒ์ ๊ด๋ฆฌ(์ฃผ์ํ์ฌ): ๋ก์ปฌ ๊ฐ๋ฐ ๋ฐ ๋๋ฒ๊น ์ ์ํด ์์ค ๋งต์ ๋ฒ์ ๊ด๋ฆฌ์ ์ปค๋ฐํ๋ ๊ฒ์ด ๋์์ด ๋ ์ ์์ง๋ง, ๋ฆฌํฌ์งํ ๋ฆฌ๊ฐ ๋น๋ํด์ง ์ ์์ต๋๋ค. ํ๋ก๋์ ์ ๊ฒฝ์ฐ, ํญ์ ๋ณ๋๋ก ๊ด๋ฆฌํ๊ฑฐ๋ ์ค๋ฅ ์ถ์ ์๋น์ค๋ฅผ ํตํด ๊ด๋ฆฌํ์ธ์.
- ๋ช ํํ ๋ช ๋ช ๊ท์น: ์ต์ํ๋ ๋ณ์ ์ด๋ฆ์ ๋ฐ๊พธ์ง๋ง, ์๋ณธ ์์ค ์ฝ๋์์ ์์ ์ ์ธ ์ด๋ฆ์ ์ฌ์ฉํ๋ฉด ์์ค ๋งต์ ํตํ ๋๋ฒ๊น ์ด ํจ์ฌ ์ฌ์์ง๋๋ค.
- ๋น๋ ํ๋ก์ธ์ค ๋ฌธ์ํ: ์์ค ๋งต์ด ์ด๋ป๊ฒ ์์ฑ๋๊ณ , ์ด๋์ ์ ์ฅ๋๋ฉฐ(ํด๋นํ๋ ๊ฒฝ์ฐ), ๊ฐ๋ฐ ๋ฐ ๋ฐฐํฌ ์ํฌํ๋ก์ฐ์์ ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง์ ๋ํ ๋ช ํํ ๋ฌธ์๋ฅผ ์ ์งํ์ธ์.
- ๋ธ๋ผ์ฐ์ ํ์ฅ ํ๋ก๊ทธ๋จ ํ์ฉ: ์ผ๋ถ ๋ธ๋ผ์ฐ์ ํ์ฅ ํ๋ก๊ทธ๋จ์ ์์ค ๋งต ๋๋ฒ๊น ์ ๋๊ฑฐ๋ ์์ค ๋งต์ ๋ก๋ฉ ๋ฐ ์ฒ๋ฆฌ์ ๋ํ ์ถ๊ฐ์ ์ธ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ธ ์์ค ๋งต ๋ฌธ์ ํด๊ฒฐ
์ ์ ํ ์ค์ ์๋ ๋ถ๊ตฌํ๊ณ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค:
- ์์ค ๋งต์ด ๋ก๋๋์ง ์์:
- ๋น๋ ๋๊ตฌ์์ ์ค์ ๋ก ์์ค ๋งต์ด ์์ฑ๋๊ณ ์๋์ง ํ์ธํ์ธ์. ๋น๋ ์ถ๋ ฅ ํ์ผ(
.map
ํ์ผ ์ฐพ๊ธฐ)์ ํ์ธํ์ธ์. - ์์ฑ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ ๋์
//# sourceMappingURL=...
์ฃผ์์ด ์๋์ง ํ์ธํ์ธ์. - DevTools์ ๋ธ๋ผ์ฐ์ ๋คํธ์ํฌ ํญ์์
.map
ํ์ผ์ด ์์ฒญ๋๊ณ ์๋์ง, ๊ทธ๋ฆฌ๊ณ 200 OK ์ํ๋ฅผ ๋ฐํํ๋์ง ํ์ธํ์ธ์. sourceMappingURL
์ฃผ์์ ๊ฒฝ๋ก๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๊ธฐ์ค์ผ๋ก.map
ํ์ผ์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ฐ๋ฆฌํค๋์ง ํ์ธํ์ธ์.
- ๋น๋ ๋๊ตฌ์์ ์ค์ ๋ก ์์ค ๋งต์ด ์์ฑ๋๊ณ ์๋์ง ํ์ธํ์ธ์. ๋น๋ ์ถ๋ ฅ ํ์ผ(
- ์๋ชป๋ ๋งคํ:
- ๋ณต์กํ ๋น๋ ํ์ดํ๋ผ์ธ์ด๋ ์์ค ๋งต์ด ์ค๊ฐ ๋จ๊ณ์์ ์์ฑ๋์์ง๋ง ์ฌ๋ฐ๋ฅด๊ฒ ์ฐ๊ฒฐ๋์ง ์์ ๊ฒฝ์ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ๋น๋ ๋๊ตฌ(Webpack, Babel, TypeScript ์ปดํ์ผ๋ฌ)๊ฐ ์ ์ฒด ๋น๋ ๊ณผ์ ์์ ์์ค ๋งต ์ ๋ณด๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์์ฑํ๊ณ ๋ณด์กดํ๋๋ก ์ค์ ๋์๋์ง ํ์ธํ์ธ์.
- ํธํ๋์ง ์๋ ๋ฒ์ ์ ๋น๋ ๋๊ตฌ๋ ํ๋ฌ๊ทธ์ธ์ด ์๋์ง ํ์ธํ์ธ์.
- ์ฑ๋ฅ ์ ํ:
- ์ธ๊ธํ๋ฏ์ด, ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ํ๋ก๋์ ํ๊ฒฝ์ ์ ํฉํ `devtool` ์ค์ ์ ์ฌ์ฉํ์ธ์.
- ์ค๋ฅ ์ถ์ ์๋น์ค๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ ํ๋ก๋์ ๋น๋์์ ์์ค ๋งต์ ์์ ํ ๋นํ์ฑํํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์.
- ์ค๋๋ ์์ค ๋งต:
- ํญ์ ์์ค ๋งต์ด ๋ฐฐํฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ ๋ฐ๋ก ๊ทธ ์์ค ์ฝ๋ ๋ฒ์ ์์ ์์ฑ๋์๋์ง ํ์ธํ์ธ์. ์บ์ ๋ฌดํจํ ๋ฌธ์ ๋ก ์ธํด ์ค๋๋ ๋งต์ด ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
์๋ฐ์คํฌ๋ฆฝํธ ์์ค ๋งต์ ๋ง์คํฐํ๋ ๊ฒ์ ๋จ์ํ ๊ณ ๊ธ ๋๋ฒ๊น ๊ธฐ์ ์ด ์๋๋ผ, ํนํ ๊ธ๋ก๋ฒ ํ ํ๊ฒฝ ๋ด์์ ๊ฒฌ๊ณ ํ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ณ ์ ์งํ๋ ค๋ ๋ชจ๋ ๊ฐ๋ฐ์์๊ฒ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ์ ์ ๋๋ค. ์์ค ๋งต์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํดํ๊ณ , ์์ฑ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ํ๋ฉฐ, ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ ๋ด์์ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํจ์ผ๋ก์จ ๋๋ฒ๊น ์๊ฐ์ ๊ทน์ ์ผ๋ก ์ค์ด๊ณ , ์ฝ๋ ํ์ง์ ํฅ์์ํค๋ฉฐ, ๋ค์ํ ์ง๋ฆฌ์ ์์น์ ๊ฑธ์น ํ์ ์ ๊ฐํํ ์ ์์ต๋๋ค.
์ต์ ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ณต์กํ ์ธ๊ณ์์ ๋ช ํ์ฑ์ผ๋ก ๊ฐ๋ ๋ค๋ฆฌ๋ก์ ์์ค ๋งต์ ๋ฐ์๋ค์ด์ธ์. ์ฆ๊ฑฐ์ด ๋๋ฒ๊น ๋์๊ธธ ๋ฐ๋๋๋ค!