Evernote 전공 정리 노트 불러오기
Computer Science
AOP
AOP
- 관점 지향 프로그래밍(aspect-oriented programming, AOP)
- 기능을 핵심 비지니스 로직과 공통 모듈로 구분하고, 핵심 로직에 영향을 미치지 않고 사이사이에 공통 모듈을 효과적으로 잘 끼워넣도록 하는 개발 방법이다.
- 공통 모듈(보안 인증, 로깅 같은 요소등)을 만든 후에 코드 밖에서 이 모듈을 비지니스 로직에 삽입하는 것이 바로 AOP 적인 개발이다.
- 코드 밖에서 설정된다는 것이 핵심이다.
- 사용 예
- 간단한 메소드 성능 검사
- 개발 도중 특히 DB에 다량의 데이터를 넣고 빼는 등의 배치 작업에 대하여 시간을 측정해보고 쿼리를 개선하는 작업은 매우 의미가 있다.
- 이 경우 매번 해당 메소드 처음과 끝에 System.currentTimeMills();를 사용하거나, 스프링이 제공하는 StopWatch코드를 사용하기는 매우 번거롭다.
- 이런 경우 해당 작업을 하는 코드를 밖에서 설정하고 해당 부분을 사용하는 편이 편리하다.
- 트랜잭션 처리
- 트랜잭션의 경우 비지니스 로직의 전후에 설정된다.
- 하지만 매번 사용하는 트랜잭션 (try~catch부분)의 코드는 번거롭고, 소스를 더욱 복잡하게 보여준다.
- 예외 반환
- 스프링에는 DataAccessException이라는 매우 잘 정의되어 있는 예외 계층 구조가 있다.
- 예전 하이버네이트 예외들은 몇 개 없었고 그나마도 Uncatched Exception이 아니였다.
- 이렇게 구조가 별로 안 좋은 예외들이 발생했을 때, 그걸 잡아서 잘 정의되어 있는 예외 계층 구조로 변환해서 다시 던지는 애스팩트는 제 3의 프레임워크를 사용할 때, 본인의 프레임워크나 애플리케이션에서 별도의 예외 계층 구조로 변환하고 싶을 때 유용하다.
- 아키텍처 검증
- 기타
- 하이버네티스와 JDBC를 같이 사용할 경우, DB 동기화 문제 해결
- 멀티쓰레드 Safety 관련하여 작업해야 하는 경우, 메소드들에 일괄적으로 락을 설정하는 애스팩트
- 데드락 등으로 인한 PessimisticLockingFailureException등의 예외를 만났을 때 재시도하는 애스팩트
- 로깅, 인증, 권한 등
- 장점
- Primary(Core) Concern
- 비지니스 로직을 구현한 부분
- Cross-Cutting Concern
- 보안, 인증, 로그 등과 같은 부가적인 기능으로서 시스템 전반에 산재되어 사용되는 기능
- Code
- Primary(Core) concern을 구현해 놓은 코드를 이야기
- <기존>
- 기존의 코드는 Primary Concern과 Cross-Cutting Concern이 같이 하나의 프로그램으로 구현되어 있기 때문에 비지니스 로직과 상관없는 코드들이 여기저기 산재해 있어 가독성과 유지보수성이 좋지 않다.
- <AOP>
- AOP는 Primary Concern과 Cross-Cutting Concern이 별도로 코드로 구현이 되고, 최종적인 프로그램은 이 (Code와 Advise)을 연결해주는 설정 정보인 Point-Cut을 이용하여 Weaving되어 완성하게 되는 것이다.
'Learn IT Knowledge > Computer Science' 카테고리의 다른 글
[ 전공 지식 ] XML (0) | 2018.01.03 |
---|---|
[ 전공 지식 ] POJO (0) | 2018.01.02 |
[ 전공 지식 ] EJB (0) | 2018.01.02 |
[ 전공 지식 ] Component (0) | 2018.01.02 |
[ 전공 지식 ] Dependency Injection (0) | 2017.12.29 |