View
지난 블로그에서는 앱 사용자가 자신의 핸드폰에서 음성파일을 업로드하여
최종적으로 녹음파일이 AWS S3에 저장 되는 것을 구현해보았다.
그리고 블로그 마지막에는 파일 용량에 제한을 두는 것에 대해 좀더 고민을 해보기로 하였고,
시간 출퇴근 하시는 시간 밥먹는 시간, 고민한 끝에
드디어 오늘 그에 대한 답을 내리게 되어 블로깅을 해보려고 한다.
먼저, 파일 용량을 제한하는 목적이 무엇인지에 대해 생각해보았다.
1. 첫째로, 사용자가 녹음을 업로드시 파일은 AWS S3에 저장 되게 될텐데, AWS는 우리가 해당 서비스를 사용하는 만큼 청구를 한다.
즉, 많이 저장공간을 많이 사용 할 수 록 많은 비용을 내야한다는 것이다.
2. 두번째로, 많은 사용자들이 한꺼번에, 다량의 거대한 용량의 파일을 업로드하게 되면, 그에대한 트래픽이 어마어마해지고
이는 다른사용자들에게 도 영향을 끼치게 될것이다.
이런한 점 때문에 녹음파일의 용량에 제한을 둔다는 점을 고려하였을 때,
그렇다면, 파일용량을 제한하는데 무엇을 기준으로 둘까?
우선 다른 API들의 경우를 살펴보았다.
1. 카카오톡의 경우 오디오, 미디어 파일 업로드시 300MB로 제한을 두고 있다.
2. 네이버메일의 경우 파일 첨부시 일반메일의 경우 10MB까지 허용하며, 그 이상부터는 대용량 첨부로 전환된다.
격차가 매우 크다.
우리도 우리 서비스에 맞추어 파일용량에 제한을 두면 된다는 결론을 내렸다.
일단 녹음파일을 업로드 할것이니, 실제로 녹음을 해보았다.
8분 30초를 녹음했을 때, 4.2MB가 나온다.
클라이언트가 의뢰하는 문장의 길이가 얼마나 될지 알지는 못하지만,
기획서에서 본 본문의 길이가 그다지 길지 않았던 점을 고려하였을때,
넉넉잡아 20분안에 녹음이 끝나지 않을까 예상해 보았다.
실제로 20분 녹음을 하면, 10MB 정도의 생기고,
결론적으로 파일 업로드 용량제한을 10MB로 두기로 결정을 내렸다.
10(MB) * 1024(KB) * 1024(Bytes) = 10485760 8자리
Voice 모델의 fileSize 필드도 @db.Decimal(11,3)으로 수정해주었다.
소수점 3자리를 제외하고 8자리까지만 표현 가능하다는 뜻
model Voice {
id Int @default(autoincrement()) @id
fileSize Decimal @db.Decimal(11,3)
url String? @db.VarChar(500)
userId Int?
sentence Sentence? @relation(fields: [sentenceId], references: [id])
sentenceId Int?
dateOfCreated DateTime @db.Timestamptz(3) @default(now())
dateOfUpdated DateTime @db.Timestamptz(3) @updatedAt
voiceStatus VoiceStatus[]
@@map("voice")
}
'NestJS' 카테고리의 다른 글
TIL | NestJS_스트리밍 횟수 카운트 (0) | 2021.10.22 |
---|---|
TIL | NestJS_AWS_S3_controller에서 Service로 옮겨 재구성 (0) | 2021.10.19 |
TIL | NestJS_TypeScript_AWS_S3 (0) | 2021.10.18 |
TIL | now(), @updateAt의 @db.Timestamptz(3)의 유무에 따른 시간 표시 (0) | 2021.10.18 |
TIL | 데이터 베이스에 데이터를 저장 (0) | 2021.10.18 |