-
Notifications
You must be signed in to change notification settings - Fork 3
How we make npm packages work in the browser
CodeSandbox์ ์ด๊ธฐ ๊ฐ๋ฐ ๊ณผ์ ์์๋ ํญ์ npm ์์กด์ฑ ์ง์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฌ๋ค. ๋ธ๋ผ์ฐ์ ์ ์์์, ๋๋คํ ์์ ํจํค์ง๋ฅผ ์ค์นํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํ์ผ๋ฉฐ ์ฌ์ง์ด ๋ด ๋๊ฐ ๋งํ๋ค๊ณ ์๊ฐํ๋ค.
์์ฆ npm ์ง์์ CodeSandbox์ ๊ฐ์ฅ ์ ์ ๋ ๊ธฐ๋ฅ ์ค ํ๋๋ก, ์ด๋ป๊ฒ๋ ์๋ ํ ์ ์๋ค. ๋ชจ๋ ์๋๋ฆฌ์ค์์ ์๋ํ๋ ค๋ฉด ๋ง์ ๋ฐ๋ณต์ด ํ์ํ๊ณ , ์ฌ๋ฌ ๋ฒ ๋ค์ ์์ฑํ์ผ๋ฉฐ ์ฌ์ง์ด ์ด์ ๋ ๋ ผ๋ฆฌ๋ฅผ ๊ฐ์ ํ ์ ์๋ค. ํ์ฌ ๊ฐ์ง ๊ธฐ๋ฅ๊ณผ ๊ทธ๊ฒ์ ๊ฐ์ ํ๊ธฐ ์ํด ์ฌ์ ํ ํ ์ ์๋ ์์ , ๊ทธ๋ฆฌ๊ณ npm ์ง์์ด ์์๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๊ฒ ๋ค.
๋๋ npm ์์กด์ฑ์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ์ ๋ง๋ก ๋ชฐ๋๊ธฐ ๋๋ฌธ์, ๋งค์ฐ ๊ฐ๋จํ npm ์ง์ ๋ฒ์ ์ผ๋ก ์์ํ๋ค.
์ด ๋ฒ์ ์ npm ์ง์์ ๋งค์ฐ ๊ฐ๋จํ๋ค. ์ค์ ๋ก npm์ ์ง์ํ์ง๋ ์์์ผ๋ฏ๋ก ์์กด์ฑ์ ๋ก์ปฌ๋ก ์ค์นํ๊ณ , ๋ชจ๋ ์์กด์ฑ ํธ์ถ์ ์ด๋ฏธ ์ค์น๋ ์์กด์ฑ์ผ๋ก stub ํ๋ค. ๋ฌผ๋ก ์ด๊ฒ์ ๋ค๋ฅธ ๋ฒ์ ์ 400,000๊ฐ์ง์ ํจํค์ง๋ก ํ์ฅ ํ ์๋ ์์๋ค.
์ด ๋ฒ์ ์ ๊ทธ๋ค์ง ์ ์ฉํ์ง๋ ์์์ง๋ง, ํ๋ก์ ํธ ํ๊ฒฝ์์ ์ ์ด๋ ๋ ๊ฐ์ง์ ์์กด์ฑ์ ์๋์ํฌ ์ ์์์ ์๊ฒ๋์๋ค.
์ฌ์ค ์ฒซ ๋ฒ์งธ ๋ฒ์ ์ ๋งค์ฐ ๋ง์กฑํ์ผ๋ฉฐ MVP(CodeSandbox์ ์ฒซ ๋ฒ์งธ ๋ฆด๋ฆฌ์ค)์๋ ์ถฉ๋ถํ๋ค๊ณ ์๊ฐํ๋ค. https://esnextb.in ์ ์ฐ์ฐํ ๋ฐ๊ฒฌํ๊ธฐ ์ ๊น์ง๋ ๋ง๋ฒ์ ๋ถ๋ฆฌ์ง ์๊ณ ์๋ ์์กด์ฑ์ ์ค์นํ๋ ๊ฒ์ ๊ฐ๋ฅํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์์๋ค. ๊ทธ๋ค์ ์ด๋ฏธ npm์ ๋ชจ๋ ์ข
์์ฑ์ ์ง์ํ๊ณ , ์ฌ์ฉ์๊ฐ package.json ์์ ์ ์ํ๋ฉด ๋ง์ ์ฒ๋ผ ์๋ํ๋ค.
์ด๊ฒ์ ๋์๊ฒ ํฐ ํ์ต ์๊ฐ์ด์๋ค. ๋๋ ๊ทธ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค ๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์, ์ ์ ํ npm ์ง์์ ์๊ฐ๋ ํ์ง์์๋ค. ๊ฐ๋ฅ์ฑ ์ ๋ํ ์ด์์๋ ์ฆ๊ฑฐ๋ฅผ ๋ณธ ํ์์ผ ๋ ๊น์ด ์๊ฐํ๊ธฐ ์์ํ๋ค. ์์ด๋์ด๋ฅผ ๊ธฐ๊ฐํ๊ธฐ ์ ์, ๋จผ์ ๊ฐ๋ฅ์ฑ์ ์ดํด ๋ดค์ด์ผํ๋ค.
๊ทธ๋์, ๋๋ ์ด๊ฒ์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์๊ฐํ๊ธฐ ์์ํ๋ค. ๋๋ ๊ทธ๊ฒ์ ๋๋ฌด ๋ณต์กํ๊ฒ ์๊ฐํ๋ค. ์ฒซ ๋ฒ์งธ ๋ฒ์ ์ ๋ด ๋จธ๋ฆฌ๋ก๋ ๋ถ๊ฐ๋ฅ ํ์ผ๋ฏ๋ก ๋ค์ด์ด๊ทธ๋จ์ ๊ทธ๋ ค์ผํ๋ค.
์ด ์ง๋์น๊ฒ ๋ณต์กํ ์ ๊ทผ๋ฒ์ ํ ๊ฐ์ง ์ฅ์ ์ด ์์๋ค. ์ค์ ๊ตฌํ์ ์์๋ณด๋ค ํจ์ฌ ์ฌ์ ๋ค.
webpack ์ DllPlugin ์ด ์์กด์ฑ์ bundle ํ๊ณ , JS ๋ฒ๋ค์ manifest ๋ก ๋ฑ์ด ๋ผ ์ ์๋ค๋ ๊ฒ์ ์๊ฒ๋์๋ค. ์ด manifest ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
{
"name": "dll_bundle",
"content": {
"./node_modules/fbjs/lib/emptyFunction.js": 0,
"./node_modules/fbjs/lib/invariant.js": 1,
"./node_modules/fbjs/lib/warning.js": 2,
"./node_modules/react": 3,
"./node_modules/fbjs/lib/emptyObject.js": 4,
"./node_modules/object-assign/index.js": 5,
"./node_modules/prop-types/checkPropTypes.js": 6,
"./node_modules/prop-types/lib/ReactPropTypesSecret.js": 7,
"./node_modules/react/cjs/react.development.js": 8
}
}
๋ชจ๋ ๊ฒฝ๋ก๋ module id ์ ๋งคํ๋๋ค. React๊ฐ ํ์ํ ๊ฒฝ์ฐ dll_bundle (3) - ์ฆ, ./node_modules/react ๋ง ํธ์ถํ๋ฉด React๋ฅผ ์ป์ ์ ์๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ์ use case ์ ์๋ฒฝํ๊ธฐ ๋๋ฌธ์, ์
๋ ฅ์ ์์ํ๊ณ ์ด ์ค์ ์์คํ
์ ์๊ฐํด๋๋ค.
packager ์ ๋ํ ๋ชจ๋ ์์ฒญ์ ๋ํด /tmp/:hash ์ ์ ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํ๊ณ , yarn add $ {dependencyList} ๋ฅผ ์คํํ ๋ค์, webpack bundle ์ ๋์ค์ ์ฌ์ฉํ ์ ์๋ค. ๋๋ ์บ์ฑ ๋ฐฉ๋ฒ์ผ๋ก ์ ๋ฒ๋ค์ gcloud ์ ์ ์ฅํ๋ค. ์ฃผ๋ก ์์กด์ฑ ์ค์น๋ฅผ yarn ์ผ๋ก ๋์ฒดํ๊ณ webpack ์ผ๋ก bundling ํ๊ธฐ ๋๋ฌธ์, ๋ค์ด์ด๊ทธ๋จ๋ณด๋ค ํจ์ฌ ๊ฐ๋จํ๋ค.
ํ๋ก์ ํธ๋ฅผ load ํ ๋, ๋จผ์ evaluation ์ ์ manifest ์ bundle ์ด ์๋์ง ํ์ธํ๋ค. evaluation ํ๋ ๋์ ๋ชจ๋ ์์กด์ฑ์ ๋ํด dll_bundle (id) ๋ฅผ ํธ์ถํ๋ค. ์ด๊ฒ์ ๋งค์ฐ ์ ์๋ํ์ผ๋ฉฐ, ์ ์ ํ npm ์์กด์ฑ์ด์๋ ์ฒซ ๋ฒ์งธ ๋ฒ์ ์ด ๋์๋ค.
์ด ์์คํ
์๋ ์ฌ์ ํ ํฐ ํ๊ณ๊ฐ ์์๋ค. webpack ์ ์์กด์ฑ ๊ทธ๋ํ์ ์๋ ๋ชจ๋์ ์ง์ํ์ง ์์๋ค. ์ฒ์์๋ ์์กด์ฑ์ entry point ์ด ํ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์๋ฅผ ๋ค์ด, require ( 'react-icons / lib / fa / fa-beer') ์ ๊ฐ์ ๊ฒ์ด ์๋ํ์ง ์๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋๋ ์ด ๋ฒ์ ์ผ๋ก CodeSandbox๋ฅผ ๋ฐฐํฌํ์ผ๋ฉฐ, WebpackBin Christian Alfoni ์ ์ ์์ ์ฐ๋ฝํ๋ค. ์ฐ๋ฆฌ๋ npm ์์กด์ฑ์ ์ง์ํ๊ธฐ ์ํด ๋งค์ฐ ์ ์ฌํ ์์คํ
์ ์ฌ์ฉํ์ผ๋ฉฐ ๋์ผํ ํ๊ณ๋ฅผ ๊ฐ์ง๊ณ ์์๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ํ์ ํฉ์ณ ๊ถ๊ทน์ ์ธ pacakger ๋ฅผ ๋ง๋ค๊ธฐ๋ก ๊ฒฐ์ ํ๋ค.
Christian์ด ์ค์๋์ ๋ฐ๋ผ ๋ฒ๋ค์ ํ์ผ์ ์ถ๊ฐํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์์ฑ ํ ๊ฒ์ ์ ์ธํ๊ณ ๋, ๊ถ๊ทน์ ์ธ ํจํค์ง ํ๋ก๊ทธ๋จ์ ์ด์ ํจํค์ง ํ๋ก๊ทธ๋จ๊ณผ ๋์ผํ ๊ธฐ๋ฅ์ ์ ์งํ๋ค. ์ด๋ webpack ์ด ํด๋น ํ์ผ๋ค๋ bundle ๋ก ์ ๊ณตํ ์ ์๋๋ก entry potin ๋ฅผ ์๋์ผ๋ก ์ถ๊ฐํ์์ ์๋ฏธํ๋ค. ์ด ์์คํ
์ ๋ง์ด ์กฐ์ ํ ํ์๋ ๋ชจ๋ (?) ์กฐํฉ์์ ์๋ํ๊ฒ ๋์๋ค. ๋ฐ๋ผ์ react-icons์ CSS ํ์ผ๋ ์๋ํ ์ ์์๋ค ๐.
์๋ก์ด ์์คํ
์๋ ๋ํ ์ํคํ
์ฒ ์
๊ทธ๋ ์ด๋๊ฐ ์์๋ค. load balancer ๋ฐ ์บ์ ์ญํ ์ํ๋ DLL ์๋น์ค ๊ฐ ํ๋ ์๋ค. ๊ทธ ๋ค์, ๋ฒ๋ค๋ง์ ์ํํ๋ ์ฌ๋ฌ ํจํค์ง ๊ด๋ฆฌ์(packager) ๊ฐ ์์ผ๋ฉฐ, ์ด ํจํค์ง ๊ด๋ฆฌ์๋ฅผ ๋์ ์ผ๋ก ์ถ๊ฐ ํ ์ ์๋ค.
์ฐ๋ฆฌ๋ ๋ชจ๋ ์ฌ๋์ด packager service ๋ฅผ ์ฌ์ฉํ ์ ์๋๋กํ๊ณ ์ํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์๋น์ค ์๋ ๋ฐฉ์๊ณผ ์๋น์ค ํ์ฉ ๋ฐฉ๋ฒ์ ์ค๋ช
ํ๋ ์น ์ฌ์ดํธ๋ฅผ ๊ตฌ์ถํ๋ค. ์ฐ๋ฆฌ๋ codePen ๋ธ๋ก๊ทธ ์์๋ ์ธ๊ธ๋๋ค!
์ด ๊ถ๊ทน์ ์ธ ํจํค์ง ํ๋ก๊ทธ๋จ์๋ ์ฌ์ ํ ๋ช ๊ฐ์ง ์ ํ๊ณผ ๋จ์ ์ด ์๋ค. ์ธ๊ธฐ๊ฐ ๋์์ง๋ฉด์ ๋น์ฉ์ด ๊ธฐํ ๊ธ์์ ์ผ๋ก ์ฆ๊ฐํ์ผ๋ฉฐ, ํจํค์ง ์กฐํฉ์ ํตํด ์บ์ฑํ๊ณ ์์๋ค. ์ด๊ฒ์ ์์กด์ฑ(๋ชจ๋) ์ ์ถ๊ฐ ํ ๊ฒฝ์ฐ ์ ์ฒด ํจํค์ง ์กฐํฉ์ ๋ค์ ๋ฌถ์ด์ผํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋๋ ํญ์ serverless ๋ผ๋ ๋ฉ์ง ๊ธฐ์ ์ ์ฌ์ฉํ๊ณ ์ถ์๋ค. serverless ๋ฅผ ์ฌ์ฉํ๋ฉด ์์ฒญ์ ์คํํ ํจ์๋ฅผ ์ ์ํ๊ณ , ํจ์๊ฐ spin up(๊ฐ๋) ๋๊ณ , ์์ฒญ์ ์ฒ๋ฆฌ ํ ๋ค์ ์ผ์ ์๊ฐ์ด ์ง๋๋ฉด ์์ฒด์ ์ผ๋ก ์ข
๋ฃ๋๋ค. ์ด๋ ํ์ฅ์ฑ์ด ๋งค์ฐ ๋๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ฆ, 1000๊ฐ์ ๋์ ์์ฒญ์ ๋ฐ์ผ๋ฉด 1000๋์ ์๋ฒ๋ฅผ ์ฆ์ ๊ฐ๋ ํ ์ ์๋ค. ๋ํ ์๋ฒ๊ฐ ์ค์ ๋ก ์คํ๋๋ ์๊ฐ์ ๋ํด์๋ง ๋น์ฉ์ ์ง๋ถํ๋ค๋ ์๋ฏธ์ด๋ค.
Serverless sounds ๋ ์ฐ๋ฆฌ์ ์๋น์ค์ ์๋ฒฝํ๋ค. ํํ์์ผ๋ก ์คํ๋์ง ์์ผ๋ฉฐ, ๋์์ ์ฌ๋ฌ ์์ฒญ์ด ์๋ ๊ฒฝ์ฐ ๋์ ๋์์ฑ์ด ํ์ํ๋ค. ๊ทธ๋์ Serverless ๋ผ๋ ์ ์ ํ ์ด๋ฆ์ ํ๋ ์ ์ํฌ๋ก ์ด์ฌํ ๊ฐ๋ฐ์ ์์ํ๋ค.
Serverless ๋๋ถ์ ์๋น์ค๊ฐ ์์กฐ๋กญ๊ฒ ์งํ๋์๋ค. 2์ผ ์ด๋ด์ ์๋ํ๋ ๋ฒ์ ์ด ์์๊ณ , ๋๋ serverless ํจ์ 3๊ฐ๋ฅผ ๋ง๋ค์๋ค.
- A metadata resolve: ์ด ์๋น์ค๋ ๋ฒ์ ๋ฐ
peerDependencies๋ฅผ ํ์ธํ๊ณ , ํจํค์ง ๊ธฐ๋ฅ์ ์์ฒญํ๋ค. - A packager: ์ด ์๋น์ค๋ ์์กด์ฑ์ ๋ฒ๋ค๋ง ๋ฐ ์ค์ ์ค์น๋ฅผ ์ํํ๋ค.
- An uglifier: ๊ฒฐ๊ณผ ๋ฒ๋ค์ ๋น๋๊ธฐ ์ ์ผ๋ก
ugliflingํ๋ค.
์ด์ ์๋น์ค์ ํจ๊ป ์ ์๋น์ค๋ฅผ ์คํํ๋๋ฐ ์ค์ ๋ก ํจ๊ณผ๊ฐ ์์๋ค! ์ด์ ์ $100์๋ ๊ฒ์ ๋นํด, ์์ ๋น์ฉ์ ํ ๋ฌ์ $0.18๋ก ์ค์๊ณ ์๋ต ์๊ฐ์ 40% ์์ 700% ๋ก ํฅ์๋์๋ค.
๋ฉฐ์น ํ ์ ํ ์ฌํญ์ ์ฃผ๋ชฉํ๊ธฐ ์์ํ๋ค. lambda ํจ์์๋ ์ต๋ 500MB ์ ๋์คํฌ ๊ณต๊ฐ๋ง ์์ผ๋ฏ๋ก ์ผ๋ถ ์์กด์ฑ ์กฐํฉ์ ์ค์นํ ์ ์์๋ค. ์ด๊ฒ์ deal breaker ์๊ณ ๋๋ drawing board ๋ก ๋์์์ผํ๋ค.
๋ช ๋ฌ์ด ์ง๋์ CodeSandbox ์ฉ ์ ๋ฒ๋ค๋ฌ๋ฅผ ์ถ์ํ๋ค. ์ด ๋ฒ๋ค๋ฌ๋ ๋งค์ฐ ๊ฐ๋ ฅํ์ฌ, Vue ๋ฐ Preact ์ ๊ฐ์ ๋ ๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฝ๊ฒ ์ง์ํ ์ ์๋ค. ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ง์ํจ์ผ๋ก์จ ํฅ๋ฏธ๋ก์ด ์์ฒญ์ ๋ฐ์๋ค. ์๋ฅผ ๋ค์ด, Preact ์์ React ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด require ( 'react') ๋ฅผ require ( 'preact-compat') ๋ผ๋ ๋ณ์นญ์ผ๋ก ์ง์ ํด์ผํ๋ค. Vue ์ ๊ฒฝ์ฐ, @/components/App.vue ๋ฅผ ์๋ ๋ฐ์ค ํ์ผ๋ก ํด์ ํ ์ ์๋ค. packager ๋ ์์กด์ฑ์ ์ํด, ์ด ์์
์ ์ํํ์ง ์์ง๋ง, ๋ฒ๋ค๋ฌ๋ ์ด ์์
์ ์ํํ๋ค.
๊ทธ๋, ๋ธ๋ผ์ฐ์ ๋ฒ๋ค๋ฌ๊ฐ ์ค์ ๋ก packaging ์ ํ ์ ์๋ค๊ณ ์๊ฐํ๊ธฐ ์์ํ๋ค. ๊ด๋ จ ํ์ผ์ ๋ธ๋ผ์ฐ์ ๋ก ๋ณด๋ด๋ฉด, ๋ฒ๋ค๋ฌ๊ฐ ์์กด์ฑ์ ์ค์ ๋ฒ๋ค๋ง์ ์ํํ๊ฒ ํ๋ค. ์ ์ฒด ๋ฒ๋ค์ evaluating ํ์ง ์๊ณ ์ผ๋ถ๋ง evaluating ํ๊ธฐ ๋๋ฌธ์ ๋ ๋น ๋ฅด๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์๋ ๋
๋ฆฝ์ ์ผ๋ก ์์กด์ฑ์ ์ค์นํ๊ณ ์บ์ ํ ์ ์๋ค๋ ํฐ ์ด์ ์ด ์๋ค. ์์กด์ฑ ํ์ผ์ ํด๋ผ์ด์ธํธ์ merge ํ ์ ์๋ค. ์ฆ, ๊ธฐ์กด์ ์์กด์ฑ ์์ ์๋ก์ด ์ข
์์ฑ์ ์์ฒญํ๋ฉด ์ ์ข
์์ฑ์ ๋ํ ํ์ผ๋ง ์์งํ๋ฉด ๋๋ค. ์ฐ๋ฆฌ๋ ํ๋์ ์ข
์์ฑ๋ง ์ค์นํ๊ธฐ ๋๋ฌธ์, AWS Lambda ์ 500MB ์ ํ์ ํด๊ฒฐํ๋ค. ์ด์ packager ๋ ์ด๋ค ํ์ผ์ด ๊ด๋ จ์ฑ์ด ์๋์ง ์์๋ด๊ณ ์ ์กํด์ผ ํ ์ฑ
์์ด ์๊ธฐ๋๋ฌธ์ packager ์์ ์นํฉ์ ์ญ์ ํ ์๋ ์๋ค.
์ฐธ๊ณ : ํจํค์ ๋ฅผ ์ญ์ ํ๊ณ unpkg.com ์์ ๋ชจ๋ ํ์ผ์ ๋์ ์ผ๋ก ์์ฒญํ ์๋ ์๋ค. ์ด๊ฒ์ ์๋ง๋ ์์ ๋งํ ์๋ก์ด ์ ๊ทผ๋ฒ๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๋ค. ํ์ง๋ง ์ฐ๋ฆฌ๋ ์คํ๋ผ์ธ ์ง์์ ์ ๊ณตํ๊ณ ์ถ๊ธฐ ๋๋ฌธ์, ํจํค์ (์ ์ด๋ ํธ์ง๊ธฐ์ ๊ฒฝ์ฐ)๋ฅผ ๊ณ์ ์ ์งํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค. ๊ฐ๋ฅํ ๋ชจ๋ ๊ด๋ จ ํ์ผ์ด์๋ ๊ฒฝ์ฐ์๋ง ๊ฐ๋ฅํ๋ค.
์ข ์์ฑ ์กฐํฉ์ ์์ฒญํ๋ฉด ๋จผ์ ์ด ์กฐํฉ์ด S3์ ์ ์ฅ๋์ด ์๋์ง ํ์ธํฉ๋๋ค. S3์ ์์ผ๋ฉด API ์๋น์ค์์ ์กฐํฉ์ ์์ฒญํฉ๋๋ค. ์ด ์๋น์ค๋ ๋ชจ๋ ์ข ์์ฑ์ ๋ํด ๋ชจ๋ ํจํค์ ๋ฅผ ๋ ๋ฆฝ์ ์ผ๋ก ์์ฒญํฉ๋๋ค. 200 OK๋ฅผ ๋์ฐพ์ ๋ง์ S3์ ๋ค์ ์์ฒญํฉ๋๋ค.
ํจํค์ ๋ yarn์ ์ฌ์ฉํ์ฌ ์ข ์์ฑ์ ์ค์นํ๊ณ ์ง์ ์ ๋๋ ํ ๋ฆฌ์์๋ ๋ชจ๋ ํ์ผ์ AST๋ฅผ ํต๊ณผํ์ฌ ๋ชจ๋ ๊ด๋ จ ํ์ผ์ ์ฐพ์ต๋๋ค. require ๋ฌธ์ ๊ฒ์ํ์ฌ ํ์ผ ๋ชฉ๋ก์ ์ถ๊ฐํฉ๋๋ค. ์ด๊ฒ์ ์ฌ๊ท ์ ์ผ๋ก ๋ฐ์ํ๋ฏ๋ก ์์กด์ฑ ๊ทธ๋ํ๋ฅผ ์ป์ต๋๋ค.
์ดํ ์ ์ ์๋ก์ด ํจํค์ง๋ฅผ ๋ฐฐํฌํ๊ณ , ๊ทธ๋์ $0.02 ๋ฅผ ์ง๋ถํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ์บ์๋ฅผ ๊ตฌ์ถํ๊ธฐ์ํ ๊ฒ์ด๋ค. ์ด๋ ํ ๋ฌ์ $100๋ฌ๋ฌ ์ ์ ๋ ํฌ๊ฒ ์ ์ฝ๋๋ค.
์ด์ ๋ชจ๋ ์กฐํฉ์ ๋ํด 3์ด ์ด๋ด์ ์๋ก์ด ์ข
์์ฑ ์กฐํฉ์ ์ป์ ์ ์๋ค. ๊ธฐ์กด ์์คํ
์์๋ ๋๋๋ก 1๋ถ์ด ์์๋๋ค. ์กฐํฉ์ด ์บ์๋๋ฉด ์ฐ๊ฒฐ์ด ๋น ๋ฅธ ์ํ์์๋ 50ms ์ด๋ด์ ์ป์ ์ ์๋ค. Amazon Cloudfront ๋ฅผ ์ฌ์ฉํ์ฌ ์์กด์ฑ์ ์บ์ํ๋ค. ํ๋ก์ ํธ์ ๋ํ ๊ด๋ จ JS ํ์ผ๋ง ํ์ฑํ๊ณ ์คํํ๊ธฐ ๋๋ฌธ์ ํ๋ก์ ํธ๋ ๋ ๋น ๋ฅด๊ฒ ์คํ๋๋ค.
๋ฒ๋ค๋ฌ๋ ์ด์ ๋ก์ปฌ ํ์ผ์ธ ๊ฒ์ฒ๋ผ ์์กด์ฑ์ ์ฒ๋ฆฌํ๋ค. ์ฆ, ์ค๋ฅ ์คํ ์ถ์ ์ด ํจ์ฌ ๋ช
ํํด์ก์ผ๋ฉฐ ์ด์ .scss, .vue ๋ฑ๊ณผ ๊ฐ์ ์์กด์ฑ์ผ๋ก ๋ถํฐ ๋ชจ๋ ํ์ผ์ ํฌํจํ ์ ์์ผ๋ฉฐ, ๋ณ์นญ๊ณผ ๊ฐ์ ํญ๋ชฉ์ ์ฝ๊ฒ ์ง์ํ ์ ์๋ค. ์์กด์ฑ์ด ๋ก์ปฌ์ ์ค์น๋ ๊ฒ์ฒ๋ผ ์๋ํ๋ค.
์ดํ ์ ์ ์บ์๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํด ์ด์ ํจํค์ง์ ํจ๊ป ์๋ก์ด ํจํค์ง๋ฅผ ์ฌ์ฉํ๊ธฐ ์์ํ๋ค. ์ด๋ฏธ 2,000๊ฐ์ ์๋ก ๋ค๋ฅธ ์กฐํฉ๊ณผ, 1400๊ฐ์ ์๋ก ๋ค๋ฅธ ์ข ์์ฑ์ ์บ์ํ๋ค. ์ค์ ๋ก ์ด๋ํ๊ธฐ ์ ์, ์ ๋ฒ์ ์ ๊ด๋ฒ์ํ๊ฒ ํ ์คํธํ๊ณ ์ถ์๋ค.
๋ํ ์์ค์ ๊ด์ฌ์ด์๋ ๊ฒฝ์ฐ ์ฌ๊ธฐ์์ ์ฐพ์ ์ ์๋ค.
serverless ์ ๊น์ ์ธ์์ ๋ฐ์๊ธฐ ๋๋ฌธ์ ์๋ฒ ํ์ฅ์ฑ๊ณผ ๊ด๋ฆฌ๊ฐ ๋งค์ฐ ์ฌ์์ก๋ค. ํญ์ serverless ์์ ๋๋ฅผ ๋ฐฉํดํ๋ ์ ์ผํ ๊ฒ์ ๋งค์ฐ ๋ณต์กํ ์ค์ ์ด์ง๋ง, serverless.com ์ ์ฌ๋๋ค์ ์ด๊ฒ์ ์ด๋ฆฐ์ด๋ ํ ์ ์๊ฒ ๋ง๋ค์๋ค. ๊ทธ๋ค์ ์์
์ ๋งค์ฐ ๊ฐ์ฌํ๋ฉฐ, serverless ๋ ๋ง์ ๋ค๋ฅธ ์์ฉ ํ๋ก๊ทธ๋จ ์์์ ๋ฏธ๋๋ผ๊ณ ์๊ฐํ๋ค.
์ฐ๋ฆฌ๋ ์ฌ์ ํ ๋ง์ ๋ฐฉ๋ฒ์ผ๋ก ์์คํ
์ ๊ฐ์ ํ ์ ์๋ค. ๋๋ embede ์์ ์๊ตฌ๋ฅผ ๋์ ์ผ๋ก ์์ฒญํ๊ณ , ์คํ๋ผ์ธ์ ๋ณด์กดํ๊ธฐ ์ํด ๋
ธ๋ ฅํ๊ณ ์ถ๋ค. ์ ์งํ๊ธฐ ์ด๋ ค์ด ๊ท ํ์ด์ง๋ง ๊ฐ๋ฅํด์ผํ๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ ํ์ฉํ๋ ๋ด์ฉ์ ๋ฐ๋ผ, ๋ธ๋ผ์ฐ์ ์์ ๋
๋ฆฝ์ ์ผ๋ก ์์กด์ฑ ์บ์ฑ์ ์์ํ ์๋ ์๋ค. ์ด ๊ฒฝ์ฐ ๋ค๋ฅธ ์์กด์ฑ ์กฐํฉ์ ์ฌ์ฉํ์ฌ ์ ํ๋ก์ ํธ๋ฅผ ๋ฐฉ๋ฌธํ ๋ ์ ์์กด์ฑ์ ๋ค์ด๋ก๋ํ์ง ์์๋ ๋๋ค. ๋๋ ๋ํ ์์กด์ฑ ํด๊ฒฐ์ ๋ ํ๊ตฌ ํ ๊ฒ์ด๋ค. ์์ ํด์ง๊ธฐ ์ ์ ํด๊ฒฐํ๋ ค๋ ์๋ก์ด ์์คํ
๊ณผ ๋ฒ์ ์ด ์ถฉ๋ํ ๊ฐ๋ฅ์ฑ๋ ์๋ค.
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ CodeSandbox์ ์๋ก์ด ์์ ์ ์งํํ๋ฉด์ ์ ๋ฒ์ ์ ๋งค์ฐ ๋ง์กฑํ๋ค.
CodeSandbox์ ๊ฐ์ฅ ๋ง์ ํ๋์ด ์ฌ๊ธฐ ์๋ค.
โ 2019. BoostCamp Membership Team 4 all rights reserved.








