-
02. TransactionSpring Web Project/7. AOP와 트랜잭션 (Transaction) 2021. 1. 31. 15:52반응형
1. 트랜잭션의 기본 원칙(ACID 속성)
1) 원자성(Atomicity) : 하나의 트랜잭션은 모두 하나의 단위로 처리
2) 일관성(Consistency) : 트랜잭션이 성공했다면 DB의 모든 데이터는 일관성 유지
3) 격리(Isolation) : 트랜잭션으로 처리되는 중간에 외부의 간섭은 없어야함
4) 영속성(Durability) : 트랜잭션이 성공적으로 처리되면, 그 결과는 영속적으로 보관
2. 트랜잭션 매니저 설정
root-context.xml > 하나의 DataSource를 사용하는 경우, 스프링에서 제공하는 DataSourceTransactionManager를 이용, DataSource 주입
> <tx:annotation-driven>은 @Transactional 애노테이션을 이용한 트랜잭션 관리가 가능
Note) @Transactional 우선순위
1) 메소드의 @Transactional 설정이 가장 우선시 됩니다.
2) 클래스의 @Transactional 설정은 메소드보다 우선순위가 낮습니다.
3) 인터페이스의 @Transactional 설정이 가장 낮은 우선순위입니다.
3. 댓글 카운트 @Transaction 적용
1) tbl_board 테이블 변경
> alter table tbl_board add column replycnt int default 0;
2) BoardVO.java
> private int replycnt; 및 getter/setter 추가
3) BoardSQL.xml
> select절 replycnt 컬럼 추가
4) BoardDAO.java, ReplyDAO.java
> BoardDAO.java : public void updateReplyCnt(Integer bno, int amount) throws Exception; 추가
> BoardSQL.xml : update tbl_board set replycnt = replycnt + #{amount} where bno = #{bno} 추가
BoardDAOImpl.java > ReplyDAO : public int getBno(Integer rno) throws Exception; 추가
> ReplySQL.xml : select bno from tbl_reply where rno = #{rno} 추가
ReplyDAOImpl.java 5) ReplyServiceImpl.java
ReplyServiceImpl.java 6) list.jsp
list.jsp 7) log 확인
@Transactional이 적용된 경우, Connection open > 2개의 SQL문 처리 후 commit() > Connection close 4. 게시물 조회 수 @Transaction 적용
1) BoardDAO.java
> public void updateViewCnt(Integer bno) throws Exception; 추가
2) BoardSQL.xml
> update tbl_board set viewcnt = viewcnt + 1 where bno = #{bno} 추가
3) BoardDAOImpl.java
> session.update(namespace + ".updateViewCnt", bno); 추가
4) BoardServiceImpl.java
BoardServiceImpl.java (@Transactional 속성 : 격리 레벨 사용) 반응형'Spring Web Project > 7. AOP와 트랜잭션 (Transaction)' 카테고리의 다른 글
01. AOP (0) 2021.01.28