# Changelog — Web Configurator 파트너 전달용 변경 이력입니다. **v1.11.16부터** 이 형식으로 관리합니다. --- ## [v1.12.4] — 2026-07-09 ### Changed - **프로토콜 레지스터 필드를 디바이스 config-reader 계약에 정렬 (Modbus/OPC-UA)**: - Modbus 레지스터 `idt` 를 디바이스가 기대하는 **공백형**으로 저장 (`unsignedInteger`→`unsigned integer`, `unsignedShort`→`unsigned short`). UI 드롭다운 라벨은 그대로 유지(저장 시에만 변환, 로드 시 역변환). 이전에는 camelCase 로 저장돼 **Modbus 설정 전체가 로드 실패**할 수 있었습니다. - **Modbus·OPC-UA 레지스터 폼에서 `Shift`/`Expr`/`Mask` 제거** — 해당 프로토콜에서는 디바이스가 사용하지 않는 필드입니다(`Expr` 은 저장되나 값에 미적용, `Shift`/`Mask` 는 Modbus/OPC-UA 레지스터 필드가 아님). **CAN 은 유지**(실제 적용됨). - **ODT `string` 옵션**: Modbus·CAN 에서 제거(디바이스가 Modbus 는 거부, CAN 은 출력 없음), **OPC-UA 는 유지**. 백엔드도 Modbus/CAN 의 `string` 저장을 400 으로 거부. - **레지스터 매핑 테이블 UI 정돈**: 컬럼 헤더를 축약어 없이 풀네임으로 통일 — Modbus `Field / Address / Input Type / Output Type / Default Value`, OPC-UA `Field / Namespace / Node ID / Output Type / Default Value`, CAN `Field / CAN ID / Output Type / Default Value / Shift / Expr / Mask`. CAN Baud Rate 드롭다운에서 미사용 `NONE` 항목을 표시에서 숨김(내부 데이터 계약·firmware 값 검증은 유지). ### Added - 기존 디바이스 DB 의 위 표기를 **부팅 시 1회 자동 정합**(멱등 마이그레이션, 이전 계약-정합 마이그레이션을 거친 디바이스에서도 실행되도록 별도 플래그). ### Note - 설치 경로(`/usr/lib/web-configurator`)·기본 포트(`:9090`) 유지. dpworldapp 공유 DB·계약·타입 무변경(레지스터 표기 정합만). ## [v1.12.1] — 2026-06-29 ### Added - **텔레메트리 Uplink (Ethernet 전환)**: dpworldapp 클라우드 텔레메트리(프로토콜·업데이트·RTCM) 송신을 웹 UI 에서 Wi-Fi↔Ethernet 전환. 호스트 라우트(/32)만 사용 — dpworldapp·OS 설정 무접촉. 워치독 자가복원 + 관리 인터페이스 보호. - **라우팅 투명성**: 서버별 실제 송신 인터페이스 표시 + 인터페이스 선택의 영향(로컬 LAN 가림 등) 적용 전 경고(읽기 전용). ### Fixed - **전체 소스 리뷰 41건 반영**(정직성·안전성·구조): 점검 전 상태의 거짓 정상표시 제거, 설정 로드 실패 시 빈 값 저장 차단, 로그 자동정리 마지막 아카이브 과삭제 방지, 중복 경로/보안 로직 통합 등. **dpworldapp 공유 DB(device/protocol 설정)·계약·타입은 무변경.** ### Note - 설치 경로(`/usr/lib/web-configurator`)·기본 포트(`:9090`)는 v1.12.0 그대로 유지. ## [v1.12.0] — 2026-06-25 ### Changed - **앱 코드 설치 경로 이전**: `/opt/web-configurator` → `/usr/lib/web-configurator` (협력사 BSP 베이킹 정합 — FHS상 `/usr/lib` 가 read-only program code 자리). 쓰기 런타임 데이터는 그대로 유지: 로그 `/opt/log/dpworldapp`, 펌웨어 `/opt/fw_staging`·`/opt/fw_upload`, 설정 백업 `/opt/config_backups`. - `web-configurator.service`: `ExecStart`·`WorkingDirectory` 를 새 경로로 변경. 코드 디렉토리는 서비스가 직접 쓰지 않으므로 `ReadWritePaths` 에서 제거(`ProtectSystem=strict` 하 read-only 로 충분). - `BSP-INTEGRATION.md` 레시피: 코드 설치를 `${libdir}/web-configurator`(=`/usr/lib`) 로 변경, 쓰기 디렉토리 목록에서 코드 디렉토리 제외. `scripts/deploy.ps1` `$AppDir` 동일 이전. - **기본 포트 통일 8080→9090**: `server.py` 코드 기본 포트를 9090 으로 변경(systemd 유닛값과 동일). 설정기는 PC 개발·디바이스 모두 `:9090` 단일 포트. 디바이스의 `:8080` 은 별개의 레거시 Java app-runner 임을 문서에서 명확화(README/DEPLOY/network-apply-engine-guide). 디바이스 동작은 무변경(유닛이 이미 `PORT=9090` 지정) — bare/PC 실행 시 기본값만 9090 으로 바뀜. > 앱 로직·UI·디바이스 계약은 무변경. 설치 경로(배포 계약) 이전 + 포트 정돈. 이전 버전: v1.11.16. --- ## [v1.11.16] — 2026-06-23 ### Changed - `web-configurator.service` 의 `MemoryMax` 를 **48M → 128M** 로 상향. support-bundle(진단 zip, 메모리 빌드) + UI 동시 사용 시 실측 피크 ~40-50MB로 OOM-kill 위험이 있어 여유를 확보 (장비 RAM 3.4GB 대비 3.7%, 누수 방지 캡은 유지). 정적자산 최대 93KB·펌웨어 업로드는 디스크 스트리밍이라 메모리 영향 없음. ### Docs - BSP 통합 가이드 정비 — 네트워크-적용 하드닝본을 **`/usr/bin/dpworld-network-apply.sh` 원본 교체 (BSP 베이킹)** 하는 것을 1차 방식으로 명시. `.service.d` override 드롭인은 라이브 후적용 fallback으로 정리. (`RELEASE-NOTES.md` §3, `BSP-INTEGRATION.md` §7, `docs/firmware-boot-hardening.md`) - 배포물을 repo 루트(flat) 구조로 정리. > 앱 코드·UI는 v1.11.15와 동일 (기능 무변경). 본 릴리스는 배포 단위의 메모리 정책 + 통합 가이드 정비입니다. --- ## [v1.11.15] — 2026-06-23 ### Changed - 사이드바 네비게이션 정비: **System** 그룹(Dashboard + Log)과 **Firmware** 그룹 분리, System 그룹에 monitor 아이콘 적용. (v1.11.14–v1.11.15) - (v1.11.12–v1.11.13: 대시보드 visual-calm 시도 후 되돌림 — 최종 외형 변화 없음) --- ## [v1.11.11] — 2026-06-23 ### Changed - config 쓰기 경로를 디바이스 config-reader 계약에 정렬: RS485 parity `no→none`, 2/4-byte order 공백형 (`little swap`/`big swap`), register `idt` `float`(`float64` 제거), protocol 목록에서 CAN 제거 (`can_input` 토글로 대체), 채널 `ai2`/`ai3`/`di2`/`di3` 지원. ### Added - 기존 디바이스 DB의 옛 표기를 새 계약 표기로 **부팅 시 1회 자동 변환** (멱등 마이그레이션, 변경 전 자동 백업). --- ## [v1.11.10] — 2026-06-20 - 전체 코드리뷰 반영 — 입력 검증/정규화 강화 다수.