nestjs에는 여러 과정을 지나 요청에 대한 로직을 처리하고 응답을 보내주게 되는데 아직 nestjs의 아키텍처에 대해 헷갈려서 정리하게 되었다.

1. Controller란?
Controller는 클라이언트의 HTTP(get, post, put 등) 요청을 받아서 처리하는 엔드포인트로 요청받은 파라미터를 받고 서비스를 호출하며 결과를 반환하는 곳이다. 실질적인 db의 저장, 서비스의 비즈니스 로직은 Controller에 구현하는 게 아니라 Provider(Service)에 위임하게 된다.
//http://localhost:5500/api/get
@Controller('api')
export class ApiController {
constructor(private readonly apiService: ApiService) {}
@Get('get')
findAll() {
return this.apiService.findAll();
}
}//http://localhost:5500/api
@Controller()
export class ApiController {
constructor(private readonly apiService: ApiService) {}
@Get('api')
findAll() {
return this.apiService.findAll();
}
}클래스에 @Controller 데코레이터를 붙여 사용하며 Controller안에 라우터 핸들러를 설계한다.
2.Provider란?
Provider는 NestJS에서 실질적인 비즈니스 로직을 처리하는 부분으로 보통 서비스(Service) 클래스가 Provider에 해당하며, NestJS의 의존성 주입(Dependency Injection, DI) 시스템에 의해 생성되고 관리된다.
DI는 필요한 객체를 내가 직접 만들지 않고 외부에서 constructor(생성자) 안에 넣어주는 패턴이다.
@Injectable()
export class UsersService {
findAll() {
return ['user1', 'user2'];
}
}@Injectable()을 붙인 클래스는 Nestjs의 IoC컨테이너가 주입가능한 객체 후보로 보고 Injectable 붙은 클래스를 객체(인스턴스) 형태로 관리하게 된다. 보통 Controller에 Provider(Service)를 주입해서 사용한다.
3.Module란?
Module은 기능 단위로 구성요소를 묶는 형태로 Controller, Provider, imports , exports를 관리하게 된다.
Module이 Controller, Provider를 관리해 준다고 생각하면 되며 코드상에서 Controller,Provider등을 명시해 줘야 된다.
import { Module } from '@nestjs/common';
import { UsersService } from './users.service';
import { UsersController } from './users.controller';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UsersModel } from './entities/users.entity';
@Module({
imports: [TypeOrmModule.forFeature([UsersModel])],
exports:[UsersService],
controllers: [UsersController],
providers: [UsersService],
})
export class UsersModule {}
4. NestJS CLI를 통한 Module, Controller, Provider 생성
NestJS에서 실질적인 요청 로직을 처리하는 모듈(Module), 컨트롤러(Controller), 프로바이더(Provider)는 CLI 명령어를 통해 쉽게 생성할 수 있다. CLI를 사용하면 생성된 컨트롤러와 프로바이더가 해당 모듈에 자동으로 등록된다. 모듈 또한 app.module.ts의 import에 등록해야 된다. 만약 명령어를 사용하지 않고 모듈,컨트롤러,프로바이더를 직접 생성하면 따로 등록을 직접 해줘야 돼서 번거롭다.
-각각 하나씩 만드는 방식
nest g module users
nest g controller users
nest g service users-한 번에 만드는 방식

nest g resource users보통 모듈을 한번에 만드는 방식을 많이 쓴다고 합니다. CRUD API 전체 구조를 한 번에 생성하는 명령어라서 rest api, msa, graphql, socketio 등 선택하라고 하며 CRUD코드도 자동으로 생성할까? 라며 선택권을 준다.
-nestjs는 컨트롤러, 모듈, 프로바이더 말고도 가드, 인터셉터 등 공부해야 될 게 많다....!
'nestjs' 카테고리의 다른 글
| aws rds에서 postgresql db생성 후 nestjs에 typeorm으로 연결방법 (0) | 2026.01.10 |
|---|---|
| NestJS 설치방법과 기본적인 정리 (0) | 2025.11.10 |