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.ttl | heartbeat 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_count | OPC 별 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=true면MQTTQueueTransfer가 큐 처리 시 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.ssl | HTTPS 여부 |
server.api_key | 플랫폼 API token 인증. PLANTPULSE_SERVER_API_KEY_FILE 권장 |
server.messaging | MQTT 또는 API. MQTT 면 APIQueueTransfer 가 보조 역할 |
개발 모드
dev.mode=EDGE
EDGE(기본) 와 STANDALONE 을 지원합니다. PLATFORM 은 거부됩니다.
명령/이벤트 핸들러 / SQL 경로
app.es.scan.package=plantpulse.app
app.sql.path=classpath:resouces/sql
app.sql.path 의 resouces 는 오타이지만 디렉토리도 같은 이름 (/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_password | EDGE_ADMIN_PASSWORD_HASH_FILE 로 PBKDF2 hash 주입 |
mqtt.server.password / opc.ua.server.password | MQTT_PASSWORD_FILE / OPCUA_PASSWORD_FILE 로 주입 |
app.db.password | CASSANDRA_PASSWORD_FILE 로 주입 |
sparkplug.bdseq.path | 절대경로 권장 (/opt/kopens/.../data/sparkplug/bdseq) |
server.host / password | Plantpulse Platform 접속 정보 |