개요
- 지하철 승·하차수, 날씨, 공휴일 데이터를 매일 자동 수집하여 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개의 테이블로 나눠서 저장
- 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 |
- 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 |
- 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 동작 흐름
- 오픈 API 호출 (지하철, 날씨)
- 데이터 전처리 후 각 3개의 테이블로 DB 적재 (append)
- 트리거 설정
- SNS 이메일 알림 발송
AWS Lambda 함수 및 트리거 설정
- 데이터 수집이 매일, 자동화 되도록 클라우드 환경에서 코드 실행
- 트리거를 사용하여 원하는 시간에 실행되도록 설정
- CloudWatch Cron: cron(0 12 * * ? *) (UTC 12:00 → KST 21:00)
- 한국시간 기준이 아니라 UTC 기준이므로 이 점을 유의해야함
- 하나의 코드로 3개의 데이터의 수집과 전처리를 한꺼번에 실행함
SNS 이메일 알림 발송
- 성공과 실패를 실시간으로 알 수 있도록 sns 메일 알림을 설정

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