본문 바로가기

분류 전체보기

(122)
Nest.js log를 파일로 만들어서 관리 (logging) 프로젝트에서 error나 warn의 log들을 모아서 관리하는 logging 시스템을 작업했는데 복습하면서 정리해 보도록 한다 Nest.js에서는 logging을 할 때 Node.js의 winston패키지를 사용한다 먼저 패키지 nest-winston과 winston을 설치한다 npm install nest-winston winston 그리고 winston을 설정하는 utill 파일을 만든다 import { utilities, WinstonModule } from 'nest-winston'; import * as winston from 'winston'; import path from 'path'; const env = process.env.NODE_ENV; const dailyOptions = (lev..
TypeORM 추진 추천 쿼리 프로젝트에서 사진 추천 기능을 구현하면서 사용했던 쿼리에 대해서 복습하면서 정리하도록 하겠다 코드를 먼저 보자 async getRecommendPhoto(id: number): Promise { const userPhoto = await this.photoRepository.findOne({ where: { id }, relations: { photoKeywords: true } }); const userPhotoKeywords = userPhoto?.photoKeywords.map((k) => k.id); return this.photoRepository .createQueryBuilder('photo') .leftJoinAndSelect('photo.photoKeywords', 'keywords') ..
Nest.js에서 Google Vision API 사용하기 프로젝트를 진행하면서 유사한 이미지를 추천해 주는 기능을 위해서 Vision을 이용해 사진에 라벨링 하는 기능을 구현했는데 복습하며 정리해 보도록 하겠다 Google Cloud Console을 먼저 세팅하자 https://cloud.google.com/vision/docs/setup?hl=ko 빠른 시작: Vision API 설정 | Google Cloud 의견 보내기 빠른 시작: Vision API 설정 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 가이드에서는 Vision을 처음 사용하는 데 필요한 모든 설정 단계를 제 cloud.google.com 해당 문서를 따라서 설정을 하면 json으로 된 키파일을 다운받을 수 있다 안전하게 보관해 두자 필요한 패키지를 먼저..
Nest.js에서 이미지를 S3에 업로드 프로젝트를 진행하면서 Multer를 이용해 이미지를 다루고 해당 이미지를 S3에 업로드하는 기능을 구현했는데 복습하면서 정리해 보도록 하겠다 AWS S3를 먼저 설정하자 AWS에 접속해서 S3를 찾아 들어가서 버킷을 생성하자 버킷 이름을 지정하고 AWS 리전을 잘 선택하자 객체 소유권은 기본설정에서 건드리지 말자 퍼블릭 엑세스 차단을 풀어준다 따로 버킷 정책에서 접근 제한을 걸기 때문에 걱정하지 말자 생성한 버킷을 선택하고 권한을 설정해 보자 버킷 정책을 생성해 보자 버킷 ARN을 복사해 두시고 정책 생성기로 이동하자 1, 2, 3을 설정하고 4번 Actions에서 PutObject와 GetObject를 선택한다 읽기 권한, 수정 권한을 허용할 수 있게 해 준다 선택 사항들을 확인하고 정책을 만들자 정책..
Nest.js에서 Multer를 이용해 여러 장의 이미지 파일 관리 프로젝트를 진행하면서 여러 장의 이미지를 업로드하는 기능을 구현했는데 복습하면서 정리를 해보도록 하겠다 처음에 단일 이미지를 업로드할 때 nest-form-data 패키지를 사용해서 이미지를 업로드했다 nest-form-data 패키지를 사용한 이유는 DTO로 file를 validation 하기 편해서 사용했다 하지만 여러 장의 이미지를 다루면서 오히려 DTO에서 validation 하면서 정상적으로 이미지를 가져오지 못하는 문제가 발생했다 해결하기 매우 힘들었고 결국 해결하지 못했다 그 이유는 정보가 매우 부족했기 때문이다 Nest.js 공식 홈페이지에서 file을 다룰 때 Multer를 사용하다 보니 nest-form-data보다 Multer를 활요하는 경우가 많아 정보가 없는 듯하다 그렇기 때문에 ..
20230324 TIL - 사진 리사이징 사진을 리사이징하려면 sharp라이브러리를 사용해서 파일을 리사이징 하자 리사이징할 때 주의해야한다 사진의 종횡비를 유지하면서 리사이징 해야한다 원본 보다 작은 사이즈로 리사이징 해야한다 이미지 크기를 줄일 때 파일 사이즈도 줄일 수 있다 파일 사이즈가 크면 웹사이트 로딩 속도에 영향을 준다 적절한 크기로 조정한다 리사이징을 적용해보자 필요한 패키지를 설치하자 // 패키지를 설치해야한다 npm install sharp --save npm install @types/sharp --save-dev async putObject(image: any) { const sharpImage = sharp(image.path); let {width, height} = await sharpImage.metadata(); ..
20230321 TIL - 구글 비전을 이용한 이미지 라벨링 Today I learned 비슷한 사진을 추천해주는 기능을 작업하고 있다 구글 비전을 이용해서 사진에 라벨링을 하고 그 라벨을 이용해서 사진을 추천해주는 기능이다 구글 비전 API를 이용해서 생각 보다 쉽게 사진을 분석하고 라벨링을 뽑아올 수 있었다 async createPhotospot( createPhtospotDto: CreatePhotospotDto, files: Express.Multer.File[], userId: number, collectionId: number ): Promise { const collection = await this.collectionRepository.findOne({ where: { id: collectionId } }); if (_.isNil(collection..
20230309 TIL - 여러장의 이미지 업로드 Today I learned 기존의 이미지를 업로드하는 방식은 단일 이미지만 업로드 할 수 있었다 우리 프로젝트는 사진과 장소가 중요하다 그렇다면 단일 이미지로만 만족할 수 없다 그래서 여러장의 이미지를 업로드 할 수 있게 작업을 진행한다 작업 중 문제가 발생했다 지금 이미지를 업로드를 할 수 있게 사용하는 패키지는 nestjs-form-data 패키지를 사용하고 있다 DTO에 vaildation도 할 수 있고 아주 유용하게 사용했다 하지만 여러가지 파일을 받으려고 하니까 쉽게 풀리지 않았다 파일들이 배열이 아닌 객체로 겹쳐서 들어온다거나 파일을 못찾는다거나 문제가 발생했다 그래서 방법은 패키지를 바꾸자! 나는 기존에 사용했던 multer를 사용하기로 했다 npm install --save-dev @ty..