반응형

Spring의 핵심 요소

- 제어 역전(IoC, Inversion of Control)

- 관점 지향 프로그래밍(AOP, Aspect Oriented Programming)

- 서비스 추상화(PSA, Portable Service Abstraction)

라고 볼 수 있다.

 

오늘은 그 중에서 AOP에 대해서 정리해보려고 한다.

 

AOP란 무엇일까?AOPAspect 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

+ Recent posts