일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 소돌엔
- 필수명령어
- Vue
- vue install
- :src
- 웹용어
- 네스트제이에스
- linux
- DTO typr
- WEB
- BFF Pattern
- React
- springboot
- npx install create-react-app
- 권한세팅
- nestJS
- TypeScript
- request dto
- 페이지 라우팅
- 순환종송석
- @Overloading
- Port ~ was already in use.
- 돌소엔
- @ Deprecated
- 명령어
- 카페
- 돌소
- forwardRef()
- Web server failed to start.
- java
- Today
- Total
유바바아들 닮은 개발자의 끄적끄적
[ NestJs ] NestJs 순환 종속성 문제에 대해서 알아보자 본문
Nest.js 프레임워크를 사용하면서 자주 발생하는 문제 중 하나인 "순환 종속성(Circular Dependency)"에 대해 설명하고 이를 어떻게 해결할 수 있는지 알아보겠습니다.
1. 순환 종속성이란?
순환 종속성은 서로 다른 두 개 이상의 모듈이 서로를 참조하고 있는 상태를 의미합니다. 예를 들어, 모듈 A가 모듈 B를 참조하고, 모듈 B가 다시 모듈 A를 참조하는 상황이 발생하는 것입니다. 이러한 상태는 의도치 않은 동작을 초래하며, Nest.js 애플리케이션의 구조를 복잡하게 만들 수 있습니다.
2. 순환 종속성 문제의 원인
순환 종속성 문제는 주로 의존성 주입(Dependency Injection) 시스템과 서비스 간의 관계에서 발생합니다. Nest.js는 의존성 주입을 통해 애플리케이션을 구성하고 모듈 간의 연결을 유지합니다. 그리고 이러한 의존성 주입이 잘못 설정된 경우 순환 종속성 문제가 발생할 수 있습니다.
3. 순환 종속성 문제의 증상
순환 종속성 문제는 런타임 중에 발생하며, 보통 다음과 같은 증상들이 나타납니다
애플리케이션이 시작되지 않거나 초기화에 실패합니다.
의도치 않은 무한 루프로 인해 CPU 사용량이 증가합니다.
로깅 시에 예상치 못한 로그가 계속해서 출력됩니다.
4. 순환 종속성 문제 해결 방법
순환 종속성 문제를 해결하기 위해서는 다음과 같은 방법들을 고려할 수 있습니다:
4.1. 의존성 그래프 분석
순환 종속성을 해결하기 위해서는 먼저 의존성 그래프를 분석해야 합니다. 의존성 그래프를 그리고 어떤 모듈들이 서로를 참조하는지 파악하여 문제를 정확하게 이해하는 것이 중요합니다.
4.2. 서비스 분리
순환 종속성이 발생하는 경우, 두 개 이상의 서비스가 너무 강하게 결합되어 있을 수 있습니다. 이 경우 서비스들을 더 작은 단위로 분리하고 의존성을 최소화하여 각 서비스가 단일 책임을 갖도록 설계합니다.
4.3. 모듈 재구성
모듈 간의 순환 종속성이 해결되지 않는 경우 모듈을 재구성해야 할 수도 있습니다. 모듈의 책임과 의존성을 재조정하여 순환 종속성이 발생하지 않도록 합니다.
4.4. 의존성 주입 패턴 변경
의존성 주입 패턴을 변경하여 순환 종속성을 해결할 수도 있습니다. 예를 들어, 생성자 주입(Constructor Injection) 대신에 필요한 의존성을 setter 메서드나 메서드 주입(Method Injection)으로 주입할 수 있습니다.
5.5 전달 참조 기능 사용하기
@nestjs/common 에서 패키지로 제공해주는 forwardRef() 기능을 사용하면 해결할 수 있습니다.
클래스에 중첩을 허용할 수 있도록 하는 유틸리티 기능입니다.
아래와 같이 모듈 세팅이 되어있고 순환 종속성 문제가 생긴다면
@Module({
imports: [
CatModule,
DogModule,
]
})
import { forwardRef, Module } from '@nestjs/common';
@Module({
imports: [
forwardRef(() => CatModule),
forwardRef(() => DogModule),
]
})
위와 같이 forwardRef() 를 사용하면 순환종속성 문제를 해결할수 있습니다.
Nest.js 애플리케이션에서 순환 종속성 문제는 복잡한 상황을 초래할 수 있습니다. 하지만 충분한 분석과 설계, 그리고 의존성 주입을 올바르게 활용하는 것으로 이러한 문제를 극복할 수 있습니다.
'NestJs' 카테고리의 다른 글
[ NestJS ] NestJs에서 DTO class 필드값 request body 요청시 타입 체크 하는 방법을 알아보자. (0) | 2023.07.21 |
---|---|
[ 웹 개발 ] NestJs VSCode 디버깅 모드 세팅 하는방법을 알아보자. (0) | 2023.07.19 |