본문으로 건너뛰기

app.properties 가이드

PlantPulse Edge 의 모든 런타임 설정. 위치:

  • 컨테이너 모드 (2026.05+): 정본은 호스트 /etc/kopens/conf/app.properties (bind mount, chmod 0640 root). /etc/kopens/app.properties 는 그것을 가리키는 legacy 호환 심링크다 — 편집은 어느 쪽으로 해도 같은 파일이다. 파일이 없으면 설치 시 image default 로 한 번 seed 하고, 이후 덮어쓰지 않는다(운영자 편집이 이미지 업그레이드를 넘어 보존된다).
  • Native 모드: $PE_HOME/conf/app.properties. $PE_HOME/app/plantpulse-edge-web/WEB-INF/classes/app.properties 는 classpath 로딩용 runtime mirror.

컨테이너 모드는 install.sh 가 첫 설치 시 165줄짜리 full template 을 생성합니다 (16개 섹션 + 16~32자 박스별 random 비번). 본 페이지의 디폴트 값은 reference — 실 운영 박스의 값은 박스 안 파일을 직접 확인하세요.

변경 적용 방법

# 컨테이너 모드
sudo bash /opt/kopens/install/bin/config.sh --set edge.rest.api.auth false
sudo bash /opt/kopens/install/bin/config.sh --restart

# native 모드
sudo vi /opt/kopens/plantpulse-edge/conf/app.properties
sudo /opt/kopens/plantpulse-edge/bin/restart.sh

EDGE 식별 / 운영

edge.id=EDGE_00303
edge.site_id=SITE_00001
edge.ttl=30
edge.always-on=false
의미
edge.id엣지 고유 ID (필수, 사이트 내 유일)
edge.site_id사이트 ID — 플랫폼에 미리 등록되어 있어야 함
edge.ttlheartbeat TTL (초)
edge.always-on부팅 즉시 collector 시작 여부 (false 면 화면/REST 로 명시 시작)

관리자 계정

edge.admin_login_id=${ENV:EDGE_ADMIN_USER:admin}
edge.admin_password=${SECRET:EDGE_ADMIN_PASSWORD_HASH}

관리자 비밀번호는 PBKDF2 hash 를 EDGE_ADMIN_PASSWORD_HASH_FILE 또는 EDGE_ADMIN_PASSWORD_HASH 로 주입하세요.

Collector

edge.collector.plc.thread_pool_count=4
edge.collector.plc.connection_reset_ms=0
edge.collector.plc.connection_warn_ms=1000
edge.collector.plc.address_scan_thread_warn_ms=200
edge.collector.plc.address_map_scan_thread_warn_ms=5000
의미
thread_pool_countOPC 별 read 워커 풀 크기
connection_reset_ms연결 자동 리셋 주기 (0 = off)
connection_warn_ms연결 시간이 이 값 초과 시 WARN 로그
address_scan_thread_warn_ms단일 주소 read 시간 임계
address_map_scan_thread_warn_ms한 주기 전체 read 시간 임계

테스트/데모 데이터

내장 OPCUA/MODBUS 시뮬레이터 자동 기동은 지원하지 않습니다. 테스트/데모 데이터는 외부 plantpulse-simulator 또는 테스트 태그를 사용하세요.

진단 전송

edge.diagnostic.send.enabled=true

엣지 자체 진단(시스템 메트릭 등) 의 platform 전송 토글.

OPC-UA 서버 (자체 노드 발행)

opc.ua.server.domain=127.0.0.1
opc.ua.server.tcp.port=12000
opc.ua.server.tls.port=12443
opc.ua.server.user=${ENV:OPCUA_USER:edge}
opc.ua.server.password=${SECRET:OPCUA_PASSWORD}
opc.ua.server.keystore.password=${ENV:CERT_PASS:}
opc.ua.server.ananymous=yes

엣지가 자체 OPC-UA 서버 로 동작해 수집된 태그를 노드로 노출합니다. 외부 SCADA 가 OPC-UA 클라이언트로 접속해 read 가능. ananymous=yes 면 익명 접속 허용 (오타지만 코드 호환 위해 유지).

TSE (Time Series Engine)

tse.server.host=127.0.0.1
tse.server.port=7800
tse.server.user=tse
tse.server.password=tse123!

선택. 별도 시계열 엔진 (plantpulse-timeseries-engine) 와 연계 시 사용.

MQTT 발행

mqtt.enable=true
mqtt.server.host=127.0.0.1
mqtt.server.port=1883
mqtt.server.user=${ENV:MQTT_USER:edge}
mqtt.server.password=${SECRET:MQTT_PASSWORD}
mqtt.server.topic=/edge/point
  • mqtt.enable=trueMQTTQueueTransfer 가 큐 처리 시 publish.
  • 단일 토픽 (/edge/point) 에 모든 Point 가 흐릅니다.

Sparkplug B

sparkplug.enable=false
sparkplug.group.id= # 비우면 site_id
sparkplug.edge.node.id= # 비우면 EdgeContext.id
sparkplug.device.strategy=per-opc # per-opc | single (현재 per-opc 만 구현)
sparkplug.qos=0 # DDATA 빈번 → 0 권장
sparkplug.bdseq.path= # 비우면 ./data/sparkplug/bdseq
sparkplug.alias.enable=true # Phase 2 토글 (현 무영향)
sparkplug.cmd.enable=false # Phase 3 토글 (현 무영향)

브로커 접속 정보는 mqtt.server.* 를 그대로 재사용합니다. 자세한 내용은 Sparkplug 문서 참고.

Plantpulse Server API

server.host=192.168.0.41
server.port=80
server.ssl=false
server.username=
server.api_key=${SECRET:PLANTPULSE_SERVER_API_KEY}
server.messaging=MQTT
의미
server.host/port플랫폼 API 호스트
server.sslHTTPS 여부
server.api_key플랫폼 API token 인증. PLANTPULSE_SERVER_API_KEY_FILE 권장
server.messagingMQTT 또는 API. MQTTAPIQueueTransfer 가 보조 역할

개발 모드

dev.mode=EDGE

EDGE(기본) 와 STANDALONE 을 지원합니다. PLATFORM 은 거부됩니다.

명령/이벤트 핸들러 / SQL 경로

app.es.scan.package=plantpulse.app
app.sql.path=classpath:resouces/sql
오타 (호환성 유지)

app.sql.pathresouces 는 오타이지만 디렉토리도 같은 이름 (/WEB-INF/resouces/sql/) 으로 유지되어 있어 동작합니다. 변경 시 양쪽을 함께 수정해야 합니다.

API 사용

api.use=true

REST 컨트롤러 활성화 토글.

Cassandra DB

app.db.host=127.0.0.1
app.db.port=9042
app.db.username=${ENV:CASSANDRA_USER:cassandra}
app.db.password=${SECRET:CASSANDRA_PASSWORD:cassandra}
app.db.keyspace=pe
app.db.replication=1
app.db.scheme_ddl=/WEB-INF/db/scheme.cql

oltp.cassandra.driver=plantpulse.cassandra.jdbc.CassandraDriver
oltp.cassandra.url=jdbc:cassandra://127.0.0.1:9042/pe
oltp.cassandra.user=${ENV:CASSANDRA_USER:cassandra}
oltp.cassandra.password=${SECRET:CASSANDRA_PASSWORD:cassandra}
의미
app.db.*Cassandra 네이티브 드라이버 (com.datastax.oss.driver) 접속
oltp.cassandra.*JDBC 어댑터 접속 (앱 일부 코드가 사용)
app.db.scheme_ddl부팅 시 자동 적용할 DDL 파일 경로

호스트 / 사용자 / 비번은 둘 다 일치시켜야 합니다.

파일 업로드

file.upload.dir=/tmp/

파일 업로드 컴포넌트가 사용하는 임시 경로. 운영 환경에서는 별도 디렉토리 권장.


권장 변경 체크리스트

항목변경 사유
edge.admin_passwordEDGE_ADMIN_PASSWORD_HASH_FILE 로 PBKDF2 hash 주입
mqtt.server.password / opc.ua.server.passwordMQTT_PASSWORD_FILE / OPCUA_PASSWORD_FILE 로 주입
app.db.passwordCASSANDRA_PASSWORD_FILE 로 주입
sparkplug.bdseq.path절대경로 권장 (/opt/kopens/.../data/sparkplug/bdseq)
server.host / passwordPlantpulse Platform 접속 정보