목록NestJS, Node.js/#02 NestJS (7)
개발일지
현 상황현 서비스에는 host, tester, admin 총 세 타입의 유저가 존재한다.유저 역할마다 토큰 페이로드 정보가 다르고 역할 별로 다른 Guard를 사용하는 등. 일관성 없는 구조를 갖고 있다. 문제 파악 및 개선 방향해당 유저가 어떤 타입의 유저인지 알기 힘들다.역할 별로 JWT 가드를 분리할 만큼의 차이점이 없었다. 공통으로 관리하는게 효율적이라고 판단admin+host, host+tester 등 다양한 권한 조합 필요하다. JWT 페이로드 개선하기기존export interface IHostJwtPayload { hostUuid: string; hostEmail: string;}export interface ITesterJwtPayload { testerUuid: number; t..
개요인터넷 쇼핑몰이라고 가정한다면 상품 목록, 상세 보기 같이 모두가 접근할 수 있는 페이지가 있고 매출, 재고 관리 등 직원 전용 페이지가 있을 것이다. 이때 일반 유저는 직원 전용 페이지에 접근할 수 없어야한다. 같은 공지사항 페이지에서도 직원에게는 쓰기, 편집, 삭제 기능이 함께 노출되어야하고 일반 유저들은 읽기만 가능해야한다.이러한 상황에서 RBAC를 사용하면 이러한 권한을 효율적이고 체계적으로 관리할 수 있다. RBAC(Role-Based Access Control, 역할 기반 접근 제어)사용자에게 역할을 부여하고 역할에 따라 리소스 접근 권한을 제어하는 메커니즘 RBAC 구현하기일반 유저(user)와 직원(staff), 관리자(admin) 세가지 권한이 있다고 가정하자.export enum ..

개요기존의 영상 업로드 기능은 단일 파일을 한번에 전송했었다. 하지만 단일 요청 방식은 다음과 같은 문제가 있었다.불안정한 네트워크로 전송이 끊겼을 경우 처음부터 다시 시작해야 한다.대용량 파일의 경우 업로드 속도가 너무 느리다.AWS S3는 한 번에 5GB까지만 업로드 가능하다. (+높은 화질 유지할 수 없음) 따라서, AWS 에서 제공하는 멀티파트 업로드를 사용해서 더 안정적이고 빠르게 업로드할 수 있도록 개선했다. 멀티파트 업로드 (Multipart Upload)멀티파트 업로드는 AWS에서 제공하는 기능으로 대용량 파일을 여러 청크로 나눠 동시에 또는 순차적으로 업로드할 수 있다. 멀티파트 업로드의 이점으로는병렬 처리가 가능하여 빠른 속도와 개선된 네트워크 대역폭을 제공한다.전송이 끊기더라도 중단..

기능 설명응시자가 온라인 시험에 응시하게 되면 다음과 같은 과정을 거쳐 최종 결과가 주최 측에 제공된다.응시자가 촬영한 영상을 업로드 한다.AI 서버가 영상을 분석하여 감지된 데이터를 DB에 기록한다.BE 서버는 이 데이터를 기반으로 해당 응시자의 ‘분석결과(status)’를 도출한다.내가 담당한 기능 중에서 가장 복잡하고 어려웠던 기능이었다.여러 응시자의 분석결과를 여러군데에서, 다양한 형태로 제공 되어야 했다. 기존 코드 구조 문제function method1(args) { let status; if (분석오류조건) { status = '분석오류'; } else if (부정행위조건) { status = '부정행위'; } if (status === '분석오류') { // ..
개요이전에 개인프로젝트에서 Passport를 이용해서 jwt 검증을 구현한 적이 있다. 이때 어려웠던게 1. jwt 검증 로직 커스텀하기, 2. 에러 커스텀하기 였다. 결국 Guard canActivate() 메서드 안에서 error mesage에 따라 원하는 에러 객체를 반환할 수 있도록 구현했었다. 사실 상 Passport strategy의 장점을 살리지 못했던 방법이라고 생각한다.이번 새 프로젝트에 들어가면서 또 한번 인증/인가를 구현하게 되었다. 그때의 기억을 살려 다시 한번 도전해봤다. 아니 근데 웬걸 공식문서(Extending guards)에 떡하니 나와있었다. 지금보면 너무나도 간단한 걸 그땐 왜 몇번을 읽어도 이해가 안됐던건지.. 허무하면서 뿌듯하다.서론이 너무 길었는데 어찌됐던 전보다 더..
지난 포스트에서 PASETO에 대해 알아봤습니다. 이를 NestJS로 직접 구현해보고자 합니다. 전반적인 구현 방식은 JWT 인증/인가와 동일합니다. 가독성을 위해 DB 저장 등의 로직은 생략하고 PASETO 생성 및 인증 부분만 설명하겠습니다.패키지 설치🔗 https://paseto.io/🔗 https://github.com/panva/paseto$ yarn add paseto v4, 비대칭키 방식(public)을 사용했습니다. PASETO 생성로그인 시 access token, refresh token을 생성합니다. 비대칭키 방식이기 때문에 한 쌍의 private/public 키 값이 필요합니다. 여기서는 paseto를 생성하는 부분이기 때문에 private key를 사용..
Amazon SES (Amazon Simple Email Service)Amazon SES란 아마존에서 제공하는 이메일 전송 플랫폼을 말합니다.사전 준비AWS 계정의 Access key, Secret key가 필요합니다.Amazon SES verifed email를 생성합니다. 패키지 설치aws-sdk와 nodemailer(ses transport)를 사용합니다.// 1. nodemailer$ yarn add nodemailer// 2. @aws-sdk/credential-provider-node (aws-sdk v3 사용할 경우)$ yarn add @aws-sdk/credential-provider-node// 3. @aws-sdk/client-ses$ yarn add @aws-sdk/client-se..