diff --git a/docs/20260618_유저크리에이터채팅_WebSocket전환/prd.md b/docs/20260618_유저크리에이터채팅_WebSocket전환/prd.md index affbc69d..ade3bb2e 100644 --- a/docs/20260618_유저크리에이터채팅_WebSocket전환/prd.md +++ b/docs/20260618_유저크리에이터채팅_WebSocket전환/prd.md @@ -235,6 +235,20 @@ - 관리자/크리에이터/사용자 API가 서로 다른 controller 패키지에 흩어져 있으므로 특정 패키지 검색만으로 점검을 끝내지 않는다. - OSIV off 적용 후 일부 API가 실패하면 WebSocket 전환과 섞어 수정하지 않고, lazy loading 제거 task로 분리해 먼저 처리한다. +### Feature H. OSIV off lazy loading 회귀 보완 + +#### Requirements +- 운영에서 확인된 `LazyInitializationException` 발생 지점을 우선 수정한다. +- `ChatCharacterController.getCharacterDetail` 응답 조립에 필요한 `ChatCharacter.tagMappings.tag`는 OSIV off 상태에서도 접근 가능해야 한다. +- `HomeService.fetchData`의 크리에이터 랭킹 응답 조립에 필요한 `Member.tags.tag`는 OSIV off 상태에서도 접근 가능해야 한다. +- 동일 변환 메서드(`toExplorerSectionCreator`)를 쓰는 기존 랭킹 조회도 같은 쿼리 선로딩 정책을 공유해야 한다. +- 공개 API 응답 스키마는 변경하지 않는다. + +#### Edge Cases +- 컬렉션 크기만 접근하면 nested LAZY proxy(`mapping.tag`)는 초기화되지 않을 수 있다. +- 조회 테스트에 `@Transactional`이 붙어 있으면 서비스 반환 후 lazy 접근 실패를 가릴 수 있다. +- fetch join으로 one-to-many를 가져오면 중복 row가 생길 수 있으므로 결과 중복 여부를 검증한다. + --- ## 8. UX / UI Expectations