소개글로벌 플랫폼에서는 각기 다른 시간대를 사용하는 다양한 국가의 사용자들이 서비스를 이용합니다. 이러한 환경에서는 시간 데이터를 어떻게 저장하고 제공하는지가 사용자 경험에 큰 영향을 미칩니다. 이번 글에서는 한국 시간(KST)으로만 관리되던 시간 데이터를 사용자 시간대에 맞게 변환하는 과정을 소개하고, 이를 구현한 기술적 접근 방식을 공유합니다. 문제초기 환경(KST 기반 데이터 관리)처음에는 한국 서버에서만 운영되었기 때문에 모든 시간 데이터가 KST(한국 표준시)로 관리되었습니다. 하지만 플랫폼이 성장하며 미국, 몽골, 베트남 등 다양한 국가의 사용자들이 늘어나자, 동일한 시간 데이터가 사용자마다 다르게 해석되는 문제가 발생했습니다. 사용자 혼란 사례예를 들어, 2024년 10월 30일 08:00..
문제해결/Spring
퍼사드 (Facade) 패턴복잡한 서브 시스템 의존성을 최소화하는 디자인 패턴 문제의존성이 많을수록 해당 코드를 변경하기가 어려운데, 코드가 변경되어야 하는 이유도 많아지며, 테스트하기도 어려워집니다.레이어드 아키텍처로 어느 정도 의존성을 해소할 수 있었으나, 플랫폼이 커질수록 서비스 레이어(Service Layer)가 의존하는 리포지토리(Repository)와 외부 라이브러리들이 많아질 수밖에 없는 구조였습니다.특히 JPA를 사용하는 환경에서는 도메인 간 상호작용이 많아질수록 Repository 의존성이 과다하게 증가하여, Mock을 사용하는 단위 테스트는 검증이 제대로 되지 않을 뿐만 아니라 목을 하나하나 지정해주기도 어려웠습니다.이러한 문제를 해결하기 위해 퍼사드 패턴(Facade Pattern)을..
최근 운영 중인 플랫폼에서 JPA의 LocalDate 필드(환자 생일, 결제 요청일)가 하루씩 내려가는 문제가 발생했습니다. 이 문제의 원인과 해결 과정을 공유합니다. 문제 상황문제 증상LocalDate 필드(환자 생일, 결제 요청일)의 날짜가 하루씩 내려갑니다.예: 1997-03-25 → 1997-03-24 → 1997-03-23... 로그 확인환자 생일을 수정한 API 호출 이력이 없습니다.결제 요청일은 클라이언트에서 수정할 방법이 제공되지 않았습니다.LocalDate 필드만 문제가 발생하며, LocalDateTime은 정상적으로 동작하고 있었습니다. 타임존 확인백엔드 서버의 JVM 타임존과 DB의 타임존을 확인한 결과 모두 한국(Asia/Seoul)으로 설정되어 있었습니다.@SpringBootApp..