자바스크립트를 허용해주세요.
[ 자바스크립트 활성화 방법 ]
from Mohon Aktifkan Javascript!
 

[NestJS] 4장 모듈

728x90

✅ 1. 기본 구조

NestJS 에서 모든 애플리케이션의 최소한 하나의 루트 모듈(AppModule)가지고 시작합니다.

// app.module.ts
import { Module } from "@nestjs/common";
import { AppController } from "./app.controller";
import { AppService } from "./app.service";

@Module({
  imports: [], // 다른 모듈 가져오기
  controllers: [AppController], // 요청처리
  providers: [AppService], // 서비스 / 의존성
})
export class AppModule {}

✅ 2. 모듈 생성하기

모듈은 NestJS의 CLI로 간단하게 만들 수 있습니다. 아래 명령어로 users라는 모듈을 만들어줍니다.

nest g module users
src/
 └── users/
      ├── users.module.ts

✅ 3. 모듈 예제

// user/users.module.ts
import { Module } from "@nestjs/common";
import { UsersController } from "./users.controller";
import { UserService } from "./users.service";

@Module({
  imports: [], // 필요시 다른 모듈 import
  controllers: [UsersController],
  providers: [UserService],
  exports: [UserService], // 다른 모듈에서 사용할 경우
})
export class UsersModule {}
// users/users.controller.ts
import { Controller, Get } from "@nestjs/common";
import { UsersService } from "./users.service";

@Controller("users")
export class UsersController {
  constructor(private readonly usersService: UsersService) {}

  @Get()
  findAll() {
    return this.usersService.getAllUsers();
  }
}
// users/users.service.ts
import { Injectable } from "@nestjs/common";

@Injectable()
export class UsersService {
  private users = [{ id: 1, name: "홍길동" }];

  getAllUsers() {
    return this.users;
  }
}

✅ 4. 모듈 가져오기

AppModule에서 UsersModule을 가져오면 해당 기능을 사용할 수 있습니다.

import { Module } from "@nestjs/common";
import { UsersModule } from "./users/users.module";

@Module({
  imports: [UsersModule], // 다른 모듈 가져오기
})
export class AppModule {}

✅ 5. CRUD 구현하기

  • UsersService
// src/users/users.service.ts
import { Injectable } from "@nestjs/common";

export interface User {
  id: number;
  name: string;
  email: string;
}

@Injectable()
export class UsersService {
  private users: User[] = [];
  private nextId = 1;

  getAll(): User[] {
    return this.users;
  }

  getOne(id: number): User | undefined {
    return this.users.find((u) => u.id === id);
  }

  create(name: string, email: string): User {
    const newUser = { id: this.nextId++, name, email };
    this.users.push(newUser);
    return newUser;
  }

  update(id: number, name?: string, email?: string): User | null {
    const user = this.getOne(id);
    if (!user) return null;
    if (name) user.name = name;
    if (email) user.email = email;
    return user;
  }

  delete(id: number): boolean {
    const before = this.users.length;
    this.users = this.users.filter((u) => u.id !== id);
    return this.users.length < before;
  }
}
  • UsersController 
// src/users/users.controller.ts
import {
  Controller,
  Get,
  Post,
  Put,
  Delete,
  Param,
  Body,
} from "@nestjs/common";
import { UsersService, User } from "./users.service";

@Controller("users")
export class UsersController {
  constructor(private readonly usersService: UsersService) {}

  @Get()
  getAllUsers(): User[] {
    return this.usersService.getAll();
  }

  @Get(":id")
  getOneUser(@Param("id") id: string): User | { error: string } {
    const user = this.usersService.getOne(Number(id));
    return user || { error: "User not found" };
  }

  @Post()
  createUser(@Body("name") name: string, @Body("email") email: string): User {
    return this.usersService.create(name, email);
  }

  @Put(":id")
  updateUser(
    @Param("id") id: string,
    @Body("name") name?: string,
    @Body("email") email?: string,
  ): User | { error: string } {
    const updated = this.usersService.update(Number(id), name, email);
    return updated || { error: "User Not Found" };
  }

  @Delete(":id")
  deleteUser(@Param("id") id: string): { message: string } {
    const deleted = this.usersService.delete(Number(id));
    return deleted
      ? { message: "User deleted" }
      : { message: "User not found" };
  }
}
  • Users 모듈
// 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],
  exports: [UsersService], // 다른 모듈에서 사용할 경우
})
export class UsersModule {}
  • App 모듈에 Users 모듈 연결
// src/app.module.ts
import { Module } from "@nestjs/common";
import { AppController } from "./app.controller";
import { AppService } from "./app.service";
import { UsersModule } from "./users/users.module";

@Module({
  imports: [UsersModule], // 다른 모듈 가져오기
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

✅ 6. 실행

npm run start:dev
http://localhost:3000/users

✅ 7. Postman 요청 설정

  • [POST] 유저 생성
    • Method: POST
    • URL: http://localhost:3000/users
    • Body -> raw -> JSON 선택
    • 입력: { "name" : "홍길동", email: "hong@example.com" } 
    • Send 클릭 -> 결과
{
    "id": 1,
    "name": "홍길동",
    "email": "hong@test.com"
}
  • [GET] 모든 유저 조회
    • Method: GET
    • URL: http://localhost:3000/users
    • Send 클릭 -> 결과
[
    {
        "id": 1,
        "name": "Pick",
        "email": "Pick@test.com"
    }
]
  • [GET] 특정 유저 조회
    • Method: GET
    • URL: http://localhost:3000/users/1
    • Send 클릭 -> 결과
[
    {
        "id": 1,
        "name": "Pick",
        "email": "Pick@test.com"
    }
]
  • [PUT] 유저 수정
    • Method: PUT
    • URL: http://localhost:3000/users/1
    • Body -> raw -> JSON 선택
    • 입력:
{
    "name": "Toni",
    "email": "Toni@test.com"

}
  • Send -> 결과:
{
    "id": 1,
    "name": "Toni",
    "email": "Toni@test.com"
}
  • [DELETE] 유저 삭제
    • Method: DELETE
    • URL: http://localhost:3000/users/1
    • Send -> 결과:
{
    "message": "User deleted"
}

 

 

GitHub - Koras02/nestjs-tutorial-blog

Contribute to Koras02/nestjs-tutorial-blog development by creating an account on GitHub.

github.com

 

728x90
LIST

'Back-End > NestJS' 카테고리의 다른 글

[NestJS] 6장 DTO & Validation  (0) 2025.08.29
[NestJS] 5장 의존성 주입 - DI  (0) 2025.08.21
[NestJS] 3장 프로바이더  (0) 2025.03.07
[NestJS] 2장 컨트롤러  (0) 2025.03.07
[NestJS] 1장 NestJs의 탄생 Nestjs는 무엇인가?  (0) 2025.02.11