์ต๊ทผ ํ์ฌ์์ ๋์์ด๋ ๋ถ๋ค๊ณผ์ ์ํํ ํ์ ์ ๋ชฉ์ ์ผ๋ก ์คํ ์ด์ง ๋ฐฐํฌ ํ๊ฒฝ์ ์์๋ก ๊ตฌ์ฑํ๊ฒ ๋์๋ค. ๋ฐฐํฌ ํ๋ซํผ์ ์ ํํ๋ ๊ณผ์ ์์ ์ฌ๋ฌ ํ๋ซํผ์ ์ฌ์ฉํด๋ณด๋ฉฐ POC๋ฅผ ์งํํ๋๋ฐ, ๊ธฐ๋ก ์ฐจ์์์ ํฌ์คํ ์ผ๋ก ๋จ๊ฒจ๋๊ธฐ๋ก ํ๋ค!
NextJS๋ SSR์ ์ง์ํ๊ธฐ ๋๋ฌธ์ ๋ฐฐํฌ์ ์๋ฒ๊ฐ ํ์ํ๋ค. ์๋ฒ ํ๊ฒฝ์ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ค์ํ์ง๋ง ๊ฒฐ๊ตญ ์๋ฒ ํ๊ฒฝ์ ๋ฐ๋ผ ์๋์ ๊ฐ์ ๋๊ฐ์ง๋ก ๋๋ ์ ์๋ค.
- ํด๋ผ์ฐ๋(AWS, Azure๋ฑ) ํ๊ฒฝ์์ ์ง์ ์๋ฒ ํ๊ฒฝ ๊ตฌ์ฑ
- Vercel, Netlify, Amplify, Cloudflare, Netlify, Serverless๋ฑ๊ณผ ๊ฐ์ zero configration ๋ฐฐํฌ ํ๋ ํผ ์ฌ์ฉ
์ด๋ฒ ํฌ์คํ ์์๋ ๋ฐฐํฌ ํ๊ฒฝ์ ๊ตฌ์ฑํ๋ฉฐ ๊ฒํ ํ๋ ๊ธฐ์ ๋ค๊ณผ ๋์ ์ ๊ณ ๋ ค์ฌํญ์ ๋ํด ๊ฐ๋จํ ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค.
๊ฐ์ฅ ๋จผ์ ์ดํด๋ณธ ์ ํ์ง๋ Vercel์ด๋ค. Vercel์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ์ญ์ NextJS์์ ์ ๊ณตํ๋ ๋ชจ๋ ๊ธฐ๋ฅ + ์์ผ๋ก ์ถ๊ฐ๋ ๊ธฐ๋ฅ์ ๊ฐ์ฅ ๋จผ์ , ๊ฐ์ฅ ์๋ฒฝํ๊ฒ ์ง์ํ๋ค๋ ๊ฒ์ด๋ค.
zero configuration์ ์งํฅํ๋ Vercel๋ต๊ฒ ํด๋ฆญ ๋ช๋ฒ์ผ๋ก ๊ฐ๋จํ ๋ฐฐํฌ๋ฅผ ํ ์ ์๋ค๋ ๊ฒ๋ ํฐ ์ฅ์ ์ด๋ค.
๋ ๋ณ๋์ ๊ตฌ์ฑ ์์ด ๋ชจ๋ push์ ๋ํ ๋ฐฐํฌ๊ฐ ์งํ๋๋ preview ๊ธฐ๋ฅ์ ์ ๊ณตํ๋๋ฐ, ์ด๊ฒ ์๋นํ ํธ๋ฆฌํ๋ค.
Vercel์ Github Repository๋ฅผ ์ฐ๊ฒฐ ํ๊ณ ํด๋น ์๊ฒฉ ์ ์ฅ์์ push๋ฅผ ํ๋ฉด ๋ฐฐํฌ๋ ํ๋ฉด์ ํ์ธํ ์ ์๋ preview url์ด ๋ฐ๊ธ๋๋ค. ์ด๋ฐ ๋ฐฉ์์ผ๋ก ๋งค ์ปค๋ฐ์ ๋ํ ๋ฐฐํฌ ๊ฒฐ๊ณผ๋ฌผ์ ํ์ธํด๋ณผ ์ ์๋ค.
๋ ๋๋ผ์ด ์ ์ ํด๋น ๊ธฐ๋ฅ์ ๋ฌด๋ฃ ์๊ธ์ ์ธ Hobby ํ๋์์๋ ์ง์ํ๋ค๋ ๊ฒ์ด๋ค.
๊ฐ์ธ ํ๋ก์ ํธ์์๋ Vercel์ด ์ต๊ณ ์ธ ๊ฒ ๊ฐ๋ค. ํ์ง๋ง ์์ฝ๊ฒ๋ Github Team ๊ณ์ ๋ ํฌ์ ๊ฒฝ์ฐ Pro ํ๋์ ์ด์ฉํด์ผ ํ๊ธฐ ๋๋ฌธ์, Vercel์ ์ฐ๊ฒฐํ๊ธฐ ์ํด 1์ธ๋น 20๋ฌ๋ฌ๊ฐ ํ์ํ๋ค.
Amplify๋ AWS์์ ์ ๊ณตํ๋ ์๋น์ค๋ก AWS๋ด์ ๋ฆฌ์์ค๋ค์ ์ฌ์ฉํ์ฌ ์์ฝ๊ฒ ํ๋ก ํธ์๋, ๋ฐฑ์๋, ํธ์คํ , ๋ฐฐํฌ๊น์ง ํ์คํ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋๋ก ๋์์ฃผ๋ ์์ ๊ด๋ฆฌํ ์๋น์ค์ด๋ค. Vercel๊ณผ ๋น์ทํ ์ปจ์ ์ AWS ์๋น์ค๋ผ๊ณ ๋ณผ ์ ์์ ๊ฒ ๊ฐ๋ค.
ํ ์์ ์์(22๋ 7์) Vercel์ ์ ์ธํ๊ณ NextJS์ ๊ฐ์ฅ ๋ง์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค. NextJS 12๋ฒ์ ์ middleware, i18n ๊ด๋ จ ํผ์ฒ๋ฅผ ์ ์ธํ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ง์ํ๋ค.
๋จ์ ์ผ๋ก๋ ๋ฐฐํฌ ๊ณผ์ ์ด Vercel์ ๋นํด ๊น๋ค๋กญ๋ค. IAM ์ค์ ๋ถํฐ Amplify CLI ์ค์ ๊น์ง ์ถ๊ฐ์ ์ผ๋ก ์ค์ ํด ์ฃผ์ด์ผ ํ ๊ฒ ๊ฝค ๋ง์ง๋ง, ๋น์ฉ ์ธก๋ฉด์์๋ Vercel๋ณด๋ค ๋ ์ ๋ ดํ๋ค.
๊ถ๊ธํ ๋ถ๋ค์ ์ ์ ๋ฆฌํด ๋์ ๋ธ๋ก๊ทธ๊ฐ ์์ผ๋ ์ฐธ์กฐํด๋ณด์๊ธธ!
AWS์ Elastic BeanStalk(์ดํ EB) ์๋น์ค๋ฅผ ์ด์ฉํ์ฌ ์๋ฒ ํ๊ฒฝ์ ์ง์ ๊ตฌ์ฑํ ์๋ ์๋ค. ๋ฌผ๋ก EC2์์ ์ง์ ์๋ฒ ํ๊ฒฝ์ ๊ตฌ์ฑํ ์๋ ์์ผ๋, EB์ ์ฅ์ ์ ๋ก๋ ๋ฐธ๋ฐ์ฑ ๋ฐ Auto Scaling๋ถํฐ ์์ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ํ ๋ชจ๋ํฐ๋ง, ๋ฌด์ค๋จ ๋ฐฐํฌ ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ ๋ ์ง์ํด์ค๋ค๋ ์ ์ด๋ค.
๋ํ ์ด๋ฐ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋ํ ์ถ๊ฐ ๋น์ฉ ์์ด ์ฌ์ฉํ AWS ๋ฆฌ์์ค์ ๋ํด์๋ง ์๊ธ์ ์ง๋ถํ ์ ์๋ค๋ ์ ๋ ์ฅ์ ์ด๋ค.
๋ฐฐํฌ ํ๊ฒฝ ๊ตฌ์ฑ์ด ํฌ๊ฒ ์ด๋ ต์ง ์๊ณ (ํด๋ฆญ ๋ช๋ฒ์ด๋ฉด ๊ฐ๋ฅ) Github Action/Jenkins์ ๊ฐ์ CI/CD๋ ์ฝ๊ฒ ๋ถ์ผ ์ ์๋ค. ํ์ง๋ง ์๋ฌด๋๋ ๋ค๋ฅธ Zero Config ํ๋ซํผ๋ค์ ๋นํด์๋ ์กฐ๊ธ ๋ ์ค์ ํด ์ฃผ์ด์ผ ํ๋ ๋ถ๋ถ๋ค์ด ๋ง๋ค.
Serverless Framework๋, AWS ๋๋ค์ Azure ํจ์ ์๋ฒ๋ฆฌ์ค์ ๊ฐ์ Serverless ์๋น์ค๋ฅผ ์ด์ฉํด ์ฝ๋๋ฅผ ์ฝ๊ฒ ๋ฐฐํฌํด ์ฃผ๋ ํ๋ ์์ํฌ์ด๋ค.
Serverless Framework๋ ๋ค์ํ ์๋น์ค๋ค์ serverless ๋ฐฉ์์ผ๋ก ๋ฐฐํฌํ ์ ์๋๋ก ํ๋ฌ๊ทธ์ธ๋ค์ ์ ๊ณตํ๋ฉฐ, ์ฌ์ฉ์๋ค์ ์ํ๋ ํ๋ฌ๊ทธ์ธ์ ์ค์นํ์ฌ ๋ฐฐํฌ๋ฅผ ์งํํ ์ ์๋ค.
Serverless-NextJS-plugin์ AWS ์๋น์ค๋ฅผ ์ด์ฉํด์ ๋ฐฐํฌ๋ฅผ ์งํํ๋ฉฐ ์ํคํ ์ณ๋ ์๋์ ๊ฐ์ด ๊ตฌ์ฑ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ๋ฐฐํฌ ํ๊ฒฝ์ Cloudfront์ ๊ตฌ์ฑ๋๊ฒ ๋๋ค. ํ์ํ ์ ์ ํ์ผ์ S3 ๋ฒํท์ ํตํด ์์ฑํ๊ณ , SSR๊ณผ API ๋ฐฑ์๋์ ํ์ํ ํจ์๋ lambda@edge์ ๊ตฌ์ฑ๋์ด ๋ฐฐํฌ๋๋ค.
ํ์ํ ๋ชจ๋ ์์์ Cloudformation์ ํตํด ์๋์ผ๋ก ์์ฑ๋๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๋ ๋ฐฐํฌ ์ค์ ์ ๋ด์ YAMLํ์ผ๋ง ์ ๋ง๋ค์ด์ฃผ๋ฉด ๋๋ค.
์ถ๊ฐ๋ก Serverless๋ ์์ง์ NextJS 12๋ฅผ ์ง์ํ์ง ์์ง๋ง, ๊ณง ์ง์ ์์ ์ด๋ผ๊ณ ํ๋ค!
์ฌ๋ด์์ ๋ฐฐํฌ POC๋ฅผ ์งํํ๋ฉฐ ํ์ฌ ๋ธ๋ก๊ทธ์ ๊ธ์ ์์ฑํ๊ฒ ๋์๋ค. AWS์ Elastic Beanstalk์ Serverless Framework์ ๋ฐฐํฌ ๊ณผ์ ์ ๋ํด ๊ถ๊ธํ์ ๋ถ๋ค์ ์ฐธ๊ณ ํ์ ๋ ์ข์ ๊ฒ ๊ฐ๋ค.
์์ค์ต ๊ธฐ์ ๋ธ๋ก๊ทธ : NextJS ๋ฐฐํฌ ์ด๋ป๊ฒ ํ์๋์?