Files
sodalive-backend-spring-boot/docs/20261029_가로형서브배너/reviews/banner-language-review.md
T

5.5 KiB

메인 탭·서브 배너 언어 후속 리뷰

리뷰 정보

  • 일자: 2026-11-02
  • 대상: 이벤트 언어 P3-T1/P3-GATE, 서브 배너 P7-T1/P7-GATE.
  • 기준: 7fce26ad 이후 현재 test 브랜치 변경. 별도 worktree 없음.
  • 독립 리뷰어: Oracle (ses_e634d4707ffe00405lhcwZXMXM). 기록 담당: Sisyphus.
  • 요구사항: 이벤트 PRD EVENT-LANG-010, 서브 배너 PRD SB-013/DEC-012, 기존 API 계약.

판정

명세 준수 APPROVE, 코드 품질·시나리오 커버리지 APPROVE. 확정 발견 사항 없음. 초기 리뷰 시 전체 검증은 진행 중이므로 전체 Gate 완료 판정은 보류했다. 후속 실행 결과는 아래에 누적한다.

시나리오 확인한 근거
S1 메인 탭 여섯 호출부가 기존 isAdult를 보존하고 resolveCountryCode(member)로 JP→JA/그 외→KO를 전달한다. EventBannerLanguageIntegrationTest가 실제 HTTP에서 정확한 ID·순서·5필드, 일반/강제 국가와 익명 홈을 검증한다.
S2 공개 서브 배너 두 facade가 member를 전달하고 repository가 언어 equality를 기존 활성·기간 조건과 결합한다. RecommendationSubBannerIntegrationTest가 JP/KR/US/누락/강제 국가, 빈 결과, EN 제외, 6필드 및 원문 링크를 확인한다.
S3 관리자 생성 언어 생략 KO, 수정 생략 보존, explicit null/non-text/blank/unknown의 업로드·쓰기 전 400을 검증한다. 실제 DB 불변, S3 상호작용 0, 실제 repository spy save 0을 함께 확인한다. 관리자 조회는 모든 언어·9필드다.
S4 인접 회귀 focused 11개 클래스 145 tests, failures/errors/skipped 0. 기존 기간·초 정밀도·소프트 삭제·정렬·무절단 테스트 보존. 전체 suite/lint/build는 초기 리뷰 시 진행 중이었다.

검토한 증거

  • 신규 실제 HTTP 테스트와 기존 서브 배너 domain/persistence/admin/recommendation 및 facade 테스트의 assertion을 직접 검토했다.
  • final-focused.log의 BUILD SUCCESSFUL in 8m 8s, 11개 XML의 145 tests 및 실제 HTTP 185건/DB 증거를 대조했다. 해당 임시 원본은 작업 종료 시 정리하며 핵심 결과를 이 문서와 두 계획에 보존한다.
  • 신규 CREATE와 기존 테이블 migration의 guarded 컬럼 추가 → NULL만 KO backfill → NOT NULL/default 흐름을 검토했다. H2 CREATE 검증과 native MySQL 실행을 구분한다.
  • LSP 도구가 없어 lsp_diagnostics는 미실행이며 Gradle 컴파일·lint를 대체 근거로 사용한다. LSP 통과로 표현하지 않는다.

운영 한계

운영 DB·native MySQL·실제 AWS·앱/관리자 UI·배포는 검증 범위 밖이다. 서버 배포 전에 스키마를 준비해야 한다. 임의 링크에 이벤트 관계나 자동 언어 검증을 추가하지 않았으므로 JA 소재 및 연결 이벤트 언어의 수동 정합성 확인이 필요하다. 이벤트 상세·성인 정책은 변경하지 않는다.

후속 검증

전체 검증 결과와 소유 자원 정리 증거는 실행 종료 후 누적한다. 확정 결함이 없어 회귀 수정 Goal 전환 항목은 없다.

2026-11-03 부모 재검증

  • ./gradlew test ktlintCheck bootJar --continue --console=plain --no-daemon -Pkotlin.compiler.execution.strategy=in-process: 전체 336 suites / 2,928 tests / failures=0 / errors=0 / skipped=0, bootJar 성공. 테스트 인자 줄바꿈 한 곳만 lint 실패해 최초 명령 exit 1 (15m 50s).
  • 제품 코드 변경 없이 테스트 인자 배치만 수정한 뒤 해당 RecommendationSubBannerIntegrationTest와 ktlintCheck bootJar 재실행: exit 0, 26 tests / 실패·오류·무시 0, BUILD SUCCESSFUL in 4m 32s.
  • 전체 XML은 재실행 전에 부모가 집계했다. 현재 보고서는 26개 재실행 결과로 갱신되어 있으며 전체 성공 기록과 구분한다. 공백 변경만 있어 전체 재실행 대신 영향받은 실제 HTTP suite를 다시 구동했다.
  • 기존 Oracle 세션의 continuation 도구가 Task not found를 반환해 새 Oracle 세션에 공백 delta와 최종 실행 증거만 재판정하도록 전달했다. 전면 리뷰를 중복 수행하지 않는다.
  • 후속 Oracle (ses_e6323aa1afferoJ13TsZawApwR) 판정: APPROVE. 동작 변경 없음, 영향 HTTP 26개 및 lint/build Gate 승인, 추가 발견 사항 없음. 전체 2,928개 집계는 XML 갱신 전 부모 기록에 의존함을 명시했다. 부모는 최종 bash 실행의 정상 반환과 BUILD SUCCESSFUL을 직접 확인했다.
  • 최종 결론: 승인된 backend 범위의 P3-GATE/P7-GATE 완료. 운영 배포 성공이나 LSP 실행을 주장하지 않는다.

종료 증거

  • 제품 커밋: 255da2b6 (메인 탭 필터·HTTP 회귀), c4c61e36 (서브 배너 언어·SQL·테스트). 두 커밋의 ktlint hook 및 커밋 메시지 검증 통과. git diff --exit-code -- src 정상으로 hook 후 추가 소스 변경 없음.
  • 전체 검증 runner PID 49134 종료, pgrep -fl 'GradleDaemon|GradleWorkerMain|redis-server' 결과 없음. 랜덤 포트 테스트 서버는 테스트 컨텍스트 종료로 정리됐다.
  • 소유 임시 경로 /tmp/soda-banner-ulw.HDkpg4, /tmp/soda-banner-worker.AMcPYe, /tmp/soda-banner-impl.CfAkhD, /tmp/soda-banner-review.tIFyeb는 소유·실경로 확인 후 삭제하고 네 경로 모두 부재를 확인했다. 임시 notepad도 삭제했다. 공유 Gradle 캐시와 저장소 build reports/JAR는 보존했다.
  • worktree 생성·운영 DDL·배포·push 없음. 현재 test 브랜치에서 완료했다.