[Spring] 트랜잭션 처리

Posted by 신희준 on October 27, 2017


2017 - 10 - 27 (금)

  • 트랜잭션 처리

  • 코드로 배우는 스프링 웹프로젝트[구멍가게 코딩단 지음] 참조


    트랜잭션의 개념


    트랜잭션은 데이터베이스 처리의 가장 기본이 되는 단위이다.
    Spring MVC 에서는 DAO를 통해 DB와의 연산을 실행한다.

    만약, 누군가 게시글에 댓글을 달았을 경우 게시판 DB에도 댓글 수가 증가해야 되며 댓글 DB에도 데이터가 추가가 되어야한다.

    댓글을 달기 위한 컨트롤러가 호출이 되면 컨트롤러는 서비스를 호출할 것이고 이 서비스에서는 두가지 DAO를 생성하여 DB Transaction을 처리한다.
    이 경우 만약 하나의 트랜잭션이 실패할 경우 둘다 rollback 될 수 있어야한다.
    트랜잭션 관리를 하기 위해 Spring MVC 에서는 @Transactional 애너테이션을 활용한다.



    @Transactional 활용


    @Transcational 의 우선순위

    - 메소드의 @Transactional 설정이 우선순위가 가장높다. - 클래스의 @Transactional 이 메소드보다 우선순위가 더 낮다. - 인터페이스의 @Transactional 의 우선순위가 가장 낮다. @Transactional 의 활용 예제

    //replyServiceImpl 의 일부
    // 댓글을 처리하는 서비스의 일부이다.
    @Transactional
     @Override
     public void addReply(ReplyVO vo) throws Exception {
    // 아래를 보다시피 @Trnasactional 에너테이션을 사용하여 두개의 트랜잭션을 처리한다.
    	 replyDAO.create(vo);
    	 boardDAO.updateReplyCnt(vo.getBno(), 1);
     }
    
     @Transactional
     @Override
     public void removeReply(Integer rno) throws Exception {
    
     int bno = replyDAO.getBno(rno);
     replyDAO.delete(rno);
    	 boardDAO.updateReplyCnt(bno, -1);
     }
     // 댓글을 삭제할 경우 테이블의 댓글 갯수가 줄어들어야한다.