Nodejs

 

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로 개발 환경 통일화.

  •  

 

 

 

 

 

about author

PHRASE

Level 60  라이트

형식은 달라도 결과는 같다. 장(臧)과 곡(穀) 두 사람이 각각 양을 치고 있었다. 두 사람 모두 양을 잃었다. 장은 책을 읽고 있었고 곡은 노름을 하고 있었기 때문이었다. 책을 읽는 것과 노름을 하는 것은 확실히 다르다. 그러나 자기 직분을 태만히 하여 양을 잃어버렸다는 점에서는 같은 것이다. 세상에는 이런 예가 허다하게 많다. 백이(伯夷), 숙제(叔齊)

댓글 ( 0)

댓글 남기기

작성