SWC ๋ณํ ๊ตฌ์ฑ์ ๋ง์คํฐํ์ฌ Next.js์ ์ต๊ณ ์ฑ๋ฅ์ ๋ฐํํ์ธ์. ์ด ์ข ํฉ ๊ฐ์ด๋๋ ๊ธ๋ก๋ฒ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๊ณ ๊ธ ์ต์ ํ ๊ธฐ์ ์ ๋ค๋ฃน๋๋ค.
Next.js ์ปดํ์ผ๋ฌ ์ต์ ํ: SWC ๋ณํ ๊ตฌ์ฑ ๋ง์คํฐํ๊ธฐ
๊ฐ๋ ฅํ React ํ๋ ์์ํฌ์ธ Next.js๋ ํ์ํ ์ฑ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ต์ ์ ์ฑ๋ฅ์ ๋ฌ์ฑํ๋ ํต์ฌ ์์๋ ๋ฒ์ 12๋ถํฐ Next.js์ ๊ธฐ๋ณธ ์ปดํ์ผ๋ฌ๊ฐ ๋ SWC(Speedy Web Compiler)๋ฅผ ์ดํดํ๊ณ ๊ตฌ์ฑํ๋ ๊ฒ์ ๋๋ค. ์ด ์ข ํฉ ๊ฐ์ด๋๋ SWC ๋ณํ ๊ตฌ์ฑ์ ๋ณต์กํ ๋ด์ฉ์ ์ฌ๋ ์๊ฒ ๋ค๋ฃจ๋ฉฐ, Next.js ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต๊ณ ์ฑ๋ฅ๊ณผ ๊ธ๋ก๋ฒ ํ์ฅ์ฑ์ ์ํด ๋ฏธ์ธ ์กฐ์ ํ ์ ์๋๋ก ๋์์ค๋๋ค.
SWC๋ ๋ฌด์์ด๋ฉฐ ์ ์ค์ํ๊ฐ?
SWC๋ ์ปดํ์ผ, ๋ฒ๋ค๋ง, ์ถ์ ๋ฑ์ ์ํ ์ฐจ์ธ๋ ํ๋ซํผ์ ๋๋ค. Rust๋ก ์์ฑ๋์์ผ๋ฉฐ ์ด์ Next.js์ ๊ธฐ๋ณธ ์ปดํ์ผ๋ฌ์๋ Babel๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๋๋ก ์ค๊ณ๋์์ต๋๋ค. ์ด ์๋๋ ๋ ๋น ๋ฅธ ๋น๋ ์๊ฐ, ๋ ์ ์ํ ๊ฐ๋ฐ ๋ฐ๋ณต, ๊ทธ๋ฆฌ๊ณ ๊ถ๊ทน์ ์ผ๋ก ๋ ๋์ ๊ฐ๋ฐ์ ๊ฒฝํ์ผ๋ก ์ด์ด์ง๋๋ค. SWC๋ ๋ค์๊ณผ ๊ฐ์ ์์ ์ ์ฒ๋ฆฌํฉ๋๋ค:
- ํธ๋์คํ์ผ๋ง: ์ต์ JavaScript ๋ฐ TypeScript ์ฝ๋๋ฅผ ๋ค์ํ ๋ธ๋ผ์ฐ์ ์ ํธํ๋๋ ์ด์ ๋ฒ์ ์ผ๋ก ๋ณํํฉ๋๋ค.
- ๋ฒ๋ค๋ง: ์ฌ๋ฌ JavaScript ํ์ผ์ ๋ ์ ๊ณ ์ต์ ํ๋ ๋ฒ๋ค๋ก ๊ฒฐํฉํ์ฌ ๋ก๋ฉ ์๋๋ฅผ ๋์ ๋๋ค.
- ์ถ์(Minification): ๊ณต๋ฐฑ ๋ฐ ์ฃผ์๊ณผ ๊ฐ์ ๋ถํ์ํ ๋ฌธ์๋ฅผ ์ ๊ฑฐํ์ฌ ์ฝ๋ ํฌ๊ธฐ๋ฅผ ์ค์ ๋๋ค.
- ์ฝ๋ ์ต์ ํ: ์ฝ๋ ํจ์จ์ฑ๊ณผ ์ฑ๋ฅ์ ๊ฐ์ ํ๊ธฐ ์ํด ๋ค์ํ ๋ณํ์ ์ ์ฉํฉ๋๋ค.
SWC๋ฅผ ํ์ฉํจ์ผ๋ก์จ Next.js ์ ํ๋ฆฌ์ผ์ด์ ์ ํนํ ํฌ๊ณ ๋ณต์กํ ํ๋ก์ ํธ์์ ์๋นํ ์ฑ๋ฅ ํฅ์์ ์ด๋ฃฐ ์ ์์ต๋๋ค. ์๋ ๊ฐ์ ์ ๊ฐ๋ฐ ์ค ํผ๋๋ฐฑ ๋ฃจํ๋ฅผ ๋จ์ถ์ํค๊ณ , ํ๋ก๋์ ํ๊ฒฝ์์๋ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ๋ ๋น ๋ฅธ ์ด๊ธฐ ํ์ด์ง ๋ก๋๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ผ๋ก ๋ํ๋ฉ๋๋ค.
SWC ๋ณํ ๊ตฌ์ฑ ์ดํดํ๊ธฐ
SWC์ ๊ฐ์ ์ ๊ตฌ์ฑ ๊ฐ๋ฅํ ๋ณํ(transform)์ ์์ต๋๋ค. ์ด ๋ณํ๋ค์ ๋ณธ์ง์ ์ผ๋ก ์ปดํ์ผ ๊ณผ์ ์์ ์ฝ๋๋ฅผ ์์ ํ๋ ํ๋ฌ๊ทธ์ธ์ ๋๋ค. ์ด๋ฌํ ๋ณํ์ ์ฌ์ฉ์ ์ ์ํจ์ผ๋ก์จ ํน์ ํ๋ก์ ํธ ์๊ตฌ์ ๋ง๊ฒ SWC์ ๋์์ ์กฐ์ ํ๊ณ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์์ต๋๋ค. SWC ๊ตฌ์ฑ์ ์ผ๋ฐ์ ์ผ๋ก `next.config.js` ๋๋ `next.config.mjs` ํ์ผ ๋ด์์ ๊ด๋ฆฌ๋ฉ๋๋ค.
SWC ๋ณํ ๊ตฌ์ฑ์ ์ฃผ์ ์ธก๋ฉด์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
1. `swcMinify` ์ต์
`next.config.js`์ `swcMinify` ์ต์ ์ SWC๋ฅผ ์ถ์์ ์ฌ์ฉํ ์ง ์ฌ๋ถ๋ฅผ ์ ์ดํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก `true`๋ก ์ค์ ๋์ด ์์ผ๋ฉฐ, ์ด๋ SWC์ ๋ด์ฅ ์ถ์๊ธฐ(terser)๋ฅผ ํ์ฑํํฉ๋๋ค. ์ฌ์ฉ์ ์ ์ ์ถ์ ์ค์ ์ด ์๊ฑฐ๋ ํธํ์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ ๋นํ์ฑํํด์ผ ํ ์๋ ์์ง๋ง, ์ผ๋ฐ์ ์ผ๋ก ์ต์ ์ ์ฑ๋ฅ์ ์ํด ํ์ฑํ ์ํ๋ฅผ ์ ์งํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
// next.config.js
module.exports = {
swcMinify: true,
};
2. `@swc/core` ์ง์ ์ฌ์ฉํ๊ธฐ (๊ณ ๊ธ)
SWC์ ๋ณํ์ ๋ํด ๋ ์ธ๋ฐํ ์ ์ด๊ฐ ํ์ํ ๊ฒฝ์ฐ `@swc/core` ํจํค์ง๋ฅผ ์ง์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ปดํ์ผ ํ๋ก์ธ์ค์ ๋ค์ํ ์ธก๋ฉด์ ๋ํ ์ฌ์ฉ์ ์ ์ ๊ตฌ์ฑ์ ์ง์ ํ ์ ์์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๋ ๋ณต์กํ์ง๋ง ๊ฐ์ฅ ํฐ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค.
3. ์ฃผ์ SWC ๋ณํ ๋ฐ ์ต์
๋ช ๊ฐ์ง ์ฃผ์ SWC ๋ณํ ๋ฐ ์ต์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ์๋นํ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ๊ฐ์ฅ ์ค์ํ ๋ช ๊ฐ์ง๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
a. `jsc.parser`
`jsc.parser` ์น์ ์ JavaScript ๋ฐ TypeScript ํ์๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์ต์ ์ ์ง์ ํ ์ ์์ต๋๋ค:
- `syntax`: JavaScript ๋๋ TypeScript๋ฅผ ํ์ฑํ ์ง ์ง์ ํฉ๋๋ค (`ecmascript` ๋๋ `typescript`).
- `jsx`: JSX ์ง์์ ํ์ฑํํฉ๋๋ค.
- `decorators`: ๋ฐ์ฝ๋ ์ดํฐ ์ง์์ ํ์ฑํํฉ๋๋ค.
- `dynamicImport`: ๋์ import ๊ตฌ๋ฌธ์ ํ์ฑํํฉ๋๋ค.
// next.config.js
module.exports = {
compiler: {
jsc: {
parser: {
syntax: 'typescript',
jsx: true,
decorators: true,
dynamicImport: true,
},
},
},
};
b. `jsc.transform`
`jsc.transform` ์น์ ์ ํต์ฌ ๋ณํ ๋ก์ง์ ๊ตฌ์ฑํ๋ ๊ณณ์ ๋๋ค. ์ฌ๊ธฐ์ ๋ค์ํ ๋ณํ์ ํ์ฑํํ๊ณ ์ฌ์ฉ์ ์ ์ํ ์ ์์ต๋๋ค.
i. `legacyDecorator`
๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, `legacyDecorator` ์ต์ ์ ์ด์ ๋ฐ์ฝ๋ ์ดํฐ ๊ตฌ๋ฌธ๊ณผ์ ํธํ์ฑ์ ์ํด ๋งค์ฐ ์ค์ํฉ๋๋ค. ํ๋ก์ ํธ์์ ๋ ๊ฑฐ์ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์ด ๊ฐ์ `true`๋ก ์ค์ ํ์ธ์.
ii. `react`
`react` ๋ณํ์ ๋ค์๊ณผ ๊ฐ์ React ๊ด๋ จ ๋ณํ์ ์ฒ๋ฆฌํฉ๋๋ค:
- `runtime`: React ๋ฐํ์์ ์ง์ ํฉ๋๋ค (`classic` ๋๋ `automatic`). `automatic`์ ์๋ก์ด JSX ๋ณํ์ ์ฌ์ฉํฉ๋๋ค.
- `pragma`: JSX ์์์ ์ฌ์ฉํ ํจ์๋ฅผ ์ง์ ํฉ๋๋ค (๊ธฐ๋ณธ๊ฐ: `React.createElement`).
- `pragmaFrag`: JSX ํ๋๊ทธ๋จผํธ์ ์ฌ์ฉํ ํจ์๋ฅผ ์ง์ ํฉ๋๋ค (๊ธฐ๋ณธ๊ฐ: `React.Fragment`).
- `throwIfNamespace`: JSX ์์๊ฐ ๋ค์์คํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ค๋ฅ๋ฅผ ๋ฐ์์ํต๋๋ค.
- `development`: ๊ฐ๋ฐ ๋น๋์์ React ์ปดํฌ๋ํธ์ ํ์ผ ์ด๋ฆ์ ์ถ๊ฐํ๋ ๊ฒ๊ณผ ๊ฐ์ ๊ฐ๋ฐ ๊ด๋ จ ๊ธฐ๋ฅ์ ํ์ฑํํฉ๋๋ค.
- `useBuiltins`: Babel ํฌํผ๋ฅผ ์ง์ ๊ฐ์ ธ์ค๋ ๋์ ๋ด์ฅ ํฌํผ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- `refresh`: Fast Refresh(ํซ ๋ฆฌ๋ก๋ฉ)๋ฅผ ํ์ฑํํฉ๋๋ค.
// next.config.js
module.exports = {
compiler: {
jsc: {
transform: {
react: {
runtime: 'automatic',
development: process.env.NODE_ENV === 'development',
refresh: true,
},
},
},
},
};
iii. `optimizer`
`optimizer` ๋ณํ์ ์์ ์ ํ ๋ฐ ์ฃฝ์ ์ฝ๋ ์ ๊ฑฐ์ ๊ฐ์ด ์ฝ๋ ํจ์จ์ฑ์ ํฅ์์ํฌ ์ ์๋ ์ต์ ํ๋ฅผ ํฌํจํฉ๋๋ค. ์ด๋ฌํ ์ตํฐ๋ง์ด์ ๋ฅผ ํ์ฑํํ๋ฉด ๋ฒ๋ค ํฌ๊ธฐ๊ฐ ์์์ง๊ณ ์คํ ์๊ฐ์ด ๋นจ๋ผ์ง ์ ์์ต๋๋ค.
// next.config.js
module.exports = {
compiler: {
jsc: {
transform: {
optimizer: {
simplify: true,
globals: {
vars: {},
},
},
},
},
},
};
c. `jsc.target`
`jsc.target` ์ต์ ์ ECMAScript ๋์ ๋ฒ์ ์ ์ง์ ํฉ๋๋ค. ์ด๋ SWC๊ฐ ํธ๋์คํ์ผํ JavaScript ๊ตฌ๋ฌธ ์์ค์ ๊ฒฐ์ ํฉ๋๋ค. ์ด ๊ฐ์ ๋ฎ์ ๋ฒ์ ์ผ๋ก ์ค์ ํ๋ฉด ๋ ๋์ ๋ธ๋ผ์ฐ์ ํธํ์ฑ์ ๋ณด์ฅํ์ง๋ง, ์ต์ ์ธ์ด ๊ธฐ๋ฅ ์ฌ์ฉ์ด ์ ํ๋ ์๋ ์์ต๋๋ค.
// next.config.js
module.exports = {
compiler: {
jsc: {
target: 'es5',
},
},
};
์ฐธ๊ณ : `es5`๊ฐ ๊ฐ์ฅ ๋์ ํธํ์ฑ์ ์ ๊ณตํ์ง๋ง, ์ต์ JavaScript์ ์ผ๋ถ ์ฑ๋ฅ ์ด์ ์ ์์ํ ์ ์์ต๋๋ค. ๋์ ๊ณ ๊ฐ์ด ์ต์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ `es2017`์ด๋ `es2020`๊ณผ ๊ฐ์ ๋์์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์.
d. `minify`
`jsc` ์๋์ `minify` ์ต์ ์ ์ฌ์ฉํ์ฌ ์ถ์๋ฅผ ํ์ฑํํ๊ฑฐ๋ ๋นํ์ฑํํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก `swcMinify`๊ฐ ์ด๋ฅผ ์ฒ๋ฆฌํ์ง๋ง, `@swc/core`๋ฅผ ์ง์ ์ฌ์ฉํ๋ ํน์ ์๋๋ฆฌ์ค์์๋ ์ด ์ต์ ์ ์ง์ ๊ตฌ์ฑํด์ผ ํ ์ ์์ต๋๋ค.
// next.config.js
module.exports = {
compiler: {
jsc: {
minify: true,
},
},
};
4. ๊ตฌ์ฑ ์์
๋ค์์ SWC ๋ณํ์ ์ฌ์ฉ์ ์ ์ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ ๋ช ๊ฐ์ง ๊ตฌ์ฑ ์์์ ๋๋ค:
์์ 1: ๋ ๊ฑฐ์ ๋ฐ์ฝ๋ ์ดํฐ ์ง์ ํ์ฑํ
// next.config.js
module.exports = {
compiler: {
jsc: {
parser: {
syntax: 'typescript',
decorators: true,
},
transform: {
legacyDecorator: true,
decoratorMetadata: true,
},
},
},
};
์์ 2: ๊ฐ๋ฐ์ฉ React ๋ณํ ๊ตฌ์ฑ
// next.config.js
module.exports = {
compiler: {
jsc: {
transform: {
react: {
runtime: 'automatic',
development: process.env.NODE_ENV === 'development',
refresh: true,
},
},
},
},
};
์์ 3: ํน์ ECMAScript ๋์ ์ค์
// next.config.js
module.exports = {
compiler: {
jsc: {
target: 'es2020',
},
},
};
SWC ๊ตฌ์ฑ ๋ฌธ์ ํด๊ฒฐ
SWC ๋ณํ ๊ตฌ์ฑ์ ๋๋๋ก ์ด๋ ค์ธ ์ ์์ต๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ๋ฌธ์ ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋๋ค:
- ์์์น ๋ชปํ ์ค๋ฅ: SWC ๊ตฌ์ฑ์ ์์ ํ ํ ์์์น ๋ชปํ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ๊ตฌ๋ฌธ์ ๋ค์ ํ์ธํ๊ณ ์ ํจํ ์ต์ ์ ์ฌ์ฉํ๊ณ ์๋์ง ํ์ธํ์ธ์. ์ฌ์ฉ ๊ฐ๋ฅํ ์ต์ ์ ์ ์ฒด ๋ชฉ๋ก์ ๊ณต์ SWC ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
- ํธํ์ฑ ๋ฌธ์ : ์ผ๋ถ ๋ณํ์ ํน์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ๋ ์์ํฌ์ ํธํ๋์ง ์์ ์ ์์ต๋๋ค. ํธํ์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ๋ฌธ์ ๊ฐ ๋๋ ๋ณํ์ ๋นํ์ฑํํ๊ฑฐ๋ ๋์ฒด ์๋ฃจ์ ์ ์ฐพ์๋ณด์ธ์.
- ์ฑ๋ฅ ์ ํ: SWC๋ ์ผ๋ฐ์ ์ผ๋ก Babel๋ณด๋ค ๋น ๋ฅด์ง๋ง, ์๋ชป ๊ตฌ์ฑ๋ ๋ณํ์ ๋๋๋ก ์ฑ๋ฅ ์ ํ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค. SWC ๊ตฌ์ฑ์ ์์ ํ ํ ์๋ ์ ํ๊ฐ ๊ฐ์ง๋๋ฉด ๋ณ๊ฒฝ ์ฌํญ์ ๋๋๋ฆฌ๊ฑฐ๋ ๋ค๋ฅธ ์ต์ ์ ์คํํด ๋ณด์ธ์.
- ์บ์ ๋ฌดํจํ: ๋๋๋ก Next.js๋ SWC๊ฐ ์ด์ ๊ตฌ์ฑ์ ์บ์ํ ์ ์์ต๋๋ค. `next.config.js` ํ์ผ์ ๋ณ๊ฒฝํ ํ Next.js ์บ์(`.next` ํด๋)๋ฅผ ์ง์ฐ๊ฑฐ๋ ๊ฐ๋ฐ ์๋ฒ๋ฅผ ๋ค์ ์์ํด ๋ณด์ธ์.
Next.js์์ SWC ์ต์ ํ๋ฅผ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
Next.js ์ ํ๋ฆฌ์ผ์ด์ ์์ SWC์ ์ด์ ์ ๊ทน๋ํํ๋ ค๋ฉด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด์ธ์:
- SWC ์ต์ ์ํ ์ ์ง: ์ต์ ์ฑ๋ฅ ๊ฐ์ ๋ฐ ๋ฒ๊ทธ ์์ ์ ํ์ฉํ๋ ค๋ฉด Next.js ๋ฐ `@swc/core` ํจํค์ง๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ์ ๋ฐ์ดํธํ์ธ์.
- ์ ํ๋ฆฌ์ผ์ด์ ํ๋กํ์ผ๋ง: ํ๋กํ์ผ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ์ด๋ค ๋ณํ์ด ๊ฐ์ฅ ํฐ ์ํฅ์ ๋ฏธ์น๋์ง ํ์ธํ์ธ์.
- ๋ค์ํ ๊ตฌ์ฑ ์คํ: ํ๋ก์ ํธ์ ์ต์ ํ๋ ์ค์ ์ ์ฐพ๊ธฐ ์ํด ๋ค์ํ SWC ๊ตฌ์ฑ์ ์คํํ๋ ๊ฒ์ ๋๋ ค์ํ์ง ๋ง์ธ์.
- ๋ฌธ์ ์ฐธ์กฐ: ์ฌ์ฉ ๊ฐ๋ฅํ ๋ณํ ๋ฐ ์ต์ ์ ๋ํ ์์ธํ ์ ๋ณด๋ ๊ณต์ SWC ๋ฐ Next.js ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
- ํ๊ฒฝ ๋ณ์ ์ฌ์ฉ: ํ๊ฒฝ ๋ณ์(`NODE_ENV` ๋ฑ)๋ฅผ ์ฌ์ฉํ์ฌ ํ๊ฒฝ(๊ฐ๋ฐ, ํ๋ก๋์ ๋ฑ)์ ๋ฐ๋ผ ํน์ ๋ณํ์ ์กฐ๊ฑด๋ถ๋ก ํ์ฑํํ๊ฑฐ๋ ๋นํ์ฑํํ์ธ์.
SWC ๋ Babel: ๊ฐ๋จ ๋น๊ต
์ด์ ๋ฒ์ ์ Next.js์์๋ Babel์ด ๊ธฐ๋ณธ ์ปดํ์ผ๋ฌ์์ง๋ง, SWC๋ ํนํ ์๋ ๋ฉด์์ ์๋นํ ์ด์ ์ ์ ๊ณตํฉ๋๋ค. ๊ฐ๋จํ ๋น๊ต๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
๊ธฐ๋ฅ | SWC | Babel |
---|---|---|
์๋ | ํจ์ฌ ๋น ๋ฆ | ๋๋ฆผ |
์์ฑ ์ธ์ด | Rust | JavaScript |
Next.js ๊ธฐ๋ณธ๊ฐ | ์ (Next.js 12๋ถํฐ) | ์๋์ค |
๊ตฌ์ฑ ๋ณต์ก์ฑ | ๊ณ ๊ธ ๊ตฌ์ฑ ์ ๋ณต์กํ ์ ์์ | ๋น์ทํ ๋ณต์ก์ฑ |
์ํ๊ณ | ์ฑ์ฅ ์ค์ด๋ Babel๋ณด๋ค ์์ | ์ฑ์ํ๊ณ ๋ฐฉ๋ํจ |
SWC์ Next.js์ ๋ฏธ๋
SWC๋ ์๋ก์ด ๊ธฐ๋ฅ๊ณผ ์ต์ ํ๊ฐ ์ ๊ธฐ์ ์ผ๋ก ์ถ๊ฐ๋๋ฉด์ ์ง์์ ์ผ๋ก ๋ฐ์ ํ๊ณ ์์ต๋๋ค. Next.js๊ฐ ๊ณ์ํด์ SWC๋ฅผ ์ฑํํจ์ ๋ฐ๋ผ, ์ฐ๋ฆฌ๋ ํจ์ฌ ๋ ํฐ ์ฑ๋ฅ ํฅ์๊ณผ ๋ ์ ๊ตํ ๋๊ตฌ๋ฅผ ๊ธฐ๋ํ ์ ์์ต๋๋ค. Vercel์ ์ ์ง์ ๋ฒ๋ค๋ฌ์ธ Turbopack๊ณผ์ SWC ํตํฉ์ ๋น๋ ์๊ฐ์ ๋์ฑ ๋จ์ถํ๊ณ ๊ฐ๋ฐ์ ๊ฒฝํ์ ๊ฐ์ ํ๋ ๋ ๋ค๋ฅธ ์ ๋งํ ๋ฐ์ ์ ๋๋ค.
๋ํ, SWC ๋ฐ Turbopack๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ๋๋ฌ์ผ Rust ๊ธฐ๋ฐ ์ํ๊ณ๋ ํฅ์๋ ๋ณด์ ๋ฐ ์์ ์ฑ์ ์ํ ๊ธฐํ๋ฅผ ์ ๊ณตํฉ๋๋ค. Rust์ ๋ฉ๋ชจ๋ฆฌ ์์ ๊ธฐ๋ฅ์ JavaScript ๊ธฐ๋ฐ ๋๊ตฌ์์ ํํ ๋ฐ์ํ๋ ํน์ ์ข ๋ฅ์ ์ทจ์ฝ์ ์ ์๋ฐฉํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
SWC ๋ณํ ๊ตฌ์ฑ์ ๋ง์คํฐํ๋ ๊ฒ์ ์ฑ๋ฅ๊ณผ ๊ธ๋ก๋ฒ ํ์ฅ์ฑ์ ์ํด Next.js ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ํํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ ๋ค์ํ ๋ณํ๊ณผ ์ต์ ์ ์ดํดํจ์ผ๋ก์จ ํน์ ํ๋ก์ ํธ ์๊ตฌ์ ๋ง๊ฒ SWC์ ๋์์ ๋ฏธ์ธ ์กฐ์ ํ ์ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋กํ์ผ๋งํ๊ณ , ๋ค์ํ ๊ตฌ์ฑ์ ์คํํ๋ฉฐ, ์ต์ SWC ๋ฐ Next.js ๋ฆด๋ฆฌ์ค์ ๋ํ ์ ๋ณด๋ฅผ ์ต์ ์ํ๋ก ์ ์งํ๋ ๊ฒ์ ์์ง ๋ง์ธ์. SWC์ ๊ทธ ๊ฐ๋ ฅํ ์ต์ ํ ๊ธฐ๋ฅ์ ์์ฉํ๋ฉด ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํด ๋ ๋น ๋ฅด๊ณ , ๋ ํจ์จ์ ์ด๋ฉฐ, ๋ ์์ ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค.
์ด ๊ฐ์ด๋๋ SWC๋ฅผ ์ดํดํ๊ณ ํ์ฉํ๊ธฐ ์ํ ๊ฒฌ๊ณ ํ ๊ธฐ๋ฐ์ ์ ๊ณตํฉ๋๋ค. SWC ๊ตฌ์ฑ์ ๋ ๊น์ด ํ๊ณ ๋ค๋ฉด์, ์ถ๊ฐ์ ์ธ ์ง์นจ๊ณผ ์ง์์ ์ํด ๊ณต์ ๋ฌธ์์ ์ปค๋ฎค๋ํฐ ๋ฆฌ์์ค๋ฅผ ์ฐธ์กฐํ๋ ๊ฒ์ ์์ง ๋ง์ธ์. ์น ์ฑ๋ฅ์ ์ธ๊ณ๋ ๋์์์ด ์งํํ๊ณ ์์ผ๋ฉฐ, ์ง์์ ์ธ ํ์ต์ด ์์ ๋๊ฐ๋ ํต์ฌ์ ๋๋ค.