어뫄어뫄 2025. 1. 27. 13:06

 

Log 를 구현하는 과제에서 트랜젝션 문제가 있었다. @Transactional로 처리하며 매니저 등록이 실패해도 Log는 남기는 것이 목표였다.

 

Spring의 @Transactional 어노테이션의 propagation 속성을 활용했다. 로그 저장을 담당하는 LogService의 writeLog 메서드에 @Transactional(propagation = Propagation.REQUIRES_NEW)를 적용하여 새로운 별도의 트랜잭션을 생성하도록 했다. 이를 통해 매니저 등록 트랜잭션이 롤백되더라도 로그 저장 트랜잭션은 영향을 받지 않고 커밋되어 로그가 항상 기록되도록 구현했다.