3개의 글
정산 실행 배치에서 @Transactional(REQUIRES_NEW)가 같은 클래스 내부 호출(self-invocation)로 인해 무시되어, 판매자 A 정산 실패 시 판매자 B까지 롤백되는 문제가 발생했다. 트랜잭션이 필요한 로직을 별도 Spring Bean으로 분리하여 해결했다.
@TransactionalEventListener(at-most-once)에서 @ApplicationModuleListener(at-least-once)로 전환하면서 리스너가 중복 호출될 수 있게 되었다. 3개 리스너 중 2개가 멱등하지 않았고, Redis AOP(1차) + 서비스 레벨 가드(2차)의 2계층 방어로 해결했다.
@Validated 컨트롤러가 인터페이스를 구현할 때, 구현체에만 @Valid를 선언하면 Hibernate Validator가 서브타입이 파라미터 제약을 추가했다고 판단하여 HV000151을 발생시킨다. 이 에러는 해당 메서드만이 아니라 클래스 전체의 메타데이터 빌드를 실패시켜, 모든 엔드포인트가 500을 반환한다.