플레이데이터 부트캠프 데이터 엔지니어링 트랙 24주차 (11.13~11.17)

안인균·2023년 11월 20일
0
post-thumbnail

파이널 프로젝트를 제대로 진행한 지 2주차, 총 수업으로는 24주차가 되었습니다. 지난 주까지 "머신 러닝 학습"에 필요한, 그리고 웹 페이지를 구성하는데 필요한 뮤지컬 데이터들(past, present 등)을 크롤링했습니다.
이번 주는 웹 서비스의 추가 기능에 필요한 주요 뮤지컬 예매 사이트, '인터파크, 티켓링크, 예스24티켓' 의 랭킹 데이터 크롤링을 진행했고, 이를 Airflow로 구현하는 것 까지 진행했습니다. 이후에는 백엔드 개발을 진행했고, 받아온 랭킹 데이터를 이용해 랭킹 페이지 구현과 대용량 데이터인 musical_past 테이블의 데이터를 받아오는 환경을 만들었습니다.


✅이번 주 활용 내용✍

  • 예스24티켓 사이트의 랭킹 데이터 크롤링 완료했습니다.

    • AJAX 통신을 통해 랭킹 데이터가 담긴 API를 찾아
    • 해당 url과 payload 값을 넣고 requests 와 BeautifulSoup 을 통해
    • 각 항목의 데이터를 파싱했고 각 변수에 저장해 데이터프레임에 저장하는 것을 완료했습니다.
    • payload 값에 오늘 날짜 값이 필요해 이는 datetime 모듈을 통해 날짜가 바뀔 때마다 자동으로 동기화되도록 할 수 있었습니다.
  • 앞으로 Backend 구현과 DB 구현, Airflow 구현 등에 참여하게 될 것 같고, 각각을 서버에 배포하는 학습을 위주로 하여 프로젝트가 자동으로 운영될 수 있도록 할 것 입니다.

  • 크롤링한 랭킹 데이터를 AWS RDS 에 저장 완료했습니다.

  • 백엔드 개발 관련 시작했습니다.

    • 랭킹 테이블을 이용해 데이터를 받아 웹으로 띄우는 것을 진행할 것 입니다.
    • 관련 Entity, Repository, DTO, Service, Controller 등의 구조를 만들고 테스트를 진행했습니다.
  • ML과 웹 서버 등이 어떻게 소통하고, 웹에서 이루어질 액션에 대한 회의를 진행했습니다.

    • 기존에 ML 서버에서 웹으로 전달된 내용의 데이터를 DB에 저장함으로써
    • ML 서버에서 직접 받을 데이터는 "현재 공연 중인 뮤지컬 작품 중 추천 작품"의 ID 값만 받아 DB로 조회한 후 결과 창에서 보여주는 식으로 협의했습니다.
  • 웹 랭킹 리스트를 띄우는 코드 작업을 시작했습니다.

  • Web 개발을 진행했습니다.

    • 현재 구상한 웹 동작 방식을 다같이 다시 한번 검토하고
    • WebApp repository 도 다시 검토하여 main branch(최종 배포 버전) 이전에 테스트하고 코드 merge를 할 1.0.0/dev branch 를 따로 만들어서 개발을 진행했습니다.
  • 웹에서 사용하게 될 Musical_past, present, rank 테이블을 DB에서 확인했으며, past 의 데이터를 전부 가져와 웹으로 전달하는 것 까지 진행했습니다.

    • 해당 과정을 진행하면서 웹 로딩이 너무 오래 걸려 멘토님한테 피드백을 받았는데
    • log 값 확인을 위한 것과 DEBUG 창들을 띄우느라 평소보다 더 오래 걸렸음을 알 수 있었고
    • 이를 수정하니 시간 단축이 되어 만족할만한 결과 값을 얻을 수 있었습니다.

😄어려웠던 점😭

  • Airflow 관련 서버 띄우는 것을 어떻게 진행할 지 고민입니다.
  • Airflow 관련 Docker 작성을 할 지 결정 해야 할 것 같습니다.
  • 프론트에서 처음 다뤄보는 Tymeleaf 를 익히느라 시간이 많이 소요됐습니다.
  • 처음에 Musical_past 테이블을 불러오는데 웹 로딩 시간이 오래 걸려 이 점을 해결하는데 어려움을 겪었습니다. 멘토님의 도움으로 해결할 수 있었습니다. 대용량의 데이터를 확인하는데 쓰인 log.info() 로 인해 오래 걸렸으며, application.properties의 logging.level.org.hibernate=DEBUG 로 인해 데이터를 전부 터미널 창에 띄우느라 오래 걸렸음을 알 수 있었습니다. 이를 수정하니 한결 수월했으며,
    이후에는 전체 데이터를 굳이 다 가져올 필요가 없었기 때문에 Service 에서 Pageable 객체를 통해 원하는 만큼만 웹으로 가져올 수 있었습니다.

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

  • 웹, 세션 등을 개발하는 것을 진행할 예정입니다.
  • 백엔드 개발 코드들을 Domain 방식으로 코드들을 분리 작업할 예정입니다.
  • 프론트 공부를 통해 웹에 데이터를 잘 보여줄 방식에 대해 고민 해야 할 것 같습니다.

0개의 댓글

관련 채용 정보