registerSSR를 사용하여 서버에서 데이터를 미리 로드하고 클라이언트로 전달하는 방법을 알아봅니다.
데이터 프리로딩 개요
registerSSR
라우트별 preload 설정 백엔드 직접 호출
SSRQuery
타입 안전한 쿼리 모델/메서드 지정
자동 주입
QueryClient에 자동 주입 Hydration 처리
No HTTP
네트워크 오버헤드 없음 빠른 응답
registerSSR 사용법
기본 구조
- 서버에서
/users/123요청 받음 path매칭:/users/:id→params = { id: "123" }preload함수 실행 →SSRQuery[]반환UserModel.getUser("C", 123)백엔드 직접 호출 (HTTP 없음!)- 결과를
QueryClient.setQueryData(["User", "getUser", "C", 123], result)주입 - HTML + dehydratedState를 클라이언트로 전송
- 클라이언트가 hydrate하여 즉시 데이터 사용
SSRQuery 타입
params는 백엔드 메서드의 파라미터 순서를 따릅니다 (Context 제외).
실전 예제
단일 데이터 로딩
사용자 상세 페이지에서 사용자 정보를 프리로드합니다.여러 데이터 동시 로딩
게시글 상세 페이지에서 게시글과 댓글을 동시에 프리로드합니다.파라미터 가공
URL 파라미터를 가공하여 사용할 수 있습니다.조건부 프리로딩
특정 조건에 따라 다른 데이터를 로드할 수 있습니다.쿼리 키 매칭
프리로드된 데이터가 클라이언트의 useQuery와 매칭되려면 queryKey가 정확히 일치해야 합니다.올바른 매칭
잘못된 매칭
SSRRoute 옵션
disableHydrate
Hydration을 비활성화하고 클라이언트에서 새로 렌더링합니다.- 서버/클라이언트 렌더링 결과가 다를 수 있는 경우
- 실시간 데이터가 중요한 경우
- Hydration mismatch 해결
cacheControl
SSR 응답의 Cache-Control 헤더를 설정합니다.내부 동작 원리
1. 서버 렌더링 과정
2. entry-server에서 데이터 주입
3. 클라이언트 Hydration
에러 처리
프리로드 실패 처리
성능 최적화
1. Subset 활용
필요한 필드만 로드하여 전송 크기를 줄입니다.2. 병렬 로딩
여러 쿼리를 동시에 실행합니다 (자동으로 병렬 처리됨).3. 조건부 로딩
필요한 데이터만 선택적으로 로드합니다.주의사항
다음 단계
SSR 설정
SSR 기본 구조
Hydration 전략
하이드레이션 최적화
캐시 제어
캐싱 전략
Subset System
데이터 최적화