ํ๋์ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ๋ชจ๋ ๋จ์๋ก ํ์ผ์ ์ฎ์ด์ ๊ฐ๋ฐํ๋ ๋ฐฉ์์ด๋ค. ์ฆ, ๋ชจ๋์ ์๋ก ์์กด์ฑ์ ๋๊ณ ์๋๋ฐ, ์ด๋ฐ ์ ์์ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๋ค์ด ์๊ธด๋ค.
- ์๋ง์ ๋ชจ๋๋ค์ ์์๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ฒ์ธ๊ฐ?
- ๋ชจ๋์ด ๋ง์์ง์๋ก HTTP ์์ฒญ์ด ๋ง์์งํ ๋ฐ, ์ด๋ก ์ธํ ์ค๋ฒํค๋๋ ์ด๋ป๊ฒ ํด๊ฒฐํ ๊ฒ์ด๊ฐ?
- ES6+ ์คํ์ ์ฝ๋๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ฒ์ธ๊ฐ?
์ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ ๊ฒ์ด ๋ชจ๋ ๋ฒ๋ค๋ฌ๋ก ๊ฐ๊ฐ์ ๋ชจ๋ ์์กด์ฑ์ ํด๊ฒฐํ์ฌ ํ๋์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ๋ก ๋ง๋ฆ๊ณผ ๋์์ ES6+ ์คํ์ ES5๋ก ๋ณํํด์ฃผ๋ ๋๊ตฌ์ด๋ค. ์ด๋ฏธ์ง ์์ถ, ์ต์ํ ๋ฑ์ ์ฌ๋ฌ๊ฐ์ง ๊ธฐ๋ฅ๋ค๋ ์ ๊ณตํ๋ฉฐ ์ ๋ช ํ ๋ฒ๋ค๋ฌ๋ก๋ Webpack, Parcel, Rollup ๋ฑ์ด ์๋ค.
ํธ๋์คํ์ผ๋ง์ด๋ ํน์ ์ธ์ด๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ๋น์ทํ ๋ค๋ฅธ ์ธ์ด๋ก ๋ณํ์ํค๋ ํ์๋ฅผ ๋งํ๋ฉฐ ์ด๋ฅผ ํด์ฃผ๋ ๊ฒ์ด ํธ๋์คํ์ผ๋ฌ์ด๋ค. ํธ๋์คํ์ผ๋ฌ๊ฐ ํ์ํ ์ด์ ๋ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ES6+์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ES5 ์ฝ๋๋ก ๋ณํ์ํค๋ ๊ณผ์ ์ด ํ์ํ๋ค.
์ฌ์ค ES6+์ ๊ธฐ๋ฅ ๋ฟ๋ง ์๋๋ผ ๋ฆฌ์กํธ์ JSX๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ก ๋ณํ์ํจ๋ค๊ฑฐ๋ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ณํ์ํค๋ ๋ฑ์ ์ญํ ๋ ํธ๋์คํ์ผ๋ฌ์ ๊ธฐ๋ฅ ์ค ํ๋์ด๋ค. ES6+๋ JSX๋ฅผ ๋ณํ์ํค๋ ํธ๋์คํ์ผ๋ฌ๋ก๋ ๋ฐ๋ฒจ(Babel) ์ด ์์ผ๋ฉฐ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ณํ์ํค๋ ๋๊ตฌ๋ก๋ ํ์ ์คํฌ๋ฆฝํธ ํธ๋์คํ์ผ๋ฌ๊ฐ ์๋ค. ๋ณดํต ํ๋ก ํธ์๋ ํ๋ ์์ํฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด ๊ฐ๋ฐํ ๋ ๋ชจ๋ ๋ฒ๋ค๋ฌ์ ํธ๋์คํ์ผ๋ฌ๋ฅผ ์ถ๊ฐํด์ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
์นํฉ์ด๋ ์ต์ ํ๋ก ํธ์๋ ํ๋ ์์ํฌ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๋ชจ๋ ๋ฒ๋ค๋ฌ์ด๋ค.
์นํฉ์์ ์ง์นญํ๋ ๋ชจ๋์ด๋ผ๋ ๊ฐ๋ ์ ์์ ๊ฐ์ด ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋์๋ง ๊ตญํ๋์ง ์๊ณ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๋ ๋ชจ๋ ์์์ ์๋ฏธํ๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ํ๋ ค๋ฉด HTML, CSS, JavaScript, Images, Font ๋ฑ ๋ง์ ํ์ผ๋ค์ด ํ์ํ๋ฐ, ์ด ํ์ผ ํ๋ํ๋๊ฐ ๋ชจ๋ ๋ชจ๋์ด๋ค.
์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๋ ๋ช์ญ, ๋ช๋ฐฑ๊ฐ์ ์์๋ค์ ํ๋์ ํ์ผ๋ก ๋ณํฉ ๋ฐ ์์ถํด์ฃผ๋ ๋์์ ๋ชจ๋ ๋ฒ๋ค๋ง์ด๋ผ๊ณ ํ๋ค.
๐ก ๋น๋, ๋ฒ๋ค๋ง, ๋ณํ ๋ชจ๋ ๊ฐ์ ์๋ฏธ์ ๋จ์ด์ด๋ค.
๋ณ์ ์ ํจ ๋ฒ์์ ๋ฌธ์ ์ ์ ํด๊ฒฐํ ์ ์๋ค.
์น ์๋น์ค๋ฅผ ๋ฐฐํฌํ ๋ ์๋์ ๊ฐ์ ์์ ๋ค์ ํด์ผ ํ๋ค.
- HTML, CSS, JS ์์ถ
- ์ด๋ฏธ์ง, ํฐํธ ํ์ผ ์์ถ
- CSS ์ ์ฒ๋ฆฌ๊ธฐ ๋ณํ
์ด๋ฌํ ์ผ๋ค์ ์๋ํํด์ฃผ๋ ๋๊ตฌ๊ฐ ์นํฉ์ด๋ค.
์๋ฒ๋ก ์์ฒญํ๋ ํ์ผ์ ์ซ์๋ฅผ ์ค์ด๊ธฐ ๋๋ฌธ์ ์ด๊ธฐ ๋ก๋ฉ ์๋๋ฅผ ๋์ผ ์ ์๋ค. ๋ํ, ์นํฉ์ ์ด์ฉํด ์ฌ๋ฌ ๊ฐ์ ํ์ผ์ ํ๋๋ก ํฉ์น๋ฉด ๋ธ๋ผ์ฐ์ ๋ณ HTTP ์์ฒญ ์ซ์์ ์ ์ฝ์ ํผํ ์ ์๋ค.
๋ฐ๋ฒจ์ ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์๋ ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ ์ ๋๋ก ๋์ํ๋๋ก ๋ณํํด์ฃผ๋ ํธ๋์คํ์ผ๋ฌ์ด๋ค. ๋ฐ๋ฒจ์ ๊ฐ๋ฐ์์ ์ปดํจํฐ์์ ๋์๊ฐ๋๋ฐ, ์ด๋ฅผ ์คํํ๋ฉด ๊ธฐ์กด ์ฝ๋๊ฐ ๊ตฌ ํ์ค์ ์ค์ํ๋ ์ฝ๋๋ก ๋ณ๊ฒฝ๋๋ค. ๋ณ๊ฒฝ๋ ์ฝ๋๋ ์น์ฌ์ดํธ ํํ๋ก ์ฌ์ฉ์์๊ฒ ์ ๋ฌ๋๋ค.
๋ฐ๋ฒจ์ ์ปดํ์ผ ํ์์ ์ฝ๋๋ฅผ ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ๋ณํํ์ง๋ง, ES6 ์ด์์์ ์๋กญ๊ฒ ์ถ๊ฐ๋ Promise
, Map
, Set
๊ฐ์ ์ ์ญ ๊ฐ์ฒด๋ค์ด๋ String.padStart
๋ฑ ์ ์ญ ๊ฐ์ฒด์ ์ถ๊ฐ๋ ๋ฉ์๋ ๋ฑ์ ์ปดํ์ผ ํ์์ ์ฝ๋ ๋ณํ์ผ๋ก๋ ํด๊ฒฐํ๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ํด๋ฆฌํ์ด ํ์ํ๋ค. ์ฆ, ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์ ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๋ฐ๋ฒจ์ ์ด์ฉํ์ง๋ง, ์ผ๋ถ ๊ธฐ๋ฅ๋ค์ ํด๋ฆฌํ๋ก ์ถ๊ฐํด์ค์ผ ํ๋ค.
ํด๋ฆฌํ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ์ง ์๋ ์ด์ ๋ธ๋ผ์ฐ์ ์์ ์ต์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋๋ฐ ํ์ํ ์ฝ๋ ์กฐ๊ฐ์ด๋ค. ํด๋ฆฌํ์ ๋ง ๊ทธ๋๋ก ๊ตฌํ์ด ๋๋ฝ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ๋งค๊ฟ์ฃผ๋(fill in) ์ญํ ์ ํ๋ค.
ํด๋ฆฌํ์ ๋ฐํ์์ ํ์ํ ๊ธฐ๋ฅ์ ์ฃผ์ ํ๋ ๊ฒ์ด๋ค. ์ฆ, ๋ธ๋ผ์ฐ์ ์์ ์คํ๋๋ ์์ ์ ํ์ํ ๊ธฐ๋ฅ์ ์ฃผ์ ํ๋ค.
์ง์ํ ๋ธ๋ผ์ฐ์ ์ ๋ณด์ ์ผ๋ถ ์ต์ ์ ์ง์ ํ๋ฉด ์๋์ผ๋ก ํ์ํ ๊ธฐ๋ฅ๋ค์ ์ฃผ์ ํด์ค๋ค.
// .babelrc
{
"presets": [
["@babel/preset-env",{
"targets": ">= 0.25%, not dead" // ์์ฅ์ ์ ์จ์ด 0.25%์ด์, ์
๋ฐ์ดํธ๊ฐ ์ข
๋ฃ๋์ง ์์ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋์
}]
]
}