[Spring Boot] MongoDB와 MySQL의 이기종 트랜잭션 문제 해결
·
Back-End/Spring
문제 상황채팅 데이터베이스를 MySQL에서 MongoDB로 이전하며 트랜잭션이 적용되지 않는 문제가 발생했습니다.Spring은 @Transactional 어노테이션을 통해 AOP를 사용하여 트랜잭션을 제어하며, 트랜잭션은 TransactionManager을 통해 관리됩니다.Spring Boot는 등록된 라이브러리를 통해 자동으로 스프링 컨테이너에 트랜잭션에 등록됩니다.  그러나 MongoDB 트랜잭션은 선택 사항이기 때문에, Spring Boot는 자동으로 트랜잭션 매니저를 등록하지 않습니다. 따라서 MongoDB 트랜잭션을 사용하기 위해서는 별도로 트랜잭션 매니저를 빈으로 등록해야 합니다.@Configurationpublic class MongoConfig { @Bean(name = "mongoT..
[Spring Boot] MongoDB LocalDateTime 저장 시 UTC로 저장되는 문제
·
Back-End/Spring
문제 상황 Spring Boot 환경에서 MongoDB에 LocalDateTime을 저장할 때, Date 컬럼이 자동으로 UTC로 변환되어 저장되는 문제가 발생했습니다.예를 들어, 한국 시간(KST) 기준 18시 36분에 전송한 채팅 메시지가 국제 표준 시간(UTC) 기준 09시 36분으로 저장됩니다.그러나 데이터를 다시 Spring Boot 애플리케이션에서 조회하면, 시스템 기본 시간대(KST)로 변환되어 정상적으로 출력되는 것을 확인할 수 있습니다.해당 문제는 비즈니스 로직에 직접적인 영향을 미치지는 않지만, 팀 내에서 데이터 저장 시간과 변환 방식에 대한 혼동이 발생할 수 있습니다. 데이터베이스에 저장된 시간과 애플리케이션에서 조회된 시간이 다르게 보이기 때문에 개발자나 운영팀이 시간 데이터를 해석..
[Spring boot] No Offset 적용한 페이징 성능 개선 - MongoDB
·
Back-End/Spring
들어가며CATCH-Mi 서비스의 성능 개선을 진행하면서, No Offset Pagination을 통해 페이징 기능을 효과적으로 개선할 수 있다는 것을 알게 되었습니다. 이번 글에는 기존 Offset 방식과 No Offset 방식의 장단점을 비교하고, 실제 서비스에 No Offset 방식을 어떻게 적용했는지 코드와 함께 그 과정을 정리해보고자 합니다. 페이지네이션이란 ?페이지네이션(Pagination)은 대량의 데이터를 효율적으로 조회하기 위해 데이터를 일정한 크기(Page)로 나누어 조회하는 방식입니다. 이를 통해 사용자는 한 번에 모든 데이터를 처리하지 않고, 원하는 부분만 빠르게 조회할 수 있습니다. 페이지네이션은 웹 애플리케이션, 모바일 앱, API 등 다양한 환경에서 널리 사용되고 있습니다.  O..
[Spring boot] MySQL → MongoDB 마이그레이션 과정
·
Back-End/Spring
들어가며이번 포스팅에서는 MySQL로 구현된 채팅 데이터베이스를 MongoDB로 마이그레이션 하고, bwildvogel 라이브러리를 사용하여 스프링 내장 MongoDB를 띄워 테스트 코드를 구현하는 과정을 다뤄보겠습니다. 이미 JPA로 구현된 엔티티를 MongoDB로 마이그레이션 하는 이유는 데이터베이스의 스키마가 자주 변경되어 유연성이 필요하거나 관계형 데이터베이스가 필요 없는 경우 등 여러 가지가 있을 수 있습니다. 기존에 MySQL로 저장된 채팅 데이터베이스를 MongoDB로 마이그레이션 한 이유는 크게 두 가지입니다. 1. 유연성과 스키마 변경의 용이성채팅 서비스는 기능 추가나 요구사항 변경에 따라 데이터 구조가 자주 바뀔 수 있습니다. MongoDB는 스키마리스(NoSQL) 데이터베이스로, 이러..