본문 바로가기
디지털 전환 솔루션/IoT 통합 관리

Windows에서 PostgreSQL 18과 TimescaleDB 설치하기

by eplus 2026. 10. 15.

Docker 없이 직접 설치부터 시계열 테이블 생성, 데이터 조회까지

IoT 장비와 각종 센서에서 발생하는 데이터를 저장하려면 일반적인 업무용 데이터베이스와는 조금 다른 접근이 필요합니다.

특히 ESP32, MQTT, Wi-Fi CSI, 온습도 센서처럼 일정한 시간 간격으로 데이터를 수집하는 시스템에서는 **시계열 데이터베이스(Time-Series Database)**가 효과적입니다.

이번 글에서는 Windows 11 64비트 PC에 PostgreSQL 18과 TimescaleDB를 직접 설치하고, 센서 데이터를 저장할 테이블을 생성한 뒤 SQL로 조회하는 과정을 정리합니다.

실제 설치 과정에서 발생했던 비밀번호 인증 오류, 환경변수 오류, TimescaleDB 설치 오류와 해결 방법도 함께 소개합니다.

실습 환경

구분환경

운영체제 Windows 11 64비트
PostgreSQL 18.6
TimescaleDB 2.30.2
설치 방식 Windows 직접 설치
Docker 사용하지 않음
데이터베이스 관리 pgAdmin 4, psql
데이터 활용 ESP32, MQTT, C#, Python
기본 포트 5432

※ 이 글의 계정, 비밀번호, 컴퓨터 이름 및 접속 정보는 모두 일반적인 예시 또는 마스킹된 값으로 작성했습니다.


1. TimescaleDB란?

TimescaleDB는 PostgreSQL을 기반으로 동작하는 시계열 데이터베이스 확장 프로그램입니다.

PostgreSQL의 SQL, 트랜잭션, 인덱스 등 기존 기능을 활용하면서 시간에 따라 지속적으로 증가하는 데이터를 효율적으로 관리하도록 설계되었습니다.

대표적인 활용 분야는 다음과 같습니다.

  • 제조업 설비의 가동 상태 및 생산 실적 수집
  • 전력·에너지 사용량 모니터링(FEMS)
  • 온도·습도·진동 등 IoT 센서 데이터 수집
  • Wi-Fi CSI 및 RSSI 데이터 분석
  • 서버 상태와 통신 로그 수집
  • 실시간 이상 징후 탐지 및 AI 학습 데이터 구축

일반 테이블과의 중요한 차이점은 **Hypertable(하이퍼테이블)**입니다.

Hypertable은 사용자가 하나의 테이블처럼 SQL을 실행하면서 내부적으로 시간 범위별 청크(Chunk)를 관리할 수 있도록 해줍니다.

일반 PostgreSQL과 비교

항목PostgreSQL 일반 테이블TimescaleDB Hypertable

일반 SQL 가능 가능
시간 기준 데이터 관리 직접 설계 자동 청크 관리
시간별 집계 가능 시간 집계 기능 제공
오래된 데이터 관리 직접 구현 보존 정책 지원
압축·컬럼형 저장 기능 일반적인 테이블 기능 활용 버전별 TimescaleDB 기능 지원
C#/Python 연동 가능 동일하게 가능

TimescaleDB는 PostgreSQL을 대체하는 별도의 DB 서버가 아니라 PostgreSQL에 설치하는 확장 프로그램입니다.


2. PostgreSQL 18 설치

2-1. 설치 파일 다운로드

PostgreSQL 공식 홈페이지에 접속합니다.

https://www.postgresql.org/download/windows/

Windows용 64비트 PostgreSQL 18 설치 파일을 다운로드합니다.

설치 구성요소에서는 다음 항목을 선택합니다.

  • PostgreSQL Server
  • pgAdmin 4
  • Command Line Tools

Stack Builder는 추가 프로그램 설치 도구이므로 반드시 설치할 필요는 없습니다.

2-2. 설치 경로 지정

기본 설치 경로를 사용하면 다음과 같습니다.

C:\Program Files\PostgreSQL\18

데이터 저장 폴더는 다음과 같이 구성할 수 있습니다.

C:\Program Files\PostgreSQL\18\data

운영환경에서는 데이터 백업과 관리 편의성을 위해 별도의 데이터 드라이브를 사용하는 것도 좋습니다.

2-3. 관리자 비밀번호 설정

설치 과정에서 PostgreSQL 관리자 계정인 postgres의 비밀번호를 지정합니다.

사용자 : postgres
비밀번호 : [관리자가 설정한 비밀번호]
포트 : 5432

비밀번호는 외부에 공개하지 않고 별도로 관리합니다.


3. PostgreSQL 서비스 확인

설치가 완료되면 PowerShell을 실행합니다.

다음 명령으로 PostgreSQL 서비스 상태를 확인합니다.

Get-Service *postgres*

정상 결과 예시:

Status   Name
------   ----
Running  postgresql-x64-18

서비스가 실행되지 않는다면 관리자 권한 PowerShell에서 다음 명령으로 시작합니다.

Start-Service postgresql-x64-18

포트 상태도 확인합니다.

Get-NetTCPConnection -LocalPort 5432 -State Listen

정상적으로 설치되었다면 5432 포트가 수신 상태로 표시됩니다.

외부에서 데이터베이스에 연결할 필요가 없다면 Windows 방화벽에서 5432 포트를 외부 인터넷에 개방하지 않는 것이 안전합니다.


4. PostgreSQL 접속 방법

Windows에서는 CMD와 PowerShell의 명령 문법이 다릅니다.

PowerShell에서 실행

& "C:\Program Files\PostgreSQL\18\bin\psql.exe" -h 127.0.0.1 -p 5432 -U postgres -d postgres

CMD에서 실행

"C:\Program Files\PostgreSQL\18\bin\psql.exe" -h 127.0.0.1 -p 5432 -U postgres -d postgres

PowerShell에서는 공백이 포함된 실행 파일 경로를 호출할 때 & 연산자를 사용합니다.

정상적으로 접속되면 다음과 같은 프롬프트가 나타납니다.

psql (18.6)

postgres=#

PostgreSQL 버전 확인:

SELECT version();

접속 종료:

\q

비밀번호 인증 오류가 발생하면?

다음 오류가 발생할 수 있습니다.

FATAL: password authentication failed
for user "postgres"

이 경우 PostgreSQL 서비스가 중지된 것이 아니라 계정 인증에 실패했다는 의미입니다.

먼저 설치 시 지정한 비밀번호, 키보드 입력 상태, 접속 대상 서버를 확인합니다.

비밀번호를 잊었다면 관리자 권한으로 pg_hba.conf를 백업하고, 로컬 관리자 인증을 제한적으로 임시 변경해 비밀번호를 재설정할 수 있습니다.

비밀번호 변경 후에는 반드시 원래 인증 설정으로 복원해야 합니다. trust 설정을 운영환경에 그대로 남겨두어서는 안 됩니다.


5. TimescaleDB 다운로드

TimescaleDB 공식 릴리스 페이지에 접속합니다.

https://github.com/timescale/timescaledb/releases

이번 실습에서는 PostgreSQL 18에 대응하는 TimescaleDB 2.30.2 Windows 64비트 패키지를 사용했습니다.

파일명:

timescaledb-postgresql-18-windows-amd64.zip

압축파일을 다음과 같은 임시 폴더에 해제합니다.

C:\install\timescaledb

압축 해제 후 주요 파일은 다음과 같습니다.

C:\install\timescaledb
 ├─ setup.exe
 ├─ timescaledb-tune.exe
 ├─ timescaledb-2.30.2.dll
 ├─ timescaledb-tsl-2.30.2.dll
 ├─ timescaledb-2.30.2.sql
 └─ 기타 SQL 및 설치 파일

중요한 점은 setup.exe와 timescaledb-tune.exe가 올바른 위치에 있어야 한다는 것입니다.

설치 전에 필요한 Visual C++ 런타임과 OpenSSL 라이브러리 등도 공식 설치 안내에 따라 확인합니다.


6. TimescaleDB 설치

6-1. PostgreSQL 실행 경로 설정

PowerShell을 관리자 권한으로 실행합니다.

다음 명령으로 PostgreSQL 18의 실행 경로를 현재 PowerShell 세션에 추가합니다.

$env:Path = "C:\Program Files\PostgreSQL\18\bin;" + $env:Path

정상 인식 확인:

pg_config --version

결과:

PostgreSQL 18.6

6-2. PostgreSQL 서비스 중지

Stop-Service postgresql-x64-18

설치 전에 운영 중인 연결이나 작업이 없는지 확인해야 합니다.

6-3. TimescaleDB 설치 실행

Set-Location "C:\install\timescaledb"
.\setup.exe

설치 프로그램은 PostgreSQL의 pg_config.exe를 찾아 DLL과 SQL 파일의 설치 경로를 결정합니다.

실제 설치 과정에서 다음과 같은 안내가 표시되었습니다.

WELCOME to TimescaleDB Windows installer!

Will use pg_config found at:
C:\Program Files\PostgreSQL\18\bin\pg_config.exe

이어 다음 질문이 나타납니다.

Do you want to run timescaledb-tune.exe now?
[(y)es / (n)o]:

서버 설정을 자동 조정하려면 y를 입력합니다.

y

다음에는 postgresql.conf 파일의 전체 경로를 입력합니다.

C:\Program Files\PostgreSQL\18\data\postgresql.conf

경로를 입력하고 Enter를 누릅니다.

이때 설정 파일을 백업해두는 것이 좋습니다.

6-4. timescaledb-tune 설정

timescaledb-tune은 서버의 CPU와 메모리 자원을 참고하여 PostgreSQL 설정을 조정하는 도구입니다.

주요 항목은 다음과 같습니다.

설정설명

shared_preload_libraries TimescaleDB 사전 로드
shared_buffers 공유 메모리 버퍼
effective_cache_size 예상 OS/DB 캐시 크기
work_mem 정렬·해시 작업 메모리
maintenance_work_mem 유지보수 작업 메모리
max_worker_processes 작업 프로세스 설정

서버 전용 PC가 아니라면 모든 권장값을 그대로 적용하기보다는 다른 프로그램의 메모리 사용량을 고려해 결정합니다.

설치가 완료되면 다음과 비슷한 메시지가 표시됩니다.

Installing TimescaleDB library files...
Success!

Installing TimescaleDB control file...
Success!

Installing TimescaleDB SQL files...
Success!

TimescaleDB installation completed successfully.

이 메시지가 표시되면 TimescaleDB 관련 파일 설치가 완료된 것입니다.


7. PostgreSQL 재시작과 확장 활성화

설치 완료 후 PostgreSQL을 시작합니다.

Start-Service postgresql-x64-18

서비스 확인:

Get-Service postgresql-x64-18

PostgreSQL에 접속합니다.

& "C:\Program Files\PostgreSQL\18\bin\psql.exe" -h 127.0.0.1 -p 5432 -U postgres -d postgres

7-1. 설정 확인

SHOW shared_preload_libraries;

정상 결과:

shared_preload_libraries
------------------------
timescaledb

7-2. 설치 가능한 확장 확인

SELECT name, default_version, installed_version
FROM pg_available_extensions
WHERE name = 'timescaledb';

설치 파일이 인식되면 다음과 비슷한 결과가 나옵니다.

name        | default_version | installed_version
------------+-----------------+------------------
timescaledb | 2.30.2          |

installed_version이 비어 있는 것은 현재 데이터베이스에서 아직 확장을 활성화하지 않았다는 의미입니다.

7-3. 확장 활성화

CREATE EXTENSION IF NOT EXISTS timescaledb;

성공 결과:

CREATE EXTENSION

버전 확인:

SELECT extname, extversion
FROM pg_extension
WHERE extname = 'timescaledb';

결과 예시:

extname     | extversion
------------+-----------
timescaledb | 2.30.2

여기까지 완료하면 Windows 11에서 TimescaleDB 설치가 정상적으로 완료된 것입니다.


8. 시계열 데이터베이스 생성

이제 센서 데이터를 저장할 데이터베이스를 생성하겠습니다.

관리자 계정으로 PostgreSQL에 접속한 상태에서 실행합니다.

CREATE DATABASE sensor_db;

새 데이터베이스로 이동합니다.

\c sensor_db

TimescaleDB 확장을 활성화합니다.

CREATE EXTENSION IF NOT EXISTS timescaledb;

TimescaleDB 확장은 데이터베이스별로 활성화해야 합니다.

실제 애플리케이션에서는 postgres 관리자 계정 대신 별도의 업무용 계정을 생성하고 필요한 권한만 부여하는 것이 안전합니다.


9. 온습도 시계열 테이블 생성

ESP32 등에서 발생하는 온습도 데이터를 저장할 테이블을 생성합니다.

CREATE TABLE sensor_data (
    time         TIMESTAMPTZ NOT NULL,
    device_id    VARCHAR(50) NOT NULL,
    temperature  DOUBLE PRECISION,
    humidity     DOUBLE PRECISION
);

주요 컬럼

컬럼용도

time 데이터 측정 시간
device_id 장비 식별자
temperature 온도
humidity 습도

일반 테이블을 TimescaleDB의 Hypertable로 변환합니다.

SELECT create_hypertable(
    'sensor_data',
    by_range('time')
);

시간과 장비를 기준으로 조회할 경우 인덱스를 추가할 수 있습니다.

CREATE INDEX idx_sensor_device_time
ON sensor_data (device_id, time DESC);

이제 시간이 증가하면서 수집되는 센서 데이터를 저장할 수 있습니다.


10. 테스트 데이터 입력 및 조회

10-1. 데이터 입력

INSERT INTO sensor_data
(time, device_id, temperature, humidity)
VALUES
(NOW(), 'SENSOR-01', 25.5, 60.2),
(NOW(), 'SENSOR-02', 26.1, 58.7),
(NOW(), 'SENSOR-03', 24.8, 62.5);

10-2. 최근 데이터 조회

SELECT *
FROM sensor_data
ORDER BY time DESC;

10-3. 최근 24시간 데이터 조회

SELECT *
FROM sensor_data
WHERE time >= NOW() - INTERVAL '24 hours'
ORDER BY time DESC;

10-4. 시간별 평균 온도와 습도

SELECT
    time_bucket('1 hour', time) AS hour,
    device_id,
    ROUND(AVG(temperature)::numeric, 2) AS avg_temp,
    ROUND(AVG(humidity)::numeric, 2) AS avg_humidity
FROM sensor_data
GROUP BY hour, device_id
ORDER BY hour DESC;

time_bucket()은 TimescaleDB에서 제공하는 시간 구간별 집계 함수입니다.

예를 들어 센서에서 1초마다 데이터를 수집하더라도 1분, 10분, 1시간 단위로 평균을 계산할 수 있습니다.


11. Wi-Fi CSI 데이터 테이블 생성

Wi-Fi CSI 데이터는 일반적인 온습도 데이터보다 크고 발생 빈도도 높습니다.

우선 CSI 분석 정보와 원본을 저장할 수 있는 기본 구조를 생성합니다.

CREATE TABLE wifi_csi (
    time          TIMESTAMPTZ NOT NULL,
    device_id     VARCHAR(50) NOT NULL,
    mac_address   VARCHAR(20),
    rssi          SMALLINT,
    channel       SMALLINT,
    csi_length    INTEGER,
    csi_data      JSONB
);

Hypertable 변환:

SELECT create_hypertable(
    'wifi_csi',
    by_range('time')
);

조회용 인덱스:

CREATE INDEX idx_wifi_csi_device_time
ON wifi_csi (device_id, time DESC);

테스트 데이터 입력:

INSERT INTO wifi_csi
(time, device_id, mac_address, rssi,
 channel, csi_length, csi_data)
VALUES
(
    NOW(),
    'CSI-01',
    'AA:BB:CC:XX:XX:XX',
    -58,
    6,
    4,
    '{"raw": [12, -8, 5, 17]}'
);

여기서 MAC 주소는 실제 장비 정보가 아닌 예시입니다.

최근 데이터 조회:

SELECT
    time,
    device_id,
    rssi,
    channel,
    csi_length
FROM wifi_csi
ORDER BY time DESC
LIMIT 100;

실제 운영에서는 대용량 CSI 원본을 전부 JSONB로 저장하기보다 Parquet과 병행하는 구성도 검토할 만합니다.


12. pgAdmin 4를 이용한 관리

pgAdmin 4는 PostgreSQL과 TimescaleDB의 데이터베이스, 테이블, 인덱스 등을 GUI로 관리할 수 있는 도구입니다.

pgAdmin에서 서버를 등록합니다.

서버 이름 : Local-PostgreSQL18
Host      : 127.0.0.1
Port      : 5432
Database  : postgres
Username  : postgres
Password  : [설치 시 지정한 비밀번호]

접속 후 다음 항목을 확인할 수 있습니다.

Servers
 └─ Local-PostgreSQL18
     └─ Databases
         └─ sensor_db
             ├─ Extensions
             │   └─ timescaledb
             └─ Schemas
                 └─ public
                     └─ Tables
                         ├─ sensor_data
                         └─ wifi_csi

SQL 실행은 Query Tool을 이용하면 됩니다.

운영환경에서는 관리자 계정 대신 권한이 제한된 별도 계정을 사용하는 것이 좋습니다.


13. C#에서 TimescaleDB 활용

TimescaleDB는 PostgreSQL 기반이므로 C#에서는 Npgsql 드라이버를 사용합니다.

패키지 설치:

dotnet add package Npgsql

연결 문자열 예시:

var connectionString =
    "Host=127.0.0.1;" +
    "Port=5432;" +
    "Database=sensor_db;" +
    "Username=[DB_USER];" +
    "Password=[DB_PASSWORD];";

실제 코드에서는 대괄호로 표시한 부분을 실제 값으로 바꾸면 됩니다. 다만 비밀번호를 소스코드에 직접 저장하기보다는 환경변수나 비밀정보 관리 기능을 사용하는 것이 좋습니다.

기존 MQTT 수집 프로그램에서 데이터 수신 후 TimescaleDB에 저장하는 형태로 활용할 수 있습니다.


14. 설치 과정에서 발생할 수 있는 오류

이번 실습에서 확인한 주요 오류와 해결 방법을 정리하면 다음과 같습니다.

오류원인해결 방법

&은 예상되지 않았습니다 CMD에서 PowerShell 문법 사용 명령 실행 환경 구분
password authentication failed 비밀번호 불일치 계정 및 비밀번호 재확인
pg_config not found PATH 환경변수 누락 PostgreSQL bin 경로 추가
timescaledb-tune.exe not found 실행 폴더 불일치 올바른 폴더로 이동
could not find postgresql.conf 설정 파일 경로 누락 전체 경로 입력
pg_available_extensions 결과 없음 확장 파일 미설치 TimescaleDB 설치 확인
PostgreSQL 서비스 시작 실패 설정 또는 DLL 문제 가능 로그와 설정 확인

특히 PowerShell 사용 시 다음을 구분해야 합니다.

PS C:\install\timescaledb>

위 문자열은 PowerShell 프롬프트입니다. 명령어를 복사할 때 함께 입력하면 안 됩니다.


15. Stack Builder는 꼭 필요한가?

PostgreSQL 설치 후 Stack Builder가 실행될 수 있습니다.

Stack Builder는 PostgreSQL과 연동되는 추가 프로그램을 설치하는 도구입니다.

대표적인 패키지는 다음과 같습니다.

프로그램용도

pgAgent 작업 스케줄링
pgBouncer DB 연결 풀링
psqlODBC ODBC 연동
Migration Toolkit 데이터 마이그레이션

TimescaleDB를 이미 별도로 설치했다면 위 프로그램을 필수로 설치할 필요는 없습니다.

특히 C#에서는 Npgsql을 사용하므로 ODBC 드라이버가 반드시 필요한 것은 아닙니다.


16. 제조업 및 IoT 시스템에서 활용하기

실제 활용 구성은 다음과 같습니다.

[ESP32 / IoT 센서]
        |
        | Wi-Fi / MQTT
        v
[MQTT Broker]
        |
        v
[C# 데이터 수집 프로그램]
        |
        +----> TimescaleDB
        |      - 온도·습도
        |      - RSSI
        |      - CSI 통계
        |      - 알람 이력
        |
        +----> Parquet
               - CSI RAW
               - 장기간 수집 원본

        |
        v
[모니터링 / 분석]
        |
        +----> C# 대시보드
        +----> Python 통계 분석
        +----> AI 이상 감지
        +----> 제조 설비 모니터링

예를 들어 제조현장에서는 다음과 같이 활용할 수 있습니다.

자재창고 관리

온습도 센서를 통해 자재창고 환경을 수집하고 기준을 벗어나면 알림을 발생시킵니다.

생산설비 모니터링

설비의 전류, 진동, 가동 상태 등을 시간별로 저장하고 이상 징후를 분석합니다.

Wi-Fi CSI 기반 움직임 감지

CSI와 RSSI의 변화량을 수집하고 AI 모델을 통해 움직임 또는 이상 상황을 분석하는 실험에 활용할 수 있습니다.

단, CSI로 특정 행동이나 낙상 등을 식별하려면 충분한 실측 데이터와 라벨링, 현장별 검증이 필요합니다.


17. 운영 시 주의할 점

TimescaleDB를 장기간 운영할 계획이라면 다음 사항을 반드시 고려해야 합니다.

  1. DB 데이터는 가능한 SSD에 저장합니다.
  2. Windows 서비스의 자동 실행 상태를 확인합니다.
  3. 비밀번호는 외부에 공개하지 않습니다.
  4. DB 포트는 필요한 장비에서만 접근하도록 제한합니다.
  5. 수집량에 따라 Hypertable 청크 크기를 검토합니다.
  6. 오래된 데이터의 보존 정책을 수립합니다.
  7. 대용량 CSI 원본은 Parquet 활용을 검토합니다.
  8. 정기 백업과 복원 테스트를 수행합니다.

센서 데이터는 지속적으로 누적되므로 처음부터 보존 기간과 저장 용량을 고려한 설계가 중요합니다.


18. 마무리

이번 실습에서는 Windows 11 64비트 PC에 Docker 없이 PostgreSQL 18.6과 TimescaleDB 2.30.2를 직접 설치했습니다.

설치 과정에서 PostgreSQL 비밀번호 인증 문제, pg_config 경로 오류, timescaledb-tune 실행 오류 등이 발생했지만 모두 해결했고, 최종적으로 다음 항목을 정상 확인했습니다.

  • PostgreSQL 18.6 실행
  • TimescaleDB 2.30.2 설치
  • Windows 서비스 자동 실행 구성
  • TimescaleDB 확장 활성화
  • SQL을 이용한 시계열 테이블 생성 방법
  • 온습도 및 CSI 데이터 저장·조회 방법

이후에는 C# MQTT 수집 프로그램과 연동하여 실제 ESP32 센서 데이터를 저장하고, Python 및 AI를 이용한 분석 기능으로 확장할 수 있습니다.

TimescaleDB의 장점은 별도의 시계열 전용 SQL을 새로 배우지 않아도 PostgreSQL의 SQL과 개발 환경을 활용할 수 있다는 점입니다.

중소 제조업에서도 기존 ERP·MES·FEMS 시스템과 연동하여 설비 데이터, 에너지 데이터, 센서 데이터를 체계적으로 관리하는 데 유용할 것으로 기대합니다.


참고 사이트

 

반응형