영상 후기 - 후니의 스프링 트랜잭션

parkkhee·2023년 3월 23일
0

  • 하나의 비즈니스 로직에서 하나의 트랜젝션을 만들기 위해서는 비즈니스 로직 시작전에? 트랜잭션을 열어주어야 한다.
  • 그 후 트랜잭션을 파라미터로 이 트랜잭션에 모든 쿼리가 입력이 되는데, 하나라도 실패하면 그냥 트랜잭션 실패해버릴듯.
  • 스프링에서 이런 트랙잭션 활용 도와준다.
  • 트랜잭션 동기화란
    -> 스프링 JDBC에서 트랜잭션을 생성
    -> 트랜잭션 동기화 매니저에 이 트랜잭션(커넥션) 저장
    -> JDBC 템플릿이 쿼리를 날릴 때 커넥션이 트랜잭션 동기화 매니저에 존재한다면 가져옴
    -> 여러 쿼리문을 하나의 로컬 트랜잭션(커넥션)으로 관리 가능하다.
    (기존 방식 -> 파라미터로 트랜잭션 넘길 필요가 없어 졌지)
  • 스프링은 더 나아가 도와준다 -> 트랜잭션 추상화 (DI 트랜잭션으로 나아 갈수 있는 인터페이스를 정의하고 그 인터페이스에만 의존하도록)
  • 선언적 트랜잭션
    -> @Transanctional
  • 트랜잭션 속성
  • propagation 트랜잭션을 시작하거나 기존 트랜잭션에 참여하는 방법을 결정하는 속성
  • required 전파의 기본 속성-> 트랜잭션이 있으면 참여하고, 없으면 새로 시작
  • requires_new 진행 중인 트랜잭션이 있다면 트랜잭션 잠시 보류
  • supports 이미 트랜잭션이 있으면 참여 그렇지 않다면 트랜잭션 없이 진행
  • nested 이미 진행중인 트랜잭션이 있으면 중첩 트랜잭션 시작. 부모 트랜잭션 커밋, 롤백엔 영향을 받음. 자신의 커밋, 롤백은 부모 트랜잭션에 영향 못 줌.
  • never 트랜잭션을 사용하지 않게 한다. 트랜잭션이 존재하면 예외 발생.
  • not_supported 트랜잭션을 사용하지 않게 한다. 트랜잭션이 있다면 보류한다.
  • isolation 여러 트랜잭션이 진행될 떄에 트랜잭션의 작업 결과를 타 트랜잭션에게 어떻게 노출할지 결정
  • default




  • timeout 트랜잭션의 제한 시간을 설정할 수 있다.
  • readOnly 트랜잭션 내에서 데이터 조작 시도 막음. 읽기만하게 하니 다른 오버헤드 감소 성능 증가에 도움.
  • rollback-for 기본적으로는 런타임에러시 롤백, 롤백 대상으로 삼고 싶다면 사용 가능.
  • no-rollback-for 런타임에러도 그냥 커밋 할 수 있다.
profile
순우리말 백엔드 개발자

0개의 댓글