[Data Engineering] 개인 사이드 프로젝트#01 복기 2편 (feat. influxdb란?)

2025. 4. 30. 16:51·📊 Data Engineering

2025.04.30 - [Data Engineering] - [Data Engineering] 개인 사이드 프로젝트#01 복기 1편 (feat. Kafka란?)

 

[Data Engineering] 개인 사이드 프로젝트#01 복기 1편 (feat. Kafka란?)

프로젝트 개요 및 선정 이유주제명: 가상 IoT 센서 데이터 실시간 스트리밍 수집 및 저장 해당 프로젝트는 가상의 IoT 센서 데이터를 5초 정도의 딜레이 시간을 주어 실시간으로 생성하여 Apache Kafk

dysad.tistory.com

 

1편에 이어 2편입니다.

 

데이터베이스를 생각하게 되면 대부분 관계형 데이터베이스(Relational Database)인 MySQL, PostgreSQL, MS SQL 등을 떠올리실겁니다.

 

하지만 해당 사이드 프로젝트에는 "실시간"으로 발생되는 IoT 센서 데이터를 DB에 담아야 하기 때문에 비효율적일 수 있겠습니다. 이는 단순한 데이터가 아닌 시계열 데이터이기 때문에 시계열 데이터(time-series data) 저장에 최적화된 데이터베이스를 선정하였으며, 오픈소스형 데이터베이스를 탐색하게 되었습니다.

 

시계열 데이터 저장에 최적화된 오픈소스 데이터베이스(TSDB)에는 크게 InfluxDB와 Prometheus가 크게 사용되는 것으로 파악되었으며, 이 둘을 비교하여 어떤 데이터베이스가 프로젝트에 적합성을 띠는지 알아보았습니다.


시계열 데이터란 무엇인가?

"관계형 데이터에 단순히 시간적 데이터만 추가된 게 시계열 데이터가 아닌가?"라고 해석되기 쉬울 수 있겠습니다. 따라서 InfluxDB를 설명하기 전에 시계열 데이터에 대해서 알아봅시다.

 

 Wikipedia에서 인용한 시계열의 정의는 다음과 같습니다:

시계열(時系列t, ime series)은 일정 시간 간격으로 배치된 데이터들의 수열을 말한다.

 

여기서 집중해보아야 할 부분은 "수열"이 되겠습니다. 이 말은 즉슨, 시계열 데이터는 순서라는 것에 큰 의미를 부여하고 있음을 나타내는 듯 싶습니다.

 

대부분의 관계형 데이터는 보통 순서에 무관한 게 특징입니다. 예시로, 기업 회원 관리 관계형 데이터베이스 테이블 내 회원 정보를 순서적 의미를 부여하지는 않는게 정설입니다. 또한, 해당 데이터가 ms단위의 시간대에 Insert & Delete 되었는지에 대해서 크게 좌우되지는 않는 듯 합니다.

 

시계열 데이터만의 고유 특성은 다음과 같습니다:

항목 설명
시간 순서 보존이 중요 시계열 데이터는 순서가 의미를 가짐. 반면, 관계형 데이터는 보통 순서에 무관함.
연속성 기반 분석 시계열은 이동평균, 계절성, 추세성, 자기상관 등 시간에 따른 패턴 분석이 핵심임
쓰기/읽기 패턴 차이 시계열은 대부분 "Append-only" 구조 (예: 로그, 센서값) — Insert가 많고 업데이트는 거의 없음
저장 최적화 방식 상이 시계열 DB는 시간 기준으로 압축, 다운 샘플링, rollup 등 특화 기능이 있음
집계와 윈도우 처리 시계열은 주기적 집계 (예: 5분 간격 평균)나 슬라이딩 윈도우가 자주 필요함

 

시계열 해석(time series analysis) 및 시계열 예측(time series prediction)과 같은 세부적인 학습은 추후에 포스팅해보도록 하겠습니다. 부가적인 사항은 아래 URL을 참고 바랍니다.


시계열 데이터베이스란 무엇인가?

시계열에 대해서 알아보았으니, 관계형 데이터베이스와 어떤 차이점이 있는지 알아보겠습니다.

 

먼저 Wikipedia에서 인용한 시계열 데이터베이스(TSDB)의 정의는 다음과 같습니다:

시계열 데이터베이스(time series database, TSDB)는 '하나 이상의 시간'과 '하나 이상의 값' 쌍을 통해 시계열을 저장하고 서비스하는데 최적화된 소프트웨어 시스템이다.

 

시간과 값이라는 쌍으로 이루어진다는 말에 Key-value 형식인 Key-value Database가 떠오르게 되었습니다.

 

시계열 데이터베이스는 과연 넓은 의미에서 Key-vale Database와 Relational Database 중 어느 곳에 좁은 의미로 내포되는가 혹은 따로 분리되어서 정의되는지 혹은 독립적인 개념을 지닌 database인지 알아보겠습니다.

 

결론부터 말하자면, 시계열 데이터베이스는 key-value DB나 관계형 DB에 속한다고 보기보다는, "용도 특화형 DB (specialized database)"로서 독립적인 개념으로 보는 것이 더 타당합니다.

 

TSDB은 왜 독립적인 개념으로써 바라볼까?

  1. 기능적 목적이 다르다.
    • RDB는 정규화, 관계 표현, 쿼리 유연성에 강점
    • Key-Value는 단순 조회 성능에 최적화
    • TSDB는 "시간을 축으로 한 대량의 데이터"를 빠르게 쓰고, 효율적으로 집계/조회하는 데 최적화
  2. 내부 구현이 다양하다. (혼합형)
    • 내부적으로 RDB 기반의 TSDB:
      • TimescaleDB → PostgreSQL 기반으로 확장
    • 내부적으로 Key-Value 또는 Columnar 기반의 TSDB:
      • InfluxDB, Prometheus → 자체 엔진, 시계열 컬럼 저장 최적화

따라서 TSDB는 하나의 특정 DB 유형에 귀속되기 보다는, 여러 DB 개념의 장점을 적절히 조합한 도메인 특화형 데이터베이스로 발전해 왔다고 보는 것이 정확합니다.

 

시계열 데이터베이스 종류

해당 프로젝트는 상업적 프로젝트는 아니지만, 오픈소스 문화에 정착 그리고 뒷탈 없게 개발하고자 오픈소스형(Apache License, MIT License 등) 시계열 데이터베이스를 선정하게 되었습니다.

 

Wikipedia에서 인용한 오픈소스형 시계열 데이터베이스의 종류는 다음과 같습니다:

이름 라이선스 언어
InfluxDB MIT, Chronograf AGPLv3, Clustering Commercial Go
Prometheus Apache License Go
TimescaleDB Apache License (partly/some features) C

 

 

3가지의 TSDB를 상세히 비교해 보았습니다:

항목 InfluxDB Prometheus TimescaleDB
기반 엔진 자체 엔진 (TSM 엔진) 자체 엔진 (TSDB) PostgreSQL
데이터 모델 Measurement + Tags + Fields Metric + Labels SQL 기반, RDB 테이블 구조
쿼리 언어 InfluxQL, Flux PromQL PostgreSQL (SQL)
읽기/분석 Flux로 강력한 분석 지원 PromQL은 주로 모니터링용 (단순 분석) SQL로 복잡한 분석 가능
알림 기능 Kapacitor 또는 외부 연동 Alertmanager 내장 없음 (외부 연동)
강점 높은 쓰기 성능, Flux 분석 경량, 간편 설치, 모니터링 특화 SQL 친화적, PostgreSQL 확장성
단점 Flux 학습 곡선, 유료화 정책 장기 저장/복잡한 분석에 부적합 상대적으로 쓰기 성능 낮음
현업 사용처 IoT, DevOps, Sensor Data 시스템 모니터링, Kubernetes 금융, IoT, DevOps (복합 분석)

InfluxDB의 역할

왜 InfluxDB를 선정하였는지 역할을 통해서 알아보겠습니다:

역할 설명
데이터 저장 Kafka → Consumer가 받은 센서 데이터를 저장
시각화 연동 Grafana에서 Data Source로 연결되어 실시간 시각화
이상치 감지 이후 확장 시 InfluxDB에 anomaly_events로 저장 가능
시간 기반 분석 시계열 그래프 그리기, threshold 조건 비교 등

InfluxDB의 주요 개념

InfluxDB를 사용함에 있어 알아두면 이해하기 편한 개념을 간단하게 알아보겠습니다.

개념 설명
Measurement 테이블 개념을 뜻함
Tag 필터링 가능한 문자열 메타데이터
Field 실제 수치 데이터
Timestamp 시간 기준. 시계열 데이터의 기본 축
Bucket 데이터 저장소. retention(보존 기간)과 조직(org) 단위로 관리
Line Protocol 데이터를 InfluxDB로 삽입할 때 쓰는 문자열 포맷
Token / Org / URL InfluxDB 2.x 인증 및 구조에 필수

InfluxDB 관련 주요 파일 및 구조

파일 역할
.env INFLUXDB_URL, TOKEN, ORG, BUCKET 저장
consumer/db_writer.py Kafka에서 받은 데이터를 InfluxDB로 write
consumer/config.py 환경변수 로딩 및 설정
docker-compose.yml InfluxDB 컨테이너 구동, 포트: 8086
init_influxdb.py bucket 초기화 스크립트 (자동화 가능)

InfluxDB를 사용하며 느낀점

1. 시계열 데이터베이스 필요성 체감

단순히 데이터를 DB에 저장하는 것이 아니라, 시간이라는 축을 기준으로 설계된 DB라는 점이 신선했습니다.

2. RDBMS와 TSDB 비교로 각 DB의 존재 여부 확인

일반적인 RDBMS와 다른 쿼리 구조와 데이터 모델링 방식을 이해하는 데 시간이 걸렸지만, 센서 기반 데이터 분석/시각화에는 InfluxDB가 매우 적합하다는 걸 체감했습니다.

3. DevOps 및 모니터링 경험

실시간 대시보드(Grafana)와 자연스럽게 연동되어 DevOps/모니터링 용도로도 충분히 쓸 수 있다는 자신감을 얻었습니다.


참고 URL

  • 개인 사이드 프로젝트 Repo: https://github.com/givemechocopy/iot-kafka-streaming-project
 

GitHub - givemechocopy/iot-kafka-streaming-project: [Personal-Side Project #01] Virtual Real-Time IoT Sensor Data Streaming

[Personal-Side Project #01] Virtual Real-Time IoT Sensor Data Streaming - givemechocopy/iot-kafka-streaming-project

github.com

  • Wikipedia 시계열: https://ko.wikipedia.org/wiki/%EC%8B%9C%EA%B3%84%EC%97%B4
 

시계열 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 시계열(時系列, 영어: time series)은 일정 시간 간격으로 배치된 데이터들의 수열을 말한다. 시계열 해석(time series analysis)이라고 하는 것은 이런 시계열을 해석하

ko.wikipedia.org

  • Wikipedia 시계열 데이터베이스: https://ko.wikipedia.org/wiki/%EC%8B%9C%EA%B3%84%EC%97%B4_%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4
 

시계열 데이터베이스 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 시계열 데이터베이스(time series database, TSDB)는 '하나 이상의 시간'과 '하나 이상의 값' 쌍을 통해 시계열을 저장하고 서비스하는데 최적화된 소프트웨어 시스템

ko.wikipedia.org

  • RedMonk: https://redmonk.com/rstephens/2018/04/03/the-state-of-the-time-series-database-market/
 

The State of the Time Series Database Market

In an effort to examine the state of the time series database market, this post will explore the following topics: What is time series data and why is it increasingly relevant? Why would you want to consider using a time series database? What is the commun

redmonk.com

  • InfluxDB official Repo: https://github.com/influxdata/influxdb
 

GitHub - influxdata/influxdb: Scalable datastore for metrics, events, and real-time analytics

Scalable datastore for metrics, events, and real-time analytics - influxdata/influxdb

github.com

 

 

'📊 Data Engineering' 카테고리의 다른 글

[Data Engineering] 데이터 웨어하우스와 ETL/ELT는 어떻게 구성되는가?  (0) 2025.05.12
[Data Engineering] 데이터 팀의 역할과 조직은 어떻게 구성되는가?  (1) 2025.05.12
[Data Engineering] 개인 사이드 프로젝트#01 복기 1편 (feat. Kafka란?)  (2) 2025.04.30
[Data Engineering] 데이터 파이프라인이란?  (0) 2025.04.27
[Data Engineering] 데이터 엔지니어란?  (0) 2025.04.27
'📊 Data Engineering' 카테고리의 다른 글
  • [Data Engineering] 데이터 웨어하우스와 ETL/ELT는 어떻게 구성되는가?
  • [Data Engineering] 데이터 팀의 역할과 조직은 어떻게 구성되는가?
  • [Data Engineering] 개인 사이드 프로젝트#01 복기 1편 (feat. Kafka란?)
  • [Data Engineering] 데이터 파이프라인이란?
givemechocopy
givemechocopy
복잡성을 통제하는 것이 컴퓨터 프로그래밍의 본질이다. @Brian Kernighan (C언어 공동 창시자)
  • givemechocopy
    Develop Your Senses As a Developer
    givemechocopy
  • 전체
    오늘
    어제
    • 분류 전체보기 (19)
      • 🛠️ Backend Development (1)
      • 📜 Certification (3)
        • ADsP (3)
        • Information Processing (0)
        • SQLD (0)
      • ☁️ Cloud Computing (2)
      • 💻 Computer Science (1)
      • 📊 Data Engineering (9)
      • 🧩 Problem Solving (0)
      • 🧪 Software Engineering (2)
      • 📰 Tech Trends (1)
  • 블로그 메뉴

    • 태그
    • 방명록
    • 카테고리
  • 링크

    • Github
  • 인기 글

  • 태그

    자격증
    코테
    파이썬
    데이터엔지니어
    dataengineering
    datapipeline
    timeseries
    data
    코딩테스트
    ADsP
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
givemechocopy
[Data Engineering] 개인 사이드 프로젝트#01 복기 2편 (feat. influxdb란?)
상단으로

티스토리툴바