오랜만에 기술 블로그를 작성해보려 한다.
그동안 이런저런 핑계로 꾸준히 하지 못했지만, 이번에는 다시 열심히 해볼 예정이다!
공백 기간 동안 블로그에 쓸만한 많은 주제들이 있었지만, 그중에서도 가장 많이 다뤘던 NiFi에 대해 작성하려 한다.
Apache NiFi란?
Apache NiFi는 데이터 흐름 자동화 및 관리를 위한 오픈 소스 소프트웨어로,
데이터 수집, 변환, 처리, 전달 과정을 시각적으로 설계하고 실시간으로 제어할 수 있다.
가장 큰 특징 중 하나는 드래그 앤 드롭 방식의 직관적인 UI를 제공한다는 점이다.
이 부분은 Airflow와의 가장 큰 차이점이라고 생각한다.
Airflow는 Python 코드 기반으로 동작하지만, NiFi는 코딩 없이도 쉽게 익힐 수 있으며, 직관적으로 파이프라인을 설계할 수 있다.
이러한 특징 덕분에 데이터 엔지니어뿐만 아니라, 개발 경험이 적은 사용자도 빠르게 활용할 수 있다는 장점이 있다.
1. NiFi의 주요 개념
NiFi는 데이터를 Flowfile로 처리하며 여러 가지 프로세서를 활용하여 flowfile을 가공한다.
[핵심 요소]
Flowfile : 데이터를 저장하는 단위이며 (Json, CSV, Avro 등 여러 종류의 데이터를 포함)
Processor : 데이터를 수집, 변환, 분배, 적재 와 같은 다양한 기능을 수행하는 모듈이다.
Connection : Processor간의 데이터 이동 경로를 연결하는 선
가장 중요한 3가지 요소이다. NiFi 이 3가지의 요소로 데이터 가공이 이루어진다고 볼 수 있다.
2. NiFi의 주요 기능
- No Code 환경에서의 UI 기반 파이프라인 관리
NiFi는 웹 기반 GUI를 제공하여 위 사진처럼 프로세서를 드래그 앤 드롭 방식으로 설치할 수 있고, 복잡한 코딩도 필요하지 않다. 또한 커넥션에 있는 Flowfile을 통해 실시간 모니터링 및 데이터 경로 추적이 쉽게 가능하다.
- 다양한 데이터 소스 및 대상 지원
300개 이상의 Processor를 통하여 다양한 시스템과 통합할 수 있다. 필자는 주로 API수집이나 SFTP를 많이 사용했기 때문에 모든 Processor를 알지는 못하지만 Kafka, AWS 등 엄청 많은 시스템과 연동되어 있다.
- 확장성과 고가용성
Airflow와 마찬가지로 NiFi도 클러스터링을 지원한다. 부하가 특정 노드에 집중되지 않고 로드 밸런싱이 가능하며
수평 확장이 가능하다. 또한 NiFi Registry를 통해 Git과 같이 버전관리가 가능하고 이전 버전으로 롤백도 가능하다.
현업에서 NiFi를 사용할 때 가장 아쉬웠던 점은 버전 관리의 어려움이었다.
실수로 Processor Group을 삭제하면 복구가 어려웠지만, NiFi Registry를 사용하면 쉽게 복구할 수 있다.
또한, 새로운 프로세서가 추가될 때 어떤 사용자가 작업했는지 추적 가능하다는 점도 유용하다.
필자는 NiFi Registry를 직접 본격적으로 활용해보진 못했지만, R&D 과정에서 유용한 기능임을 확인했다.
버전 관리가 필요한 환경이라면 적극적으로 활용할 가치가 있어 보인다.
3. vs Apache Airflow
Apache Airflow도 Apache NiFi와 마찬가지로 데이터 파이프라인을 구축하고 자동화하는 데 사용되지만,
목적이나 사용방식이 다르다.
한 줄 요약하자면 NiFi는 실시간 데이터 스트리밍에 강점이 있고, Airflow는 배치 기나 워크 플로우 관리 및 스케줄링에 최적화 되어 있다.
비교 항목 | Apache NiFi | Apache Airflow |
주요 목적 | 데이터 흐름 관리 | 배치 워크플로우 관리 |
데이터 처리 방식 | 실시간 + 배치 | 주로 배치 |
사용 방식 | UI 기반 | Python 코드 기반 |
Apache NiFi와 Apache Airflow를 모두 사용해본 경험을 바탕으로 비교해보면, 파이프라인 구축의 자유도는 Airflow가 더 높은 편이라고 느껴졌다.
그 이유는 Airflow가 Python 코드 기반으로 동작하기 때문에, 코드로 정의할 수 있는 한 거의 모든 기능을 구현할 수 있기 때문이다.
하지만 그렇다고 해서 NiFi의 자유도가 낮다고 보기는 어렵다.
NiFi에는 ExecuteStreamCommand 프로세서가 있어, NiFi 서버에 설치된 Python을 실행할 수 있는 기능을 제공한다.
이를 활용하면 NiFi에서도 복잡한 데이터 변환을 수행할 수 있다.
그러나 이 방법을 너무 남발하면 결국 Airflow를 사용하는 것이 더 나은 선택이 될 수도 있다.
서버 환경에서 보면 NiFi는 설치 및 사용이 매우 간편하다.
반면, Airflow는 설치 과정과 DAG 작성이 필요하기 때문에 폐쇄망 환경에서는 사용이 어렵다.
특히 Airflow는 Python 라이브러리를 하나하나 수동으로 설치해야 하므로,
폐쇄망 환경에서는 패키지 관리가 굉장히 번거로울 수 있다.
나는 개방된 환경에서 Airflow를 사용했기 때문에 정확히 경험하지는 못했지만,
만약 CI/CD 환경이 구축되지 않았다면, DAG 파일을 하나씩 직접 서버에 배포해야 하는 번거로움이 있을 것으로 보인다.
결과적으로, NiFi와 Airflow는 각각의 장단점이 존재하며,
환경과 요구사항에 따라 적절한 도구를 선택하는 것이 중요하다.
✅ 폐쇄망 환경에서 손쉬운 설치 및 실시간 데이터 처리가 필요하다면 → Apache NiFi
✅ 개방된 환경에서 복잡한 데이터 파이프라인 설계가 필요하다면 → Apache Airflow
각자의 강점을 이해하고, 상황에 맞게 적절한 도구를 선택하는 것이 최선의 방법일 것이다.
마치며
오랜만에 글을 쓰다보니 너무 중구난방인것 같다. 오늘은 간단하게 NiFi에 대한 개념 및 Airflow와의 비교 글을 작성했다.
다음 포스팅은 Docker를 이용한 NiFi 설치 및 API 데이터 수집 파이프라인을 만드는 과정을 작성해보려고 한다.
'NiFi' 카테고리의 다른 글
Docker를 이용한 NiFi 설치 (0) | 2025.03.04 |
---|