프로젝트 설명 및 회고
프로젝트 소개
깃허브 링크
진행 기간
- 2024.06.10 ~ 2024.06.14 (5일)
주제
- 기상에 따른 관광지 방문 현황 파악
프로젝트 인원 구성
- 총 4명
- Airflow 서버 환경 구축, Github Action 작성
- 한국관광공사 관광지 방문자 수 API 데이터 추출 DAG 작성
- ERD 작성, dbt를 활용한 ELT 구축
- 기상청 관광지 날씨 정보 API 데이터 추출 DAG 작성
나의 역할
- 한국관광공사 관광지 방문자 수 API 데이터 추출 DAG 작성
활용 기술 및 프레임워크
- Data Processing
- Python, SQL
- Infra
- Scheduling : Airflow (2.5.1)
- ELT : dbt
- Computing : EC2
- Storage : S3 (Data Lake), Redshift (Data Warehouse)
- Visualization : Preset
- Container Management : Docker
- Collaboration Tool
- Slack, Notion, Github, Gather Town
인프라 아키텍처
데이터 소스 및 ERD
- 데이터 소스
- ERD
프로젝트 요약 및 기대효과
Airflow 서버 구축
- AWS EC2 (t3.large) 인스턴스 사용
- Airflow 실행을 위한 Dockerfile, docker-compose.yaml 제작 및 Docker Container 생성
DAG
- tourism_data_pipeline
- S3에 저장된 csv 파일에 API의 데이터를 병합하여 S3에 저장 및 Redshift에 COPY
- Task
- get_data_from_API : API에서 해당 날짜의 데이터 추출
- get_csv_from_s3 : S3에 저장돼 있는 csv 파일을 데이터 프레임 형태로 가져옴
- concat_data : S3에 저장된 csv 파일과 API에서 추출한 데이터를 병합
- save_csv_to_s3 : 병합된 데이터를 S3에 저장
- load_to_redshift : 업데이트된 데이터를 Redshift에 Full Refresh로 COPY
- tourism_data_only_COPY
- S3에 저장된 csv 파일을 Redshift에 COPY
- csv에 저장은 완료했지만, COPY가 실패했을 경우를 위한 DAG
- Task
- load_to_redshift : S3에 저장된 csv 데이터를 Redshift에 Full Refresh로 COPY
- (tourism_data_pipeline의 load_to_redshift와 동일
- Weather_to_Redshift
- API를 통해 가져온 data를 Redshift로 insert
- Task
- get_data_by_api : API의 데이터를 데이터 프레임 형태로 저장 및 Redshift에 row 단위로 삽입
Slack 알림 서비스
- 실패 알림 : DAG에 on_failure_callback=slack.on_failure_callback 설정
- 성공 알림 : 마지막 Task에 on_success_callback=slack.on_success_callback 설정
DBT 활용
- 모델링 레이어를 3단계로 나눠 단계별 가공과 품질 검증
시각화
- 2021 ~ 2022 관광객 수
- 2024 ~ 관광객 수
- 2021 ~ ) 계절 / 날씨 별 관광객 분포
기대효과
- 주기적인 데이터 수집으로 최신화된 데이터로 인사이트 도출 가능
- 강수 확률에 따른 관광객 수 및 날씨와 온도에 따른 관광객 수 파악
- 날씨 (비, 맑음, 눈)와 계절 (봄, 여름, 가을, 겨울)에 따른 관광객의 분포 파악
KPT 회고
Keep
- 데브코스 프로젝트 기간 중 처음으로 직접 만나서 진행하였다. 다 같이 만나기는 힘들었지만, 확실히 오프라인 진행이 빠른 피드백과 프로젝트 이해 등 다양한 면에서 이점이 있다는 것을 알게 되었다.
- csv 파일이 읽기에는 편하지만, 압축 효율이 좋지 않고 입출력 시간이 매우 오래 걸리는 것을 깨닫게 되었다. 그래서 3~40 MB 정도의 파일조차도 시간이 오래 걸렸다. 파일 형식에 대해 알아보고 각 파일의 장단점을 확인해 보면 좋을 것 같다.
Problem
- 프로젝트 진행 중 발생한 오류
- API로 추출한 데이터를 csv로 S3에 저장 후 로컬에서 열었을 때, 한글이 깨짐
- Redshift에 COPY가 제대로 되지 않음 (S3ToRedshiftOperator)
- 웹 콘솔 접속이 가능한 S3 접근 IAM 사용자
- S3에서 파일을 가져오는 도중 에러 발생 (S3Hook)
- Docker, Airflow, dbt 등 프로젝트에 처음 사용해 보는 기술이 많았지만, 서로 역할이 달랐기에 모든 요소를 이해하고 진행하기에는 어려움이 있었다. Airflow DAG를 작성했기에 이 부분은 이해도가 높지만, Docker와 dbt에서는 추가 이해가 필요하다고 생각한다.
Try
- 프로젝트 진행 중 발생한 오류
- 로컬 환경에서는 한글이 깨졌지만, python으로 decode하면 확인 가능
- COPY 과정에서 str 형태의 데이터를 float -> int 순으로 변환 후 저장
- IAM 사용자에게 AmazonS3FullAccess 권한 부여 후 해결
- decode를 두 번 진행해서 오류가 발생, decode를 한 번만 하도록 변경
- 프로젝트 단위는 아니어도 Docker를 사용한 Airflow 서버 구축 (Dockerfile, docker-compose.yaml, CI / CD)을 직접 해보면 좋을 것 같다. dbt 같은 경우는 데이터 엔지니어에게 우선순위가 높은 작업이 아니기에 일단 Docker를 공부해보려고 한다.
배운 점 및 아쉬운 점
배운 점
- Airflow DAG를 사용항 자동화가 Crontab보다 확실히 우월하다는 것을 느꼈다. 웹 UI와 더불어 Varible, Connection 등의 기능을 쉽게 사용할 수 있기 때문이다. 물론 설치나 관리 면에서 Learning Curve가 있는 것은 사실이지만, 익숙해진다면 Airflow의 가능성은 무궁무진하다는 것을 깨달았다.
아쉬운 점
- 팀원 모두 오프라인으로 진행하지 못한 것이 아쉽다. 모두 같이 오프라인으로 진행한다면, 높은 퀄리티의 프로젝트를 진행할 수 있을 것 같다.
'기타 > 회고록' 카테고리의 다른 글
[회고] 데브코스 최종 프로젝트 (24.07.15 ~24.08.19) (8) | 2024.09.04 |
---|---|
[회고] 데브코스 3차 기간 (24.06.03 ~ 24.06.30) (0) | 2024.06.29 |
[회고] 개인 프로젝트 - FC Online 공식 경기 분석 (24.05.25 ~ 24.06.05) (2) | 2024.06.08 |
[회고] 데브코스 2차 기간 (24.05.06 ~ 24.06.02) (0) | 2024.05.28 |
[회고] 데브코스 2차 팀 프로젝트 (24.05.13 ~ 24.05.17) (0) | 2024.05.20 |