관점 지향 프로그래밍은 횡단 관심사의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임이다. 관점 지향 프로그램이은 새로운 프로그래밍 패러다임이 아니라, 객체 지향 프로그래밍 (OOP)의 개념을 더욱 보완, 확장해주는 개념이다.
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252Fb13170e8-baeb-4ac5-b7d8-e36d8328b891%252Fbb327ecf-1ec5-413b-ba9c-bbb5345e5f95%252FUntitled.png%3Ftable%3Dblock%26id%3Ddece443f-bb75-4715-b3b9-e3d8059e5c4b%26cache%3Dv2&w=3840&q=75)
관점 지향 프로그래밍이란?
핵심이 되는 기능을 하는 모듈들이 정상적으로 동작할 수 있도록 각 핵심 모듈마다 작성되어야 하는 로직들이 있다 (로깅, 보안, 트랜잭션 등). 이를 하나의 공통 모듈로 구분하여 핵심 모듈 밖에서 필요한 시점에 호출하여 실행되도록 한다. 따라서 AOP에서는 관심의 분리 (Seperation of Concerns) 라는 개념을 이해하고 있는 것이 중요하다.
- 핵심 관심 (Core Concern): 계좌이체, 입출금, 이자 계산 로직 등
- 횡단 관심 (Crosscut Concern): 유효성 검사, 로깅, 보안 등
![이 그림을 보면 핵심 관심을 관통하여 횡단 관심들이 관여하고 있는 것을 볼 수 있다.](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252Fb13170e8-baeb-4ac5-b7d8-e36d8328b891%252F58c2cb85-42a3-4c65-8cdf-039d6d0acbd7%252FUntitled.png%3Ftable%3Dblock%26id%3D41d36685-8669-4696-a170-1b47b82fc7a5%26cache%3Dv2&w=3840&q=75)
NestJS에서의 AOP
Intecepter & Exception Filter
AOP가 적용된 대표적인 컴포넌트로는 인터셉터 (inteceptor)가 있다. 인터셉터는 서버로 들어오는 요청과 서버에서 나가는 응답 객체를 중간에 가로채서 변결할 수 있다. 예시로는,
- 요청 객체에 포함된 정보들을 이용하여 로깅 구성
- snake_case로 작성된 응답 객체의 키를 camelCase로 변경
또한 예외 필터 (exception filter)를 이용하여 어느 코드에서든 발생하는 에러를 잡아서 일괄적인 예외 처리 로직을 구성할 수도 있다.
Decorator
특정 컴포넌트에만 적용할 때에는 데코레이터를 사용하며, 원하는 데코레이터를 커스터마이징하여 사용할 수 있다.
References
Share article