23주차가 되었습니다. 파이널 프로젝트가 시작되면서 처음 주제 선정에 어려움이 있었지만 극복하고 "개인 성향 맞춤 뮤지컬 추천 사이트" 개발로 방향성을 잡았습니다. 사용자는 '뮤지컬을 처음 보는 사람들'에게 그들이 여태 봐왔던 미디어 컨텐츠의 성향에 맞추어 뮤지컬을 추천하고 잘 입문할 수 있도록 하고자 개발을 시작했습니다.

각자 개발 파트를 나누어 작업을 시작했고, 저는 '웹과 데이터 크롤링-DB' 쪽 두 분야를 맡기로 했습니다. 처음 부여 받은 "Tech leader" 포지션인만큼 맡은 개발파트만이 아니라 전체적으로 진행 속도를 확인하고 필요해 보이는 곳에 도움을 줄 예정입니다. 또 지속해서 서비스 구현을 어떻게 할 지를 구상하면서 개발에 힘쓰고 있습니다.


✅이번 주 활용 내용✍

  • 매일 "Daily meeting"을 통해 각자 하고 있는 진행 상황을 공유하고 앞으로 어떻게 할 지 계획도 수정했습니다.

  • 주에 한번 Weekly Review 를 통해 각 개발 분야별 진행 상황과 작성한 코드들을 설명하는 시간을 가졌습니다.

    • 서로 협업을 위해 알아야 할 내용들이 공유되어 앞으로 진행 과정에 있어서 큰 도움이 될 것 같습니다.
  • 1차 임시로 개발한 Spring boot 웹 뷰 를 배포하는 작업을 수행했습니다.

    1. Dockerfile 을 작성해 해당 웹이 잘 돌아가는 지 테스트를 진행했습니다.
    2. $ docker stats 를 통해 해당 컨테이너의 리소스 사용량을 확인했습니다.
    3. 확인 결과 메모리가 상당히 많이 소모되어 fly.io 로 계속 배포하기에는 무리가 있다 싶어 추후에 AWS로 배포하기로 하고, 우선은 fly.io로 배포하여 웹 공유를 진행했습니다.
    4. 기존의 자바 버전(11버전) 이 아닌 17버전을 사용했기에 사용 중인 리눅스 환경에 jdk 17버전을 버전 다운 받고 Maven으로 빌드해 jar 파일로 배포를 마칠 수 있었습니다.
    • ✅ 웹 페이지 구성 관련 설계 및 1차 임시 테스트 배포 완료 -> 추후에 AWS 를 통해 배포 예정
  • 데이터 크롤링 진행

    • 1차로 시도했던 "인터파크 티켓" 사이트를 이용해 데이터 크롤링을 했으나 데이터 관련 API들이 막혀있었고, 관련 정보들이 이미지 사진으로 되어있어 실패했습니다.

      • 팀원이 이미지를 텍스트로 전환하는 아이디어를 이용해 시도했는데 데이터는 잘 가져오나 모든 뮤지컬 포스터 이미지의 내용 구분에 어려움이 있어 실패했습니다.
    • 처음으로 돌아가 서비스 구성을 다시 생각해보고 머신러닝 학습에 필요한 자료들을 제공하는 것이 첫 시작인데 지금 하려는 데이터 크롤링은 현재 공연 중인 뮤지컬만 대상으로 진행했습니다.
      이는 머신러닝 학습의 학습 자료 수가 매우 적을 것으로 생각되며 따라서 전체 뮤지컬들, 과거에 한국에서 공연했던 뮤지컬들의 데이터도 필요하다고 생각되어 크롤링 대상 사이트를 "PlayDB" 사이트로 변경했습니다.

    • 해당 사이트에서 2007년이전에 공연한 뮤지컬들과 2008년, 2009년, ... 현재까지 공연하는 뮤지컬 데이터들을 확인할 수 있어 이를 대상으로 크롤링 시도했고,
      각 뮤지컬 작품의 고유 ID 값을 확인한 후 이를 이용하면 각 세부사항까지 추출할 수 있을 것으로 예상되어 우선 각 뮤지컬 ID값을 가져오는 작업을 수행했습니다.

  • PlayDB 사이트에서 사용되는 각 뮤지컬 ID 값을 통해 세부 데이터를 크롤링하는 작업을 수행했습니다.

    • DB 설계 : (저장되는 데이터가 사용되는 곳, 웹과 머신러닝 학습) 을 고려해 컬럼 값들을 선정했습니다.
    • 컬럼 -> 뮤지컬 ID, 작품명, 장르, 공연날짜, 공연장소, 출연배우, 관람 나이, 관람 시간, 작품 설명, 줄거리
    • 이후 크롤링을 진행했는데 사이트에 저장되어 있는 html 데이터가 제각각이며, 이에 대해 각각을 예외 처리하는 코드를 작성하는데 시간이 소요되었습니다.
    • 크롤링 과정에서 없는 데이터는 Null 로 처리하고 이후 머신러닝 학습에서 어떻게 대처할 지를 생각하기로 정했고 mock.csv 를 만들어 약 100개 정도의 데이터를 통해 머신러닝 학습 테스트 진행을 하기로 했습니다.
    • 이후 전체 약 2만개의 뮤지컬 작품에 대한 웹 크롤링을 구동시켰습니다.
  • 뮤지컬 데이터 크롤링을 한 결과를 구글 드라이브에 공유했고, 추가적으로 서비스 화면에 랭킹 지표가 있으면 좋겠다는 의견이 있어 이를 반영해 뮤지컬 예매 사이트 대표 4군데의 1~10위 일간 랭킹 지표를 가져오는 코드를 작성하고 있습니다. -> "인터파크 티켓, 티켓링크, 예스24티켓, PlayDB" 사이트

    • Airflow 를 통해 일정 주기마다 데이터를 업데이트하는 식으로 구현하려고 합니다.
  • 일요일에 있을 기획 관련 멘토링 피드백 준비를 했습니다.

    • 각 파트별 진행 상황 정리
    • 프로젝트 서비스 구현도를 그려 프로젝트의 서비스가 어떻게 진행되는 지를 표현.

    [프로젝트 서비스 구현도]

image

😄느낀 점😭

  • 웹 데이터 크롤링을 하면서 많은 어려움을 겪었습니다. 지난 크롤링에 비해 난이도가 높은 크롤링이었습니다. 웹 사이트를 이루고 있는 html 코드에 저장되어 있는 주요 데이터 항목에 대한 class명, tag명들이 기재 되어 있지 않았고, 각 뮤지컬마다 없는 내용, 동일한 항목이지만 다르게 저장되어 있는 이름들 때문에 쉽지 않았습니다. 이를 보면서 웹 개발을 할 때 이런 점들을 주의하면서 해야겠다고 생각했습니다.
  • 추출해온 데이터에서 빈약한 부분들이 있어 기존에 하려고 했던,
    "전체 뮤지컬 데이터를 이용해 머신러닝 학습, 유사도 학습을 통해 사용자 취향에 맞춘 뮤지컬들을 선정하고 선정된 뮤지컬들을 검색 크롤링을 이용해서 현재 공연 중인지 아니면 공연 예정인 지를 파악해 다시 웹으로 보내 보여주는 것",
    내용을 하기가 어려워 보였고, 실시간으로 검색 크롤링을 구현하는 것보다 시점을 정해 해당 시점에 공연 중이었던 뮤지컬들을 따로 추출-저장하여 그 안에서 추천하는 쪽으로 가는 것이 어떨 지에 대한 논의가 진행되었습니다. 당장에 결정된 사안이 아니었기에 이 점을 고려해 따로 데이터 추출용 코드와 save file을 만들었고, 이후 프로젝트 진행하면서 조정하기로 결정했습니다.
    경험이 많지 않아 확실한 의견을 내기엔 예측불허했고 이런 경험들이 나중에 성장하는데 큰 도움이 될 것 같습니다.

🚩마무리 및 앞으로의 계획🚀

  • 인터파크와 티켓링크의 랭킹 데이터를 가져오는 것은 완료되었고, 예스24티켓, PlayDB 사이트의 랭킹 데이터를 가져올 것 입니다.

  • 랭킹 DB 설계도 하고 Airflow 구현을 할 예정입니다.

생각보다 프로젝트 진행이 원활하게 되고 있다고 생각합니다. 물론 아직 부족한 점들이 많고 '이런 거 해보면 어떨까' 하는 욕심이 생기지만 기한이 정해져 있는 프로젝트인만큼 그 안에 다 할 수 있는 것까지 확실하게 완벽한 프로젝트 서비스를 만드는데 노력할 것 입니다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN