📄코딩 문제 추천 서비스 산타백준
부스트캠프에서 마지막 최종 프로젝트를 진행하였다. 최종 프로젝트 주제는 "산타 백준"이다. 산타 백준이라는 이름에서 어느정도 짐작할 수 있겠지만, 산타 토익 + 백준의 합성어이다. 산타 토익처럼 백준의 문제를 추천해주겠다는 취지로 작명을 하였다.
주제에 대해 조금 더 자세히 설명하자면 산타 백준은 코딩 테스트를 준비하는 사람을 위해 실시간으로 백준 문제를 추천해주는 웹 서비스이다. 개발자 열풍이 불면서 코딩 테스트 통과에 대한 수요 또한 증가하였는데, 우리 서비스는 사용자의 수준에 맞춰서 백준 문제를 추천해준다.
원래는 서비스 전체 아키텍처 그림을 공개하고 시작하는데 아무래도 다른 분들과 같이한 팀 프로젝트이니만큼 해당 아키텍처에 대해서는 블로그에서 공개하지는 않고, 나중에 깃허브를 통해 공개할 예정이다.
🙎♂️나의 역할
여기서 나는 데이터 정의서 작성, ETL 데이터 파이프라인 및 DB 설계 및 구축, 모델 재학습 스케줄링의 역할을 맡았다. 장황하게 쓰여있긴 하지만 데이터를 크롤링하고 저장하는 데이터 파이프라인을 구축했다고 생각하면 될 거 같다.
사실 해당 프로젝트 자체가(아니 부스트캠프 자체가) 추천 모델링에 더 중점을 두고 있기 때문에 어떻게 하면 데이터 엔지니어링을 가미시킬 수 있을까 고민이 많았다. 그 중 이 프로젝트에서 가장 중요한 데이터를 어떻게 하면 효율적으로 조달할 수 있을까에 대해 고민해보면 좋겠다고 생각하였고, 데이터 수집에 ETL을 적용해보자는 생각으로 프로젝트에 임했다.
🔧아키텍처
서비스 전체 아키텍처는 공개하기 힘들지만 내가 한 업무에 대해서는 공개할 수 있겠다고 생각하여 내가 한 부분에 한해서 한정적으로 아키텍처를 공개하려고 한다.
아키텍처가 2장인 이유는 사실 CI/CD 같은 경우는 그렇게 대단한 기능이 있지 않아서 Data pipeline 아키텍처에 합칠 수도 있었지만, 그렇게 하면 그림이 너무 난잡해질 거 같아 분리하다보니 2장이 되었다. 그래도 이왕 분리한 김에 따로 설명을 해보도록 하겠다.
Data pipeline
Data Pipeline부터 구조를 한 번 살펴보도록 하자. 우선 가장 중요한 것은 데이터를 크롤링하는 것이다. 데이터를 크롤링 할 수 있는 코드를 만들어놓고, 이를 부스트캠프에서 제공한 서버를 이용해 수집한다. 여기서 데이터 수집 시간의 단축을 위해 3개의 서버에서 분산하여 크롤링을 진행하였다.
그리고 이 모든 과정은 Airflow를 이용하여 스케줄링하였다. 마스터 노드는 GCP를 이용해 따로 두고, Celery를 이용하여 실제 크롤링 작업을 수행하는 워커 노드들을 병렬로 실행하게끔 하였다.
수집된 데이터는 다시 마스터 노드로 가져와 간단한 변환 작업을 거치고, 이를 Google Cloud Storage(GCS)에 저장한다. GCS에 저장된 데이터는 마지막에 빅쿼리에 저장하고, 이를 모델에 전달한다. 또한 작업의 실패나 성공 여부를 알기 위해 슬랙과 연동하여 메시지를 보내도록 하였다.
CI/CD
Celery를 이용하여 병렬처리를 할 때 가장 귀찮은 점이 실행할 DAG가 마스터 노드와 워커 노드 모두 동일하게 있어야 한다는 것이다. 이를 해결하기 위해 팀원들과 상의한 결과 Jenkins를 이용하여 코드를 동기화시키는 것이 좋겠다는 의견이 나와서 이를 적용하기로 했다.
아키텍처를 보면 알 수 있듯이, 작성한 DAG를 github에 저장하고 Jenkins에서 빌드를 실행하면 자동으로 모든 노드에 코드가 자동 배포되도록 설정하였다. 그리고 이 또한 해당 작업이 성공하거나 실패할 때 슬랙에 메시지가 가도록 연동하였다.
⏩다음은?
간단하게 데이터 파이프라인 아키텍처를 알아보았다. 사실 말만 장황하지 그렇게 대단한 작업이 아니다😅 많은 분들에게 조언을 받아서 완성하긴 했지만 아직도 많이 부족한 거 같다...
앞으로의 포스팅은 내가 작업을 수행했던 과정대로 쭉 글을 작성할 거 같다. 그래서 다음 포스팅은 아마 데이터 크롤링 작업을 어떻게 수행했는지와 파이프라인 구축은 어떤 식으로 도안을 그렸는지에 대해 작성할 거 같다! 아직 갈 길이 멀었지만 열심히 달려보도록 하자...!!!
'프로젝트 > 산타 백준 프로젝트' 카테고리의 다른 글
산타 백준 프로젝트 (2) - Airflow를 이용한 분산 웹스크래핑 | 빅쿼리 구축 (0) | 2022.07.01 |
---|---|
산타 백준 프로젝트 (1) - 데이터 정의와 스크래핑 (0) | 2022.06.11 |