230929(๊ธ) ์ฑ์ฅ
๐ค ์ฑ์ฅ์ผ์ง 7.0
์ฑ
ํ๋ณตํ ์ด๊ธฐ์ฃผ์์(์จ์ธ ๋ค์ด์ด)
์ ๋ด์ฉ์ ์๊ทน๋ฐ์ ์์ํ๋ ์๋ฐํ ์ฑ์ฅ๊ธฐ๋ก
์ด์์๋ ๊ฝ๊ณผ ์ฃฝ์ ๊ฝ์ ์ด๋ป๊ฒ ๊ตฌ๋ณํ๋๊ฐ?
์ฑ์ฅํ๊ณ ์๋ ๊ฒ์ด ์ด์ ์๋ ๊ฒ์ด๋ค.
์๋ช ์ ์ ์ผํ ์ฆ๊ฑฐ๋ ์ฑ์ฅ์ด๋ค!
โ (7.0)<์์ ๊ฐํธ>
ํ์ธ๋ง ํ์ต๋ฒ
์ ์๊ฒ ๋๋งํผ, ์ฑ์ฅ์ผ์ง๋ ์ ๋ง ๊ทธ ๋ ์ ํค์๋ ์ค์ฌ์ผ๋ก ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํ๋๋ก ํ๋ค.
โ๏ธ ํค์๋: ์ง๊ด์ ์ด๊ณ ์ฝ๊ณ ๊ฐ๋จํ๊ฒ ์์ฑ
Next.js
Serverless
์๋ฒ๋ฆฌ์ค๋ ์๋ฒ๊ฐ ์๋ค
๊ธฐ๋ณด๋ค๋ ๊ฐ๋ฐ์๊ฐ ๋ฐ๋ก ์๋ฒ๋ฅผ ๊ตฌ์ถํ๊ณ ๊ด๋ฆฌํ ํ์๊ฐ ์๋ค
๋ ์ ๋์ ์๋ฏธ์ด๋ค. Next.js์์๋ api ํด๋๋ง ๋ง๋ค์ด์ ๊ทธ ์์ ์ ํด์ง ํจ์๋ฅผ ์์ฑํ๋ฉด ์๋ฒ๋ฆฌ์ค๋ก api๋ฅผ ๋ง๋ค ์ ์๋ค. ์ด๋ ๊ฒ ๋ง๋ api๋ https://domain/api/
์ ๊ฐ์ ํํ๋ก ์ ๊ทผํ ์ ์๋ค. Next.js์ ์ ํํ ์๋ฒ ๊ตฌ์ถ ๋ฐฉ์์ด ์ด๋ป๊ฒ ๋๋์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง vercel๊ณผ aws์ ํํธ๋์ญ์ ๋ณด๋ฉด aws์ ๋๋ค๋ฅผ ํตํด์ ์๋ฒ๋ฆฌ์ค๋ฅผ ๊ตฌํํ๋ ๊ฒ ๊ฐ๋ค.
Loading UI
Next๋ ๋ฆฌ์กํธ์ Suspense Boundary๋ฅผ ์ฌ์ฉํ์ฌ ๋ก๋ฉ UI๋ฅผ ํธํ๊ฒ ๊ตฌํํ ์ ์๊ฒ ํด์ค๋ค. ๋ก๋ฉ์ ์ฃผ๊ณ ์ถ์ ๋ผ์ฐํธ์์ loading.tsx
๋ฅผ ๋ง๋ค๋ฉด ๋๋ค. ์ด ๋, ์ฐ๋ฆฌ๊ฐ ๊ฐ๋ฐํ๋ ๊ฐ๋ฐ ํ๊ฒฝ(dev mode)์์๋ ์ธ์ ๋ SSR์ด๋ฏ๋ก ์ ๋ถ ๋ค ๋ก๋ฉ์ด ์ ์ฉ๋๋ค.(์์ฒญ๋ง๋ค ๋ ๋๋ง๋๋๊น) ๊ทธ๋ฌ๋ ์ค์ ๋ฐฐํฌ ํ๊ฒฝ(prod mode)์์ SSG๋ก ๋ ๋๋งํ๋ ์ปดํฌ๋ํธ๊ฐ์ ๊ฒฝ์ฐ, ์ด๋ฏธ ์๋ฒ์์ html์ ๋ง๋ค์ด์ ๋ณด๋ด๊ธฐ ๋๋ฌธ์ ๋ก๋ฉ์ด ์ ์ฉ๋์ง ์๋๋ค. ์ด๋ฅผ ์ธ์งํ๋๋ก ํ์!
Error UI
Next๋ Loading๊ณผ ๋น์ทํ๊ฒ ๋ฆฌ์กํธ์ Error Boundary๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฌ UI๋ฅผ ํธํ๊ฒ ๊ตฌํํ ์ ์๊ฒ ํด์ค๋ค. ์๋ฌ๋ฅผ ์ฃผ๊ณ ์ถ์ ๋ผ์ฐํธ์์ error.tsx
๋ฅผ ๋ง๋ค๋ฉด ๋๋ค. ์ด ๋, ์ค์ํ ์ ์ Error ์ปดํฌ๋ํธ๋ ์ธ์ ๋ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ก ๊ตฌํํด์ผ๋๋ค๋ ์ ์ด๋ค! ์ ๊ทธ๋ด๊น? ๊ตฌ๊ธ๋งํด๋ด๋ ๋ช
ํํ ์ด์ ๋ ๋์ค์ง ์์ง๋ง, ์๊ฐํด๋ณด๋ฉด ๋ธ๋ผ์ฐ์ ์ฆ, ํด๋ผ์ด์ธํธ ๋จ์์ ์ด๋ค ๋ก์ง์ด ์ฒ๋ฆฌ๋๋ค๊ฐ ์๋ฌ๊ฐ ๋ฐ์ํด์ผ์ง ์๋ฌ ํ์ด์ง๋ผ๋ ๊ฒ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ผ ๊ฒ์ด๋ค. ์ ์ด์ ์๋ฒ ์ปดํฌ๋ํธ์์ ๋ฐ์ํ๋ ์๋ฌ๋ผ๋ฉด ๋น๋ ์์ฒด๊ฐ ์๋์ด์ผํ๋ ๊ฒ ๋ง์ํ
๋๊น. ๊ทธ๋ฆฌ๊ณ ๋ณดํต ์๋ฌ๊ฐ ๋ฐ์ํ ์ดํ ํด๋น ์๋ฌ์ ๋ํ ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๋ ๋ฑ์ ์์
์ ์ฒ๋ฆฌํด์ผํ๋๋ฐ, ์ด๋ฅผ ์ํด์๋ useEffect๋ฅผ ํตํด ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๊ฐ ๋ ์๋ฐ์ ์๋ ๊ฒ ์๋๊น ์ถ๋ค.
๋ ํ๋ ์ฃผ์ํ ์ ์ ํด๋น ๋ผ์ฐํธ์์ layout์ children์ด ์๋ ๊ทธ ๋ฐ๊นฅ ๋ถ๋ถ์์ ๋ฐ์ํ๋ ์๋ฌ๋ ํ์ฌ ๋ผ์ฐํธ์ error ์ปดํฌ๋ํธ๊ฐ ์ก์๋ผ ์ ์๋ค๋ ์ ์ด๋ค. ํด๋น ๋ผ์ฐํธ์์์ Error Boundary๋ children์ wrappingํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ฆ, ๊ทธ ๋ฐ๊นฅ์ ๋ํ ์๋ฌ๋ ์์ ์ปดํฌ๋ํธ์ Error Boundary๊ฐ ์ก์๋ผ ์ ์๋ค.
Image ์ปดํฌ๋ํธ
์โฆ Next.js์ ์ฌ๋ฌ api ์ค Image ์ปดํฌ๋ํธ๊ฐ ๊ฐ์ฅ ์ ๊ธฐํ๋ค. ์ด๋ป๊ฒ Image ์ปดํฌ๋ํธ ํ๋๋ง์ผ๋ก ์ด๋ฏธ์ง ๋ฆฌ์์ค์ ๋ํ ์ต์ ํ๋ฅผ ์ด๋ ๊ฒ๊น์ง ์ด๋ค๋์งโฆ ์ผ๋จ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฏธ์ง๋ ์น ํ์ด์ง์์ ํฐ ๋น์ค์ ์ฐจ์งํ๊ณ ํนํ๋ LCP(Largest Contentful Paint) ์ฑ๋ฅ์ ์๋นํ ์ํฅ์ ์ค๋ค๊ณ ํ๋ค. ๊ทธ๋งํผ ์ด๋ฏธ์ง ์ต์ ํ๋ฅผ ์ํ๋ฉด ์ ์ฒด ๋ ๋๋ง ์๊ฐ์ ๋ง์ด ์ค์ผ ์ ์๋ค๋ ๊ฒ์ด๋ค. Next๋ ์ด๋ฏธ์ง์ ๋ํด ํฌ๊ธฐ ์ต์ ํ, ์ธ๊ด ์์ ์ฑ(layout shift๊ฐ ์์ผ์ด๋๋ค. => ์ด๋ฏธ์ง๊ฐ ๋ ๋๋ง๋์ง ์์๋ ๋ฏธ๋ฆฌ ์ฌ์ด์ฆ๋ฅผ ์ก์๋ฌ์ ๋ฆฌํ๋ก์ฐ๊ฐ ์ผ์ด๋์ง ์๊ฒ ํ๋ค.), ๋น ๋ฅธ ํ์ด์ง ๋ก๋(์ ์ ๊ฐ ํน์ ์ด๋ฏธ์ง๋ฅผ ๋ทฐํฌํธ์ ๋ณด์ด๊ฒ ๋์์ ๋, lazy loading์ผ๋ก ๋ถ๋ฌ์จ๋ค) ๋ฑ์ ์ ๊ณตํ๋ค.(์ง์ง ๊ฐ๋์โฆ๐ฅน)
๐ ํ๊ณ
Next์ ๋ํ ๊ฐ๋ ์ ๋ฐฐ์ฐ๋ฉด ๋ฐฐ์ธ์๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ ํ๋ ์์ํฌ์ ํ์ ๋๋๋ค. ์์งํ ์ฒ์์๋ ๋ด๊ฐ ์๋ ๋ฆฌ์กํธ์๋ ๋ค๋ฅด๊ฒ ๋๋ฌด ๊ตณ์ด์๋ ๋๋..? ์ ํด์ง ๊ท์น๋๋ก ๋ฑ๋ฑ ์ฒด์ค๋ง์ ๋์ผํ๋ ์ฒด์ค ๊ฒ์๊ฐ์๋ค. ๋ญ๊ฐ ๊ฒฌ๊ณ ํ๊ณ ํผํผํ๊ณ ์ฒด๊ณ์ ์ด๊ธด ํ๋ฐ, ์กฐ๊ธ์ ์ต์๋๋ ๋๋. ๊ทธ๋ฐ๋ฐ ๋ฐฐ์ฐ๋ฉด ๋ฐฐ์ธ์๋ก ์ ๋ฆฌ์กํธ ๊ณต์๋ฌธ์์์๋ ๊ฐ๊ธ์ ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ ๋ Next๋ฅผ ๊ถ์ฅํ๋์ง ์ ๊ฒ ๊ฐ๋ค. ์์ง ๋ง์ ๊ฒ๋ค์ด ๋ฐ๋๋ ์ค์ด๊ธฐ๋ ํ์ง๋ง, ์ ๋ง ์ ๋ง ์ฒด๊ณ์ ์ผ๋ก ์ต์ ํ๋ ์ ๋์ด์๊ณ ์ข์ ๊ฐ๋ฐ์ ๊ฒฝํ์ ์ ๊ณตํด์ฃผ๋ ๊ฑฐ ๊ฐ๋ค. ๋, ์์งํ ๋ฆฌ์กํธ๋ ๋ค๋ฅธ ์ฌ๋์ด ์ง ์ฝ๋๋ฅผ ๋ณด๋ฉด ํด๋ ๊ตฌ์กฐ๋ถํฐ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊น์ง ๋๋ฌด ์ฒ์ฐจ๋ง๋ณ์ด๋ผ ์ฝ๋๋ฅผ ์ดํดํ๋ ๋ฐ ํ๋ค๊ธฐ๋ ํ๊ณ ํ์ ๋ ์ข ํ๋ ๋๋์ด์๋๋ฐ, Next๋ ๊ทธ๋ฐ ๋ถ๋ถ๋ค์ด ํจ์ฌ ์ฌ์์ง์ง ์์๊น ์ถ๋ค. ์ผ๋ฅธ Next๋ก๋ ํ๋ก์ ํธ๋ฅผ ์์ํด๋ณด๊ณ ์ถ๋ค!!!!!! (๋๊ทผ๋๊ทผํ๋ค์)