IT 수업 20주차 (128) 트랜잭션 처리
● AOP
- 관점(Aspect)지향 프로그래밍으로, 관점을 기준으로 다양한 기능을 분리하여 보는 프로그래밍
- 관점(Aspect)이란, 부가 기능과 그 적용처를 정의하고 합쳐서 모듈로 만든 것
- 관점지향 프로그래밍은 객체지향 프로그래밍을 보완하기 위해 쓰인다.
Spring AOP는 런타임 시점에 적용하는 방식을 사용한다. 이유는 컴파일 시점과 클래스 로딩 시점에 적용하려면 별도의 컴파일러와 클래스로더 조작기를 써야 하는데, 이것을 정하고 사용 및 유지하는 과정이 매우 어렵고 복잡하기 때문이다.
기본적으로 트랜젝션 처리하려면 try, catch로 예외 처리해야한다.
- 반복되는 구간 -
저 메모장의 코드 중 반복된는 구간은 이 코드들이다.
try{
Connection conn = dataSource.getConnection();
conn.setAutocommit(flse);
.
.
.
conn.comit();
}catch(Exception e){
05프로젝트 복사하여 06_Tx 프로젝트를 하나 만들어 준다.
그리고 maven repository에서 spring 트랜젝션을 다운받아준다.
pom.xml 에 해당 코드를 붙여넣기 해주는데 버전은 현재 spring의 버전과 동일해야 하기 때문에 ${org.springframework-version} 으로 수정해준다.
src/main/java의 config에 TxConfig라는 클래스를 하나 만들어 준다.
히카리에서 사용했던 것과 동일하게 이름을 해줘야 하기 때문에 dataSource3로 빈을 만들어 준다.
서비스에서 트랜젝션 처리해야되기 때문에 MemoServiceImpl.java로 가서 코드를 작성한다.
MemoController.java에서 페이지를 GET 매핑하는 코드를 작성해준다.
addTx 페이지를 만들어야 하기 때문에
memo의 add.jsp 파일을 복사하여 붙여넣기로 만들어준다.
그리고 memoController.java에서 POST 매핑도 해준다.
만든 addTx.jsp 로 가서 페이지 이름만 수정해준다.
기본키 중복을 발생시키기 위해 workbench로 가서 tbl_memo테이블에서 id 값에 설정된 auto increment를 해제 해준다.
MemoMapper.java에서 이전에 id값을 null로 해놓은 것을 #{id} 이렇게 수정해준다.
위 처럼 작성하고 실행시켜 값을 넣어본다.
duplicate로 기본키 중복 오류가 발생하게 된다.
memoServiceImpl.java 에서 예외시 rollback하는 에노테이션을 추가해준다.
@Transactional(rollbackFor = Exception.class) 가 없다면 duplicate오류가 발생해도 입력한 값이 테이블 안에 들어가지만
@Transactional(rollbackFor = Exception.class) 가 있다면 duplicate오류가 뜨면서 입력한 값이 테이블에 들어가지 않게 된다. 즉, 예외가 발생했기 때문에 값이 들어있지 않은 상태로 rollback 했다는 것이다.
GlobalException에서 예외 처리 작성한다.
참조 : https://velog.io/@kai6666/Spring-Spring-AOP-%EA%B0%9C%EB%85%90