ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AOP란?
    개발공부 2023. 6. 4. 21:23

    스프링 삼각형

    스프링을 이해하는데에는 POJO를 기반으로 스프링 삼각형이라고 불리는 IoC,DI, AOP, PSA 라고하는 스프링의 3대 프로그래밍 모델에 대한 이해가 필요하다. POJO(Plain Old Java Object)를 3가지 유형의 프로그래밍 모델에 맞게 동작하고 설계함으로서 스프링을 객체 지향적인 프레임워크로 동작할수 있게 한다. 이 중 AOP라는건 무엇인가?

    AOP (Aspect-Oriented Programming), 관점 지향 프로그래밍

    DI가 의존성에 대한 주입이라면, AOP는 코드 로직에 대한 주입이라고 할 수 있다.

    어떤 웹, 앱, 프로그램 등의 기능을 가정해보자. 금융-은행과 관련된 프로그램에서 입급, 출금, 이체 등 여러가지 기능이 존재할 것이다. 그 여러 기능 모듈에서 공통적으로 발생할 내용(로깅, 보안, 트랜잭션 등의 로직) 이 존재할 것이며 이런 부분을 횡단 관심사라고 한다. 

    DB 커넥션 준비
    Statement 객체 준비
    
    try{
    	DB 커넥션 연결
        Statement 객체 세팅
        DML SQL 구문
    }catch{
    	예외처리
    }finally{
    	DB자원반납
    }

     DB에 SQL문을 사용해 연산을 하는 코드를 예를 들면, 'DML SQL 구문'을 제외하고는 다른 모듈에서 DB 기능을 사용할때도 공통적으로 사용되는 부분이다. 이 경우로 설명하자면 DML SQL 구문은 핵심 관심사, 나머지를 횡단 관심사라고 할 수 있다. 즉, 횡단 관심사는 [모듈별로 반복되고 중복해서] 나타는 부분이라고 할 수 있다.

    AOP는 이런 횡단 관심사를 분리해내고, 분리된 횡단 관심사를 메서드의 실행에 맞춰 주입시켜주는 형식의 개발 방식이라 할 수 있다. 스프링에서는 이런 AOP를 프록시 패턴을 통해 구현되고있다. 즉, AOP는 프록시 기반이며, 인터페이스를 기반으로 설계한다 할 수 있다.

     

    AOP 용어

    위에서 AOP는 로직 주입이라고 할 수 있다고 했다. 그렇다면 AOP에서 사용하는 용어와 의미를 알아보려한다

     

    *Joinpoint

    AOP, Aspect 적용이 가능한 모든 지점을 의미하며 스프링에선 메서드 실행을 의미한다.

     

    *Pointcut

    Joinpoint의 집합체로 언제 Advice가 실행할 지를 정의한다.

     

    *Advice

    Aspect가 언제 어디서 무엇을 할지 정의하는 메서드이다.

    Before(메서드 실행전), After(메서드 실행후), After-returning(메서드 성공후), After-throwing(메서드 예외처리 발생시), Around(메서드 실행 전+실행후)

     

    *Aspect

    Advice와 Pointcut의 결합으로 프로그램에 필요한 로직과 그것을 실행할 지점을 가지고 있다.

     

    마무리

    AOP를 사용하는 이유는, 횡단 관심사를 분리함으로서 코드의 중복되는 내용을 줄이고 관심의 분리를 통한 효율적인 유지보수, 재사용성 증가 등의 이유가 있다. 

Designed by Tistory.