PC 응답 지연을 조사하는 분석가와 파일 배포 기능 (월간 리뷰 2026-11-01)

능동 분석가의 파일 대기 조사, 파일 배포와 업로드 이어하기, 네트워크 구역·파일함 화면 개편을 GitHub 커밋과 Jira 기록으로 정리했습니다.

2026년 10월 1일부터 10월 31일까지의 개발 기록입니다. Orange The Client는 Windows PC의 성능·보안 증상을 수집하고, 웹 매니저에서 상태를 확인하거나 원격 명령을 실행하는 제품입니다. 이번 달에는 PC가 무엇을 기다리다 멈췄는지 조사하는 능동 분석가, 여러 노드에 파일을 배포하는 서버 기능, 네트워크 구역과 파일 관리 화면의 변경이 있었습니다.

성과는 기간 중 실제 커밋을 먼저 확인하고 Jira 본문과 대조했습니다. Jira 완료 상태는 기록 누락이 있어 개발 완료 건수와 같지 않습니다. 아래 내용은 구현·변경 기록이며 모든 기능의 고객 환경 배포 완료를 뜻하지 않습니다.

멤버커밋+라인−라인
룰·데이터 분석 파트11221,6609,600
커널 드라이버 파트38,6982,101
프론트엔드 파트10924,69615,427
분석 서비스 파트17936,9565,778
서버 백엔드 파트14618,5904,574
매니저·에이전트 파트1,844572,654131,262

라인 수는 전체 저장소의 실소스 변경 합계입니다. 커밋 크기로 제외하지 않았으며 머지 커밋은 집계에서 뺐습니다.

  • 룰·데이터 분석 파트: 바이너리 4파일·생성물 0파일 제외(커밋별 변경 파일 합계).
  • 커널 드라이버 파트: 바이너리 0파일·생성물 5파일 제외(커밋별 변경 파일 합계).
  • 서버 백엔드 파트: 바이너리 1파일·생성물 0파일 제외(커밋별 변경 파일 합계).
  • 매니저·에이전트 파트: 바이너리 290파일·생성물 1618파일 제외(커밋별 변경 파일 합계).

룰·데이터 분석 파트

[정팀장] PC 점검 명령과 결과 해석 기준 확장 (OR-2410)

PC 상태 점검과 증상별 체크리스트를 추가하고, Defender 검사 시작·완료·중단을 날짜별로 조회하도록 바꿨다. SYSTEM 계정에서 사용자 네트워크 드라이브와 HKCU를 읽을 때의 한계를 결과 옆에 알리게 했다. 이벤트 조회가 비었다는 이유만으로 해당 기간에 사건이 없었다고 답하지 않도록 로그 이름과 조회 기간도 구분했다.

[룰] 배포 ZIP 구성과 룰 해시 불일치 수정 (OR-2326, OR-2393)

룰 ZIP 생성 배치 파일을 추가하고 RULE·revision·SHA256·압축 파일을 함께 담도록 했다. CRLF로 남은 룰 9개는 파일 끝을 변경해 에이전트가 다시 받게 했다. 매니저에는 서버가 거부한 조건을 여러 줄로 표시해 잘못된 묶음의 원인을 확인할 수 있게 했다.

[매니저] 네트워크 이슈 현황과 부하 집계 표시 수정 (OR-2434, OR-2223)

서버가 재확인한 TCP·DNS 이슈를 목록·상세·대시보드 카드로 표시하는 위젯을 만들었다. 전체 노드 부하 화면은 CPU·메모리 평균을 두 번 나누던 계산을 고치고, 오늘 고점을 시간 구간 평균의 최고값으로 표시했다. PC명을 눌러 노드 상세를 여는 동작도 추가했다.

[홈페이지] 릴리즈 노트 게시와 검색 목록 갱신

1.6.242.0929·1013·1020 릴리즈 노트를 게시하고 1020 PDF의 페이지 나눔을 수정했다. 글 목록 sitemap에 lastmod를 추가했다. 이 작업은 Orange-Labs 커밋으로 확인했으며 해당 저장소의 CLAUDE.md는 받지 못했다.

커널 드라이버 파트

[에이전트] TCP 지연 판정 임계값 보고와 미사용 코드 제거 (OR-2210)

SLOW_SUCCESS 판정의 3,000ms 임계값을 상수로 두고 보고서에도 같은 값을 내보내도록 했다. 컴파일 대상이 아닌 CETW.Network.cpp와 쓰지 않는 TcpStats 함수를 제거했다. 판정에 쓰는 기준과 화면에 전달하는 기준이 달라지지 않게 한 변경이며, 기간 커밋은 3건이다.

[에이전트] COM 재현·관측 도구 등록

MiniCalc와 COMMonitor를 저장소에 넣었다. COM 현상을 다시 만들고 관측할 때 사용할 도구를 코드와 함께 보관한 작업이다. 고객 장애 원인 규명과 조치 완료는 이 커밋만으로 성과에 포함하지 않았다.

프론트엔드 파트

[매니저] 네트워크 구역 개편안의 정식 메뉴 전환 (OR-2371, OR-2395, OR-2402, OR-2422)

실험실의 네트워크 구역 화면을 실제 API에 연결한 뒤 정식 메뉴로 교체했다. 저장 경합과 중복 판정을 수정하고, 요약 수를 트리·노드 목록과 맞췄다. 뒤로가기 시 필터 복원, Esc로 최상단 창만 닫기, 좁은 화면의 표 넘침까지 수정해 구역 편집 중 화면 상태를 유지하게 했다.

[매니저] 파일함과 배포 화면의 정식 전환 (OR-2513, OR-2530, OR-2537, OR-2538)

파일함을 분류·목록·상세의 3단 화면으로 바꾸고 시스템 파일과 버전 이력을 따로 확인하게 했다. 배포 화면은 실패 내용과 노드 목록을 먼저 보여 주고, 배포 생성은 4단계로 줄였다. 실험실 구현을 정식 파일 메뉴에 연결한 뒤 이름 수정, 업로드 설명 보존, 배포 대상 0대 처리 등의 결함도 수정했다.

[매니저] 초기 로딩과 실시간 화면 처리 비용 감소 (OR-2289, OR-2290, OR-2297)

설정 위젯과 Excel 내보내기를 필요한 시점에 불러오고, eCharts는 사용하는 차트만 공용 모듈에 등록했다. Jira에 기록된 빌드 비교에서 DashboardPage JS는 3,900KB에서 1,724KB로 줄었다. 노드 통계가 같으면 저장소 갱신을 생략하고 위젯의 전체 저장소 구독을 줄였다.

[매니저] 노드 중복 조회와 용량 단위 오류 수정 (OR-2432)

노드 저장소를 먼저 사용하고 개별 요청의 동시 실행 수를 제한했다. 같은 요청의 캐시 키를 맞추되, 오래된 인벤토리 때문에 값이 달라진 디스크 표시는 되돌렸다. 디스크·메모리 용량은 공용 parseSize로 읽어 K 단위를 바이트로 오독하던 문제를 수정했다.

분석 서비스 파트

[서버] 파일 배포 API와 배정 서비스 구현 (OR-2341, OR-2370, OR-2456)

배포 생성·조회·중지·재개·취소와 실패 노드 재실행 API를 만들고 orange.deploy 서비스에 배정 처리를 구현했다. 원본 파일 보호, 만료 배포 차단, 늦게 도착한 보고와 다운로드 실패 횟수 처리도 추가했다. 매니저에는 파일 메뉴와 배포 상세를 연결하고 예약·복사·설치 확인 결과를 표시했다.

[서버] 큰 파일 업로드 이어하기 (OR-2452)

업로드 세션과 조각 전송 API를 만들고 매니저의 진행률·멈춤 동작에 연결했다. 서버 임시 파일이 사라지면 받은 위치를 되돌리고, 오래 멈춘 세션과 임시 파일은 정리 배치에서 삭제한다. 8MB 조각 단위로 전송해 큰 설치 파일을 한 요청에 모두 보내지 않게 했다.

[서버] TCP·DNS 증상 재확인과 이슈 저장 (OR-2434)

TCP·DNS 증상을 10분마다 다시 확인하고 대상별 이력과 수동 재확인 API를 추가했다. 매 분 프로세스를 실행하던 cron 방식은 orange.symptom-action 상주 서비스로 바꿨다. 열린 이슈에는 겪은 노드와 마지막 증상 시각을 쌓아 반복 발생을 확인하게 했다.

[서버] 메뉴·배포 권한 판정과 증상 조회 수정 (OR-2524, OR-2446)

위젯 권한을 메뉴 권한으로 옮기고 설정 항목별 저장 API와 배포 대상의 그룹별 기능 권한을 적용했다. 역할 변경은 세션에 즉시 반영하고 대상 권한을 판정하지 못하면 배포를 막는다. 증상 첫 화면 집계는 먼저 그룹을 줄인 뒤 일상 항목을 제외하도록 바꿨으며, 응답 형식은 유지했다.

서버 백엔드 파트

[패키징] 에이전트 출하 파일의 ZIP 단일화 (OR-2380)

에이전트 배포 단위를 ZIP 하나로 바꾸고 sh·bat 패키징에서 압축을 풀어 서버 업데이트 폴더에 싣도록 했다. ZIP이 하나가 아니거나 필수 파일이 없으면 빌드를 멈춘다. 릴리즈 노트 도구도 ZIP 안의 PACKAGE를 읽게 바꿔 출하 버전 이력이 끊기지 않게 했다.

[패키징] 서비스 정지 실패와 재시작 대기 처리 (OR-1062)

업데이트 전 서비스 상태를 ActiveState로 확인하고 재시작 대기 중인 서비스도 stop 대상으로 처리했다. 서비스 정지와 MongoDB 계정 설정이 실패한 상태에서 설치가 계속되던 문제도 수정했다. 제거 스크립트는 purge 실패를 숨긴 채 설정과 데이터를 지우지 않도록 바꿨다.

[서버] 룰 ZIP 검증과 관리자 정책 보존 (OR-2326)

기존 룰 파일을 교체하기 전에 산출물 4개와 파일 목록·revision을 검사하도록 했다. 잘못된 묶음은 거부 조건을 함께 반환하고, 업로드·동기화의 preservePolicy 기본값을 true로 바꿨다. 관리자가 꺼 둔 룰이 다음 업로드 때 다시 켜지는 문제를 처리한 변경이다.

[매니저] 네트워크 구역 입력과 서버 관리 수정 (OR-1630, OR-556)

하위 구역 입력과 공유기 MAC 정규화·검증을 추가하고, 흔한 사설 IP만으로 구분하기 어려운 경우 부족한 근거를 표시했다. 온라인 노드는 삭제 메뉴를 숨기고 서버도 409로 거부하도록 했다. 노드 삭제 시 남던 baseline·자원 원자료·원인 분석 자료의 정리도 추가했다.

매니저·에이전트 파트

[에이전트] 능동 분석가와 파일 대기 원인 조사 (OR-2413, OR-2414)

기존 덤프 분석 엔진을 사용하는 능동 분석가를 추가하고 프로세스·스레드·파일 대기를 조사하는 기능을 구현했다. oprobe와 ofilter의 커널 조회로 멈춘 핸들의 파일 이름과 Busy·Waiters 값을 받아 분석에 사용한다. 수집한 사실을 재생 입력에도 저장해 같은 자료로 분석을 다시 확인할 수 있게 했다.

[매니저] 분석가 실행·진행 표시와 공용 관계도 (OR-2345, OR-2451, OR-2447)

Agent UI의 분석 화면을 매니저 증상 상세에 옮기고 LiveAgent에서 분석가를 실행하도록 연결했다. 진행 스트리밍과 리포트·증적 업로드를 추가하고, 관계도와 부하·브라우저·설정 화면을 에이전트 UI의 표시 방식에 맞췄다. 현장 PC의 분석과 매니저에서 보는 결과를 연결한 작업이다.

[에이전트] DB 조회 대기와 기반 기능 분리 (OR-2459, OR-2497, OR-2547, OR-2532)

커밋 중 자동 체크포인트 대신 한가할 때 작은 단위로 실행하는 처리를 넣고 WAL 강제 상한을 64MB에서 8MB로 낮췄다. 카운터 저장 쿼리는 이번 부팅 행으로 한정했다. ThreadPool·Stat을 SubSystem으로 옮기고 족보·카운터 조회가 종료 신호를 받으면 중단하도록 했다.

[정팀장] 조사 지침과 명령 결과 재사용 수정 (OR-2410, OR-2506)

PC 상태와 증상별 조사 지침을 늘리고 시각·예약 번호·명령 결과를 읽는 처리를 수정했다. 명령 결과를 받는 턴에서 앞 추론을 유지하도록 바꿔 같은 명령을 되풀이하는 문제를 처리했다. 체크리스트 명령과 서버 자료의 범위를 구분해 과거 시점 질문을 현재 값으로 답하지 않게 했다.

[서버] 이슈 수신·조회와 노드 대시보드 (OR-2505, OR-2510, OR-2458)

이슈 수신 서비스와 API를 만들고 노드·그룹·도메인·IP 대역으로 목록을 좁히게 했다. 매니저 이슈 화면에는 노드·그룹 선택 트리와 검색·종류 필터를 배치했다. 노드 대시보드는 하루 부하 TOP10과 증상·사양을 모아 서버 자료로 PC 상태를 확인하도록 했다.

[원격제어] 원격 탐색기와 한영 키 처리 (OR-2542, OR-2390)

노드 파일을 탐색하고 업로드·실행하는 원격 탐색기를 구현했다. CD·DVD에서 지원하지 않는 파일 속성 조회는 다른 조회 방식으로 처리해 오류 87로 열리지 않던 문제를 수정했다. 물리 한영 키가 없는 키보드의 원격 한영 전환도 처리했다.

[룰] 지속 부하와 하드웨어 증상 탐지 (OR-2496, OR-2361)

하루 종일 꾸준한 부하를 별도 증상으로 탐지하고 분석가의 부하 분석을 연결했다. CPU 속도 제한·배터리 노후·그래픽 드라이버 없음에 대한 규칙도 추가했다. 한 시간의 급증과 장시간 지속 부하를 구분해 기록하는 작업이다.

수집 범위

저장소는 조직 목록에서 실행 시점에 조회했습니다. GitHub 커밋과 Jira 설명으로 확인한 변경만 적었으며, 고객사명·호스트명·개인 사용자 경로는 공개 글에 싣지 않았습니다.

CLAUDE.md 누락 레포: Orange-BinSnap, Orange-Labs, Orange-Test, blogs, company, orange-monitoring. 해당 저장소는 제품 정의를 추정하지 않고 확인한 변경만 적었습니다.