지난 1편에서 곰터뷰에 대한 간단한 설명과 곰터뷰에서 Object Storage로 왜 IDrive e2를 사용하게 되었는지 포스팅을 했었다. 이번에는 그럼 IDrive e2를 사용하여 어떤 방식으로 비디오를 저장하고 조회하는지 살펴보겠다.
비디오 저장 로직
먼저 비디오 저장 로직을 간단하게 그림으로 살펴보자.
다음과 같은 3가지 과정을 통해 비디오를 서버에 저장할 수 있다.
1. Pre-Signed URL 발급
우선 Pre-Signed URL이 무엇인지 먼저 알아둘 필요가 있다.
Pre-Signed URL은 웹 서비스에서 많이 사용되는 보안 기술 중 하나로, AWS S3와 같은 객체 스토리지 서비스에서 사용되는 개념 중 하나이다. 서버 측에서 클라이언트가 특정 리소스에 직접 접근할 수 있는 URL을 생성하는 방식으로, 서버에서 정의한 권한(Read, Write 등)과 만료 시간이 포함되어 있다. 서버거 실제로 파일을 전송하지 않고도 클라이언트에게 안전한 방법으로 파일에 접근할 수 있게 하기에 보안 측면에서 매우 유용하다.
곰터뷰에서도 다음과 같은 이유로 Pre-Signed URL을 클라이언트에 발급해주어 IDrive에 면접 영상을 업로드 하도록 결정하였다.
- 서버 측에서 동영상을 업로드하게 할 경우 서버의 리소스를 너무 많이 사용하여 문제가 발생할 수 있음
- 클라이언트에서 동영상을 촬영하고 이를 서버에 넘기는 경우 네트워크 비용이 많이 발생할 수 있음
그렇기에 클라이언트에 Pre-Signed URL을 반환하고, 이를 사용해 클라이언트에서 비디오를 업로드 하도록 구현하여 서버의 부담과 소비되는 비용을 최대한 줄이기 위해 노력하였다.
2. Pre-Signed URL을 사용한 비디오 저장
1번에서 구현한 Pre-Signed URL 발급 로직을 사용하여 클라이언트에서 IDrive에 바로 영상을 업로드한다.
HTTP Body에 binary 형태로 영상을 담아 PUT 메서드로 Pre-Signed URL에 요청을 보내면 간단하게 IDrive 서버에 동영상이 업로드가 된다.
3. 비디오 업로드 완료 후 서버에 비디오 정보 저장
클라이언트 측에서 비디오가 IDrive에 저장됨을 확인한 후 IDrive에 저장된 비디오의 URL, 파일 이름 등을 포함하여 서버에 요청을 보내면 DB에 비디오의 정보를 저장한다.
그리고 이후 비디오 조회 시에는 DB에 저장된 비디오의 정보를 사용해서 IDrive에 접근할 필요없이 간단하게 저장한 비디오를 시청할 수 있다.
비디오 조회 로직
저장한 비디오를 다시 보는, 즉 조회하는 로직도 서비스에서 필수적이다.
곰터뷰에서 제공하는 비디오 조회 방식에는 아래와 같이 두 가지가 있다. 각 조회 방식의 로직을 설명해보겠다.
개인 비디오 조회
먼저 자신의 비공개 비디오를 확인하는 로직을 간단하게 그림으로 살펴보자. 개인 비디오 조회 로직에는 아래와 같은 두 가지 경우가 있다.
1. 자신의 비디오 전체 조회
자신의 비디오들을 한 번에 전체적으로 조회할 수 있도록 구현하였다. 서버에서 발급받은 쿠키에서 회원 정보를 추출하고 추출한 id를 토대로 그 회원의 모든 비디오를 조회하도록 구현하였다.
2. 단일 비디오 조회
DB에 저장된 video의 id를 기반으로 조회하는 것이기에 로직이 어렵지 않았다. 다만 쿠키를 기반으로 회원 정보를 추출하고, 뽑아낸 회원 정보를 기반으로 비디오의 실제 촬영자인지 확인하는 로직이 조금 복잡하였다.
특히 테스트 진행 시에 이에 대한 경우를 테스트 하는 것에 어려움을 겪었다.
타인의 공개된 비디오 조회
다음으로 타인의 공개 비디오를 조회하는 로직을 그림으로 간단하게 살펴보자. Public 비디오 조회 구현을 위해서는 다음 두 가지 경우를 구현해야했다.
1. 비디오 Public으로 전환
비디오를 Public으로 변환하고, Public으로 변환된 비디오의 URL을 암호화하여 {해시값:실제 URL}의 형식으로 Redis에 저장하도록 하였다.
상태를 전환하려는 비디오가 실제 촬영자의 요청에 의해 전환되는지 확인하는 과정을 반드시 거치게 했다.
이를 통과한다면 해시값과 실제 URL을 Redis에 저장하고, 실제 URL 정보를 토대로 해당 비디오가 Public 상태인지 조회할 수 있도록 하였다.
2. 비디오 해시값을 사용한 비디오 상세 정보 반환
비디오 해시값을 사용한 비디오 상세 정보 반환 기능을 구현하기 위해, 이전에 사용하였던 Redis 사용 로직을 사용하였다.
비디오 해시값이 요청으로 들어오면 해당 해시값을 복호화하여 실제 URL을 알아내고, 실제 URL이 Public인지 Private인지 확인하여 비디오 상세 정보 반환을 사용할 수 있도록 하였다.
다음 포스팅에서는 AWS SDK for JavaScript를 활용한 실제 업로드 로직을 블로깅하도록 하겠다.
'개발 > 곰터뷰🐻' 카테고리의 다른 글
단위 테스트(Unit Test)와 통합 테스트(Integration Test) (0) | 2024.01.27 |
---|---|
테스트 코드는 왜 만들까? (3) | 2024.01.19 |
곰터뷰와 IDrive e2 (3) - AWS S3 SDK for JavaScript를 활용한 IDrive e2 사용법 (0) | 2023.12.13 |
곰터뷰와 IDrive e2 (1) - 왜 IDrive e2를 사용하게 되었나? (0) | 2023.11.18 |