릴리즈 노트
채팅으로 IIoT 현장 앱을 만들고, 배포하고, 데이터에 질문하는 스튜디오 — 최신 버전은 2026.08 입니다.
버전은 YYYY.MM 형식입니다(예: 2026.08). 같은 달 안의 갱신은 같은 버전 번호를
유지하며, 아래에는 반영된 날짜순으로 정리했습니다.
설치·업그레이드 방법은 설치를 보세요.
🚚 받는 주소가 바뀌었습니다 — product.kopens.io
설치 스크립트와 에어갭 번들을 download.kopens.io 에서 product.kopens.io 로 옮겼습니다.
폴더 구조와 파일 이름은 그대로입니다. 설치 명령을 스크립트에 넣어 두셨다면 주소만 바꾸시면 됩니다.
…-latest.tar.gz 는 없어졌습니다최신 번들의 복사본이라 게시 도중 내려받으면 체크섬이 어긋나, 멀쩡한 파일이
"손상"으로 판정되는 일이 있었습니다. 이제 최신 버전 이름만 담은 latest.txt 를 읽고
버전 주소로 받으십시오.
BASE=https://product.kopens.io/plantpulse-studio
VER=$(curl -fsSL $BASE/latest.txt)
curl -fLO -C - --retry 5 $BASE/plantpulse-studio-images-$VER.tar.gz
한 번 게시된 버전은 지우지 않습니다. 2026.09 가 나와도 …-2026.08.tar.gz 주소는 그대로
살아 있어 언제든 다시 받거나 되돌릴 수 있습니다. 설치 절차를 스크립트로 고정해 두셨다면
latest.txt 보다 버전을 직접 적어두시는 편이 안전합니다.
🗓 매월 정기 릴리즈 — 2026.08
매월 1일에 그 달 버전이 나옵니다. 2026.08 은 배포 자동화만 담은 릴리즈로 제품 기능 변경은 없습니다 — 2026.07 을 쓰고 계시면 서둘러 올리실 이유는 없습니다.
먼저 확인하세요 — 업그레이드 시 필요한 조치
| 해당하면 | 해야 할 일 |
|---|---|
| 폐쇄망이 아닌 환경에서 운영 중 | 이번 업데이트를 반드시 적용하세요(빌더 사이드카 노출 차단) |
| 설정 파일에 API 키를 넣어 두었다 | 키를 .env 로 옮기세요 → 비밀 관리 |
| 도메인·리버스 프록시로 서비스한다 | 사용자 재로그인 1회 → 도메인과 리버스 프록시 |
| 백업만 있고 복구를 해 본 적이 없다 | 복구 리허설을 한 번 돌려 보세요 → 백업과 복구 |
🛡 데이터 무결성 전면 점검
전체 소스를 감사해 심각 3건·높음 15건을 찾아 고쳤습니다. 대부분 "평소엔 안 보이다가 정작 필요한 순간에 드러나는" 유형이라, 재현 테스트를 먼저 만들고 수정했습니다.
백업·복구
복구가 실제로는 아무것도 되돌리지 않고 있었습니다. 백업은 매일 정상적으로 받고
있었지만, 복구를 실행하면 DB 가 한 글자도 바뀌지 않은 채 "복구 완료"가 표시됐습니다.
이전 버전에서는 DRYRUN=1 리허설이 통과해도 실제 복구는 되지 않았으니, 이번 업데이트
후 실제 복구를 한 번 시험해 보시길 권합니다 → 백업과 복구
- 복구 직전 대피본이 실패해도 그냥 진행됐고, 그 대피본으로는 되돌릴 수도 없었습니다. 이제 정식 백업과 같은 형식으로 만들고, 실패하면 복구를 시작하지 않습니다.
- 백업에
.env가 빠져 있었습니다. 키를 환경변수로 옮긴 뒤로는 이게 없으면 백업만으로 시스템을 되살릴 수 없습니다 → 비밀 관리 - 워크스페이스 안에
postgres폴더가 있으면 백업에서 조용히 빠지던 문제를 고쳤습니다. - 스케줄 백업이 첫 실행부터 전부 실패하고 있었습니다(로그 파일 경로 부재). 자동 백업을
켜 두셨다면 실제로는 한 건도 쌓이지 않았을 수 있으니
dist/를 확인해 주세요.
데이터 손실
- 채팅방 하나를 지우면 다른 사용자의 질의 이력까지 사라질 수 있던 문제.
- 프로젝트 삭제 후 7일 보관돼야 할 휴지통이 다음 재시작에 즉시 비워지던 문제.
- 저장소 읽기가 한 번 실패하면 이후 와처·스킬을 하나 만드는 순간 기존 것이 전부 삭제되던 문제.
- 설정·대화 이력 저장이 중간에 끊기면 프로젝트나 이력이 사라지던 문제.
- 경량(파일) 설치를 PostgreSQL 로 승격할 때 계정과 채팅 이력이 이관되지 않던 문제 → 설치
동작 안정성
- 앱을 빠르게 두 번 열면 내부 포트가 새어 결국 모든 앱 열기가 실패하던 문제.
- 빌더 대화가 길어질수록 요청이 계속 커져 토큰 사용량이 늘고 결국 채팅이 막히던 문제.
- 되돌리기가 빌더 작업 중에 끼어들어 결과가 섞이거나 유실되던 문제 → 빌더로 앱 개발하기
- 재설치가 TLS 인증서를 삭제해 HTTPS 가 평문으로 격하되던 문제 → 도메인과 리버스 프록시
- 설비 제어 명령이 응답 지연 시 최대 4회 중복 전송될 수 있던 문제.
화면
- 채팅 진입 직후 보낸 질문이 목록 로딩이 끝나면 사라지던 문제 → 채팅으로 데이터 질의
- 모바일에서 알림이 두 번 뜨고, 로그아웃해도 새로고침하면 다시 로그인되던 문제 → 현장 모바일
- 플랜을 만든 뒤 모드를 바꾸면 작성한 요구사항이 사라지던 문제.
- 세션이 만료돼도 아무 안내 없이 빈 화면만 보이던 문제.
📖 사용자 매뉴얼 내장
- 제품 안에 매뉴얼이 들어왔습니다 — 지금 보고 계신 이 문서입니다. 왼쪽 네비게이션의
매뉴얼 ↗(
fa-book-open)을 누르면 새 창으로 열립니다. - 인터넷 없이도 열립니다: 매뉴얼이 제품 이미지에 함께 담겨 나가므로 폐쇄망 현장에서도 그대로 볼 수 있습니다. 본문 검색도 로컬에서 동작합니다.
- 왼쪽 네비게이션 아이콘을 조금 키워 가독성을 높였습니다.
🔒 보안·공급망
-
채팅에 붙여넣은 키가 이력에 남지 않습니다: 앱 변경 이력은 자동으로 기록되는데(→ 빌더로 앱 개발하기), 채팅창에 API 키를 붙여넣으면 그 값이 기록에 그대로 남았습니다. 이제 알려진 형태의 키·토큰을 자동으로 가립니다.
그래도 붙여넣지 마세요모든 형태의 비밀을 잡을 수는 없습니다. 키는 채팅이 아니라 비밀 관리의 환경변수로 넣으세요.
-
빌더 엔진 이미지도 서명 대상에 포함: 오프라인 번들에 담기는 이미지 중 빌더 사이드카만 서명에서 빠져 있던 것을 바로잡았습니다.
bin/verify-images.sh가 4종 전부를 검증합니다. -
설정 파일 권한이 저장할 때마다 풀리던 문제 해결: 로그인 토큰 파일과 설정 백업까지 보호 대상에 넣었습니다.
-
빌더 엔진 최신화: OpenHands 사이드카를 SDK v1.37.1 로 올렸습니다(사용 방법 변화 없음).
📌 버전 고정
- 모든 이미지를 고정 버전으로 지정했습니다(
latest제거). 재설치 시점에 따라 다른 버전이 깔리는 일이 없어집니다..env의TAG로 원하는 버전을 지정할 수 있습니다 → 설치.
🔑 비밀 관리·연결 안정성
- API 키를 환경변수로만 관리 — 설정 파일에 평문으로 저장되던 플랫폼·AI·Git·레지스트리 키를 환경변수 전용으로 전환했습니다. 설정 파일이 유출돼도 키가 노출되지 않습니다. 기존 설치는 그대로 동작하며, 부팅 로그가 옮길 대상을 안내합니다(값은 로그에 남지 않음). 환경설정 화면은 해당 키를 "환경변수로 관리 중" 으로 표시하고 편집을 막습니다.
- 파일 권한 자동 강화 — 서버가 부팅할 때마다 설정 파일과
.env를 소유자 전용(0600)으로 강제합니다. - 설정 변경 추적 — 무엇이 바뀌었는지 감사 로그에 남습니다(비밀은 값 대신 지문만). "언제부터 안 되기 시작했는지" 추적이 가능해집니다.
- 긴 빌드 중 연결 끊김 해소 — 에이전트가 도구 실행으로 오래 침묵하면 프록시가 스트림을 끊어 "연결 오류"가 뜨던 문제를 서버 하트비트로 해결했습니다(프록시 설정과 무관하게 동작).
- 오류 메시지 개선 — "사이드카 상태: error" 처럼 원인을 알 수 없던 메시지가 실제 사유와 조치를 알려줍니다(예: AI 프로바이더 주소 접속 불가 → 환경설정 확인).
- 리즈닝 모델 호환 — 도구를 쓰는 모델에서 게이트웨이 설정 충돌로 질의가 실패하던 문제를 자동 보정합니다.
- 운영 문서에 프록시 설정 전체 예시와 "증상 → 원인" 대조표를 추가했습니다.
🔒 보안·안정성 강화
전면 감사(보안·코드건전성·프런트·운영) 후 확인된 문제를 일괄 조치했습니다.
- 빌더 사이드카 노출 차단 — 빌더 엔진 사이드카가 기본 설정으로 뜨면서 사내망 전체에서 인증 없이 접근 가능했습니다. 루프백 바인드로 축소하고 메모리·CPU·로그 상한을 적용했습니다. 폐쇄망이 아닌 환경에서 운영 중이라면 이번 업데이트를 반드시 적용하세요.
- 프리뷰 접근제어 — 프리뷰 주소만 알면 비공개 프로젝트의 소스와 채팅 첨부까지 열람할 수 있었습니다. 소유자·관리자·공유대상만 접근하도록 막았습니다(실시간 갱신 웹소켓 포함).
- 앱 오리진 프록시 제한 — 생성된 앱의 데이터 프록시가 전 메서드·전 경로였습니다. 읽기 경로 허용목록 + 쓰기는 앱 자체 인증이 있을 때만으로 좁혔습니다(화면 동작은 그대로).
- 와처 비용 사고 방지 — 수정 API 가 입력을 검증하지 않아 잘못된 값이 들어오면 와처가 멈추거나 1분마다 AI 를 호출할 수 있었습니다.
- 복구 스크립트 제공 — 백업만 있고 복구 수단이 없었습니다. 복구 스크립트를 신설하고 (리허설용 비파괴 모드 포함) 백업 파일 권한을 소유자 전용으로 강화했습니다.
- 재설치 안전성 — 원라인 설치를 기존 서버에서 다시 실행하면
.env와 로컬 백업이 삭제돼 스택이 기동하지 못했습니다. 보존하도록 수정했습니다. - 성능 — 첫 화면 번들 66% 감소(차트 엔진·화면 지연 로딩), 답변 스트리밍 중 입력 지연 제거, 백그라운드 탭에서 폴링 중지.
- 접근성·다국어 — 모달·드로어 11종에 Esc·포커스 처리 추가, 영문 모드에서 한국어가 노출되던 오류 메시지 83건 번역.
🌐 커스텀 도메인 배포 지원
- 앱 오리진 설정 — 환경설정 → 런타임 탭에서 프리뷰·배포앱의 공개 URL 을 지정합니다. 리버스 프록시/HTTPS 도메인 뒤 배포 시 재기동 없이 즉시 반영됩니다.
- 로그인 쿠키 자동 도메인 — 스튜디오와 앱 오리진이 형제 서브도메인이면 쿠키에 공통 부모 도메인을 자동 부여해, 도메인 분리 후에도 배포앱의 실데이터 조회와 비공개 앱 접근이 동작합니다. ⚠ 도메인 설정 변경 후 1회 재로그인이 필요합니다.
- 혼합 콘텐츠 안내 — HTTPS 스튜디오에서 HTTP 앱 오리진이면 빈 화면 대신 원인과 해법을 프리뷰·설정 화면에 표시합니다.
- 배포 가이드 — 오리진 2개 구성·Host 보존·WebSocket·Cloudflare 주의사항을 정리했습니다 → 도메인과 리버스 프록시
- UI 다듬기: 영문 모드 빌더 화면 가로 스크롤바 제거, 컨텍스트 레일 토글 위치 조정.
🏗 3D 디지털 트윈 + 확장 스택
- 3D 디지털 트윈 — 채팅으로 공장 3D 화면을 생성합니다. 상태색·알람 펄스·값 빌보드가 포함된 표준 3D 킷과 "3D 디지털 트윈" 템플릿이 새로 들어갔습니다.
- 도면 → 바닥 텍스처 — 채팅에 도면 이미지를 첨부하면 자동 저장돼 3D 씬 바닥에 깔립니다.
- 확장 스택 12종 사전 포함 — 공정 흐름도·애니메이션·폼·드래그앤드롭·가상 스크롤·QR 스캔· 지도 등을 별도 설치 없이 바로 사용합니다.
- 앱 세션 컨테이너 기본 메모리를 2 GB 로 상향했습니다(3D 빌드 대응).
🧩 MCP 레지스트리
- 환경설정 MCP 탭 — 외부 MCP 서버 추가·삭제, 도구 자동 발견(10분 캐시 + 수동 새로고침), 도구별 활성/채팅/빌더 토글, 신규·충돌 배지.
- 플랫폼 도구 자동 반영 — 플랫폼이 도구를 추가하면 스튜디오 채팅·빌더에 자동 노출됩니다.
🔒 빌더 빌드 표준
- 의존성 잠금(기본 켜짐) — 생성 앱의 임의 패키지 설치·설정 변경을 차단해 표준 스택을 고정합니다. 관리자 허용 목록으로 예외를 둘 수 있습니다.
- 레이아웃 강제(기본 켜짐) — 모든 화면이 표준 셸을 쓰는지 검증하고, 위반 시 에이전트가 스스로 수정합니다.
- 앱 기본 레이아웃 — 제품명·강조색·최대폭·푸터를 환경설정에서 일괄 지정해 신규 앱에 주입합니다.
📦 오프라인 반출 번들
- 배포 버전 사이드바에서 [번들] 을 클릭하면 앱 이미지와 실행 스크립트가 담긴 압축
파일을 내려받습니다. 에어갭 현장에서
bash run.sh한 줄로 기동할 수 있습니다.
🐳 도커 — 앱을 어디서든
- 앱 이미지 push — 배포 버전을 클릭 한 번으로 도커 이미지로 패키징해 레지스트리에 올립니다. 스튜디오 밖 어디서든 컨테이너로 구동할 수 있습니다.
- 런타임 패널 — 하단 상태바에서 세션 컨테이너 상태(CPU/메모리)를 실시간 확인하고, 클릭하면 로그·재시작까지 가능합니다.
- 앱 카탈로그 — 배포된 앱을 썸네일 클릭으로 바로 새 탭에서 실행합니다.
🗣 데이터에 바로 묻는 채팅
- 자연어 질의 — "3번 라인 설비별 태그 수 보여줘" 처럼 물으면 플랫폼 실데이터로 즉시 답변합니다.
- 리치 답변 — 표(CSV 복사 지원)·차트·공정 흐름 다이어그램으로 시각화합니다.
- 채팅방 관리 — 대화 분리·이름 변경·검색, 답변 소요시간 표시, 사진 첨부.
- 채팅 → 앱 전환 — 좋은 답변은 클릭 한 번으로 대시보드 앱 초안이 됩니다.
🛰 와처 — 자연어 감시 규칙
- "라인 압력이 8bar 넘으면 알려줘"라고 적으면 끝입니다. 주기 실행과 조건 판단은 AI 가 합니다.
- 발동 시 실시간 화면 알림(토스트) + 미확인 배지(기기 간 동기화).
- 알림 목록 화면(검색·더 보기), Slack/Teams 호환 웹훅 발송.
- 채팅 중 "이거 감시해줘" 한마디로 와처를 만들 수 있습니다.
🏭 시맨틱 레이어 — 공장을 이해하는 AI
- 사이트·라인·설비·태그 구조를 스튜디오가 스냅샷으로 학습합니다.
- 에이전트가 설비 이름·별칭·기간 표현("어제", "지난주")을 정확한 데이터 주소로 해석합니다.
- ISA-95 계층 피커로 사람도 같은 구조를 탐색할 수 있습니다.
📊 운영 가시성
- 통계 대시보드(관리자) — 사용량·활동·앱·질의·배포 성공/실패 로그·감사 검색을 탭 하나로.
- 배포는 단계별 진행 다이얼로그(빌드 → 전환)와 QR 코드로 현장 태블릿 접속까지 지원합니다.
- 감사 로그 전문 검색, 배포 이력·롤백 추적.
🤖 코딩 에이전트 고도화
- OpenHands 엔진 — 앱 빌드에 업계 표준 오픈소스 코딩 에이전트 엔진을 선택할 수 있습니다 (환경설정 → 에이전트 → 빌더 엔진). 정밀 편집과 대화 요약 압축으로 긴 세션도 안정적입니다. 채팅(질의)은 영향이 없고, 언제든 내장 엔진으로 되돌릴 수 있습니다.
- 빌더 3모드 — 플랜(구성안 승인 후 빌드) · 자동(기본) · 수락(편집을 프리뷰로 확인한 뒤 수락/되돌리기 — 대화 이력은 보존).
- 슬래시 명령 — 채팅 입력에
/를 치면/plan/build/review/fix/test/loop/deploy가 뜹니다./loop는 타입 검사를 통과할 때까지 자동 수정을 반복합니다(최대 3회).
📱 현장 모바일
- 폰 전용 화면 — 휴대폰으로 접속하면 자동으로 모바일 뷰로 전환됩니다(태블릿·데스크톱 제외).
- 하단 4탭 — 홈 · 채팅 · 와처 · 앱.
- 홈 요약 — 미확인 알림·활성 와처·배포앱·대화 수를 카드로, 최근 알림을 한눈에.
- 실시간 알림 — 다른 기기에서 와처가 발동해도 토스트와 미확인 배지로 즉시 통지합니다.
- 모바일 와처 관리 — 목록·켜기/끄기·즉시 실행·삭제, 자연어로 새 와처 생성까지.
- 배포앱 열람 — 배포된 앱을 라이브 미니 프리뷰 카드로 보고 한 번에 엽니다.
- 테마·언어 — 라이트/다크·한국어/영어 전환.
앱 목록·디자인 업데이트
- 앱 목록 2탭 — [배포됨]·[공유받음]으로 나눠 내가 배포한 앱과 공유받은 앱을 구분합니다.
- 프리미엄 계기판 디자인 — 은은한 오로라 배경·글래스 카드·상태 LED 박동으로 현장 폰 화면을 한층 또렷하게(산업용 다크 톤은 유지).
🔒 보안·운영 하드닝
- 생성 앱 오리진 분리(스튜디오와 별도 리스너) — 신뢰 경계를 명확히 했습니다.
- 플랫폼 API 키는 서버에만 보관하고, 로그인한 사용자에게만 대행합니다(익명 차단).
- 로그인·AI 경로 레이트리밋, 감사 로그, 역할 기반 권한(관리자/빌더/뷰어).
- 모든 핵심 데이터(대화·와처·알림 읽음·스킬·배포 이력)를 PostgreSQL 에 영속합니다 — 브라우저 저장소에 의존하지 않습니다.
- 비공개 배포앱은 소유자·관리자·공유대상만 사용할 수 있습니다(이전의 "로그인한 전체 사용자 허용"에서 강화). 공유는 앱 카드의 '사용자 공유'에서 지정합니다.
- 에어갭(폐쇄망) 설치와 백업/복구 스크립트를 동봉합니다.
설치·업그레이드
| 상황 | 문서 |
|---|---|
| 새로 설치 | 설치 |
| 폐쇄망에 설치 | 에어갭 설치 |
| 도메인·HTTPS 로 서비스 | 도메인과 리버스 프록시 |
| 업그레이드 전 백업 | 백업과 복구 |
| 키를 환경변수로 이관 | 비밀 관리 |
| 문제가 생겼을 때 | 트러블슈팅 |
처음 쓰신다면 시작하기부터 보세요.