4.8 KiB
4.8 KiB
- ChatCharacterBanner 엔티티에 한국어 기본 배너와 일본어/영어 배너를 구분할 언어 필드를 유지한다.
- 관리자 배너 등록 API가 기본언어 한국어를 기본값으로 사용하고, 일본어/영어 배너도 등록할 수 있도록 요청값과 서비스 로직을 수정한다.
- 캐릭터 메인 배너 조회가 요청 언어 배너를 우선 조회하고, 없으면 한국어 배너를 fallback 하도록 수정한다.
- 관련 테스트 또는 검증을 수행하고 결과를 기록한다.
- 관리자 배너 등록 요청의
lang이 ISO 639 언어코드(ko,en,ja)로 들어와도Langenum으로 역직렬화되도록 수정한다.
검증 기록
1차 구현
- 무엇을: 채팅 캐릭터 배너를 기본 배너와 일본어 배너 행으로 분리해 저장하도록
lang필드를 추가하고, 관리자 등록 API와 메인 배너 조회 로직을 일본어 기준으로 분기했다. 운영 반영용 MySQL DDL 문서docs/20260402_chat_character_banner_lang_ddl.sql도 함께 추가했다. - 왜: 현재 배너 구조는 이미지 1개 기준 행 모델이라 동일 목적지에 여러 언어 이미지를 한 레코드에 묶는 것보다, 언어별 행 분리가 기존 정렬/활성화/수정 흐름을 가장 적게 건드리는 방식이기 때문이다.
- 어떻게:
./gradlew test --tests kr.co.vividnext.sodalive.chat.character.service.ChatCharacterBannerServiceTest로 서비스 분기와 언어 검증을 확인했고,./gradlew test --tests kr.co.vividnext.sodalive.admin.chat.AdminChatBannerControllerTest --tests kr.co.vividnext.sodalive.chat.character.controller.ChatCharacterControllerTest --tests kr.co.vividnext.sodalive.chat.character.service.ChatCharacterBannerServiceTest로 등록 API와 메인 조회 API 흐름을 실행 검증했다. 이어서./gradlew ktlintCheck,./gradlew build를 실행했다. - 결과: 지정한 테스트는 모두 성공했고,
ktlintCheck와build도 모두 성공했다. Kotlin LSP 서버가 없어lsp_diagnostics는 수행할 수 없었다.
2차 수정
- 무엇을: 배너 기본언어를 명시적
KO로 변경하고, 등록 가능 언어를KO,EN,JA로 확장했다. 또한 메인 배너 조회는 요청 언어 배너가 없을 때KO배너로 fallback 하도록 수정했고, MySQL DDL도NULL -> KO데이터 정규화와NOT NULL DEFAULT 'KO'로 보강했다. - 왜: 기본 배너를
null로 해석하는 방식보다KO를 명시 저장하는 방식이 등록 규칙과 조회 fallback 규칙을 더 일관되게 표현하고, 영어 배너 추가 요구사항도 자연스럽게 수용할 수 있기 때문이다. - 어떻게: 서비스 로직과 테스트를
KO/EN/JA기준으로 재작성하고, 관리자 등록 API 기본값과 메인 조회 경로를 대상으로 단위 테스트를 추가·수정했다. 이후ktlintCheck, 대상 테스트, 전체 빌드를 다시 실행했다. - 결과:
./gradlew test --tests kr.co.vividnext.sodalive.chat.character.service.ChatCharacterBannerServiceTest --tests kr.co.vividnext.sodalive.admin.chat.AdminChatBannerControllerTest --tests kr.co.vividnext.sodalive.chat.character.controller.ChatCharacterControllerTest,./gradlew ktlintCheck,./gradlew build를 모두 실행했고 전부 성공했다. 관리자 등록 테스트에서는lang이 없을 때registerBanner(2L, "", null)호출이 발생하고 성공 응답이 반환되는 것을 확인했다. Kotlin LSP 서버는 없어lsp_diagnostics는 이번에도 수행하지 못했다.
3차 수정
- 무엇을:
Langenum에 Jackson@JsonCreator기반 역직렬화 진입점을 추가해 관리자 배너 등록 요청의lang이ko,en,ja같은 ISO 639 코드로 들어와도Lang.KO,Lang.EN,Lang.JA로 파싱되도록 수정했다. 기존 enum 이름(KO,EN,JA) 입력도 계속 허용했다. - 왜: 관리자 요청에서
Langenum을 직접 받고 있으므로, 외부에서 ISO 639 코드 값을 보내더라도 별도 DTO 변환 없이 안전하게 처리되게 해야 하기 때문이다. - 어떻게:
Lang.fromCode(...)를 Jackson 역직렬화 팩토리로 연결하고, 관리자 배너 컨트롤러 테스트 요청값을"ja"로 바꿨다. 또한ObjectMapper().readValue(...)로"en"입력이 실제Lang.EN으로 역직렬화되는 테스트를 추가했다. - 결과:
./gradlew test --tests kr.co.vividnext.sodalive.admin.chat.AdminChatBannerControllerTest,./gradlew ktlintCheck,./gradlew build를 실행했고 모두 성공했다. 관리자 배너 등록 테스트는 실제 요청 문자열{"characterId":1,"lang":"ja"}를 사용해 성공 응답과registerBanner(..., Lang.JA)호출을 확인했다. Kotlin LSP 서버는 없어lsp_diagnostics는 수행하지 못했다.