docs(creatorname): 언어별 이름 관리 요구사항과 검증 기록을 정리한다

This commit is contained in:
2026-10-16 14:03:08 +09:00
parent 47ccea7ef6
commit 9da27d3feb
8 changed files with 2541 additions and 0 deletions
@@ -0,0 +1,47 @@
# COR015 레거시 이름 정리 정적 리뷰
## 리뷰 정보
- 날짜: 2026-10-15
- 대상: 기존 미커밋 COR012~014 변경 위의 COR015 선택적 롤백·테스트 정리. 전체 HEAD diff를 이번 변경으로 간주하지 않는다.
- 기준: 같은 디렉터리 상위 `prd.md` COR015, `plan-task.md` LEGACY-TRIM-T1의 S1~S3.
- 독립 검토 세션: `ses_ec179d026ffeTbyj1KNLcvwUpg`.
- 판정: **APPROVE(static)**. 확정 발견 사항 없음. 실행 검증 승인이나 테스트 통과 판정은 아니다.
## 확인 결과
| 기준 | 정적 확인 |
|---|---|
| S1 제외 영역 원본 표시 | 7개 콘텐츠 탭의 중첩 목록·랭킹·추천·태그·큐레이션, 레거시 커뮤니티 목록/상세/첫 댓글/댓글/답글/구매 및 팬톡 목록/작성/수정에서 원본을 사용한다. 기존 삭제 회원 접두사 처리를 보존한다. |
| S2 유지 대상 보존 | nullable 이름 언어는 공유 조회의 원본 모드만 제어하며 제목 번역 언어는 유지한다. Home 등 유지 호출자는 요청 Lang을 전달한다. v2 커뮤니티·팬톡 JOIN, 관리자 회원 목록의 localizedNames와 PUT을 보존한다. |
| S3 의존성·테스트 정리 | 삭제 래퍼/helper/필드의 src 참조가 없다. 테스트 생성자·조회 인자는 production과 일치하며 실제 core 빈이 필요한 4개 테스트에 설정을 유지한다. 래퍼의 SQL 수·역할·빈 입력·현재 원본 fallback 단언은 core 서비스 테스트에 통합했다. |
검토한 주요 테스트는 `AudioContentRepositoryLocalizedNameTest`, `ExplorerLocalizedNameEndToEndTest`,
`LegacyCurrentNameReadIntegrationTest`, `ExplorerServiceTest`, `LegacyFanTalkReplyCharacterizationTest`,
`CreatorLocalizedNameServiceTest`다. 삭제 테스트는 제거된 래퍼 전용이며 기존 업무·번역·권한 및 v2 회귀는 유지한다.
새 raw/shared fixture와 단언에서 정적으로 확정 가능한 실패는 발견하지 못했다.
## 검증과 한계
- 부모와 검토자의 `GIT_MASTER=1 git diff --check`: 오류 없음.
- 부모의 `rg` 잔여 참조/공유 caller 대조 및 미추적 변경 테스트 4개 `git diff --no-index --check`: 지적 없음.
- 사용자 제한으로 Gradle·빌드·컴파일·테스트·lint·앱·HTTP·DB 실행은 하지 않았다. LSP 도구도 제공되지 않는다.
- 실제 SQL 실행, Spring 컨텍스트 기동, HTTP 회귀는 미검증이다. COR013의 과거 통과 기록으로 대체하지 않는다.
- 검증용 프로세스·포트·DB 연결을 생성하지 않았다. 운영 적용·배포·커밋·푸시도 하지 않았다.
- 확정 회귀 수정 Task 전환 항목 없음. 실행 허용 후 COR014/COR015의 focused·영향 회귀 검증이 필요하다.
## COR016 실행 결과에 따른 후속 판정
- 사용자 전체 실행에서 2271건 중 2건 실패가 확인됐다. 앞선 정적 리뷰는 H2 번역 JSON fixture 차이를 놓쳤으며 실행 통과 증거로 사용하지 않는다.
- 확정 항목 `REV-COR016-001`: AudioContentRepositoryLocalizedNameTest의 두 새 번역 fixture가 JSON 객체 대신 JSON 문자열로 저장된다. 랭킹은 converter 역직렬화 예외, 시리즈는 빈 번역 제목의 원문 fallback으로 실패한다. 요구사항·기대값은 유효하고 두 테스트 모두 유지 대상이다.
- 소유 Goal: `JSON-FIXTURE-T1`. 수정은 두 fixture에 기존 H2 FORMAT JSON 적재 패턴을 추가하는 것으로 제한했다. 운영 코드와 단언은 그대로다.
- focused 검증: `./gradlew test --tests 'kr.co.vividnext.sodalive.content.AudioContentRepositoryLocalizedNameTest' --offline --console=plain` exit 0, 6건 모두 통과, 22초. 실제 H2/JPA 조회에서 닉네임 raw/KO/JA와 번역 제목 단언을 확인했다.
- 전체 회귀·ktlint 및 수정분 독립 리뷰: 진행 중. 그 결과 확인 전 전체 완료로 간주하지 않는다.
### COR016 최종 결과
- 독립 좁은 리뷰 `ses_ec1576ac3ffesO9K10ayy0JKzr`: **APPROVE**. H2-only scoped update와 flush/clear 순서, 단언 보존을 확인했다.
- 전체 테스트: 323 suites/2271 tests/실패0/오류0/skip0. 첫 복합 명령은 test lint 줄바꿈 오류로 종료 코드 1이므로 전체 명령 성공으로 기록하지 않는다.
- 후속 형식 보정: 테스트의 인자 줄바꿈과 이전 HomeService 래퍼 전환 호출의 줄바꿈 1곳을 정리했다. 운영 의미와 기대값 변화는 없다.
- 최종 focused+전체 ktlint 명령: 종료 코드 0, 40초, 대상 클래스6건+HomeService1건 모두 통과하고 ktlintCheck도 통과했다. 전체 회귀 재실행은 형식 변경뿐이므로 생략했다.
- `REV-COR016-001` 수정·검증 완료. 부모가 전체/후속 XML 집계와 테스트 프로세스 잔존 없음, HomeService 공백 제거 내용 동일을 확인했다. 상세 명령·로그는 plan-task.md의 COR016 기록을 따른다.