2026년 8월 1주차(2026-08-03 ~ 2026-08-10, ISO week 33) 주간 리뷰. 한 주 동안 푼 문제 중심으로 정리한다.
이번 주 GitHub 커밋이 0건인 룰·데이터 분석 파트는 이번 주 활동이 코드 커밋이 아닌 상류 사양 정의·근본 원인 분석이었기에 카운트가 0인 것이 정상이며, 아래 별도 섹션에서 정리한다.
원격 지원 인프라 자체화와 연결 견고성
자체 원격 화면 제어 자체 구현 — DXGI 캡처+MF H.264+libdatachannel, 보안 데스크톱 2프로세스 분리 (OR-1703). 상용 라이브러리에 의존하던 원격 화면 제어를 DXGI Desktop Duplication 캡처 · Media Foundation H.264 하드웨어 인코딩 · libdatachannel WebRTC 시그널링으로 직접 구현했다. UAC·로그온 등 보안 데스크톱(secure desktop) 화면은 일반 세션에서 캡처가 막히므로, 캡처·인코딩 프로세스와 세션을 넘나드는 프로세스를 둘로 분리해 잠금화면·권한 상승 창까지 끊김 없이 전송하도록 설계했다. 자체 스택이라 코덱·전송·시그널링을 제품 요구에 맞게 완전히 통제할 수 있고, 외부 SDK 라이선스·종속성 위험을 제거했다.
coturn(TURN 릴레이) 설치 패키지 표준 편입 — 원격 지원 인프라 배포 자동화 (OR-1752). WebRTC ICE가 방화벽 뒤 단말을 잇기 위해 필요한 coturn(STUN/TURN 릴레이)을 Orange 서버 설치 패키지의 표준 구성요소로 편입했다. 수동으로 별도 설치·설정하던 릴레이 서버를 setup.sh 흐름에 넣어 배포마다 자동 구성되게 하고, 인증 크레덴셜·포트를 서버 설정으로 관리하도록 표준화했다. 원격 제어가 특정 개발 환경이 아니라 모든 고객사 서버에서 동작하는 기반을 만든 작업이다.
원격 연결 경로 다단화 — P2P UDP 우선, 실패 시 coturn TCP 릴레이 폴백·이중 NAT 미디어 릴레이 전환 (OR-1813, OR-1797). 원격 화면 연결을 P2P UDP 직결을 우선 시도하고, UDP가 막힌 기업망에서는 coturn TCP 릴레이로 자동 폴백하도록 연결 경로를 다단화했다. VM처럼 이중 NAT 뒤에 있어 후보 주소 교환만으로는 뚫리지 않는 환경을 위해 미디어 기반 릴레이 전환 경로까지 넣어, 망 구성과 무관하게 연결이 성립하도록 했다. 실제 고객사 현장의 다양한 방화벽·NAT 조건에서 원격 지원이 끊기지 않게 하는 핵심 견고성 작업이다.
세로 모니터 회전 렌더링 결함 수정 — CPU 변환 경로에 회전 누락 (OR-1817). 세로로 회전한 모니터를 원격으로 볼 때 화면이 90도 틀어져 나오던 문제를 고쳤다. GPU 경로에는 회전 처리가 있었으나 폴백용 CPU 변환 경로에 회전 적용이 빠져 있던 것이 원인으로, 두 경로 모두 디스플레이 방향(orientation)을 반영하도록 정렬했다. 세로 모니터를 쓰는 콜센터·업무 PC에서 원격 화면이 정상 방향으로 보이게 한 실사용 결함 수정이다.
로그온 화면 키보드 입력·fps=0 오표시 수정 — 잠금 상태 원격 조작 복구 (OR-1786). 원격 제어 중 로그온·잠금 화면에서 키보드 입력이 전달되지 않고, 전송 프레임레이트가 0으로 잘못 표시되던 두 결함을 잡았다. 보안 데스크톱 전환 시 입력 주입 경로가 끊기던 것과 fps 계측 시점이 어긋나던 것을 각각 바로잡아, 관리자가 로그인 전 단계부터 원격으로 조작·진단할 수 있게 했다.
패키징 zip 간헐 실패가 성공으로 보고되던 버그 수정 (OR-1842). 제품 패키징 중 zip 압축이 간헐적으로 실패하는데도 스크립트가 성공으로 보고해, 깨진 패키지가 배포될 수 있던 위험을 제거했다. 압축 종료 코드를 실제로 검증해 실패 시 중단·보고하도록 고쳐, 패키징 산출물의 신뢰성을 확보했다.
원격 제어 인프라와 대규모 조회 최적화
Signal Command 인프라 신설 — T0/T1/T2 등급 노드 제어(재시작·재부팅·종료·업데이트) (OR-1673). 노드에 재시작·재부팅·종료·업데이트 같은 제어 명령을 안전하게 내리는 Signal Command 인프라를 신설했다. 명령의 영향 범위·위험도에 따라 T0/T1/T2 등급을 두어 권한·확인 절차를 차등화하고, 단발 실행 명령과 상태 변경 명령을 구분해 감사·귀속이 남도록 설계했다. 그동안 사람이 개별 접속해 처리하던 대량 단말 운영을 서버 주도 원격 명령으로 옮기는 토대다.
노드 자산 인벤토리 번들 API — 노드×카테고리 최대 2,100요청을 단일 번들 콜로 (OR-1761). 그룹 요약 위젯 진입 시 노드×카테고리를 개별 호출해 최대 2,100건까지 치솟던 자산 조회를, 원자료를 묶어 캐시로 주는 번들 엔드포인트로 교체했다. 서버는 파싱·판정을 하지 않고 분포·EOL·적합 판정은 프론트가 맡도록 계약을 확정했으며, 삭제 노드 고아 문서 배제·ETag/304·gzip 캐시로 첫 진입 대기까지 없앴다. 그룹 현황 랜딩(OR-1641)이 실규모 노드에서도 즉시 뜨게 하는 서버측 기반이다.
MQTT 토픽 네임스페이스 보호 — group_code 검증으로 교차 그룹 명령 오염 차단 (OR-1804). 1:N 그룹 명령이 MQTT 토픽에 group_code를 실어 발행되는 구조에서, 검증되지 않은 group_code가 다른 그룹의 토픽 네임스페이스를 침범할 수 있던 위험을 막았다. 발행 전 group_code를 검증해 형식·소유 범위를 벗어난 값을 거부하도록 해, 잘못된 명령이 엉뚱한 노드 묶음으로 새어 나가지 않게 했다. 다수 고객사·그룹이 같은 브로커를 공유하는 환경의 격리 안전성을 높인 작업이다.
노드 목록 500 에러 원인 규명·수정 — 오염된 문서 1건이 전체 조회를 무너뜨림 (OR-1798). 노드 목록 조회가 500으로 통째로 실패하던 장애를, System 필드가 기대 스키마와 다른 형태로 저장된 오염 문서 단 1건이 역직렬화를 깨뜨린 것으로 규명했다. v2 평면 System 스칼라 구조로 정규화하고 방어적으로 처리해, 문서 하나의 이상이 전체 목록을 무너뜨리지 못하게 했다. 한 노드의 데이터 이상이 화면 전체 장애로 번지던 단일 장애점을 제거했다.
보안 의존성 업그레이드 — starlette·cryptography 알려진 취약점 대응 (OR-1839). starlette·cryptography 등 백엔드 핵심 의존성의 알려진 CVE에 대응해 안전 버전으로 올렸다. 프레임워크·암호 라이브러리 취약점은 REST API 전 엔드포인트의 노출면이 되므로, 회귀 없이 상향해 공급망 위험을 선제 차단했다.
폐쇄망 무인 업데이트 스크립트 update.sh — 8단계 자동·오류 시에만 중단 (OR-1062). 매 단계 입력을 기다리던 setup.sh 업데이트 모드를 대체해, 한 줄 실행으로 끝까지 자동 진행하는 무인 업데이트 스크립트를 만들었다. 서비스 중지 확인·dist 백업 후 교체·복사 실패 시 자동 복원·MongoDB 생존 확인·서비스 is-active 검증까지 각 단계 성공/실패를 명시 검증하고, 인터넷 없이 USB 복사만으로 동작해 폐쇄망 고객사 현장 업데이트에 대응한다.
조회 API 통합과 배포 자동화
증상 위젯 v3 — /detects 단일 엔드포인트로 통합, groupBy 드릴다운 (OR-1801). 여러 갈래로 나뉘어 있던 증상 조회를 /detects 단일 엔드포인트로 통합하고, groupBy 파라미터로 그룹·노드·증상 축을 오가며 파고드는 드릴다운을 지원하도록 v3로 재설계했다. 엔드포인트가 하나로 모이면서 프론트가 축만 바꿔 같은 데이터를 재구성할 수 있게 돼, 위젯별로 흩어지던 조회 로직과 중복 서버 부하를 함께 줄였다.
고객사 원격 배포 스크립트(deploy.ps1) 수정 — 다중 서버 무인 배포 안정화 (OR-1733). 패키지를 여러 서버에 업로드·설치하는 원격 배포 스크립트의 결함을 잡아 무인 배포를 안정화했다. 업로드·압축 해제·설치 스크립트 실행이 한 서버 실패에 걸려 멈추지 않고 나머지를 계속 진행하도록 하고, 원격 실행 중 프롬프트 무한대기를 막았다. 현장 배포 시간을 줄이는 운영 자동화 마무리 작업이다.
에이전트 실행 사양·근본 원인 분석
에이전트팀 실행 스펙 작성 — 4개 증상·6개 조치, 실측 프로브+MS 표준으로 검증 (OR-1803). 에이전트가 탐지·대응해야 할 4개 증상과 6개 조치를 실행 가능한 스펙으로 정의해 에이전트팀에 전달했다. 각 항목을 실제 프로브 측정값과 Microsoft 공식 기준으로 교차검증해, 임의 임계값이 아니라 근거 있는 판정·조치가 되도록 했다. 코드가 아닌 사양 작업이지만 에이전트 대응 로직의 정확도를 좌우하는 상류 정의다.
CDiskCleaner 구조 분석 — 7.3GB 대상 중 212KB만 회수되는 원인 규명 (OR-1818). 디스크 정리 기능(CDiskCleaner)이 7.3GB 정리 대상 중 실제로는 212KB만 회수하던 문제를 구조적으로 분석했다. 정리 대상 산정과 실제 삭제 경로가 어긋나 대부분의 공간이 회수되지 않는 지점을 짚어 개선 방향을 문서로 남겼다. 사용자가 체감하는 '정리해도 안 줄어든다' 현상의 근본 원인을 규명한 분석이다.
재부팅·디스크 증상 조사 및 대응 룰 정의 완료 (OR-1794, OR-1807, OR-1814). 재부팅·디스크 관련 증상들의 발생 조건과 조치 기준을 조사·정리하고, 대응 룰 정의(OR-1794)를 완료 처리했다. 현상별 판정 기준을 에이전트 규칙 엔진이 참조할 정의로 반영했다.
에이전트 배포 이식성
에이전트 드라이브 독립화 — 설치 드라이브 상대 경로화, 2개 루트 CSIDL 보정·InstallPath 레지스트리 (OR-1695). 에이전트가 C: 드라이브에 설치됐다고 가정하던 하드코딩 경로들을 설치 드라이브 상대 경로로 전환해, 어느 드라이브에 깔려도 동작하도록 했다. 절대 경로로 남아 있던 2개 루트를 CSIDL 기반으로 보정하고 설치 위치를 InstallPath 레지스트리에서 읽도록 정리해, D:·E: 등 비표준 설치 환경의 오작동을 없앴다. 고객사마다 다른 드라이브 구성에 대응하는 이식성 작업이다.
설치 드라이브 선택형 인스톨러 — 설치 위치 지정 지원 (OR-1766). 설치 시 대상 드라이브를 선택할 수 있는 인스톨러를 구현했다. 드라이브 독립화(OR-1695)와 짝을 이뤄 관리자가 C: 외의 드라이브에 에이전트를 배치할 수 있게 하고, 설치 경로를 레지스트리·상대 경로 체계와 일관되게 기록하도록 했다. 저장공간·정책상 특정 드라이브 설치가 필요한 현장을 지원하는 배포 작업이다.
그룹 현황 랜딩과 매니저 UX 확충
그룹별 노드 현황 요약 랜딩 — 노드 그리드 대신 공간·조직 단위 3단 구조, 실시간 KPI·드릴다운 (OR-1641). 노드 위젯 진입 시 수백 개 노드 그리드 대신 그룹(강의실·부서) 단위 요약 카드가 먼저 뜨고, 카드→그룹 상세→노드 목록으로 좁혀 들어가는 3단 구조를 개발했다. '이 실습실에서 AI 수업이 되나' '올해 교체할 PC가 몇 대인가' 같은 관리자의 실제 질문에 노드를 하나씩 열지 않고 집계·필터·실시간 KPI로 답하고, 요구사양 미충족 노드는 사유까지 드릴다운하도록 했다. 서버측 번들 API(OR-1761)와 짝을 이뤄 실규모 노드에서도 즉시 뜨는 그룹 현황 화면을 완성했다.
명령 관리 v2 + 위젯 폐기(deprecated) 체계 — 구버전 위젯 안전 퇴출 경로 (OR-1586). 명령 관리 화면을 v2로 개편하면서, 더 이상 쓰지 않는 위젯을 즉시 삭제하지 않고 deprecated로 표시해 단계적으로 걷어내는 체계를 도입했다. 사용 중인 대시보드를 깨지 않으면서 구버전 위젯을 안전하게 퇴출할 수 있어, 위젯 68종을 운영하는 매니저의 유지보수 리스크를 낮췄다.
설정 위젯 미저장 변경 보호 — 이탈 시 변경 유실 방지 (OR-1453). 설정 위젯에서 변경 후 저장하지 않고 화면을 벗어나면 입력이 소리 없이 사라지던 문제를, 미저장 변경을 감지해 이탈 전 경고하도록 보호 장치를 넣었다. 관리자가 공들여 조정한 설정을 실수로 날리지 않게 하는 사용성 안전 장치다.
탐지 예외 위젯 신설 — 오탐 제외 규칙 관리 UI (OR-1800). 정상 동작인데 증상으로 잡히는 오탐을 관리자가 예외로 등록·관리하는 탐지 예외 위젯을 신설했다. 예외 규칙을 화면에서 직접 다루게 해, 반복되는 오탐으로 실제 위협 신호가 묻히는 것을 줄였다.
홈페이지 SEO 개선 (OR-1802). 제품 홈페이지의 검색 노출을 높이기 위해 메타데이터·구조를 SEO 기준에 맞춰 정비했다. 제품 인지·유입에 직결되는 마케팅 측면의 개선 작업이다.