코드 그라데이션
어노테이션과 AOP 본문
어노테이션의 의미
1) 주석을 의미하는 영어 포현
2) @oooooo 형태로 작성
3) 외부 소프트웨어에 필요한 처리 내용을 전달한다.
인스턴스 생성 어노테이션
- 애플리케이션 만들 때 레이어로 만드는 것이 좋다. 즉 계층화를 하라는 의미이다.
도메인 주도 설계
레이어 | 개요 |
애플리케이션 레이어 (Application Layer) |
클라이언트와의 데이터 입출력을 제어하는 레이어 |
도메인 레이어 (Domain Layer) |
애플리케이션의 중심이 되는 레이어로서 업무 처리를 수행하는 레이어 |
인프라스트럭처 레이어 (Infrastructure Layer) |
데이터베이스에 대한 데이터 영속성(Persistence Context) 등을 담당하는 레이어 |
인스턴스 생성 어노테이션(주요)
어노테이션 | 개요 |
@Controller | 애플리케이션 레이어의 컨트롤러에 부여 |
@Service | 도메인 레이어의 업무 처리에 부여 |
@Repository | 인프라 레이어의 데이터베이스 액세스 처리에 부여 |
인스턴스 생성 어노테이션(보조)
어노테이션 | 개요 |
@Component | @Controller, @Service, @Repository 용도 이외의 인스턴스 생성 대상 클래스에 부여 |
커스텀 이노테이션
: 직접 만드는 것. java.lang.Anotation이라는 인터페이스를 상속하고 만든다.
AOP(관점 지향 프로그래밍)
: 스프링 프레임워크에서 제공하는 AOP 기능을 활용하여 '중심적 관심사'와 '횡단적 관심사'를 분리하여 프로그램을 쉽게 만들 수 있다.
[AOP의 고유 용어]
용어 | 내용 |
어드바이스(Advice) | 횡단적 관심사의 구현(메서드). 로그 출력 및 트랜젝션 제어 등. |
에스팩트(Aspect) | 어드바이스를 정리한 것(클래스) |
조인포인트(JoinPoint) | 어드바이스를 중심적인 관심사에 적용하는 타이밍. 메서드(생성자) 실행 전. 메서드(생성자) 실행 후 등 실행되는 타이밍 |
포인트컷(PointCut) | 어드바이스를 삽입할 수 있는 위치 ex) 메서드 이름이 get으로 시작할 때만 처리하는 조건을 정의할 수 있다. |
인터셉터(Intercepter) | 처리의 제어를 인터셉트하기 위한 구조 또는 프로그램. 스프링 프레임워크에서는 인터셉트라는 메커니즘으로 어드바이스를 중심 관심사에 추가한 것처럼 보이게 한다. |
타깃(Target) | 어드바이스가 도입되는 대상 |
[어드바이스의 다섯 가지 종류]
어드바이스 | 내용 | 어노테이션 |
Before Advice | 중심적 관심사가 실행되기 이전에 횡단적 관심사를 실행 | @Before |
After Returning Advice | 중심적 관심사가 정상적으로 종료된 후에 횡단적 관심사를 실행 | @AfterReturning |
After Throwing Adivice | 중심적 관심사로부터 예외가 던져진 후로 횡단적 관심사를 실행 | @AfterThrowing |
After Advice | 중심적 관심사의 실행 후에 횡단적 관심사를 실행 (정상 종료나 예외 종료 등의 결과와 상관없이 실행) |
@After |
Around Advice | 중앙적 관심사 호출 전후에 횡단적 관심사를 실행 | @Around |
참고 : 포인트컷 방식
AOP 요약
* AOP에서는 프로그램을 2개의 요소인 중심적 관심사와 횡단적 관심사로 구성되어 있다고 생각한다.
* 중심적 관심사란 구현해야 할 기능을 나타내는 비즈니스 로직을 의미
* 횡단적 관심사란 본질적인 기능은 아니지만, 품질이나 유지보수 등의 관점에서 꼭 필요한 기능을 나타내는 프로그램.
* AOP에서는 횡단적 관심사를 분리함으로써 기존 코드를 수정하지 않아도 프로그램 중에 특정 기능(공동 처리)을 추가할 수 있다.
* 스프링 프레임워크는 다양한 공통 기능을 AOP에서 제공한다.
728x90
'Spring > 핵심 가이드' 카테고리의 다른 글
템플릿 엔진과 타임리프, 요청 파라미터 (0) | 2023.01.15 |
---|---|
스프링 MVC, 요청과 응답 사이의 흐름 (0) | 2023.01.15 |
데이터베이스, 테이블, 엔티티, 리포지토리 (0) | 2023.01.14 |
DI 컨테이너와 이것의 다섯가지 규칙 (0) | 2023.01.14 |
핵심 가이드 - 의존성 주입, 관점 지향 프로그래밍 (0) | 2023.01.14 |
Comments