이번 Aspectow v4.3.0 릴리즈는 AppMon 클러스터 그룹 뷰(Cluster Group View) 신규 도입 및 멀티 노드 통합 모니터링 체계 구축, 게이트웨이 모드(Gateway Mode) 및 락프리/Zero-Allocation 클러스터 릴레이어 고도화, 메트릭 뷰어(MetricsViewer) 독립 모듈화 및 실시간 롤업(Rollup) 차트 집계, Aspectran 9.8.1 연동을 통한 세션 ID 갱신(changeSessionId) 실시간 추적, 콘솔 로그인 보안 강화(오픈 리다이렉트 방지 및 이전 페이지 안전 리다이렉트), 그리고 TrafficPainter의 키네틱 슬라이딩 프리즘(Kinetic Sliding Prism) 및 블랙홀 물리 메커니즘 도입을 중심으로 한 대규모 기능 및 모니터링 혁신 릴리즈입니다.
단일 클러스터 내 여러 노드의 상태를 한 화면에서 실시간으로 종합 관제할 수 있는 그룹 뷰가 추가되어 대규모 마이크로서비스 및 분산 인프라에 대한 가시성(Observability)이 비약적으로 향상되었습니다. 또한 게이트웨이 모드를 통해 외부 클라이언트와의 다중 노드 WebSocket/롱폴링 세션을 효율적으로 중계하고, GC 부담 없는 Zero-Allocation 메시지 라우팅을 실현했습니다. 대시보드 UI/UX 측면에서도 콘솔 박스 와이드 모드, 메트릭 툴팁 및 세션 카운트 색상 대비 개선, 트래픽 페인터의 인터랙티브 물리 시각 연출을 극대화하여 전문적인 엔터프라이즈 모니터링 환경을 완성했습니다.
🚀 새로운 기능
- AppMon 클러스터 그룹 뷰(Cluster Group View) 신규 도입 및 멀티 노드 통합 관제
- 단일 클러스터에 소속된 여러 노드(Multi-Node)의 메트릭과 동작 상태를 단일 뷰에서 실시간으로 한눈에 파악할 수 있는 클러스터 그룹 뷰를 전면 도입했습니다.
- 프론트엔드 메시지 처리 서명 전반에서
nodeId를 첫 번째 파라미터로 일관되게 표준화하여 멀티 노드 메시지 라우팅 구조를 체계화했습니다. - 그룹 뷰 초기화 시 각 노드의 초기 로그 메시지를 일괄 수신하고, 멀티 노드 콘솔 로그에 직관적인 노드 배지(Node Badge)를 표시하여 출처 노드를 즉시 식별할 수 있도록 지원합니다.
- 동적 노드 세션 필터링(
session-node-filter): 노드별 활성 세션 카운트에 따라 필터 버튼 표시 여부를 동적으로 제어하고, 특정 노드만 선택하여 활성 세션 목록을 필터링할 수 있는 UI를 제공합니다. - 노드 지표(Node Indicator) 상태 제어 및 샘플링 타이머를 최적화하여 다중 노드 환경에서도 부드럽고 끊김 없는 실시간 모니터링을 보장합니다.
- 게이트웨이 모드(Gateway Mode) 및 고성능 클러스터 릴레이어 구축
- 단일 진입점(Gateway) 노드를 통해 분산된 멀티 노드의 모니터링 구독을 일괄 중계할 수 있는 게이트웨이 모드를 지원합니다.
- WebSocket 및 HTTP 롱폴링 릴레이 세션에서 다중 노드 구독(
subscribeMultiNode)을 지원하여 불필요한 개별 연결 생성을 방지하고 네트워크 리소스를 절감했습니다. - 클러스터 전역 릴레이(
relayClusterWide) 및 로컬 릴레이(relayLocally) 고도화:- 가비지 컬렉션(GC) 오버헤드를 극적으로 줄이기 위한 Zero-Allocation 문자열 접두사 검사(
starts-with) 로직을 도입했습니다. - 메시지 라우팅 시 불필요한 직렬화/역직렬화를 방지하는 지연 평가(Lazy Evaluation) 및 다형성 오버로드 메서드를 확충했습니다.
- 가비지 컬렉션(GC) 오버헤드를 극적으로 줄이기 위한 Zero-Allocation 문자열 접두사 검사(
WebSocketClient및PollingClient의 재연결(Reconnect) 전략을 개선하여 네트워크 일시 단절 및 모바일 브라우저 백그라운드 복귀(Resume) 시의 복구 안정성을 강화했습니다.PollingSessionManager의 세션 스캐빈징(Scavenge) 로직을 최적화하여 비활성 세션 정리 효율을 극대화했습니다.
- 메트릭 뷰어(
MetricsViewer) 독립 모듈 분리 및 실시간 롤업(Rollup) 차트 집계- 기존 대시보드 뷰어에 결합되어 있던 메트릭 카드, 인라인 스파크라인, 팝오버 상세 차트 렌더링 로직을 독립형 컴포넌트인
MetricsViewer(metrics-viewer.js)로 분리 및 모듈화했습니다. - 액티비티 및 세션 통계의 집계(Aggregation) 로직을 공통화하여, 개별 노드 뷰뿐만 아니라 클러스터 그룹 뷰에서도 멀티 노드 실시간 롤업 집계 차트 업데이트를 일관되게 제공합니다.
- 메트릭 카운터 지속(Persist) 스케줄러에서 타임스탬프를 분(minute) 단위로 정규화하여 시계열 롤업 데이터의 정합성을 보장했습니다.
- 불필요한 중복 라벨 추적 로직을 제거하여 차트 렌더링 성능을 최적화했습니다.
- 기존 대시보드 뷰어에 결합되어 있던 메트릭 카드, 인라인 스파크라인, 팝오버 상세 차트 렌더링 로직을 독립형 컴포넌트인
- Aspectran 9.8.1 연동 및 세션 ID 갱신(
changeSessionId) 실시간 추적- Aspectran 9.8.1의 세션 고정 방지 API와 연동하여,
SessionEventReader및SessionEventReadingListener에sessionIdChanged이벤트 수신 로직을 추가했습니다. - 로그인 성공 등으로 세션 ID가 교체될 때
changedSessions매핑을 전파받아 AppMon 대시보드 상에서 이전 세션 카드를 즉시 제거하고 신규 세션 ID로 실시간 전환 렌더링하도록 구현했습니다. ActivityEventCounter및ActivityEventReader의 모니터링 어드바이스 액션에 사람이 읽을 수 있는 설명(description)을 지정하여 Aspectran 최신 AOP 어드바이스 로깅과 완벽히 연동했습니다.
- Aspectran 9.8.1의 세션 고정 방지 API와 연동하여,
- 콘솔 로그인 보안 강화 및 이전 페이지(Referrer) 안전 리다이렉트
- 비로그인 사용자가 보호된 페이지에 접근 시 로그인 페이지로 이동된 후, 로그인 성공 시 원래 요청했던 이전 페이지(
referrer)로 안전하게 리다이렉트되도록 개선했습니다. UserAuthAspect에서 쿼리스트링을 포함한 원본 요청 URL을referrer파라미터로 안전하게 보존합니다.LoginActivity에 오픈 리다이렉트(Open Redirect) 및 XSS 방지를 위한 철저한 로컬 URL 검증 로직(isSafeLocalUrl)을 구현하여 외부 악성 도메인 이동, 프로토콜 상대 URL, 줄바꿈(CRLF) 및 특수 제어 문자를 원천 차단했습니다.- 콘솔 로그인 폼에
localStorage기반의 “사용자명 기억하기(Remember Username)” 기능을 추가하여 사용자 편의성을 높였습니다.
- 비로그인 사용자가 보호된 페이지에 접근 시 로그인 페이지로 이동된 후, 로그인 성공 시 원래 요청했던 이전 페이지(
- TrafficPainter 인터랙티브 비주얼 고도화 (Kinetic Sliding Prism 및 블랙홀 메커니즘)
- 블랙홀 메커니즘 고도화: 트랩된 불릿의 궤도 회전(orbiting) 및 방출 시 분산(dispersion) 물리 로직을 정교화하고, 흡수된 불릿 수에 따른 동적 크기 조절, 순간 가속 부스트 및 발광(Glow) 효과를 구현했습니다.
- 키네틱 슬라이딩 프리즘(Kinetic Sliding Prism): 부드러운 이징(Easing) 트랜지션 기반의 프리즘 이동 메커니즘을 도입하여, 블랙홀 활동에 따라 동적으로 위치를 제어하고 프리즘 게이트 통과 시 정밀한 불릿 분산 연출을 제공합니다.
- 좁은 트랙에서의 프리즘 페이드 애니메이션 적용 및 레이아웃을 최적화했습니다.
🚀 개선 사항
- 대시보드 UI/UX 및 시각적 대비(Contrast) 전면 개선
- 콘솔 박스 와이드 모드 토글(
wide mode toggle) 기능을 추가하여 넓은 모니터 환경에서 로그 및 세션 박스를 시원하게 확장해 볼 수 있도록 지원했습니다. - 대시보드 툴팁 배경색의 가독성을 보정하고, 세션 카운트 및 활성 세션 수의 컬러 팔레트/배경색 대비(Contrast)를 개선하여 밝은 테마와 어두운 테마 모두에서 최적의 시인성을 확보했습니다.
- 불필요한 타이틀 바 제거 및 이벤트 박스/컨트롤 바 구조를 단순화하여 대시보드 공간 활용도를 극대화했습니다.
- 로그인 카드 패딩, 로고 크기, 모바일 반응형 뷰포트 레이아웃을 정교하게 보정했습니다.
- 콘솔 박스 와이드 모드 토글(
- TrafficPainter 캔버스 리사이징 및 Flexbox 레이아웃 최적화
- 캔버스 리사이징 기준을
parentElement에서canvas자체로 단순화하고 불필요한finishLineOffset연산을 제거했습니다. .track-box에 Flexbox를 전면 적용하여traffic-canvas와 트랙 스택 간의 수직/수평 정렬 완성도를 높였습니다.
- 캔버스 리사이징 기준을
- H2 데이터베이스 종료(Shutdown) 및 프로세스 안정화
- Console 구동 시 H2 데이터베이스 종료 처리 로직을 개선하여 서버 모드 감지 및 정밀한 예외 처리를 통해 애플리케이션 종료 시 DB 파일 손상 및 락 잔류를 방지했습니다.
- 루트 서비스가
DaemonService가 아닌 경우 분리된 OS 재시작(detached OS restart) 명령을 안전하게 건너뛰도록 방어 가드를 추가했습니다.
- 정적 에셋 번들링 파이프라인 현대화 (
AppMon v4.3)- 정적 에셋 번들 버전 및 캐시 무효화 파라미터를 최신
v4.3규격으로 일괄 갱신했습니다. metrics-viewer.js를 빌드 타임 번들링 목록에 포함하여 브라우저 로딩 속도를 최적화했습니다.
- 정적 에셋 번들 버전 및 캐시 무효화 파라미터를 최신
- macOS ARM64 (Apple Silicon) 전용 프로파일 추가
appmon-demo및console-demo에 macOS aarch64 네이티브 DNS 리졸버(netty-resolver-dns-native-macos) 프로파일을 추가하여 M 시리즈 맥 환경에서의 기동 속도 및 DNS 해석 안정성을 높였습니다.
🐛 버그 수정
- 다중 세션 구독 중 특정 세션 구독 취소 시 메트릭 익스포터 조기 중단 수정
- 동일 애플리케이션에 대해 다른 세션이 여전히 활성 구독 중인 상황에서 하나의 세션이 구독을 해제(
unsubscribe)할 때, 메트릭 익스포터가 조기 중단되던 동시성 버그를 해결했습니다.
- 동일 애플리케이션에 대해 다른 세션이 여전히 활성 구독 중인 상황에서 하나의 세션이 구독을 해제(
- 이전 명령 이력 로딩 시 차트 데이터 중복 읽기 방어
- 콘솔에서 이전 실행 명령을 탐색/로딩할 때 불필요하게 차트 데이터를 다시 읽어 발생하던 지연 및 데이터 왜곡을 방지했습니다.
🛠️ 의존성 라이브러리 업그레이드
- 프레임워크 및 코어 컴포넌트
- Aspectran: 9.8.0 → 9.8.1
- Netty: 4.2.18.Final → 4.2.19.Final
- Lettuce Core: 7.8.0.RELEASE → 7.9.0.RELEASE
- 빌드 및 플러그인
- Central Publishing Maven Plugin: 0.11.0 → 0.12.0
- Apache Maven (Wrapper): 3.9.16 → 3.10.0
- AppMon 정적 에셋: v4.2 → v4.3 번들링 파이프라인 갱신
Juho Jeong NEWS
Release