모듈
NestJS에서 모듈은 두 가지 역할을 합니다.
- 하나의 큰 기능을 여러 개의 작은 기능으로 나누는 역할
- 관련 있는 스키매틱들을 하나의 단위로 묶는 역할
하나의 큰 기능을 여러 개의 작은 기능으로 나누는 역할

보통 하나의 앱은 여러 기능들이 있고, 각각의 기능도 세부 기능을 가지고 있습니다. 이 때 모듈 단위로 나누어 관리하면 재사용성이 높아지고 유지보수에 용이해집니다.
관련 있는 스키매틱들을 하나의 단위로 묶는 역할

하나의 모듈은 여러 개의 업무 처리 절차로 나뉘어 있는데, 이러한 것을 하나로 묶는 역할을 합니다.
모듈 파일은
-
모듈이 어떤 파일들을 참조하는지
-
각각의 파일이 어떤 기능을 하는지
정의합니다.
모듈 생성
Nest CLI를 사용해 모듈, 컨트롤러, 서비스를 생성합니다.
nest generate module board
nest generate controller board
nest generate service board
board.module.ts 파일의 코드를 보면 모듈에서 사용하는 컨트롤러와 서비스가 자동으로 참조 된 것을 볼 수 있습니다.
import { Module } from '@nestjs/common';
import { BoardController } from './board.controller';
import { BoardService } from './board.service';
@Module({
controllers: [BoardController],
providers: [BoardService]
})
export class BoardModule {}
app.module.ts 파일의 코드에도 BoardModule이 자동으로 참조 된 것을 볼 수 있습니다.
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { BoardModule } from './board/board.module';
@Module({
imports: [BoardModule],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
컨트롤러, 서비스 파일 작성
Post 메서드의 Body는 @Body() 데코레이터를 사용해서 참조합니다.
board.controller.ts
import {
Controller,
Get,
Post,
Delete,
Patch,
Param,
Body,
} from '@nestjs/common';
import { BoardService } from './board.service';
@Controller('board')
export class BoardController {
constructor(private boardService: BoardService) {}
@Get()
async getAllBoards() {
return await this.boardService.getAllBoards();
}
@Get(':id')
async getBoardById(@Param('id') id: string) {
return await this.boardService.getBoardById(id);
}
@Post()
async createBoard(@Body() body) {
const title = body.title;
const content = body.content;
return await this.boardService.createBoard(title, content);
}
@Patch(':id')
async updateBoard(@Param('id') id: string, @Body() body) {
const title = body.title;
const content = body.content;
return await this.boardService.updateBoard(id, title, content);
}
@Delete(':id')
async deleteBoard(@Param('id') id: string) {
return await this.boardService.deleteBoard(id);
}
}
board.service.ts
import { Injectable } from '@nestjs/common';
import { readFile, writeFile } from 'fs/promises';
@Injectable()
export class BoardService {
async getAllBoards() {
const file = await readFile('boards.json', 'utf-8');
const boards = JSON.parse(file);
return boards;
}
async getBoardById(id: string) {
const boards = await this.getAllBoards();
return boards[id];
}
async createBoard(title: string, content: string) {
const boards = await this.getAllBoards();
const id = Math.floor(Math.random() * 999);
boards[id] = { id, title, content };
await writeFile('boards.json', JSON.stringify(boards));
}
async updateBoard(id, title, content) {
const boards = await this.getAllBoards();
boards[id] = { id, title, content };
await writeFile('boards.json', JSON.stringify(boards));
}
async deleteBoard(id) {
const boards = await this.getAllBoards();
delete boards[id];
await writeFile('boards.json', JSON.stringify(boards));
}
}
프로젝트 루트 폴더에 boards.json 파일을 만들어 { }를 입력한 다음 저장하고, 테스트합니다.



모두 정상 작동하네요.
'NestJS > NestJS 게시판 API 프로젝트' 카테고리의 다른 글
04. DTO를 사용한 리팩토링 (0) | 2025.04.20 |
---|---|
02. 컨트롤러와 서비스 (0) | 2025.04.18 |
01. Nest CLI 및 NestJS 구조 (0) | 2025.04.14 |