01 · Problem
PR 댓글 이벤트마다 전체 데이터를 다시 조회하면 이벤트 수만큼 API 요청이 늘고, 실시간 연결과 room 구독 책임도 컴포넌트에 흩어졌습니다.
GitHub PR을 연동해 AI 코드 리뷰와 실시간 댓글 협업을 제공하는 개발자용 플랫폼입니다.
PR 댓글 이벤트마다 전체 데이터를 다시 조회하면 이벤트 수만큼 API 요청이 늘고, 실시간 연결과 room 구독 책임도 컴포넌트에 흩어졌습니다.
Frontend / Full-stack · Socket.io 이벤트를 TanStack Query 캐시에 직접 반영하고, 연결·room 구독·비동기 AI 리뷰 상태를 각각 분리했습니다.
setQueryData로 댓글 변경분만 반영하고 useSyncExternalStore 기반 socket store, room hook, AI 리뷰 상태 머신을 구현했습니다.
서버 상태의 기준은 TanStack Query 캐시로 유지하고 Socket.io는 변경 이벤트 전달에 집중시켰으며, Prisma와 PostgreSQL로 리뷰·댓글 관계를 관리했습니다.
댓글 이벤트 10건 기준 API 요청 10→0회, 총 처리 시간 21102→1235ms, 클라이언트 반영 latency 평균 3.57ms / p95 7.2ms를 측정했습니다.

setQueryData로 댓글 캐시를 직접 갱신해 refetch 경로를 제거했다./measurements/comments 페이지에서 invalidate/refetch와 같은 조건으로 비교 측정도 함께 진행했다.

PENDING 상태를 만들고, 분석 완료 후 PENDING -> IN_PROGRESS -> COMPLETED/FAILED 흐름으로 상태를 갱신했다.useSyncExternalStore 기반 단일 socket store를 만들고, room join/leave는 useSocketRoom으로 분리했다.Promise.all로 병렬화하고, 무거운 차트와 diff viewer는 next/dynamic으로 분리했다.invalidate/refetch 대비 API 요청을 10회 -> 0회로 줄였습니다.useSyncExternalStore 기반 socket store로 실시간 연결과 구독 책임을 컴포넌트 외부로 분리했습니다.PENDING 상태를 제공해 AI 분석 대기 중에도 사용자가 처리 흐름을 확인할 수 있게 했습니다.setQueryData는 즉시 반영이 빠르지만, 서버 응답을 다시 받지 않기 때문에 캐시 일관성 관리 책임이 클라이언트에 생깁니다.PENDING 상태와 완료 알림 흐름을 분리했습니다.useSyncExternalStore 기반 socket store로 연결과 구독 책임을 분리했습니다.PENDING 상태와 알림 흐름을 제공해 사용자가 처리 상태를 확인할 수 있게 했습니다.