nestjs

    NestJS 기초 (15) MVC 디자인 패턴 구현하기

    MVC(Model-View-Controller) 패턴은 사용자 인터페이스, 데이터 및 논리 구조를 구현하는 소프트웨어 디자인 패턴입니다. MVC 모델의 핵심은 비즈니스 로직과 화면 구현을 분리하여 관리하는 것입니다. 각 요소는 다음과 같은 특징을 갖고 있습니다. 보다 자세한 사항은 MDN의 MVC 설명 문서를 참고해보시기 바랍니다. 모델(Model): 앱에서 처리할 데이터를 관리합니다. 데이터 상태가 변경되면 뷰 또는 컨트롤러에게 이를 전달합니다. 뷰(View): 레이아웃과 화면을 처리합니다. 컨트롤러: 명령을 모델과 뷰 사이에서 사용자 입력에 대한 응답을 처리하는 로직을 포함하고 있습니다. NestJS에서 MVC 구현하기 이제 NestJS에서 MVC 패턴을 구현해보도록 하겠습니다. 먼저, 새로운 프로젝..


    NestJS 기초 (14) 이미지 파일 업로드하기

    NestJS에서는 multer 미들웨어 패키지를 사용하여 이미지 파일을 업로드할 수 있습니다. multer는 multipart/form-data 형식을 통해 HTTP POST 요청으로 업로드 되는 파일을 처리할 수 있게 도와줍니다. multer 설치 및 기본 설정 다음 명령어를 통해 multer를 설치할 수 있습니다. $ npm i -D @types/multer multer를 설치했다면 컨트롤러 파일에 다음과 같이 이미지 업로드를 처리할 코드를 작성합니다. 이미지 업로드 직전에 인증 섹션에서 만들었던 가드를 추가해주도록 하겠습니다. 이렇게 하면 인증 토큰을 보유한 사용자만 이미지 업로드를 할 수 있습니다. //users.contoller.ts @ApiOperation( {summary: '이미지 업로드'..


    NestJS 기초 (13) JWT를 사용한 인증 인가 처리와 데코레이터 구현

    이번 포스팅에서는 JWT를 사용하여 사용자의 인증 및 인가를 처리하고 이를 데코레이터로 구현하여 가드로 활용하는 방법에 대해 알아보도록 하겠습니다. JWT 기본 개념 JWT는 Jason Web Token의 약자로 두 주체가 안전한 방식으로 클레임(claims)을 주고 받는 방법입니다. JWT에 포함된 클레임은 JSON 객체로 인코딩되는데요. 공식 웹사이트인 Jwt.io에서 JWT를 인코딩 또는 디코딩해볼 수 있습니다. JWT 구성 JWT를 구현하기 전에 JWT를 사용하기 위해 알아야 할 기본 구성에 대해 살펴보도록 하겠습니다. JWT는 크게 3가지 요소인 헤더, 페이로드, 서명으로 구성되는데요. 각 요소는 .으로 구분합니다. 헤더(header) 헤더에는 JWT 유형과 알고리즘이 담깁니다. { "typ":..


    NestJS 기초 (12) 가드를 사용한 인증과 인가

    인증 및 인가의 기본 로직은 1. 접근 여부를 파악하고 2. 신원 정보를 확인하고 3. 일치하면 true 아니면 false를 리턴하는 것입니다. 과정을 통과하지 못하는 경우 보통 권한 없음(401) 또는 제한됨(403) 에러를 반환합니다. 가드란? 가드는 CanActivate 인터페이스를 구현하며 싱글 리포지토리를 갖습니다. 가드는 요청을 조건에 따라 라우트 핸들러에서 처리 여부를 결정합니다. 이를 보통 인증이라 합니다. Express 애플리케이션에서 인증은 보통 미들웨어에서 처리했습니다. 그러나 미들웨어는 next()를 호출한 다음 어떠한 핸들러가 실행되는지 알지 못합니다. 반면, 가드는 ExecutionContext 인스턴스에 접근할 수 있으며, 다음에 실행될 것을 분명히 알고 있습니다. 가드를 통한..


    NestJS 기초 (11) API 문서 작성하기 (스웨거)

    API 문서는 보통 개발한 API 기능을 명시하고 다른 개발자와 공유하기 위해 사용합니다. Nest에서는 스웨거(swagger)를 사용하여 간편하게 API 문서를 작성하고 이를 테스트해볼 수 있습니다. 스웨거 설치하기 다음 명령어로 스웨거를 설치합니다. npm install --save @nestjs/swagger swagger-ui-express API 문서 작성하기 스웨거 설치가 완료됐다면 이제 다음과 같이 main.ts 파일을 업데이트해줍니다. 타이틀이나 설명 등은 프로젝트에 맞게 수정하시면 됩니다. //main.ts import { NestFactory } from '@nestjs/core'; import { DocumentBuilder, SwaggerModule } from '@nestjs/sw..


    NestJS 기초 (10) 파이프와 유효성 검사

    파이프(pipes)는 @Injectable() 데코레이터와 함께 명시되는 클라스이며 PipeTransform 인터페이스를 통해 구현됩니다. 파이프는 두 가지 주된 유형을 갖습니다. 변형(transformation): 입력 데이터를 원하는 형식으로 전환(예를 들면, 문자열에서 숫자열로) 검증(validation): 입력 데이터가 유효한지 평가하고 예외가 발생하면 오류 메시지를 전송 두 가지 경우에서 파이프는 컨트롤러 라우트 핸들러에서 처리되고 있는 arguments 위에서 작동합니다. Nest는 메소드 호출 전에 파이프를 끼워넣고, 파이프는 메소드에게 전달되는 아규먼트를 받아서 처리합니다. 파이프가 변형 또는 검증을 마치면 이후 라우트 핸들러가 작동합니다. Nest는 다음과 같은 다양한 기본 파이프들을 제..


    NestJS 기초 (9) 예외 처리

    Nest는 자체적인 예외 처리 레이어를 제공하며 이를 통해 애플리케이션 전반의 에러를 처리할 수 있습니다. 개발자가 애플리케이션 코드에서 예외를 처리하지 않은 경우, Nest 레이어가 이를 포착하여 응답을 전송해줍니다. 이는 NestJS의 글로벌 예외 처리 필터에 의해 진행되며 HttpException 유형의 예외를 처리합니다. 알 수 없는 예외가 발생할 경우 다음과 같은 JSON 응답이 자동으로 생성됩니다. { "statusCode": 500, "message": "Internal server error" } 일반적인 예외 처리 방식 Nest 자체 HttpException 클래스는 @nestjs/common 패키지 내에 있습니다. 앞서 우리가 만들었던 CatsController에서 GET 라우트 핸들러..


    NestJS 기초 (8) 미들웨어

    미들웨어란 라우트 핸들러 이전에 호출되는 함수입니다. 미들웨어 함수는 애플리케이션의 요청-응답 사이클 내에서 request 및 response 객체와 next() 미들웨어 함수에 접근할 수 있습니다. next 미들웨어 함수는 보통 next라는 변수명으로 사용됩니다. Nest 미들웨어는 기본적으로 express 미들웨어와 동일합니다. 다음은 express 문서에서 설명하고 있는 미들웨어의 역할입니다. 미들웨어 함수는 다음과 같은 일을 할 수 있습니다. 코드 실행 request, reponse 객체 요청 변경 요청-응답 사이클 종료 스택 내 다음 미들웨어 함수 호출 현재 미들웨어 함수가 요청-응답 사이클을 종료하지 않으면 next()를 반드시 호출하여 다음 미들웨어 함수로 권한을 넘겨야 합니다. 함수 또는 ..