본문 바로가기
BE/Node

관점 지향 프로그래밍(AOP)

by Chars4785 2022. 6. 24.

관점 지향 프로그래밍(AOP, aspect-oriented programming)은 횡단 관심사(cross-cutting concern)의 분리를 허용함으로써 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임이다. - 위키피디아

백엔드 애플리케이션은 갖추어야 할 요구사항이 많이 있습니다. 여기서 요구사항이라 함은 서비스가 제공하는 핵심 기능을 해결하기 위한 사용자의 요구사항 뿐만 아니라 유효성 검사, 로깅, 보안, 트랜잭션과 같이 애플리케이션 전반에 걸쳐 제공해야 하는 공통 요소를 포함합니다. 이를 횡단관심사라고 부릅니다.

소스코드에서 횡단관심사를 따로 분리하여 구현하지 않으면 우리가 작성하는 애플리케이션의 코드는 횡단관심사의 코드와 섞여 뒤죽박죽이 되고 맙니다. 코드는 읽고 이해하기 힘들게 되고 모듈로서 응집도가 떨어질 뿐 아니라 유지보수가 어렵게 됩니다.

관점 지향 프로그래밍 패러다임은 이런 어려움을 해결하기 위해 발전해 왔고 프레임워크의 기능으로 흡수되었습니다. Nest에서는 횡단관심사를 비즈니스 로직과 쉽게 분리할 수 있습니다. 대표적인 컴포넌트로 인터셉터가 있습니다. 인터셉터는 서버로 들어오는 요청과 서버에서 나가는 응답 객체를 가로채서 변경할 수 있습니다. 예를 들어 들어오는 요청 객체에 포함된 정보들을 이용하여 로깅 기능을 구성하거나, snake_case로 작성된 응답 객체의 키를 camelCase로 바꿀 수 있습니다. 또 예외 필터를 이용하여 어느 코드에서든 발생하는 에러를 잡아서 일관적인 예외 처리 로직으로 동작하도록 할 수 있습니다.

Nest는 데코레이터를 활용하여 AOP를 적용합니다. 2장에서 타입스크립트 데코레이터의 개념을 자세하게 알아보았습니다. 앞서 컨트롤러의 예에서도 데코레이터가 쓰이고 있고 앞으로 배울 컴포넌트들에서도 데코레이터가 많이 활용됩니다. Nest에서 AOP를 구현함에 있어 전역으로 적용되지 않고 특정 컴포넌트에만 적용할 때에는 데코레이터를 사용합니다. 이를 잘 활용하면 핵심코드만 짧고 이해하기 쉽게 작성할 수 있습니다. 또 필요한 데코레이터가 없다면 직접 만들어 사용할 수도 있습니다.

 

참고

https://wikidocs.net/158497

 

쉬어가는 페이지 - 관점 지향 프로그래밍(AOP)

> #### 관점 지향 프로그래밍(AOP, aspect-oriented programming)은 횡단 관심사(cross-cutting concern)의 분리를 허용함으로써 ...

wikidocs.net

 

'BE > Node' 카테고리의 다른 글

Nest.js(5)  (0) 2022.07.02
Nest.js(4)  (0) 2022.06.29
Nest.js(2)  (0) 2022.06.23
Nest.js(1)  (0) 2021.11.12
[Mongoose] 스키마  (0) 2021.09.24

댓글