์ปดํ์ผ (Compile)
์ปดํ์ผ์ ์์ค ์ฝ๋๋ฅผ ์ฌ๋์ด ์์ฑํ ๊ณ ๊ธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด(์: C, Java, Python ๋ฑ)์์ ์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๋ ์ ๊ธ ์ธ์ด(๊ธฐ๊ณ์ด ๋๋ ๋ฐ์ดํธ์ฝ๋)๋ก ๋ณํํ๋ ๊ณผ์ ์ ๋ปํฉ๋๋ค. ์ด ์์
์ ์ปดํ์ผ๋ฌ(Compiler)๋ผ๋ ๋๊ตฌ๊ฐ ์ํํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, C ์ธ์ด๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ์ปดํ์ผํ๋ฉด ์คํ ๊ฐ๋ฅํ ํ์ผ(์: .exe)์ด ๋ง๋ค์ด์ง๋๋ค.
- ๋ฌธ๋ฒ ์ค๋ฅ๋ ํ์ ์ค๋ฅ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ผ๋ฉด ์ปดํ์ผ๋ฌ๊ฐ ์ด๋ฅผ ์ก์๋ด๊ณ ์๋ฌ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
๋น๋ (Build)
๋น๋๋ ์ปดํ์ผ์ ํฌํจํ ๋ ํฐ ํ๋ก์ธ์ค๋ฅผ ์๋ฏธํฉ๋๋ค. ์ํํธ์จ์ด๋ฅผ ์คํํ๊ฑฐ๋ ๋ฐฐํฌํ ์ ์๋ ์ํ๋ก ๋ง๋๋ ์ ์ฒด ์์
์ ๋น๋๋ผ๊ณ ๋ถ๋ฆ
๋๋ค. ๋น๋ ๊ณผ์ ์๋ ๋ณดํต ์ด๋ฐ ๋จ๊ณ๋ค์ด ํฌํจ๋๋ฉฐ ๋จ์ํ ์ฝ๋๋ฅผ ๋ฒ์ญํ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ, ํ๋ก์ ํธ ์ ์ฒด๋ฅผ ์ค๋นํ๋ ๊ณผ์ ์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
- 1.์ปดํ์ผ : ์์ค ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณํ.
- 2.๋งํน(Linking) : ์ฌ๋ฌ ์์ค ํ์ผ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ๋๋ก ์ฐ๊ฒฐ.
- 3.ํ ์คํธ : ์๋ํ๋ ํ ์คํธ ์คํ (๊ฒฝ์ฐ์ ๋ฐ๋ผ).
- 4.ํจํค์ง : ์คํ ํ์ผ์ด๋ ๋ฐฐํฌ ๊ฐ๋ฅํ ํ์ผ(์: .jar, .apk) ์์ฑ.
์์ฝํด๋ณด์๋ฉด
- ์ปดํ์ผ: ์ฝ๋ ๋ฒ์ญ ๊ณผ์ (๋ถ๋ถ).
- ๋น๋: ์ปดํ์ผ + ์ถ๊ฐ ์์ ๊น์ง ํฌํจํ ์ ์ฒด ์ค๋น ๊ณผ์ .
๋ฆฌ์กํธ ๋น๋(Build)๋๊ตฌ
๋ฆฌ์กํธ(React)์์ ์ฃผ๋ก ์ฌ์ฉ๋๋ ๋น๋ ๋๊ตฌ๋ค์ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ ์ฝ๋ ๋ฒ๋ค๋ง, ํธ๋์คํ์ผ๋ง, ์ต์ ํ ๋ฑ์ ๋ด๋นํ๋ฉฐ, ๊ฐ๋ฐ ๊ฒฝํ๊ณผ ๋ฐฐํฌ ํจ์จ์ฑ์ ๋์ฌ์ค๋๋ค. ์๋์ ๋ฆฌ์กํธ ํ๋ก์ ํธ์์ ๋ง์ด ์ฌ์ฉ๋๋ ๋ํ์ ์ธ ๋น๋ ๋๊ตฌ๋ค์ ์ค๋ช
ํ๊ฒ ์ต๋๋ค.
์นํฉ(Webpack)
์นํฉ์ ํ๋ก์ ํธ์ ๊ตฌ์กฐ๋ฅผ ๋ถ์ํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋์ ๋น๋กฏํ ๊ด๋ จ ๋ฆฌ์์ค(์: CSS, ์ด๋ฏธ์ง, ํฐํธ ๋ฑ)๋ฅผ ์ฐพ์๋ด๊ณ , ์ด๋ฅผ ๋ธ๋ผ์ฐ์ ์์ ์คํํ ์ ์๋ ํ๋์ ๋ฒ๋ค(Bundle)๋ก ๋ฌถ๊ณ ํจํนํ๋ ๋ชจ๋ ๋ฒ๋ค๋ฌ(Module Bundler)์
๋๋ค.
๋ชจ๋ ๋ฒ๋ค๋ฌ๋, ๊ฐ๋ฐ ๊ณผ์ ์์ ์ฌ๋ฌ ๊ฐ๋ก ๋๋์ด ์๋ ํ์ผ๋ค(๋ชจ๋๋ค)์ ํ๋๋ก ํตํฉํด ์ฃผ๋ ๋๊ตฌ์ด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ์ด๋ฅผ ํตํด ์ฝ๋์ ์์กด์ฑ์ ๊ด๋ฆฌํ๊ณ ํจ์จ์ ์ผ๋ก ๋ฐฐํฌํ ์ ์๊ฒ ๋์์ค๋๋ค.
์๋ฅผ ๋ค์ด, ์นํ์ด์ง๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด ์๋ฐ์คํฌ๋ฆฝํธ, ์คํ์ผ์ํธ, ์ด๋ฏธ์ง ๋ฑ ์๋ง์ ํ์ผ์ด ํ์ํ ๋, ๋ธ๋ผ์ฐ์ ๊ฐ ์ด ํ์ผ๋ค์ ์๋ฒ์ ๊ฐ๋ณ์ ์ผ๋ก ์์ฒญํ๋ฉด ๋ก๋ฉ ์๊ฐ์ด ๊ธธ์ด์ง๊ณ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค. ์นํฉ์ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ํ๋์ ํ์ผ(๋๋ ํ์์ ๋ฐ๋ผ ๋ช ๊ฐ์ ํ์ผ)๋ก ์์ถํ๊ณ ์ต์ ํํฉ๋๋ค. ์ด๋ ๊ฒ ๋ฒ๋ค๋ง๋ ๊ฒฐ๊ณผ๋ฌผ์ ์์ฒญ ํ์๋ฅผ ์ค์ด๊ณ , ์ฝ๋ ํฌ๊ธฐ๋ฅผ ์ต์ํํ๋ฉฐ, ๋ธ๋ผ์ฐ์ ์์ ๋ ๋น ๋ฅด๊ฒ ์คํ๋ ์ ์๋๋ก ๋ง๋ญ๋๋ค.
์๋ฅผ ๋ค์ด, ์นํ์ด์ง๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด ์๋ฐ์คํฌ๋ฆฝํธ, ์คํ์ผ์ํธ, ์ด๋ฏธ์ง ๋ฑ ์๋ง์ ํ์ผ์ด ํ์ํ ๋, ๋ธ๋ผ์ฐ์ ๊ฐ ์ด ํ์ผ๋ค์ ์๋ฒ์ ๊ฐ๋ณ์ ์ผ๋ก ์์ฒญํ๋ฉด ๋ก๋ฉ ์๊ฐ์ด ๊ธธ์ด์ง๊ณ ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค. ์นํฉ์ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ชจ๋ ๋ฆฌ์์ค๋ฅผ ํ๋์ ํ์ผ(๋๋ ํ์์ ๋ฐ๋ผ ๋ช ๊ฐ์ ํ์ผ)๋ก ์์ถํ๊ณ ์ต์ ํํฉ๋๋ค. ์ด๋ ๊ฒ ๋ฒ๋ค๋ง๋ ๊ฒฐ๊ณผ๋ฌผ์ ์์ฒญ ํ์๋ฅผ ์ค์ด๊ณ , ์ฝ๋ ํฌ๊ธฐ๋ฅผ ์ต์ํํ๋ฉฐ, ๋ธ๋ผ์ฐ์ ์์ ๋ ๋น ๋ฅด๊ฒ ์คํ๋ ์ ์๋๋ก ๋ง๋ญ๋๋ค.
- ์์กด์ฑ ๊ด๋ฆฌ : ์นํฉ์ ํ๋ก์ ํธ ๋ด ๋ชจ๋ ๊ฐ์ ์์กด์ฑ์ ํ์ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, import๋ require๋ก ์ฐ๊ฒฐ๋ ํ์ผ๋ค์ ์ถ์ ํด ํ์ํ ์ฝ๋๋ง ํฌํจ์ํค๊ณ , ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ ์ ์ธ(ํธ๋ฆฌ ์์ดํน)ํ ์ ์์ต๋๋ค.
- ๋ก๋(Loader) : ์๋ฐ์คํฌ๋ฆฝํธ ์ธ์๋ CSS(css-loader), ์ด๋ฏธ์ง(file-loader), TypeScript(ts-loader) ๋ฑ ๋ค์ํ ํ์ผ ํ์์ ์ฒ๋ฆฌํ ์ ์๊ฒ ํด์ฃผ๋ ํ์ฅ ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
- ํ๋ฌ๊ทธ์ธ(Plugins) : ๋ฒ๋ค๋ง ๊ณผ์ ์์ ์ถ๊ฐ ์์ ์ ์ํํ ์ ์๋๋ก ์ง์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, HtmlWebpackPlugin์ HTML ํ์ผ์ ์๋ ์์ฑํ๊ณ , UglifyJsPlugin์ ์ฝ๋๋ฅผ ์์ถํฉ๋๋ค.
- ๊ฐ๋ฐ ํธ์์ฑ : webpack-dev-server๋ฅผ ํตํด ์ค์๊ฐ์ผ๋ก ์ฝ๋ ๋ณ๊ฒฝ์ ๋ฐ์ํ๋ ํซ ๋ฆฌ๋ก๋ฉ(Hot Reloading)์ ์ ๊ณตํด ๊ฐ๋ฐ ์๋๋ฅผ ๋์ฌ์ค๋๋ค.
- ์ต์ ํ : ํ๋ก๋์ ํ๊ฒฝ์์๋ ์ฝ๋ ๋ถํ (Code Splitting)์ ํตํด ํ์ํ ๋ถ๋ถ๋ง ๋ก๋ํ๊ฑฐ๋, ์บ์ฑ์ ํ์ฉํด ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
๋ฆฌ์กํธ ํ๋ก์ ํธ์์ ์นํฉ์ JSX๋ฅผ ์ผ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ณํ(Babel๊ณผ ํจ๊ป ์ฌ์ฉ)ํ๊ณ , ์ปดํฌ๋ํธ์ ์คํ์ผ, ๊ธฐํ ์์์ ํ๋๋ก ๋ฌถ์ด ๋ฐฐํฌ ๊ฐ๋ฅํ ํํ๋ก ๋ง๋๋ ๋ฐ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค. ํนํ Create React App์ ์นํฉ์ ๊ธฐ๋ฐ์ผ๋ก ์ค์ ์ด ๋ฏธ๋ฆฌ ๋์ด ์์ด, ๊ฐ๋ฐ์๊ฐ ์ง์ ์ค์ ํ์ง ์์๋ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, ์นํฉ์ ๋จ์ํ ํ์ผ์ ๋ฌถ๋ ๊ฒ์ ๋์ด, ํ๋ ์น ๊ฐ๋ฐ์์ ํ์์ ์ธ ์ฝ๋ ์ต์ ํ์ ์ฑ๋ฅ ๊ฐ์ ์ ๋ด๋นํ๋ ๊ฐ๋ ฅํ ๋๊ตฌ์
๋๋ค. ๋ค๋ง, ์ค์ ์ด ๋ณต์กํ ์ ์๋ค๋ ๋จ์ ๋๋ฌธ์ ์ต๊ทผ์๋ Vite๋ Parcel ๊ฐ์ ๋์๋ ์ฃผ๋ชฉ๋ฐ๊ณ ์์ฃ .
๋ฐ๋ฒจ(Babel)
๋ฐ๋ฒจ์ ๋ชจ๋ ์คํ ํ๊ฒฝ์์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ ์์ ์ผ๋ก ๋์ํ ์ ์๋๋ก ํด์ฃผ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ปดํ์ผ๋ฌ(Transpiler)์
๋๋ค.
- ์ฃผ๋ก ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ(์: ES6/ES2015 ์ด์)์ ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์๋ ์คํ ๊ฐ๋ฅํ ES5 ์ฝ๋๋ก ๋ณํํด ์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
- ๋ฆฌ์กํธ์ JSX๋ TypeScript(TS)์ ๊ฐ์ ํน์ ๋ฌธ๋ฒ์ ์ผ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ณํํ๋ฉฐ,
- ํน์ ๋ธ๋ผ์ฐ์ ์์ ์ง์๋์ง ์๋ ์ต์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๊ฒ๋ ์ฝ๋๋ฅผ ์ฌ๊ตฌ์ฑํด ์ค๋๋ค.
ํธ๋์คํ์ผ๋ง(Transpiling)์ ์๋ฏธ
๋ฐ๋ฒจ์ ์๋ฐํ ๋งํด "์ปดํ์ผ๋ฌ"๋ผ๊ธฐ๋ณด๋ค๋ "ํธ๋์คํ์ผ๋ฌ"๋ก ๋ถ๋ฆฝ๋๋ค. ์ด๋ ์์ค ์ฝ๋๋ฅผ ๋ค๋ฅธ ์ธ์ด๋ก ๋ฐ๊พธ๋ ๋์ , ๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ด ๋ด์์ ์ต์ ๋ฌธ๋ฒ์ ๊ตฌํ ๋ฌธ๋ฒ์ผ๋ก ๋ณํํ๋ ๊ณผ์ ์ ๋ปํ๊ธฐ ๋๋ฌธ์
๋๋ค. ์๋ฅผ ๋ค์ด, const๋ ํ์ดํ ํจ์(=>) ๊ฐ์ ES6 ๋ฌธ๋ฒ์ ES5์ var์ ์ผ๋ฐ ํจ์๋ก ๋ฐ๊ฟ์ค๋๋ค.
- ES6+ ๋ณํ: let, const, async/await, ๋ชจ๋(import/export) ๋ฑ ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฅ์ ๊ตฌํ ํ๊ฒฝ์ ๋ง๊ฒ ๋ณํ.
- JSX ์ง์: ๋ฆฌ์กํธ์์ ์ฌ์ฉํ๋ JSX ๋ฌธ๋ฒ(์: Hello)์ React.createElement() ๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ก ๋ณํ.
- TypeScript ์ง์: .ts๋ .tsx ํ์ผ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ณํํ๋ฉฐ, ํ์ ์ฒดํฌ๋ ๋ณ๋๋ก TypeScript ์ปดํ์ผ๋ฌ(tsc)์ ๋งก๊น.
- ํด๋ฆฌํ(Polyfill): ๋ฐ๋ฒจ ์์ฒด๋ ๋ฌธ๋ฒ๋ง ๋ณํํ์ง๋ง, @babel/polyfill์ด๋ core-js์ ํจ๊ป ์ฌ์ฉํ๋ฉด Promise, Array.includes ๊ฐ์ ์ต์ API๋ ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์ ๋์ํ๊ฒ ์ถ๊ฐ ๊ฐ๋ฅ.
์๋ ๋ฐฉ์
- ํ์ฑ(Parsing): ์์ค ์ฝ๋๋ฅผ ์ฝ์ด ์ถ์ ๊ตฌ๋ฌธ ํธ๋ฆฌ(AST)๋ก ๋ณํ.
- ๋ณํ(Transforming): ํ๋ฌ๊ทธ์ธ๊ณผ ํ๋ฆฌ์ (Preset)์ ํตํด AST๋ฅผ ์์ (์: ES6 โ ES5).
- ์์ฑ(Generating): ์์ ๋ AST๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ต์ข ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ถ๋ ฅ.
ํ๋ฌ๊ทธ์ธ๊ณผ ํ๋ฆฌ์
- ๋ฐ๋ฒจ์ ๋ชจ๋ํ๋ ๊ตฌ์กฐ๋ก, ํน์ ๋ณํ ์์ ์ ํ๋ฌ๊ทธ์ธ(์: @babel/plugin-transform-arrow-functions)์ผ๋ก ์ถ๊ฐํ ์ ์์ต๋๋ค.
- ํ๋ฆฌ์ ์ ์ฌ๋ฌ ํ๋ฌ๊ทธ์ธ์ ๋ฌถ์ ์ธํธ๋ก, @babel/preset-env๋ ํ๊ฒ ๋ธ๋ผ์ฐ์ ์ ๋ง์ถฐ ํ์ํ ๋ณํ๋ง ์ ์ฉํด ํจ์จ์ฑ์ ๋์ฌ์ค๋๋ค. ๋ฆฌ์กํธ์ฉ์ผ๋ก๋ @babel/preset-react๊ฐ JSX ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํฉ๋๋ค.
๋ฆฌ์กํธ ๊ฐ๋ฐ์์ ๋ฐ๋ฒจ์ ํ์์ ์
๋๋ค. JSX๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋ ์ฝ๋๋ก ๋ฐ๊ฟ์ฃผ๊ณ , ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด์๋ ๋ค์ํ ๋ธ๋ผ์ฐ์ ํธํ์ฑ์ ๋ณด์ฅํด ์ค๋๋ค. Create React App์ด๋ Vite ๊ฐ์ ๋๊ตฌ๋ ๋ฐ๋ฒจ์ ๊ธฐ๋ณธ์ผ๋ก ๋ด์ฅํ๊ณ ์์ด ์ค์ ์์ด๋ ๋ฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, ๋ฐ๋ฒจ์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์์ "ํธํ์ฑ์ ๋ค๋ฆฌ" ์ญํ ์ ํ๋ฉฐ, ํนํ ๋ฆฌ์กํธ์ฒ๋ผ ์ต์ ๊ธฐ์ ์ ์ฌ์ฉํ๋ ํ๊ฒฝ์์ ์์ด์๋ ์ ๋ ๋๊ตฌ์ ๋๋ค. ์นํฉ์ด๋ Vite ๊ฐ์ ๋น๋ ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉ๋๋ฉฐ, ๊ฐ๋ฐ์๊ฐ ์ต์ ๊ธฐ๋ฅ์ ์์ ๋กญ๊ฒ ์ฐ๋ฉด์๋ ๋ชจ๋ ์ฌ์ฉ์๋ฅผ ์ง์ํ ์ ์๊ฒ ํด์ค๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, ๋ฐ๋ฒจ์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ์์ "ํธํ์ฑ์ ๋ค๋ฆฌ" ์ญํ ์ ํ๋ฉฐ, ํนํ ๋ฆฌ์กํธ์ฒ๋ผ ์ต์ ๊ธฐ์ ์ ์ฌ์ฉํ๋ ํ๊ฒฝ์์ ์์ด์๋ ์ ๋ ๋๊ตฌ์ ๋๋ค. ์นํฉ์ด๋ Vite ๊ฐ์ ๋น๋ ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉ๋๋ฉฐ, ๊ฐ๋ฐ์๊ฐ ์ต์ ๊ธฐ๋ฅ์ ์์ ๋กญ๊ฒ ์ฐ๋ฉด์๋ ๋ชจ๋ ์ฌ์ฉ์๋ฅผ ์ง์ํ ์ ์๊ฒ ํด์ค๋๋ค.