๐ ์งํํ ๊ณต๋ถ ๐
01. NextJs ์๊ฐ
(1) ๊ณต์๋ฌธ์์์์ ์๊ฐ

React ํ๋ ์์ํฌ์ธ NextJs
(2)ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฐจ์ด
ํ๋ ์์ํฌ
๊ฐ๋ฐ์๊ฐ ๊ธฐ๋ฅ ๊ตฌํ์๋ง ์ง์คํ ์ ์๋๋ก ํ์ํ ๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ์ ์ฌ์์ ์ง์ํ๋ ๊ธฐ์ ์ ์กฐํฉ
- Spring Framework : Java ๊ธฐ๋ฐ์ ์น(๋ฐฑ์๋) ํ๋ ์์ํฌ
- FE๊น์ง ๊ฐ๋ฅํ full stack coverage framwork
- JSP, Themeleaf
- Vue.js, Angular.js : JavaScript ๊ธฐ๋ฐ ์น ํ๋ก ํธ์๋ SPA ํ๋ ์์ํฌ
- Django, Flask : Python ๊ธฐ๋ฐ ์น ํ๋ ์์ํฌ
- Ruby on Rails
- .NET Framework
- Express.js, NestJS : JavaScript ๊ธฐ๋ฐ ๋ฐฑ์๋ ํ๋ ์์ํฌ
-
๋ผ์ด๋ธ๋ฌ๋ฆฌ
๊ณตํต ๊ธฐ๋ฅ์ ๋ชจ๋ํ๊ฐ ์ด๋ฃจ์ด์ง ํ๋ก๊ทธ๋จ์ ์งํฉ
-
React.js, react-router-dom, redux
์ ์ด์ ์ญ์ (IoC : Inversio of Control)์ผ๋ก๋ ์ค๋ช
ํ ์ ์์

๋ณธ๋ ๊ฐ๋ฐ ์ ์ ์ด๋ฅผ ํ๋ ๊ฒ์ ๊ฐ๋ฐ์์ ์ญํ
ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ํค๋ ๋๋ก ์ฝ๋๋ฅผ ์ง๊ฒ ๋๋ฉด ํ๋ ์์ํฌ๊ฐ ์์์ ์ ์ด์ ํ๋ฆ์ ๊ฐ์ ธ๊ฐ๋ ๊ฒ
์ฆ, React์์๋ Routing์ ๊ตฌํํ๊ธฐ ์ํด ๋ช
๋ น์ด๋ฅผ ํตํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ๊ณ , ์ธํ
์ ํด์ผํ์ง๋ง
NextJs์์๋ ๋ฏธ๋ฆฌ ์ ํด๋๊ธฐ ๋๋ฌธ์ ๊ทธ ๋ฐฉ๋ฒ์ ๋ง๊ฒ ์ฝ๋๋ง ์ ์ฌ์ ์์ ๋ฃ์ด์ฃผ๋ฉด ๋จ
(3) ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก์์ React.js / ํ๋ ์์ํฌ๋ก์์ Next.js
- React.js
- ๊ณต์ํํ์ด์ง: UI๋ฅผ ๋ง๋ค๊ธฐ ์ํ
๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ๊ทธ ์์ฒด๋ง์ผ๋ก ํ๋ ์์ํฌ๋ผ ๋ถ๋ฆฌ๊ธฐ์ ๊ธฐ๋ฅ ๋ถ์กฑ
-
Next.js
- ๊ณต์ํํ์ด์ง: ์น ๊ฐ๋ฐ์ ์ํ
React ํ๋ ์์ํฌ
- React.js๊ฐ ๊ฐ๊ณ ์๋ ๊ธฐ๋ฅ์ ํ์ฅ
- ์น ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ํ์ํ ๋ค์ํ ๊ธฐ๋ฅ๊ณผ ๊ตฌ์กฐ๋ฅผ ์ ๊ณต
๋ค์ํ ๊ธฐ๋ฅ
- ๋ค์ํ ๋ ๋๋ง ๊ธฐ๋ฒ: CSR, SSR, SSG, ISR
- ๋ผ์ฐํ
: ํ์ผ(ํด๋) ๊ธฐ๋ฐ ๋ผ์ฐํ
- route handler: ๋ฐฑ์๋ ๊ฐ๋ฅ
- ์คํ์ผ๋ง: CSS, Sass, CSS-in-JS
- ์ต์ ํ, ๋ฒ๋ค๋ง
a. ์ฝ๋ ์คํ๋ฆฌํ
, ์ด๋ฏธ์ง ์ต์ ํ, ์นํฉ ์ค์ ๋ฑ
02. Next.js ์ฌ์ฉ ์ด์
(1) ์ฌ์ด ์ค์
- ๊ฐ๋ฐ์๊ฐ ๊ฐ๋ฐ์๋ง ์ง์คํ ์ ์๋๋ก
framework ์ญํ ์ถฉ์คํ ์ํ
- ์์์ ์ดํด๋ณธ Next.js๋ ์ฐ๋ฆฌ๊ฐ ํ์๋ก ํ๋ ๊ฑฐ์ ๋ชจ๋ ๊ธฐ๋ฅ์ Default๋ก ๊ฐ๊ณ ์์
(2) Full Stack
API Route๋ฅผ ์ง์ํ์ฌ full stack ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๋๋ก ํจ
- ์์ ๊ธฐ์
, ์์ ํ๋ก์ ํธ์์๋ ์ข์
- ๋๋ ทํ ํ๊ณ์ ์ด ์์
- ๋ณต์กํ ๋ฐฑ์๋ ๋ก์ง์ ๊ตฌํ์ด ์ด๋ ต๊ฑฐ๋ ๋ถ๊ฐ: WebSocket, WebRTC ๋ฑ
WebSocket, WebRTC ๋ชจ๋ ์ค์๊ฐ ํต์ ์ ์ํด ์ค๊ณ๋ ๊ธฐ์
์ฑํ
์ด๋ ํ์ ํ์, ํ์ผ ๊ณต์ ๋ฑ์์ ์ฌ์ฉ๋๋ค๊ณ ์๊ฐํ๋ฉด ๋จ
HTTP์ ๋น๊ตํ์ ๋ ์์ฒญ๋๊ฒ ํจ์จ์ ์ธ ์ค์๊ฐ ํต์ ์ ๊ณต
- FE ๋ก์ง๊ณผ์ ์ค์์ฑ : ๋ฐฑ์๋ ๋ก์ง๋ง ๋ณ๊ฒฝํด์ ๋ฐฐํฌํด์ผ ํ๋ฉด ํ๋ก ํธ์๋๋ ํจ๊ป ๋ฐฐํฌํด์ผ ํจ
- ๊ทธ๋์ ์์ง๊น์ง ์๋ฒฝํ๊ฒ ๋์ฒดํ ์๋ ์์
(3) ์ ์ฉํ ๊ธฐ๋ฒ ์ ๊ณต
- (1) ๋ ๋๋ง
- ๊ธฐ์กด SPA ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ฌ์ฉํ๋ CSR์์ ๋ฒ์ด๋
SSR, ISR, SSG ๋ฑ์ ๊ฐ๋ฅํ๊ฒ ํจ
- (2) ์ฝ๋ ์คํ๋ฆฌํ
- ์น ํ์ด์ง ๋ก๋ฉ ์๊ฐ์ ์ค์ด๊ธฐ ์ํ ๋ฐฉ๋ฒ
- ์ ํต์ ์ผ๋ก ์ฐ๋ฆฌ๋
- ์ผ๋ฐ์ ์ธ ์น์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ ๋ ํด๋น ์น์ฌ์ดํธ ์ ์ฒด ์ฝ๋๋ฅผ ํ ๋ฒ์ ๋ค์ด๋ก๋ ๋ฐ์์ ์ฒ๋ฆฌ
- ๋ฐฉ๋ฌธํ์ง ์๋ ํ์ด์ง๊น์ง ๋ค์ด๋ก๋ ๋ฐ์์ผ๋ง ํ๋ฏ๋ก ์ค๋๊ฑธ๋ฆด ์ ๋ฐ์ ์์
- ์ฌ์ฉ์๊ฐ ์ต์ด View๋ฅผ ๋ณด๊ธฐ ์ํ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆผ
TTV์ ๊ฐ๋
Time To View์ ์ฝ์๋ก์จ, ์ฌ์ฉ์๊ฐ ์ต์ด View๋ฅผ ๋ณผ ์ ์์ ๋ ๊น์ง์ ์๊ฐ์ ๋ปํจ
TTV๊ฐ ์งง์ผ๋ฉด ์งง์์๋ก ์ฌ์ฉ์๊ฐ ๋ ๋น ๋ฅด๊ฒ ์ฝํ
์ธ ๋ฅผ ๋ณผ ์ ์๊ณ , ์ฌ์ฉ์ ๋ง์กฑ๋๋ ์๋น์ค์ ์ ๋ฐ์ ์ธ ํ์ง์ ์ง์ ์ ์ธ ์ํฅ์ ์ฃผ๊ธฐ ๋๋ฌธ์ TTV๋ฅผ ์ค์ด๋ ๊ฒ์ ์ฑ๋ฅ ์ต์ ํ์ ์ฃผ์ํ ์งํ ์ค ํ๋๋ก ์ฑํ
- ์ฝ๋ ์คํ๋ฆฌํ
์ ์ฌ์ฉํ๋ฉด
- ์ฌ์ฉ์๊ฐ ํ์๋ก ํ๋ ๋ถ๋ถ๋ง ์ฐ์ ๋ก๋ฉ
- ๋๋จธ์ง๋ ํ์์ ์ํด์๋ง ๋ก๋ฉ
- TTV ํฅ์
React์์์ ์ฝ๋ ์คํ๋ฆฌํ
๊ตฌํ
import React, { Suspense, lazy } from 'react';
const LazyComponent = lazy(() => import('./LazyComponent'));
function App() {
return (
<div>
<Suspense fallback={<div>Loading...</div>}>
<LazyComponent />
</Suspense>
</div>
);
}
export default App;
- Next.js๋ ์ด๋ ๊ฒ ์ฝ๋ ์คํ๋ฆฌํ
์ ๊ตฌํ
- ๊ฐ ์ปดํฌ๋ํธ๋ฅผ ๋ณ๋ JavaScript ๋ฒ๋ค๋ก ๋ถ๋ฆฌ
- ์ฌ์ฉ์๊ฐ ์ด๋ค ํ์ด์ง์ ๋ฐฉ๋ฌธํ ๋ ํ์ํ ๋ถ๋ถ๋ง ๋ก๋ํ๋๋ก ๋ณด์ฅ
- ํ๋ ์์ํฌ์ธ Next.js๋ ์ด๋ฐ ๋ถ๋ถ์ ๊ฐ๋ฐ์๊ฐ ์ ๊ฒฝ์ฐ์ง ์์๋ ์์์ ๋ค ํด์ค
๊ทธ๋์ ๋๋์ฑ ์ ํ๋ฆฌ์ผ์ด์
์์ฒด์ ๊ตฌ์กฐ์ค๊ณ์ ๋น์ฆ๋์ค ๋ก์ง ๊ตฌํ์ ์ง์คํ ์ ์์
(4) Data Fetching
- ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ fetch ํจ์๊ฐ next.js์์๋ ์ข ๋ ๊ธฐ๋ฅ์ด ํ์ฅ๋์
- ์ฌ๋ฌ ์ต์
์ ํตํด ํ ๋ฒ๋ง ๊ฐ์ ๊ฐ์ ธ์ฌ์ง, ์ผ์ ์ฃผ๊ธฐ๋ณ๋ก ๊ฐ์ ธ์ฌ์ง, ์ง์์ ์ผ๋ก ๊ณ์ ๊ฐ์ ธ์ฌ์ง ๊ฒฐ์ ํ ์ ์์
- ์ด ๊ฐ๋
์ ๋์ค์ ๋ด์ธ SSR, SSG, ISR๊ณผ ๋ฐ์ ํ ์ฐ๊ด์ด ์์
(5) ์ฌ์ด ๋ฐฐํฌ
- Vercel์์ ์ ๊ณตํ๋ Next.js์ธ ๋งํผ ๋ฐฐํฌ๊ฐ ๊ต์ฅํ ์ฌ์
- Full Stack ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐฐํฌ ํ๋ก์ธ์ค
- ์ ํต์ ์ธ ๋ฐฉ๋ฒ
- ํ๋ก ํธ์๋: vercel
- ๋ฐฑ์๋: aws ec2