들어가기 전에 : AOP에 대한 이해
- 개발을 하다 보면, 여러 메소드들에서 공통적으로 사용되는 기능들이 있다
- 이러한 공통적인 부분들을 Aspect라고 부른다
- 이러한 Aspect를 매 코드마다 분산해서 작성하면, Aspect가 변경될 때 모든 코드를 다 수정해야 한다
- 예시 : 기존에 한글로 쓰던 로그를 오늘부터 모두 영어로 변경해주세요~ → 로그를 쓰는 모든 부분을 찾아가서 일일히 수정 ㅜㅜ
- Aspect를 코드의 핵심 로직과 분리하여, 중앙집중식으로 관리하면 관리와 수정이 편해진다.
- 이러한 관점으로 코딩을 하고자 하는 패러다임이 AOP이다
Annotation이란?
- 클래스, 메서드, 필드에 붙어서 해당 코드에 부가적인 특성을 부여하는 기능
- 코드 내부 동작은 변경하지 않는다
- 마치 '태그'를 추가하는 느낌으로 볼 수 있다
- 어노테이션이 붙은 코드는 아래와 같이 처리된다
- 컴파일러에게 어노테이션이 붙은 대상에 대해 특별한 동작을 하도록 할 수 있다
- 런타임에서 어노테이션이 붙은 대상에 특정한 동작을 하게 할 수 있다
Annotation을 왜 쓰는가? 써서 뭐가 좋은가?
- Annotation을 이용하면 AOP 철학을 실제로 코드에 구현할 수 있다
- 응용 사례
- 로깅 기능을 어노테이션으로 만든다
- 어노테이션이 붙은 함수들은 모두 동일한 포맷으로 출력됨
- 로그를 한글에서 영어로 바꾼다? 어노테이션만 영어로 수정해주면 됨!
- Lombok : getter,setter을 컴파일타임에 자동으로 만들어주기
- Bean : Bean 어노테이션이 붙은 클래스를 Bean목록에 넣어놓고 DI할때 사용하기
Annotation 사용 및 동작 확인
Java에서 어노테이션(Annotation) 이란 무엇인가에 대해 알아보자.
[Spring] AOP란?
- Annotation 정의 → Target에 Annotation 부착 → 컴파일/로드타임/런타임시 처리의 순서로 사용된다
(1) Annotation 정의
public @interface 어노테이션명 {
String value();
int duration();
}
Target 정의