저장을 습관화

Nest.js 입문 기록 3 - IoC와 DI 본문

공부/node.js

Nest.js 입문 기록 3 - IoC와 DI

ctrs 2023. 8. 4. 21:52

1. IoC

Inversion of Control, 제어 역전이라고도 한다.

 

지금까지는 개발자가 사용하고 싶은 객체가 있다면 이것은 개발자가 생성부터 소멸까지 직접 관리해야 했다.

이런 경우 의존하던 서비스가 변경되면 이에 맞추어 코드를 수정해야 했다.

 

하지만 IoC는 개발자가 사용하고 싶은 객체를 직접 생성하는 것이 아니라

객체의 생명주기 관리 자체를 외부(여기서는 Nest.js IoC 컨테이너)에 위임한다.

 

즉, 객체의 관리를 컨테이너에 맡겨 제어권이 넘어갔기 때문에 Inversion of Control(제어 역전)이라고 하는 것이다.

 

IoC는 모듈 간 결합도를 낮추기 때문에 하나의 모듈이 변경되어도 다른 모듈들에 대한 영향이 최소화된다.

이를 통해 웹 어플리케이션을 지속 가능하고 확장성 있게 해준다.

 

라이브러리와 프레임워크의 차이에서도 확인이 가능한데,

 

라이브러리는 제어권이 나(개발자)에게 있으며

내 코드가 필요할 때마다 내가 사용하고 싶은 라이브러리를 사용하는 반면

 

프레임워크는 제어권이 프레임워크에 있으며

나의 코드를 프레임워크가 필요로 하는 경우에 프레임워크가 알아서 실행시킨다는 차이가 있다.

 

이렇게 제어권을 넘겨주면 개발자는 비즈니스 로직을 작성하기 전 세팅해야하는 

사전작업을 최소화 할 수 있어 비즈니스 로직 개발에 더 집중할 수 있다.

 

 

2. DI

Dependency Injection, 의존성 주입

객체가 필요로 하는 의존성을 직접 생성하지 않고 외부로부터 주입받는 방식으로 

이를 통해 객체 간의 결합도를 낮추고, 변경 사항이 발생했을 때 해당 객체만 수정해도 되므로 

코드 유지보수와 테스트 작성이 용이해진다.

 

IoC를 수행하는 방법 중 하나이며 Nest.js 에서는 생성자를 통한 DI가 가장 기본적인 IoC 테크닉으로 취급된다.

 

[참조]

https://ctrs.tistory.com/138

 

객체 지향 설계 원칙 - S.O.L.I.D

1. S(Single Responsibility Principle, 단일 책임 원칙) SOLID 중에서 가장 중요한 사항이다. 하나의 클래스는 다른 클래스의 역할과 권한을 침범해서는 안되며, 하나의 클래스가 해야하는 역할과 권한은 해

ctrs.tistory.com