약 6개월 전에 개발하여 배포한 기능에 대하여 hot fix 요청이 들어왔다. 동영상 및 오디오 파일의 Seek 기능이 작동하지 않는다는 것이었는데, fast forward나 rewind 시 동영상/오디오 파일이 처음부터 다시 시작된다는 버그였다. 큰 계약건이 걸린 사항이라 바로 핫픽스가 필요하다고 한다.

지난 주 금요일에 휴가여서 다른 시니어 개발자에게 패스하고 자유로워지려고 했으나, 그 친구가 금요일날 소스 보고 못고쳤고, 자기는 이번주부터 연말까지 휴가이니 내가 고쳐야 할 것 같다고 다시 리턴되어서 돌아왔다. 내가 예상하는 원인하고 고치는 방법까지 목요일에 다 설명해주고 갔는데, 못 고쳤다란다.

아무튼, 우리 시스템은 중간에 파일 요청이 들어올 경우 파일에 대해 핸들링하는 handler가 별도로 존재한다. 파일에 대한 접근 권한 등에 대한 것을 체크하고 파일 타입에 따라 Response에 모든 데이터를 전송하거나, Partial로 데이터를 전송하는데 6개월 전에 개발한 것은 파일 타입에 상관 없이 모든 데이터를 Response에 전송하고 있었다. 그와 함께 필요한 Header값도 모두 프로그램 내에서 전송하게끔 되어 있다. 동영상/오디오가 플레이는 되나, FF, Rewind가 안된다고 하니 Header 값에 문제가 있지 않나 싶어, 다른 곳과 비교를 해보니 동영상/오디오의 경우 헤더에 항상 accept-ranges: bytes가 함께 리턴되고 있었다. 이 헤더의 내용이 빠져서 동영상/오디오에서 FF, Rewind가 작동하지 않는 것이었다. FF나 Rewind 시 동영상/오디오는 서버에 필요한 부분을 다시 요청하게 되는데 서버에서 그 부분을 Seek해서 전송을 해 주어야 하는 것이다. 아래는 Youtube 예를 든 것이고, 추가적인 range 옵션이 있는데 Youtube에서는 나오지 않더라. 암튼, 두개의 헤더를 모두 포함시켜 Response로 전송해 주니 원하던대로 기능이 작동하여 Hot fix 디플로이 완료.

두개의 헤더 값에 대해 모질라 사이트의 내용을 링크

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Ranges

 

Accept-Ranges - HTTP | MDN

The Accept-Ranges HTTP response header is a marker used by the server to advertise its support for partial requests from the client for file downloads. The value of this field indicates the unit that can be used to define a range.

developer.mozilla.org

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Range

 

Range - HTTP | MDN

The Range HTTP request header indicates the part of a document that the server should return. Several parts can be requested with one Range header at once, and the server may send back these ranges in a multipart document. If the server sends back ranges,

developer.mozilla.org

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기