AOP (Aspect Oriented Programming)
그대로 해석해보면 AOP는 관점 지향 프로그래밍이다. Controller / Service / Repository 에서 수행하는 핵심기능들 외에 부가기능을 추가해야하는 경우가 있을 것이다. 예를 들면 사용자의 API 시간을 측정하는 경우나 회원 패턴 분석을 위한 로그 기록등이 부가기능이라고 할 수 있다. 이러한 부가기능들을 AOP를 통해 모듈화할 수 있다.
부가기능은 핵심기능과 관점(Aspect)과 관심이 다르기때문에 AOP를 통해 핵심기능과 구분해서 부가기능 중심으로 설계, 구현이 가능하다.
부가기능 모듈화가 필요한 이유
부가기능을 모듈화하지 않고 핵심기능에 부가기능 코드를 추가한다면, 해당 부가기능을 쓰는 모든 핵심기능에 하나하나 추가해줘야하고 만약 이 부가기능이 수정된다면 적용해두었던 모든 핵심기능 코드를 하나하나 수정해줘야하는 번거로움이 있다. 따라서 코드의 유지보수측면에서 부가기능과 핵심기능을 분리하여 구현할 필요가 있다.
AOP 적용 (어노테이션, 개념)
1. @Aspect : AOP 기능을 수행할 때 붙이는 어노테이션 / Spring 빈(Bean) 클래스에만 적용 가능하다.
2. 어드바이스
: 만든 부가기능을 핵심기능 언제 수행할 건지 정하는 것 (핵심기능 수행 전, 수행 후, 전후 모두, 핵심기능이 오류가 발생했을 때, 반환하려는 값을 사용하려고 할 때 등등)
어드바이스 종류
- @Around: '핵심기능' 수행 전과 후 (@Before + @After)
- @Before: '핵심기능' 호출 전 (ex. Client 의 입력값 Validation 수행)
- @After: '핵심기능' 수행 성공/실패 여부와 상관없이 언제나 동작 (try, catch 의 finally() 처럼 동작)
- @AfterReturning: '핵심기능' 호출 성공 시 (함수의 Return 값 사용 가능)
- @AfterThrowing: '핵심기능' 호출 실패 시. 즉, 예외 (Exception) 가 발생한 경우만 동작 (ex. 예외가 발생했을 때 개발자에게 email 이나 SMS 보냄)
3. 포인트 컷
: 어디에 수행할지 정하는 것
@Pointcut : 포인트컷 재사용 가능 어노테이션
'개발 > Spring' 카테고리의 다른 글
[Spring] Bean 등록하기 (@Bean vs @Component) / 같은 타입의 Bean 구분하기 (@Primary vs @Qualifier()) (0) | 2025.02.05 |
---|---|
[Spring] In-Memory h2 database 사용해서 테스트 용 DB만들기 (1) | 2024.06.19 |
[Spring] 단위 테스트 (1) | 2024.06.13 |
[Spring] 뉴스피드 팀 프로젝트 설계 (0) | 2024.06.04 |
[Spring] 특정 URL에서만 작동하는 서블릿 필터 만들기 (1) | 2024.06.03 |