분류 전체보기 317

[개요] NestJS 애플리케이션 AWS에 배포하기 01

사이드 프로젝트를 AWS에 배포하는 과정을 기술합니다. 인프라 구성도 저희 사이드 프로젝트는 5월부터 약 한 달간 운영되는 서비스로 트래픽을 전혀 예상할 수 없고 비용을 최대한 아끼는 쪽으로 인프라를 구성할 계획입니다. 이번 시간에는 간단히 설명을 진행하고 이후 시리즈로 각 단계별로 자세히 다뤄보겠습니다. 배포 배포는 GithubAction과 CodeDeploy를 통해 이루어집니다. release 브랜치에 코드가 merge 혹은 push 되면 Github Action에 의해 빌드되고 S3로 ZIP파일이 업로드됩니다. 이후 EC2에 CodeDeploy Agent가 S3에 접근하여 각각에 EC2에 배포를 진행합니다. EC2에는 Nginx가 리버스 프록시로 사용하고 뒤에 각각의 애플리케이션이 배포됩니다. 무중..

DevOps/AWS 2023.03.16

[Build & Deploy 리소스] NestJS 애플리케이션 AWS에 배포하기 05

인프라 구성도 이번 시간에는 이미지 상에서 빨간 네모 속, 코드를 빌드하고 배포에 필요한 리소스들을 생성 및 설정하겠습니다. IAM 사용자 생성하기 Github Action에서 S3에 접근하기 위해서 IAM 사용자를 생성해야 하니다. IAM 역할은 AWS 리소스나 사용자에 부여할 수 있기 때문에 IAM 사용자를 생성해 주어야 합니다. AmazoneS3FullAccess와 AWSCodeDeployFullAccess 권한을 부여합니다. 사용자 상세 화면에서 액세스 키 만들기를 선택합니다. 액세스 키 모범 사례 및 대안은 아무거나 선택해 줍니다. 액세스 키는 웬만하면 csv 파일로 다운로드하는 걸 추천드립니다. IAM 역할 생성하기 CodeDeploy에서 EC2에 접근하기 위한 역할 AWSCodeDeployR..

DevOps/AWS 2023.03.16

NestJS Pipe에 대해 알아보기

Pipe 클라이언트가 보내는 HTTP 요청으로부터 데이터를 Parsing 하고 Validation 하여 컨트롤러 메서드의 파라미터로 전달하는 중간 레이어이다. 스프링 MVC의 ArgumentResolver와 Bean Validation이라고 생각하면 된다. 스프링의 BeanValidator와 비슷한 구조를 하고 있지만 예외처리를 각각의 Pipe에서 하기 때문에 오히려 코드가 깔끔해질것 같다는 생각이 든다. NestJS 기본 내장 파이프 ValidationPipe: DTO에 대한 유효성 검사를 수행합니다. ParseArrayPipe: 문자열을 배열로 변환합니다. ParseBoolPipe: 문자열을 부울 값으로 변환합니다. ParseEnumPipe: 문자열을 enum 값으로 변환합니다. ParseIntPip..

Javascript/NestJS 2023.03.14

커스텀파이프로 데이터 바인딩 및 유효성 검사

요청 유효성 검사 UserUpdateDto export class UserUpdateDto { @IsNotIn([' ']) @Length(1, 7) nickname: string; @MaxDate(new Date()) birthdate: Date; } @IsNotIn()는 리스트를 파라미터로 받아 리스트 안에 객체와 같으면 BadRequest를 응답한다. ParseUserUpdateDtoPipe 요청으로 넘어오는 birthdate는 String이다. 때문에 Date 타입으로 변경해야 한다. CustomException은 HttpException을 상속한 커스텀 예외이다. export class ParseUserUpdateDtoPipe implements PipeTransform { transform(va..

Javascript/NestJS 2023.03.13

NestJS Controller에 대해 알아보기

Controller 생성하기 nest g controller [컨트롤러 이름] *.controller.spec.ts 은 테스트 파일로 생성을 원치 않으면 명령어 뒤에 --no-spec 을 붙여주면 된다. 요청 처리 방식 @Controller('boards') export class BoardsController { @Get() getBoards() { return [] } } NestJS의 컨트롤러는 스프링의 컨트롤러와 매우 유사하다. 엔드포인트를 설정하는 데코레이터는 다르지 않지만 파라미터를 바인딩하는 데코레이터에는 차이가 있다. Path Parameter @Controller('boards') export class BoardsController { // GET hostname:3000/boards/..

Javascript/NestJS 2023.03.13

NestJS Module에 대해 알아보기

Module NestJS는 모듈 기반의 아키텍처를 사용하며, 애플리케이션은 여러 모듈로 구성된다. Module은 일종의 컨테이너로, 애플리케이션에서 사용되는 컴포넌트를 포함한다. 각각의 컴포넌트는 Module에 등록되어야 애플리케이션에서 사용할 수 있으며 기본적으로 싱글 톤으로 여러 모듈 간에 쉽게 동일한 인스턴스를 공유할 수 있다. App Module(root) AppModule은 루트 모듈로 애플리케이션의 진입점(entry point) 역할을 한다. 애플리케이션을 시작할 때 NestJS가 루트 모듈을 로드하여 애플리케이션을 초기화하고 실행한다. 루트 모듈은 보통 app.module.ts 파일로 작성되며, @Module() 데코레이터를 사용하여 해당 클래스가 NestJS 모듈임을 나타낸다. 루트 모듈은..

Javascript/NestJS 2023.03.13

프로젝트 구조

NestJS CLI 설치 NestJS CLI는 NestJS 애플리케이션을 개발할 때 사용하는 Command Line Interface입니다. NestJS CLI를 사용하면 NestJS 프로젝트 구조를 자동으로 생성하거나, 모듈, 컨트롤러, 서비스 등의 구성요소를 생성할 수 있습니다. 또한, 프로젝트 빌드, 실행, 테스트 등의 작업을 쉽게 수행할 수 있습니다. NestJS CLI는 NestJS 애플리케이션 개발의 생산성을 높여주는 매우 유용한 도구입니다.npm i -g @nestjs/cli 프로젝트 생성아래 명령어로 NestJS 프로젝트를 생성하게 되면 [프로젝트 이름]으로 된 디렉토리가 생성됩니다.nest new [프로젝트 이름] 디렉토리 구조프로젝트가 생성된 디렉토리의 구조입니다.├── README.m..

Javascript/NestJS 2023.03.13
728x90