국내 박스오피스 영화 포스터 이미지 호출(Project KOBOP) 제작기
Project KOBOP(KOrean Box Office Poster)
한국 박스오피스 박스오피스 포스터 이미지 호출
발단
영화관 페이지를 만드는데 첫 화면에서 영화 포스터를 보여주고 싶었다. 그저 이미지를 다운로드 받아서 넣을 수도 있었지만, 다른 방법을 원했다.
포스터 이미지 제공처 탐색
- IMDB: 세계 최대 영화 정보 데이터베이스 | 이미지 제공 확인 불가, 일부 서비스 유료(AWS)
- OMDB: 오픈소스 영화 정보 데이터베이스 | 한국 영화 검색 어려움
- Rotten Tomatoes: 영화 리뷰 사이트 | 관리되지 않는 개발자 페이지
- TMDB; 영상 정보 데이터베이스 | 오픈소스, 국내 영화 검색 가능, 관리된 개발자 문서
선택은 명확했다. TMDB를 사용하여 포스터 이미지를 제공받기로 했다. 그러나 그대로는 사용할 수 없었다. TMDB의 영화뿐만 아니라 TV 프로그램, OTT등의 다양한 영상을 제공하기 때문에, 조건을 수정해도 국내 박스오피스 순위와 일치시킬수 없었다. 결국 순위는 영화진흥위원회에서 포스터 이미지는 TMDB에서 얻도록 결정했다.
1차 시도 - 국문 영화명 조회
1차 시도에서는 영진위의 일별 박스오피스에서 어제 날짜의 박스오피스 국문 영화명을 얻는다. 국문 영화문을 TMDB의 SEARCH - Movie의 Query로 전달하여 포스터 이미지 경로를 받는다.
기술적 고려사항 - URL 인코딩
TMDB에서 국문 영화문을 URL 인코딩을 거쳐 요청한다. 나는 전체 URL이 아닌 Query Parameter인 국문 영화명을 인코딩하기 때문에 encodeURIComponent()를 사용했다. (전체 URL을 인코딩할 때는 encodeURI()를 이용한다.)
문제점 - 국문 영화명의 띄어쓰기 차이로 인한 검색 가능 여부
분명히 같은 영화, 같은 이름을 요청했는데 TMDB에서는 요청에 응답하지 못했다. 원인은 영진위와 TMDB에 등록된 이름에 차이가 있기 때문이었다. 예를 들어, 영진위에 "듄: 파트2"로 되어있고, TMDB에서는 "듄: 파트 2"로 등록되어 있다. 영진위에서는 두가지 모두 검색이 가능하지만, TMDB에서는 그렇지 못했다. 예상하건대, TMDB가 영미권 기반이라 한국어 검색에는 유연하지 못했던것 아닐까 추측해본다. 그래서 2차 시도에서는 일별 박스오피스 응답의 개봉연도를 추가해서 요청해봤다.
2차 시도 - 국문 영화명 + (개봉) 연도 조회
2차 시도에서는 영진위의 일별 박스오피스에서 국문 영화명과 개봉 날짜를 얻는다. 개봉 날짜에서 연도를 별도로 추출한다. 그리고 TMDB에 국문 영화명과 추출한 연도를 전달한다.
TMDB에 입력할 수 있는 연도가 두가지가 있다. 바로 primary_release_year과 year이다.
- primary_release_year: 최초 개봉 연도
- year: 영화가 개봉된 모든 연도. 디지털 및 물리적 출시일을 포함
재개봉을 포함한 좀 더 다양한 연도에 대응하기 위해 year으로 요청했다.
문제점 - 재개봉 영화 조회 불가
재개봉 영화의 경우 TMDB에 Release Dates로 연도가 등록된다. 예를 들어 패왕별희는 1993년 최초 개봉부터 2017-2020-2021-2022 재개봉 까지 기록되어 있다. 안타깝게도 2024년 4월 재개봉 기록은 등록이 되어있지 않다. 이는 TMDB가 사람들의 참여로 완성되는, 일종의 위키(wiki)이기 때문에 누군가의 선의에 기댈 수 밖에 없다. 이는 정보가 최신화 될 때마다 조회되는 내용이 변경될 수 있음도 시사한다.
3차 시도 - 영문 영화명 조회
3차 시도에서는 영진위 일별 박스오피스에서 영화 주요코드를 받아서 영진위 영화 상세정보의 영문 영화명을 받는다. 이를 TMDB Query로 전달한다.
여기서 한 가지 난관이 있었다. 각 API에 해당하는 함수의 API 호출 결과를 별도의 배열에 저장하여 return으로 전달했는데, 다음 함수에서 받지 못하는 문제가 있었다. 그래서 별도의 배열을 만들지않고, return에 배열 구조를 그대로 return하니 제대로 넘어갔다. 또한 기존 시도보다 한 단계가 더 늘어나니 비동기에 대하서 좀 더 유의해야 했는데, Promise에 대한 배움이 더 필요하다고 느꼈다.
KOBOP의 한계
- 동일한 이름의 영화는 아직도 정확하게 찾아주지 못한다.
- 포스터 이미지는 TMDB 기여자들의 선의에 의지한다.
- 실시간이 아니다. 영화 종사자들은 별도시스템으로 이런 정보를 얻는 것으로 알고 있다.
Netlify 배포 - 시도 중
GitHub Repository만 있으면 쉽게 배포할 것이라고 생각했지만 그렇지 못했다.
프론트엔드에서 API키를 숨길 수 있는 방법이 없기에, 일부러 form으로 키를 받고자 했지만, 현실은 사용자가 제출한 키를 Netlify 서버와 소통할 수 있는 방법이 없었다. 환경 변수를 활용해야 하는지, 배움이 더 필요하다.
댓글
댓글 쓰기