
구현기능 검증자가 해당 녹음파일을 검증하기 위해서는 해당 녹음파일을 재생한 횟수가 1회 이상 되어야 한다. 따라서 녹음파일을 스트리밍 한 횟수를 카운트 하기위한 기능을 구현하고자 한다. 고려사항 1️⃣ 재생버튼을 누른것 만으로 voice의 verify status를 재생횟수 0으로 먼저 생성하고, 재생이 모두 완료 된 후 재생횟수를 1로 업데이트 할 것인가? (ex. id = 1) 2️⃣ 재생을 처음부터 끝까지 완료 하였을 때, 엔드포인트로 접근하여 voice의 verify status를 재생횟수(default =1)를 생성할것인가?(ex. id = 2) 이것은 우리가 음원 회사의 스트리밍 횟수 카운트에 쓰이는 기술과 동일할 것으로 보인다. 좀더 자료를 찾아 본뒤 적용해보아야겠다. 지금은 2️⃣번과 같은..

지난 블로그에서는 앱 사용자가 자신의 핸드폰에서 음성파일을 업로드하여 최종적으로 녹음파일이 AWS S3에 저장 되는 것을 구현해보았다. 그리고 블로그 마지막에는 파일 용량에 제한을 두는 것에 대해 좀더 고민을 해보기로 하였고, 시간 출퇴근 하시는 시간 밥먹는 시간, 고민한 끝에 드디어 오늘 그에 대한 답을 내리게 되어 블로깅을 해보려고 한다. 먼저, 파일 용량을 제한하는 목적이 무엇인지에 대해 생각해보았다. 1. 첫째로, 사용자가 녹음을 업로드시 파일은 AWS S3에 저장 되게 될텐데, AWS는 우리가 해당 서비스를 사용하는 만큼 청구를 한다. 즉, 많이 저장공간을 많이 사용 할 수 록 많은 비용을 내야한다는 것이다. 2. 두번째로, 많은 사용자들이 한꺼번에, 다량의 거대한 용량의 파일을 업로드하게 되면..

앞 블로깅에서는 S3에 파일을 업로드하는 기능을 컨트롤에서 구현하였다면, 이제는 서비스로 분리시키고, 파일 업로드와 동시에 DB의 voice테이블에 객체를 생성하는 작업을 해보려 합니다. 보시는 것처럼 컨트롤에 있던 AWS관련 메소드를 그대로 가져왔으며, 추가된 것이 있다면, prisma.voice.create 메소드 입니다. 아래 함수를 작성 하던 도중 2가지 에러를 만났는데요, 1. 한가지는, fileSize필드이 타입인 decimal값의 범위를 너무 작게 준것 때문이었고, umeric field overflow", detail: Some("A field with precision 8, scale 3 must round to an absolute value less than 10^5." 즉, Deci..

https://velog.io/@suasue/NestJS-AWS-S3-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EC%97%85%EB%A1%9C%EB%93%9C NestJS | AWS S3 이미지 업로드 NestJS로 AWS S3에 여러 개의 이미지를 업로드하는 기능을 구현해보자.AWS S3 버킷을 만들어 준다. 버킷 만드는 방법을 설명해놓은 곳이 많으니 직접 찾아서 만들면 된다. 개인적으로는 이 블로그를 velog.io Using npm npm install aws-sdk 이 명령은 프로젝트에서 JavaScript 용 SDK를 프로젝트에 설치하고package.jsonSDK를 프로젝트 종속성으로 나열할 수 있습니다. npm 웹 사이트에서 "aws-sdk"를 검색하여 이 패키지에 대한 정보를 찾을..

now(), @updateAt 의 @db.Timestamptz(3)의 유무에 따른 시간 표시 @db.Timestamptz(3)가 없는 model model Voice { id Int @default(autoincrement()) @id fileSize Decimal @db.Decimal(8,3) url String @db.VarChar(500) user User @relation(fields: [userId], references: [id]) userId Int sentence Sentence @relation(fields: [sentenceId], references: [id]) sentenceId Int dateOfCreated DateTime @default(now()) dateOfUpdated D..

이제 다음 스텝으로 데이터 베이스에 데이터를 저장시키는 것을 해보려고 합니다. 당시 VoiceService는 아래와 같았으며, @Injectable() export class VoiceService { constructor(private prisma: PrismaService) {} createVoice(voiceData: Prisma.VoiceCreateInput): boolean { console.log(voiceData) this.prisma.voice.create({data:voiceData}); return true; } } 아래와 같이 voiceController가 작성되어있는 상태에서 데이터가 DB에 들어가지 않는 상황이었습니다. @Post('submit') createVoice(@Query..

목표는 1번 Sentence의 Voice파일 1개를 생성하는 기능구현을 하는 것이었다. 먼저 prisma를 통하여 다음과 같이 모델링을 하였다. (User는 다른 데이터베이스에 들어가야하지만, 아직 같은 데이터 베이스 안에서 데이터를 넣는 것부터도 시도해보지 않은 상태여서, 데이터베이스 분리는 나중에 해보기로 결정하였다. ) // This is your Prisma schema file, // learn more about it in the docs: https://pris.ly/d/prisma-schema datasource db { provider = "postgresql" url = env("DATABASE_URL") } generator client { provider = "prisma-clien..

Module 1. app.Module생성 $ nest g moimport { Module } from '@nestjs/common'; import { MoviesModule } from './movies/movies.module'; import { AppController } from './app.controller'; //앱을 만들 때 모듈로 분리하면 좋다. 기존에 있던 MovieService와 MovieController를 따로 movies.module.ts를 생성하여, 넣어주었다. @Module({ imports: [MoviesModule], controllers: [AppController], providers: [], }) export class App..

Validation movieData와 updateData의 데이터 타입에 따른 예외처리 1. movieData DTO(데이터 전송 객체 , Data Transfer Object) 생성 dto 폴더 생성 및 create-movie.dto.ts 파일생성하여 dto 타입을 지정해준다. // 클라이언트가 보낼수 있는 전송객체 export class CreateMovieDto { readonly title: string; readonly year: number; readonly genres: string[]; } 유효성 검사 1 : ValidationPipe() main.ts에 ValidationPipe추가 app.useGlobalPipes(new ValidationPipe()); import { Validat..