티스토리 뷰

SpringBoot

AOP 개념과 용어 정리

nswon 2022. 7. 9. 14:21

1. AOP란 ?

Aspect Oriented Programming의 줄임말로, 관점지향 프로그램 이라고 한다.

스프링 어플리케이션은 특별한 경우를 제외하고 MVC 웹 어플리케이션에서  Web Layer, Business Layer, Data Layer 로 정의한다.

스프링 DI가 의존성에 대한 주입이라면, AOP는 로직에 대한 주입이라 볼 수 있다.

 

1-1. Web Layer

REST API를 제공하고 Client 중심의 로직을 적용.

보통 요청에 대한 응답을 해주거나 HTTP 상태를 변경한다. Controller라고 생각하면 될 것 같다.

 

1-2. Business Layer

내부 정책에 따른 logic을 개발.

서비스 로직을 짜는 것이 Business Layer라고 볼 수 있다. Service라고 생각하면 될 것 같다. 

 

1-3. Data Layer

데이터베이스 및 외부와의 연동을 처리

application.yml을 생각하면 될 것 같다.

 

2. 횡단 관심사

프로그램을 작성하다보면 다수의 모듈에서 공통적으로 나타나는 부분이 존재하는데, 이것을 횡단 관심사 라고 한다.

 

 

위 사진은 대표적인 횡단 관심을 나타낸다.

로깅, 보안, 트랜잭션에서 반복적으로 나타나는 부분이 있다. 코드적으로 이해가 안 될 수 있다.

그럼 현실상황에서 예시를 들어보자. 한 남자와 여자가 있고, 두 사람이 집에 들어가는 일을 간략한 의사코드로 나타내보자.

 

남자 의사코드

열쇠로 문을 열고 집에 들어간다.
컴퓨터로 게임을 한다.
씻고 잔다.
자물쇠를 잠그고 집을 나선다.
...

-----------------------
예외사항 : 집에 불남 - 119에 신고한다.

 

여자 의사코드

열쇠로 문을 열고 집에 들어간다.
요리를 한다.
씻고 잔다.
자물쇠를 잠그고 집을 나선다.
...

-----------------------
예외사항 : 집에 불남 - 119에 신고한다.

 

반복적으로 나타나는 부분을 체크해보자.

열쇠로 문을 열고 집에 들어간다.
씻고 잔다.
자물쇠를 잠그고 집을 나선다.
...

-----------------------
예외사항 : 집에 불남 - 119에 신고한다.

 

이것을 횡단 관심사라 한다.

 

3. 주요 Annotation

annotation 의미
@Aspect AOP를 정의하는 클래스에 할당
@Pointcut 기능을 어디에 적용시킬지 지점을 설정
@Before 메소드 실행하기 이전
@After 메소드가 성공적으로 실행 후 예외가 발생되더라도 실행
(finally와 비슷하다고 보면 될 것 같다)
@AfterReturing 메소드를 호출하면 메소드가 정상적으로 실행하고 리턴까지
완료했을 때 
@AfterThrowing 메서드를 호출했는데 예외가 발생했을 때 
@Around Before / After 모두 제어

 

이 Annotation들은 다음포스팅인 실무 사례 알아보기에서 자세하게 나온다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday