7๊ฐ์ง ํ๋ซํผ ์๋ฒ๋ก ํ๋ก ํธ์๋ ๋ฒํ ๋ง๋ฒ ๊ฑธ๊ธฐ
7๊ฐ์ง ํ๋ซํผ ์๋ฒ๋ก ํ๋ก ํธ์๋ ๋ฒํ ๋ง๋ฒ ๊ฑธ๊ธฐ ๊ด๋ จ
FEConf2024[1]์์ ๋ฐํํ <7๊ฐ์ง ํ๋ซํผ ์๋ฒ๋ก ํ๋ก ํธ์๋ ๋ฒํ ๋ง๋ฒ ๊ฑธ๊ธฐ>๋ฅผ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. ๋ฐํ ๋ด์ฉ์ 2ํ๋ก ๋๋์ด ๋ฐํํฉ๋๋ค. 1ํ์์๋ ํ๋ก ํธ์๋์ ๋ผ์ดํ ์ฌ์ดํด์ ๋ํด ๊ฐ๋จํ ์์๋ณด๊ณ 4๊ฐ์ง ๋ฒํ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. 2ํ์์๋ ๋๋จธ์ง 3๊ฐ์ง ๋ฒํ์ ๋ํด ์์๋ณด๊ณ , ์ํ์ฐฉ์ค๋ก ๋ฐฐ์ด ๊ฒ๋ค์ ๋ํด ์์๋ด ๋๋ค. ๋ณธ๋ฌธ์ ์ฝ์ ๋ ์ด๋ฏธ์ง์ ์ถ์ฒ๋ ๋ชจ๋ ์ด ์ฝํ ์ธ ์ ๊ฐ์ ์ ๋ชฉ์ ๋ฐํ ์๋ฃ๋ก, ๋ฐ๋ก ์ถ์ฒ๋ฅผ ํ๊ธฐํ์ง ์์์ต๋๋ค.
์๋ ํ์ธ์. ์ ๋ ํ ์ค ์ฝ์ด FE ํ๋ซํผ ํ์์ Frontend Ops ์ ๋์ ๋ฆฌ๋ฉํ๊ณ ์๋ ์ ์ํธ๋ผ๊ณ ํฉ๋๋ค. ์ค๋์ โ7๊ฐ์ง ํ๋ซํผ ์๋ฒ๋ก ํ๋ก ํธ์๋ ๋ฒํ ๋ง๋ฒ ๊ฑธ๊ธฐ'์ ๋ํด ์ค๋ช ํด ๋ณด๋ ค๊ณ ํฉ๋๋ค. ์ ๋ ํนํ ํ๋ก ํธ์๋์ ์ธํ๋ผ์ ๊ด์ฌ์ด ๋ง์์ ์ด์ ๊ด๋ จ๋ ์์ ๋ค์ ์ฃผ๋์ ์ผ๋ก ํ๊ณ ์์ต๋๋ค. ์ต๊ทผ์๋ ํ๋ก ํธ์๋ ์๋น์ค์ ์์ ์ฑ์ ์ํด ์ข์ ํ๊ฒฝ์ ๊ฐ๊พธ๋ ๊ฒ์ ์ง์คํ๊ณ ์์ต๋๋ค.
์ด๋ฒ ๊ธ์์ ๋ค๋ฃจ๋ ๊ฒ๋ค์ ์๋์ ๊ฐ์ต๋๋ค. ๊ตฌ์ฒด์ ์ธ ์ฝ๋ ์กฐ๊ฐ์ด๋ ๊ตฌํ ๋ฐฉ๋ฒ์ ๋ค๋ฃจ์ง ์์ผ๋ ์ฐธ๊ณ ํด ์ฃผ์ธ์.
- ํ๊ณ ์ ํ๋ ๋ฌธ์ ๋ค
- ์์ด๋์ด์ ์ํฉํธ
- ๊ฒช์๋ ์ํ์ฐฉ์ค์ ์ด์ ์ด์
ํ ์ค ์ฝ์ด์ ํ๋ก ํธ์๋
ํ ์ค ์ฝ์ด์๋ 86๋ช ์ FE ๊ฐ๋ฐ์๋ค์ด ํจ๊ป ์๊ณ 250๊ฐ์ ์๋น์ค๋ฅผ ์ด์ํ๊ณ ์์ต๋๋ค. ์ ๊ฐ ์ํ ํ๋ซํผ ํ์์๋ 86๋ช ์ FE ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉํ๋ ๋ชจ๋ ธ๋ฆฌํฌ๋ฅผ ๊ด๋ฆฌํ๊ณ ์๊ณ ํ๋ฃจ ํ๊ท ๋จธ์ง ๋ฆฌํ์คํธ ์์ฒญ์ 50๊ฐ ์ ๋ ๋ฉ๋๋ค. ๋ํ 250๊ฐ์ ์๋น์ค์ ๋ฐฐํฌ๋ถํฐ ๋ชจ๋ํฐ๋ง๊น์ง ๊ฐ์ด ๊ด๋ฆฌํ๊ณ ์์ต๋๋ค.
๋, ์ฌ๋ด์์ ์ฌ์ฉํ๋ ๊ณตํต ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฝ 220๊ฐ ์ ๋์ ๋๋ค. ์ด๋ฐ ์ธํ๋ผ ๊ด๋ฆฌ๋ฅผ ์ข ๋ ์ฝ๊ฒ ํ๊ธฐ ์ํด์ IaC๋ฅผ ํตํด ํ์ ๊ด๋ฆฌ๋ฅผ ์๋ํํ๊ณ ์๊ณ , ๋ค์ํ ๊ฐ๋ฐ์๋ค์ด ๊ธฐ์ฌํ ์ ์๋ ํ๊ฒฝ์ ๋ง๋ค๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค.
ํ ์ค ์ฝ์ด ํ์ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ค์ด ์ด๋ฌํ ๋ค์ํ ์ ๋ฌด๋ค์ ์ง์คํ๋ ๋ชฉ์ ์ด ๋ฌด์์ผ๊น์?
๊ฐ์ฅ ํฐ ๋ชฉ์ ์ ํ ์ค์ ํ๋ก ํธ์๋ UX/DX๋ฅผ ์ธ๊ณ ์ต๊ฐ์ผ๋ก ๋ง๋ค๊ธฐ ์ํจ์ ๋๋ค. ํ ์ค์ ํ๋ก ํธ์๋ ํ๋ซํผ์ด ์ธ๊ณ ์ต๊ฐ์ ํ๋ก ํธ์๋๊ฐ ๋๊ธฐ ์ํด ์ด๋ค ๋ ธ๋ ฅ์ ํ๊ณ ์๋์ง ํ๋์ฉ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
ํ๋ก ํธ์๋ ์๋น์ค ๋ผ์ดํ ์ฌ์ดํด
์ด๋ฌํ ๋ ธ๋ ฅ์ ์์๋ณด๊ธฐ ์ ์ ์๋ ๊ทธ๋ฆผ์ ํตํด ํ๋ก ํธ์๋ ์๋น์ค๊ฐ ์ด๋ป๊ฒ ๋ง๋ค์ด์ง๊ณ ์ ์ ์๊ฒ ์ด๋ป๊ฒ ์ ๋ฌ๋๋์ง ์์๋ณด๊ฒ ์ต๋๋ค.
๋จผ์ ํ ์ค ์ฝ์ด์ UX ํ์ด ๋์์ธ ์์คํ ์ ๋ง๋ค์ด ์ฃผ๊ณ , ๋์์ด๋ ๋ถ๋ค์ด ๋์์ธ ํด์ ํ์ฉํด ๋์์ธ์ ํฉ๋๋ค. FE ๊ฐ๋ฐ์๋ค์ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ค ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์น์๋น์ค๋ฅผ ๋ฐฐํฌํฉ๋๋ค. ์ด๋ ๊ฒ ๋ฐฐํฌ๋ ์๋น์ค๋ ๋ค์ดํฐ๋ธ ์ฑ์์ ์๋ ์น๋ทฐ๋ฅผ ํตํด ์ฌ์ฉ์์๊ฒ ์ ๊ณต๋ฉ๋๋ค.
๊ทธ๋ผ ํ ์ค ์ฝ์ด์์ ์ธ๊ณ ์ต๊ฐ์ ํ๋ก ํธ์๋ ํ๋ซํผ์ ๋ง๋ค๊ธฐ ์ํด ์ด๋ค ๋ ธ๋ ฅ์ ํ๊ณ ์์๊น์? ์ ๊ทธ๋ฆผ์์ ํ๋์์ผ๋ก ์น ํ ๋ถ๋ถ์ด ๋ฐ๋ก ์ด๋ฒ ๊ธ์ ์ฃผ์ ์ด์ ํ ์ค ์ฝ์ด์ 7๊ฐ์ง ๋ง๋ฒ์ ๋๋ค. ์ด์ ๋ถํฐ 7๊ฐ์ง ๋ง๋ฒ์ ๋ํด ํ๋์ฉ ์์๋ณด๊ฒ ์ต๋๋ค.
์ด๋ฏธ์ง ์ต์ ํ ๋ง๋ฒ
Next.js ์ด๋ฏธ์ง ์ปดํฌ๋ํธ
์ฒซ ๋ฒ์งธ ์ฃผ์ ๋ ์ด๋ฏธ์ง ์ต์ ํ ๋ง๋ฒ์ ๋๋ค. Next.js๋ฅผ ํ์ฉํด ๊ฐ๋ฐํด ๋ณด์ ๋ถ์ด๋ผ๋ฉด Next.js์ ์ด๋ฏธ์ง ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํด ๋ดค์๊ฑฐ๋ผ ์๊ฐ๋ฉ๋๋ค. Next.js์ ์ด๋ฏธ์ง ์ปดํฌ๋ํธ๋ ์๋์ ๊ฐ์ ํน์ง์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- ๊ธฐ๊ธฐ์ ์ ์ ํ ๋๋ฐ์ด์ค ๋ณ ์ฌ์ด์ฆ๋ก ์๋ ๋ณํ
- ์ด๋ฏธ์ง ๋ก๋ฉ ์ Layout Shift ๋ฐฉ์ง
- ๊ณ ํด์๋ ์ด๋ฏธ์ง๋ฅผ ์ ํด์๋๋ก ์ฐ์ ํ์(Blur-up)
- ์ธ๋ถ ์ด๋ฏธ์ง ์ฌ์ฉ ๊ฐ๋ฅ(e.g. CDN)
3๋ ์ ํ ์ค๋ฅผ ๋์๋ณด๋ฉด, ๋๋ถ๋ถ์ ์๋น์ค๊ฐ Next.js์ SSG(Static Site Generation)๋ฅผ ํตํด ๋ง๋ค์ด์ง CSR(Client Side Rendering) ์๋น์ค์์ต๋๋ค. ํ์ง๋ง Next.js์ ์ด๋ฏธ์ง ์ปดํฌ๋ํธ๋ SSR ์๋ฒ์ ์จ๋๋งจ๋ ๊ธฐ๋ฅ์ด๊ธฐ ๋๋ฌธ์ SSG๋ก ๋ง๋ค์ด์ง ํ์ด์ง์์๋ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค๋ ์์ฌ์์ด ์์์ต๋๋ค.
์ฆ, Next.js์ ์ด๋ฏธ์ง ์ตํฐ๋ง์ด์ ์ด์ ๋ํดํธ ๋ก๋๋ ์ค์ง Next.js์์๋ง ์ฌ์ฉํ ์ ์๊ณ , Next.js์์๋ SSG๋ CSR์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Next.js ์ด๋ฏธ์ง ์ปดํฌ๋ํธ ์ฌ์ฉ ๋ฌธ์ ํด๊ฒฐํ๊ธฐ
ํ ์ค ํ์์๋ Next.js์ ๋ํดํธ ๋ก๋๋ฅผ ์ฌ์ฉํ์ง ์๊ณ Next.js์ ๋ ๋ฆฝ๋ ์ด๋ฏธ์ง ์ต์ ํ API๋ฅผ ์ด์ฉํด ์์ ๋งํ ๊ฒ์ ํด๊ฒฐํด ๋ณด๊ณ ์ ํ์ต๋๋ค.
๊ฐ์ฅ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋ ๋ฐฉ๋ฒ์ AWS์ Lambda@Edge๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ์๋จ์๋ CDN์ ๋ฐฐ์นํ๊ณ ๋ท๋จ์๋ ์ด๋ฏธ์ง ์ต์ ํ ๋ก์ง์ ์ํํ๋ ๋๋ค๋ฅผ ๋ฐฐ์นํ์ฌ ์๋น์ค์ ์ด๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๊ตฌ์ฑํ์ต๋๋ค. ํ์ง๋ง ๋๋ค๋ฅผ ์ด์ํ๋ฉด์ ๊ฐ์ข ์ํ์ฐฉ์ค๋ฅผ ๊ฒช์์ต๋๋ค.
์๋น์ค๋ฅผ ์ด์คํํ๊ธฐ ์ํด์๋ ๋ค๋ฅธ ์ ๊ณต ์ ์ฒด์ ์๋ฒ๋ฆฌ์ค ํ์ ์๋น์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๋ ๋ฐ์ํ๊ณ , ๊ธฐ์กด ์์ค์ฝ๋๊ฐ ์ค๋๋์๋ค๋ฉด Node.js์ ๋ฒ์ ์ ๊ฐ์ ๋ก ์ ๋ฐ์ดํธํด์ผ ๋ฐฐํฌํ ์ ์๋ ๋ฆฌ์คํฌ๋ ์กด์ฌํ์ต๋๋ค. ๋ฟ๋ง ์๋๋ผ ํธ๋ํฝ์ด ๊ฐ์๊ธฐ ๋ชฐ๋ฆฌ๊ฒ ๋๋ฉด ๋๋ค ์๋น์ค ๋น์ฉ์ด ๊ธฐํ๊ธ์์ ์ผ๋ก ์ปค์ง ์๋ ์์์ต๋๋ค.
์ ๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์ด๋ฏธ ํ ์ค ์๋ฒ ํ๋ซํผ์์ ์ ํด๊ฒฐํด๋๊ฐ๊ณ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๊ทธ๋์ ์ด๋ฏธ ์ ๋ง๋ค์ด์ง ํ ์ค ์๋ฒ ํ๋ซํผ ์ธํ๋ผ์ ์๋ฒ๋ฅผ ๋์๋ณด๊ณ ์ถ๋ค๋ ์๊ฐ์ ํ์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด DC1 / DC2 ์ด์คํ ๋ฐ ์ ์ง์ ์ธ ๋ฐฐํฌ๋ ์ง์์ด ๋๊ณ , ๊ทธ๋ผํ๋๋ฅผ ํตํ ์๋ฒ ์งํ ๋ชจ๋ํฐ๋ง์ ๋ฌผ๋ก ์ค์๊ฐ ๋ก๊น ๋ ๊ฐ๋ฅํฉ๋๋ค.
์ด ์๋๋ฅผ ํตํด ์์ ์ ์ผ๋ก IDC ์ธํ๋ผ๋ฅผ ์ฌ์ฉํ์ฌ ์์ ๋งํ ์ฅ์ ๋ค์ ๋ชจ๋ ์ป์ ์ ์์์ต๋๋ค. ๋ค์ ๋งํด ์ด๋ฏธ์ง ์ต์ ํ ๋ง๋ฒ์ ํตํด ๋ชจ๋ ํ๊ฒฝ์์ ์ด๋ฏธ์ง ์ต์ ํ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋์์ต๋๋ค. ํ์ฌ๋ 250๊ฐ์ ์๋น์ค์์ ์ต์ ํ๋ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋์์ต๋๋ค. SSR์ ๋ฌผ๋ก SSG ๋ฐ CSR, ๊ทธ๋ฆฌ๊ณ Next.js๊ฐ ์๋ ํ๊ฒฝ์์๋ ์ด๋ฏธ์ง ์ต์ ํ ๋ง๋ฒ์ ์ฌ์ฉ ์ค์ ๋๋ค.
๋น๋์ค ์ธ๋ค์ผ ๋ง๋ฒ
Video ํ๊ทธ์ ์ธ๋ค์ผ ์์ฑ
๋ค์์ผ๋ก ๋น๋์ค ์ธ๋ค์ผ ๋ง๋ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. video
ํ๊ทธ๋ฅผ ์ฌ์ฉํ ๋ ์๋์ ๊ฐ์ด poster ์์ฑ์ ์ฌ์ฉํ์ฌ ๋น๋์ค๊ฐ ๋ก๋ฉ๋ ๋ ๋ณด์ฌ์ค ์ธ๋ค์ผ ์ด๋ฏธ์ง๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
์ด ์์ฑ์ ์ฌ์ฉํ์ฌ ์ธ๋ค์ผ์ ์ค์ ํ๋ ค๋ฉด ์์์ ๋ง๋ค๊ณ ์ด๋ฏธ์ง๋ฅผ ๋ฝ์๋ธ ๋ค์, ์ด๋ฏธ์ง๋ฅผ ์ ๋ก๋ํ๋ ์์ ์ด ํ์ํฉ๋๋ค. ๋ค์ ๋งํด ์ค์ ๋ก ์ ๋ก๋๋ ์ฃผ์๋ฅผ ๊ธฐ์ค์ผ๋ก poster ์์ฑ์ ์ฃผ์๋ฅผ ์ ๊ณ ์ค์ ์๋น์ค ๋ฐฐํฌ๋ฅผ ํด์ผ ํฉ๋๋ค. ์ด๋ฐ ์์ ์ ์์ฐ์ฑ์ ๋จ์ด๋จ๋ฆฌ๊ณ ๊ฝค๋ ๊ท์ฐฎ์ ์์ ์ผ ์ ์์ต๋๋ค.
์ธ๋ค์ผ ์์ฑ ์ค์ ์ ์ํ ๋ฌธ์ ํด๊ฒฐํ๊ธฐ
์์ ๊ฐ์ด poster ์์ฑ ์ค์ ์ ์ํ ๋นํจ์จ์ ์ธ ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ์ด๋ค ๊ฒ์ด ์์๊น์? ์ธ๋ค์ผ ์ด๋ฏธ์ง๋ฅผ ์ค์๊ฐ์ผ๋ก ์์ฑํด ์ฃผ๋ ์๋ฒ๋ฅผ ์๊ฐํด ๋ดค์ต๋๋ค. ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์ํ๋ ํน์ ์๊ฐ๊ณผ ํจ๊ป ๋น๋์ค ์ฃผ์๋ฅผ ๋ฃ์ผ๋ฉด ํด๋น ์๊ฐ์ ๋ง๋ ํ๋ ์์ ๋์ ์ผ๋ก ์์ฑํด ์ฃผ๋ ์๋ฒ์ ๋๋ค.
์ด ์์ด๋์ด๋ฅผ ํตํด ๋นํจ์จ์ ์ธ ์์ ์์ด ๋์์์ ์ ๋ก๋ํจ๊ณผ ๋์์ ์ธ๋ค์ผ์ ์ฌ์ฉํ ์ ์๊ฒ ํด๊ฒฐํ ์ ์์ต๋๋ค. ์ธ๋ค์ผ์ ๋ฐ๊พธ๊ณ ์ถ์ ๋๋ ์ธ๋ค์ผ ์ด๋ฏธ์ง ์ ๋ก๋ ๊ณผ์ ์์ด ์๊ฐ ํ๋ผ๋ฏธํฐ๋ง ๋ฐ๊พธ๋ฉด ์ธ๋ค์ผ์ด ๊ต์ฒด๋๋๋ก ํ ์ ์์ต๋๋ค.
๋์์์์ ์ธ๋ค์ผ ์ด๋ฏธ์ง๋ฅผ ์บก์ณํ์ฌ ์๋ฒ์ ์ ๋ก๋ํ๊ณ , ์ ๋ก๋๋ ์ด๋ฏธ์ง๋ฅผ poster ์์ฑ์ ๋งค๋ฒ ์ง์ ํด์ผ ํ๋ ๋นํจ์จ์ ์ธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๋ ๋ฒ์งธ ๋ง๋ฒ์ด์์ต๋๋ค.
ํด๋ฆฌํ ๋ง๋ฒ
์ธ ๋ฒ์งธ๋ก ์๊ฐ๋๋ฆด ๋ง๋ฒ์ ํด๋ฆฌํ ๋ง๋ฒ์ ๋๋ค. ์ธํฐ๋ท ํ๊ฒฝ์๋ ๋ค์ํ ๋ธ๋ผ์ฐ์ ๋ค์ด ์กด์ฌํ๊ณ , ํน์ ๋ธ๋ผ์ฐ์ ์์๋ ์ง์๋์ง ์๋ ๊ตฌํ์ฒด๋ค๋ ๊ฐํน ์กด์ฌํฉ๋๋ค. ๋ํ์ ์ผ๋ก ์ธํฐ๋ท ์ต์คํ๋ก๋ฌ 11์์๋ Promise ๊ฐ์ฒด๋ฅผ ์ง์ํ์ง ์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์์๊น์?
ํด๋ฆฌํ ์ฌ์ฉ
๋ํ์ ์ธ ๋ฐฉ๋ฒ์ ํด๋ฆฌํ์ ์ด์ฉํ๋ ๊ฒ์ ๋๋ค. ํด๋ฆฌํ์ด๋, ์๋์ ๊ฐ์ด ๋น ๊ตฌํ์ฒด๋ฅผ ์ฑ์์ฃผ๋ ์คํฌ๋ฆฝํธ๋ผ๊ณ ์ดํดํ ์ ์์ต๋๋ค.
ํด๋ฆฌํ์ ๊ฐ์ฅ ์ฝ๊ฒ ์ฌ์ฉํ๋ ค๋ฉด ๋ฐ๋ฒจ์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค. @babel/preset-env๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ ๊ฐ์ด ์ธํฐ๋ท ์ต์คํ๋ก๋ฌ 11์ ๊ธฐ์ค์ผ๋ก ์ต์ ์ง์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ค์ ํ์ฌ ๊ตฌํ์ฒด๋ฅผ ์ฑ์ธ ์ ์์ต๋๋ค.
ํด๋ฆฌํ์ ๋ฌธ์ ์ ๊ณผ ํด๊ฒฐ ๋ฐฉ์
ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ ์ต์ ๋ธ๋ผ์ฐ์ ์์ ์ฐ๋ฉด ๋จ์ ์ด ์กด์ฌํฉ๋๋ค. ์ต์ ๋ธ๋ผ์ฐ์ ์์๋ ์ด๋ฏธ ์ง์ํ๋ ๊ตฌํ์ฒด๋ค์ ๋ด๋ ค๋ฐ๊ฒ ๋์ด ์ฌ์ฉ์, ์๋น์ค ์ ๊ณต์, CDN ๋ชจ๋์๊ฒ ๋ถํ์ํ ๋คํธ์ํฌ ๋น์ฉ์ด ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ์ธ ํด๋ฆฌํ ์๋ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ํด๋ฆฌํ ์๋ฒ์์๋ ์ ์ ์์ด์ ํธ์ ์ ๋ณด๋ฅผ ์ฝ๊ณ ํด๋น ์ ์ ์ ๋ธ๋ผ์ฐ์ ์ ์ด๋ค ํด๋ฆฌํ ๊ตฌํ์ฒด๊ฐ ํ์ํ์ง ์ฒดํฌํ์ฌ ํ์ํ ๊ตฌํ์ฒด๋ง ์ ์กํ๋ ์์ ์ ์ํํฉ๋๋ค.
์ด๋ฐ ์์ด๋์ด๋ ์ ํฌ๋ฟ ์๋๋ผ ๋ค์ํ ํด๋ผ์ฐ๋ ์๋น์ค์๋ ์กด์ฌํฉ๋๋ค. ๋ํ์ ์ผ๋ก polyfill.io๋ผ๋ ์๋น์ค๊ฐ ์์ต๋๋ค. ํ์ง๋ง ๋ช ๋ฌ ์ ์ ์ด๋ค ๊ธฐ์ ์ ์ธ์๋๊ณ ๋์ ๋ณด์ ์์ ์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ณ , ํด๋น ์๋น์ค๋ฅผ ์ด์ฉํ ํธ์ํฐ ๋ฑ์์ ํ๋ฉด์ด ์ ๋๋ก ๋ณด์ฌ์ง์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. polyfill.io์ ์ฌ์ดํธ๋ ์ ๊ทผ ๋ถ๊ฐ๋ฅํ ์ฌ์ดํธ๊ฐ ๋์ด๋ฒ๋ ธ์ต๋๋ค.
ํ ์ค์์๋ ์ ์ด๋ถํฐ ๋ค๋ฅธ ์๋น์ค์ ๋ถํ์คํ ์์ ์ฑ์ ์ฐ๋ฆฌ ์๋น์ค๋ฅผ ๋งก๊ธฐ๊ณ ์ถ์ง ์์์ต๋๋ค. ์กฐ๊ธ ๋ ๋ ๋ฆฝ์ ์ด๊ณ ์ธ๋ถ์ ์์กดํ์ง ์๋ ์์ ์ ์ธ ์๋น์ค๋ฅผ ์ด์ํ๊ณ ์ถ์๊ณ , ์์ฒด์ ์ธ ์๋น์ค๋ฅผ ๊ตฌํํ๊ฒ ๋์์ต๋๋ค.
์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํ๋์๋์ง ์ดํด๋ณผ๊น์? ์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด ์ค๋ฆฌ์ง๋ ๋๋ค๋ฅผ ๋ฐ๋ผ๋ณด๊ณ ์๋ CDN์ ํตํด์ ๊ตฌํ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.ย ๋๋ค์์ ์ ์ ์์ด์ ํธ ํค๋๋ฅผ ์ฌ์ฉํด์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์๊ณ , ๊ทธ ์ ์ ์์ด์ ํธ ํค๋๋ฅผ ํ์ฑํด์ ์ด๋ค ๊ตฌํ์ฒด๋ฅผ ํฌํจํ ์ง ํ์ธํ๊ณ , CDN์ ํตํดย ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์ ๋ธ๋ผ์ฐ์ ์๊ฒ ์ ๋ฌํด์ค๋๋ค.
์ด๋ฐ ํด๋ฆฌํ ๋ง๋ฒ์ผ๋ก ์ธํด ์ธํฐ๋ท ์ต์คํ๋ก๋ฌ์์๋ 732 KB์ ๋ฒ๋ค์ ๋ด๋ ค๋ฐ๋ ๋ฐ๋ฉด ํฌ๋กฌ์ด๋ ์ฌํ๋ฆฌ์์๋ ๊ฑฐ์ ๋น ํจ์๋ง ๋ด๋ ค๋ฐ๋ ์ ๋์ ์์ค์ผ๋ก ๊ฐ๋ฒผ์ด ๋ฒ๋ค๋ง ์ ์ก๋ฐ์ ์ ์์์ต๋๋ค.
์ด ๋ด์ฉ์ ์ด๋ฒ ๊ธ๋ฟ๋ง ์๋๋ผ ํ ์ค ํ ํฌ ๋ธ๋ก๊ทธ์ ๋๋ํ๊ฒ ๋ธ๋ผ์ฐ์ ํด๋ฆฌํ ๊ด๋ฆฌํ๊ธฐ๋ผ๋ ๋ด์ฉ์ผ๋ก ์์ฑ๋์ด ์์ผ๋, ํ์ํ ๋ถ๋ค์ ์ด ๊ธ์ ์ฝ์ด๋ณด๊ณ ์์ธํ ๊ตฌํ์ ๋ฐ๋ผํด ๋ณด์๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
์ค์ผ๋ ํค ๋ง๋ฒ
๋ค์์ ์ค์ผ๋ ํค ๋ง๋ฒ์ ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ด๋ค ์นํ์ด์ง์ ํ๋ฉด์ ๋์ธ ๋๋ ๋ฐ๋์ ํ์ํ ๊ตฌ๊ฐ์ด ์์ต๋๋ค. ๋ฐ๋ก ๋คํธ์ํฌ ๊ตฌ๊ฐ์ ๋๋ค. ๋คํธ์ํฌ ์ฐ๊ฒฐ์ด ๋์ด ์์ง ์๋ค๋ฉด ํ์ด์ง๋ฅผ ๋์ฐ๊ธฐ๋ ์ด๋ ค์ธ ๊ฒ์ ๋๋ค. ์ค์ ๋ก SSR ์๋ฒ์์ ์ด ์น๋ทฐ์ ํ์ด์ง๋ฅผ ๋ด๋ ค๋ฐ๋ ์๊ฐ๊น์ง ์น๋ทฐ์๋ ์๋ฌด๋ฐ ํ๋ฉด์ด ๋จ์ง ์์ต๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ์ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ด ๋ฐ๋ก ์ค์ผ๋ ํค์ ๋๋ค.
Loadingโฆ
๋คํธ์ํฌ๋ฅผ ํตํด ํ์ด์ง๋ฅผ ๋ด๋ ค๋ฐ์์ ๋ ๋๋ง ํ๊ธฐ ์ ์ ํ๋ฉด์ ๋ณด์ฌ์ค ์ ์๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ต๋๋ค. ๋น ํ๋ฉด์ ๋ณด์ฌ์ค ์๋ ์๊ณ , ๋น๊ธ๋น๊ธ ๋์๊ฐ๋ ๋ก๋ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ค ์๋ ์์ต๋๋ค. ํ์ง๋ง ์ฌ์ฉํ๋ ์น์๋น์ค์ ๋ชจ๋ ํ์ด์ง์์ ๋์ผํ ๋ก๋๋ฅผ ๋ณด๊ฒ ๋๋ฉด ์ฌ์ฉ์ ๊ฒฝํ์ด ์ข์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
์ค์ผ๋ ํค
์ ๋ ์ด๋ฐ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ๊ธฐ ์ํด ์ ์ํ ํ์ด์ง์ UI ํํ๋ฅผ ๋ฏธ๋ฆฌ ์๊ณ , ํด๋น UI ํํ์ ์ค์ผ๋ ํค์ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ์ต๋๋ค. ์น๋ทฐ๊ฐ ๋ก๋ฉ๋๋ ๋์ ์ด ์ค์ผ๋ ํค UI๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ ๋๋ค. ์ค์ผ๋ ํค ์๋ฒ๋ฅผ ๋ฐ๋ก ์คํํ์ฌ ์ ์ํ URL์ ํ์ฑ ํด์ ํ์ฑ ํ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฏธ๋ฆฌ ์ ์ํ ์ค์ผ๋ ํค ํ์ ์ ํ์ด์ง์ ๋ง๊ฒ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ์์ ๋๋ค.
๊ทธ๋ผ ๊ฐ๋จํ ์์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์๋์ ๊ฐ์ด ํน์ JSON์ ํน์ ์ฃผ์์ ๋ฐ๋ผ ์ค์ผ๋ ํค ํ์ ์ ์ ์ํด๋ ์ ์์ต๋๋ค. ์ด ํ์ ์ ํ์ฉํด โshopping/์ํ๋ชฉ๋กโ์ ์ ์ํ์ ๋๋ list-only๋ผ๋ ์ค์ผ๋ ํค์ ๋ณด์ฌ์ฃผ๊ณ , โtossfeed/๋ชฉ๋กํ์ด์งโ์ ์ ์ํ์๋๋ card-only๋ผ๋ ์ค์ผ๋ ํค์ ๋ณด์ฌ์ค ์ ์์ต๋๋ค.
์ด์ฒ๋ผ ๋ค์ํ ์ค์ผ๋ ํค ํ์ ์ ๋ฏธ๋ฆฌ ๊ตฌํํด๋๊ณ ํ์ด์ง์ ๋ง๋ ์ค์ผ๋ ํค์ ๋ณด์ฌ์ค๋ค๋ฉด ์ ์ ๋ ๋๊ฐ์ ๋ก๋ฉ ํ๋ฉด์ ๋ณด์ง ์๊ณ ์ํฉ์ ๋ง๋ ์ค์ผ๋ ํค์ ๋ณด๊ฒ ๋์ด ์ฌ์ฉ์ ๊ฒฝํ์ด ์ข์์ง ์ ์์ต๋๋ค.
์ง๊ธ๊น์ง ํ ์ค์ 7๊ฐ์ง ํ๋ซํผ ์๋ฒ ๋ง๋ฒ ๊ฐ์ด๋ฐ 4๊ฐ์ง๋ฅผ ์์๋ดค์ต๋๋ค. ๋ค์ ๊ธ์์๋ 5~7๋ฒ์งธ ๋ง๋ฒ์ธ ์ ์ , ์คํ ๊ทธ๋ํ, ์น ๋ชจ๋ ๋ง๋ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ๋ํ ์ด ๊ณผ์ ์์ ๊ฒช์ ์ํ์ฐฉ์ค๋ ๊ณต์ ํ๋ ค๊ณ ํฉ๋๋ค.
์ ์ ๋ง๋ฒ
ํ ์ค ์ฑ์ ์ฌ์ฉํ ๋ ์ ์ ๋ณ๋ก ๋ค์ํ UI๋ฅผ ์ ์ฉํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋คํฌ ํ ๋ง์ ๋ผ์ดํธ ํ ๋ง, ํฐ ๊ธ์จ ๋ชจ๋, ๊ทธ๋ฆฌ๊ณ ๊ธฐ๊ธฐ๋ณ๋ก ๋ค๋ฅธ ์ธ์ดํ ์์ด๋ฆฌ์ด์ธ ๋ ธ์น UI ๋ฑ์ด ์์ต๋๋ค. ์ด๋ ๊ฒ ์ ์ ๋ง๋ค, ๊ธฐ๊ธฐ๋ง๋ค ๋ค๋ฅธ UI์ ์ด๋ป๊ฒ ๋์ํ ์ ์์๊น์?
๋ค์ดํฐ๋ธ ์ฑ ์ ๋ณด
์์ ์ค๋ช ํ ๊ธฐ๊ธฐ๋ณ ์ ๋ณด๋ ๋ค์ดํฐ๋ธ ์ฑ์์๋ง ์ป์ ์ ์๋ ์ ๋ณด์ ๋๋ค. ์ฆ, ๋ค์ดํฐ๋ธ ์ฑ์์ ์ ๋ฌํ๋ ์ ๋ณด๋ค์ ํ์ฉํด ์นํ์ด์ง์์ ์ด๋ฅผ ์ฝ์ด์ ๋์ํ๋ ๋ฐฉ์์ด ํ์ํฉ๋๋ค.
์ ๊ทธ๋ฆผ์ ์์์ ๊ฐ์ด HTML์ ๋ก๋ํ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ์ CSS๋ฅผ ๋ก๋ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ JS ์ฑ ๋ธ๋ฆฟ์ง๋ฅผ ํธ์ถํ์ฌ ๋ค์ดํฐ๋ธ ์ฑ์ผ๋ก๋ถํฐ ์ ๋ณด๋ค์ ๋์ ์ผ๋ก ๋ถ๋ฌ์ค๊ณ , ์ด ์ ๋ณด๋ฅผ ํ ๋๋ก ๋์ ์ผ๋ก CSS๋ฅผ ๊ทธ๋ฆฌ๊ณ ์ ์ฉํ์ฌ ๋ ๋๋ง ํ ์ ์์ต๋๋ค.
ํ์ง๋ง ํ ์ค์์๋ HTML, ์๋ฐ์คํฌ๋ฆฝํธ, CSS๊ฐ ๋ชจ๋ ๋ก๋๋๊ณ ์ฑ ๋ธ๋ฆฟ์ง๋ฅผ ํธ์ถํ๋ ๊ณผ์ ๊น์ง ์๊ฐ์ด ๋๋ฌด ๋๋ฆฌ๋ค๊ณ ์๊ฐํ์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์์ด๋์ด๋ ์ด๋ค ๊ฒ์ด ์์๊น์?
๋์ CSS Variables
๋ค์ํ ์์ด๋์ด๋ฅผ ์๊ฐํด ๋ณด์๋๋ฐ์, ๊ทธ ์ค ๋ํ์ ์ธ ๋ฐฉ๋ฒ์ด ๋์ CSS Variable์ด๋ผ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ ์ ์์ด์ ํธ๋ฅผ ํตํด์ ๊ธฐ๊ธฐ๋ณ ์ ๋ณด๋ฅผ ๋๊ฒจ์ฃผ๋ฉด ์ ์ ์๋ฒ์์ CSS Variables๋ฅผ ๋์ ์ผ๋ก ์ ๋ฌํด ์ฃผ๋ ๋ฐฉ์์ ๋๋ค.
๊ฐ๋จํ ์์๋ฅผ ๋ณด๊ฒ ์ต๋๋ค. ๋ค์ดํฐ๋ธ ์ฑ์์ ์น๋ทฐ๋ฅผ ์ค์ ํ ๋ ์๋์ฒ๋ผ ์ ์ ์์ด์ ํธ๋ฅผ ์ปค์คํ ํ ์ ์์ต๋๋ค. ์๋ ์ด๋ฏธ์ง์ ๋ ธ๋์ ๋ถ๋ถ์ด ๋ฐ๋ก ์ ์ ์์ด์ ํธ ๋ค์ ๋ถ์ธ ์ปค์คํ ์ ์ ์์ด์ ํธ์ ๋๋ค. SafeArea์ 4๊ฐ์ ์ซ์๋ฅผ ์ ์๊ณ , ColorPreference์ dark๋ผ๋ ๋ฌธ์์ด์ ์ ์ด๋์ต๋๋ค. ์ด ์ ๋ณด๋ค์ ํตํด SafeArea์ ์์น๊ฐ ๋ช์ธ์ง, ๊ทธ๋ฆฌ๊ณ ColorPreference๋ ๋คํฌ์ธ์ง ๋ผ์ดํธ์ธ์ง๋ฅผ ๋ฏธ๋ฆฌ ์ ์ ์์ต๋๋ค.
์ด๋ฌํ ์ ๋ณด๋ค์ ํ ๋๋ก ์ ์ ์๋ฒ์์๋ ์๋ ์ด๋ฏธ์ง์ ๊ฐ์ด CSS Variables๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํด์ ๋ธ๋ผ์ฐ์ ์๊ฒ ๋๊ฒจ์ค ์ ์์ต๋๋ค.
์ ์ ์๋ฒ ๋๋ถ์ HTML, ์๋ฐ์คํฌ๋ฆฝํธ, CSS๋ฅผ ๋ก๋ํ ๋ค์ JS ์ฑ๋ธ๋ฆฟ์ง๋ฅผ ํธ์ถํ ํ์ ์์ด ๋ฐ๋ก CSS๋ฅผ ์ ์ฉํด์ ํ๋ฉด์ ๋ณด์ฌ์ค ์ ์์์ต๋๋ค. ์ฆ, ์๋ฐ์คํฌ๋ฆฝํธ ์์กด์ฑ ์์ด CSS ๋ก๋ ์งํ ๋ฐ๋ก ์ ์ฉ์ด ๋ ์ ์์ต๋๋ค. ๋ก๋ ์์กด์ฑ ์์ด ์์ฑ๋ CSS๋ฅผ ๋ด๋ ค๋ฐ๊ธฐ ๋๋ฌธ์ ํ๋ฉด์ด ๊น๋นก๊ฑฐ๋ฆฌ๋ ๋ฌธ์ ์์ด ํ๋ฉด์ด ๋จ์๋ง์ ๋คํฌ ํ ๋ง, ํฐ ๊ธ์จ ๋ชจ๋, ๋ค์ดํฐ๋ธ ๋ ธ์น UI๊น์ง ๋ชจ๋ ๋์ํ ์ ์์์ต๋๋ค.
์คํ ๊ทธ๋ํ ๋ง๋ฒ
๋ค์์ ์คํ ๊ทธ๋ํ ๋ง๋ฒ์ ๋๋ค. ์ง๊ธ๋ถํฐ ์ค๋ช ํ ๋ง๋ฒ์ ์ฑ๊ณผ ๊ด๋ จ ์๋ ๋ค๋ฅธ ์ธ๋ถ์ ๋ง๋ฒ์ด๋ผ๊ณ ๋ณด์๋ฉด ๋ฉ๋๋ค. ์ด ๋ง๋ฒ์ ์ ์ ๋ค๋ผ๋ฆฌ URL์ ์๋ก ๊ณต์ ํ ๋ ๋จ๋ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์ด๋ฏธ์ง์ ๊ด๋ จ์ด ์์ต๋๋ค. ์๋์ ๊ฐ์ด ํ ์ค ํ ํฌ ๋ธ๋ก๊ทธ์ URL์ ํธ์ํฐ์ ๊ณต์ ํ๋ฉด ์๋์ ๊ฐ์ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์ด๋ฏธ์ง๊ฐ ๋จ๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ก ์ด๋ฐ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์ธ๋ค์ผ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ด ๋ฐ๋ก ์คํ ๊ทธ๋ํ ๋ง๋ฒ์ ๋๋ค.
URL์ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๊ฐ ๋ฐ๋๋ค๋ฉด?
๋ง์ฝ ์์ ๊ธ์ ์ ๋ชฉ์ด ๋ฐ๋๋ค๋ฉด ์ด๋ค ๊ณผ์ ์ด ํ์ํ ๊น์? ์๋ง๋ ์ค์ ํด๋ ์ด๋ฏธ์ง๋ฅผ ๊ต์ฒดํด์ผ ํ ๊ฒ์ ๋๋ค. ์ ๋ชฉ์ ์์ ํ๊ณ , ์ด๋ฏธ์ง๋ฅผ ๋ค์ ๋ง๋ค์ด ๋ด๋ ค๋ฐ๊ณ , CDN์ ์ ๋ก๋ํ๊ณ , ์ ๋ก๋ํ ์ด๋ฏธ์ง๋ฅผ ๋ค์ ์ ์ฉ์์ผ์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ๋ฐ์ํฉ๋๋ค.
์ ๋ชฉ๊ณผ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ฅผ ์กฐํฉํ์ฌ ํด๊ฒฐํ๊ธฐ
์ด๋ฐ ๋ฒ๊ฑฐ๋ก์์ ํด๊ฒฐํ๊ธฐ ์ํด ์ ๋ชฉ๊ณผ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ฅผ ์กฐํฉํ๋ฉด ์ด๋จ๊น์? ์ ๋ชฉ์ ๋ฐ๋ผ ์ด๋ฏธ์ง๋ฅผ ๋์ ์ผ๋ก ๋ถ๋ฌ์ค๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด ๋ณด๊ฒ ์ต๋๋ค.
์ํฐํด ์ ๋ชฉ์ธ โ๋๋ํ๊ฒโฆโ์ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ฅผ ์กฐํฉํด ๊ทธ๋ฆผ์ ์ค๋ฅธ์ชฝ๊ณผ ๊ฐ์ ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ฆ, ์ํฐํด ์ ๋ชฉ์ ํ์ดํ ๋ณ์๋ฅผ ํตํด ์ ๋ฌํ๊ณ , ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง๋ URL์ ์ ๋ฌํ ๋ค์ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ์ด๋ฒ์ ์์ธํ ๊ตฌํ ๋ฐฉ๋ฒ์ ์๊ฐํ์ง ์๊ฒ ์ต๋๋ค. ๋์ ์ด ๋์์ ๊ตฌํํ๋ ํํธ, Headless Browser Puppeteer Screenshots๋ฅผ ์ฐพ์๋ณด์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
์ด ๋ง๋ฒ์ ์ฌ์ฉํ๋ฉด, ์ํฐํด ์ ๋ชฉ์ด ๋ฐ๋ ๋๋ง๋ค ์๋ก์ด ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ด ์ ๋ก๋ํ ํ์ ์์ด, ํ์ดํ ํ๋ผ๋ฏธํฐ์ URL๋ง ์์ ํ๋ฉด ์ธ๋ค์ผ์ ์์ ํ ์ ์์ต๋๋ค. ํ์ดํ ๋ณ์๊ฐ ์๋ฒ๋ก๋ถํฐ ๋ฐ๋ ์ ๋ณด๋ผ๋ฉด, ์๋ฒ์์ ํ์ดํ ๋ณ์๋ง ์์ ํ๋ฉด ์ฌ์ค ํ๋ก ํธ์๋์์๋ ๊ฑด๋๋ฆด ๊ฒ ์์ด ์ธ๋ค์ผ ์ด๋ฏธ์ง๋ฅผ ์์ ํ ์ ์์ต๋๋ค.
์น ๋ชจ๋ ๋ง๋ฒ
๋๋์ด ๋ง์ง๋ง ๋ง๋ฒ์ธ ์น ๋ชจ๋ ๋ง๋ฒ์ ๋๋ค. ์น ๋ชจ๋์ ๋ํด์๋ ์์ํ์ค ๊ฑฐ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์น ๋ชจ๋์ ๋์์ธ ์์คํ ๊ณผ ๋์์ธ ํด์ ์ํฅ๋ ฅ์ ๋ผ์น๋ ์์์ ๋๋ค. ์น ๋ชจ๋์ ๋ํด ์ค๋ช ํ๊ธฐ ์ ์ ์ฐ์ ํ ์ค์ ๋์์ธ ํด์ ๋ํด ์ค๋ช ๋๋ฆฌ๊ณ ์ถ์ต๋๋ค.
Framer Code Component
ํ ์ค ๋์์ด๋๋ถ๋ค์ด ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ๊ฐ๋ ฅํ ๋์์ธ ํด์ Framer์ ๋๋ค. Framer์ ๊ฐ์ฅ ๋ํ์ ์ธ ๊ธฐ๋ฅ ์ค ํ๋๋ Framer Code Component์ ๋๋ค. ์ด ๊ธฐ๋ฅ์ ํ์ฉํ๋ฉด ์ค์ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ ธ์์ UI๋ก ๋ณด์ฌ์ค ์ ์์ต๋๋ค. ์ฆ, ์ค์ ๋ก ๋์์ธ ์์คํ ์์ ์์ฑํ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ฅผ Framer์ ๋ถ๋ฌ์์ ๋์์ธ์ ํ์ธํ ์ ์์ต๋๋ค.
Framer Code Component์ ์ ์ฝ ์ฌํญ
๋ค๋ง ์ด ๊ธฐ๋ฅ์์ ํ ์ค ๋์์ธ ์์คํ (TDS)์ ๊ฐ์ ์ธ๋ถ ๋์์ธ ์์คํ ์ฝ๋๋ฅผ ๊ฐ์ ธ์์ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์ํ ์ ์ฝ๋ค์ด ์์ต๋๋ค. ๋ํ์ ์ผ๋ก Framer์์ NPM Import ๊ธฐ๋ฅ์ ์คํ์ ๊ธฐ๋ฅ์ด๊ธฐ ๋๋ฌธ์ ์ํฉ์ ๋ฐ๋ผ ์ ๋๋ก ๋์ํ์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
๋ค๋ฅธ ์ ์ฝ์ ๋ฐ๋ก ES ๋ชจ๋ ๊ธฐ๋ฐ ์ฝ๋๋ง ๊ฐ์ ธ์ฌ ์ ์๋ค๋ ์ ์ ๋๋ค. ์ด ์ ์ฝ์ ํ ์ค ํ์ ๊ฐ์ฅ ํฐ ์ ์ฝ ์ฌํญ์ด์์ต๋๋ค. ์๋ํ๋ฉด TDS๋ CommonJS ๊ธฐ๋ฐ์ผ๋ก ๋ฒ๋ค๋ง ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์ TDS๋ฅผ Code Component์์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ์ต๋๋ค.
์ ์ฝ ์ฌํญ ํด๊ฒฐํ๊ธฐ
์๋ ๊ทธ๋ฆผ์ ํ ์ค์์ ์ด๋ฅผ ํด๊ฒฐํ ๊ตฌ์กฐ์ ๋๋ค. TDS์ Framer Code Component ์ฌ์ด์ TDS ์น ๋ชจ๋ (ES ๋ชจ๋)์ ๋ณผ ์ ์์ต๋๋ค. ํ ์ค์์๋ ์ค๊ฐ์ TDS ์น ๋ชจ๋์ ๋ฐฐ์นํ์ฌ ์ด๋ฅผ ํด๊ฒฐํ์ต๋๋ค. ์น ๋ชจ๋์ ๋ํด ์์ธํ ์์๋ณผ๊น์?
์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด Framer Code Component๋ฅผ ์ฌ์ฉํ ๋ URL์ ๊ธฐ์ค์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฌ์ฌ ์ ์์ต๋๋ค. HTTPS ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ์์กด์ฑ์ ๊ฐ์ ธ์ค๊ณ ์๋ ๋ถ๋ถ์ด ๋ฐ๋ก ์น ๋ชจ๋์ ๋๋ค. URL Imports, HTTPS Imports, Network Imports์ ๊ฐ์ ํค์๋๋ฅผ ๋ค์ด๋ณธ ์ ์๋์? ์ด๋ฐ ๋ฐฉ๋ฒ์ ํตํด ๋ชจ๋์ ์ํฌํธ ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
esm.sh
์ ๊ฐ์ ํด๋ผ์ฐ๋ ์น ๋ชจ๋ ์๋น์ค๊ฐ ๋ํ์ ์ธ ์์์
๋๋ค. esm.sh
์์ React ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ์์ ์ปดํฌ๋ํธ๋ฅผ ๊ทธ๋ฆด ์ ์์ต๋๋ค.
ES ๋ชจ๋๊ณผ ์น ๋ชจ๋์๋ ์ฐจ์ด์ ์ด ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ ES ๋ชจ๋์ node_modules
๋ฅผ ํตํด ์์กด์ฑ์ ์ํฌํธ ํฉ๋๋ค. ๋ฐ๋ฉด ์น ๋ชจ๋์ CDN์ ํตํด ์ ์ก๋ฐ์ ํ์ผ์ ํตํด ์์กด์ฑ์ ์ํฌํธ ํฉ๋๋ค. Framer์์๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ์น ๋ชจ๋์ ์ด์ฉํด์ CDN์ ํตํด ์น ๋ชจ๋์ ์ํฌํธ ํฉ๋๋ค.
๋ฐ๋ผ์ ํ ์ค UX ํ์์๋ ๋์์ธ ์์คํ ์ ์๋ ์ฝ๋๋ค์ ๋์์ธ ํ์ ๋๊ธธ ๋, ์น ๋ชจ๋์ ํตํด์ Framer์ ์ ์ฉํ๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค.
์น ๋ชจ๋ ๋ง๋ฒ์ ํตํด ํ ์ค ๋์์ธ ์์คํ ์ ์ฝ๋ ๋ฒ ์ด์ค๋ ๊ทธ๋๋ก ๊ฐ์ ธ๊ฐ์ ์๋น์ค ์ฝ๋์ ์ ํ ์ํฅ์ ์ฃผ์ง ์๊ฒ ๋์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ Framer Code component๋ฅผ ์ฌ์ฉํ ์ ์์ด์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋์ ๋์์ธ ์์คํ ๊ณผ ๋์ผํ ์ผ๊ด์ฑ ์๋ ๋์์ธ์ ์ฌ์ฉํ๋ฉด์ ๊ฐ๋ฐ์ ๋น ๋ฅด๊ฒ ํ ์ ์๋ ์์ฐ์ฑ๊น์ง ์ป์ ์ ์์์ต๋๋ค.
์น ๋ชจ๋์ ์ ๊ณตํ๋ ํด๋ผ์ฐ๋ ์๋น์ค๋ ๋ค์ํฉ๋๋ค. ์์์ ์ดํด๋ณธ esm.sh
๋ฅผ ๋น๋กฏํด esm.run
, skypack.dev
๋ฑ์ด ๋ํ์ ์
๋๋ค. ํ์ง๋ง ํ ์ค์์๋ ์ด ์๋น์ค๋ฅผ ๊ทธ๋๋ก ์ฐ๊ธฐ๋ ์ด๋ ค์ ์ต๋๋ค. self-hosted๊ฐ ๋ฏธ์ ๊ณต๋์๊ณ , ์ ๊ณต์ด ๋๋๋ผ๋ esm ํ์ค์ ์ค์ํ์ง ์์๊ธฐ ๋๋ฌธ์ export map์ด ์ ๋๋ก ์๋ํ์ง ์๋ ๋ฌธ์ ๋ ์๊ฒผ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ช
ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋์ํ๊ธฐ ์ํด ํ๋์ฝ๋ฉ์ผ๋ก ๋์๋ ๋ถ๋ถ๋ ์์์ต๋๋ค.
์ด๋ฐ ๋ฌธ์ ์ ์ผ๋ก ์ธํด ํ ์ค๋ง์ ์น ๋ชจ๋ ์๋ฒ๋ฅผ ๋ง๋ค๊ฒ ๋์๊ณ , ์๋์ ๊ฐ์ด URL๊ณผ ์บ๋ฟ ๋ฒ์ ๊น์ง ๋ช ์ํ์ฌ ์น ๋ชจ๋์ ์ฌ์ฉํ ์ ์๊ฒ ๋์์ต๋๋ค.
์ฐธ๊ณ ๋ก, esm.sh
๋ self-hosted์ ํ๋ผ์ด๋น ๋ ์ง์คํธ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ Go ์ธ์ด ๊ธฐ๋ฐ์ ์คํ์์ค์
๋๋ค. ํ์ฌ ํ ์ค์์๋ esm.sh
๋์
ํ๋ ค๊ณ ๊ฒํ ์ค์
๋๋ค. ์ฌ๋ฌ๋ถ๋ค๋ esm.sh
๋ฅผ ํ์ฉํด ์น ๋ชจ๋ ์๋น์ค๋ฅผ ์ฌ์ฉํด ๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
๊ตฌํ์ ์ํ Cheat Sheet
์ง๊ธ๊น์ง 7๊ฐ์ง ๋ง๋ฒ์ ๋ํด ์์๋ณด์์ต๋๋ค. ์ด๋ฒ ๊ธ์์๋ ์ค์ ๊ตฌํ์ ์ํ ์ฝ๋๋ ๋ด์ฉ์ ์ต๋ํ ๋นผ๊ณ ์ค๋ช ํ๋๋ฐ, ํน์ ์ค์ ๊ตฌํ์ ๋ํ ์ง๋ฌธ์ด ์๊ธธ ์๋ ์์ ๊ฒ ๊ฐ์์ ์๋์ ๊ฐ์ ๋ชฉ๋ก์ ์์ฑํ์ต๋๋ค.
์ค์ ๊ตฌํ์ ์ํด ์ด์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ํ์ฉ์ ํ์ต๋๋ค. ์ ํค์๋๋ฅผ ํ์ฉํ๋ฉด ์ฌ๋ฌ๋ถ๋ ๊ตฌํ์ ํ์ํ ํํธ๋ฅผ ์ป์ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
์ํ์ฐฉ์ค (7๊ฐ์ง ๋ง๋ฒ ์ ๋งํธ)
์ง๊ธ๊น์ง๋ 7๊ฐ์ง ๋ง๋ฒ์ ํฌ๋ง์ฐจ๊ฒ ์๊ฐํ๋ฉด์ ์ด ๋ง๋ฒ๋ค์ ์ฌ์ฉํ๋ฉด ํ๋ก ํธ์๋์ ๋ฒํ๋ฅผ ๊ฑธ ์ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค. ํ์ง๋ง ๋ค์๋ ์ ๋ง ํธ๋ ์กด์ฌํฉ๋๋ค. ๋ฐ๋ก ๋ค์ํ ์ํ์ฐฉ์ค๋ฅผ ๊ฒช์ ๋ด์ฉ์ธ๋ฐ, ํ๋์ฉ ์ค๋ช ๋๋ฆฌ๊ฒ ์ต๋๋ค.
ํด๋ผ์ฐ๋ ์ธํ๋ผ ์ด์คํ์ ์ด๋ ค์
AWS ๋๋ค๋ฅผ ํตํด ์๋น์ค๋ฅผ ๊ตฌํํ ๋ ๋ง์ฝ ๋๋ค ์์ฒด๊ฐ ์ฅ์ ๋ฅผ ์ผ์ผํค๋ฉด ์๋น์ค๋ฅผ ์ด์ํ ์ ์์ ๊ฒ์ ๋๋ค. ํ ์ค๋ ์์ ์ฑ์ด ๊ฐ์ฅ ์ค์ํ ์๋น์ค์ด๊ธฐ ๋๋ฌธ์ AWS์ ์ฅ์ ๊ฐ ๋๋ ์๋น์ค๊ฐ ์ ์์ ์ผ๋ก ๋์ ๋์ด์ผ ํฉ๋๋ค. ์ด๋ฅผ ๋๋นํ๊ธฐ ์ํด ๋ค๋ฅธ ์ ์ฒด์ ์ด์คํ๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค. AWS์ ๊ตฌํ๋ ๋ด์ฉ์ Cloudflare์๋ ๊ตฌํํด๋๋ ๊ฒ์ ๋๋ค.
์ด์คํ๋ฅผ ํตํด ์ฅ์ ๋์์ ํ ์ ์์ง๋ง ์ด๋ก ์ธํด ๋ค์ํ ํด๋ผ์ฐ๋ ์ ๊ณต ์ ์ฒด์ ๋ฐ๋ก ๋ฐฐํฌํด์ผ ํ๊ณ , ๋ก๊ทธ๋ ๋ชจ๋ํฐ๋ง๋ ๋ฐ๋ก ํ์ธํด์ผ ํฉ๋๋ค. ์ฆ, ์ด์ ๋ณต์ก๋๊ฐ ์ฌ๋ผ๊ฐ๋ค๋ ๋จ์ ์ด ์กด์ฌํฉ๋๋ค. ์ด๋ฌํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ํ ์ค์์๋ ์์ฒด์ ์ผ๋ก ์๋ฒ๋ค์ ๊ตฌํํ๊ฒ ๋์ต๋๋ค.
Serverless Node.js ๋ฒ์ ๋ฐ๋ผ๊ฐ๊ธฐ
์ด๋ฏธ์ง ์ต์ ํ ์๋น์ค๊ฐ ์ฒ์ ๋ง๋ค์ด์ง ๋ ์ฌ์ฉํ Node.js์ ๋ฒ์ ์ 14, 16 ์ ๋์์ต๋๋ค. ์ด ๋ฒ์ ์ ์ฌ์ฉํ์ฌ ์๋น์ค๋ฅผ ์ด์ํ๋ค๊ฐ ๋ฐ๋์ ๋ฒ์ ๋ณ๊ฒฝ์ ํด์ผ ํ๋ ์ํฉ์ ๋ง๋๋ฉด ๋ง์ ๋ฒ๊ฑฐ๋ก์์ด ์๊น๋๋ค. AWS์์๋ ํ์ฌ Node.js 16๊ธฐ๋ฐ์ ๋๋ค๋ฅผ ์์ ํ๋ ๊ฒ์กฐ์ฐจ ํ์ฉํ์ง ์์ต๋๋ค. Node.js 16์ ๋๋ฌด ์ค๋๋ ๋ฒ์ ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์ ์ด์ ์ค์ธ ์๋น์ค์ ์ฝ๋ ๋ฒ ์ด์ค๋ฅผ ๊ฐ์ ๋ก ์ฌ๋ ค์ ๋น๋ํ ํ ์๋ง์ ๋ฒ์ ์ผ๋ก ๋ฐฐํฌ๋ฅผ ํด์ผ ํฉ๋๋ค.
์ด๋ฐ ๊ณผ์ ์ ๊ฐ๋นํ๊ธฐ ํ๋ ๋ฆฌ์คํฌ๊ฐ ๋ ์๋ ์์ต๋๋ค. ์ด๋ ๊ฒ ๋ฒ์ ์ ๋ํ End-Of-Life๋ฅผ ๋ง๋๊ฒ ๋๋๋ผ๋ ํด๋ผ์ฐ๋ ์ ๊ณต ์ ์ฒด๊ฐ ์๋ ํ ์ค ํ ์ค์ค๋ก ์ฃผ๋๊ถ์ ๊ฐ์ ธ๊ฐ๊ณ ์ถ์์ต๋๋ค. ์ง์ ๊ตฌํํ ์๋ฒ๋ฅผ ํตํด ๊ฐ์ ์ ๋ฐ์ดํธ๋ฅผ ์ต๋ํ ํผํ๊ณ ์๊ฐ์ด ์ฌ์ ๋ก์ธ ๋ ์ฐจ๊ทผ์ฐจ๊ทผ ๋ฒ์ ์ ์ฌ๋ฆด ์ ์๋๋ก ํ์ต๋๋ค.
API ํธ์ถ ๋น์ฉ
์ธ ๋ฒ์งธ๋ ๋ฐ๋ก API ํธ์ถ์ ๋ฐ๋ฅธ ๋น์ฉ ๋ฌธ์ ์ ๋๋ค. ํ์ ์ดํ๊ณผ ๊ฐ์ ์ด๋ฒคํธ์ฑ ํธ๋ํฝ์ ๋งค์ฐ ์งง์ ์๊ฐ ๋์ ๊ธ๊ฒฉํ ํธ๋ํฝ์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ CDN์ด ์์ด๋ ์บ์๊ฐ ์ ๋๋ก ๋์ํ์ง ์์ ์ ์์ต๋๋ค. ์บ์ฑ ๋์ง ์์์ ๋ ๋ฐ์ํ๋ ํธ๋ํฝ ๋น์ฉ์ ๋๋ค๊ฐ ํธ์ถ๋๋ ๋งํผ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ํธ๋ํฝ์ ๋ฏธ๋ฆฌ ์์ธกํ๊ณ ๋น์ฉ์ ๊ณ์ฐํด์ผ ํ ์ ์์ต๋๋ค. ๋ฐ๋ฉด ํ ์ค์์๋ ์์ฒด ์๋ฒ๋ฅผ ํตํด ๋๋ค ์๋น์ค ๋น์ฉ์ ์๋ ์ ์์์ต๋๋ค.
QueryString ๊ธฐ๋ฐ์ API ์ธํฐํ์ด์ค
๋ค์ ์ํ์ฐฉ์ค๋ ์ธํฐํ์ด์ค์ ๊ดํ ๋ด์ฉ์ ๋๋ค. ์์ ์ค๋ช ๋๋ฆฐ ๋ค์ํ ์๋ฒ๋ค์ ์ธํฐํ์ด์ค๋ ๋๋ถ๋ถ QueryString์ผ๋ก ๋์ํฉ๋๋ค. ์ด๋ก ์ธํด CDN์์ ์บ์๋ฅผ ์ ์ฉํ๊ธฐ ์กฐ๊ธ ์ด๋ ค์ ์ต๋๋ค. ์๋์ ๊ฐ์ด ์ปฌ๋ฌ, ์ฌ์ด์ฆ ์์์ ์์ฒญ๊ณผ ์ฌ์ด์ฆ, ์ปฌ๋ฌ ์์์ ์์ฒญ์ ์๋ก ๋ค๋ฅธ ๋ณ๊ฐ์ ์บ์๋ก ๊ธฐ๋ก๋ฉ๋๋ค. ์ฆ, ๊ฐ์ ์์ฒญ์ด์ง๋ง 2๊ฐ์ ์บ์๊ฐ ์๊ธฐ๋ ๋ฌธ์ ์ ์ด ๋ฐ์ํฉ๋๋ค.
์ด๋ฌํ ๋ฌธ์ ์ ๋ํด QueryString๋ณด๋ค๋ Path ๊ธฐ๋ฐ์ผ๋ก ์ ์ฉํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค. ์๋์ ๊ฐ์ด src=์ด๋ฏธ์ง์ฃผ์&q=80&w=200
์ QueryString ๊ธฐ๋ฐ์ด ์๋ width=80,quality=75/์ด๋ฏธ์ง์ฃผ์
์ ๊ฐ์ด Path ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์์ต๋๋ค.
์ด ์์ด๋์ด๋ ์ง์ ๊ณ ์ํด๋ธ ๋ฐฉ๋ฒ์ ์๋๊ณ , Cloudflare์ ์ด๋ฏธ์ง ์ต์ ํ API์์ ์ฌ์ฉํ๋ ๊ธฐ๋ฒ ์ค ํ๋์ ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ๋์ ํ์ฌ ์บ์ฑ ๊ธฐ๊ฐ์ ๋ง์ด ๋๋ฆด ์ ์์๊ณ ๊ด๋ฆฌ๋ ์ฌ์์ง๋ ์ฅ์ ์ ์ป์์ต๋๋ค.
๋๋ค ์ต๋ ์๋ต ํ์ด๋ก๋ ์ ํ
๋ ๋ค๋ฅธ ์ํ์ฐฉ์ค๋ ๋๋ค์ ์ต๋ ์๋ต ํ์ด๋ก๋์ ํฌ๊ธฐ์ ์ ํ์ด ๊ฑธ๋ ค์๋ค๋ ๊ฒ์ ๋๋ค. 6MB๋ฅผ ๋๋ ์์ฒญ์ ๋น์ฉ์ ๋ ์ง๋ถํด๋ ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ์์ต๋๋ค. ์ค์ ๋ก 6MB๋ฅผ ๋๋ ์์ฒญ์ ์ ๋๋ก ๋ ์๋ต์ ์ฃผ์ง ๋ชปํฉ๋๋ค.
ํ ์ค์์๋ ์์ ์ค๋ช ํ ๋น๋์ค ์ธ๋ค์ผ ์๋น์ค์์ 6MB๊ฐ ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๊ฐ๋ก ์์๊ณผ ์ธ๋ก ์์์ด ์กด์ฌํ๋๋ฐ, ๊ฐ๋ก ์์๋ง ์๊ฐํ๊ณ ๊ฐ๋ก ๊ธธ์ด๋ก ์ด๋ฏธ์ง ์ต์ ํ๋ฅผ ํ๋ค ๋ณด๋ ์ธ๋ก ์์์ ๊ฒฝ์ฐ๋ ์ธ๋ค์ผ ์ด๋ฏธ์ง ์ฌ์ด์ฆ๊ฐ ์์ฒญ ์ปค์ ๋ฒ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ์ต๋๋ค. ๊ฒฐ๊ตญ 400, 500 ๋ฑ์ ์๋ต์ ๋ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ์ต๋๋ค.
์ด๋ฐ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋๋ผ๋ ์ค์ ์๋น์ค์์๋ ์ด๋ฐ ๋ฌธ์ ๊ฐ ๋ํ๋๋ฉด ์ ๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ํน์๋ 6MB๋ฅผ ๋๋ ์์ฒญ์ด ๋ฐ์ํ์๋๋ผ๋, ์์ฒด์ ์ธ ์๋ฒ ์ด์ ๋ฑ์ ๋ฐฉ๋ฒ์ ํตํด ์๋น์ค์ ์ง์ฅ์ ์ฃผ์ง ์๊ฒ ํด์ผ ํฉ๋๋ค.
CDN Vary Header
์บ์ฑ ์ ์ฑ ์ ์ฌ์ฉํ ๋ Vary ํค๋๋ฅผ ์ฌ์ฉํด์ผ๋ง ์์ฒญ ํค๋๋ง๋ค ๋ณ๋์ ์บ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํด๋ฆฌํ ์๋ฒ๋ฅผ ์๋ก ๋ค๋ฉด, ์ ๊ฐ ์ฌ์ฉํ๋ ๋ธ๋ผ์ฐ์ ์ ์ ์ฌ๋์ด ์ฐ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ค๋ฅด์ง๋ง, ํด๋ฆฌํ JS๋ฅผ ๋์ผํ๊ฒ ๋ฐ๋ ๋ฌธ์ ๊ฐ ์๊น๋๋ค. ์ฆ, ์ธํฐ๋ท ์ต์คํ๋ก๋ฌ๊ฐ ๋จผ์ ์บ์ฑ ํด๋ฒ๋ฆฐ ์ํ๋ก ํฌ๋กฌ์์ ํด๋ฆฌํ JS๋ฅผ ๋ฐ์ผ๋ฉด ์ต์คํ๋ก๋ฌ์์ ์บ์ ๋ ํด๋ฆฌํ JS๋ฅผ ๋ฐ๊ฒ ๋๋ ๊ฒ์ ๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์์ฒญ ํค๋๋ฅผ Vary ํค๋๋ก ์ค์ ํ์ฌ ์ ์ ์์ด์ ํธ๊ฐ ๋ฌ๋ผ์ง๋ฉด ์บ์๋ฅผ ๋ณ๋๋ก ์ฌ์ฉํ๋ค๊ณ ๋ช ์์ ์ผ๋ก ์ธํ ํด์ผ ํฉ๋๋ค.
์ ๋งํธ ์ ๋ฆฌ
์ํ์ฐฉ์ค ๋ด์ฉ๋ค์ ์ ๋ฆฌํ๋ฉด, ์๋น์ค๋ฅผ ์ด์คํ๋ฅผ ํ๋ฉด ๋ค์ํ ์ ์ฒด์ ๋ํด ๊ด๋ฆฌํด์ผ ํ๋ ๋ฌธ์ ๊ฐ ์๊ณ , ๋๋ค๋ฅผ ์ฌ์ฉํ ๋ Node.js์ ๋ฒ์ ์ ์ ์ฑ๊ฒจ์ผ ํฉ๋๋ค. ์ด๋ฒคํธ์ฑ ํธ๋ํฝ์ ์บ์ฑ์ด ์ด๋ ต๊ธฐ ๋๋ฌธ์ ํธ๋ํฝ ๋น์ฉ์ ์ ๊ณ ๋ คํด์ผ ํ๊ณ , QueryString๋ณด๋ค๋ Path ๊ธฐ๋ฐ์ ์ธํฐํ์ด์ค๋ก ๋ง๋ค๊ธฐ๋ฅผ ์ถ์ฒํฉ๋๋ค. ๋๋ค์ ์๋ต ์ต๋ ํฌ๊ธฐ๋ 6MB๋ผ๋ ์ ์ ๊ธฐ์ตํ๊ณ ์ด๋ฅผ ์ด๊ณผํ๋ ๊ฒฝ์ฐ๋ฅผ ๋๋นํด์ผ ํ๊ณ , Vary ํค๋๋ฅผ ์ ์ฌ์ฉํ์ฌ ์บ์ฑ ์ ์ฑ ์ ์ฌ๋ฐ๋ฅด๊ฒ ๋ง๋ค์ด ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋ง์น๋ฉฐ
์ง๊ธ๊น์ง ํ๋ก ํธ์๋์ ๋ฒํ๋ฅผ ๊ฑธ๊ธฐ ์ํ 7๊ฐ์ง ๋ง๋ฒ์ ๋ํด ํฌ๋ง ํธ๊ณผ ์ ๋ง ํธ์ผ๋ก ๋๋์ด ์์๋ณด์์ต๋๋ค. 7๊ฐ์ง ๋ง๋ฒ์ ์ ํ์ฉํ์ฌ ์์ ์ฑ ๋๊ณ ๊ฐ๋ฐํ๊ธฐ ์ฌ์ด ํ๋ก ํธ์๋ ์ธํ๋ผ๋ฅผ ๊ตฌ์ถํ๊ธธ ๋ฐ๋๋๋ค. ๋, ์ ๋ง ํธ์์ ์๊ฐํ ์ํ์ฐฉ์ค ๋ด์ฉ๋ค๋ ์ ์ํ์ฌ ์์ผ๋ก ๋ง๋๊ฒ ๋ ๋ฌธ์ ์ ๋ค์ ์ด๊ฒจ๋ด๋ ๋ฐ ๋์์ด ๋๋ฉด ์ข๊ฒ ์ต๋๋ค.
FEConf2024์์ ๋ฐํ๋ โ7๊ฐ์ง ํ๋ซํผ ์๋ฒ๋ก ํ๋ก ํธ์๋ ๋ฒํ ๋ง๋ฒ ๊ฑธ๊ธฐโ/์ ์ํธ ํ ์ค ์ฝ์ด Frontend Infra Ops Unit Lead โฉ๏ธ