서론

기존의 API 서버를 만들면서 기능 구현에만 급급하다 보니 제대로된 코드 분리나 정리를 따로 하지 않았습니다.

앞으로의 확장성과 유지보수성을 위해 NestJS가 기본적으로 가지고 있는 의존성 주입 패턴과 주로 사용되는 디자인 패턴들에 대해 학습해보고자 합니다.

본론

NestJS의 Dependency Injection

기본적으로 NestJS는 의존성 주입을 따르는 디자인 패턴으로 만들어져 있습니다.

의존성 주입은 특정한 클라이언트가 외부로 부터 의존성을 주입 받고, 그렇게 받아온 의존성을 통해서 외부의 서비스에 접근하는 방식을 의미합니다.

image.png

이를 통해 각 코드별 결합도가 감소하며, mock과 같은 데이터를 주입해서 테스트를 쉽게 진행할 수 있습니다.

나아가 서비스를 외부에서 주입 받기에 같은 서비스를 여러 코드에서 재활용할 수 있고 수정 및 유지보수성도 확장됩니다.

의존성 주입을 하는 방식은 크게 아래와 같습니다.

NestJS는 이런 DI 패턴이 적용되어 설계 됐습니다. Module에서 의존성을 주입 받을 서비스를 providers로 등록하고, 컨트롤러를 등록하면 해당 모듈에 주입된 서비스들을 내부 컨트롤러에서 활용할 수 있게됩니다.