ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 8. 스프링 트랜잭션
    개발자 수업/Spring 2022. 1. 4. 22:59

    1. 트랜잭션 (Transaction)
        1) 여러 개의 DML 명령문을 하나의 논리적인 작업 단위로 묶어서 관리하는 것
        2) All 또는 Nothing 방식으로 작업을 처리함으로써 작업의 일관성 유지함
        3) 웹 애플리케이션에서 Service 클래스의 각 메서드가 애플리케이션의 단위 기능을 수행
        4) 웹 애플리케이션의 트랜잭션은 대부분 서비스 클래스에 적용함

    2. 단위 기능 예
        1) 게시글 조회 시 해당 글을 조회하는 기능과 조회수를 갱신하는 기능
        2) 쇼핑몰에서 상품 주문 시 주문 상품을 테이블에 등록하는 기능과 주문자의 포인트를 갱신하는 기능
        3) 은행에서 이체 시 이체자의 잔고를 갱신하는 기능과 수신자의 잔고를 갱신하는 기능

    3. 이체를 통한 트랜잭션 기능
        1) 트랜잭션 적용 전 은행 계좌 이체
            - 이순신 계좌에서 돈 500만 원 인출함
                -> 이순신 계좌에서 돈 500만 원 차감함 (update)
                -> 이순신 계좌 잔고 갱신함 (commit)

            - 신사임당 계좌에 돈 500만 원 이체함
                -> 신사임당 계좌에 500만 원 증가시킴 (update)
                -> 신사임당 계좌 잔고 갱신함 (commit)

        2) 트랜잭션 적용 후 은행 계좌 이체
            - 이순신 계좌에서 돈 500만 원 인출함
            - 이순신 계좌에서 돈 500만 원 차감함 (update)
            - 신사임당 계좌에 500만 원을 이체함
            - 신사임당 계좌에 500만 원 증가시킴 (update)
            - 전체 계좌 잔고를 반영함 (commit)

            -> 이순신과 신사임당 계좌 잔고의 갱신이 모두 정상적으로 이루어지면 최종적으로 반영함 (commit)
            -> 중간에 이상이 발생할 경우 이전의 모든 작업 취소, 즉 롤백(rollback) 시킴

    4. 스프링의 여러 가지 트랜잭션 속성들
        1) propagation
            - 트랜잭션 전파 규칙 설정
            - 속성 값
                - REQUIRED : 트랜잭션 필요, 진행 중인 트랜잭션이 있는 경우 해당 트랜잭션 사용
                             트랜잭션이 없으면 새로운 트랜잭션 생성
                             디폴트 값
                - MANDATORY : 트랜잭션 필요, 진행 중인 트랜잭션이 없는 경우 예외 발생
                - REQUIRES_NEW : 항상 새로운 트랜잭션 생성
                - SUPPORTS : 트랜잭션 필요 없음
                - NOT_SUPPORTED : 트랜잭션 필요 없음
                - NEVER : 트랜잭션 필요 없음, 진행 중인 트랜잭션이 있는 경우 예외 발생

            @Transactional(propagation = Propagation.REQUIRED)
        

    '개발자 수업 > Spring' 카테고리의 다른 글

    10. 메이븐과 스프링  (0) 2022.01.07
    9. 스프링 어노테이션  (0) 2022.01.04
    7. MyBatis Framework 사용 (수정중)  (0) 2021.12.31
    6. Spring MVC  (0) 2021.12.30
    5. AOP  (0) 2021.12.29

    댓글