IoT 데이터 처리 플랫폼에서의 InfluxDB 적용 경험

IoT 데이터 처리 플랫폼에서의 InfluxDB 적용 경험

1. 서론

IoT 기반 서비스 개발을 진행하면서 디바이스로부터 주기적으로 수집되는 대량의 데이터를 안정적으로 저장하고, 이를 효율적으로 조회 및 분석할 수 있는 구조가 필요하였다.

수집되는 데이터는 시간(Time)을 기준으로 지속적으로 누적되며, 대부분의 조회 또한 특정 시간 범위를 기반으로 이루어진다.

초기에는 관계형 데이터베이스를 활용하는 방안을 고려하였으나, 데이터의 특성과 조회 패턴을 고려했을 때 구조적 한계가 존재하였다. 이에 따라 시계열 데이터 처리에 적합한 데이터베이스 도입을 검토하게 되었고, Machbase와 InfluxDB를 비교하여 최종적으로 InfluxDB를 중심으로 시스템을 구성하였다.

2. 시계열 데이터베이스가 필요했던 이유

IoT 데이터는 일반적인 서비스 데이터와 달리 append-only 성격을 강하게 가진다.

즉, 기존 데이터를 수정하기보다는 새로운 데이터를 지속적으로 추가하는 형태로 축적된다.

다만 실제 환경에서는 항상 append-only로만 동작하지는 않았다.

네트워크 단절로 인해 디바이스에서 데이터를 전송하지 못하는 경우가 발생하며, 네트워크가 복구되면 과거 데이터가 재전송되는 상황이 존재했다.

이 경우, 실시간 데이터와 과거 데이터가 동시에 유입되며, 과거 데이터는 실제 발생 시점의 timestamp 기준으로 뒤늦게 삽입된다.

따라서 단순한 순차 insert가 아니라 시간 기준 정합성을 유지하는 구조가 필요했다.

주요 조회 패턴은 다음과 같았다.

  • 특정 시간 범위 조회 (time range query)
  • 일정 시간 단위 집계 (aggregation)
  • 최신 데이터 조회

3. 후보 기술 검토

Machbase와 InfluxDB를 주요 후보로 검토했다.

다음과 같은 기준을 중심으로 기술 검토를 진행했다.

  • 대량 데이터 write 처리 성능
  • 시간 범위 기반 조회 성능
  • aggregation 기능 구현의 난이도
  • 데이터 모델의 유연성
  • 개발 및 운영 복잡도
  • 비용

Machbase는 대용량 데이터 처리와 안정적인 write 성능에서 강점을 보였으며, SQL 기반 인터페이스를 제공하여 기존 개발 방식과의 호환성이 높다는 장점이 있었다.

반면 InfluxDB는 시계열 데이터에 특화된 데이터 모델과 쿼리 방식을 제공하며, 시간 기반 조회 및 aggregation 기능을 상대적으로 간결하게 구현할 수 있었다.

4. Machbase와 InfluxDB의 차이

Machbase는 사전에 DDL을 통해 테이블을 정의해야 하는 구조로, 스키마가 명확하고 관리가 용이하다는 장점이 있다. 반면 구조 변경 시 유연성이 떨어질 수 있으며, 다양한 형태의 데이터를 수집해야 하는 환경에서는 초기 설계 부담이 존재한다.

InfluxDB는 measurement, tag, field 기반 구조를 사용하며, 별도의 테이블 생성 없이 데이터를 입력할 수 있다. 이러한 방식은 데이터 구조 변화에 유연하게 대응할 수 있다는 장점이 있다.

조회 성능 측면에서는 시간 범위를 기반으로 데이터를 집계하는 경우, 동일한 조건에서 테스트를 수행한 결과 InfluxDB가 Machbase보다 더 우수한 성능을 보였다.

이에 따라 시계열 데이터의 aggregation 처리에서는 InfluxDB가 보다 적합하다고 판단했다.

쿼리 작성 측면에서는 차이가 있었다.

Machbase는 SQL 기반으로 구성되어 있어 기존 개발자에게 익숙하고 직관적인 반면, InfluxDB의 InfluxQL은 SQL과 유사하지만 제약이 존재하여 상대적으로 덜 직관적으로 느껴졌다.

결과적으로 InfluxDB는 aggregation 처리 성능 측면에서 장점을 보였으며, Machbase는 범용적인 쿼리 작성과 데이터 접근 측면에서 더 직관적인 개발 경험을 제공한다고 판단했다.

5. 실제 적용 구조

초기 설계 단계에서는 특정 데이터베이스를 일괄적으로 선택하기보다는, 장비 또는 데이터 특성에 따라 Machbase와 InfluxDB를 선택적으로 사용하는 구조를 고려하였다.

즉, 일부 장비는 Machbase를 사용하고, 일부는 InfluxDB를 사용하는 방식으로 각 데이터베이스의 장점을 상황에 맞게 활용하는 방향이었다.

그러나 실제 구현 및 검토 과정에서 다음과 같은 판단이 이루어졌다.

첫째, InfluxDB만으로도 현재 요구되는 데이터 저장 및 조회 성능을 충분히 만족할 수 있었다.

둘째, aggregation 및 시간 기반 조회 기능을 구현하는 과정에서 InfluxDB가 상대적으로 단순한 구조를 제공하였다.

셋째, Machbase는 상용 제품으로 비용이 발생하는 반면, 현재 요구사항 기준에서는 해당 비용을 지불할 만큼의 명확한 추가 이점은 크지 않다고 판단했다.

이러한 이유로 최종적으로는 장비별로 데이터베이스를 분리하는 방식이 아닌, InfluxDB만을 사용하는 방향으로 의사결정을 내렸다.

6. 설계 시 고려사항

시계열 데이터 처리 과정에서 몇 가지 구현 방식을 적용하였다.

첫째, timestamp를 시스템에서 명시적으로 설정하였다.

디바이스에서 수집된 실제 발생 시점을 기준으로 데이터를 저장하도록 하였으며, 이를 통해 네트워크 지연이나 재전송 상황에서도 시간 정합성을 유지할 수 있도록 하였다.

개발 관점에서는 단순히 timestamp 값을 지정하는 방식으로 구현되었기 때문에 복잡도는 높지 않았다. 다만 과거 데이터가 뒤늦게 삽입되는 구조는 내부적으로 성능에 영향을 줄 가능성이 있는 요소로 판단했다.

둘째, 조회 성능 최적화를 위해 쿼리 조건을 조정하였다.

초기에는 시작 시간 기준으로 top-K 조회를 수행하였으나, 시작 시간과 종료 시간을 함께 지정하는 방식으로 변경하였을 때 조회 성능이 개선되는 것을 확인할 수 있었다.

7. 결론

시계열 데이터 처리는 단순히 데이터베이스를 선택하는 문제가 아니라, 데이터의 특성과 활용 목적에 맞는 구조를 설계하는 것이 중요하다.

InfluxDB는 시계열 데이터의 aggregation 처리와 시간 기반 조회에 적합한 특성을 보였으며, Machbase는 SQL 기반의 직관적인 데이터 접근 방식이라는 장점을 가지고 있었다.

최종적으로는 성능, 개발 생산성, 운영 복잡도, 비용 등을 종합적으로 고려하여 InfluxDB를 중심으로 시스템을 구성하는 것이 현재 상황에 더 적합하다고 판단했다.

genie