피드로 돌아가기
Dev.toBackend
원문 읽기
IoC Container 기반 DI 설계를 통한 결합도 제거 및 테스트 가능성 확보
Injeção e Inversão de Dependência e como o NestJS gerencia tudo isso
AI 요약
Context
클래스 내부에서 의존성을 직접 생성하는 구조로 인해 발생하는 강한 결합도 문제 분석. 구현체 변경 시 내부 코드 수정이 불가피하며 Mock 객체 활용이 어려운 테스트 제약 사항 식별.
Technical Solution
- 의존성 생성 책임을 외부 시스템으로 이전한 Inversion of Control(IoC) 구조 채택
- TypeScript의 Reflection Metadata를 활용하여 생성자 타입 기반의 자동 의존성 추론 구현
- @Injectable 데코레이터로 메타데이터를 수집하고 DI Container에 클래스를 등록하는 메커니즘 적용
- 애플리케이션 구동 시 Provider 간의 의존성 그래프를 분석하여 최적의 생성 순서로 인스턴스화 수행
- 기본 Singleton 전략을 통한 인스턴스 재사용으로 메모리 소비 최적화 및 상태 공유 일관성 유지
- Module 단위의 캡슐화를 통해 Provider의 가시성을 제어하고 컨텍스트 기반의 의존성 관리 체계 구축
실천 포인트
- 클래스 내부에서 'new' 키워드를 통한 직접 인스턴스 생성 지양 - 변경 가능성이 높은 외부 인터페이스는 반드시 생성자를 통한 DI 방식으로 주입 - 모듈 간 의존성 전파를 최소화하기 위해 exports 필드를 통한 명시적 공개 범위 설정 - 메모리 효율을 위해 상태 저장 여부에 따른 Singleton 및 Request scope 설정 검토