5.6 KiB
5.6 KiB
문서 대비 구현 리뷰
리뷰 정보와 범위
- 일자: 2026-09-17
- 기준: HEAD
8c87286acd69174f6024d30a267458e838e35cf5및 리뷰 시작 시 존재한 미커밋 변경 - 요구사항:
../prd.md,../plan-task.md의 Phase 1~3 - 방법: 문서, production 코드, 테스트 소스, 현재 diff와 호출 경로 정적 대조
- 사용자 지시에 따라 자동 테스트·빌드·ktlint·애플리케이션 실행은 하지 않았다. 기존 실행 성공 기록을 재검증한 것으로 취급하지 않는다.
- 구현 및 기존 PRD/계획은 수정하지 않았다. 아래 판정은 현재 작업 트리에 대한 것이며 변경 작성자나 의도를 추정하지 않는다.
발견 사항
REV-001 — 강제 JP 매핑 값이 변경됨
- 심각도: High / 상태: 확정
- 요구사항: PRD §3 기존 동작 유지, §4 강제 매핑 값 변경 금지; 계획 P3-T1의 resolver 변경 제외
- 근거:
src/main/kotlin/kr/co/vividnext/sodalive/member/contentpreference/MemberContentPreferenceCountryResolver.kt:6에서FORCED_JP_MEMBER_IDS의2L이 제거됐다. - 코드 추적: 회원 ID 2, 인증 없음, 요청 국가 KR 또는 헤더 없음,
isAdultContentVisible=true이면 기존 JP 판정/성인 노출 true에서 KR 판정/false로 바뀐다. - 관련 테스트도
MemberContentPreferenceServiceTest.kt:64,MemberContentPreferenceIntegrationTest.kt:187에서 ID 2를 29721로 교체해 기존 매핑 회귀를 검출하지 못한다. - 권장 조치: 문서대로라면 기존 매핑과 해당 테스트 대상을 복원한다. 별도로 의도한 정책 변경이라면 해당 결정과 범위를 문서에 명시해야 한다.
REV-002 — 저장 국가 무시 검증이 이전되지 않음
- 심각도: Medium / 상태: 확정
- 요구사항: DEPREM-004, P3-T1
- 근거: 삭제된 PolicyTest는 저장
member.countryCode="KR", 요청 국가 US 조건을 검증했다. 현재MemberContentPreferenceServiceTest.kt:469의 해외 노출 테스트와:536의 회원 생성 함수는 저장 국가를 설정하지 않는다. IntegrationTest에도 이 충돌 조건이 없다. - 영향: 현재 resolver는 저장 국가를 참조하지 않아 구현 자체는 맞지만, 문서에서 이전하도록 요구한 고유 회귀 검증이 빠졌다.
plan-task.md:224의 기존 테스트가 이미 커버한다는 기록은 부정확하다. - 권장 조치: 일반 미인증 회원의 저장 국가를 KR로 설정하고 요청 국가는 US로 두어, 정식 진입점의 국가 US/성인 노출 true를 확인하는 검증을 추가한다.
REV-003 — 호출부 합계 오기
- 심각도: Low / 상태: 확정
- 근거: PRD §5.2 표의 합계와 실제 치환은 모두 12개 파일 27곳이다. PRD와 계획에는 반복해서 24곳으로 기록돼 있다.
- 영향: 호출 치환 누락은 없으며 문서 수치가 틀렸다.
- 권장 조치: 두 문서의 합계를 27곳으로 정정한다.
충족 항목과 한계
| 항목 | 정적 검토 결과 |
|---|---|
| DEPREM-001 단일 진입점 | 기존 resolveCountryCode + calculateIsAdultForQuery 재사용, 추가 DB 조회 없음 |
| DEPREM-002 호출부 이전 | 12개 파일 27곳 이전, 인자 및 홈의 member=null → false 유지 |
| DEPREM-003 정의/참조 제거 | 두 파일 삭제, src/main/kotlin 및 src/test/kotlin의 두 Deprecated 함수 이름 검색 0건 |
| DEPREM-004 고유 검증 이전 | 정규화/null 국가값 fallback은 존재, 저장 국가 충돌 검증 누락 |
| DEPREM-005 실행 검증 | 사용자 요청에 따라 재실행 제외 |
| API 계약 | 기존 공개 메서드 인자와 request/response 스키마 변경 없음 |
| 요청 경로/의존성 | 변경된 조회 메서드의 비웹 호출 및 새 순환 의존 발견 없음 |
국가값 null 검증은 요청 스코프 자체가 없는 상황과 다르다. 새 경로는 요청 스코프와 회원 ID를 요구하므로 모든 입력에서 구 함수와 동등하다고 일반화할 수 없다. 다만 검토한 변경 호출 경로에서 해당 비웹/ID 없는 입력은 확인하지 못해 별도 운영 결함으로 확정하지 않았다.
리뷰 종료 판정과 후속 작업
요구사항, 테스트 소스, 코드 품질, 보안, 주변 호출 맥락의 검토 결과를 종합했다. 확정 불일치 3건으로 문서와 완전히 일치하는 구현이라고 판정할 수 없다.
이번 요청은 검토이므로 수정 goal은 실행하지 않았다. 후속 구현 시 기존 완료 기록을 유지하면서 REV-001 매핑 일치, REV-002 고유 검증 이전, REV-003 문서 수치 정정을 별도 회귀 Task로 계획에 추가한다. 자동 검증은 이번 검토에서 수행하지 않았다.
후속 판정 정정 — 2026-09-17
위 내용은 최초 검토 당시 기록이며, 사용자 확인 이후 현재 판정은 다음과 같다.
- REV-001: 결함 판정 철회. 사용자가
2L제거를 의도한 변경으로 확정했다. PRD·계획에 해당 예외를 반영했으며 매핑과 테스트 대상을 복원하지 않는다. - REV-002: 구현 완료 / 실행 검증 대기.
MemberContentPreferenceServiceTest.shouldIgnoreStoredCountryCodeWhenRequestCountryIsNotKr를 추가해 저장 KR·요청 US·미인증 회원 조건에서 국가 결과 US와 전달값 true/false 보존을 검증한다. production은 변경하지 않았고, 기존 자동 테스트 미실행 지시에 따라 focused test와 ktlint는 실행하지 않았다. - REV-003: 문서 정정 완료. PRD·계획의 24곳 표기를 실제 합계 27곳으로 정정했다.
- 현재 결론:
P3-R1테스트 구현과 소스 검토는 완료했으며, 남은 항목은 focused test와 ktlint 실행 검증이다.