[회고] 데브코스 3차 팀 프로젝트 (24.06.10 ~ 24.06.14)

2024. 6. 15. 19:32·기타/회고록

프로젝트 설명 및 회고

프로젝트 소개

깃허브 링크

 

GitHub - lv1turtle/tourist_visitation_patterns_by_weather

Contribute to lv1turtle/tourist_visitation_patterns_by_weather development by creating an account on GitHub.

github.com

진행 기간

  • 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

  • 데이터 소스
    • 기상청_관광코스별 관광지 상세 날씨 조회서비스
    • 한국관광공사_관광빅데이터 정보서비스_ GW
  • ERD

ERD

프로젝트 요약 및 기대효과

Airflow 서버 구축

  • AWS EC2 (t3.large) 인스턴스 사용
  • Airflow 실행을 위한 Dockerfile, docker-compose.yaml 제작 및 Docker Container 생성

Airflow Web UI

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

DAG Graph

  • 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와 동일

DAG Graph

  • Weather_to_Redshift
    • API를 통해 가져온 data를 Redshift로 insert
    • Task
      • get_data_by_api : API의 데이터를 데이터 프레임 형태로 저장 및 Redshift에 row 단위로 삽입

DAG Graph

Slack 알림 서비스

  • 실패 알림 : DAG에 on_failure_callback=slack.on_failure_callback 설정

Failure Alert

  • 성공 알림 : 마지막 Task에 on_success_callback=slack.on_success_callback 설정

Success Alert

DBT 활용

  • 모델링 레이어를 3단계로 나눠 단계별 가공과 품질 검증

Model

시각화

  • 2021 ~ 2022 관광객 수

  • 2024 ~ 관광객 수

  • 2021 ~ ) 계절 / 날씨 별 관광객 분포

기대효과

  • 주기적인 데이터 수집으로 최신화된 데이터로 인사이트 도출 가능
  • 강수 확률에 따른 관광객 수 및 날씨와 온도에 따른 관광객 수 파악
  • 날씨 (비, 맑음, 눈)와 계절 (봄, 여름, 가을, 겨울)에 따른 관광객의 분포 파악

KPT 회고

 

[시행착오] 데브코스 3차 프로젝트(Airflow 활용 ETL)

프로젝트에서 발생했던 오류 정리이번 데브코스에서 프로젝트를 진행하면서 발생했던 오류와 해결 과정을 정리해보려고 한다. 나는 Airflow의 DAG를 작성하는 역할을 맡았기에 데이터를 S3, Redshift

sanseo.tistory.com

Keep

  • 데브코스 프로젝트 기간 중 처음으로 직접 만나서 진행하였다. 다 같이 만나기는 힘들었지만, 확실히 오프라인 진행이 빠른 피드백과 프로젝트 이해 등 다양한 면에서 이점이 있다는 것을 알게 되었다.
  • csv 파일이 읽기에는 편하지만, 압축 효율이 좋지 않고 입출력 시간이 매우 오래 걸리는 것을 깨닫게 되었다. 그래서 3~40 MB 정도의 파일조차도 시간이 오래 걸렸다. 파일 형식에 대해 알아보고 각 파일의 장단점을 확인해 보면 좋을 것 같다.

Problem

  • 프로젝트 진행 중 발생한 오류
    1. API로 추출한 데이터를 csv로 S3에 저장 후 로컬에서 열었을 때, 한글이 깨짐
    2. Redshift에 COPY가 제대로 되지 않음 (S3ToRedshiftOperator)
    3. 웹 콘솔 접속이 가능한 S3 접근 IAM 사용자
    4. S3에서 파일을 가져오는 도중 에러 발생 (S3Hook)
  • Docker, Airflow, dbt 등 프로젝트에 처음 사용해 보는 기술이 많았지만, 서로 역할이 달랐기에 모든 요소를 이해하고 진행하기에는 어려움이 있었다. Airflow DAG를 작성했기에 이 부분은 이해도가 높지만, Docker와 dbt에서는 추가 이해가 필요하다고 생각한다.

Try

  • 프로젝트 진행 중 발생한 오류
    1. 로컬 환경에서는 한글이 깨졌지만, python으로 decode하면 확인 가능
    2. COPY 과정에서 str 형태의 데이터를 float -> int 순으로 변환 후 저장
    3. IAM 사용자에게 AmazonS3FullAccess 권한 부여 후 해결
    4. 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)  (3) 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
'기타/회고록' 카테고리의 다른 글
  • [회고] 데브코스 최종 프로젝트 (24.07.15 ~24.08.19)
  • [회고] 데브코스 3차 기간 (24.06.03 ~ 24.06.30)
  • [회고] 개인 프로젝트 - FC Online 공식 경기 분석 (24.05.25 ~ 24.06.05)
  • [회고] 데브코스 2차 기간 (24.05.06 ~ 24.06.02)
기억에 남는 블로그 닉네임
기억에 남는 블로그 닉네임
  • 기억에 남는 블로그 닉네임
    얕게, 깊게
    기억에 남는 블로그 닉네임
  • 전체
    오늘
    어제
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
    • 분류 전체보기
      • Data Engineering
        • Airflow
        • 빅데이터
        • 자동화
        • 기타
      • Infra
        • AWS
        • Terraform
        • [인프라 구축기] Terraform 활용 AWS ..
      • CS
        • 자료구조
        • 알고리즘
        • 네트워크
        • 데이터베이스
        • 이것이 취업을 위한 코딩 테스트다 with 파이썬
      • Python
      • Web
      • Git
      • 기타
        • 취업 & 진로
        • 회고록
        • 기타
      • 프로젝트 단위 공부
        • [부스트코스] DataLit : 데이터 다루기
        • [개인 프로젝트] 공모전 크롤링
        • [개인 프로젝트] FC Online 공식 경기 분..
        • 프로젝트 개선 방안
      • [프로그래머스] 데이터 엔지니어링 데브코스 3기
        • TIL(Today I Learn)
        • 숙제
        • 기타
      • 알고리즘 연습
        • 프로그래머스
        • 백준
  • 링크

    • 깃허브
    • 링크드인
  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
기억에 남는 블로그 닉네임
[회고] 데브코스 3차 팀 프로젝트 (24.06.10 ~ 24.06.14)
상단으로

티스토리툴바