왜 service layer에 @Transactional을 쓰는지 간략하게 설명하자면 다음과 같음.
1. web의 layer마다 역할이 다다름. 그 중 service layer에서 비즈니스 로직을 관리하기때문에 @Transactional을 사용함.
2. @Transactional service layer의 메소드마다 적용시켜서 각각의 로직에 트랜잭션 처리를 함.
3. springboot는 @Transactional을 클래스에 적용하여 spring aop를 통해 구현함.
4. @Transactional을 메소드에 나 클래스에 설정할때 범위를 잘 지정해주면 준영속 상태의 엔티티에서 지연로딩할 때 발생하는 LazyInitializationException와 같은 exception을 예방할 수 있음.
@Service
@Transactional
public class CouponPolicyServiceImpl implements CouponPolicyService {
현재는 crud 전체에 @Transactional 설정한 상태이고
read의 경우만 @Transactional(readOnly = true)을 설정해둠.
출처 https://velog.io/@minskim2/Spring-JPA-%EC%A7%80%EC%97%B0-%EB%A1%9C%EB%94%A9%EA%B3%BC-Transactional