Modifying 쿼리가 동작하지 않을 때의 대안적 해결법
통합 테스트에서 @Modifying 어노테이션을 사용한 배치 업데이트 쿼리가 예상대로 동작하지 않는 문제가 발생했다. 좌석 만료 처리 로직을 테스트하면서 겪은 문제와 해결 과정을 기록한다. 문제 상황 좌석 예약 만료 처리 테스트에서 다음과 같은 실패가 발생했다: org.opentest4j.AssertionFailedError: expected:...
통합 테스트에서 @Modifying 어노테이션을 사용한 배치 업데이트 쿼리가 예상대로 동작하지 않는 문제가 발생했다. 좌석 만료 처리 로직을 테스트하면서 겪은 문제와 해결 과정을 기록한다. 문제 상황 좌석 예약 만료 처리 테스트에서 다음과 같은 실패가 발생했다: org.opentest4j.AssertionFailedError: expected:...
Clean Architecture를 적용한 프로젝트에서 Domain Repository에 JPA의 deleteAllInBatch와 같은 배치 메서드를 추가해야 했다. 도메인 순수성을 유지하면서 JPA의 편의성을 활용하는 방법을 정리한다. 기존 구조 기본적인 Domain Repository 인터페이스: public interface ConcertD...
Spring Boot 테스트 실행 중 @SpringBootConfiguration을 찾을 수 없다는 오류가 발생했다. 이 문제의 원인과 해결 과정을 정리한다. 오류 내용 java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration by searching packages upw...
Spring Boot 프로젝트 개발 중 ConflictingBeanDefinitionException이 발생했다. 콘서트 예약 시스템을 구현하면서 마주친 이 문제와 해결 과정을 기록한다. 문제 상황 테스트 실행 시 다음과 같은 오류가 발생했다: org.springframework.context.annotation.ConflictingBeanDef...
이전 글에서 ID와 연관관계 매핑 문제를 해결하고 통합 테스트의 setUp 단계를 통과시켰다. 하지만 기쁨도 잠시, 테스트의 본문 로직이 실행되자 이번에는 전혀 다른 종류의 예외가 발생하기 시작했다. 세 번째 실패: IncorrectResultSizeDataAccessException: 2 results were returned 새로운 에러는 “결...
통합 테스트는 애플리케이션의 여러 구성 요소가 올바르게 상호작용하는지 검증하는 필수적인 과정이다. 하지만 때로는 단순해 보이는 설정 문제 하나가 모든 테스트를 붉은색으로 물들이기도 한다. 최근 콘서트 예약 시스템의 통합 테스트를 작성하며 겪었던, 연관관계 설정과 관련된 두 가지 문제를 기록하고자 한다. 첫 번째 실패: NULL not allowed ...
Spring Boot 환경에서 통합 테스트(Integration Test)를 작성하는 것은 애플리케이션의 여러 계층이 올바르게 상호작용하는지 검증하는 강력한 방법입니다. 하지만 데이터베이스 트랜잭션의 동작 방식을 정확히 이해하지 못하면 예상치 못한 문제에 직면하게 됩니다. 이 글에서는 좌석 예약 만료를 처리하는 스케줄링 서비스를 테스트하며 겪었던 세 ...
데이터베이스에서 트랜잭션 격리 수준(Transaction Isolation Level)은 여러 트랜잭션이 동일한 데이터에 동시에 접근할 때 발생할 수 있는 문제를 방지하는 중요한 개념입니다. 이는 데이터의 정합성을 유지하면서 동시성을 제어하는 핵심적인 전략으로 사용됩니다. 격리 수준은 성능과 데이터 정합성 사이의 상충 관계(Trade-off)를 가집...
데이터베이스의 동시성 제어는 데이터 정합성을 보호하고 성능을 확보하기 위한 중요한 과제입니다. 이를 해결하는 대표적인 두 가지 전략으로 비관적 락(Pessimistic Lock)과 낙관적 락(Optimistic Lock)이 있습니다. 두 전략은 데이터 충돌을 바라보는 관점의 차이에서 시작하며, 각각의 특징과 장단점을 알아봅니다. 비관적 락과 낙관...
데이터베이스에서 Deadlock(교착 상태)은 두 개 이상의 트랜잭션이 서로 상대방이 선점한 리소스의 Lock이 해제되기를 기다리며 무한 대기 상태에 빠지는 현상을 의미합니다. Deadlock이 발생하면 관련 트랜잭션이 더 이상 진행되지 못하고 멈추게 되며, 이는 시스템의 전반적인 처리량(TPS) 저하와 장애로 이어질 수 있습니다. 효과적인 Dead...