Skip to Content
Suffering builds character
아카이브21.spring AopAOP 개요2.AOP

2.AOP

AOP란 Aspect Oriented Programming의 줄임 표현으로,
사전적 의미 그대로 번역하면 관점 지향 프로그래밍이라고 볼 수 있음

1-1. AOP를 활용하여 로깅 처리에 대한 문제 해결 방법

AOP 기술을 활용할 경우, 서비스 레이어에 정의된 메서드 코드 내부에 로깅 로직을 직접 작성하지 않더라도 여전히 로깅 처리가 적용되어 프로그램이 동작하도록 할 수 있음

OwnerService.java
@Slf4j public class OwnerServiceImpl { public Owner addOwner(Owner owner) { // log.debug("{}", owner); Owner 추가를 위한 별도의 서비스 로직 // log.info("New Owner : {} added", owner); // ... } }

AOP를 적용한 예시 코드

LoggingAspect.java
@Aspect public class LoggingAspect { // 메서드 호출 전에 수행 @Before public void logBefore(JoinPoint joinPoint) { log.debug(joinpoint.getTarget()...); } // 메서드 호출 후에 수행 @After public void logAfter(JoinPoint joinPoint) { log.debug(joinpoint.getTarget()...); } }
IDE 콘솔
DEBUG: [owner = firstName: gugu, lastName: ttemy] INFO: New Owner [owner = firstName: gugu, lastName: ttemy] added

→ OwnerService.java 클래스 내 로깅 처리에 대한 코드가 없지만 로깅 처리는 여전히 동작함

결과적으로 AOP가 이러한 처리를 수행할 수 있도록 메커니즘을 제공하고 있다고 볼 수 있음

따라서 개발자는 AOP에서 제공하는 몇 가지 규칙에 맞게 별도의 로깅 로직을 분리하여 작성한 다음에 AOP 적용을 위한 별도의 과정을 거치게 될 경우,

위와 같이 각 서비스 레이어에 정의된 메서드 코드 내부에 로깅 처리 로직을 직접 작성하지 않더라도 프로그램의 실행 과정에서 AOP가 동작하게 되면서,

분리하여 작성된 로깅 처리를 위한 코드가 서비스 메서드 내에 동적으로 추가되어 로깅 처리가 적용되도록 하는 것이 가능해짐

정리하면 AOP란,
여러 클래스들(OwnerService.java, PetService.java)에 분산된 각각의 책임(Responsibility)이나 관심사(Concern)를 일련의 관점(Aspect)이라고 부르는 별도의 클래스에 캡슐화시켜 사용할 수 있도록 제공해주는 기능

Note

위 맥락에서 로깅 처리는 하나의 관심사라고 볼 수 있으며,
그 외에도 보안 처리를 위한 로직, 트랜잭션 처리를 위한 로직 등은 또 다른 관심사가 될 수 있음

Last updated on