2021-08-19 강의록_AOP
AOP
- 횡단 관심사 = cross-concerns = Aspect
비즈니스로직을 가로로 배열하고, 이 비즈니스 로직을 횡단하면서 - 핵심 로직은 아니지만 시스템 로직의 완전성을 위해 반드시 써야하는 기능들
Aspect : 추상명사로, 횡단 관심사를 의미 (logging, 보안, 트랜잭션 등)
Advice : 횡단관심사를 구현한 객체.
Target : 핵심로직을 가지고 있는 객체 (비즈니스 로직을 수행하고, advice를 적용할 객체).
실제 advice가 적용되는 대상은, target객체의 메소드이다. (필드x)
Join Point : Advice가 적용될 Target 객체의 메소드. advice가 실제 적용될 지점들로, 여러개가 될 수 있다.
Point Cut : 타겟 객체의 여러 join point 중, 특정 join point에 Advice를 결합하는 행위.
광범위하게 설정할수도, 지엽적으로 설정할 수도 있다.
패키지 단위로 하거나, 접근제한자로 하거나, 등등..
Proxy 객체 : Target객체 + Advice
(프록시 = 대리인)
겉으로 봤을 땐, proxy와 target객체가 동일하게 보임.
타겟객체를 대신해서 무언가 수행함. 타겟객체에 직접 접근할 수 없고, 프록시를 통해 접근해야 함.
실제 개발하는 관심사(=Aspect) 코드
Before Advice
After Returning Advice
After Throwing Advice
After Advice
Around Advice
인터셉터의 메소드처럼,
타겟객체의 메소드가 실행되기 전, 후, 실행중 오류 발생시, 실행 정상종료 후 등
어드바이스를 어느 시점에 적용할건지 나눈 것.
어드바이스는 어떤 결과를 return하는 메소드들이 아님.
따라서 대부분 void이다.
트랜잭션 처리
Spring AOP 기능을 이용해서 트랜잭션 처리를 해주려면,
1. @Transactional
어노테이션 사용.
2. root-context.xml에 설정태그 2개 추가
- 트랜잭션 관리자 빈(Bean) 등록
spring-jdbc dependency 필요 => spring-tx dependency도 함께 추가 - 트랜잭션 처리를 위한 특수한 태그 등록
Database Transaction의 종류 (2가지)
- Local Transaction (TX)
하나의 Connection으로 한 개 이상의 DML작업을 수행할 때,
이 DML작업들을 원자성(All or Nothing)으로 처리.
//하나의 Connection 얻음
Connection conn = dataSource.getConnection();
try{
PreparedStatement pstmt1 = conn.preparedSQL(dml_sql);
PreparedStatement pstmt2 = conn.preparedSQL(dml_sql);
PreparedStatement pstmt3 = conn.preparedSQL(dml_sql);
PreparedStatement pstmt4 = conn.preparedSQL(dml_sql);
pstmt1.executeUpdate();
pstmt2.executeUpdate();
pstmt3.executeUpdate();
pstmt4.executeUpdate();
conn.commit();
} catch(Exception e){
conn.rollback();
}//try-catch
- Global Transaction (XA = 분산 트랜잭션)
2개 이상의 Connection으로, 여러 DML작업을 수행하고
이 작업들을 하나의 트랜잭션으로 관리.
절대 commit 또는 rollback으로 처리할 수 없다.
두 개 이상의 커넥션으로 수행된 여러 dml작업을, 하나의 트랜잭션으로 관리하려면
반드시 트랜잭션 관리자(Transaction Manager) 가 필요 --> Bean으로 등록
트랜잭션 관리자는 X/Open XA 규약에 따라 만듦.
//아래와 같이 commit할 수 없다.
// (만약 중간의 conn에서 커넥션이 끊어지거나 하는 오류가 발생하면?)
conn1.commit();
conn2.commit();
...
conn100.commit();
2단계 커밋/롤백(2-phase 커밋/롤백) 수행
: 1단계 - 각 커넥션에 물어봄(모든 커넥션이 OK)
: 2단계 - 모두 커밋 or 모두 롤백 수행
Author And Source
이 문제에 관하여(2021-08-19 강의록_AOP), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mindddi/2021-08-19-강의록AOP저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)