SWC๋ฅผ ํ์ฉํ์ฌ ๋น๋ ์๊ฐ ๋จ์ถํ๊ธฐ
์ฌ๋ด์์๋ CI/CD ๋๊ตฌ๋ก ๊นํ ์ก์ ์ ์ฌ์ฉํ๊ณ ์๋ค.
๋ฐฑ์๋์ ๋ค๋ฅด๊ฒ ํ๋ก ํธ๋ ์ก์ ์ด ์๋ฃ๋๋๋ฐ ๊น์ง ์ ์ฒด์ ์ธ ์๊ฐ์ด ์ข ๋ ์์๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
ํ์ฌ ๋ด๊ฐ ๊ฐ๋ฐํ๊ณ ์๋ ํ๋ก ํธ ํ๊ฒฝ์์ CI/CD ๊ณผ์ ์ค ๊ฐ์ฅ ์์ ์๊ฐ์ด ๊ธด ์คํญ์ ๋น๋ ํ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ด ECR๋ก ์ฎ๊ธฐ๋ ์์ ์ด๋ค.
๊ทธ ์ค CI ๊ณผ์ ์ค์์ ํ๋ก ํธ ํ๋ก์ ํธ ๋น๋ ์๊ฐ๊ณผ ECR PUSH ํ์์ด ๋๋ถ๋ถ์ ์ฐจ์งํจ์ ํ์ธ ํ ์ ์๋ค.
โ๊ทธ๋ ๋ค๋ฉด,ํ๋ก ํธ ํ๋ก์ ํธ ๋น๋ ์๊ฐ์ ์ด๋ป๊ฒ ์ค์ผ ์ ์์๊น?
Next.js ๋น๋ ์๊ฐ์ ๋จ์ถ ํ๋ ๋ฐฉ๋ฒ
- SWC ์ฝ๋ ์์ถ ํ์ฑํ: swcMinify: true๋ฅผ ์ค์ ํด ๋น๋ ์ SWC๋ฅผ ํตํด ์ฝ๋๋ฅผ ์์ถํ์ฌ ์ต์ ํ.
- Webpack ์บ์ฑ ์ฌ์ฉ: Webpack ํ์ผ ์์คํ ์บ์๋ฅผ ํ์ฑํํด ์ฌ๋น๋ ์๋๋ฅผ ๋์.
- Dynamic Imports: ๋์ ์ํฌํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ด๊ธฐ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ํ์ํ ๋ชจ๋๋ง ๋ก๋.
- ์ ์ ํ์ด์ง ๋ฐ ISR ์ฌ์ฉ: ์ ์ ํ์ด์ง ์์ฑ์ ํ์ฉํ๊ณ Incremental Static Regeneration(ISR)์ผ๋ก ๋น๋ ์๊ฐ ๋จ์ถ.
- ์ด๋ฏธ์ง ์ต์ ํ: next/image ์ค์ ์ ์ต์ ํํ์ฌ ๋ถํ์ํ ๋ฆฌ์์ค ํฌ๊ธฐ ์ค์ด๊ธฐ.
์ด ๋ฐฉ๋ฒ๋ค ์ค์์ ์ด๋ฏธ์ง ์ต์ ํ์ ๊ฒฝ์ฐ sparrow-components์์ ์ฌ์ฉํ๋ ์ด๋ฏธ์ง ์ธ์ next์์ ์ ๊ณตํ๋ Image๋ฅผ ์ด๋ฏธ ์ฌ์ฉํ๊ณ ์์ง๋ง ์ถํ์ ๋ ๋ณด๊ฒ ๋ค.
Architecture: Next.js Compiler
๋ค์ํ ๋น๋ ์๊ฐ ๋จ์ถ ๋ฐฉ๋ฒ ์ค์์๋ ๋๋ Next.js ๊ณต์ ํํ์ด์ง์ ์๊ฐ ๋ SWC์ ๋ํด ๊ด์ฌ์ ๊ฐ์ง๊ฒ ๋์๋ค.
SWC๋?
SWC๋ Speedy Web Compiler์ ์ฝ์๋ก ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก์ ํธ์ ์ปดํ์ผ๊ณผ ๋ฒ๋ค๋ง ๋ชจ๋์ ์ฌ์ฉ๋ ์ ์๋, Rust๋ก ์ ์ ๋ ๋น๋ ํด์ด๋ค. ์ด๋ฆ์์ ์ ์ ์๋ฏ์ด ๋งค์ฐ ๋น ๋ฅธ ์น ์ปดํ์ผ๋ฌ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
SWC๋ ์ ๋น ๋ฅผ๊น?
Next.js์์๋ SWC๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐํ ์ปดํ์ผ๋ฌ๋ฅผ ํตํด ๊ธฐ์กด ๋น๋์ ํ์ฉํ๋ ๋ฐ๋ฒจ๊ณผ Terser๋ฅผ ๋์ฒดํ๋ค. ์ฆ, Next.js์ ๋น๋ ๊ณผ์ ์ค ํธ๋์คํ์ผ๋ง์ ์ํํ๋ ๋ฐ๋ฒจ๊ณผ, ์ฝ๋ ๊ฒฝ๋ํ๋ฅผ ์ํํ๋ Terser๊ฐ SWC๋ก ๋์ฒด๋๋ค๋ ๋ป์ด๋ค. SWC๋ก ๊ต์ฒดํจ์ผ๋ก์จ ํธ๋์คํ์ผ๋ง์ ๋ฌด๋ ค 17๋ฐฐ๋ ๋นจ๋ผ์ก๋ค๊ณ ํ๋ฉฐ, ์ฝ๋ ๊ฒฝ๋ํ ์์ ์ 7๋ฐฐ๊ฐ ๋นจ๋ผ์ก๋ค๊ณ ํ๋ค.
ํด๋ผ์ฐ๋ ํ๋ก ํธ์ ๊ฒฝ์ฐ Next.js 13 ๋ฒ์ ์ ๊ธฐ๋ฐ ๋ ํ๋ก์ ํธ์ด๋ค. SWC๋ Next.js 12 ๋ฒ์ ๋ถํฐ ๊ธฐ๋ณธ ์ปดํ์ผ๋ฌ๋ก ๋์ ๋์๋ค. ๋ฐ๋ผ์, ์ค์ ์์ด ๊ธฐ๋ณธ์ ์ผ๋ก SWC๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ํธ๋์คํ์ผ๋ง ํ๋ค. ๊ทธ๋ฌ๋ ์ฝ๋ ์์ถ(minification)์ ์ต์ ์ ๋ณ๋๋ก swcMinify: true๋ก ํ์ฑํํด์ฃผ์ด์ผ ํ๋ค. ๋ค๋ฅธ SWC ์ง์ feature๋ค ์ค์์๋ ์ฝ๋ ์์ถ์ ๊ฒฝ์ฐ next.config.js์ ๊ฐ๋จํ ์ ์ฉํด ๋ณผ ์ ์๋ค๊ณ ํ๋จํ๋ค.
SWC ์ฝ๋ ์์ถ ํ์ฑํ์ ์ด์
- ํ์ผ ํฌ๊ธฐ ๊ฐ์
- ์ฝ๋ ์์ถ(minification)์ ๋ถํ์ํ ๊ณต๋ฐฑ, ์ค๋ฐ๊ฟ, ์ฃผ์, ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋ ๋ฑ์ ์ ๊ฑฐํ์ฌ ๋ฒ๋ค ํ์ผ์ ํฌ๊ธฐ๋ฅผ ์ค์ธ๋ค.
- ๋ณ์๋ฅผ ๋ ์งง์ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ๊ณ , ์ฝ๋์ ๋ณต์ก๋๋ฅผ ์ค์ด๋ ๋ฐฉ์์ผ๋ก ํฌ๊ธฐ๋ฅผ ์ค์ธ๋ค.์ด๋ ๊ฒ ์์ถ๋ ํ์ผ์ ๋ธ๋ผ์ฐ์ ์์ ๋ ๋นจ๋ฆฌ ๋ค์ด๋ก๋ ๋ ์ ์๋ค.
- // Before Minification function add(a, b) { return a + b; } // After Minification function a(b,c){return b+c}
- ํ์ด์ง ๋ก๋ฉ ์๋ ํฅ์
- ํ์ผ ํฌ๊ธฐ ๊ฐ์๋ก ์ธํด ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฒ๋ค ํ์ผ์ ๋ค์ด๋ก๋ํ๋ ์๊ฐ์ด ์ค์ด๋ ๋ค. ์ด๋ ํนํ ๋คํธ์ํฌ ์๋๊ฐ ๋๋ฆฐ ํ๊ฒฝ์์ ์ ๋ฆฌํ๋ฉฐ, ํ์ด์ง ๋ก๋ฉ ์๊ฐ์ ๋จ์ถํ ์ ์๋ค.
- ๋ ๋น ๋ฅธ ๋ธ๋ผ์ฐ์ ํ์ฑ
- ์์ถ๋ ์ฝ๋๋ ๋ ์ ์ ์์ ๋ฐ์ดํฐ๋ก ์ด๋ฃจ์ด์ ธ ์๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฑํ๊ณ ์คํํ๋ ์๊ฐ์ด ์ค์ด๋ ๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ํ์ด์ง๊ฐ ๋ ๋นจ๋ฆฌ ๋ ๋๋ง๋๊ณ ์ฌ์ฉ์์๊ฒ ๋น ๋ฅธ ์๋ต์ฑ์ ์ ๊ณตํ ์ ์๋ค.
- SEO์ ์ฌ์ฉ์ ๊ฒฝํ ๊ฐ์
- ๋น ๋ฅธ ๋ก๋ฉ ์๋๋ SEO(๊ฒ์ ์์ง ์ต์ ํ)์ ๊ธ์ ์ ์ธ ์ํฅ์ ์ค๋ค. ๊ตฌ๊ธ ๊ฐ์ ๊ฒ์ ์์ง์ ํ์ด์ง ๋ก๋ฉ ์๋๋ฅผ ์ค์ํ ์์๋ก ํ๊ฐํ๊ธฐ ๋๋ฌธ์, ์ต์ ํ๋ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฒ์ ์์๊ฐ ๊ฐ์ ๋ ์ ์๋ค.
- ์ฌ์ฉ์ ์ ์ฅ์์๋ ์น์ฌ์ดํธ๊ฐ ๋ ๋นจ๋ฆฌ ๋ก๋๋๋ฏ๋ก, ์ฌ์ฉ์ ๊ฒฝํ(UX)๋ ๊ฐ์ ๋ ์ ์๋ค. ํ์ด์ง ๋ก๋ฉ ์๊ฐ์ด ๊ธธ์ด์ง๋ฉด ์ดํ๋ฅ ์ด ๋์์ง ์ ์์ง๋ง, ๋น ๋ฅธ ๋ก๋ฉ์ ์ฌ์ฉ์ ์ ์ง์ ๋์์ด ๋ ์ ์๋ค.
- ํ๋ก๋์
๋น๋ ์ฑ๋ฅ ์ต์ ํ
- swcMinify: true๋ฅผ ์ฌ์ฉํ๋ฉด Next.js๊ฐ SWC๋ฅผ ํตํด ํ๋ก๋์ ๋น๋์์ ์ฝ๋๋ฅผ ์์ถํ๊ณ ์ต์ ํํ์ฌ ๊ฒฐ๊ณผ๋ฌผ์ ์ฑ๋ฅ์ ๊ทน๋ํํ ์ ์๋ค.
- SWC๋ ๊ธฐ์กด์ Babel๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๊ฒ ๋์ํ๋ฏ๋ก ๋น๋ ์๊ฐ๋ ์ต์ํํ๋ฉด์ ์ฝ๋ ์ต์ ํ๋ฅผ ์ํํ ์ ์๋ค.
- ๋ฎ์ ๋์ญํญ๊ณผ ๋น์ฉ ์ ๊ฐ
- ํ์ผ ํฌ๊ธฐ๊ฐ ์ค์ด๋ค๋ฉด ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ์ ์ก๋๋ ๋ฐ์ดํฐ ์๋ ์ค์ด๋ ๋ค. ์ด๋ฅผ ํตํด ๋คํธ์ํฌ ๋์ญํญ์ ์ ์ฝํ ์ ์์ผ๋ฉฐ, ํนํ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ํธ๋ํฝ์ด ๋ง์ ์๋น์ค์์๋ ์๋ฒ ๋น์ฉ ์ ๊ฐ์๋ ๊ธฐ์ฌํ ์ ์๋ค.
SWC ์ฝ๋ ์์ถ ์ค์ ๋ฐฉ๋ฒ
//next.config.js
module.exports = {
swcMinify: true,
}
๊ฒฐ๊ณผ
๋น๋ ์๊ฐ ์ธก์ ๋ฐฉ๋ฒ - ๋ก์ปฌ์์ ํ ์คํธ
# ๋น๋ ์๊ฐ ์ธก์ ๋ช
๋ น์ด
time yarn run build
SWC ์ฝ๋ ์์ถ ์ต์ ์ ํตํด ๋น๋ ์ ๋น๋ ์๊ฐ์ด 20์ด ๊ฐ๋ ๋จ์ถ ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ์ฝ๋ ์์ถ์ผ๋ก ์ธํด ๋ฒ๋ค ํฌ๊ธฐ๊ฐ ์ค์ด ๋ ๋น ๋ฅด๊ฒ ๋น๋๊ฐ ๋จ์ ํ์ธ ํ ์ ์๋ค.
Reference
https://fe-developers.kakaoent.com/2022/220217-learn-babel-terser-swc/
https://nextjs.org/docs/architecture/nextjs-compiler#minification
https://nextjs-ko.org/docs/architecture/nextjs-compiler
https://han-py.tistory.com/506
๋๊ธ