기술과 산업/AI

Apache NiFi 시리즈 4회 - JSON 데이터를 분기 처리하는 방법

B컷개발자 2025. 5. 12. 21:00
728x90

Apache NiFi의 EvaluateJsonPath Processor를 사용하여 JSON 데이터를 읽고, 특정 조건에 따라 데이터를 자동으로 분기 처리하는 방법을 실습합니다.


데이터 파이프라인에서 JSON이 중요한 이유

최근 데이터는 대부분 JSON 형식으로 전달됩니다. API 응답, 로그 데이터, IoT 스트림 등 다양한 시스템이 JSON을 표준으로 사용합니다.
Apache NiFi에서도 JSON 파일을 읽고, 특정 속성 값에 따라 조건 분기(Conditional Routing) 하는 기능이 매우 중요합니다.

이번 회차에서는 EvaluateJsonPath Processor를 이용해 JSON 속성을 추출하고, 이를 기반으로 흐름을 분기하는 실습을 진행하겠습니다.


실습 목표

플로우 구성

GenerateFlowFile → EvaluateJsonPath → RouteOnAttribute → PutFile (조건별 폴더로 저장)
  • GenerateFlowFile: 테스트용 JSON 데이터 생성
  • EvaluateJsonPath: JSON 데이터에서 특정 필드 추출
  • RouteOnAttribute: 추출한 값에 따라 데이터 분기
  • PutFile: 각각의 폴더에 파일 저장

1단계: 테스트 JSON 데이터 생성

  1. GenerateFlowFile Processor 추가
  2. 설정 → Custom Text에 다음 내용 입력
{
  "order_id": "A123",
  "customer": "John Doe",
  "region": "EU"
}
  1. Run Schedule: 5초로 설정

이 데이터는 주문 정보를 가진 예시 JSON입니다. 우리는 region 값을 기준으로 EU와 US를 분리하는 플로우를 만들겠습니다.


2단계: JSON 속성 추출 (EvaluateJsonPath)

  1. EvaluateJsonPath Processor 추가
  2. GenerateFlowFile → EvaluateJsonPath 연결
  3. 설정 → Properties 탭에서 다음 항목 추가

Name Value

region $.region
  • $는 JSON 루트, $.region은 region 필드 값을 의미
  • 결과 값은 FlowFile Attribute로 저장됨 (region이라는 이름의 속성으로 추가)

3단계: 조건 분기 (RouteOnAttribute)

  1. RouteOnAttribute Processor 추가
  2. EvaluateJsonPath → RouteOnAttribute 연결
  3. 설정 → Properties 탭
${region:equals('EU')}
${region:equals('US')}
  • 조건을 만족하는 데이터는 각각 다른 관계로 분기됩니다.
  • 예시 데이터는 EU이므로 첫 번째 조건이 참이 됩니다.

4단계: 파일 저장 (PutFile)

  • 두 개의 PutFile Processor를 추가합니다.
  • RouteOnAttribute의 각 조건 연결선을 각각의 PutFile로 연결합니다.

첫 번째 PutFile (EU)

  • Directory: /Users/username/nifi-output/EU 또는 C:\nifi-output\EU

두 번째 PutFile (US)

  • Directory: /Users/username/nifi-output/US 또는 C:\nifi-output\US

이제 region 값이 EU면 EU 폴더로, US면 US 폴더로 파일이 저장됩니다.


플로우 전체 예시

[GenerateFlowFile] → [EvaluateJsonPath] → [RouteOnAttribute]
                                                 ↘
                                         [PutFile (EU)] [PutFile (US)]

실행 결과로 테스트 JSON 데이터가 조건에 따라 자동으로 다른 경로로 전달되고 저장됩니다.


결과 확인

  • /nifi-output/EU 폴더 확인 → JSON 파일 존재
  • /nifi-output/US 폴더 확인 → (현재 테스트 데이터에는 없음)

FlowFile 속성 값을 기준으로 자동 분기되는 강력한 데이터 파이프라인이 완성되었습니다.


JSON 경로 표현식 (JsonPath) 주요 예시

표현식 의미

$.region 루트의 region 값
$.order_id 루트의 order_id 값
$.customer 루트의 customer 값
$.* 루트의 모든 값

이렇게 다양한 JSON Path 표현식을 활용해 매우 세밀한 데이터 분기가 가능합니다.


실무 적용 팁

  • IoT 장비 상태("status": "OK", "status": "FAIL")에 따라 경고 흐름으로 분기
  • API 응답의 "status_code": 200인지 확인 후 정상/에러 경로로 분기
  • 사용자 행동 데이터에서 국가 코드 기준으로 지역별 저장

이처럼 조건 분기는 실시간 데이터 처리의 핵심 기능입니다.


마무리

이번 실습에서는 NiFi의 대표적인 강점인 조건 기반 데이터 분기 자동화를 경험했습니다.
복잡한 로직도 코드 한 줄 없이 Drag & Drop 만으로 손쉽게 구현할 수 있다는 점에서, NiFi는 데이터 엔지니어링의 생산성을 획기적으로 개선합니다.


다음 글 예고

Apache NiFi 시리즈 5회 - 다양한 파일 포맷 (JSON, CSV, XML) 데이터 처리 실습

  • CSV, XML 파일을 NiFi로 읽고 변환하는 방법
  • 다양한 파일 포맷을 표준 JSON으로 통합하기
  • 실습 예제와 템플릿 제공
728x90