데이터 생존 로그

n8n 자동화 프로젝트③ - 워크플로를 통한 버스 실시간 위치 데이터 수집 본문

카테고리 없음

n8n 자동화 프로젝트③ - 워크플로를 통한 버스 실시간 위치 데이터 수집

분석가 베어그릴스 2025. 3. 16. 16:01

* 이 글은 data popcorn에서 진행하는 n8n 스터디 2기에 참여하고 그 과정을 글로 남긴 게시글입니다.


이번 게시글에서는 n8n 워크플로우를 활용하여 버스 실시간 위치 데이터 수집하는 과정을 담았습니다.

- 저번 게시글1: https://analyst-ggom-chi-kim.tistory.com/26

- 저번 게시글2: https://analyst-ggom-chi-kim.tistory.com/27

 

전체 워크플로우 Overview

 

위 n8n 워크플로우는 버스 실시간 위치 데이터를 수집하고 이를 Google Sheets에 저장하는 과정을 담고 있다.

 

주요 기능:

  • 경기도 공공데이터 API에서 특정 노선의 실시간 버스 위치 정보를 가져옴
  • 데이터는 일정 시간 간격(3분)으로 업데이트
  • 수집된 정보는 Google Sheets에 기록됨

 

노드별 주요 기능 및 역할

  1. Schedule Trigger (트리거)
    • 매 3분마다 워크플로우를 실행
  2. If 노드 (시간 조건 확인)
    • 특정 시간대(02:00 ~ 05:00) 사이에는 데이터를 가져오지 않도록 필터링
  3. HTTP Request (버스 정보 요청)
  4. Split Out (데이터 분할)
    • API 응답 중 busLocationList 필드를 개별 항목으로 분리
  5. Edit Fields (데이터 가공)
    • timestamp 필드를 추가하여 데이터의 수집 시간을 명시
  6. Date & Time (날짜 형식 변환)
    • timestamp 값을 yyyy-MM-dd HH:mm:ss 형식으로 변환
  7. Merge (데이터 통합)
    • 기존 API 응답 데이터와 변환된 날짜 정보를 병합
  8. Google Sheets (데이터 저장)
    • 가공된 데이터를 Google Sheets의 bus_data 시트에 저장
    • 기록되는 데이터:
      • plateNo (버스 번호판)
      • remainSeatCnt (남은 좌석 수)
      • stationId (현재 정류장 ID)
      • stationSeq (정류장 순번)
      • timestamp (데이터 수집 시각)

 

단계별 동작 방식 설명

1️⃣ 스케줄 트리거 실행

  • 3분 간격으로 자동 실행

2️⃣ 시간 필터링

  • 만약 현재 시간이 02:00 ~ 05:00 사이라면, 데이터 요청을 중단

3️⃣ 버스 위치 정보 요청

  • API를 호출하여 노선의 모든 버스 정보를 가져옴

4️⃣ 데이터 분할

  • 여러 개의 버스 데이터를 각각 개별 항목으로 분리

5️⃣ 필드 추가 및 날짜 변환

  • 현재 시간(timestamp)을 추가하고, 읽기 쉬운 날짜 형식으로 변환

6️⃣ 데이터 병합

  • 변환된 날짜와 API 응답 데이터를 병합

7️⃣ Google Sheets에 저장

  • 정제된 데이터를 bus_data 시트에 추가

 

출력물 형태

실행 결과

  • 3분마다 Google Sheets에 새로운 버스 운행 데이터가 기록

 

출력 예시 (Google Sheets에서 확인 가능)

plateNo remainSeatCnt stationId stationSeq timestamp
경기1234 5 100200 12 2024-03-16 12:00:00
경기5678 2 100201 13 2024-03-16 12:03:00

 

결과 확인 방법

  • Google Sheets (bus_data 시트)에서 데이터를 실시간으로 확인할 수 있음
  • 필요 시 해당 데이터를 활용하여 분석 및 시각화 대시보드를 구성할 수도 있음

 

해당 데이터를 이용하여 분석한 사례: https://analyst-ggom-chi-kim.tistory.com/28

 

 

 

 

 

 

 

 

반응형
Comments