목록NestJS, Node.js/#01 Project - 투표 커뮤니티 (27)
개발일지
개요계층형 아키텍처를 개선하기 위한 방법 중 하나인 SOLID 원칙, 그중에서도 DIP에 대해 알아보고 이를 직접 프로젝트에 적용해보고자 합니다. 이전의 타입스크립트·객체지향 프로그래밍 강의와 원티드 프리온보딩 백엔드에서 배운 내용을 바탕으로 진행했습니다. DI, DIP 알아보기</..
개요지난 번 사용자 인증/인가 방식으로 JWT를 적용했습니다. JWT는 토큰 그 자체만으로도 검증이 가능하기 때문에 별도의 저장공간을 필요로 하지않는다는 장점이 있습니다. 그러나 단점 역시 존재합니다. 설정한 기간이 만료되기 전까지 토큰은 유효하기 때문에 탈취될 경우 유효기간이 만료되기 전까지는 손을 쓸 수 없게 됩니다. 이러한 점을 방지하기위해 두가지 방식을 도입했습니다.1) Refresh 토큰 도입; Refresh 토큰은 오직 Access 토큰 재발급 용도로 사용되며 Access 토큰의 유효 기간을 짧게 설정할 수 있어 비교적 안전합니다.2) JWT blacklist 도입; Refresh 토큰 발급 시 DB에 저장합니다. 재발급 요청 시에 토큰이 DB에 존재하는지 확인하는 과정을 거쳐 존재하지..
기존 프로젝트에 적용되었던 Prisma를 TypeORM으로 변경했습니다.NestJS 공식 문서를 참고했습니다. 공식 문서에서는 MySQL을 사용하나 저는 SQLite를 사용했습니다.TypeORM 적용준비필요한 모든 종속성 패키지를 설치합니다. 사용하려는 데이터베이스의 클라아이언트 API 라이브러리(sqlite3)를 함께 설치해야합니다. $ yarn add --save @nestjs/typeorm typeorm sqlite3 --save 설치가 완료되면 TypeOrmModule을 가져올 수 있습니다. // app.module.tsimport { Module } from '@nestjs/common';import { TypeOrmModule } from '@nestjs/type..
AWS S3에 파일 업로드 하기 패키지 설치aws-sdk를 사용합니다.$ yarn add aws-sdk --save구현Controller, ServiceFileInterceptor 인터셉터와 UploadedFile 데코레이터로 form으로부터 받은 파일을 추출해낼 수 있습니다. @Patch('profile') @UseInterceptors(FileInterceptor('profileImg')) async updateProfile(@UploadedFile() profileImg) { const userId = 1; return await this.usersService.updateProfile(userId, profileImg); } 추출된 파일은 ..
이전에 구현했던 프로젝트 기준으로 설명하겠습니다.🔗 [NestJS] 회원가입 구현 #1 - Pipe 적용🔗 [NestJS] 예외 처리와 exception filter Dto 속성의 유효성 검사를 위해 <co..
prisma cli 사용 시 이슈 발생prisma에서는 아래와 같이 환경변수를 불러옵니다. // schema.prismadatasource db { provider = "sqlite" url = env("DATABASE_URL") ⭐️} // .envDATABASE_URL="file:./dev.db?timeout=5000" 그런데 앞서 .env 파일을 .env.development , .env.production 으로 파일명을 변경하면서 prisma cli 사용 시 env 파일을 인식하지 못하는 문제가 발생했습니다. 이는 prisma 클라이언트는 기본적으로 .env 파일을 불러오기 때문입니다. dovenv-cli개발 환경에 따라 env 파일을 지정해주기위..
@nestjs/config보통 개발할 때와 배포할 때의 실행 환경이 달라지기 때문에 환경 변수들을 분리하여 관리할 필요가 있습니다. NestJS에서는 dotenv를 내부적으로 활용하는 @nestjs/config 패키지를 제공해줍니다. 이를 이용하여 ConfigModule을 동적으로 생성할 수 있습니다. $ yarn add @nestjs/config --save 환경 변수를 관리하는 env 파일을 생성했습니다. `.env.development` 는 개발 환경에서, `.env.production` 배포 환경에서 사용됩니다. ├── .env.development└── .env.production ConfigModule// app.module.tsimport { ConfigModu..