티스토리 뷰
📌 NestJS 백엔드 개발: 기초부터 실전까지 - NestJS 모듈과 컨트롤러 개념 이해
octo54 2025. 3. 18. 01:52📌 NestJS 백엔드 개발: 기초부터 실전까지 - NestJS 모듈과 컨트롤러 개념 이해
NestJS는 **모듈(Module)과 컨트롤러(Controller)**를 기반으로 한 모듈화된 아키텍처를 제공합니다.
이번 글에서는 NestJS의 모듈 개념, 컨트롤러의 역할, 그리고 기본적인 CRUD 컨트롤러 구현 방법을 다룹니다. 🚀
3.1 NestJS 모듈(Module) 개념 이해
NestJS는 모듈 기반 구조를 사용하여 애플리케이션을 더 체계적으로 관리할 수 있도록 합니다.
모듈은 하나 이상의 컨트롤러와 서비스가 포함된 독립적인 기능 단위입니다.
✅ 모듈의 역할
✔ 기능을 독립적으로 관리하여 유지보수성 증가
✔ 여러 모듈 간의 의존성을 관리하는 중심 역할
✔ 컨트롤러(Controller), 서비스(Service), 기타 제공자(Providers)를 포함
💡 NestJS 애플리케이션은 기본적으로 AppModule을 중심으로 동작합니다.
3.2 기본 모듈 생성 및 설정
NestJS에서는 모듈을 생성할 때 Nest CLI를 활용하면 편리합니다.
✅ 모듈 생성 (Nest CLI 사용)
nest g module users
✅ src/users/users.module.ts 파일이 생성됨
📂 src/users/users.module.ts
import { Module } from '@nestjs/common';
import { UsersController } from './users.controller';
import { UsersService } from './users.service';
@Module({
controllers: [UsersController],
providers: [UsersService],
})
export class UsersModule {}
✅ 모듈 내부에서 컨트롤러와 서비스 등록
✅ @Module() 데코레이터를 사용하여 모듈 정의
💡 모듈을 사용하면 특정 기능을 독립적으로 관리할 수 있습니다.
3.3 컨트롤러(Controller) 개념 이해
컨트롤러는 HTTP 요청을 처리하고, 적절한 응답을 반환하는 역할을 합니다.
각 컨트롤러는 특정 경로(Route)에 매핑되며, 클라이언트 요청을 서비스(Service)로 전달합니다.
✅ 컨트롤러의 역할
✔ HTTP 요청을 받고 처리하는 진입점
✔ 요청을 서비스(Service)로 전달하고 응답 반환
✔ @Controller() 데코레이터로 정의
💡 컨트롤러는 요청을 받아 비즈니스 로직을 실행하는 서비스로 전달하는 역할을 합니다.
3.4 컨트롤러 생성 및 기본 라우팅 설정
NestJS에서는 Nest CLI를 사용하여 컨트롤러를 쉽게 생성할 수 있습니다.
✅ 컨트롤러 생성 (Nest CLI 사용)
nest g controller users
✅ src/users/users.controller.ts 파일이 생성됨
📂 src/users/users.controller.ts
import { Controller, Get } from '@nestjs/common';
@Controller('users')
export class UsersController {
@Get()
getAllUsers(): string {
return '모든 사용자 데이터 반환';
}
}
✅ @Controller('users') → /users 경로로 자동 매핑
✅ @Get() → GET 요청을 처리하는 메서드
💡 컨트롤러는 NestJS의 핵심적인 HTTP 요청 처리 역할을 담당합니다.
3.5 컨트롤러에서 CRUD 기능 구현
컨트롤러는 기본적으로 CRUD(Create, Read, Update, Delete) 요청을 처리해야 합니다.
✅ 기본적인 CRUD API 구현
📂 src/users/users.controller.ts
import { Controller, Get, Post, Put, Delete, Param, Body } from '@nestjs/common';
@Controller('users')
export class UsersController {
private users = [];
@Get()
getAllUsers() {
return this.users;
}
@Get(':id')
getUser(@Param('id') id: string) {
return { id, name: '사용자' + id };
}
@Post()
createUser(@Body() user: { name: string }) {
this.users.push(user);
return user;
}
@Put(':id')
updateUser(@Param('id') id: string, @Body() user: { name: string }) {
return { id, ...user };
}
@Delete(':id')
deleteUser(@Param('id') id: string) {
return { message: `ID ${id} 사용자 삭제` };
}
}
✅ @Get(), @Post(), @Put(), @Delete()를 사용하여 CRUD 구현
✅ @Param()을 사용하여 URL 파라미터 처리 (/users/:id)
✅ @Body()를 사용하여 요청 본문 데이터 처리
💡 컨트롤러에서 CRUD를 쉽게 구현할 수 있으며, NestJS의 데코레이터 시스템을 활용하면 가독성이 좋아집니다.
3.6 컨트롤러와 서비스(Service) 연동
컨트롤러에서는 비즈니스 로직을 직접 처리하지 않고, 서비스(Service)로 위임하는 것이 일반적입니다.
✅ 서비스 생성 (Nest CLI 사용)
nest g service users
✅ src/users/users.service.ts 파일이 생성됨
📂 src/users/users.service.ts
import { Injectable } from '@nestjs/common';
@Injectable()
export class UsersService {
private users = [];
getAllUsers() {
return this.users;
}
getUser(id: string) {
return { id, name: '사용자' + id };
}
createUser(user: { name: string }) {
this.users.push(user);
return user;
}
updateUser(id: string, user: { name: string }) {
return { id, ...user };
}
deleteUser(id: string) {
return { message: `ID ${id} 사용자 삭제` };
}
}
✅ @Injectable() 데코레이터를 사용하여 서비스 정의
✅ 컨트롤러에서 사용될 CRUD 메서드 구현
✅ 컨트롤러에서 서비스 연동하기
📂 src/users/users.controller.ts
import { Controller, Get, Post, Put, Delete, Param, Body } from '@nestjs/common';
import { UsersService } from './users.service';
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Get()
getAllUsers() {
return this.usersService.getAllUsers();
}
@Get(':id')
getUser(@Param('id') id: string) {
return this.usersService.getUser(id);
}
@Post()
createUser(@Body() user: { name: string }) {
return this.usersService.createUser(user);
}
@Put(':id')
updateUser(@Param('id') id: string, @Body() user: { name: string }) {
return this.usersService.updateUser(id, user);
}
@Delete(':id')
deleteUser(@Param('id') id: string) {
return this.usersService.deleteUser(id);
}
}
✅ 컨트롤러에서 서비스 인스턴스를 주입받아 사용 (private readonly usersService: UsersService)
✅ 컨트롤러는 HTTP 요청을 받아 서비스로 전달하고 응답 반환
💡 컨트롤러와 서비스를 분리하면 코드의 재사용성이 증가하고 유지보수가 쉬워집니다.
3.7 결론: NestJS 모듈과 컨트롤러 개념 완벽 이해
✅ 모듈(Module)을 활용하여 기능을 독립적으로 관리
✅ 컨트롤러(Controller)는 HTTP 요청을 처리하는 역할
✅ 서비스(Service)를 활용하여 비즈니스 로직을 컨트롤러에서 분리
✅ Nest CLI를 사용하여 쉽게 모듈, 컨트롤러, 서비스를 생성 가능
다음 글에서는 **"NestJS에서 의존성 주입(DI)과 서비스 개념 이해"**를 다루겠습니다! 🚀
🔎 다음 글 예고: NestJS에서 의존성 주입(DI)과 서비스 개념 이해
📌 다음 편: 4. NestJS에서 의존성 주입(DI)과 서비스 개념 이해
'project > NestJS + Kubernetes & 마이크로서비스 배포' 카테고리의 다른 글
Mac Mini에서 Kubernetes를 활용한 Nginx Proxy + PostgreSQL 구축: 개요 및 환경 설정 (0) | 2025.03.19 |
---|---|
📌 NestJS 백엔드 개발: 기초부터 실전까지 + NestJS에서의 미들웨어와 인터셉터 개념 (0) | 2025.03.19 |
📌 NestJS 백엔드 개발: 기초부터 실전까지 - NestJS에서 의존성 주입(DI)과 서비스 개념 이해 (0) | 2025.03.18 |
📌 NestJS 백엔드 개발: 기초부터 실전까지 - NestJS 개발 환경 설정 및 프로젝트 구조 이해 (0) | 2025.03.18 |
📌 NestJS 백엔드 개발: 기초부터 실전까지 - NestJS란? 프레임워크 개요 및 특징 (0) | 2025.03.17 |
- Total
- Today
- Yesterday
- CI/CD
- 개발블로그
- NestJS
- Docker
- PostgreSQL
- App Router
- AI챗봇
- rag
- 웹개발
- nodejs
- kotlin
- seo 최적화 10개
- REACT
- Python
- fastapi
- 프론트엔드면접
- flax
- SEO 최적화
- 파이썬알고리즘
- Ktor
- Prisma
- 프론트엔드
- Next.js
- gatsbyjs
- nextJS
- llm
- JAX
- 딥러닝
- 백엔드개발
- SEO최적화
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |