1. 글을 쓰게 된 이유
게임 서버를 운영하다 보면 단순 로그 저장을 넘어서, 유저 행동이나 컨텐츠 이용 현황, 재화 소비 흐름 같은 지표 데이터를 꾸준히 수집하고 분석할 필요가 생긴다.
이번 프로젝트에서는 게임 서버 지표를 별도로 관리하기 위해 InfluxDB를 도입했고, 이 글에서는 다음 내용을 기록용으로 정리해두려고 한다.
- 왜 InfluxDB를 선택했는지
- Docker를 이용해 InfluxDB 2.x를 실행하는 방법
초기 셋업 과정과 Node.js 연동 및 실제 지표 수집 코드는 다음 글에서 따로 정리할 예정이다.
2. InfluxDB를 선택한 이유
2.1. 기존 DB(MySQL 등)의 한계
초기에는 MySQL 같은 일반적인 RDB에 지표 데이터를 함께 저장하는 것도 고려했다. 하지만 실제로 운영하면서 다음과 같은 문제를 예상할 수 있었다.
지표 데이터의 양이 매우 많음
- 유저 행동 기준으로 수집할 경우 데이터가 빠르게 증가
- 시간이 지날수록 테이블 크기가 기하급수적으로 늘어남
집계 쿼리 부담
- 일자별 / 시간대별 집계를 자주 호출해야 함
- 운영 DB와 함께 사용 시 DB 락 발생 가능성
- 실시간 서비스 쿼리와 분석 쿼리가 같은 DB를 공유하게 됨
분석 목적의 쿼리가 점점 복잡해짐
- 시간 범위 기반 조회가 잦은데, 인덱스 설계가 까다로움
- 집계 함수를 반복적으로 사용하면서 쿼리 성능 저하
지표 데이터가 쌓일수록 운영 DB의 성능과 안정성에 직접적인 영향을 줄 수 있다고 판단했다.
특히 게임 서비스는 실시간 응답이 중요한데, 분석 쿼리 때문에 게임 플레이가 영향을 받는 구조는 피하고 싶었다.
2.2. InfluxDB를 선택한 이유
그래서 지표 전용 DB를 검토했고, 다음 이유로 InfluxDB를 선택했다.
시간 기반(Time-Series) 데이터에 특화
- 모든 데이터가 타임스탬프를 기준으로 저장됨
- 시간 범위 조회가 기본적으로 최적화되어 있음
대량 데이터 쓰기에 유리한 구조
- 배치 쓰기를 지원해서 한 번에 여러 데이터 포인트를 효율적으로 저장
- 실시간으로 발생하는 대량의 지표 데이터를 안정적으로 처리
시간 범위 기준 조회 및 집계가 용이
- Flux 쿼리 언어를 통해 시간 기반 집계를 직관적으로 작성 가능
- "최근 7일", "시간대별 평균" 같은 쿼리를 간단하게 표현
시각화 도구와의 연동이 쉬움
- Grafana 같은 시각화 도구와 즉시 연결 가능
- 운영팀이나 기획팀에게 실시간 대시보드 제공이 쉬워짐
이번 프로젝트에서 수집하려는 데이터 성격과 InfluxDB의 설계 방향이 잘 맞는다고 판단했다.
2.3. 실제 수집 예정 지표 예시
- 일자별 상품 구매량
- 일자별 뽑기 횟수
- 일자별 유저 컨텐츠 진입 정보
대부분 시간을 기준으로 분석하는 지표들이며, InfluxDB를 사용하는 이유가 명확한 케이스였다. 특히 "어제 대비 오늘 매출 증감률"이나 "시간대별 동접 추이" 같은 분석이 자주 필요한 상황이었다.
3. Docker로 InfluxDB 2.x 실행하기
이번에는 InfluxDB 2.x (latest) 기준으로 셋업했다. 로컬 및 서버 환경에서 동일하게 사용할 수 있도록 Docker Compose를 활용했다.
설계 당시에는 2.x가 최신 버전이었는데, 글을 작성하며 공식 문서를 확인해보니 이미 3.x가 릴리즈되어 있었다. 다만 Docker Docs에서는 원하는 버전의 이미지를 직접 지정해 사용할 수 있고, Docker Compose 설정 예시도 최신 기준으로 제공하고 있어 상황에 맞게 선택하면 된다.
3.1. Docker Compose 설정
# compose.yaml
name: influxdb2
services:
influxdb2:
container_name: influxdb2
image: influxdb:latest
networks:
- default
security_opt:
- no-new-privileges:true
ports:
- 8086:8086
volumes:
- type: bind
source: ./dbData/data
target: /var/lib/influxdb2
- type: bind
source: ./dbData/core/config
target: /etc/influxdb2
설정 포인트
- 8086 포트로 InfluxDB UI 접근
- 데이터 및 설정을 로컬 디렉토리에 바인딩하여 컨테이너 재시작 시에도 데이터 유지
- InfluxDB 2.x 기준 디렉토리 경로 사용
3.2. 실행 명령어
$ docker compose up --build -d # 이미지 다운로드 포함
$ docker compose up -d # 일반 실행
정상적으로 실행되면 아래 로컬주소로 InfluxDB UI에 접근할 수 있다.
👉 http://localhost:8086
이 시점에서는 아직 계정이나 Bucket이 없는 초기 상태의 InfluxDB UI가 노출된다. 처음 접속하면 초기 설정 화면이 나오는데, 다음 글에서 이 과정을 정리할 예정이다.
4. 정리하며
이번 글에서는 왜 InfluxDB를 선택했는지, 그리고 Docker 환경에서 InfluxDB 2.x를 실행하는 것까지를 정리했다.
지표 데이터처럼
- 양이 많고
- 시간 기준 분석이 잦은 데이터는
처음부터 운영 DB와 분리해서 설계하는 것이 확실히 안정적이라고 느꼈다. 실제로 운영 DB와 분석 DB를 분리하니, 대시보드에서 집계 쿼리를 자주 실행해도 게임 서버 응답 속도에는 전혀 영향이 없었다.
다음 글에서는 순서대로
- InfluxDB 초기 셋업 과정 (계정, Bucket 생성)
- Node.js 서버에서 실제로 지표를 적재하는 방식
- 사용 중인 데이터 구조와 쿼리
를 코드 중심으로 정리할 예정이다.
참고 링크






