AOP

허성재's avatar
Aug 19, 2024
AOP
 

1. AOP란 무엇인가?

AOP는 소프트웨어 개발 방법론 중 하나로, **관심사의 분리(Separation of Concerns)**를 목표로 합니다. 여기서 ‘관심사(Concern)’란 코드에서 반복적으로 나타나는 기능이나 로직을 의미합니다. 예를 들어, 로그 작성, 트랜잭션 관리, 예외 처리 같은 기능들은 애플리케이션의 여러 부분에 걸쳐 공통적으로 사용됩니다. 이처럼 반복적이고, 여러 부분에 걸쳐 나타나는 관심사를 효율적으로 관리하기 위해 AOP가 등장했습니다.

2. OOP vs AOP

AOP를 이해하려면 먼저 OOP(Object-Oriented Programming, 객체 지향 프로그래밍)와의 차이를 알아야 합니다.
  • OOP: 프로그램을 객체라는 독립적인 단위로 나누고, 각 객체가 자신의 책임을 가지고 상호작용하는 방식입니다. 예를 들어, 하나의 클래스가 특정 기능을 담당하게 하고, 다른 클래스와 협력하여 프로그램을 완성합니다.
  • AOP: OOP로는 처리하기 어려운 공통 관심사를 따로 분리해, 이 관심사들이 객체나 함수에 영향을 주지 않고도 프로그램 전반에 걸쳐 작동하도록 하는 방식입니다. AOP는 OOP와 함께 사용되며, 특정 기능(Aspect, 관점)을 애플리케이션의 주요 비즈니스 로직에서 분리해 관리할 수 있게 합니다.

3. AOP의 주요 개념

AOP의 핵심 개념을 이해하면 더 쉽게 활용할 수 있습니다.
  • Aspect(관점): 공통적인 기능을 모듈화한 것입니다. 예를 들어, 로그 기록이나 성능 모니터링 같은 기능을 Aspect로 정의할 수 있습니다.
  • Advice(충고): Aspect가 적용되는 시점에서 실행되는 코드입니다. Advice는 메서드 호출 전후 또는 예외 발생 시점에 실행될 수 있습니다.
  • Join Point(연결 지점): Advice가 적용될 수 있는 지점을 말합니다. 보통 메서드 호출 시점이나 예외가 발생하는 시점이 Join Point가 됩니다.
  • Pointcut(지점 설정): Join Point 중에서 Advice가 실제로 적용될 지점을 선택하는 규칙입니다. 예를 들어, 특정 패키지나 클래스의 메서드에만 Advice를 적용할 수 있습니다.
  • Weaving(위빙): Pointcut에 정의된 규칙에 따라 Aspect와 비즈니스 로직을 결합하는 과정입니다. 위빙은 컴파일 시, 로드 시, 또는 런타임 중에 이루어질 수 있습니다.

4. AOP의 활용 예시

다음은 AOP가 유용하게 쓰일 수 있는 몇 가지 예시입니다.
  • 로그 작성: 모든 메서드 호출 시마다 로그를 남기고 싶을 때, AOP를 사용하면 메서드 내부에 로그 작성 코드를 추가하지 않고도 로그를 남길 수 있습니다.
  • 트랜잭션 관리: 데이터베이스와 연동되는 애플리케이션에서 트랜잭션 관리가 필요한 경우, AOP를 사용하면 트랜잭션 시작과 종료를 일관되게 처리할 수 있습니다.
  • 보안 검사: 특정 메서드가 호출될 때 사용자가 적절한 권한을 가지고 있는지 확인하는 코드를 AOP로 처리하면, 중복된 코드 없이 보안 검사를 효율적으로 관리할 수 있습니다.

5. AOP의 장점과 단점

장점:
  • 코드의 재사용성 증가: 공통 관심사를 한 곳에 모아 관리하므로 코드 중복이 줄어듭니다.
  • 유지보수 용이성: 관심사가 분리되어 있기 때문에 코드의 수정이 용이하고, 버그 발생 시 추적이 쉬워집니다.
  • 확장성: 새로운 기능을 추가할 때 기존 비즈니스 로직을 수정하지 않고도 쉽게 확장할 수 있습니다.
단점:
  • 복잡성 증가: AOP를 처음 접하는 개발자에게는 개념이 복잡하게 느껴질 수 있습니다.
  • 디버깅 어려움: 위빙 과정에서 코드가 결합되기 때문에, 디버깅 과정이 다소 어려울 수 있습니다.

6. AOP를 지원하는 프레임워크

Java의 Spring Framework는 AOP를 강력하게 지원합니다. Spring AOP는 주로 프록시 기반으로 동작하며, 애노테이션을 통해 쉽게 AOP를 적용할 수 있습니다. 이 외에도 AspectJ, PostSharp(닷넷) 등 다양한 언어와 플랫폼에서 AOP를 지원하는 프레임워크가 존재합니다.

7. 마무리

AOP는 OOP의 한계를 보완하고, 공통 관심사를 모듈화함으로써 더 깔끔하고 유지보수하기 쉬운 코드를 작성할 수 있게 도와줍니다. 초반에 이해하기 다소 어려울 수 있지만, 실무에서 활용하면 그 진가를 발휘하는 기술입니다.
Share article

heo-gom