2. Caching
Web Application
[์ฌ์ฉ์] <=> [๋ธ๋ผ์ฐ์ (ํด๋ผ์ด์ธํธ)] <=> [์๋ฒ]
์ฌ์ฉ์๋ ํด๋ผ์ด์ธํธ๋ฅผ ํตํด ์๋น์ค๋ฅผ ์ด์ฉํ๊ณ
ํด๋ผ์ด์ธํธ๋ ์๋ฒ์, ์ฌ์ฉ์๊ฐ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์์ฒญ
๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๊ณ ๋ฐ์ ๋, ๋น์ฉ ๋ฐ์ (์ฌ์ฉ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์๊ฐ,๊ธฐ๋ค๋ฆฌ๋ ์๊ฐ, ๋... )
์ฌ์ฉ์๊ฐ ์๋น์ค๋ฅผ ์ด์ฉํ ๋ ๋น์ฉ์ ์ต์ํ ์ํค๋ ๊ฒ์ ์๋นํ ์ค์ํ๋ค.
์ด ์๊ฐ์ ์ต์ํํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ธฐ์ '์บ์ฑ'
์บ์ฑ(Caching))
๋ฆฌ์์ค์ ๋ณต์ฌ๋ณธ์ ๋๊ณ ์๋ฒ๋ณด๋ค๋ ๊ฐ๊น์ด ์์น์ ๋๊ณ , ํด๋ผ์ด์ธํธ์์ ์ฌ์ฉํ ์ ์๊ฒ๋ํ๋ค.
์ฌ์ฉ์์๊ฒ ํจ์ฌ ๋นจ๋ฆฌ ๋ฆฌ์์ค๋ฅผ ์ ๋ฌํ๊ณ , ์๋ฒ๋ก ์์ฒญํ๋ ํ์๊ฐ ์ค์ด ๋ถํ๊ฐ ์ค์ด๋ ๋ค.
๋ฐ์ดํฐ์ ์ง์ญ์ฑ
๊ณต๊ฐ์ง์ญ์ฑ: ํ๋ฒ ์ ๊ทผํ ๋ฐ์ดํฐ์ ์ธ๊ทผ์ ์ ์ฅ๋์ด์๋ ๋ฐ์ดํฐ๊ฐ ๋ค์ ์ ๊ทผ๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
์๊ฐ์ง์ญ์ฑ: ํ๋ฒ ์ ๊ทผ๋ ๋ฐ์ดํฐ๊ฐ ๊ฐ๊น์ด ์๊ฐ๋ด ๋ค์ ์ ๊ทผ๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
Caching & Webpack
์นํฉ์ด ๋ฒ๋คํ์ผ์ ๋ง๋๋ ๊ณผ์ ์์ caching์ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
๋ชจ๋๋ค์ ๋ฒ๋คํ์ผ๋ก ๋ง๋ค๋ฉด, ๋ธ๋ผ์ฐ์ ๋ ๋ฒ๋คํ์ผ์ ๋ฐ๊ณ , ์น ์ดํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๋์์ํด
์ด๋, ์ง๊ธ๊น์ง ๋ง๋ ์ค์ ํ์ผ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฒ๋คํ์ผ์ ๋ง๋ค๊ฒ ๋๋ฉด ๋ธ๋ผ์ฐ์ ์์๋ ๊ฐ์ ์ด๋ฆ์ผ๋ก ๋ฒ๋คํ์ผ์ ํธ์ถํ๊ฒ ๋๋ค.
๊ทธ๋ฐ๋ฐ ๋ธ๋ผ์ฐ์ ๊ฐ ์บ์ฑํ๋ ๊ธฐ์ค์ url
๋ก๋๋ฅผ ํ๋ ๋ฆฌ์์ค์ ๋ด์ฉ์ด ๊ฐ์๊ฒฝ์ฐ, ์บ์ฑ์ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ์ด์ ํ์ผ์ด ํธ์ถ๋ ๊ฒฐ๊ณผ๋ก ๋ณด์ฌ์ง๊ฒ๋จ.
ํ์ผ์ ์์ ํ์ ๊ฒฝ์ฐ, ๋ง์น ์์ ์ด ์๋ ๊ฒ์ผ๋ก ์ธ์ํ๊ฒ ๋จ. ์ด๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ด hash๊ฐ์ ๋ถ์ฌ์ฃผ๋ ๊ฒ.
ํ์ผ์ด ๋ฒ๋ค๋ง ๋ ๋์๋ง hash๊ฐ์ ๋ณ๊ฒฝ.
๋ฒ๋ค๋ง ๋๊ธฐ ์ ๊น์ง ํด์๊ฐ์ด ์ ์ง๊ฐ ๋๊ธฐ ๋๋ฌธ์, ๊ฐ์ ๋ฒํ ํ์ผ๋ก ์บ์ฑ์ด ๊ฐ๋ฅํจ.
์์ ์ฌํญ์ด ์์ด์ ์์ ํ ๋ค ๋ค์ ๋ฒ๋ค๋งํ๋ฉด ํด์๊ฐ์ด ์์ ์ด๋๊ณ , ์บ์๋ฅผ ์ด์ฉํ์ง ์๊ณ ์๋ก์ด ๋ฒ๋คํ์ผ์ ๋ก๋ํ๋ฉด๋จ
ํด์๊ฐ: hash, contenthash, chunkhash
output์ filname์ ์์ฑ
hash: ํ์ผ์ด๋ณ๊ฒฝ๋์์๋, ๋น๋๋ ๋๋ง๋ค ์๋์ผ๋ก ๋ถ์ฌ๋๋ ๊ฐ.
๊ทธ๋ฐ๋ฐ ๋น๋ ๋ ๋๋ง๋ค hash๊ฐ ์๋ก ๋ถ์ฌ๋๋ฉด, ํ์ผ๋ด๋ถ์ bundleํ์ผ์ด ์์ฌ๊ฐ.
(๋ถํ์ํ ํ์ผ์ด ์์ด๊ธฐ ๋๋ฌธ์, ์ด๋ฅผ ํด๊ฒฐํด์ฃผ๋ plugin์ ๋ฑ๋ก)
clean webpack plugin: ๋น๋ ๋ ๋๋ง๋ค, ์๋ก ์์ฑ๋ ํ์ผ๋ค๋ง ๋จ๊ธฐ๊ณ ๋๋จธ์ง๋ ๋น์์ฃผ๊ฒ๋จ
์ธ๋ถ ๋ชจ๋์ด๊ธฐ๋๋ฌธ์, require๋ก ๋ชจ๋์ ๋ถ๋ฅด๊ณ , plugin์ ์ค์ ํด์ฃผ์ด์ผํ๋ค.
contenthash
ExtractTextPlugin์์ ์์ฑ๋ ํน์ ์ ํ์ ํด์
mini-css-extract-plugin ๋ชจ๋ ์ค์น
require๋ก mini-css-extract-plugin์ ๊ฐ์ ธ์์, loader, plugin์ค์ ์ ํด์ค๋ค.
์ผ์ ์ style-loader ์ค์ ํด๋์๋ ๊ฒ์ ์ฃผ์์ฒ๋ฆฌ (์ถฉ๋ ๋ฐฉ์ง)
link ํ๊ทธ ์ถ๊ฐ๋ ๊ฒ์ ํ์ธํ ์ ์๊ณ , build(bundle)๋ ๊ฒฐ๊ณผ, main.css ํ์ผ์ ํ์ธํ ์ ์๋ค.
css ์์์ ์บ์ฑ์ด ๋์ด ํ์ฉํ ์ ์๋ ํํ๊ฐ๋๊ณ , html์ ํฌ๊ธฐ๊ฐ ์ค์ด๋ ๋ค.(style tag๋์ , ๋ณ๋ ํ์ผ css๋ก ๋ณ๊ฒฝ๋จ.)
๋จ, main.css๋ก ์ด๋ฆ์ด ๊ณ ์ ๋๋ฉด, cssํ์ผ์ด ๋ณ๊ฒฝ์ด๋์ด๋ ์ด์ ํ์ผ์ ๋ถ๋ฌ์ค๋ ๋ฌธ์ ๊ฐ ์๊ธฐ๊ธฐ ๋๋ฌธ์, hash๋ฅผ ์ ์ฉํด์ผํจ
์ด ๋ hash๋ฅผ ์ฌ์ฉํด์ผํจ.
๊ทธ๋ฐ๋ฐ, js์ css๋ฅผ ์์ ํ๋ ์์ ์ ๋ค๋ฆ.
js๊ฐ ์์ ๋๊ณ ๋ค์ ๋น๋๋ฅผ ํ๋ฉด, css์ ๋ณ๊ฒฝ๋ด์ฉ์ด ์๋๋ผ๋ ๋งค๋ฒ css๋ ์๋ก ๋น๋๋จ.
hash๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ผ์ด ์์ ๋ ํ์ ๋น๋๊ฐ ์คํ๋จ์ ๋ฐ๋ผ ๋ณํํ๊ธฐ ๋๋ฌธ์ ์ด๋ ๊ฒ ๋๋ฉด css๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๋ณ๊ฒฝ์ด ์ผ์ด๋์ง ์์ ๋ฆฌ์์ค๋(css) ์บ์ฑ์ ์๋ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํด์ผํ๋๋ฐ, ํด์๊ฐ ์ผ๊ด ๋ณ๊ฒฝ๋จ์ ๋ฐ๋ผ, ๋ถ๋ฌ์ค์ง ๋ชปํ๋ ์ํฉ๋ฐ์
์ ๋๋ก ์บ์ฑ ์๋จ
ํด์๊ฐ์ด ๋ฐ๋์๊ธฐ ๋๋ฌธ์, css๋ฅผ ์๋ก์ด ๋ฆฌ์์ค๋ก ํ๋จํ๊ณ ๊ฐ์ ๋ด์ฉ์ ์์ฒญํ๊ฒ ๋์ด content ์ข ๋ฅ์ ๋ฐ๋ผ hash๋ฅผ ๋ถ์ฌํ๋ contenthash๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
js๊ฐ ๋ณ๊ฒฝ๋๋๋ผ๋, css๋ ์ ์งํ๋๋ก ํจ.
chunkhash
๋ฒ๋ค๋ง์ ํ ๋๋ง๋ค, ๋ฒ๋คํ์ผ์ ์ฌ์ด์ฆ๊ฐ ๋์ด๋๋ค.
ํ์ผ์ ์์ฒญ์๋ ์ค์ง๋ง, ํ์ผ ํฌ๊ธฐ๊ฐ ์ปค์ ธ ์๋์ ์ผ๋ก ํ์ผ์ด ๋์ฐฉํ๋ ์๊ฐ์ด ์ง์ฐ๋ ์ ์๋ค.
๊ทธ๋์ ๋ช๊ฐ์ง ๊ธฐ์ค์ ๊ฐ์ง๊ณ ํ์ผ์ ๋ถ๋ฆฌํ๋๋ฐ, ์ด๋ฅผ 'chunk'๋ผ๊ณ ํ๋ค.
ํน์ ๊ธฐ์ค์ผ๋ก ๋๋๋๋ฐ 2๊ฐ์ง๋ฅผ ๊ธฐ์ค์ผ๋ก ๋๋ ๊ฒ
runtime ์ฒญํฌํ์ผ
์นํฉ์ด ๋ชจ๋๋ค์ ํด์ํด ์์กด์ฑ๊ทธ๋ํ๋ฅผ ์์ฑํ๊ณ ํ๋์ ๋ฒ๋คํ์ผ์ ๋ชจ๋๋ค์ ๋ชจ๋ ๋ชจ์์ ๋ฒ๋คํ์ผ์ ์์ฑํ๊ฒ ๋๋๋ฐ,
๋ฒ๋คํ์ผ๋ก app์ ์คํ์ํฌ๋ ๋ชจ๋๋ค์ ์์๋๋ก ์ฝ์ ์ ์๋๋ก ๋ง๋ จ๋ ์ด๊ธฐํ์ ํด๋นํ๋ ์ฝ๋๊ฐ ์๋ค.
runtime: application ์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ๊ณ , ์คํ๋๋ ํ๊ฒฝ
์ด ๋ฐํ์ ํ๊ฒฝ์์ ๋ชจ๋๋ค์ ์์ ํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ จ๋ ์ด๊ธฐํ ์ฝ๋๋ ๋ชจ๋์ด ๋ช๊ฐ๊ฐ ๊ด์ฌ๋๋ ๋ณํจ์ด ์์.
๋ฐํ์๋๋ง ์ฌ์ฉ๋๋ ์ฝ๋๋ค์ ์ฒญํฌ๋ก ๋ถ๋ฅํ๊ฒ ๋๋ฉด, ๋๋จธ์ง๋ ๋ชจ๋์ ๋ํ ๋ด์ฉ๋ง ๋จ๊ฒ ๋๋ค.
์ค์ ๋ก ๋ณํ๋ง ๋ด๊ณ ์๋ ์ฝ๋๋ ์์ด ์๋์ ์ผ๋ก ์ค๊ณ , ๋ฐํ์ ์ฝ๋๋ ๋ณํ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ฐํ์์ฝ๋์ ๊ฒฝ์ฐ ์บ์๊ฐ ์ ์ฉ๋์ app์ด ์ข ๋ ๋นจ๋ฆฌ ์คํ๋จ.
๋ฐด๋ ์ฒญํฌ ํ์ผ
๋ฒค๋: ์ธ๋ถ ํจํค์ง์ ํด๋นํ๋ ๋ชจ๋๋ค (์:jQuery)
jQuery๋ ์ฐ๋ฆฌ๊ฐ ๋ฒ์ ์ ์ ํ์ง ์๋์ด์, jQuery๋ ๋ฒ์ ์ ๋ณํ๊ฐ ์๋ค.
์ธ๋ถ์์ ๊ด๋ฆฌ๋๋ ๋ชจ๋๋ค๋ง ๋ฐ๋ก ๋ถ๋ฅํ๋ฉด, ์ค์ ์ฐ๋ฆฌ๊ฐ ์์ ํ๋ ์ฝ๋๋ง ์์ง์ด ๋๊ณ , ์ธ๋ถํจํค์ง๋ค์ ๋ชจ์๋ ๋ฒค๋ ์ฒญํฌ ํ์ผ์ ํด์๊ฐ์ด ๋ฐ๋์ง ์๊ธฐ ๋๋ฌธ์ ์บ์๋ฅผ ํตํด ํจ์จ์ ๋์ผ ์ ์๋ค.
chunk hash ๋ chunk๋ก ๋๋์ด์ง ํ์ผ๋ค๋ง๋ค hash๊ฐ์ ๋ถ์ฌํ๊ฒ ๋จ
๋ง์น content hash์ฒ๋ผ ๋๋์ด์ง ์ฒญํฌ ๋ณ๋ก ํด์๊ฐ์ ์ ์ฉํ๊ธฐ ๋๋ฌธ์, ์ง์ ์์ฑํ๋ ๋ชจ๋์ ์ ์ธํ ๋๋จธ์ง ์ฒญํฌํ์ผ์๋ ์ํฅ์ด ์๋ค.
chunkhash ์ค์ต
runtime chunk
file name ์ค์
optimization (key): ์นํฉ์ ๋ฒ๋คํ์ผ์ ์ต์ ํ ์ํด
runtimeChunk ๋ฅผ plugin์ ์ถ๊ฐ : ๋น๋ ์, ๋ฐํ์ ์ฝ๋๋ ๋ฐ๋ก ๋ถ๋ฆฌ๋จ(runtime, )
๋ฒค๋ chunk
๋ฒค๋ํ์ผ ์์(jQuery)
jQuery ์ค์น
์ค์น ์ดํ, ํด๋์ค์ด๋ฆ์ ์ฌ์ฉํ์ฌ DOM ๊ฐฏ์ ๋ช๊ฐ์ธ์ง ์ฒดํฌ(index.js)
์นํฉ ์ค์ ํ์ผ์์, ๋ฒค๋ํ์ผ๋ค์ ๋ํ ์ฒญํฌํ์ผ์ ์์ฑํ๊ธฐ ์ํด key๋ฅผ ํ๋ ๋ ์ถ๊ฐ.(webpack.config.js)
splitchunk ๋ด์ฉ์ plugin์ ์ถ๊ฐ
build์, dist ํด๋ ๋ด๋ถ์ vender.~ ์ด๋ผ๋ ํ์ผ์ด ์๊น ํ์ธํด๋ณด๋ฉด, jQuery์ ๊ด๋ จ๋ ๋ด์ฉ์ด ๋ด๊ฒจ์์(๋ถ๋ฆฌ ์ฑ๊ณต!)
Last updated