Next 기본 동작 방식
서버에서 데이터를 받아와서 클라이언트로 전달 => 클라이언트가 이를 화면에 렌더링
클라이언트 컴포넌트
- 브라우저에서 실행되며, 사용자와의 상호작용을 처리
- 상태(state) 관리와 효과(effect) 훅을 사용할 수 있음
- 이벤트 핸들링이 가능
- 필요에 따라 서버에서도 초기 렌더링이 이루어짐
단, 클라이언트에서만 실행해야 하는 코드(ex:window 객체나 DOM조작)가 있다면 에러 발생가능 - 비동기로 데이터를 가져오거나 렌더링해야할 때 로딩 상태를 처리할수 있도록 Suspense로 감싸줘야함
// 클라이언트 컴포넌트
"use client";
import { useState } from 'react';
function ClientComponent() {
const [count, setCount] = useState(0);
return (
<div>
<button onClick={() => setCount(count + 1)}>Count: {count}</button>
</div>
);
}
//위에 클라이언트 컴포넌트를 임포트할때
export default function Layout({...}){
return (
...
<Suspense fallback={<div>Loading...</div>}>
<ClientComponent />
</Suspense>
...
)
}
서버 컴포넌트
- 서버 실행 시간(npm run start)에 데이터를 가져오고 렌더링함
- 정적 HTML, 동적 데이터 처리를 동시에 지원
- 주로 데이터베이스와의 상호작용이나 API 호출 등 서버 측 로직을 처리
- 캐싱⭕ : cache : 'force-cache'
🎈 데이터 요청 → Data Cache에 저장 → Request Memoization 최적화 → Full Route Cache로 정적 HTML 생성 → 사용자에게 반환 - 캐싱❌ : cache : 'no-store'
🎈 데이터 요청 → 캐싱 없이(위에 force-cache의 과정없이) 실시간 데이터 반환 → 사용자에게 바로 전달
// 서버 컴포넌트
function ServerComponent() {
const data = fetchData(); // 서버에서 데이터 가져오기
return (
<div>
<h1>Data: {data}</h1>
</div>
);
}
'넥스트js' 카테고리의 다른 글
[next.js] 개발모드 vs 빌드모드🤔 (0) | 2024.12.12 |
---|---|
[next.js]파일구조 (1) | 2024.12.11 |
[next.js] Its type '() => Promise<JSX.Element>' is not a valid JSX element type. 에러 (0) | 2024.12.10 |
[next.js]a태그 vs Link태그 vs Router(useRouter) (0) | 2024.12.10 |
[next.js] hook.js:608 Warning: Extra attributes from the server: class Error Component Stack 오류 (0) | 2024.12.10 |