-
Notifications
You must be signed in to change notification settings - Fork 4
☕ NestJS를 통한 일관적인 시스템 설계
기존의 API 서버를 만들면서 기능 구현에만 급급하다 보니 제대로된 코드 분리나 정리를 따로 하지 않았습니다.
앞으로의 확장성과 유지보수성을 위해 NestJS가 기본적으로 가지고 있는 의존성 주입 패턴과 주로 사용되는 디자인 패턴들에 대해 학습해보고자 합니다.
기본적으로 NestJS는 의존성 주입을 따르는 디자인 패턴으로 만들어져 있습니다.
의존성 주입은 특정한 클라이언트가 외부로 부터 의존성을 주입 받고, 그렇게 받아온 의존성을 통해서 외부의 서비스에 접근하는 방식을 의미합니다.

이를 통해 각 코드별 결합도가 감소하며, mock과 같은 데이터를 주입해서 테스트를 쉽게 진행할 수 있습니다.
나아가 서비스를 외부에서 주입 받기에 같은 서비스를 여러 코드에서 재활용할 수 있고 수정 및 유지보수성도 확장됩니다.
의존성 주입을 하는 방식은 크게 아래와 같습니다.
- Initializer - 초기화 시 의존성 주입
- Setter - Setter를 통해서 의존성 주입
- Interface - 의존성 Interface를 채택해서 의존성 주입
- DI Container - 의존성 관리를 위한 외부의 의존성 컨테이너로 의존성 주입
NestJS는 이런 DI 패턴이 적용되어 설계 됐습니다. Module에서 의존성을 주입 받을 서비스를 providers로 등록하고, 컨트롤러를 등록하면 해당 모듈에 주입된 서비스들을 내부 컨트롤러에서 활용할 수 있게됩니다.
- Controller에서 constructor의 매개변수로 서비스를 불러오면 의존성을 주입 받아 사용할 수 있습니다,
constructor(private readonly {${이름}: ${서비스}) {}
이렇게 서비스, 컨트롤러를 하나의 모듈로 묶을 수 있고, 모듈을 서로 다른 모듈에서 imports를 통해 불러와 사용할 수 있게 됩니다.
이건 집가서 좀 더 공부해보기
참고자료
https://roothyo.tistory.com/56?category=1034781
https://roothyo.tistory.com/57
https://velog.io/@zvoniti/NestJS-Design-Pattern
https://medium.com/@jang.wangsu/di-dependency-injection-%EC%9D%B4%EB%9E%80-1b12fdefec4f
- 🚀 웹 소켓의 실시간 양방향 통신 (feat. WS vs Socket.io)
- 🤸♂️ 비제어 컴포넌트로 렌더링 최적화 하기
- 👷♀️ Shared Worker로 클라이언트의 소켓 통신 개선하기
- 👨👩👧👦 다중 탭에서 하나의 소켓을 공유할 수 있을까?
- 🚀 [Socket.io] 클라이언트의 실시간 채팅 구현기
- ☕ NestJS를 통한 일관적인 시스템 설계
✈️ 외부의 사용자가 Object Storage에 접근하지 못하는 권한 제어- 🦢 nestjs에서 swagger 사용해보기
- 🛐 NestJS Nginx Request Data Size 문제
- 🔁 다시보기를 위한 Node‐Media‐Server, FFMpeg 분석