Apache NiFi 시리즈 5회 - 다양한 파일 포맷(JSON, CSV, XML) 데이터 처리 실습
Apache NiFi에서 JSON, CSV, XML 등 다양한 데이터 포맷을 읽고 변환하는 방법을 실습합니다. 데이터 통합과 변환 파이프라인 구축의 핵심을 단계별로 안내합니다.
데이터 파이프라인의 현실 – 다양한 포맷의 데이터
실무 데이터는 절대 하나의 포맷으로만 존재하지 않습니다.
ERP 시스템에서는 CSV, 외부 API는 JSON, 레거시 시스템은 XML 등 다양한 형식이 혼재되어 있습니다.
데이터 엔지니어의 핵심 과제 중 하나는 이 데이터를 하나의 공통 포맷으로 통합하는 것입니다.
Apache NiFi는 이 문제를 매우 직관적이고 강력하게 해결할 수 있습니다.
이번 실습에서는 CSV, XML, JSON 파일을 읽어 JSON으로 통합하는 기본 파이프라인을 구축해 보겠습니다.
실습 목표
Input (CSV, XML, JSON) → ConvertRecord → Output (JSON)
- 다양한 포맷의 입력 파일을 NiFi에서 읽어 JSON으로 표준화합니다.
1단계: 테스트 데이터 준비
CSV 파일 예시
order_id,customer,region
A001,John Doe,EU
A002,Jane Smith,US
XML 파일 예시
<order>
<order_id>A003</order_id>
<customer>David Lee</customer>
<region>APAC</region>
</order>
JSON 파일 예시
{
"order_id": "A004",
"customer": "Chris Kim",
"region": "EU"
}
각 파일을 NiFi가 접근 가능한 디렉터리에 저장합니다. (예: /Users/username/nifi-input/)
2단계: NiFi Processor 구성
a) GetFile Processor
- 폴더를 지정해 파일을 주기적으로 읽어옵니다.
- Input Directory: /Users/username/nifi-input/
- Keep Source File: false (파일을 처리 후 삭제)
b) InferAvroSchema + ConvertRecord 조합
1. Record Reader (Input)
- CSV → CSVReader
- XML → XMLReader
- JSON → JsonTreeReader
각 Reader는 Schema Access Strategy를 Infer Schema로 설정하면 자동으로 파일의 구조를 추론합니다.
2. Record Writer (Output)
- 모든 Reader의 출력은 JsonRecordSetWriter를 사용
- Pretty Print JSON: true
이렇게 하면 CSV, XML, JSON 입력이 모두 통합 JSON 포맷으로 변환됩니다.
c) PutFile Processor
- 출력 JSON 파일을 저장할 디렉터리 설정
- 예: /Users/username/nifi-output/
플로우 전체 예시
[GetFile] → [ConvertRecord (Reader: CSV/XML/JSON → Writer: JSON)] → [PutFile]
NiFi의 핵심 Record 기반 Processor를 활용해 모든 파일 포맷을 일괄적으로 JSON 표준으로 변환합니다.
실습 결과 예시
출력 파일 예시 (CSV 원본이 JSON으로 변환)
{
"order_id": "A001",
"customer": "John Doe",
"region": "EU"
}
모든 데이터가 공통 스키마로 변환되어 데이터 레이크, 데이터베이스, API 전송 등에 바로 활용할 수 있습니다.
추가 실전 팁
- Schema Registry 연동: Avro Schema를 미리 등록해 스키마를 고정할 수 있음
- Record Validation: ConvertRecord 후 ValidateRecord Processor로 데이터 검증 가능
- Multiple Reader Strategy: NiFi 1.15 버전 이상에서는 Multiple Record Reader를 통해 멀티 포맷 입력을 통합 가능
이 기능을 활용하면 파일 포맷 변경에도 파이프라인 수정이 필요 없는 유연한 데이터 처리 구조를 만들 수 있습니다.
실무 적용 예시
- 금융기관: CSV 거래 기록 + XML 고객정보 + JSON 결제 기록 → JSON 통합 → Spark/Hive 적재
- 제조업: 센서 로그 CSV + 장비 설정 XML → JSON 변환 후 실시간 대시보드 연결
- 공공기관: 외부 API JSON → 내부 시스템 CSV → JSON 통합 저장
마무리
이번 실습을 통해 NiFi의 포맷 추상화(Format Abstraction) 기능의 강력함을 경험했습니다.
NiFi의 Record 기반 처리를 활용하면 데이터 포맷이 변경되거나 혼재되어도 코드 수정 없이 안정적인 통합 파이프라인을 구축할 수 있습니다.
다음 글 예고
Apache NiFi 시리즈 6회 - Process Group과 Template으로 데이터 파이프라인 모듈화 하기
- 대규모 플로우를 모듈화하는 방법
- Process Group 생성 및 관리
- Template 저장과 불러오기 실습