[삼성청년SW아카데미] 드라마영화지도

2023/08/19 ~ 2023/10/06GitHub

역할 프론트엔드 (총 6인)

요약 국내의 영상 매체를 분류한 아카이브 지도 (삼성 청년 SW 아카데미)

프로젝트 개요

전체 기간 2023. 08. 20 ~ 2023. 10. 13

학습 및 데이터 추출, 기획 ~ 2023. 09. 15

개발 ~ 2023. 10. 13

  • 개발 완료 이후 GitLab을 미러링한 Github이어서, Merge Request 및 코드리뷰 기록이 없는 상태입니다.

프로젝트 환경 및 조건

  • “빅데이터 - 분산” 기술 사용이 과제였습니다. 저희 팀은 한국의 영상물과 관계자(출연 배우 및 감독, PD, 작가, 직원 등)를 분석해 관계를 도출하는 것이 목표였습니다.

  • 1차 목표는 아카이브를 만들어 검색 기능을 만드는 것이었고, 2차 목표는 관계 도출을 성공시켜 영상물간의 지도를 그리는 것이었습니다.

  • 프론트엔드 2명, SPARK(분산처리) 담당 1명, 백엔드 담당 1명, API 스크래핑 및 ELK 관련 담당 1명, 인프라 담당 1명, 구성된 팀이었습니다.

  • 저는 프론트엔드 리드를 맡았습니다.

주요 기능 및 작동 화면

  • 통합 검색 기능을 제공합니다.

  • 드라마 및 영화의 경우 제목, 장르, 출연진, 키워드, 줄거리, 개봉(방영) 시기, 채널, OTT, 시청등급, 배급사로 검색할 수 있습니다.

  • 인물의 경우 이름, 대표분야, 성별, 연령, 활동연대로 필터해 검색할 수 있습니다.

검색창 (드라마 및 영화)
검색창 (드라마 및 영화)
검색창 (인물)
검색창 (인물)
검색 결과 (더 글로리)
검색 결과 (더 글로리)
  • 5분마다 랜덤으로 한국의 드라마/영화/TV 프로그램 하나를 중심으로, 관련 작품의 그래프를 제공합니다.

React와 d3.js가 렌더링한 Force-directed graph
React와 d3.js가 렌더링한 Force-directed graph

프로젝트 목표

  • 큰 데이터를 한 번에 처리할 때 오는 병목현상을 백엔드와 프론트엔드 각각에서 어떻게 처리할지를 고민해보는 시간을 가지고 싶었습니다.

  • 처음부터 Next.js 사용을 고려한 것은 아니었으나, 페이지 렌더링을 고민하다 ISR 및 Module Federation을 고려하게 되었습니다.

  • 당초 기획은 구글 지도처럼 완벽한 하나의 지도를 완성해내는 것이었지만, 기술의 한계로 랜덤한 지도의 한 조각을 보여주는 것으로 선회했습니다.

  • Module Federation을 구축해 프로젝트를 시연하는 것 자체는 성공했지만, Next.js와 Module Federation에 대한 이해 부족으로 제대로 사용하는 데는 실패했습니다.

    • ISR로 생성된 페이지는 Module Federation으로 Expose할 수 없었기 때문입니다.

프로젝트 기여

  • 그래프를 어떻게 표현해야 할지 아이디어를 잡고, 그래프 개형을 설계했습니다.

  • Framer로 와이어프레임을 그렸습니다.

  • 와이어프레임을 분해해 주요 컴포넌트를 구현했습니다.

  • Module Federation을 통해 프로젝트 아키텍처를 구축했습니다.

  • 프로젝트의 지도 부분을 D3.js를 사용해 구현했습니다.

러닝 포인트

  • Next.js를 처음 사용해 보며, Hydrated SSR과 ISR에 대해 익히고 어떤 곳에서 어떤 렌더링 방식이 적합한지 고민해볼 수 있었습니다.

  • 프론트엔드에서 서버를 사용할 수 있을 때 더 능동적으로 문제를 해결할 수 있게 된다는 사실을 알았습니다.

  • 프론트엔드 또한 시스템과 도메인을 반영하기 위해 아키텍처를 선택할 수 있다는 것을 알게 됐습니다.

  • 해결해야 하는 문제가 있을 때 결과를 예측할 수 없다면 주저하지 말고 빠르게 실험해 보는 것이 좋은 방법이라는 생각을 하게 되었습니다.