plantpulse-data-gateway (데이터 게이트웨이)
역할
외부 시스템과 콘솔이 데이터를 안전하게 조회하는 HTTP REST + JDBC 게이트웨이입니다. 저장소에 직접 붙지 않고 이 게이트웨이를 통해서만 접근하게 하는 보안 · 권한 · 감사 계층이자, 2026-09-07 부터는 콘솔의 SQL 실행 화면이기도 합니다.
| 항목 | 값 |
|---|---|
| 모듈명 | plantpulse-data-gateway |
| 설치 경로 | /opt/kopens/plantpulse-platform/plantpulse-data-gateway/ |
| 포트 | 5500 (HTTP) · 5501 (TLS) |
pd 서비스 | data-gateway — MASTER 만 |
| API 인증 | X-API-Key: <PP_DATA_GATEWAY_API_KEY> |
| 콘솔 로그인 | PP_DATA_GATEWAY_WEB_USER / PP_DATA_GATEWAY_WEB_PASSWORD — 비어 있으면 콘솔만 닫힙니다 |
구성
네 백엔드에 JDBC 로 붙습니다 — 그래서 콘솔 한 화면에서 SQL · CQL · TQL · Spark SQL 을 씁니다.
디렉토리 구조
plantpulse-data-gateway/
├── config/ # 생성물
│ ├── plantpulse-jdbc.properties # ← plantpulse-jdbc.properties.template — 백엔드 접속과 계정
│ └── plantpulse-data-gateway.properties # ← plantpulse-data-gateway.properties.template — 제한 · 타임아웃
├── bin/start.sh stop.sh
└── server/ # 내장 Tomcat — webapps/ROOT.war · logs/
주요 설정
plantpulse-jdbc.properties.template 의 핵심 — 백엔드 넷과 자격증명이 전부 여기 렌더됩니다.
jdbc.postgres.url = jdbc:postgresql://${PP_POSTGRES_HOST}:${PP_POSTGRES_PORT}/${PP_DB_NAME}
jdbc.cassandra.url = jdbc:cassandra://${PP_CASSANDRA_HOST}:${PP_CASSANDRA_PORT}/${PP_SCHEME}
jdbc.tse.url = jdbc:ts://${PP_TSE_HOST}:${PP_TSE_PORT}/${PP_SCHEME}
jdbc.spark.url = jdbc:spark://${PP_SPARK_HOST}:${PP_KYUUBI_PORT}/default/${PP_SCHEME}
data.gateway.api.key = ${PP_DATA_GATEWAY_API_KEY} # X-API-Key
data.gateway.web.user = ${PP_DATA_GATEWAY_WEB_USER} # 콘솔 로그인
data.gateway.web.password = ${PP_DATA_GATEWAY_WEB_PASSWORD}
plantpulse-data-gateway.properties.template — 운영 한계:
data.gateway.rate.limit=1000 # 초당 요청
data.gateway.slow.query.ms=10000 # 이보다 느리면 슬로우 로그
data.gateway.async.timeout.ms=60000
SQL 콘솔
https://<서버IP>:5501/ 로 열고 PP_DATA_GATEWAY_WEB_USER / PP_DATA_GATEWAY_WEB_PASSWORD 로 로그인합니다. 관리 콘솔의 도구 화면에 Data Gateway 카드로 있습니다. 옛 plantpulse-sql 의 SQL 도구는 이것으로 합쳐졌습니다 → plantpulse-sql (폐기)
비밀번호가 비어 있으면 로그인 폼이 거부합니다. 사이드카에 적고 재시작하세요 → 웹 화면 로그인 계정
주요 API
# 표준 헬스체크 (익명, readiness — DB · InMemory · QueryLog 정상 시에만 UP. 이 경로만 HTTPS 강제 제외)
curl -fsS http://127.0.0.1:5500/api/health
# 200 {"status":"UP","service":"plantpulse-data-gateway-web",…,"checks":{"database":true,"inmemory":true,"query_log":true}}
# 태그 시계열 조회 (API 키 필요)
curl -fsS -H "X-API-Key: ${PP_DATA_GATEWAY_API_KEY}" \
"http://127.0.0.1:5500/api/v1/tags/TAG_001/values?from=2026-05-30T00:00:00Z&to=2026-05-30T23:59:59Z&limit=10000"
# QPS · 지연 메트릭
curl -fsS -H "X-API-Key: ${PP_DATA_GATEWAY_API_KEY}" http://127.0.0.1:5500/api/v1/metrics
운영 명령
docker exec plantpulse-datalake pd status data-gateway
docker exec plantpulse-datalake pd restart data-gateway
docker exec plantpulse-datalake pd logs --lines 100 data-gateway
자주 발생하는 문제
| 증상 | 원인 | 조치 |
|---|---|---|
| 403 / 401 | API 키 불일치 | passwd.sh PP_DATA_GATEWAY_API_KEY — 서버와 게이트웨이를 함께 |
| 콘솔 로그인 거부 | PP_DATA_GATEWAY_WEB_PASSWORD 비어 있음 | 사이드카 + restart-datalake.sh |
| Spark SQL 만 안 됨 | Kyuubi 미기동 | pd status analytics — 기동 직후라면 1분 뒤 |
| 응답 느림 | 백엔드 부하 | 슬로우 로그, 쿼리 시간 범위 단축 |
| 504 | 리버스 프록시 timeout | nginx proxy_read_timeout |