Auth Module 생성하기
소스 : https://github.dev/braverokmc79/nestjs-delivery
■ 프로젝트 구조
nestjs-delivery ├── backend │ ├── apps │ │ ├── user │ │ │ └── src │ │ │ ├── auth │ │ │ │ ├── dto │ │ │ │ │ └── register.dto.ts │ │ │ │ ├── auth.controller.ts │ │ │ │ ├── auth.module.ts │ │ │ │ └── auth.service.ts │ │ │ ├── user │ │ │ └── app.module.ts │ │ ├── main.ts │ │ ├── Dockerfile │ │ └── tsconfig.app.json ├── .env ├── .dockerignore ├── .eslintrc.js ├── .gitignore
이 구조는 Clean Architecture에 가까우며, 각 도메인(auth, user 등)을 분리하여 유지보수성이 뛰어나도록 설계했습니다.
■ 초기 설정
NestJS 리소스 생성
nest g resource auth
패키지 설치
pnpm i class-validator class-transformer joi
class-validator: 요청 데이터의 유효성을 검사.
class-transformer: 평문 객체를 DTO 클래스로 변환.
joi: 스키마 기반 데이터 검증.
■ 주요 코드 분석
1️⃣ app.module.ts
import { Module } from '@nestjs/common'; import { UserModule } from './user/user.module'; @Module({ imports: [UserModule], }) export class AppModule {}
✅ 역할: UserModule을 앱의 최상위 모듈로 등록.
2️⃣ auth.controller.ts
import { Body, Controller, Post, UnauthorizedException } from '@nestjs/common'; import { AuthService } from './auth.service'; import { RegisterDto } from './dto/register.dto'; @Controller('auth') export class AuthController { constructor(private readonly authService: AuthService) {} @Post('register') registerUser(token: string, @Body() registerDto: RegisterDto) { if (token === null) { throw new UnauthorizedException('토큰을 입력해주세요!'); } // return this.authService.register(token, registerDto); } }
✅ 포인트:
POST /auth/register: 사용자 등록 API.
토큰이 없을 경우 UnauthorizedException 발생.
3️⃣ register.dto.ts
import { IsNotEmpty, IsNumber, IsString } from 'class-validator'; export class RegisterDto { @IsString() @IsNotEmpty() token: string; @IsString() @IsNotEmpty() name: string; @IsNumber() @IsNotEmpty() age: number; @IsString() @IsNotEmpty() profile: string; }
✅ 포인트:
클라이언트에서 오는 데이터 유효성 검사.
NestJS의 pipe validation과 함께 작동.
■ Docker로 컨테이너화
Dockerfile
FROM node:18-alpine AS development WORKDIR /usr/src/app # PNPM 설치 RUN corepack enable && corepack prepare pnpm@8.15.4 --activate # package.json, lock파일, 설정파일 복사 COPY package*.json ./ COPY pnpm-lock.yaml ./ COPY tsconfig.json tsconfig.json COPY nest-cli.json nest-cli.json # 의존성 설치 RUN pnpm install # 전체 소스 복사 COPY . . # 앱 실행 CMD ["pnpm", "run", "start:dev", "user"]
✅ 간단 설명:
Node.js 기반의 경량 이미지 사용.
pnpm 설치 및 프로젝트 의존성 관리.
요약
NestJS의 모듈화 구조 이해.
DTO와 class-validator로 안전한 데이터 처리.
Docker로 개발 환경 통일화.
댓글 ( 0)
댓글 남기기