문제 spring boot 3.2.1 버전을 사용하고 있으며, 이에 따라 org.hibernate.orm:hibernate-core:6.4.1.FINAL 버전을 사용하고 있었다. JVM 및 MySQL TimeZone 설정이 Asia/Seoul 값으로 되어 있음에도 UTC 값으로 저장되는 이슈였다. Hibernate 로그 살펴보기 application.yml 파일에 아래 옵션들을 추가하고, hibernate sql 로그를 살펴보기로 했다. logging: level: org: springframework: orm.jpa: debug hibernate: SQL: debug orm.jdbc.bind: trace # Spring Boot 3.x 이상 부터는 'orm.jdbc.bind' 를 사용해야 바인딩 된 쿼..
문제 사내에서 개발하던 중, @EmbeddedId가 선언된 Entity가 있었고, 해당 Entity는 @EmbeddedId를 기준으로 여러 개의 Row를 갖고 있는 상황이었다. 이때, Entity를 리스트로 조회하게 되면 아래와 같이 중복된 것처럼 보이는 조회 결과를 반환했다. (테이블과 소스 코드는 다시 재구성했다.) audit_revision 테이블 CREATE TABLE `audit_revision` ( rev BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY, created_datetime DATETIME(6) NULL ); AuditRevision 엔티티 @Entity @RevisionEntity @Table(name = "audit_revision") class Au..
분산된 서버 환경에서 트랜잭션 처리 분산된 서버 환경에서 현재 API의 트랜잭션 내부에서 쿼리를 실행하고, 외부 API 요청을 통해 또 다른 트랜잭션을 처리하는 상황에서 데이터 일관성을 어떻게 유지하며, 언급한 방법으로 처리할 때의 장점과 단점은 무엇인지 고민해 봤다. 그다음에 외부 API 요청에 의해 또 다른 트랜잭션이 실행되는 부분을 현재 API의 트랜잭션이 커밋되고 나서 실행시켰을 때 데이터 일관성을 어떻게 유지하며, 장점과 단점은 무엇인지 고민해 봤다. 정리한 내용 https://github.com/bestdevhyo1225/dev-log/blob/master/MSA/MSA-Distributed-Transaction.md