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)
댓글 남기기