여러분, 서버 모니터링하다가 CPU 사용률 그래프 본 적 있으시죠? IoT 센서에서 쏟아지는 온도 데이터를 저장해야 한다면? 주식 시세 변동을 실시간으로 추적해야 한다면? 이런 ‘시간에 따라 변하는 데이터’를 다룰 때 꼭 알아야 할 데이터베이스가 있습니다. 바로 InfluxDB입니다.
오늘은 전 세계에서 가장 많이 사용되는 오픈소스 시계열 데이터베이스 InfluxDB에 대해, 어떻게 시작하고 사용하는지까지 차근차근 알아보겠습니다.

1. InfluxDB, 도대체 뭐가 특별한 걸까요?
InfluxDB는 인플럭스데이터(InfluxData)가 개발한 오픈소스 시계열 데이터베이스로, 운영 모니터링, 애플리케이션 메트릭, IoT 센서 데이터, 실시간 분석 등의 분야에서 시계열 데이터를 빠르게 저장하고 검색하는 데 최적화되어 있습니다.
일반적인 MySQL이나 PostgreSQL 같은 관계형 데이터베이스는 범용적인 데이터를 다루는 데 강점이 있지만, 시간이 핵심인 데이터를 다루는 데는 한계가 있습니다. 반면 InfluxDB는 처음부터 ‘시간’을 중심으로 설계되었습니다.
시계열 데이터베이스(Time Series Database, TSDB)란?
시계열 데이터베이스는 시계열 데이터를 저장하고 활용하는 데 특화된 형태의 데이터베이스로, 관계형 데이터베이스에서 반복적으로 생성해야 하는 테이블 형태나 함수를 사전에 제공해서 효율적으로 시계열 데이터를 처리할 수 있습니다.
쉽게 말해, “이 데이터가 언제 발생했는가?”가 가장 중요한 데이터를 다루는 전문가입니다. CPU 사용률, 온도 센서 값, 주식 가격, 웹사이트 방문자 수처럼 시간에 따라 계속 쌓이는 데이터 말이죠.
2. InfluxDB를 선택해야 하는 이유
2019년 1월 기준 db-engines.com에서 제공하는 시계열 데이터베이스 랭킹에서 InfluxDB가 높은 점수로 1위를 기록했습니다. 그리고 2025년 현재도 여전히 시계열 데이터베이스 분야에서 독보적인 위치를 차지하고 있습니다.
왜 이렇게 많은 개발자들이 InfluxDB를 선택할까요?
압도적인 다운로드 수
InfluxDB는 10억 건 이상의 Docker 다운로드를 기록했으며, Telegraf는 50억 건 이상 다운로드되었고, DB Engines에서 시계열 데이터베이스 부문 1위를 차지하고 있습니다.
설치와 사용이 정말 간편합니다
설치가 간편하고, SQL과 비슷한 쿼리 구문을 활용할 수 있으며, 모니터링 도구인 Graphite 프로토콜을 지원합니다. 데이터베이스를 다뤄본 분이라면 금방 익숙해질 수 있습니다.
HTTP API 기반의 간단한 연동
REST 기반의 인터페이스는 웹 환경에서 더 편리하게 사용할 수 있으며, 웹서버에서 쿼리를 전송하거나 대량의 센서들이 시계열 데이터베이스에 데이터를 입력하기 위해 REST를 사용하면 매우 편리합니다.
3. InfluxDB 3 시대 – 완전히 새로워진 아키텍처
2025년 4월, InfluxDB 3 Core와 InfluxDB 3 Enterprise가 정식 출시되었습니다. 4년 이상의 개발 기간을 거쳐 Rust로 완전히 재작성되었으며, Apache Arrow, DataFusion, Parquet, Flight 기반으로 구축되어 성능과 아키텍처 유연성이 크게 향상되었습니다.
InfluxDB 3의 혁신적인 변화
InfluxDB 3의 가장 큰 변화는 무제한 카디널리티 지원, 네이티브 SQL 지원, 그리고 컴퓨팅과 스토리지의 분리입니다. 이전 버전에서 카디널리티(고유값의 개수)가 높으면 성능 문제가 발생했는데, InfluxDB 3에서는 이 제약이 사라졌습니다.
InfluxDB 3 Core (오픈소스)
- MIT / Apache 2 라이선스로 무료 사용
- 최신 데이터 쿼리에 최적화
- 단일 노드 배포에 적합
- 한 줄 명령어로 설치 가능하며, SQL과 InfluxQL을 기본 지원합니다
InfluxDB 3 Enterprise (상용)
- 고가용성(High Availability) 및 자동 장애복구
- 장기간 데이터 쿼리 최적화
- 읽기 복제본(Read Replicas)
- 멀티 리전 내구성 및 향상된 보안
내장 Python 처리 엔진
InfluxDB 3는 내장 Python 처리 엔진을 통해 데이터베이스 내에서 직접 데이터 변환, 강화, 알림 기능을 제공하여 InfluxDB를 수동적인 저장소에서 실시간 데이터를 위한 능동적인 인텔리전스 엔진으로 발전시켰습니다.
4. 실제로 어디에 사용될까요?
InfluxDB의 활용 사례를 살펴보면 그 강력함을 더 잘 이해할 수 있습니다.
IoT 센서 데이터 수집
Raspberry Pi Pico를 이용하여 DHT11 센서로 수집한 온도와 습도 데이터를 InfluxDB에 저장하고 Grafana로 시각화하는 프로젝트에 활용됩니다. 스마트홈, 스마트팩토리에서 수많은 센서 데이터를 실시간으로 처리하는 데 InfluxDB가 사용됩니다.
서버 및 애플리케이션 모니터링
네이버 클라우드 플랫폼에서도 InfluxDB와 Grafana를 연동하여 시스템 및 인프라 모니터링 서비스를 구축하는 데 활용하고 있습니다. 서버의 CPU, 메모리, 디스크 사용률 등을 실시간으로 모니터링할 때 InfluxDB와 Grafana 조합을 많이 사용합니다.
검색 엔진 성능 분석
다나와에서는 InfluxDB를 활용하여 검색 API 호출량, 상품 수, 동적색인 데이터를 수집하고, flux query를 사용하여 일간, 주간, 월간, 연간 통계 그래프를 Grafana로 시각화하고 있습니다.
산업용 IoT의 강자
세계적으로 가장 유명한 시계열 데이터베이스는 InfluxDB이며, 이는 오픈소스 소프트웨어로 시계열 데이터베이스의 대표주자로 꼽힙니다.
5. 지금 바로 시작해볼까요? InfluxDB 3 설치하기
이제 직접 최신 버전인 InfluxDB 3 Core를 설치하고 사용해보겠습니다.
Linux/macOS에서 빠른 설치 (Quick Install)
Linux나 macOS에서 InfluxDB 3 Core를 설치하려면 quick installer 스크립트를 다운로드하여 실행하면 됩니다:
curl -O https://www.influxdata.com/d/install_influxdb3.sh && sh install_influxdb3.sh
이 스크립트는 항상 최신 버전을 설치하도록 업데이트됩니다.
Docker로 설치하기 (추천!)
InfluxDB 3 Core는 x86_64(AMD64)와 ARM64 아키텍처를 지원하는 Docker 이미지를 제공합니다:
docker pull influxdb:3-core
docker run -d -p 8086:8086 \
-v influxdb3-data:/var/lib/influxdb3 \
--name influxdb3 \
influxdb:3-core
중요: 2026년 2월 3일부터 Docker의 latest 태그가 InfluxDB 3 Core를 가리키게 됩니다. 예기치 않은 업그레이드를 방지하려면 특정 버전 태그를 사용하세요.
설치 확인하기
influxdb3 --version
만약 명령어를 찾을 수 없다면 쉘 설정 파일을 다시 로드하세요:
source ~/.zshrc # 또는 source ~/.bashrc
공식 설치 문서는 https://docs.influxdata.com/influxdb3/core/install/에서 확인할 수 있습니다.
6. InfluxDB 2도 여전히 잘 사용 됩니다!
InfluxDB 2는 단종 계획이 없으며, InfluxDB 3 Core는 InfluxDB OSS v1과 v2를 대체하는 것이 아닙니다. 기존 프로젝트에서는 v2를 계속 사용해도 되며, 새 프로젝트는 v3를 고려해보시기 바랍니다.
InfluxDB 2 설치 (기존 프로젝트용)
Homebrew를 사용한 macOS 설치:
brew update
brew install influxdb@2
brew services start influxdb@2
Ubuntu/Debian 설치:
wget -qO- https://repos.influxdata.com/influxdata-archive_compat.key | sudo apt-key add -
echo "deb https://repos.influxdata.com/debian stable main" | sudo tee /etc/apt/sources.list.d/influxdb.list
sudo apt-get update
sudo apt-get install influxdb2
sudo systemctl start influxdb
InfluxDB 2의 기본 포트는 8086입니다. 설치 후 브라우저에서 http://localhost:8086으로 접속하면 InfluxDB UI를 볼 수 있습니다.
공식 InfluxDB 2 설치 문서: https://docs.influxdata.com/influxdb/v2/install/
7. 첫 번째 데이터 저장해보기 (InfluxDB 2 기준)
설치가 끝났다면 이제 데이터를 저장해볼 차례입니다.
초기 설정하기 (Initial Setup)
- 브라우저에서
http://localhost:8086접속 - Get Started 클릭
- 초기 설정 화면에서 다음 정보 입력:
- Username (사용자명): 원하는 사용자 이름
- Password (비밀번호): 안전한 비밀번호
- Organization Name (조직명): 회사명 또는 개인 이름
- Bucket Name (버킷명): 첫 번째 데이터 저장소 이름
- 중요! Continue 클릭 후 생성된 API Token은 반드시 안전한 곳에 보관하세요.
CLI로 데이터 입력하기 (influx write)
터미널에서 influx 명령어를 사용하여 데이터를 입력할 수 있습니다:
influx write \
--bucket my-bucket \
--org my-org \
--precision s \
"temperature,location=room1 value=23.5 1641024000"
HTTP API로 데이터 입력하기 (Write API)
HTTP API를 사용하면 다양한 프로그래밍 언어에서 쉽게 데이터를 저장할 수 있습니다:
curl --request POST \
"http://localhost:8086/api/v2/write?org=my-org&bucket=my-bucket&precision=s" \
--header "Authorization: Token YOUR_API_TOKEN" \
--header "Content-Type: text/plain; charset=utf-8" \
--data-binary "
temperature,location=room1 value=23.5 1641024000
temperature,location=room2 value=22.3 1641024010
"
데이터 구조 이해하기 (Data Model)
InfluxDB는 독특한 데이터 모델을 사용합니다:
| InfluxDB 용어 | 관계형 DB 용어 | 설명 | 영문명 |
|---|---|---|---|
| Bucket | Database | 데이터가 저장되는 컨테이너 | Bucket |
| Measurement | Table | 데이터 유형 (예: temperature) | Measurement |
| Tag | Indexed Column | 인덱싱된 메타데이터 (예: location=room1) | Tag |
| Field | Column | 실제 측정값 (예: value=23.5) | Field |
| Timestamp | Timestamp | 시간 정보 (자동 생성) | Timestamp |
8. 데이터 조회해보기 (Querying Data)
저장한 데이터는 Flux 쿼리 언어를 사용하여 조회합니다.
기본 쿼리 예시 (Basic Query)
from(bucket: "my-bucket")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "temperature")
|> filter(fn: (r) => r._field == "value")
이 쿼리는:
my-bucket에서 데이터를 가져오고 (from)- 최근 1시간 데이터만 필터링하고 (range)
temperaturemeasurement만 선택하고 (filter)value필드만 선택합니다 (filter)
flux query는 순서에 따라 성능이 변하므로, 효율적인 쿼리 작성이 중요합니다.
InfluxDB UI에서 쿼리 실행하기 (Query in UI)
http://localhost:8086에 접속하고 로그인하면 데이터를 직접 관리하거나 조회할 수 있는 UI가 제공됩니다:
- 좌측 메뉴에서 Data Explorer 선택
- 상단에서 버킷(Bucket) 선택
- 필터 조건 설정 또는 직접 Flux 쿼리 작성
- Submit 클릭하여 결과 확인
9. Grafana와 함께 사용하기 – 시각화의 완성
Grafana는 시계열 메트릭 데이터 수집에 강한 모습을 보이며, 서버 리소스의 메트릭 정보나 로그 같은 데이터를 시각화하는 데 많이 사용됩니다.
Grafana 설치 (Install Grafana)
Docker로 간편하게 설치:
docker run -d -p 3000:3000 --name grafana grafana/grafana
InfluxDB 데이터 소스 연결하기 (Connect Data Source)
- Grafana 접속:
http://localhost:3000(초기 계정: admin/admin) - 좌측 메뉴에서 Configuration → Data Sources 선택
- Add data source 클릭
- InfluxDB 선택
- 설정 입력:
- Query Language: Flux
- URL:
http://localhost:8086 - Organization: 초기 설정 시 입력한 조직명
- Token: 생성된 API Token
- Default Bucket: 버킷명
- Save & Test 클릭
연결이 성공하면 “datasource is working” 메시지가 나타납니다!
대시보드 만들기 (Create Dashboard)
- 좌측 메뉴에서 + → Dashboard 선택
- Add new panel 클릭
- Query 작성 또는 Visual Query Builder 사용
- 시각화 유형 선택 (Graph, Gauge, Table 등)
- Apply 클릭하여 패널 저장
Grafana의 풍부한 시각화 옵션을 활용하면 실시간 모니터링 대시보드를 쉽게 만들 수 있습니다.
공식 Grafana 문서: https://grafana.com/docs/grafana/latest/
10. TICK 스택 – InfluxDB의 강력한 생태계
TICK 스택은 Telegraf, InfluxDB, Chronograf, Kapacitor를 의미하며, 시계열 데이터 작업을 위한 강력하고 인기 있는 플랫폼입니다.
Telegraf – 데이터 수집 에이전트 (Data Collection Agent)
- 200개 이상의 플러그인 제공 (Input Plugins)
- CPU, 메모리, 디스크 등 시스템 메트릭 자동 수집
- MySQL, Redis, MQTT 등 다양한 소스 지원
- 설치 및 설정이 간편
InfluxDB – 데이터 저장소 (Data Storage)
- 수집된 시계열 데이터를 효율적으로 저장
- 압축 알고리즘으로 저장 공간 효율성 극대화
Chronograf – 시각화 도구 (Visualization Tool)
데이터의 그래프를 작성하고 시각화하며 즉석 탐색을 수행할 수 있는 시각화 엔진입니다.
Kapacitor – 실시간 처리 및 알림 (Real-time Processing)
데이터베이스의 코프로세서로, 데이터를 기반으로 작업을 수행할 수 있으며, 자체 스크립팅 언어와 기능을 제공하여 맞춤형 논리나 사용자 정의 함수를 적용할 수 있습니다.
11. InfluxDB를 사용할 때 알아두면 좋은 팁
장점을 최대한 활용하세요
InfluxDB는 초당 수십만 건의 쓰기 작업을 처리할 수 있으며, 데이터가 들어오는 즉시 인덱싱되어 100ms 이내에 쿼리할 수 있습니다.
한계도 이해하세요
InfluxDB는 Insert와 Select 성능을 위해 설계되었기 때문에 Update와 Delete는 거의 지원하지 않습니다. 시계열 데이터는 한번 저장되면 수정되지 않는다는 전제로 설계되었습니다.
이것은 단점이 아니라 시계열 데이터베이스의 특성입니다. 센서 데이터나 로그는 일단 기록되면 수정할 필요가 없으니까요.
데이터 보관 정책 설정하기 (Retention Policy)
InfluxDB는 언젠가 디스크가 찰 수 있어서, 데이터 보관 또는 삭제에 대한 정책이 필요합니다.
InfluxDB 2에서 보관 기간 설정:
# UI에서 설정
# Data → Buckets → Create Bucket
# Retention Period: 30 days 설정
Tag vs Field 선택 가이드
- Tag: 인덱싱되므로 필터링에 사용 (예: location, sensor_id)
- Field: 실제 측정값 저장 (예: temperature, humidity)
태그는 카디널리티(고유값 개수)를 낮게 유지하는 것이 좋습니다. 다만 InfluxDB 3에서는 무제한 카디널리티를 지원하여 이 제약이 크게 완화되었습니다.
12. 실제 프로젝트에 적용할 때
Python에서 사용하기 (Python Client)
InfluxDB 2 Python 클라이언트 사용:
from influxdb_client import InfluxDBClient, Point
from influxdb_client.client.write_api import SYNCHRONOUS
# 클라이언트 생성
client = InfluxDBClient(
url="http://localhost:8086",
token="YOUR_API_TOKEN",
org="my-org"
)
# 데이터 쓰기
write_api = client.write_api(write_options=SYNCHRONOUS)
point = Point("temperature") \
.tag("location", "room1") \
.field("value", 23.5)
write_api.write(bucket="my-bucket", record=point)
# 데이터 읽기
query = '''
from(bucket: "my-bucket")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "temperature")
'''
result = client.query_api().query(query)
for table in result:
for record in table.records:
print(f"{record.get_time()}: {record.get_value()}")
Node.js에서 사용하기 (Node.js Client)
const {InfluxDB, Point} = require('@influxdata/influxdb-client')
const client = new InfluxDB({
url: 'http://localhost:8086',
token: 'YOUR_API_TOKEN'
})
const writeApi = client.getWriteApi('my-org', 'my-bucket')
const point = new Point('temperature')
.tag('location', 'room1')
.floatField('value', 23.5)
writeApi.writePoint(point)
await writeApi.close()
공식 클라이언트 라이브러리는 Python, Go, Java, JavaScript, C#, PHP, Ruby 등 다양한 언어를 지원합니다.
클라이언트 라이브러리 문서: https://docs.influxdata.com/influxdb/v2/api-guide/client-libraries/
13. 성능 최적화를 위한 실전 팁
배치 쓰기 활용하기 (Batch Write)
여러 데이터를 한 번에 쓰면 성능이 크게 향상됩니다:
points = []
for i in range(1000):
point = Point("sensor_data") \
.tag("sensor_id", f"sensor_{i%10}") \
.field("value", i * 0.1)
points.append(point)
write_api.write(bucket="my-bucket", record=points)
Down Sampling 활용하기 (Data Aggregation)
과거 데이터를 일정 주기마다 처리해 새롭게 저장하는 Down Sampling을 사용하면, 예를 들어 30분 단위로 평균값을 계산하여 별도 버킷에 저장할 수 있습니다.
InfluxDB 2에서 Task 생성:
option task = {name: "downsample-5m", every: 5m}
from(bucket: "raw-data")
|> range(start: -task.every)
|> filter(fn: (r) => r._measurement == "temperature")
|> aggregateWindow(every: 5m, fn: mean)
|> to(bucket: "downsampled-data")
마무리하며…
InfluxDB는 시계열 데이터를 다루는 현대적인 애플리케이션에서 거의 필수적인 도구가 되었습니다. IoT, 모니터링, 실시간 분석 등 시간이 중요한 모든 영역에서 강력한 성능을 발휘합니다.
수백만 명의 개발자들이 InfluxDB로 실시간 시스템을 구축하고 있으며, 이는 시계열 데이터베이스 분야의 선두주자입니다.
2025년에는 InfluxDB 3가 출시되면서 완전히 새로운 아키텍처와 SQL 지원, 무제한 카디널리티 등 혁신적인 기능들이 추가되었습니다. 기존 프로젝트는 검증된 InfluxDB 2를, 새 프로젝트는 최신 InfluxDB 3를 고려해보시기 바랍니다.
처음에는 조금 낯설 수 있지만, 한번 익숙해지면 시계열 데이터를 다루는 다른 방법은 생각하기 어려울 정도로 편리합니다. 설치부터 기본 사용까지 생각보다 간단하니, 여러분의 프로젝트에서도 한번 시도해보시면 어떨까요?
더 자세한 정보는 다음 공식 문서에서 확인할 수 있습니다:
- InfluxDB 3 Core 문서: https://docs.influxdata.com/influxdb3/core/
- InfluxDB 2 문서: https://docs.influxdata.com/influxdb/v2/
- InfluxData 공식 사이트: https://www.influxdata.com/