1 분 소요

개요

  • 지하철 승·하차수, 날씨, 공휴일 데이터를 매일 자동 수집하여 AWS Lambda로 처리하고, RDS(PostgreSQL)에 적재하도록 구현함
  • 스케줄링은 CloudWatch Events를 이용했으며, 성공/실패 여부는 SNS 이메일 알림으로 확인할 수 있도록 설정했음

1. 데이터 수집 및 전처리

수집 대상

  • 지하철 승하차수: 서울열린데이터광장, “https://data.seoul.go.kr/dataList/OA-12914/S/1/datasetView.do”
    • 일별, 호선별, 역별 승하차수
  • 날씨: 공공데이터포털, “https://www.data.go.kr/data/15084084/openapi.do”
    • 기온, 풍속, 강수, 습도
  • 공휴일: holidays 파이썬 라이브러리를 이용해 공휴일 여부 플래그 생성
    • 일별 요일, 공휴일여부, 공휴일 이름

전처리 주요 작업

  • 총 3개의 테이블로 나눠서 저장
    1. subway_stats
    • 컬럼명 친화적으로 변경
    • 승차, 하차를 melt 작업
    날짜 호선 역명 갱신일 구분 인원수
    2025-08-06 경인선 동암 2025-08-09 하차 14315
    2025-08-06 경인선 백운 2025-08-09 하차 6430
    2025-08-06 경인선 부평 2025-08-09 하차 29128
    2025-08-06 경인선 송내 2025-08-09 하차 24723
    2025-08-06 경인선 부천 2025-08-09 하차 29135
    2025-08-06 경인선 역곡 2025-08-09 하차 23964
    2025-08-06 경인선 오류동 2025-08-09 하차 10166
    2025-08-06 경인선 개봉 2025-08-09 하차 21267
    2025-08-06 경의선 운천 2025-08-09 하차 2
  1. weather_stats
    • 컬럼명 친화적으로 변경
    • 기온, 풍속, 강수, 습도를 melt 작업
날짜 시간 구분
2025-08-10 1700 기온 32.5
2025-08-10 1600 기온 32.8
2025-08-10 1500 기온 33.0
2025-08-10 1400 기온 32.4
2025-08-10 1300 기온 31.7
2025-08-10 1200 기온 30.4
2025-08-10 1100 기온 29.5
2025-08-10 1000 기온 28.1
2025-08-10 0900 기온 26.7
2025-08-10 0800 기온 24.8
  1. holidays_stats
    • 컬럼명 친화적으로 변경
날짜 요일 공휴일 여부 공휴일명
2025-06-10 false  
2025-06-09 false  
2025-06-08 false  
2025-06-07 false  
2025-06-06 true 현충일
2025-06-05 false  
2025-06-04 false  
2025-06-03 true 대통령 선거일
2025-06-02 false  
2025-06-01 false  

2. 데이터 적재

  • 위에 3개의 테이블을 매일 데이터 수집하여 AWS RDS에 적재
  • PostgreSQL를 이용하였으며, 모두 append 하여 데이터가 쌓이도록 설정

3. AWS Lambda + CloudWatch + SNS 자동화

Lambda 동작 흐름

  1. 오픈 API 호출 (지하철, 날씨)
  2. 데이터 전처리 후 각 3개의 테이블로 DB 적재 (append)
  3. 트리거 설정
  4. SNS 이메일 알림 발송

AWS Lambda 함수 및 트리거 설정

  • 데이터 수집이 매일, 자동화 되도록 클라우드 환경에서 코드 실행
  • 트리거를 사용하여 원하는 시간에 실행되도록 설정
    • CloudWatch Cron: cron(0 12 * * ? *) (UTC 12:00 → KST 21:00)
    • 한국시간 기준이 아니라 UTC 기준이므로 이 점을 유의해야함
  • 하나의 코드로 3개의 데이터의 수집과 전처리를 한꺼번에 실행함

SNS 이메일 알림 발송

  • 성공과 실패를 실시간으로 알 수 있도록 sns 메일 알림을 설정

sns 메일 알림

데이터 확인

  • Dbeaver을 AWS RDS와 연결하여 수집된 데이터를 볼 수 있음
select * from public.subway_stats ss order by 1 desc;