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은 왜 독립적인 개념으로써 바라볼까?
- 기능적 목적이 다르다.
- RDB는 정규화, 관계 표현, 쿼리 유연성에 강점
- Key-Value는 단순 조회 성능에 최적화
- TSDB는 "시간을 축으로 한 대량의 데이터"를 빠르게 쓰고, 효율적으로 집계/조회하는 데 최적화
- 내부 구현이 다양하다. (혼합형)
- 내부적으로 RDB 기반의 TSDB:
- TimescaleDB → PostgreSQL 기반으로 확장
- 내부적으로 Key-Value 또는 Columnar 기반의 TSDB:
- InfluxDB, Prometheus → 자체 엔진, 시계열 컬럼 저장 최적화
- 내부적으로 RDB 기반의 TSDB:
따라서 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
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 |