티스토리 뷰

반응형

📌 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)과 서비스 개념 이해


 

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
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
글 보관함
반응형