엔지니어 블로그
[DayCar] 리팩토링 일지 - 2편: 처음으로 돌아가기 본문
이전 글에서 DB 연결 코드를 손 봤었는데, 암만 생각해도 이전과 동일한 구조를 벗어나 좀 더 확장된 아키텍처를 가져가고 싶은 욕심에 아키텍처를 전면 수정하여 진행하기로 했습니다.
각 단계에 대한 설명은 아래와 같습니다.
1. 데이터 수집 - Python
기존의 데이터 수집은 Python의 Requests,BeautifulSoup을 통해 진행됐습니다. 완전 동기 방식으로 수집 되고 있어 수집 속도가 매우 느렸습니다. 속도 향상을 위해 async 방식과 Playwright 라이브러리를 선택했습니다. Playwright는 headless browser 기반이며, 비동기 병렬 처리에 특화된 도구입니다. 병렬 수집을 도입하여 더욱 빠른 속도의 수집을 기대하고있습니다.
2. Buffer를 통한 디커플링 - Redis
병렬 수집으로 진행되면서 다운스트림 작업에 병목이 우려되었습니다. 이를 해소하기 위해 Redis를 버퍼로 추가했습니다. Redis가 추가되면서 데이터 중간 저장과 이후 처리 작업간 디커플링이 가능할 것으로 보이며
3. 데이터 레이크 구축 - MinIO
기존의 수집 구조는 로컬 파일 시스템과 MySQL을 주로 사용했지만, 데이터 관리 및 분석의 확장성을 고려하여 ObjectStorage를 도입하게 되었습니다.
4. ETL - PySpark
MinIO에 저장된 원본(raw) 데이터는 PySpark를 통해 분석과 모델링에 바로 활용 가능한 형태로 정제합니다. 주요 전처리 과정은 다음과 같이 예상됩니다:
- 데이터 결측치 처리 및 컬럼 데이터 타입 표준화
- 숫자 컬럼(mileage, prices)을 정수형으로 변환
- 지역 정보 컬럼(region)을 sido, sigungu로 분리하여 표준화
- 날짜 데이터 표준화 및 분석을 위한 새로운 파생 컬럼(예: 차량 연식, 차량 연령 등) 추가
- 효율적 분석을 위해 데이터 파티셔닝(partitionBy(year_month, fuel_eng))
5. 분석 및 ML - PySpark
파이프라인 구축 이후 실제 데이터 분석을 위해 다음과 같은 작업을 수행할 수 있도록 PySpark 기반의 분석 환경을 설계했습니다.
- 연료 타입별 차량의 평균 가격 및 주행거리 등 기본적인 기술통계(EDA)
- 월별 차량 신규 등록 트렌드 및 재고 분석을 통한 비즈니스 인사이트 도출
- Gradient Boosted Trees(GBT)를 활용한 중고차 가격 예측 모델 구현
- 지리적 데이터를 활용한 지역별 가격 차이(Heatmap) 분석
이러한 작업들은 향후 데이터 기반 의사 결정 및 중고차 가격 예측 서비스 개발에 활용할 예정입니다.
향후 계획: Airflow 및 Kubernetes 기반의 운영 환경 구축
현재까지 진행한 작업들은 로컬 및 기본적인 서버 환경에서의 검증과 테스트를 목표로 하였으며, 실제 서비스 수준으로 운영하기 위해서는 다음과 같은 요소들을 추가로 도입 할 계획입니다:
- Apache Airflow를 이용한 데이터 파이프라인 스케줄링 및 자동화
- Kubernetes 환경에서 Airflow와 Spark Operator를 이용하여 자동 확장 가능한 운영 환경 구축
- GitOps(GitSync)를 활용한 DAG의 지속적인 통합 및 배포(CI/CD) 자동화 구축
- Prometheus 및 Grafana를 활용한 시스템 모니터링 및 알림 체계 구축
'개인 프로젝트 > DayCar 프로젝트' 카테고리의 다른 글
[DayCar] 리팩토링 일지 - 3편: 스크래퍼 개발 (0) | 2025.04.17 |
---|---|
[DayCar] 리팩토링 일지 - 1편: 디렉토리 구조와 DB 연결 손보기 (0) | 2025.04.10 |