nestjs 15

NestJS JWT 발급과 인증

저번 시간에는 Google OAuth를 통해 사용자를 인증하는 방법에 대해 다뤘습니다. 오늘은 이어서 인증된 정보를 가지고 JWT를 발급하고 인증하는 방법에 대해서 다루겠습니다. 패키지 설치 npm i --save @nestjs/jwt passport-jwt bcryptjs npm i --save-dev @types/passport-jwt @types/bcryptjs @nestjs/jwt는 Nest.js 프레임워크에서 JWT(JSON Web Tokens) 인증을 구현할 때 사용되는 패키지입니다. passport-jwt는 Passport와 함께 JWT 인증을 사용할 때 사용되는 패키지입니다. bcryptjs는 refresh token을 해쉬하여 데이터베이스에 저장하기 위해서 설치합니다. JWT 발급 Jwt..

Javascript/NestJS 2023.04.23

NestJS OAuth 인증 두번째

첫번째 시간에는 Google 클라이언트 ID를 발급받는 방법을 다뤄보았습니다. 이번 시간에는 Passport와 NestJS에 가드를 통해 인증을 진행하겠습니다. 패키지 설치 npm i --save @nestjs/passport passport passport-google-oauth20 @nestjs/jwt --save-dev @types/passport @types/passport-google-oauth20 각 패키지들에 대해서는 차차 설명하도록 하겠습니다. Passport Passport는 Node.js에서 사용되는 인증 미들웨어로, 다양한 인증 전략(strategy)을 지원하며, 사용자 정의 전략을 만들어서 사용할 수도 있습니다. @nestjs/passport를 사용하면 NestJS에서 passpor..

Javascript/NestJS 2023.04.23

NestJS OAuth 인증 첫번째

사이드 프로젝트에서 로그인은 네이버, 카카오, 구글을 통한 소셜 로그인만 제공하기로 하였습니다. OAuth 프로세스 브라우저에서 서버로 OAuth 로그인 페이지를 요청합니다. 서버는 브라우저를 OAuth 서비스 제공자의 로그인 페이지로 리다이렉트시킵니다. 로그인 성공시 서비스 제공자는 브라우저를 서버와 사전에 협의된 URL로 Access Token과 함께 리다이렉트시킵니다. 서버는 서비스 제공자에게 인증코드를 보내고 서비스 제공자는 사용자 정보를 서버로 보냅니다 Google OAuth 클라이언트 등록 1. https://console.cloud.google.com/ 에 로그인합니다. 2. "프로젝트 만들기"를 선택하여 자신의 프로젝트를생성합니다. 3. "API 및 서비스" > "사용자 인증 정보" > “..

Javascript/NestJS 2023.04.23

NestJS Health Check API

Health check API 서버나 애플리케이션의 상태를 모니터링하기 위한 API입니다. 일반적으로 HTTP GET 요청을 통해 접근할 수 있으며, 서버나 애플리케이션의 상태를 나타내는 정보를 반환합니다. 클라우드 서비스나 마이크로서비스 아키텍처를 사용하는 애플리케이션에서 널리 사용됩니다. AWS CodeDeploy의 배포는 Health Check API를 호출하여 지정된 상태값이 돌아오는지 확인 후에 배포를 마무리하기도 합니다. 또한 프라이빗 서브넷에 존재하는 데이터베이스의 상태를 쉽게 확인할 수 있는 방법이기도 합니다. 이 글은 NestJS의 공식 문서를 기반으로 작성되었습니다. @nestjs/terminus 설치하기 NestJS 프레임워크에서 사용할 수 있는 Health check 모듈입니다. 이..

Javascript/NestJS 2023.03.29

NestJS에서 환경변수 다루기

웹 애플리케이션을 개발할 때, 로컬 환경에서 개발하다가, 서버에 배포할 때, 서버 환경에서 운영하게 됩니다. 이때, 로컬 환경과 서버 환경이 달라서 발생하는 문제를 해결하기 위해서는 환경 변수를 설정할 필요가 있습니다. 저는 사이드 프로젝트를 준비하면서 로컬에서 사용할 환경 변수를 지정하기 위해 @nestjs/config 라이브러리를 사용하였습니다. @nestjs/config NodeJS에는 대표적으로 환경 변수를 설정하는 라이브러리 dotenv가 존재하며 NestJS에서는 dotenv를 내부적으로 사용하는 @nestjs/config 라이브러리가 존재합니다. npm i --save @nestjs/config . env 파일 먼저 Root 디렉터리에 .dev.env 파일을 생성합니다. Root 디렉토리란 ..

Javascript/NestJS 2023.03.27

[Github Actions] NestJS 애플리케이션 AWS에 배포하기 06

인프라 구성도 저번 시간에 이어 Github Actions를 설정하고 workflow 파일을 작성하겠습니다. Github Actions에 Secret 설정하기 Github 레포지토리의 Settings > Secrets and variables > Actions 탭을 선택하고 New repository secret을 선택합니다. 이전에 S3에 접근하기 위해 생성한 사용자 정보와 데이터베이스 정보와 OAuth 정보를 등록합니다. Workflow 파일 작성하기 프로젝트 디렉토리에 .github/workflows/workflow.yml 파일을 생성합니다. 파일명은 사실 아무거나 괜찮다고 합니다. name: Deploy NestJs Application on: push: branches: [ release ] p..

DevOps/AWS 2023.03.23

NestJS Provider, Service에 대해 알아보기

NestJS의 Provider 란? 프로바이더는 Nest의 기본 개념입니다. 대부분의 기본 Nest 클래스는 서비스, 리포지토리, 팩토리, 헬퍼 등 Provider로 취급될 수 있습니다. 프로바이더의 주요 아이디어는 종속성으로 주입할 수 있다는 것입니다. 즉, 객체는 서로 다양한 관계를 만들 수 있으며 객체의 인스턴스를 연결하는 기능은 대부분 Nest 런타임 시스템에 위임될 수 있습니다. 위에 글은 NestJS 에서 설명하는 Provider를 번역한 글입니다. 저는 이글을 보고 Provider를 스프링의 Bean이라고 이해했습니다. 애플리케이션에서 사용되는 객체를 정의하고, 의존성 주입 시스템에 등록하며 인스턴스를 필요한 곳에 제공한다는 점이 Bean과의 공통점이지만 Bean은 기본적으로 Singleto..

Javascript/NestJS 2023.03.22

[RDS] NestJS 애플리케이션 AWS에 배포하기 04

인프라 구성도 이번 시간에는 저번 시간에 이어 프라이빗 서브넷에 RDS를 구축합니다 데이터베이스 서브넷 그룹 생성 RDS를 이용하기 위해서는 서브넷 그룹을 생성해야 합니다. 서브넷 그룹은 두 개 이상의 가용영역에 생성된 프라이빗 서브넷으로 구성합니다. 이전에 새성했던 프라이빗 서브넷 두개를 선택후 생성합니다. 보안 그룹 생성하기 RDS에 연결될 보안 그룹을 생성합니다. 저는 MariaDB를 사용하기에 인바운드 규칙에 MYSQL/Aurora을 선택했고 소스로 EC2-SG를 선택했습니다. EC2에 연결되어 있는 보안 그룹의 아웃바운드를 수정합니다. 대상으로 RDS에 연결되어있는 보안그룹을 선택합니다. RDS 생성하기 사용하고 싶은 데이터베이스 엔진을 선택합니다. db 인스턴스 식별자와 마스터 사용자 이름, ..

DevOps/AWS 2023.03.19

[개요] 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