FireDrago
[Spring] AOP 본문
Intro
AOP(Aspected - Oriented - programming)가 무엇이고 왜 사용하는지, 어떻게 사용하는지 작동원리까지 알아보자
AOP란
메서드 하나를 상상해보자 회원가입된 회원을 전부 호출하고, 메서드 시작 시간과 호출이 끝난 시간의 차를 출력한다.
또 다른 메서드는. 회원가입을 시행하고, 역시 시작시간과 끝난시간의 차이를 출력한다.
여기서 핵심기능과 공통기능을 분리할 수 있다. 핵심기능은 회원호출, 회원가입 기능이고,공통기능은 실행 시간 출력 기능이다.
AOP는 공통 기능을 흩어져 있는 여러 메서드에 적용하는 기술이다.
천개의 메서드에서 실행시간 기능을 사용하더라도, AOP 를 통해, 한 곳에서 관리할 수 있다.
훨씬 더 객체지향적이고, 재사용성이 높아진다. 대표적인 AOP 기능으로 로깅, 트랜잭션관리 등이 있다.
※ 컴포넌트
- 재사용 가능한 '모듈' (즉 재사용 가능한 기능의 집합)
※ 모듈
- 기능의 집합 (회원가입 모듈 : 회원정보 입력기능, 유효성검사, db중복확인, db정보입력 기능의 집합)
AOP 사용법

- @Aspect : 핵심기능 전,후에 공통기능 실행해야 할때 사용 (try{} finally {} 구문 사용)
- @ After : 핵심기능 이후에 공통기능 실행 , @Before 핵심기능 전에 공통기능 실행
- @Component : 스프링 빈으로 등록
- @Around('execution( [접근제어자] [리턴타입] [클래스] [메서드] [파라미터]')
- * : 모든 접근 제어자
- hello.hellospring.. : '..' (와일드카드) 이용하여 패키지 하위의 모든 클래스에 적용
- * : 모든 메서드
- (..) : 모든 파라미터
@Around('execution * hello.hellospring.member.join(String)')
hellospring 패키지의 member클래스의 String을 파라미터로 가지는 join 메서드에만 적용
- joinPoint.proceed() : 핵심기능 호출
AOP 작동원리
1. 스프링은 AOP 기능을 스프링 컨테이너에 빈으로 등록한다.
2. AOP가 적용되는 객체의 Proxy 객체를 생성한다. proxy 객체에서 AOP를 실행하고
joinPoint.proceed() 를 통해 원래 객체의 기능을 실행한다.
※ proxy 객체
- 핵심기능 호출 전,후에 공통기능을 호출하는 객체
- 프록시 객체를 생성할 수 있는 이유는 스프링컨테이너에서 스프링 빈을 관리하는 스프링의 특성 덕분이다.
이 글은 인프런 김영한님의 스프링 입문 강의를 바탕으로 작성했습니다.
'프로그래밍 > Spring' 카테고리의 다른 글
| [Spring] 스프링 컨테이너와 스프링 빈 (0) | 2024.01.05 |
|---|---|
| [Spring] 스프링 기본 원리 (0) | 2024.01.04 |
| [Spring] 스프링 의존관계 설정 (0) | 2023.12.30 |
| [Spring] 회원관리 예제 (0) | 2023.12.29 |
| [Spring] 웹 개발의 기초 (0) | 2023.12.28 |
