[section 3] Spring MVC - 트랜잭션(2) - 트랜잭션 처리

수경·2023년 1월 2일
0

코드스테이츠

목록 보기
46/57

어노테이션 방식

@Transactional

  1. 클래스 레벨에 적용
    : 클래스의 모든 메소드에 일괄 적용

  2. 메소드 레벨에 적용
    : 각각 메소드의 어노테이션 설정 적용

❗️attribute

  • readOnly = true : 읽기 전용 트랜잭션
    commit() 진행 시 영속성 컨텍스트에 flush()를 진행하지 않음
    ➡️ 스냅샷 x ➡️ 불필요한 추가 동작 x
    ➡️ 성능 최적화

  • propagation : 트랜잭션의 경계에서 진행중인 트랜잭션이 존재할 때 or 존재하지 않을 때, 어떻게 동작할 것인지 결정 ➡️ 트랜잭션 전파❗️

  1. Propagation.REQUIRED : 진행하고 있는 트랜잭션이 있으면 진행, 없으면 새로운 트랜잭션 생성
  2. Propagation.REQUIRED_NEW : 진행중인 트랜잭션과 무관하게 새로운 트랜잭션 시작
  3. Propagation.MANDATORY : 진행중인 트랜잭션이 없으면 예외 발생
  4. Propagation.*NOT_SUPPORTED* : 트랜잭션 필요 없음, 진행하던 트랜잭션이 있으면 정지, 로직이 끝나면 트랜잭션 재시작
  5. Propagation.*NEVER* : 트랜잭션 필요 없음, 진행 중인 트랜잭션이 있으면 예외 발생
  • Isolation : ACID의 격리성 제공 ➡️ 트랜잭션의 격리 레벨❗️
  1. Isolation.DEFAULT : 기본값
  2. Isolation.READ_UNCOMMITTED : 다른 트랜잭션에서 커밋하지 않은 데이터 읽기 허용
  3. Isolation.READ_COMMITTED : 다른 트랜잭션에서 커밋한 데이터 읽기 허용
  4. Isolation.REPEATABLE_READ : 트랜잭션 내에서 한 번 조회한 데이터를 반복해서 조회해도 같은 데이터가 조회되도록 함
  5. Isolation.SERIALIZABLE : 동일한 데이터에 대해서 동시에 두 개 이상의 트랜잭션이 수행되지 못하게 함

Event

spring의 Bean과 Bean 사이의 데이터를 전달하는 방법 중 하나

이벤트를 ApplicationContext로 넘기고 Listener에서 받아서 처리

도메인 간 느슨한 결합을 하도록 해줌

Event Model

Event extends ApplicationEvent

이벤트 모델, 이벤트의 대상

Event Publisher

ApplicationEventPublisher bean으로 이벤트 생성

publisher() : 이벤트 생성 메소드

Event Listener

Publisher로부터 받아온 Event를 사용

리스너 메소드에 @EventListener 애너테이션 추가

이벤트 실행 단계

  1. 생성 주체로부터 이벤트 발생 ➡️ 이벤트 디스패쳐에게 전달

  2. 이벤트 디스패쳐가 이벤트 핸들러 연결

  3. 이벤트 핸들러에서 이벤트 객체를 통해 원하는 기능 실행

비동기 처리 (성능 개선)

  1. @EnableAsync : 비동기로 처리할 수 있도록 해주는 애너테이션
    Application or Config에 추가

  2. @Async : 비동기로 처리할 메소드에 추가 (public 메소드여야 함)

profile
어쩌다보니 tmi뿐인 블로그😎

0개의 댓글