4.8 KiB
4.8 KiB
작업 개요
AdminAgentCreatorService의 소속 등록 시assignedAt입력값을 한국 시간에서 UTC로 변환해 저장한다.AdminAgentCreatorService의 소속 해제 시unassignedAt입력값을 한국 시간에서 UTC로 변환해 검증 후 저장한다.AdminAgentCreatorServiceTest에 한국 시간 입력이 UTC로 저장되는 회귀 테스트를 추가한다.- 변경 파일 진단과 Gradle 검증(
test,ktlintCheck)을 수행하고 결과를 기록한다. LocalDateTimeExtensions에 타임존 입력 기반 UTC 변환 확장함수를 추가하고 기본 타임존을 KST로 둔다.AdminAgentCreatorService의 시간 변환을 확장함수 호출로 리팩터링한다.- 확장함수 테스트와 관련 서비스 테스트를 다시 검증하고 기록한다.
AdminAgentReadService.getAssignedCreators응답의assignedAt을 UTC에서 KST로 변환해 내려오도록 수정한다.AdminAgentReadServiceTest에getAssignedCreators응답 시간이 KST로 변환되는 회귀 테스트를 추가한다.- 변경 파일 진단과 관련 Gradle 테스트를 수행하고 결과를 기록한다.
검증 기록
1차 구현
- 무엇을: 관리자 에이전트-크리에이터 소속 등록/해제 시각의 UTC 저장 정합성 보정.
- 왜: 요청 시각은 한국 시간 기준인데 현재 DB에는 변환 없이 그대로 저장되어 실제 저장 기준과 맞지 않음.
- 어떻게:
AdminAgentCreatorServiceTest에 등록 저장값 UTC 변환, 해제 저장값 UTC 변환, 해제 시각 비교 UTC 기준 검증 테스트를 추가했다.AdminAgentCreatorService에서assignedAt/unassignedAt를 저장 및 비교 전에Asia/Seoul -> UTC로 변환하도록 수정했다.lsp_diagnostics실행:.kt확장자용 LSP 서버 미설정으로 도구 진단 불가../gradlew test --tests "kr.co.vividnext.sodalive.admin.partner.agent.assignment.AdminAgentCreatorServiceTest"실행: 성공(BUILD SUCCESSFUL)../gradlew ktlintCheck실행: 성공(BUILD SUCCESSFUL).
2차 수정
- 무엇을:
Asia/Seoul -> UTC변환 책임을LocalDateTime확장함수로 이동하고 서비스는 그 확장함수를 사용하도록 리팩터링. - 왜: 서비스 레이어의 타임존 변환 중복을 줄이고, 동일한 변환 규칙을 재사용 가능한 확장함수로 통일하기 위함.
- 어떻게:
LocalDateTimeExtensionsTest에 기본 KST 변환과 사용자 지정 타임존 변환 테스트를 먼저 추가했고, 확장함수 부재 상태에서 실패함을 확인했다.LocalDateTimeExtensions에convertToUtc(timeZone: ZoneId = Asia/Seoul)확장함수를 추가했다.AdminAgentCreatorService는 내부 변환 함수를 제거하고request.assignedAt.convertToUtc()/request.unassignedAt.convertToUtc()를 사용하도록 수정했다../gradlew test --tests "kr.co.vividnext.sodalive.extensions.LocalDateTimeExtensionsTest" --tests "kr.co.vividnext.sodalive.admin.partner.agent.assignment.AdminAgentCreatorServiceTest"실행: 성공(BUILD SUCCESSFUL)../gradlew ktlintCheck실행: 성공(BUILD SUCCESSFUL).
3차 수정
- 무엇을: 관리자 에이전트 소속 크리에이터 목록 응답의
assignedAt을 UTC 기준 저장값에서 KST 기준 시각으로 변환해 반환하도록 수정. - 왜: 현재
getAssignedCreators는 DB에서 조회한 UTCassignedAt을 그대로 내려주고 있어 관리자 화면에서 소속 시각이 9시간 늦게 보일 수 있음. - 어떻게:
- 내부 패턴 조사 결과, 저장소에서는 UTC raw 값을 유지하고 서비스/DTO 경계에서
UTC -> Asia/Seoul변환을 적용하는 방식이 가장 가까운 관례임을 확인했다. AdminAgentReadServiceTest에assignedAt = 2026-04-10T03:00:00UTC 조회값이2026-04-10T12:00:00KST로 반환되는 회귀 테스트를 먼저 추가했고, 수정 전 해당 테스트가 실패함을 확인했다.AdminAgentReadService.getAssignedCreators에서 조회 결과를 매핑하며assignedAt.atZone(UTC).withZoneSameInstant(Asia/Seoul).toLocalDateTime()으로 변환하도록 수정했다.lsp_diagnostics실행:.kt확장자용 LSP 서버 미설정으로 도구 진단 불가../gradlew test --tests "kr.co.vividnext.sodalive.admin.partner.agent.read.AdminAgentReadServiceTest.shouldConvertAssignedAtToKstWhenGettingAssignedCreators"실행: 최초 실패 후 수정 뒤 성공(BUILD SUCCESSFUL)../gradlew test --tests "kr.co.vividnext.sodalive.admin.partner.agent.read.AdminAgentReadServiceTest" --tests "kr.co.vividnext.sodalive.admin.partner.agent.read.AdminAgentReadQueryRepositoryTest"실행: 성공(BUILD SUCCESSFUL)../gradlew ktlintCheck실행: 성공(BUILD SUCCESSFUL).
- 내부 패턴 조사 결과, 저장소에서는 UTC raw 값을 유지하고 서비스/DTO 경계에서