본 문서는 2022년 3월 31일 에 작성되었습니다.
국내 번역 문서 및 강의를 참고하였으며, 이해가 되지 않는 부분은 공식 문서를 참고하였습니다.
Module 은 @Module() 이 선언된 클래스입니다.
@Module() 은 Nest Application 이 해당 클래스를 조직화된 구조 안으로 넣기 위해서 필요한 metadata 를 제공해줍니다.
@Module({
imports: [],
controllers: [], // 컨트롤러
providers: [], // 공급자
expotrs: []
}) export class Module {}
Controller 는 @Conroller() 이 선언된 클래스입니다.
해당 Decorator 안에는 매개변수로 Routing URL 을 넣어줘야합니다.
클라이언트의 요청이 URL/user 로 들어오면 Nest 는 이를 해당 Controller 로 보내줍니다.
사용하려면 해당 @Module() 의 controllers: [] 안에 넣어줘야 합니다.
@Controller('/user')
export class UserController {
// ...
}
Service 는 @Injectable() 이 선언된 클래스입니다.
Controller 가 복잡한 비즈니스를 처리해야 할 경우, 해당 내용은 Servcie 클래스에서 처리하고 결과를 리턴하는 것을 담당합니다.
사용하려면 해당 @Module() 의 providers: [] 안에 넣어줘야 합니다.
@Injectable()
export class AuthService {
//...
}
Repository 는 사용하는 DB 에 따라 고유한 Decorator 가 선언된 클래스입니다.
Service 가 복잡한 DB 처리를 포함할 경우, 해당 내용은 Repository 클래스에서 처리하고 결과를 리턴합니다.
아래는 TypeORM - PotsgreSQL 을 기준으로 작성된 Repository 입니다.
@EntityRepository(EntityName)
export class Repository extends Repository<User> {
// ...
}
이는 Express 의 Middleware 와 문맥상 동일합니다.
하지만, Express 훨씬 체게적인 구조를 가지고 있습니다.
Middleware 는 route handling 이전에, request 와 response 에 접근해 어떠하여 기능을 담당합니다.
Nest 에는 총 4가지 Middleware 가 존재합니다.
이러한 Middleware 의 호출 순서는 다음과 같습니다.