스프링의 여러 특징 중 중요한 특징을 뽑자면 IoC, DI 그리고 AOP라고 볼 수 있다.
AOP는 'Aspect Oriented Programming'의 약어로 기능을 핵심 비지니스 로직과 공통 모듈을 분리함으로써
개발자가 좀 더 비지니스 로직에만 집중해서 처리할 수 있는 방법을 제공한다.
이 말은 즉, 공통 모듈(로깅이나 보안인증 등)을 별도로 작성한 후 코드밖에서 비지니스 로직 사이에 삽입하는 것이
AOP 기능을 사용해 개발한 것이라고 볼 수 있다.
AOP와 비슷한 단어로 Java의 OOP(Object Oriented Programming)이라는 것이 있다.
OOP 즉, 객체지향 프로그래밍이라는 단어와 AOP는 앞만 다르다는 것을 알 수 있다.
AOP는 OOP를 대신하는 새로운 개념이 아니라, OOP를 더욱 OOP답게 사용할 수 있도록 도와주는 개념이다.
객체를 재사용함으로써 개발자들은 반복되는 코드양을 많이 줄일 수 있었지만, 로그나 권한체크, 인증, 예외처리 등
핵심 비지니스 로직은 아니지만 반드시 해야되는 작업은 반복될 수 밖에 없었다.
이러한 문제를 해결해주는 것이 AOP 이다.
쉽게 말해 AOP는 비지니스 로직은 아니지만, 반드시 해야하는 작업 이라고 말할 수 있다.
※ AOP가 사용되는 경우
- 간단한 메소드 성능 검사 : 개발 도중 작업 시간을 측정해보고 쿼리등을 개선하는 작업은 매우 의미가 있다. 이런 경우 시간을 측정하는 작업을 해당 메소드에 계속 반복해서 측정하는 것은 매우 번거로운 일이므로 AOP기능을 사용한다.
- 트랜잭션 처리 : AOP의 설정을 응용한 것이다. 매번 사용하는 트랜잭션의 코드는 복잡하고 번거롭다.
- 예외반환
- 기타 등등
AOP의 구현방식은 '프록시(Proxy) 패턴' 이라는 방식을 통해서 구현한다.
외부에서 특정한 객체를 호출하면, 객체를 감싸고 있는 바깥쪽 객체(Proxy)를 통해서 호출이 되는 방식이다.
※ AOP 관련 용어
- Aspect : 공통 모듈의 추상적인 명칭. 예를 들어 로깅이나 보안, 트랜잭션과 같은 기능 자체에 대한 용어
- Advice : 실제로 기능을 구현한 객체. 개발자가 만드는 것은 Aspect가 아닌 클래스를 제작하고 @Advice 애노테이션을 적용하는 것이다.
- Target : 실제 비지니스 로직을 수행하는 객체를 의미. 말 그대로 Aspect를 적용해야 하는 대상 객체를 의미한다.
- Join Points : 작성된 Advice가 활약할 수 있는 위치를 의미
- PointCuts : 여러 Join Points 중에서 Advice를 적용할 대상을 선택하는 정보
- Proxy : Advice가 적용되었을 때 만들어지는 객체
- Weaving : Advice와 Target이 결합되어서 프록시 객체를 만드는 과정
※ Advice의 종류
- Before Advice : target의 메소드 호출 전에 적용
- After returning : target의 메소드 호출 이후에 적용
- After throwing : target의 예외 발생 후 적용
- After : target의 메소드 호출 후 예외의 발생에 관계없이 적용
- Around : target의 메소드 호출 이전과 이후 모두 적용 (가장 광범위하게 사용됨)
참조 : http://addio3305.tistory.com/86
코드로 배우는 스프링 웹프로젝트
'Programming > Java & JSP & Spring' 카테고리의 다른 글
[Spring] 트랜잭션 처리 (0) | 2017.02.02 |
---|---|
[Spring] AOP, Filter, Interceptor의 차이 (0) | 2017.02.01 |
[Spring] RestController와 Ajax (0) | 2017.02.01 |
jQuery와 DOM (0) | 2017.02.01 |
BootStrap (부트스트랩) 이란? (1) | 2017.01.31 |