본문 바로가기
IT개발/Spring5

[Spring, 스프링] AOP(Aspect Oriented Programming)

by Thompson 2024. 4. 5.
728x90
AOP(Aspect Oriented Programming) : 관점 지향 프로그래밍

 

AOP를 왜 사용하는가? 그 목적인 뭔가?
  • 프로그래밍에서 반복되는 코드, 불안정한 코드, 수정하기 힘든 경험이 있을 겁니다. 여기저기 똑같은 로깅 코드를 넣거, 트랜잭션 관리 코드를 넣고 합니다. 하지만 AOP는 이런 반복되는 코드를 한 번에 처리해 주는 도구입니다.
  • 다들 사용 객체와 대상 객체를 사용해 본 적이 있을 겁니다. 그럼 어떤 목적으로 사용하냐가 중요한데, 왜 사용객체가 메서드를 만들어서 사용해야지 대상 객체한테 일을 맡기는 걸까? 이제부터 그 목적을 구현하기 위해서는 "AOP"를 사용해합니다.
AOP(Aspect Oriented Programming)란 무엇인가?
  • AOP(Aspect Oriented Programming)은 "관점 지향 프로그래밍"으로 번역이 되고, 그 핵심 내용은 개발자가 서비스를 구현할 때, 관점, 즉, 관심 차원(중요도 차원)에서 핵심 기능과 부가 기능(보조 기능)을 분리하여 서로 독립적인 객체를 구현하는 것을 말합니다. 
그럼 장점은 무엇이 있을까?


과연 "핵심 기능"과 "부가 기능"을 분리하면 무엇이 좋을까요?

  • 한 번 예시를 들어봅시다.
회사원만 이용할 수 있는 로그인 체크 기능을 구현할 겁니다. 그럼 여기서 AOP를 사용하면 핵심 기능인 회사원만 이용할 수 있는 로그인 인증 기능과 부가 기능인 로그인 체크 기능을 분리하여 구현할 수 있습니다. AOP를 사용하면 부가 기능을 독립적인 모듈로 개발할 수 있기 때문에, 이를 다른 핵심 기능에 쉽게 적용할 수 있습니다. 예를 들어, 회사원만 이용할 수 있는 로그인 체크 기능을 다른 서비스에도 적용해야 할 경우, 기존의 부가 기능 모듈을 그대로 가져와서 재사용할 수 있습니다. 그러면 로그인 체크 어드바이스가 사용자의 정보를 바인드 변수로 전달받아 로그인 여부를 확인합니다. 이제부터 여러 용어가 나오게 됩니다. 이는 기술적인 용어로 알고 있어야 이해할 수 있습니다.

 

 

핵심 기능과 부가 기능을 독립적인 객체로 분리하는 이유는?(이것이 진짜 목적)
  1. 핵심 기능은 응집력이 높은 객체로 구현할 수 있다.
  2. 부가 기능 또한 "객체의 분리 구현"에 의한 각 서비스에서의 부가 기능에 대한 중복 코딩을 방지할 수 있다.

 

횡단관심사 및 공통기능이란?
  • 여러 핵심 기능에 공통적으로 적용되는 부가기능에 대해 애플리케이션의 여러 서비스들을 걸쳐서 반복적으로 나타는것을 횡단관심사이자 공통기능이라고 합니다.