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 |