저희는 비디오 스트리밍 서비스를 개발하는만큼, 비디오/이미지 파일을 전달하는 일이 많았습니다. 그래서 보다 효율적인 처리가 중요했는데요, 동시에 파일 접근 권한에도 신경을 써야 했습니다.

이 문서에서 파일 처리에 대한 고민 과정을 공유해 드리려고 합니다! 😊

📦 NCP Object Storage

Untitled

저희는 비디오 스트리밍 서비스를 개발하는만큼, 비디오/이미지 파일을 전달하는 일이 많았습니다. 그래서 보다 효율적인 처리가 중요했는데요, 동시에 파일 접근 권한에도 신경을 써야 했습니다.

저희는 비디오/이미지 파일을 모두 NCP Object Storage에 업로드하고, 조회하기 위해서는 다시 다운로드 하는 과정을 거칩니다.

NCP Object Storage는 AWS의 S3와 같은 서비스로, 모든 형식의 데이터를 업로드/다운로드 할 수 있습니다! Object Storage는 bucket 이 폴더 개념, object 가 파일 개념입니다.

각 object별로 공개 또는 비공개 설정을 할 수 있는데, 공개로 설정할 경우 bucket의 url만 있으면 누구나 자유롭게 object에 접근할 수 있습니다. 그런데 비공개로 설정한다면, 인증된 사용자만 object에 접근할 수 있게 됩니다.

그럼 인증된 사용자인지는 어떻게 구분할 수 있을까요?

🔒 Authorization Header

Untitled

비공개된 object에 접근하기 위해선 api 요청을 보낼 때 Authorization Header가 꼭 필요합니다.

PUT /example-bucket/queen-bee HTTP/1.1
Authorization: {authorization-string}
x-amz-date: 20160825T183001Z
x-amz-content-sha256: UNSIGNED-PAYLOAD
Content-Type: text/plain; charset=utf-8
Host: kr.object.ncloudstorage.com
Content-Length: 533

 The 'queen' bee is developed from larvae selected by worker bees and fed a
 substance referred to as 'royal jelly'. After a short while the 'queen' is
 the mother of nearly every bee in the hive, and the colony will fight
 fiercely to protect her.

위에서 API 요청 예시를 확인할 수 있는데요, 저희가 Object Storage를 사용하면서 가장 많이 요청하는 API 중 하나인 PutObject API 입니다.

API 요청을 보내기 위해 Authorization , x-amz-date , x-amz-content-sha256 , Host 헤더 등이 필수로 필요하고, 그 중 Authorization 헤더로 요청을 보내는 사용자가 인증된 사용자인지 확인할 수 있습니다.

Authorization Header를 만드는 자세한 방법은 ‣ (작성예정) 를 참고해주세요!