전체 글 1250

NestJS 파일 유효성 검사 (Validation Pipe)

MulterModule 자체는 파일 크기 제한(limits)과 간단한 MIME 타입 필터링(fileFilter)을 제공하지만, 이들은 오류 발생 시 NestJS의 예외 처리 시스템과 완벽하게 통합되지 않아 사용자에게 명확한 메시지를 전달하기 어렵습니다.NestJS에서는 ParseFilePipe와 Validator를 사용하여 파일 업로드의 유효성 검사를 보다 선언적이고 NestJS답게 처리합니다.1. 🛠️ ParseFilePipe 소개 및 사용ParseFilePipe는 NestJS의 내장 파이프 중 하나로, UploadedFile 데코레이터와 함께 사용되어 업로드된 파일의 유효성을 검사합니다. 이 파이프는 여러 개의 유효성 검사기(Validator)를 체인처럼 연결하여 사용할 수 있습니다.1.1. 파일 ..

AWS S3 업로드: 클라우드 파일 관리

로컬 서버에 파일을 저장하는 방식은 서버를 확장하거나 컨테이너화할 때 문제가 발생합니다. 따라서 안정적인 서비스를 위해서는 AWS S3와 같은 클라우드 저장소를 사용하는 것이 필수적입니다. NestJS에서는 multer의 저장소 엔진을 S3로 변경해주는 **multer-s3**를 사용합니다.1. 🛠️ 사전 준비 (의존성 및 환경 변수)필수 라이브러리 설치:npm install @aws-sdk/client-s3 multer-s3npm install -D @types/multer-s3환경 변수 (.env) 설정: ConfigService가 S3 인증 정보를 안전하게 로드할 수 있도록 .env 파일에 다음 정보가 정의되어야 합니다.AWS_S3_REGION=ap-northeast-2AWS_ACCESS_KEY_..

NestJS 파일 업로드: MulterModule 설정

NestJS에서 파일 업로드를 처리하는 가장 일반적인 방법은 @nestjs/platform-express에서 제공하는 MulterModule을 사용하는 것입니다. 이 모듈은 내부적으로 Express의 파일 업로드 미들웨어인 multer를 래핑하여 NestJS의 DI 시스템과 통합되도록 합니다.1. 🛠️ 사전 준비 및 설치1.1. Multer 설치MulterModule은 multer 패키지에 의존하므로, 먼저 이를 설치해야 합니다.npm install multer1.2. MulterModule 등록애플리케이션의 루트 모듈 또는 파일 업로드가 필요한 모듈에 MulterModule을 등록합니다.2. 📝 MulterModule.register() 설정MulterModule을 등록할 때, register() ..

DB 백업 및 정기 작업 실습 (MySQL 예시)

실제 프로덕션 환경에서 DB 백업과 같은 정기 작업은 매우 중요합니다. NestJS의 스케줄러를 사용하여 MySQL 데이터베이스를 정기적으로 백업하는 실습 코드를 구현해 보겠습니다.1. 🛠️ 사전 준비: 외부 명령어 실행 환경DB 백업은 보통 **mysqldump**와 같은 외부 명령어를 실행하여 데이터베이스 스키마와 데이터를 파일로 추출하는 방식으로 이루어집니다. NestJS (Node.js)에서 외부 명령어를 실행하려면 child_process 모듈을 사용합니다. # child_process는 내장 모듈이므로 별도 설치 불필요# 💡 .env 파일에 DB 접속 정보가 정의되어 있어야 합니다.# DATABASE_HOST=localhost# DATABASE_USER=root# DATABASE_PASSW..

Cron, Interval, Timeout 실습: 정기 작업 구현

이전 주제에서 소개된 @nestjs/schedule 모듈의 세 가지 주요 데코레이터를 사용하여 실제 애플리케이션에서 활용할 수 있는 정기 작업 로직을 구현해 보겠습니다.1. 🛠️ 스케줄 작업 서비스(TasksService) 생성스케줄링 로직은 NestJS의 Provider인 서비스 클래스 내부에 정의되어야 다른 DI된 서비스(예: PrismaService, CacheService)를 주입받아 사용할 수 있습니다. nest generate service tasks2. ⏰ @Cron(): 특정 시각 작업 (DB 백업 예시)@Cron() 데코레이터는 Cron 표현식을 사용하여 특정 시각에 정확히 한 번 실행되는 작업을 정의할 때 사용합니다. Cron 표현식은 초(Second)부터 시작하는 6자리 형식을 주로..

NestJS 스케줄러: @nestjs/schedule 소개

1. 💡 @nestjs/schedule 모듈의 역할@nestjs/schedule 모듈은 NestJS 애플리케이션 내에서 정기적인 백그라운드 작업(Scheduled Jobs)을 쉽게 구현할 수 있도록 지원하는 모듈입니다. 이 모듈은 내부적으로 Node.js의 node-cron 및 setTimeout/setInterval 기능을 활용하여, 서버를 재시작할 필요 없이 정해진 시간에 특정 비즈니스 로직이 자동으로 실행되도록 합니다.주요 특징데코레이터 기반: @Cron(), @Interval(), @Timeout()과 같은 데코레이터를 사용하여 메서드에 실행 시점을 지정합니다.DI 통합: 스케줄링 로직을 서비스(Provider) 클래스 내부에 정의할 수 있어, 데이터베이스 접근, API 호출 등 다른 DI된 서..

Role 기반 권한 관리 (Role-Based Access Control, RBAC)

인증(Authentication)을 통해 사용자가 누구인지 확인했다면, 이제 인가(Authorization)를 통해 사용자가 무엇을 할 수 있는지 확인해야 합니다. NestJS에서 RBAC는 Custom Decorator와 Guard를 결합하여 구현하는 것이 표준입니다.1. 💡 RBAC 개요 및 목표RBAC는 사용자에게 역할(Role)을 할당하고, 그 역할에 따라 리소스 접근 권한을 부여하는 인가 방식입니다.사용자: Jane역할 (Role): Admin권한 (Permission): 사용자 목록 조회, 사용자 생성, 사용자 삭제우리의 목표는 특정 API 엔드포인트에 필요한 역할을 명시하고, 요청을 보낸 사용자의 역할이 해당 권한을 충족하는지 Guard에서 검사하는 것입니다.2. 📝 라우트에 역할 메타데..

WT 인증 시스템 구축: Refresh Token 패턴

1. 🔑 Refresh Token 패턴의 개요Refresh Token 패턴은 기존의 단일 Access Token 방식이 가진 보안과 사용자 경험(UX) 사이의 딜레마를 해결하기 위해 고안된 이중 토큰(Dual Token) 방식입니다.Access Token (액세스 토큰): 실제 API 접근 권한을 증명하는 토큰입니다. 보안을 위해 만료 시간을 짧게 (예: 15분) 설정하여 탈취 위험에 대비합니다.Refresh Token (리프레시 토큰): Access Token이 만료되었을 때 새 Access Token을 재발급받기 위한 토큰입니다. 사용자 경험을 위해 만료 시간을 길게 (예: 7일) 설정합니다.2. 🛡️ 보안 강화 및 통제력 확보토큰 종류역할만료 시간저장 위치 (클라이언트)보안 전략Access To..

Passport Strategy 구현: Local & JWT 실전

NestJS에서 Passport 모듈은 인증 방식을 Strategy(전략)라는 플러그인 형태로 분리하여 사용합니다. 우리는 로그인 시점과 로그인 후 인증이 필요한 모든 요청에 대해 두 가지 핵심 전략을 구현해야 합니다.1. 🛡️ Local Strategy 구현 (로그인)Local Strategy는 사용자 이름(또는 이메일)과 비밀번호를 서버에서 검증하여 사용자를 인증하는 데 사용됩니다. 이는 주로 POST /auth/login 엔드포인트에서 사용됩니다.1.1. 파일 구조 및 상속@nestjs/passport에서 제공하는 PassportStrategy 헬퍼 클래스를 사용하여 기본 passport-local 라이브러리의 Strategy를 상속받습니다.// src/auth/strategies/local.st..

NestJS 인증 시스템 구축: JWT & Passport 실전

1. 🔑 인증 시스템의 핵심 구성 요소NestJS에서 안전하고 확장 가능한 인증 시스템을 구축하기 위해 주로 JWT (JSON Web Token) 표준과 Passport 모듈을 사용합니다.Passport: Node.js의 미들웨어로, 다양한 인증 메커니즘을 플러그인 형태로 지원하는 프레임워크입니다. NestJS는 @nestjs/passport 모듈을 통해 이를 통합합니다.JWT: 사용자 정보를 담고 있는 서명된 토큰입니다. 이 토큰은 클라이언트에 저장되며, 이후 요청 시 서버에 전송되어 사용자 인증에 사용됩니다.Guard: JWT의 유효성을 검사하고 사용자에게 접근 권한이 있는지 확인하는 NestJS의 핵심 컴포넌트입니다.2. 📝 Passport Strategy (전략) 정의Passport는 인증 방..