aws Amplify์์ Nextjs๋ฅผ ๋ฐฐํฌํฉ๋๋ค.
NextJS์ ์ฃผ์ ๊ธฐ๋ฅ์ค ํ๋์ธ SSR์ ๋ํด ํ์ ํฉ๋๋ค.
๋ฐฐํฌ๋ฅผ ์ํ ์ํคํ ์ฒ๋ฅผ ๋์ดํ๊ณ ์ ํฉํ ๊ตฌ์กฐ๋ฅผ ์ ์ ํฉ๋๋ค.
React ํ๋ก์ ํธ์ ์ฐจ๋ณ์ ์ผ๋ก์ ์ ์ ํ์ด์ง๋ฅผ ํธ์คํ
ํ๋๊ฒ์์ ๋ฒ์ด๋
์๋ฒ์ธก์์ ๋ ๋๋ง๋ ํ์ด์ง๋ฅผ ๋ณด๋ด์ฃผ๋๊ฒ์ ๊ณ ๋ คํด์ผ ํ๋ฏ๋ก ์๋ฒ๊ฐ ๋ณ๋๋ก ํ์ํฉ๋๋ค.
React 18 ์ด์ ์๋ React๋ฅผ ์ฌ์ฉํ์ฌย ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ๋๋งํ๋ ๊ธฐ๋ณธ ๋ฐฉ๋ฒ์ย ์ ์ ์ผ๋ก ํด๋ผ์ด์ธํธ์์ ๋ ๋๋ง์ ์งํํ๋ ๊ฒ์ด์์ต๋๋ค.
Next.js๋ HTML์ ์์ฑํ๊ณ ํด๋ผ์ด์ธํธ์ ์ ์กํ์ฌ hydrated ํจ์ผ๋ก์จ ์ ํ๋ฆฌ์ผ์ด์
์ย ํ์ด์ง๋ก ๋๋๊ณ ์๋ฒ์์ pre-rendering
ํ๋ ๋ ์ฌ์ด ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ก ์ธํด ์ด๊ธฐ HTML์ ๋ํ์์ผ๋ก ๋ง๋ค๊ธฐ ์ํด ํด๋ผ์ด์ธํธ์ ์ถ๊ฐ JavaScript๊ฐ ํ์ํ์ต๋๋ค.
์ด์ ย ์๋ฒ ๋ฐ ํด๋ผ์ด์ธํธ ๊ตฌ์ฑ ์์๋ฅผย ํตํด React๋ ํด๋ผ์ด์ธํธ
ย ์ย ์๋ฒ
์์ ๋ ๋๋งํ ์ ์์ผ๋ฏ๋ก ๊ตฌ์ฑ ์์ ์์ค์์ ๋ ๋๋ง ํ๊ฒฝ์ ์ ํํ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก APP Router
๋ย ์๋ฒ ์ปดํฌ๋ํธ๋ฅผย ์ฌ์ฉํ๋ฏ๋กย ์๋ฒ์์ ๊ตฌ์ฑ ์์๋ฅผ ์ฝ๊ฒ ๋ ๋๋งํ๊ณ ํด๋ผ์ด์ธํธ๋ก ์ ์ก๋๋ JavaScript์ ์์ ์ค์ผ ์ ์์ต๋๋ค.
์๋ฒ์ ์ ์ ๋ฐ ๋์ ๋ ๋๋ง
Next.js๋ย ์ ์ ย ๋ฐย ๋์ ย ๋ ๋๋ง์ ์ฌ์ฉํ์ฌ ์๋ฒ์์ ๋ ๋๋ง์ ์ต์ ํํ ์ ์๋ ์ต์ ์ ์ ๊ณตํฉ๋๋ค.
์ ์ ๋ ๋๋ง์ย ์ฌ์ฉํ๋ฉดย ์๋ฒย ๋ฐ ํด๋ผ์ด์ธํธ ๊ตฌ์ฑ ์์ ๋ชจ๋ย ๋น๋ย ์ ์๋ฒ์์ ๋ฏธ๋ฆฌ ๋ ๋๋งํ ์ ์์ต๋๋คย .ย ์์ ๊ฒฐ๊ณผ๋ย ์บ์๋์ดย ํ์ ์์ฒญ์์ ์ฌ์ฌ์ฉ๋ฉ๋๋ค.ย ์บ์๋ ๊ฒฐ๊ณผ๋ ์ ํจ์ฑ์ ๋ค์ ๊ฒ์ฌย ํ ์๋ ์์ต๋๋คย .
์๋ฒ ๋ฐ ํด๋ผ์ด์ธํธ ๊ตฌ์ฑ ์์๋ ์ ์ ๋ ๋๋ง ์ค์ ๋ค๋ฅด๊ฒ ๋ ๋๋ง๋ฉ๋๋ค.
- ํด๋ผ์ด์ธํธ ๊ตฌ์ฑ ์์์๋ HTML ๋ฐ JSON์ด ๋ฏธ๋ฆฌ ๋ ๋๋ง๋์ด ์๋ฒ์ ์บ์๋์ด ์์ต๋๋ค.ย ์บ์๋ ๊ฒฐ๊ณผ๋ hydration๋ฅผ ์ํด ํด๋ผ์ด์ธํธ๋ก ์ ์ก๋ฉ๋๋ค.
- ์๋ฒ ๊ตฌ์ฑ ์์๋ React์ ์ํด ์๋ฒ์์ ๋ ๋๋ง๋๋ฉฐ ํด๋น ํ์ด๋ก๋๋ HTML์ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
๋์ผํ ๋ ๋๋ง๋ ํ์ด๋ก๋๋ ํด๋ผ์ด์ธํธ์ ๊ตฌ์ฑ ์์๋ฅผ hydrate ํ๋ ๋ฐ์๋ ์ฌ์ฉ๋๋ฏ๋ก ํด๋ผ์ด์ธํธ์ JavaScript๊ฐ ํ์ํ์ง ์์ต๋๋ค.
๋์ ๋ ๋๋ง์ ์ฌ์ฉํ๋ฉด ์๋ฒย ๋ฐ ํด๋ผ์ด์ธํธ ๊ตฌ์ฑ ์์๊ฐ ๋ชจ๋ย ์์ฒญ ์ย ์๋ฒ์์ ๋ ๋๋ง๋ฉ๋๋คย .ย
์์ ๊ฒฐ๊ณผ๋ ์บ์๋์ง ์์ต๋๋ค.
ํ์ด์ง๊ฐย ์๋ฒ ์ธก ๋ ๋๋ง์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐย ๊ฐ ์์ฒญย ์์ ํ์ด์ง HTML์ด ์์ฑ๋ฉ๋๋ค.
ํ์ด์ง์ ๋ํด Server-side Rendering์ ์ฌ์ฉํ๋ ค๋ฉด getServerSideProps
ํจ์๊ฐย ํ์ํฉ๋๋คย .ย
์ด ํจ์(getServerSideProps
)๋ ๋ชจ๋ ์์ฒญ์์ ์๋ฒ์ ์ํด ํธ์ถ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด ํ์ด์ง์์ ์์ฃผ ์ ๋ฐ์ดํธ๋๋ ๋ฐ์ดํฐ(์ธ๋ถ API์์ ๊ฐ์ ธ์ด)๋ฅผ ๋ฏธ๋ฆฌ ๋ ๋๋งํด์ผ ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
getServerSideProps
๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ ํ์ด์ง์ ์ ๋ฌํ ์ ์์ต๋๋ค.
export default function Page({ data }) {
// Render data...
}
// This gets called on every request
export async function getServerSideProps() {
// Fetch data from external API
const res = await fetch(`https://.../data`)
const data = await res.json()
// Pass data to the page via props
return { props: { data } }
}
getServerSideProps
์ getStaticProps
๊ฐ ์ ์ฌ ํ์ง๋งย ๋น๋์๊ฐ ์๋ ๋ชจ๋ ์์ฒญ์์ ์คํ๋๋ค๋ย ์ฐจ์ด์ ์ด ์์ต๋๋ค.
Nextjs ํ๋ก์ ํธ๋ฅผ ๋ฐฐํฌํ๋ ๋ค์ํ ๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค.
AWS ์์ ๊ด๋ฆฌํ ์๋น์ค์ธ Amplify๋ฅผ ์ด์ฉํ์ฌ Nextjs ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํฉ๋๋ค.
Nextjs์ SSR ๊ธฐ๋ฅ์ ์๋ฒฝํ๊ฒ ์ง์ํฉ๋๋ค.
๐ก Amplify ๋?
AWS Amplify๋ฅผ ํ์ฉํ๋ฉด ํ๋ถํ ๊ธฐ๋ฅ์ ํ ์คํ ์น ๋ฐ ๋ชจ๋ฐ์ผ ์ฑ์ ๊ฐ๋ฐ ๋จ๊ณ๋ถํฐ ๋ฐฐํฌ ๋จ๊ณ๊น์ง ๊ทธ ์ด๋ ๋๋ณด๋ค ์์ฝ๊ฒ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
Amplify ์ฅ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋น๋ ๋ฐ ๋ฐฐํฌ ์๋ํ ๊ตฌ์ถ์ด ํ๋ก์ ํธ ์์ฑ๊ณผ ๋์์ ์์ฑ๋ฉ๋๋ค.
Amplify ์ฝ์์์ ๋๋ฉ์ธ ์ฐ๊ฒฐ์ ๋น๋กฏํ SSL ์ธ์ฆ์ ์งํํ ์ ์์ต๋๋ค.
๋ธ๋์น ์์ฑ ๋ฐ ์ ๊ฑฐ์ ๋์ ์ผ๋ก ๋ฐฐํฌ๋ฅผ ์์ฑํ๊ณ ์ญ์ ํ ์ ์์ต๋๋ค.
์๋ฒ๋ฆฌ์ค์ด๋ฏ๋ก ์ฌ์ฉํ๋งํผ ๋น์ฉ์ ์ง๋ถํฉ๋๋ค.
Node.js ๋๋ Docker๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ง์ํ๋ Next.js๋ฅผ ์์ฒด ํธ์คํ ํ ์ ์์ต๋๋ค.
standalone ๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ 12 ์ด์์ nextjs ๋ฒ์ ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑํด์ผํฉ๋๋ค.
next start
๊ธฐ๋ฅ์ ์ด์ฉํ ํธ์คํ
๋ณด๋ค ์ด๋ฏธ์ง์ ์ฉ๋์ ์ต์ ํํ์ฌ ํ๋ก์ ํธ๋ฅผ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
ํ์ฌ ํธ๋๋ฉ์ค์์ ์ฌ์ฉํ๊ณ ์๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ ์ ํ์ด์ง๋ S3๋ก ํธ์คํ ํ๊ณ , SSR์ด ํ์ํ ๊ฒฝ์ฐ ECS์์ ์๋ฒ์ ์ญํ ์ ๋ด๋นํฉ๋๋ค.
์ ์ ํ์ด์ง๋ S3๋ก ํธ์คํ ํ๊ณ , SSR์ด ํ์ํ ๊ฒฝ์ฐ Lambda๋ฅผ ์ด์ฉํ์ฌ ์๋ฒ์ ์ญํ ์ ๋ด๋นํฉ๋๋ค.
Amplify๋ฅผ ์ด์ฉํ์ฌ Nextjs๋ฅผ ๋ฐฐํฌํ๋ ๊ณผ์ ์ ์ค๋ช ํฉ๋๋ค.
AWS Amplify ์ฝ์์ ์ ์ํ์ฌ Amplify Hosting ์์ํ๊ธฐ๋ฅผ ํด๋ฆญํฉ๋๋ค.
ํ๋ก์ ํธ๋ฅผ Github์ ๋ณด๊ดํ์์ผ๋ฏ๋ก, ์ ์ฅ์๋ฅผ ์ ํํ๊ณ ๊ณ์ ๋ฒํผ์ ํด๋ฆญํ์ฌ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค.
Github์ ๋ก๊ทธ์ธํ์ฌ Amplify์ ์ฐ๊ฒฐํฉ๋๋ค.
์ฐ๊ฒฐํ๊ณ ์ ํ๋ ๊ณ์ ์ ํด๋ฆญํฉ๋๋ค.
Amplify์ ์ฐ๋ํ repository๋ฅผ ์ ํํฉ๋๋ค.
๋ฆฌํฌ์งํ ๋ฆฌ ์ ํ์ด ์๋ฃ๋๋ฉด, ๋ฐฐํฌํ๊ณ ์ ํ๋ ๋ธ๋์น๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
๋น๋ ์ค์
๋น๋ ์ ์ฐจ์ ๋ํ ๋ด์ฉ์ ํ์ฌ ์ฐฝ์์ ์ ์ฉํ ์ ์์ต๋๋ค.
ํ๋ก์ ํธ์ ๋ฃจํธ๊ฒฝ๋ก์amplify.yaml
์ ์ ์ฅํ์ฌ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
๋ณ๋์ ์ถ๊ฐ์ ์ธ ์ค์ ์์ด ์ ์ฅ ๋ฐ ๋ฐฐํฌ๋ฅผ ์ ํํฉ๋๋ค. ์ถํ ์์ ๊ฐ๋ฅํฉ๋๋ค.
์์ฑ์ด ์๋ฃ๋์๋ค๋ฉด, amplify๊ฐ ์๋์ผ๋ก ๋ธ๋์น๋ก๋ถํฐ ์์ค๋ฅผ ๊ฐ์ ธ์ CI/CD๋ฅผ ์ํํฉ๋๋ค.
๋ฐฐํฌ๊ฐ ์๋ฃ๋๊ณ , Amplify๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ ์์๋ณด๊ธฐ๋ฅผ ํตํด ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ์ ํ์ธํ ์ ์์ต๋๋ค.
์ฃผ์๋ฅผ ํด๋ฆญํ๋ฉด ๋ฐฐํฌ๊ฐ ์๋ฃ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
Amplify๋ฅผ ์ด์ฉํ์ฌ ๋๋ฉ์ธ ์ถ๊ฐ ๋ฐ SSL ์ ์ฉ์ ์์ฝ๊ฒ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
์ข์ธก์ ๋๋ฉ์ธ ๊ด๋ฆฌ ํญ์์ ์์ ํ๊ณ ์๋ ๋๋ฉ์ธ์ ์ด์ฉํ์ฌ ๊ตฌ์ฑํฉ๋๋ค.
์ํ๋ ๋๋ฉ์ธ์ ์ค์ ํ์ฌ ์ ์ฅ์ ์๋์ผ๋ก Route53์ ์ ํ๋จ๊ณผ ๋์์, SSL ์ ์ฉ์ ์ํํฉ๋๋ค.
์ ์ฉ์ด ์๋ฃ๋๋ฉด ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋๋ฉ์ธ์ผ๋ก ๋ฐฐํฌ๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ํ์ธํ ์ ์์ต๋๋ค.
amplify ์ฌ์ฉ์ ์ฅ์ ์ ๋ธ๋์น๋ฅผ ์ถ๊ฐํ ๊ฒฝ์ฐ ์์ฝ๊ฒ ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
dev ๋ธ๋์น๋ฅผ ์ถ๊ฐํฉ๋๋ค.
Amplify ๋์๋ณด๋์์ ๋ธ๋์น ์ฐ๊ฒฐ์ ์ ํํฉ๋๋ค.
์๋ก์ด ๋ธ๋์น๋ฅผ ์ธ์ํ๋๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์ ์ฅ์ ์๋ฃํ๋ฉด, ์์ ์ค์ ํ main ๋ธ๋์น์ ๊ฐ์ด CI/CD ํ์ดํ๋ผ์ธ์ด ๋์ํ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๋๋ฉ์ธ ์ฐ๊ฒฐ์ ์๋ฃํ๋ฉด ์๋์ ๊ฐ์ด dev ๋ธ๋์น๋ ์์ฝ๊ฒ ๋ฐฐํฌ ๋จ์ ํ์ธํ ์ ์์ต๋๋ค.
amplify์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ธฐ๋ฅ์ ์ด์ฉํ๋ฉด, pull request์ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ฏธ๋ฆฌ ํ์ธํ ์ ์์ต๋๋ค.
dev ๋ธ๋์น๋ฅผ main์ผ๋ก merge ํ๊ธฐ ์ํ pull request๋ฅผ ์์ฑํฉ๋๋ค.
amplify ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํญ์์ main ๋ธ๋์น์ ๋ํ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๋ฅผ ์ค์ ํ๋ฉด, ์๋์ ๊ฐ์ด ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ ์ฉ ์ดํ๋ฆฌ์ผ์ด์ CI/CD๊ฐ ๋์ํ๊ฒ ๋๋ฉฐ url์ด ์์ฑ๋ฉ๋๋ค.
์ํ๊ฐ
์ฑ๊ณต
์ด ๋์์๋ url์ ํตํด pull request ์์ฒญ๋ ์์ ๋ด์ฉ์ ํ์ธํ ์ ์์ต๋๋ค.
AWS์ ์น/์ฑ ์ดํ๋ฆฌ์ผ์ด์
ํธ์คํ
์๋น์ค์ธ Amplify
๋ฅผ ํตํด NextJS๋ฅผ ๋ฐฐํฌํ์์ต๋๋ค.
Amplify๋ฅผ ์ด์ฉํ๋ฉด ๋๋ฉ์ธ ์ฐ๊ฒฐ, CDN ๊ตฌ์ฑ, pull request ์ ์ฉ์ ํ๋ก์ ํธ์ ๋ํด์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ธฐ๋ฅ ๋ฑ ํ๋ก ํธ์๋ ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐ์ ํธํ ํ๊ฒฝ์ ์ด์ฉํ ์ ์์ต๋๋ค.
Amplify ๋จ์ ์ผ๋ก๋ ํ๋ก์ ํธ ๋น์ฉ์ด ์ฆ๊ฐํ ์ ์์ต๋๋ค.
$0.01
๊ฐ ์ฒญ๊ตฌ๋ฉ๋๋ค. $0.15/GB
์ฒญ๊ตฌ๋ฉ๋๋ค.$0.12/GB
์
๋๋ค.