본문 바로가기
Learn IT Knowledge/Computer Science

[ 전공 지식 ] AOP

by ${코딩몬} 2018. 1. 2.

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되어 완성하게 되는 것이다. 


출처 : http://isstory83.tistory.com/90 [I's Story]


'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