티스토리 뷰

반응형

📌 NestJS + Prisma + Next.js로 만드는 웹 애플리케이션 첫걸음 - 애자일 쇼핑몰 프로젝트 - NestJS 프로젝트 기본 구조 및 핵심 개념

1. NestJS 프로젝트란?

NestJS는 Node.js 기반의 모듈화된 백엔드 프레임워크로, TypeScript를 기본적으로 지원하며 대규모 애플리케이션 개발에 적합합니다.
이번 쇼핑몰 프로젝트에서는 NestJS를 활용하여 백엔드 API 서버를 구축하고, Prisma를 이용해 데이터베이스와 상호작용할 예정입니다.

NestJS의 주요 특징:

  • TypeScript 지원 (안정성과 유지보수성 향상)
  • 모듈 기반 구조 (기능별 분리하여 확장성 제공)
  • REST API 및 GraphQL 지원
  • 의존성 주입(Dependency Injection) 방식으로 효율적인 코드 관리 가능

2. NestJS 프로젝트 기본 구조

2.1. 프로젝트 디렉터리 구조

NestJS 프로젝트를 생성하면 다음과 같은 기본 디렉터리 구조가 생성됩니다.

nestjs-shoppingmall/
 ├── src/                   # 소스 코드 디렉터리
 │   ├── app.module.ts      # 최상위 모듈
 │   ├── main.ts            # 애플리케이션 시작점
 │   ├── users/             # 사용자 모듈 (예제)
 │   │   ├── users.controller.ts
 │   │   ├── users.service.ts
 │   │   ├── users.module.ts
 │   │   ├── users.entity.ts
 │   ├── products/          # 상품 모듈 (예제)
 │   │   ├── products.controller.ts
 │   │   ├── products.service.ts
 │   │   ├── products.module.ts
 │   │   ├── products.entity.ts
 ├── test/                  # 테스트 디렉터리
 ├── node_modules/          # 패키지 설치 디렉터리
 ├── package.json           # 프로젝트 설정 파일
 ├── tsconfig.json          # TypeScript 설정 파일
 ├── .env                   # 환경 변수 파일

💡 각 디렉터리 역할:

  • main.ts: 애플리케이션의 진입점
  • app.module.ts: 애플리케이션의 루트 모듈
  • controllers/: 클라이언트 요청을 처리하는 컨트롤러
  • services/: 비즈니스 로직을 담당하는 서비스
  • modules/: 관련 기능을 묶어 모듈 단위로 관리

3. NestJS의 핵심 개념

반응형

3.1. 모듈(Module) 시스템

NestJS는 기능별로 모듈을 나누어 관리하는 구조를 사용합니다.

모듈을 사용하면:

  • 기능별로 분리하여 유지보수 가능
  • 코드 재사용성이 높아짐
  • 새로운 기능 추가 시 기존 코드에 영향을 최소화

💡 예제: 사용자(User) 모듈 생성

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 {}

3.2. 컨트롤러(Controller) - API 엔드포인트

컨트롤러는 클라이언트의 요청을 처리하고 응답을 반환하는 역할을 합니다.

💡 예제: 사용자 컨트롤러 (UserController)

import { Controller, Get } from '@nestjs/common';
import { UsersService } from './users.service';

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

  @Get()
  getAllUsers() {
    return this.usersService.getAllUsers();
  }
}

3.3. 서비스(Service) - 비즈니스 로직

서비스는 데이터베이스와 상호작용하고, 핵심 비즈니스 로직을 처리하는 역할을 합니다.

💡 예제: 사용자 서비스 (UserService)

import { Injectable } from '@nestjs/common';

@Injectable()
export class UsersService {
  private users = [{ id: 1, name: 'John Doe' }];

  getAllUsers() {
    return this.users;
  }
}

3.4. 엔터티(Entity) - 데이터 모델 정의

NestJS에서는 Prisma ORM을 사용하여 데이터베이스 테이블을 모델링할 수 있습니다.

💡 예제: Prisma를 이용한 User 모델 정의

model User {
  id    Int     @id @default(autoincrement())
  name  String
  email String  @unique
  role  String  @default("customer")
}

4. NestJS의 실행 및 테스트

4.1. NestJS 프로젝트 실행

NestJS 프로젝트 실행 명령어:

npm run start:dev

이 명령어를 실행하면 개발 환경에서 NestJS 서버가 실행됩니다.


4.2. API 테스트 (Postman 활용)

API가 정상적으로 동작하는지 확인하려면 Postman 또는 cURL을 사용하여 GET /users 요청을 보낼 수 있습니다.

💡 예제: Postman을 이용한 API 테스트

  • 요청: GET http://localhost:3000/users
  • 응답:
[
  { "id": 1, "name": "John Doe" }
]

5. NestJS 프로젝트에서 적용할 개발 원칙

모듈 단위 개발 → users, products, orders 등 기능별 모듈 구성
의존성 주입(DI, Dependency Injection) 활용 → 유지보수성과 확장성 향상
RESTful API 원칙 준수 → GET, POST, PUT, DELETE 엔드포인트 사용
DTO(Data Transfer Object) 적용 → 데이터 유효성 검사 및 타입 체크 강화


🎯 마무리하며

이번 챕터에서는 NestJS의 기본 구조 및 핵심 개념을 정리했습니다.
다음 단계에서는 3.2. Prisma ORM을 활용한 데이터 모델링을 다뤄보겠습니다. 🚀


 

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