JavaScript ๋ชจ๋ ํธ๋ฆฌ ์์ดํน์ด ๋ฐ๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๊ณ , ์ฑ๋ฅ์ ์ต์ ํํ๋ฉฐ, ํ๋ ์น ๊ฐ๋ฐ์์ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์ธ์. ์์ ๊ฐ ํฌํจ๋ ์ข ํฉ ๊ฐ์ด๋์ ๋๋ค.
JavaScript ๋ชจ๋ ํธ๋ฆฌ ์์ดํน: ์ต์ ํ๋ ์ฑ๋ฅ์ ์ํ ๋ฐ๋ ์ฝ๋ ์ ๊ฑฐ
์น ๊ฐ๋ฐ ํ๊ฒฝ์ด ๋์์์ด ์งํํ๋ ๊ฐ์ด๋ฐ ์ฑ๋ฅ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ฌ์ฉ์๋ ๋น ๋ฅธ ๋ก๋ฉ ์๊ฐ๊ณผ ์ํํ ๊ฒฝํ์ ๊ธฐ๋ํฉ๋๋ค. ์ด๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํ ์ค์ํ ๊ธฐ์ ์ค ํ๋๋ JavaScript ๋ชจ๋ ํธ๋ฆฌ ์์ดํน(๋ฐ๋ ์ฝ๋ ์ ๊ฑฐ๋ผ๊ณ ๋ ํจ)์ ๋๋ค. ์ด ํ๋ก์ธ์ค๋ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ถ์ํ๊ณ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ์ฌ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
ํธ๋ฆฌ ์์ดํน์ด๋ ๋ฌด์์ ๋๊น?
ํธ๋ฆฌ ์์ดํน์ JavaScript ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ๊ฐ์ import ๋ฐ export ๊ด๊ณ๋ฅผ ์ถ์ ํ์ฌ ์๋ํ๋ ๋ฐ๋ ์ฝ๋ ์ ๊ฑฐ์ ํ ํํ์ ๋๋ค. ์ค์ ๋ก ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ฅผ ์๋ณํ์ฌ ์ต์ข ๋ฒ๋ค์์ ์ ๊ฑฐํฉ๋๋ค. "ํธ๋ฆฌ ์์ดํน"์ด๋ผ๋ ์ฉ์ด๋ ๋๋ฌด๋ฅผ ํ๋ค์ด ์ฃฝ์ ์(์ฌ์ฉ๋์ง ์๋ ์ฝ๋)์ ์ ๊ฑฐํ๋ ๋น์ ์์ ์ ๋๋์์ต๋๋ค.
๋จ์ผ ํ์ผ ๋ด์์ ์ฌ์ฉ๋์ง ์๋ ํจ์๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ๊ณผ ๊ฐ์ด ๋ฎ์ ์์ค์์ ์๋ํ๋ ๊ธฐ์กด์ ๋ฐ๋ ์ฝ๋ ์ ๊ฑฐ ๊ธฐ์ ๊ณผ ๋ฌ๋ฆฌ ํธ๋ฆฌ ์์ดํน์ ๋ชจ๋ ์ข ์์ฑ์ ํตํด ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์กฐ๋ฅผ ์ดํดํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๋์์๋ ์ฌ์ฉ๋์ง ์๋ ์ ์ฒด ๋ชจ๋ ๋๋ ํน์ exports๋ฅผ ์๋ณํ๊ณ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
ํธ๋ฆฌ ์์ดํน์ด ์ค์ํ ์ด์ ๋ ๋ฌด์์ ๋๊น?
ํธ๋ฆฌ ์์ดํน์ ํ๋ ์น ๊ฐ๋ฐ์ ์ฌ๋ฌ ๊ฐ์ง ์ฃผ์ ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
- ๋ฒ๋ค ํฌ๊ธฐ ๊ฐ์: ํธ๋ฆฌ ์์ดํน์ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ์ฌ JavaScript ๋ฒ๋ค์ ํฌ๊ธฐ๋ฅผ ํฌ๊ฒ ์ค์ ๋๋ค. ๋ ์์ ๋ฒ๋ค์ ํนํ ๋๋ฆฐ ๋คํธ์ํฌ ์ฐ๊ฒฐ์์ ๋ค์ด๋ก๋ ์๊ฐ์ ๋จ์ถํฉ๋๋ค.
- ์ฑ๋ฅ ํฅ์: ๋ฒ๋ค์ด ์์์๋ก ๋ธ๋ผ์ฐ์ ๊ฐ ํ์ฑํ๊ณ ์คํํด์ผ ํ๋ ์ฝ๋๊ฐ ์ค์ด๋ค์ด ํ์ด์ง ๋ก๋ ์๊ฐ์ด ๋นจ๋ผ์ง๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ด ๋์ฑ ๋ฐ์์ ์ผ๋ก ๋ณํฉ๋๋ค.
- ๋ ๋์ ์ฝ๋ ๊ตฌ์ฑ: ํธ๋ฆฌ ์์ดํน์ ๊ฐ๋ฐ์๊ฐ ๋ชจ๋ํ๋๊ณ ์ ๊ตฌ์ฑ๋ ์ฝ๋๋ฅผ ์์ฑํ๋๋ก ์ฅ๋ คํ์ฌ ์ ์ง ๊ด๋ฆฌ ๋ฐ ์ดํด๊ฐ ๋ ์ฌ์์ง๋๋ค.
- ํฅ์๋ ์ฌ์ฉ์ ๊ฒฝํ: ๋ ๋น ๋ฅธ ๋ก๋ฉ ์๊ฐ๊ณผ ํฅ์๋ ์ฑ๋ฅ์ ์ ๋ฐ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ์ฌ ์ฐธ์ฌ๋์ ๋ง์กฑ๋๋ฅผ ๋์ ๋๋ค.
ํธ๋ฆฌ ์์ดํน ์๋ ๋ฐฉ์
ํธ๋ฆฌ ์์ดํน์ ํจ๊ณผ๋ ES Modules (ECMAScript Modules)์ ์ฌ์ฉ์ ํฌ๊ฒ ์์กดํฉ๋๋ค. ES Modules๋ import
๋ฐ export
๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ๋ชจ๋ ๊ฐ์ ์ข
์์ฑ์ ์ ์ํฉ๋๋ค. ์ด๋ฌํ ๋ช
์์ ์ธ ์ข
์์ฑ ์ ์ธ์ ํตํด ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ ์ฝ๋ ํ๋ฆ์ ์ ํํ๊ฒ ์ถ์ ํ๊ณ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ฅผ ์๋ณํ ์ ์์ต๋๋ค.
ํธ๋ฆฌ ์์ดํน์ด ์ผ๋ฐ์ ์ผ๋ก ์๋ํ๋ ๋ฐฉ์์ ๋ํ ๊ฐ๋จํ ๋ถ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ข ์์ฑ ๋ถ์: ๋ชจ๋ ๋ฒ๋ค๋ฌ(์: Webpack, Rollup, Parcel)๋ ์ฝ๋๋ฒ ์ด์ค์ import ๋ฐ export ๋ฌธ์ ๋ถ์ํ์ฌ ์ข ์์ฑ ๊ทธ๋ํ๋ฅผ ๋น๋ํฉ๋๋ค. ์ด ๊ทธ๋ํ๋ ์๋ก ๋ค๋ฅธ ๋ชจ๋ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ํ๋ ๋๋ค.
- ์ฝ๋ ์ถ์ : ๋ฒ๋ค๋ฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์ ์ ์์ ์์ํ์ฌ ์ค์ ๋ก ์ฌ์ฉ๋๋ ๋ชจ๋ ๋ฐ exports๋ฅผ ์ถ์ ํฉ๋๋ค. import ์ฒด์ธ์ ๋ฐ๋ผ ์ด๋ค ์ฝ๋๊ฐ ๋๋ฌ ๊ฐ๋ฅํ์ง, ์ด๋ค ์ฝ๋๊ฐ ๊ทธ๋ ์ง ์์์ง ํ์ธํฉ๋๋ค.
- ๋ฐ๋ ์ฝ๋ ์๋ณ: ์ง์ ์ ์์ ๋๋ฌํ ์ ์๋ ๋ชจ๋ ๋๋ exports๋ ๋ฐ๋ ์ฝ๋๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
- ์ฝ๋ ์ ๊ฑฐ: ๋ฒ๋ค๋ฌ๋ ์ต์ข ๋ฒ๋ค์์ ๋ฐ๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
์์ : ๊ธฐ๋ณธ ํธ๋ฆฌ ์์ดํน
๋ค์๊ณผ ๊ฐ์ ๋ ๊ฐ์ ๋ชจ๋ ์์ ๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
๋ชจ๋ `math.js`:
export function add(a, b) {
return a + b;
}
export function subtract(a, b) {
return a - b;
}
๋ชจ๋ `app.js`:
import { add } from './math.js';
const result = add(5, 3);
console.log(result);
์ด ์์ ์์ `math.js`์ `subtract` ํจ์๋ `app.js`์์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ํธ๋ฆฌ ์์ดํน์ด ํ์ฑํ๋๋ฉด ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ ์ต์ข ๋ฒ๋ค์์ `subtract` ํจ์๋ฅผ ์ ๊ฑฐํ์ฌ ๋ ์๊ณ ์ต์ ํ๋ ์ถ๋ ฅ์ ์์ฑํฉ๋๋ค.
์ผ๋ฐ์ ์ธ ๋ชจ๋ ๋ฒ๋ค๋ฌ ๋ฐ ํธ๋ฆฌ ์์ดํน
์ฌ๋ฌ ์ธ๊ธฐ ์๋ ๋ชจ๋ ๋ฒ๋ค๋ฌ๊ฐ ํธ๋ฆฌ ์์ดํน์ ์ง์ํฉ๋๋ค. ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๊ฒ๋ค์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Webpack
Webpack์ ๊ฐ๋ ฅํ๊ณ ๊ตฌ์ฑ ๊ฐ๋ฅํ ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ๋๋ค. Webpack์์ ํธ๋ฆฌ ์์ดํน์ ํ๋ ค๋ฉด ES Modules๋ฅผ ์ฌ์ฉํ๊ณ ์ต์ ํ ๊ธฐ๋ฅ์ ํ์ฑํํด์ผ ํฉ๋๋ค.
๊ตฌ์ฑ:
Webpack์์ ํธ๋ฆฌ ์์ดํน์ ํ์ฑํํ๋ ค๋ฉด ๋ค์์ ์ํํด์ผ ํฉ๋๋ค.
- ES Modules(
import
๋ฐexport
)๋ฅผ ์ฌ์ฉํฉ๋๋ค. - Webpack ๊ตฌ์ฑ์์
mode
๋ฅผproduction
์ผ๋ก ์ค์ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํธ๋ฆฌ ์์ดํน์ ํฌํจํ ๋ค์ํ ์ต์ ํ๊ฐ ํ์ฑํ๋ฉ๋๋ค. - ์ฝ๋๊ฐ ํธ๋ฆฌ ์์ดํน์ ๋ฐฉ์งํ๋ ๋ฐฉ์์ผ๋ก ํธ๋์คํ์ผ๋์ง ์์๋์ง ํ์ธํฉ๋๋ค(์: CommonJS ๋ชจ๋ ์ฌ์ฉ).
๋ค์์ ๊ธฐ๋ณธ Webpack ๊ตฌ์ฑ ์์ ์ ๋๋ค.
module.exports = {
mode: 'production',
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist'),
},
};
์์ :
์ฌ๋ฌ ํจ์๊ฐ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ณ ๋ คํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํ๋๋ง ์ฌ์ฉํฉ๋๋ค. ํ๋ก๋์ ์ฉ์ผ๋ก ๊ตฌ์ฑ๋ Webpack์ ์๋์ผ๋ก ์ฌ์ฉ๋์ง ์๋ ํจ์๋ฅผ ์ ๊ฑฐํ์ฌ ์ต์ข ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ ๋๋ค.
Rollup
Rollup์ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋ค๊ธฐ ์ํด ํน๋ณํ ์ค๊ณ๋ ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ๋๋ค. ํธ๋ฆฌ ์์ดํน์ ๋ฐ์ด๋๊ณ ๊ณ ๋๋ก ์ต์ ํ๋ ๋ฒ๋ค์ ์์ฑํฉ๋๋ค.
๊ตฌ์ฑ:
Rollup์ ES Modules๋ฅผ ์ฌ์ฉํ ๋ ์๋์ผ๋ก ํธ๋ฆฌ ์์ดํน์ ์ํํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ์ฑํํ๊ธฐ ์ํด ํน๋ณํ ๊ตฌ์ฑํ ํ์๊ฐ ์์ต๋๋ค.
๋ค์์ ๊ธฐ๋ณธ Rollup ๊ตฌ์ฑ ์์ ์ ๋๋ค.
export default {
input: 'src/index.js',
output: {
file: 'dist/bundle.js',
format: 'es',
},
};
์์ :
Rollup์ ๊ฐ์ ์ ์ต์ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋๋ ๋ฐ ์์ต๋๋ค. ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋น๋ํ๋ ๊ฒฝ์ฐ Rollup์ ์๋น์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋๋ ์ปดํฌ๋ํธ๋ง ์ต์ข ๋ฒ๋ค์ ํฌํจ๋๋๋ก ํฉ๋๋ค.
Parcel
Parcel์ ์ฌ์ฉํ๊ธฐ ์ฝ๊ณ ๋น ๋ฅด๋๋ก ์ค๊ณ๋ ์ ๋ก ๊ตฌ์ฑ ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ๋๋ค. ํน์ ๊ตฌ์ฑ์ ์๊ตฌํ์ง ์๊ณ ์๋์ผ๋ก ํธ๋ฆฌ ์์ดํน์ ์ํํฉ๋๋ค.
๊ตฌ์ฑ:
Parcel์ ์๋์ผ๋ก ํธ๋ฆฌ ์์ดํน์ ์ฒ๋ฆฌํฉ๋๋ค. ๋จ์ํ ์ง์ ์ ์ ๊ฐ๋ฆฌํค๋ฉด ๋๋จธ์ง๋ ์์์ ์ฒ๋ฆฌํฉ๋๋ค.
์์ :
Parcel์ ๋น ๋ฅธ ํ๋กํ ํ์ ์ ์ ๋ฐ ์๊ท๋ชจ ํ๋ก์ ํธ์ ์ ํฉํฉ๋๋ค. ์๋ ํธ๋ฆฌ ์์ดํน์ ์ต์ํ์ ๊ตฌ์ฑ์ผ๋ก๋ ๋ฒ๋ค์ด ์ต์ ํ๋๋๋ก ํฉ๋๋ค.
ํจ๊ณผ์ ์ธ ํธ๋ฆฌ ์์ดํน์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
๋ชจ๋ ๋ฒ๋ค๋ฌ๊ฐ ์๋์ผ๋ก ํธ๋ฆฌ ์์ดํน์ ์ํํ ์ ์์ง๋ง ํจ๊ณผ๋ฅผ ๊ทน๋ํํ๊ธฐ ์ํด ๋ฐ๋ฅผ ์ ์๋ ๋ช ๊ฐ์ง ๋ชจ๋ฒ ์ฌ๋ก๊ฐ ์์ต๋๋ค.
- ES Modules ์ฌ์ฉ: ์์์ ์ธ๊ธํ๋ฏ์ด ํธ๋ฆฌ ์์ดํน์ ES Modules์
import
๋ฐexport
๊ตฌ๋ฌธ์ ์์กดํฉ๋๋ค. ํธ๋ฆฌ ์์ดํน์ ํ์ฉํ๋ ค๋ฉด CommonJS ๋ชจ๋(require
)์ ์ฌ์ฉํ์ง ๋ง์ญ์์ค. - ๋ถ์์ฉ ๋ฐฉ์ง: ๋ถ์์ฉ์ ํจ์์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ ๊ฒ์ ์์ ํ๋ ์์ ์ ๋๋ค. ์๋ก๋ ์ ์ญ ๋ณ์ ์์ ๋๋ API ํธ์ถ์ด ์์ต๋๋ค. ๋ถ์์ฉ์ด ์์ผ๋ฉด ๋ฒ๋ค๋ฌ๊ฐ ํจ์๊ฐ ๋ถ์์ฉ์ด ์๋ ๊ฒฝ์ฐ ์ค์ ๋ก ์ฌ์ฉ๋์ง ์๋์ง ์ฌ๋ถ๋ฅผ ํ๋จํ ์ ์๊ธฐ ๋๋ฌธ์ ํธ๋ฆฌ ์์ดํน์ด ๋ฐฉ์ง๋ ์ ์์ต๋๋ค.
- ์์ ํจ์ ์์ฑ: ์์ ํจ์๋ ๋์ผํ ์ ๋ ฅ์ ๋ํด ํญ์ ๋์ผํ ์ถ๋ ฅ์ ๋ฐํํ๊ณ ๋ถ์์ฉ์ด ์๋ ํจ์์ ๋๋ค. ์์ ํจ์๋ ๋ฒ๋ค๋ฌ๊ฐ ๋ถ์ํ๊ณ ์ต์ ํํ๊ธฐ๊ฐ ๋ ์ฝ์ต๋๋ค.
- ์ ์ญ ๋ฒ์ ์ต์ํ: ์ ์ญ ๋ฒ์์์ ๋ณ์์ ํจ์๋ฅผ ์ ์ํ์ง ๋ง์ญ์์ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ฒ๋ค๋ฌ๊ฐ ์ข ์์ฑ์ ์ถ์ ํ๊ณ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ฅผ ์๋ณํ๊ธฐ๊ฐ ๋ ์ด๋ ค์์ง๋๋ค.
- ๋ฆฐํฐ ์ฌ์ฉ: ๋ฆฐํฐ๋ ์ฌ์ฉ๋์ง ์๋ ๋ณ์ ๋๋ ๋ถ์์ฉ๊ณผ ๊ฐ์ด ํธ๋ฆฌ ์์ดํน์ ๋ฐฉ์งํ ์ ์๋ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์๋ณํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ESLint์ ๊ฐ์ ๋๊ตฌ๋ ํธ๋ฆฌ ์์ดํน์ ๋ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ ์ฉํ๊ธฐ ์ํ ๊ท์น์ผ๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
- ์ฝ๋ ๋ถํ : ํธ๋ฆฌ ์์ดํน์ ์ฝ๋ ๋ถํ ๊ณผ ๊ฒฐํฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ๋์ฑ ์ต์ ํํ์ญ์์ค. ์ฝ๋ ๋ถํ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์์ ๋ฐ๋ผ ๋ก๋ํ ์ ์๋ ๋ ์์ ์ฒญํฌ๋ก ๋๋์ด ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ์ค์ ๋๋ค.
- ๋ฒ๋ค ๋ถ์: Webpack Bundle Analyzer์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒ๋ค ๋ด์ฉ์ ์๊ฐํํ๊ณ ์ต์ ํํ ์์ญ์ ์๋ณํฉ๋๋ค. ์ด๋ฅผ ํตํด ํธ๋ฆฌ ์์ดํน์ด ์๋ํ๋ ๋ฐฉ์์ ์ดํดํ๊ณ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์๋ณํ ์ ์์ต๋๋ค.
์์ : ๋ถ์์ฉ ๋ฐฉ์ง
๋ค์์ ๋ถ์์ฉ์ด ํธ๋ฆฌ ์์ดํน์ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ ์์ ์ ๋๋ค.
๋ชจ๋ `utility.js`:
let counter = 0;
export function increment() {
counter++;
console.log('Counter incremented:', counter);
}
export function getValue() {
return counter;
}
๋ชจ๋ `app.js`:
//import { increment } from './utility.js';
console.log('App started');
`increment`๊ฐ `app.js`์์ ์ฃผ์ ์ฒ๋ฆฌ๋์ด ์๋๋ผ๋(์ฆ, ์ง์ ์ฌ์ฉ๋์ง ์์) `increment` ํจ์๊ฐ ์ ์ญ `counter` ๋ณ์(๋ถ์์ฉ)๋ฅผ ์์ ํ๊ธฐ ๋๋ฌธ์ ๋ฒ๋ค๋ฌ๋ ์ฌ์ ํ ์ต์ข ๋ฒ๋ค์ `utility.js`๋ฅผ ํฌํจํ ์ ์์ต๋๋ค. ์ด ์๋๋ฆฌ์ค์์ ํธ๋ฆฌ ์์ดํน์ ํ์ฑํํ๋ ค๋ฉด ์ ์ญ ๋ณ์๋ฅผ ์์ ํ๋ ๋์ ์ฆ๊ฐ๋ ๊ฐ์ ๋ฐํํ๋ ๋ฑ์ ๋ฐฉ์์ผ๋ก ๋ถ์์ฉ์ ํผํ๋๋ก ์ฝ๋๋ฅผ ๋ฆฌํฉํฐ๋งํ์ญ์์ค.
์ผ๋ฐ์ ์ธ ํจ์ ๋ฐ ๋ฐฉ์ง ๋ฐฉ๋ฒ
ํธ๋ฆฌ ์์ดํน์ ๊ฐ๋ ฅํ ๊ธฐ์ ์ด์ง๋ง ํจ๊ณผ์ ์ผ๋ก ์๋ํ์ง ๋ชปํ๊ฒ ํ๋ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ํจ์ ์ด ์์ต๋๋ค.
- CommonJS ๋ชจ๋ ์ฌ์ฉ: ์์์ ์ธ๊ธํ๋ฏ์ด ํธ๋ฆฌ ์์ดํน์ ES Modules์ ์์กดํฉ๋๋ค. CommonJS ๋ชจ๋(
require
)์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํธ๋ฆฌ ์์ดํน์ด ์๋ํ์ง ์์ต๋๋ค. ํธ๋ฆฌ ์์ดํน์ ํ์ฉํ๋ ค๋ฉด ์ฝ๋๋ฅผ ES Modules๋ก ๋ณํํ์ญ์์ค. - ์๋ชป๋ ๋ชจ๋ ๊ตฌ์ฑ: ๋ชจ๋ ๋ฒ๋ค๋ฌ๊ฐ ํธ๋ฆฌ ์์ดํน์ ์ ํฉํ๊ฒ ๊ตฌ์ฑ๋์๋์ง ํ์ธํ์ญ์์ค. ์ฌ๊ธฐ์๋ Webpack์์
mode
๋ฅผproduction
์ผ๋ก ์ค์ ํ๊ฑฐ๋ Rollup ๋๋ Parcel์ ๋ํ ์ฌ๋ฐ๋ฅธ ๊ตฌ์ฑ์ ์ฌ์ฉํ๋ ๊ฒ์ด ํฌํจ๋ ์ ์์ต๋๋ค. - ํธ๋ฆฌ ์์ดํน์ ๋ฐฉ์งํ๋ ํธ๋์คํ์ผ๋ฌ ์ฌ์ฉ: ์ผ๋ถ ํธ๋์คํ์ผ๋ฌ๋ ES Modules๋ฅผ CommonJS ๋ชจ๋๋ก ๋ณํํ์ฌ ํธ๋ฆฌ ์์ดํน์ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ํธ๋์คํ์ผ๋ฌ๊ฐ ES Modules๋ฅผ ๋ณด์กดํ๋๋ก ๊ตฌ์ฑ๋์๋์ง ํ์ธํ์ญ์์ค.
- ์ ์ ํ ์ฒ๋ฆฌ ์์ด ๋์ import์ ์์กด: ๋์ import(
import()
)๋ ์ฝ๋ ๋ถํ ์ ์ ์ฉํ ์ ์์ง๋ง ๋ฒ๋ค๋ฌ๊ฐ ์ด๋ค ์ฝ๋๊ฐ ์ฌ์ฉ๋๋์ง ํ๋จํ๊ธฐ๊ฐ ๋ ์ด๋ ค์์ง ์๋ ์์ต๋๋ค. ๋์ import๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ๊ณ ๋ฒ๋ค๋ฌ๊ฐ ํธ๋ฆฌ ์์ดํน์ ํ์ฑํํ๊ธฐ์ ์ถฉ๋ถํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋์ง ํ์ธํ์ญ์์ค. - ๊ฐ๋ฐ ์ ์ฉ ์ฝ๋์ ์ค์๋ก ์ธํ ํฌํจ: ๋๋ก๋ ๋ก๊น ๋ฌธ, ๋๋ฒ๊น ๋๊ตฌ์ ๊ฐ์ ๊ฐ๋ฐ ์ ์ฉ ์ฝ๋๊ฐ ์ค์๋ก ํ๋ก๋์ ๋ฒ๋ค์ ํฌํจ๋์ด ํฌ๊ธฐ๊ฐ ์ปค์ง ์ ์์ต๋๋ค. ์ ์ฒ๋ฆฌ๊ธฐ ์ง์๋ฌธ ๋๋ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๋์ ๋น๋์์ ๊ฐ๋ฐ ์ ์ฉ ์ฝ๋๋ฅผ ์ ๊ฑฐํ์ญ์์ค.
์์ : ์๋ชป๋ ํธ๋์คํ์ผ
Babel์ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ํธ๋์คํ์ผํ๋ ์๋๋ฆฌ์ค๋ฅผ ๊ณ ๋ คํ์ญ์์ค. Babel ๊ตฌ์ฑ์ ES Modules๋ฅผ CommonJS ๋ชจ๋๋ก ๋ณํํ๋ ํ๋ฌ๊ทธ์ธ ๋๋ ํ๋ฆฌ์ ์ด ํฌํจ๋์ด ์์ผ๋ฉด ํธ๋ฆฌ ์์ดํน์ด ๋นํ์ฑํ๋ฉ๋๋ค. ๋ฒ๋ค๋ฌ๊ฐ ํธ๋ฆฌ ์์ดํน์ ํจ๊ณผ์ ์ผ๋ก ์ํํ ์ ์๋๋ก Babel ๊ตฌ์ฑ์ด ES Modules๋ฅผ ๋ณด์กดํ๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
ํธ๋ฆฌ ์์ดํน๊ณผ ์ฝ๋ ๋ถํ : ๊ฐ๋ ฅํ ์กฐํฉ
ํธ๋ฆฌ ์์ดํน๊ณผ ์ฝ๋ ๋ถํ ์ ๊ฒฐํฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ฝ๋ ๋ถํ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์์ ๋ฐ๋ผ ๋ก๋ํ ์ ์๋ ๋ ์์ ์ฒญํฌ๋ก ๋๋๋ ๊ฒ์ด ํฌํจ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ด๊ธฐ ๋ก๋ ์๊ฐ์ด ์ค์ด๋ค๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ด ํฅ์๋ฉ๋๋ค.
ํจ๊ป ์ฌ์ฉํ๋ฉด ํธ๋ฆฌ ์์ดํน๊ณผ ์ฝ๋ ๋ถํ ์ ๋ค์๊ณผ ๊ฐ์ ์ด์ ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
- ์ด๊ธฐ ๋ก๋ ์๊ฐ ๊ฐ์: ์ฝ๋ ๋ถํ ์ ์ฌ์ฉํ๋ฉด ์ด๊ธฐ ๋ณด๊ธฐ์ ํ์ํ ์ฝ๋๋ง ๋ก๋ํ์ฌ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ์ค์ผ ์ ์์ต๋๋ค.
- ์ฑ๋ฅ ํฅ์: ํธ๋ฆฌ ์์ดํน์ ๊ฐ ์ฝ๋ ์ฒญํฌ์ ์ค์ ๋ก ์ฌ์ฉ๋๋ ์ฝ๋๋ง ํฌํจ๋๋๋ก ํ์ฌ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ๋์ฑ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
- ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ: ๋ ๋น ๋ฅธ ๋ก๋ฉ ์๊ฐ๊ณผ ํฅ์๋ ์ฑ๋ฅ์ ์ ๋ฐ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํฉ๋๋ค.
Webpack ๋ฐ Parcel๊ณผ ๊ฐ์ ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ ์ฝ๋ ๋ถํ ์ ๋ํ ๊ธฐ๋ณธ ์ ๊ณต ์ง์์ ์ ๊ณตํฉ๋๋ค. ๋์ import ๋ฐ ๊ฒฝ๋ก ๊ธฐ๋ฐ ์ฝ๋ ๋ถํ ๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ์์ ์ฒญํฌ๋ก ๋๋ ์ ์์ต๋๋ค.
๊ณ ๊ธ ํธ๋ฆฌ ์์ดํน ๊ธฐ์
ํธ๋ฆฌ ์์ดํน์ ๊ธฐ๋ณธ ์์น ์ธ์๋ ๋ฒ๋ค์ ๋์ฑ ์ต์ ํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ช ๊ฐ์ง ๊ณ ๊ธ ๊ธฐ์ ์ด ์์ต๋๋ค.
- ์ค์ฝํ ํธ์ด์คํ : ์ค์ฝํ ํธ์ด์คํ (๋ชจ๋ ์ฐ๊ฒฐ์ด๋ผ๊ณ ๋ ํจ)์ ์ฌ๋ฌ ๋ชจ๋์ ๋จ์ผ ์ค์ฝํ๋ก ๊ฒฐํฉํ์ฌ ํจ์ ํธ์ถ์ ์ค๋ฒํค๋๋ฅผ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๊ธฐ์ ์ ๋๋ค.
- ๋ฐ๋ ์ฝ๋ ์ฝ์ : ๋ฐ๋ ์ฝ๋ ์ฝ์ ์๋ ํธ๋ฆฌ ์์ดํน์ ํจ๊ณผ๋ฅผ ํ ์คํธํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ฅผ ์ฝ์ ํ๋ ๊ฒ์ด ํฌํจ๋ฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํธ๋ฆฌ ์์ดํน์ด ์์๋๋ก ์๋ํ์ง ์๋ ์์ญ์ ์๋ณํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
- ์ฌ์ฉ์ ์ง์ ํธ๋ฆฌ ์์ดํน ํ๋ฌ๊ทธ์ธ: ๋ชจ๋ ๋ฒ๋ค๋ฌ์ฉ ์ฌ์ฉ์ ์ง์ ํธ๋ฆฌ ์์ดํน ํ๋ฌ๊ทธ์ธ์ ๋ง๋ค์ด ํน์ ์๋๋ฆฌ์ค๋ฅผ ์ฒ๋ฆฌํ๊ฑฐ๋ ๊ธฐ๋ณธ ํธ๋ฆฌ ์์ดํน ์๊ณ ๋ฆฌ์ฆ์์ ์ง์ํ์ง ์๋ ๋ฐฉ์์ผ๋ก ์ฝ๋๋ฅผ ์ต์ ํํ ์ ์์ต๋๋ค.
- `package.json`์์ `sideEffects` ํ๋๊ทธ ์ฌ์ฉ: `package.json` ํ์ผ์ `sideEffects` ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ด๋ค ํ์ผ์ ๋ถ์์ฉ์ด ์๋์ง ๋ฒ๋ค๋ฌ์ ์๋ฆด ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ฐ์ ธ์์ง๋ง ์ฌ์ฉํ์ง ์๋๋ผ๋ ๋ถ์์ฉ์ด ์๋ ํ์ผ์ ๋ฒ๋ค๋ฌ๊ฐ ์์ ํ๊ฒ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ์ด๋ CSS ํ์ผ ๋๋ ๋ถ์์ฉ์ด ์๋ ๊ธฐํ ์์ฐ์ ํฌํจํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํนํ ์ ์ฉํฉ๋๋ค.
ํธ๋ฆฌ ์์ดํน ํจ๊ณผ ๋ถ์
ํธ๋ฆฌ ์์ดํน์ด ์์๋๋ก ์๋ํ๋์ง ํ์ธํ๋ ค๋ฉด ํจ๊ณผ๋ฅผ ๋ถ์ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ฌ๋ฌ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฒ๋ค์ ๋ถ์ํ๊ณ ์ต์ ํํ ์์ญ์ ์๋ณํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
- Webpack Bundle Analyzer: ์ด ๋๊ตฌ๋ ๋ฒ๋ค ๋ด์ฉ์ ์๊ฐ์ ์ผ๋ก ํํํ์ฌ ์ด๋ค ๋ชจ๋์ด ๊ฐ์ฅ ๋ง์ ๊ณต๊ฐ์ ์ฐจ์งํ๊ณ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ฅผ ์๋ณํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- Source Map Explorer: ์ด ๋๊ตฌ๋ ์์ค ๋งต์ ๋ถ์ํ์ฌ ๋ฒ๋ค ํฌ๊ธฐ์ ์ํฅ์ ๋ฏธ์น๋ ์๋ ์์ค ์ฝ๋๋ฅผ ์๋ณํฉ๋๋ค.
- ๋ฒ๋ค ํฌ๊ธฐ ๋น๊ต ๋๊ตฌ: ์ด๋ฌํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ํธ๋ฆฌ ์์ดํน ์ ํ์ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ๋น๊ตํ์ฌ ์ผ๋ง๋ ๋ง์ ๊ณต๊ฐ์ด ์ ์ฝ๋์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
๋ฒ๋ค์ ๋ถ์ํ๋ฉด ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ์ต์ ์ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ธฐ ์ํด ํธ๋ฆฌ ์์ดํน ๊ตฌ์ฑ์ ๋ฏธ์ธ ์กฐ์ ํ ์ ์์ต๋๋ค.
๋ค์ํ JavaScript ํ๋ ์์ํฌ์์ ํธ๋ฆฌ ์์ดํน
ํธ๋ฆฌ ์์ดํน์ ๊ตฌํ ๋ฐ ํจ๊ณผ๋ ์ฌ์ฉ ์ค์ธ JavaScript ํ๋ ์์ํฌ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์ต๋๋ค. ๋ค์์ ์ผ๋ถ ์ธ๊ธฐ ์๋ ํ๋ ์์ํฌ์์ ํธ๋ฆฌ ์์ดํน์ด ์๋ํ๋ ๋ฐฉ์์ ๋ํ ๊ฐ๋ตํ ๊ฐ์์ ๋๋ค.
React
React๋ ํธ๋ฆฌ ์์ดํน์ ์ํด Webpack ๋๋ Parcel๊ณผ ๊ฐ์ ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ์์กดํฉ๋๋ค. ES Modules๋ฅผ ์ฌ์ฉํ๊ณ ๋ฒ๋ค๋ฌ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑํ๋ฉด React ์ปดํฌ๋ํธ ๋ฐ ์ข ์์ฑ์ ํจ๊ณผ์ ์ผ๋ก ํธ๋ฆฌ ์์ดํนํ ์ ์์ต๋๋ค.
Angular
Angular์ ๋น๋ ํ๋ก์ธ์ค์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํธ๋ฆฌ ์์ดํน์ด ํฌํจ๋ฉ๋๋ค. Angular CLI๋ Terser JavaScript ํ์ ๋ฐ ๋ง๊ธ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
Vue.js
Vue.js๋ ํธ๋ฆฌ ์์ดํน์ ์ํด ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ์์กดํฉ๋๋ค. ES Modules๋ฅผ ์ฌ์ฉํ๊ณ ๋ฒ๋ค๋ฌ๋ฅผ ์ ์ ํ๊ฒ ๊ตฌ์ฑํ๋ฉด Vue ์ปดํฌ๋ํธ ๋ฐ ์ข ์์ฑ์ ํธ๋ฆฌ ์์ดํนํ ์ ์์ต๋๋ค.
ํธ๋ฆฌ ์์ดํน์ ๋ฏธ๋
ํธ๋ฆฌ ์์ดํน์ ๋์์์ด ์งํํ๋ ๊ธฐ์ ์ ๋๋ค. JavaScript๊ฐ ์งํํ๊ณ ์๋ก์ด ๋ชจ๋ ๋ฒ๋ค๋ฌ ๋ฐ ๋น๋ ๋๊ตฌ๊ฐ ๋ฑ์ฅํจ์ ๋ฐ๋ผ ํธ๋ฆฌ ์์ดํน ์๊ณ ๋ฆฌ์ฆ ๋ฐ ๊ธฐ์ ์ด ๋์ฑ ๊ฐ์ ๋ ๊ฒ์ผ๋ก ์์ํ ์ ์์ต๋๋ค.
ํธ๋ฆฌ ์์ดํน์ ์ ์ฌ์ ์ธ ๋ฏธ๋ ํธ๋ ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ํฅ์๋ ์ ์ ๋ถ์: ๋ณด๋ค ์ ๊ตํ ์ ์ ๋ถ์ ๊ธฐ์ ์ ํตํด ๋ฒ๋ค๋ฌ๋ ๋ ๋ง์ ๋ฐ๋ ์ฝ๋๋ฅผ ์๋ณํ๊ณ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
- ๋์ ํธ๋ฆฌ ์์ดํน: ๋์ ํธ๋ฆฌ ์์ดํน์ ํตํด ๋ฒ๋ค๋ฌ๋ ์ฌ์ฉ์ ์ํธ ์์ฉ ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ํ์ ๋ฐ๋ผ ๋ฐํ์์ ์ฝ๋๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
- AI/ML๊ณผ์ ํตํฉ: AI ๋ฐ ๋จธ์ ๋ฌ๋์ ์ฌ์ฉํ์ฌ ์ฝ๋ ํจํด์ ๋ถ์ํ๊ณ ์ฌ์ฉ๋์ง ์์ ๊ฐ๋ฅ์ฑ์ด ๋์ ์ฝ๋๋ฅผ ์์ธกํ์ฌ ํธ๋ฆฌ ์์ดํน ํจ๊ณผ๋ฅผ ๋์ฑ ๊ฐ์ ํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
JavaScript ๋ชจ๋ ํธ๋ฆฌ ์์ดํน์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ์ต์ ํํ๋ ๋ฐ ์ค์ํ ๊ธฐ์ ์ ๋๋ค. ๋ฐ๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๊ณ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์์ผ๋ก์จ ํธ๋ฆฌ ์์ดํน์ ๋ก๋ฉ ์๊ฐ์ ํฌ๊ฒ ๊ฐ์ ํ๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ํธ๋ฆฌ ์์ดํน์ ์์น์ ์ดํดํ๊ณ , ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๊ณ , ์ฌ๋ฐ๋ฅธ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ต๋ํ ํจ์จ์ ์ด๊ณ ์ฑ๋ฅ์ด ๋ฐ์ด๋๋๋ก ํ ์ ์์ต๋๋ค.
ES Modules๋ฅผ ์ฌ์ฉํ๊ณ , ๋ถ์์ฉ์ ํผํ๊ณ , ์ ๊ธฐ์ ์ผ๋ก ๋ฒ๋ค์ ๋ถ์ํ์ฌ ํธ๋ฆฌ ์์ดํน์ ์ด์ ์ ๊ทน๋ํํ์ญ์์ค. ์น ๊ฐ๋ฐ์ด ๊ณ์ ์งํํจ์ ๋ฐ๋ผ ํธ๋ฆฌ ์์ดํน์ ๊ณ ์ฑ๋ฅ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ํ์์ ์ธ ๋๊ตฌ๋ก ๋จ์ ๊ฒ์ ๋๋ค.
์ด ๊ฐ์ด๋์์๋ ํธ๋ฆฌ ์์ดํน์ ๋ํ ํฌ๊ด์ ์ธ ๊ฐ์๋ฅผ ์ ๊ณตํ์ง๋ง ํน์ ๋ชจ๋ ๋ฒ๋ค๋ฌ ๋ฐ JavaScript ํ๋ ์์ํฌ์ ์ค๋ช ์๋ฅผ ์ฐธ์กฐํ์ฌ ์์ธํ ์ ๋ณด ๋ฐ ๊ตฌ์ฑ ์ง์นจ์ ํ์ธํ์ญ์์ค. ์ฆ๊ฑฐ์ด ์ฝ๋ฉ ๋์ธ์!