진행하고 있는 개인 프로젝트에 AOP를 사용한 기능을 추가해 보고 싶어서, AOP 관련 공부를 하려고 한다.
포스팅의 순서는 크게
1. AOP 사용 이유
2. AOP 정의
3. AOP 관련 용어
4. Advice의 종류 로 진행된다.
AOP를 쓰는 이유
우리가 개발을 하다가, 모든 메서드에 메서드의 수행 시간을 알아내는 로그를 찍어야 한다고 생각해보자.
메서드가 얼마 없다면 괜찮겠지만, 메서드가 100개, 1000개 된다면 ?
일일히 로그를 찍는 코드를 100번 1000번 서비스단에 넣게 될 것이다. (다들 .. 반복 작업 ... 싫어하시죠 ..? 🥲)
그리고 넣는다고 하더라도, 핵심 기능과 로그 기능이 섞이기 때문에, 관심사 분리와 중복 코드 지양이라는 부분에서 봤을 때도 좋은 코드는 아닐 것이다.
이 때 이러한 로그 기능을 빼서 공통 코드로 만들어 쓸 수 있도록 하는 것이 AOP를 쓰는 이유 !!!!
그럼 AOP가 뭔지 본격적으로 알아보자.
AOP란?
AOP는 Aspect Oriented Programming의 약자다. 번역하면 '관점 지향 프로그래밍'.
(횡단 관심사라는 말도 쓰는데, 영어로 하면 cross-cutting concerns 라고도 한다.)
풀어서 한 문장으로 정의하면 부가 기능(advice)을 동적으로 추가해주는 기술이라고 정의할 수 있을 것 같다.
부가 기능이 뭔데?!
부가 기능은 핵심 기능의 반대말로 생각하면 된다.
어떤 특정 메서드가 수행하는 핵심 기능 말고, 핵심 로직과는 관심사를 공유하지 않는 '곁다리 기능'이라고 이해했다.
그럼 '동적'으로 추가한다는 건 무슨 말이야?
부가 기능을 동적으로 추가한다는 건,
우리가 프로그램을 만들 때 넣는게 아니라, 코드가 실행 중에 자동으로 추가된다는 뜻이다.
이러한 성질을 이용하면 코드를 메서드의 시작 or 끝 or 시작과 끝 모두에 자동으로 코드를 추가해 줄 수 있다.
AOP 관련 용어
용어 | 설명 |
target | advice가 추가될 객체 |
advice | target에 동적으로 추가될 부가 기능 (코드) |
join point | advice가 추가(join)될 대상 (메서드) |
pointcut | join point들을 정의한 패턴. ex) execution(* com.sparta.*.*(..)) |
proxy | target에 advice가 동적으로 추가되어 생성된 객체 |
weaving | target에 advice를 추가해서 proxy를 생성하는 것 |
Advice의 종류
스프링에서 Advice의 설정은 XML, yml, 애너테이션 등의 방법으로 가능하다.
종류 | 애너테이션 | 설명 |
around advice | @Around | 메서드의 시작과 끝 부분에 추가되는 부가 기능 |
before advice | @Before | 메서드의 시작 부분에 추가되는 부가 기능 |
after advice | @After | 메서드의 끝 부분에 추가되는 부가 기능 |
after returning | @AfterReturning | 예외가 발생되지 않았을 때, 실행되는 부가 기능 |
after throwing | @AfterThrowing | 예외가 발생했을 때, 실행되는 부가 기능 |
이렇게 AOP의 정의와 용어, 사용 이유에 대해 공부해봤다.
다음 포스팅에서는 AOP를 현재 하고있는 프로젝트에 적용하는 과정에 대해서 포스팅해보겠다!
다음 포스팅
'Framework > Spring' 카테고리의 다른 글
[TIL] 같은 타입의 Bean이 2개라면 발생하는 문제 해결 (feat. @Primary, @Qualifier) (0) | 2024.08.06 |
---|---|
[TIL][Test] TDD 파헤쳐보기 (개념, 장/단점, 흐름) (0) | 2024.04.01 |
[TIL][Test] 단위 테스트/통합 테스트/인수 테스트, 테스트 코드의 필요성 (0) | 2024.03.22 |
프레임워크와 라이브러리의 차이 (1) | 2024.01.16 |