React Server Components(RSC)에서 Apollo Client의 PreloadQuery가 데이터를 useSuspenseQuery로 잘 전달하는지 실험하는 테스트 환경입니다.
- Next.js 15 (App Router)
- Apollo Client with Next.js integration
- GraphQL Yoga (API 서버)
- TypeScript
- Tailwind CSS
- 서버에서
PreloadQuery
로 데이터 미리 로드 - 클라이언트 컴포넌트에서
useSuspenseQuery
로 데이터 사용 - 추가 네트워크 요청 없이 서버에서 클라이언트로 데이터 전달
PreloadQuery
에서 render prop을 사용하여queryRef
생성- 클라이언트 컴포넌트에서
useReadQuery
로 데이터 읽기 - 동일한 쿼리를 다른 변수로 독립적으로 사용 가능
- GraphQL Yoga를 사용한 API 라우트
- User, Post 타입 정의
- 가짜 데이터와 리졸버 구현
- 개발 환경에서 GraphQL Playground 제공
# 의존성 설치
npm install
# 개발 서버 실행
npm run dev
# 빌드
npm run build
# 프로덕션 서버 실행
npm start
src/
├── app/
│ ├── api/graphql/route.ts # GraphQL API 라우트
│ ├── page.tsx # 메인 페이지 (PreloadQuery + useSuspenseQuery)
│ ├── queryref-test/page.tsx # QueryRef 패턴 테스트 페이지
│ └── layout.tsx # 루트 레이아웃
├── components/
│ ├── posts-list.tsx # 게시글 목록 컴포넌트
│ ├── users-list.tsx # 사용자 목록 컴포넌트
│ └── post-detail.tsx # 게시글 상세 컴포넌트
└── lib/
├── apollo-rsc.ts # RSC용 Apollo Client 설정
├── apollo-wrapper.tsx # 클라이언트용 Apollo Provider
├── apollo-client.ts # 클라이언트용 Apollo Client 설정
├── queries.ts # GraphQL 쿼리 정의
└── types.ts # TypeScript 타입 정의
- GitHub 연결: 프로젝트를 GitHub에 푸시
- Vercel 연결: Vercel에서 GitHub 저장소 연결
- 자동 배포: 코드 변경 시 자동으로 배포됨
배포 시 다음 환경 변수가 자동으로 설정됩니다:
NEXT_PUBLIC_GRAPHQL_URL
:/api/graphql
GRAPHQL_URL
:/api/graphql
- PreloadQuery + useSuspenseQuery 패턴 테스트
- 게시글 목록과 사용자 목록 표시
- 서버에서 데이터 미리 로드 후 클라이언트로 전달
- PreloadQuery + queryRef + useReadQuery 패턴 테스트
- 동일한 쿼리를 다른 변수로 여러 번 사용
- 각각 독립적인 queryRef 생성
개발 환경에서 /api/graphql
에 접속하면 GraphQL Playground를 사용할 수 있습니다.
- RSC와 Apollo Client 통합: Next.js App Router에서 Apollo Client 사용법
- 데이터 흐름: 서버 → 클라이언트 데이터 전달 과정
- 타입 안전성: TypeScript와 GraphQL 타입 정의
- 성능 최적화: 서버에서 데이터 미리 로드로 초기 로딩 시간 단축
- Node.js >= 18.0.0
- npm 또는 yarn
- TypeScript 5.x
- Next.js 15.x
MIT License