Spring의 핵심 요소는
- 제어 역전(IoC, Inversion of Control)
- 관점 지향 프로그래밍(AOP, Aspect Oriented Programming)
- 서비스 추상화(PSA, Portable Service Abstraction)
라고 볼 수 있다.
오늘은 그 중에서 AOP에 대해서 정리해보려고 한다.
AOP란 무엇일까?AOP는Aspect Oriented Programming, 관점 지향 프로그래밍은 절차지향 프로그래밍과 같이하나의 패러다임이라고 볼 수 있다.
AOP는 좀 더 비즈니스 로직에 집중하는 것을 말한다.
가령 우리가 어떤 물품을 판매하는 사이트를 만들었다고 가정하면,
그 안에는 여러 기능들이 존재할 것이고 그 기능들은 데이터베이스를 통해 데이터를 가져오거나 저장할 것이다.
이러한 경우, 데이터베이스에 데이터를 쓰거나 읽을 때 우리는 트랜젝션을 통해 논리적 작업단위로 묶어서 데이터를 처리한다.
그렇다면 각 기능에는 트랜젝션과 비즈니스 로직이 함께 들어가야할 것이다.
비즈니스 로직을 개발할 때 공통의 중복된 기능을 주입하여 비즈니스 로직에만 더 집중해서 개발하고자 하는게 관점 지향적 프로그래밍의 핵심이라고 볼 수 있다.
즉, 내가 필요한 기능이 있다면 기능을 주입해서 사용할 수 있는 것이다.
가장 좋은 예시가 Spring의 @Transactional이다.
우리가 Spring을 통해 개발할 때 메서드나 Class 위에 @Transactional 어노테이션을 사용한다.
이런 경우 우리가 작성한 데이터 처리 메서드가 시작될 때 그리고 종료될 때에 맞춰서 트랜젝션이 시작되고 종료된다.
우리에게 필요한 공통 기능을 만들고 필요할 때 주입해서 사용함으로서 좀 더 비즈니스 로직에 집중할 수 있도록 하는게 AOP이다.
추가로 Spring의 AOP는 프록시(다이나믹 프록시)를 통해 AOP를 구현하고 있다.
우리가 어떤 메서드를 호출하게 되면 이를 프록시가 대신 실행해주면서 추가적인 기능을 실행해주게 된다.
A 메서드 실행하고자 할 때 이를 프록시에게 맡겨서
프록시 -> 추가기능 실행 -> A 메서드 실행 이런식으로 동작하게 된다.
다음에는 Spring의 AOP동작에 대해서 작성해보겠다.
틀린점이나 추가해야할 것이 있다면 알려주세요.
'공부 > Spring' 카테고리의 다른 글
[Spring] DI란? (0) | 2021.09.20 |
---|---|
[Spring] IoC란 무엇인가? (0) | 2021.09.16 |
@Transactional 동작하지 않는 경우 (0) | 2021.09.10 |
[Spring] Filter & Interceptor (0) | 2021.05.05 |
Servlet Working Flow (0) | 2021.05.04 |