DB 연결 (Mysql, Mongoose 등)에 보통 사용되는 싱글톤 패턴은 사용하기 쉽고 실용적이지만 모듈 간의 결합을 강하게 만드는 단점이 있음.
이를 해결하기 위해 의존성 주입을 통해 모듈간 결합을 상대적으로 느슨하게 할 수 있음. (디커플링 할 수 있음.)
1. 의존성 주입 (DI, Dependency Injection)
메인 모듈이 직접 다른 하위 모듈에 대한 의존성을 주기보다 중간에 의존성 주입자(dependency injector)가 이 부분을 가로채 메인 모듈이 '간접'적으로 의존성을 주입하는 방식. 이를 통해 메인 모듈(상위 모듈)은 하위 모듈과 디커플링 된다. (의존성이 떨어진다.)
따라서 메인 모듈의 변경 사항에 대해 하위 모듈이 모두 일일이 변해야할 확률이 줄 어둠.
의존성 주입자가 중간에서 가로채어 메인 모듈이 간접적으로 의존성을 주입하기에 "서비스"를 사용하려는 클라이언트는 해당 서비스의 구성 방법을 알 필요가 없음.
이미지 출처 : 인프런 큰돌님 CS 지식의 정석 강의 캡처
상기 이미지에서 httpClient라는 서비스를 주입하고 있고. fetchResouce는 클라이언트에 해당된다.
결과적으로 (쉽게 설명하자면) 클라이언트는 메인 모듈에 의존성 주입자를 통해 접근하는 형태라고 설명할 수 있기에 클라이언트는 서비스 구성 방법을 알 필요가 없는 것이다.
2. 의존성 주입의 장점과 단점
장점
- 모듈들을 쉽게 교체할 수 있는 구조가 되어 테스팅이 쉽고 마이그레이션 수월
- 애플리케이션 의존성 방향이 더 일관되어 추론이 쉬움. (이렇게 일관화되면 코드 분석이 쉬움)
- 객체들을 쉽게 교체할 수 있는 코드가 됨.
단점
모듈들이 더 많이 분리되므로 클래스 수가 늘어나 복잡성 증가하고(클래스 폭발) 약간의 런타임 페널티가 생길 수도 있음.
따라서 복잡성이 낮고 간단함 경우 DI 활용은 지양됨.
마이그레이션 : 한 운영 환경에서부터 더 나은 혹은 정황상 더 적절한 다른 운영환경으로 옮겨가는 것. 따라서 전체 코드를 분석해야 함. 예를 들어 jQuery기반의 시스템에서 Vue JS 기반으로, 혹은 Mysql 데이터베이스에서 MongoDB 데이터베이스로, 그리고 데이터를 이동하는 것도 데이터 마이그레이션이라고 부름.
REFERENCE
도서 | 면접을 위한 CS 전공 지식 노트
https://www.inflearn.com/course/%EA%B0%9C%EB%B0%9C%EC%9E%90-%EB%A9%B4%EC%A0%91-cs-%ED%8A%B9%EA%B0%95#
'Design Pattern' 카테고리의 다른 글
6. 프록시 패턴 (0) | 2022.10.24 |
---|---|
5. 옵저버 패턴 Observer Pattern (0) | 2022.10.20 |
4. 전략패턴 Strategy Pattern (0) | 2022.10.20 |
3. 팩토리패턴 Factory Pattern (0) | 2022.10.20 |
1. 디자인 패턴 정의와 싱글톤 패턴 (0) | 2022.10.19 |