레이어드 아키텍처 패턴의 주요특징
- 의존성 - 각계층의 가장 가까운 하위 계층의 의존성 주입
- 독립성 - 각계층은 다른 계층의 역할을 침범하지 않음
- 각계층은 역할이 명확하므로 기능 구현 및 테스트에 용이
- 대부분 셀프 서비스로 대부분 조립을 해줘야한다(express)
express는 준비된게 없다.
- 셀프서비스는 자유로움을 주지만
- 번거로움이 따른다. 미들웨어를 계속 넣어줘야함.
- 디렉토리 구조를 명확하게 설계를 해줘야한다.
Nest.js의 장점
- 명령어 하나로 쉽고 간편하게 계층이 생성된다.
- 타입체크를 함으로써 여러 예외 상황을 사전에 방지 가능
- 커맨드하나로 간편하게 대부분의 구성요소를 구현할수 있다.
- posts 컨트롤러를 만들려고하면 다음과 같은 커맨드를 사용하면 된다.
nest g co posts
- g = 만들다 제너레이터
- co = 컨트롤러의 약자
- posts는 posts를 만들겠어 !
ex)
- 서비스는 s
- 모듈은 mo 로 다양한 커맨드로 구현 가능
- 개발자가 실수하고 싶어도 nest js가 만들어논거라 실수하기가 힘듬.
- nestjs가 알아서 해주면 우리는 비지니스 계층에만 집중하면됨
- 즉, 로직구현, 기타 다른 구현을 하면됨.
- 즉, 개발에 대한 허들이 낮아짐
@ (데코레이터)
데코레이터란 해당 클래스나 함수가 어떤 역할을 수행하는지에 대해
Nest.js에게 알려주는 역할이다
IoC(제어역전)
- inversion of control의 준말로 제어역전이라고함
- IoC는 개발자가 사용하고 싶은 객체를 직접 생성하는것이 아니라
- 객체의 생명주기 관리 자체를 외부(Nest.js IoC 컨테이너)에 위임을 하는 것
- 즉, 객체의 관리를 컨테이너에 맡겨서 제어권이 넘어갔기 때문에 IoC라고 하는 것.
- 자주 변경되는 서비스가 있다면 개발자는 계속 코딩을 해야되고 부작용을 떠안아야된다
- 하지만 IoC가 출동하면 모듈간 결합도를 낮추기 때문에 모듈이 변경되어도
- 다른 모듈들에는영향을 최소화해 어플리케이션 지속이 가능하고 확장성이 생김
- 즉, IoC 원칙은 웹 어플리케이션에서 없어선 안될 원칙이고 이 원칙을 지원하는게 Nest.Js
class-validator 는 DTO를 검증하기 위해 사용됨
- @IsNotString() 넌 문자열이여만해
- @IsNotEmpty() 넌 비면 안돼
- 위 데코레이터는 classvalidator에서 지원되는 데코레이션임