오늘은 스프링의 핵심 중 하나인 AOP(관점 지향 프로그래밍)에 대해 공부했습니다. 비즈니스 로직과 공통 로직(로깅, 트랜잭션 등)을 분리하여 유지보수성을 극대화하는 마법 같은 기술입니다.
AOP를 이해하기 위해 가장 먼저 정복해야 할 세 가지 개념입니다.
스프링에서 AOP를 적용하는 구체적인 순서입니다.
설정 클래스(Config)에 @EnableAspectJAutoProxy 애너테이션을 추가하여 스프링이 애스펙트를 인식할 수 있게 합니다.
클래스 위에 @Aspect를 붙여 이 클래스가 애스펙트임을 명시합니다.
⚠️ 주의:
@Aspect만 붙인다고 자동으로 빈이 되지 않습니다! 반드시@Component를 붙이거나@Bean으로 등록하여 스프링 컨텍스트에 포함시켜야 합니다.
어떤 메서드를 가로챌지 어드바이스 애너테이션을 통해 지시합니다.
가로챈 메서드 전후에 실행할 구체적인 코드를 작성합니다.
스프링은 메서드 실행 시점에 따라 5가지 어드바이스를 제공합니다.
@Around: 가장 강력함! 메서드 실행 전후를 모두 제어하며, 아예 로직을 대체할 수도 있음.@Before: 메서드 실행 전.@After: 메서드 실행 후 (결과와 상관없이).@AfterReturning: 메서드가 성공적으로 반환된 후.@AfterThrowing: 메서드에서 예외가 발생한 후.@Order)하나의 메서드에 여러 개의 애스펙트가 걸려 있다면, @Order 애너테이션으로 순서를 정해줍니다.
@Order(1)이 @Order(2)보다 먼저 실행됩니다. 숫자가 낮을수록 우선순위가 높습니다!AOP는 결국 "반복되는 공통 코드를 한곳으로 모아 관리하는 기술"입니다. 스프링이 관리하는 모든 객체(Bean)에 대해 메서드 호출을 가로챌 수 있다는 점이 핵심입니다.
#Spring #AOP #AspectJ #백엔드 #개발공부