[TIL] 23.03.16 @Transactional 사용시 주의 할 점

hyewon jeong·2023년 3월 16일
0

TIL

목록 보기
106/138

@Transactional

⁉️ readOnly=true 쓰면 변경이 안된다?? 호출해보기 호출하면 런타임입셉션 날것임

@Transactional

쓰는이유?? 지연로딩

만약에 @ 트랜잭셔널 안쓰면 한줄씩 호출할때 DB connection을 열고 반납하고, 또 열고 반납함으로 리소스를 효율적으로 관리 할 수 있는데 @트랜잭셔널 사용시 계속 함수가 끝날때까지 열려 있으므로 리소스 치명적임

  • 영속성 컨텍스트로 감시하는 비용
  • DB connection을 연다(함수가 끝날 때까지 열려있다) -> 굉장히 치명적
  • 조회하는 메서드에는 꼭 필요한지 먼저 판단하고 , 필요한 경우에만 readOnly = true로 달도록 한다

1. 하나의 메소드를 호출할때는 @Transactional 필요 없다?

No → 만약에 연관관계가 있는 경우라면 지연로딩이 필요하기 때문에 이 경우엔 하나의 메소드라도 필요하다.

2-1 . 여러개의 메소드를 호출하는 경우 @Transactional 언제 필요하지 않을까?

get (조회) 만 일어날 경우엔 필요 하지 않다.

2-2 . 여러개의 메소드를 호출하는 경우 @Transactional 언제 필요 한가?

save,put,delete 등의 상태변화가 일어날 경우엔 @Transactional 이 필요하다.

왜? → 예를 들어 save → get 이 일어날 경우엔 롤백이 필요할경우 save가 취소 되지만

save → delete 이 경우에 delete에서 취소가 될 경우 save 는 이미 처리 됐기 때문에 save도 반영되지 않을려면 롤백기능을 하는 @Transactional 이 필요하다.

3 . @Transactional(readOnly = true)

읽기 전용

Transaction을 주의하여 Async 사용하기

profile
개발자꿈나무

0개의 댓글