Releases

Aspectow 4.2 출시 노트

이번 Aspectow v4.2.0 릴리즈는 Aspectran 9.8.0 연동 및 Netty(aspectran-with-netty) 임베디드 서버 엔진 전면 지원, AppMon 대시보드의 실시간 시계열 메트릭 시각화(인라인 스파크라인 및 팝오버 상세 차트), 초경량 락프리(Lock-Free) Redis 커넥션 풀 아키텍처 전환, 그리고 MaxMind GeoIP2 기반 경량 IPCountryResolver 신규 도입을 중심으로 한 대규모 기능 및 성능 혁신 릴리즈입니다.

서블릿 컨테이너 없이 구동되는 고성능 비동기 Netty 런타임을 appmon-demo 및 console-demo의 기본 서버 엔진으로 채택하여 마이크로서비스 운영 효율성을 극대화하였으며, 대시보드 모니터링 메트릭의 직관적인 트렌드 분석 기능, commons-pool2를 배제한 고성능 Lettuce 공유 커넥션 풀링, 정밀한 세션 수명 주기 추적과 UI/UX 개선을 통해 플랫폼 관리의 신뢰성과 운영 편의성을 대폭 향상했습니다.

🚀 새로운 기능

  • Aspectran 9.8.0 기반 Netty (aspectran-with-netty) 임베디드 서버 엔진 지원 및 기본화
    • appmon-demo 및 console-demo 모듈의 기본 웹 서버 엔진으로 aspectran-with-netty를 도입하고 기본 의존성 구조를 Netty 기반으로 전환했습니다.
    • NettyServerPortProvider를 구현하여 Netty 서버에서 동적으로 할당된 활성 포트를 획득하고 Console 및 AppMon 서비스 간에 유연하게 공유하도록 지원했습니다.
    • 가상 스레드(Virtual Threads) 환경에서 스레드 메트릭을 정밀하게 측정하기 위해 피크 동시 요청 수(getPeakRequests())를 총 용량으로 산출하는 NettyThreadPoolMetricsReader를 도입했습니다.
    • Netty와 Undertow 전반에 걸쳐 표준 WebSocket 서버 컨테이너(WebSocketServerContainer) 설정 및 세션 처리 구조를 일원화했습니다.
    • 접근 로그 구성을 logback-undertow에서 표준화된 logback-accesslog로 통합했습니다.
  • AppMon 대시보드 실시간 메트릭 시각화 (인라인 스파크라인 및 팝오버 상세 차트)
    • AppMon 대시보드 메트릭 바(Metrics Bar)의 각 지표(CPU, Heap, 세션, 스레드 풀, 커넥션 풀 등)에 인라인 스파크라인(Sparkline)을 추가하여 최근 시계열 추세를 한눈에 직관적으로 파악할 수 있도록 UI를 개선했습니다.
    • 각 메트릭 아이템 클릭 시 상세 시계열 추이와 최소/최대/평균 통계를 확인할 수 있는 인터랙티브 팝오버(Detail Popover) 상세 차트 기능을 추가했습니다.
    • MetricInfo 및 MetricData에 메트릭 단위(unit, 예: %, MB, conn, req) 지원 필드를 추가하고, 대시보드 뷰어에서 단위에 맞춘 정밀한 포맷팅 및 값 렌더링 로직을 구현했습니다.
  • 초경량 락프리(Lock-Free) Redis 커넥션 풀 아키텍처 도입
    • 무겁고 락 경합이 발생하는 commons-pool2 의존성을 완전히 제거했습니다.
    • Lettuce 기반의 락프리 스트라이프(Lock-free Striped) 공유 커넥션 구조(RedisConnectionPool)로 전면 리팩토링하여 멀티스레드 동시성 환경에서의 커넥션 획득 오버헤드와 블로킹을 원천 차단했습니다.
    • 복잡하던 기존 커넥션 풀 설정을 단일 poolSize 프로퍼티 중심으로 대폭 간소화하고, 레거시 하위 호환성 프로퍼티 및 메서드를 정리했습니다.
    • Redis 메시지 릴레이 파싱 로직을 개선하여 Netty 이벤트 루프 스레드의 블로킹을 방지하고 배치 퍼블리싱(Batch Publishing) 성능을 최적화했습니다.
  • MaxMind GeoIP2/GeoLite2 기반 경량 IPCountryResolver 신규 구현
    • 고성능 경량 리더인 maxmind-db (v4.1.0)를 직접 활용하여 MaxMind GeoIP2 및 GeoLite2 바이너리 데이터베이스(.mmdb) 파일 기반의 MaxMindIPCountryResolver를 신규 구현했습니다.
    • 파일 시스템 절대/상대 경로뿐만 아니라 JAR 내부 클래스패스 리소스(classpath:...) 경로로부터 데이터베이스를 직접 로드할 수 있도록 유연성을 강화했습니다.
  • CPU 사용률 메트릭 리더 (CpuUsageMetricsReader) 신규 추가
    • JVM 프로세스 및 전체 시스템의 CPU 사용률을 실시간 수집하는 CpuUsageMetricsReader를 추가하고 메트릭 수집 주기를 최적화했습니다.

🚀 개선 사항

  • Undertow 및 Netty 컨텍스트 배포 순서(order) 및 라이프사이클 최적화
    • TowServletContext 및 NettyContext의 order 프로퍼티를 활용하여 Console 컨텍스트를 최하위 배포 순서로 설정함으로써, 다른 의존 컨텍스트들이 완전히 기동된 후 콘솔이 활성화되도록 배포 라이프사이클을 보장했습니다.
    • NettyContext 및 서버 컨텍스트 설정 빈에 prototype 스코프를 적용하여 컨텍스트 재시작 및 동적 재배포 시의 인스턴스 격리를 강화했습니다.
  • 세션 수명 주기 추적 및 만료 타이머(SessionEventReader) 정밀화
    • Aspectran 9.8.0의 getRemainingInactiveInterval 및 getMaxInactiveInterval과 연동하여 비활성 세션 및 임시 상주 세션(isTempResident)의 잔여 시간을 정확히 계산하고 세션 축출(Eviction) 타이머를 정밀하게 갱신하도록 개선했습니다.
    • SessionEventReader의 동기화 구조를 간소화하고 SessionManager 직접 바인딩 방식으로 라이프사이클 리스너를 개편했습니다.
    • 서비스 재시작 시 UserTrackingListener가 누락 없이 안전하게 교체 등록되도록 보정했습니다.
    • 일관된 명명 규칙을 위해 세션 쿠키 이름에서 대시(-) 대신 언더스코어(_)를 사용하도록 변경했습니다 (ASPECTOW_SESSION_ID 등).
  • 프록시 포워딩 및 쿠키 발급 API 현대화
    • WebConfig의 proxyAddressForwarding 설정을 표준화하고 노후화된 proxyProtocolAware 옵션을 제거했습니다.
    • Aspectran 9.8.0의 신규 Cookie.builder() 및 WebUtils 쿠키 헬퍼 API를 적용하여 AppMonCookieIssuer 및 콘솔 세션 쿠키 발급 로직을 리팩토링했습니다.
  • 대시보드 메트릭 바 레이아웃 및 반응형 UI 스타일 개선
    • 대시보드 상단 메트릭 바의 레이아웃을 리스트럭처링하고 다크 모드 및 라이트 모드에서의 보더 대비(Contrast)와 가독성을 향상했습니다.
    • CPU, Heap 등 주요 메트릭 박스의 반응형 최소 너비(min-width) 및 탭 스타일 CSS를 보정하여 다양한 해상도에서의 정렬 깨짐을 방지했습니다.
  • WebSocket 클라이언트 에러 핸들링 및 토큰 수명 주기 개선
    • WebSocketClient의 에러 핸들링 및 자동 재연결(Reconnect) 로직을 최적화하고, 무효 토큰 수신 시의 불필요한 ERROR 로그를 DEBUG 레벨로 완화했습니다.
    • Console 환경에서 WebSocket 인증 토큰 획득 및 연결 수명 주기 제어를 안정화했습니다.
  • 정적 에셋 번들링 빌드 파이프라인 개선
    • Maven 빌드 구성(.mvn/bundle-assets.js)에서 Node.js 번들링 실행 시 인자를 명시적으로 전달하도록 개선했습니다.
    • Thymeleaf 템플릿의 로컬 에셋 임포트 링크에 최신 캐시 무효화 파라미터(v=20260909)를 적용했습니다.

🐛 버그 수정

  • 클러스터 재조인(Cluster Rejoin) 시 비동기 노드 중복 렌더링 방지
    • 노드가 클러스터에 재참여할 때 비동기 노드 재구성 동시성 경합으로 인해 대시보드 상에 동일 노드가 중복 렌더링되던 현상을 비동기 락 제어로 해결했습니다.
    • 신규 노드 참여 알림 시 초기화 완료 시간을 확보할 수 있도록 대시보드 알림 딜레이 처리를 추가했습니다.
  • PENDING 상태 빌드 실행 취소 시 UI 미반영 오류 수정
    • 대기 중(PENDING)인 빌드 실행을 취소했을 때 백엔드 상태 취소와 동시에 UI 화면에 즉각적으로 반영되지 않던 문제를 수정했습니다.
  • 세션 비활성 타이머 설정 시 음수 인터벌 예외 방어
    • SessionEventReader 및 대시보드 뷰어에서 inactiveInterval이 0 이하인 경우 타이머가 오작동하지 않도록 양수 조건 방어 로직을 추가했습니다.
  • 비임시 상주 세션의 제로 액티비티 카운트 처리 보정
    • 비임시 상주(non-temp resident) 세션의 액티비티 카운트가 0인 경우에도 세션 이벤트가 유실되지 않도록 처리를 보정했습니다.

🛠️ 의존성 라이브러리 업그레이드

  • 프레임워크 및 코어 컴포넌트
    • Aspectran: 9.6.5 → 9.8.0
    • Aspectran with Netty (aspectran-with-netty): 9.8.0 (신규 도입)
  • 데이터베이스 및 IP 분석 라이브러리
    • MaxMind DB Reader (maxmind-db): 3.1.1 → 4.2.0 (신규 도입)
    • H2 Database: 2.4.240 → 2.5.252
  • 빌드 및 플러그인
    • Maven Compiler Plugin: 3.15.0 → 3.16.0
    • Maven Surefire Plugin: 3.5.6 → 3.6.0
    • Maven Bundle Plugin: 6.1.0 → 6.1.2

NEWS
Release

Archive