by Alvin Hong, JenniferSoft Software Engineer
개선된 제니퍼 X-View를 활용한 트랜잭션 분석 방법
제니퍼는 최근 비동기와 MSA 환경의 트랜잭션 분석을 강화하기 위해 오랫동안 그 틀을 유지했던 제니퍼 트랜잭션 기능을 대대적으로 개선했습니다. 이번 아티클에서는 새롭게 업그레이드한 제니퍼 X-View를 활용한 트랜잭션 분석 방법을 공유해 드립니다.
X-View 트랜잭션 분석은 제니퍼의 핵심 기능 중 하나입니다. 사용자의 요청이 WAS나 서버에 의해 처리 중인 과정을 액티브서비스로, 액티브서비스 단계를 지나 완료 상태가 되면 트랜잭션이라고 부릅니다. 이러한 트랜잭션을 보는 차트를 제니퍼에서는 X-View라고 부르며, 산점도(Scatter) 형태의 차트로 보여줍니다.
여기서 잠깐!
트랜잭션은 사용자 요청이나 API 호출과 같이 애플리케이션 내에서 발생하는 단일 이벤트를 의미합니다. APM에서 트랜잭션은 일반적으로 애플리케이션이 이벤트를 처리하기 위해 수행하는 일련의 단계로 표시됩니다. APM 도구는 종종 성능 병목 현상이나 문제를 식별하는 데 유용할 수 있는 각 트랜잭션의 응답 시간, 오류율 및 처리량과 같은 지표를 추적합니다.
제니퍼에는 수많은 기능 있지만 사실 액티브서비스와 트랜잭션 추이를 모니터링하고, 프로파일 데이터를 분석하는 기능이 가장 중요합니다. 제니퍼가 수집한 트랜잭션 데이터에는 다양한 종류의 프로파일 데이터가 포함되어 있습니다.
여기서 잠깐!
프로파일이란 특정 트랜잭션 또는 애플리케이션 컴포넌트의 상세 정보라고 말할 수 있습니다. 개발자는 프로파일을 분석하여 애플리케이션의 동작을 더 깊이 이해하고 최적화 방법을 찾을 수 있습니다.
제니퍼 개발자로 데이터 분석을 잘하는 방법을 찾기 위해 노력하고 있지만 기술 트렌드의 빠른 변화로 인해 기존 프로파일 분석으로는 트랜잭션을 제대로 분석하기 어렵다는 한계를 경험하고 있었습니다. 우선 우리가 고민했던 기존 기능의 한계를 정리해 보려고 합니다.
기존 제니퍼 프로파일 분석의 한계를 알게 되다.
비동기 모니터링
제니퍼에서 트랜잭션과 프로파일 데이터는 계층 구조로써 부모-자식 관계가 명확합니다. 하지만 제니퍼 에이전트가 지원하는 플랫폼들의 버전이 올라가면서 비동기 처리가 가능해졌고, 스프링 같은 자바 프레임워크 차원에서도 WebFlux라는 새로운 스펙을 공개하면서 비동기 처리에 대한 관심이 커졌습니다.
비동기 모니터링 (Asynchronous Monitoring)
제니퍼는 프로파일 데이터 구조를 콜-트리 형식의 테이블로 보여주고 있으나, 비동기 구조의 애플리케이션이 증가하면서 종종 테이블에 누락되는 데이터가 발생했습니다. 물론 다음과 같이 텍스트 형태로 모니터링 하면 누락되지 않고, 모든 프로파일에 대한 데이터를 볼 수 있습니다.
<콜-트리 테이블>
콜-트리 테이블의 경우, 계층 구조로 표현이 되는데, 메소드 간의 호출-피호출 관계를 부모-자식 관계로 재정의해서 데이터를 구성합니다. 비동기 처리를 하는 프로파일의 경우, 부모 키가 누락될 수도 있고, 시작 시간과 응답시간이 트랜잭션의 시간 범위에 벗어나는 경우도 발생할 수 있기 때문에 현재 사용하고 있는 콜-트리 테이블은 더 이상 사용할 수 없다는 결론에 도달했습니다.
제니퍼의 좁은 분석 화면 크기
X-View 트랜잭션 분석 화면이 너무 좁다는 고객들의 피드백이 많았습니다. 이는 브라우저가 팝업 형태로 구현되어 있어 일반적인 해상도보다 더 작게 띄워야 하므로 발생하는 문제입니다.
또한, 트랜잭션 목록과 선택한 트랜잭션에 대한 프로파일까지 하나의 화면에 모두 보여줘야 하므로 더욱 좁게 느껴졌을 것입니다. 일반적으로 고객의 모니터 해상도가 높지 않기에, 모니터를 피봇팅해서 사용하지 않는 한 드라마틱한 효과를 기대하기 어려웠습니다.
사용자는 테이블 상단부터 하나씩 클릭하면서 하단에 보는 프로파일 상세 정보를 일일이 확인해야만 했기에, 트랜잭션 테이블에서 어떤 트랜잭션을 선택해야 하는지 직관적으로 보이지 않는 것도 문제였습니다.
익숙한 것에 변화를 주려면 충분한 동기가 필요하다
사실 2년 전에도 X-View 트랜잭션 분석 화면을 리뉴얼한 적이 있습니다. 그때 당시에는 나름 큰 변화라고 생각했었지만, 결론적으로는 컴포넌트 디자인을 바꾸거나 일부 레이아웃을 조정한 수준이었습니다.
리뉴얼된 X-View 팝업 페이지의 달라진 점과 활용법에 대해 알아볼까요?
사실 제니퍼가 처음 출시되고 현재까지 15년이 넘는 기간 트랜잭션 분석 화면의 기본 틀은 한 번도 변한적이 없습니다. 그만큼 X-View 차트는 제니퍼를 사용하는 고객이 가장 많이 사용하는 기능이며, 트랜잭션 분석을 위해 꼭 필요한 기능이기에 드라마틱한(!) 큰 변화를 주기가 어려운 것도 사실입니다.
<개선 전 제니퍼 X-View>
제니퍼는 10년 전에 HTML5 스펙이 공개되면서 큰 변화에 직면했습니다. 기존의 애플릿은 언젠가는 사라질 기술이라고 예상했고, 지금에 와서 돌이켜보면 정말 잘한 결정이었습니다. 우리는 누구보다도 빠르게 새로운 스펙을 적용하여 제품을 다시 만들었습니다. 이는 제니퍼가 설치형 제품이고, 브라우저를 크롬 기반으로 한정할 수 있었기 때문에 가능한 일이었습니다.
누군가에 익숙한 무엇인가에 큰 변화를 준다는 건 매우 어려운 일입니다. 하지만, 어느 순간 우리가 개발했던 기능이 앞서 말한 애플릿처럼 사양 기술로 접어든다면, 새로운 기술을 찾아야 하는 순간이 찾아옵니다.
변화를 위한 확실한 대의명분이 필요했던 우리는 이러한 명분을 비동기 구조의 프로파일에서 얻었습니다. 그리고 이왕 시작한 거 사용자가 데이터를 트래킹하는 여정을 다시 설계해보기로, 그에 따라 화면에 필요한 모든 레이아웃과 컴포넌트들을 새롭게 만들자는 생각으로 새로운 화면을 개발했습니다.
새로운 제니퍼, 트랜잭션 분석 화면은 무엇이 달라졌을까
팝업의 제한된 크기 한계를 극복하다.
<좌: 과거의 트랜잭션 분석화면, 우: 개선된 트랜잭션 분석화면>
과거에는 트랜잭션 목록과 선택한 트랜잭션에 대한 프로파일이 모두 한 화면에 배치되어서, 화면이 매우 협소해 보였습니다. 또한, 여러 기능에 대한 버튼이 모두 한 화면에 몰려 있어 집중해서 분석하기가 어려웠습니다.
우리는 팝업의 제한된 크기를 극복하기 위해 프로파일 분석을 슬라이드-인 하여 보여주는 방식을 택했습니다. 트랜잭션 목록의 데이터를 유지하면서 프로파일 분석을 할 수 있도록 컨텐츠를 분배한 것인데, 이렇게 하면 사용자가 트랜잭션 목록의 데이터가 유지된다고 생각하기 때문에 기존의 한 화면에 배치되었을 때의 흐름을 깨지 않으면서도 화면 공간을 효율적으로 활용할 수 있게 된 것입니다. 한 화면에 보이는 콘텐츠의 양이 간결해졌기 때문에 이전보다 가시성이 향상되었고, 더 많은 내용을 적은 스크롤로 볼 수 있게 함으로써 사용자 편의성을 개선하였습니다.
트랜잭션 테이블을 시각화하기
화면에서 프로파일 분석 영역을 분리하고 나니, 트랜잭션 목록에서 문제가 있어 보이는 트랜잭션을 빠르게 파악하는 것이 중요해졌습니다.
<개선된 트랜잭션 테이블 초안>
기존의 텍스트로만 표시되던 트랜잭션 테이블에 Method, SQL, External Call, Batch Job 각각의 비중을 바(Bar) 차트로 표현하고, 이 구간을 합친 전체 응답 시간은 좀 더 두꺼운 차트로 그려넣었습니다. 하지만 문제가 되는 트랜잭션을 한눈에 파악하기는 어려웠습니다. 오히려, 각 구간(Method, SQL, External Call, Batch Job)에서의 비중을 나타낸바 차트가 테이블 상,하간 트랜잭션과 비교되면서 오해를 불러일으킬 수 있는 여지가 생겼습니다. 각 구간의 응답 시간을 서로 비교할 수 있도록 디자인을 수정하였습니다.
<응답 시간을 비교할 수 있도록 수정된 트랜잭션 테이블>
트랜잭션의 각 구간 비율을 표현한 바 차트를 유지한 채, 조회한 전체 데이터를 기준으로 한 구간별 응답시간 비율을 칼럼 배경의 색상을 주는 것으로 표현했습니다. 또한, 전체 응답시간을 나타내는 컬럼에서는 응답시간을 컬럼 배경에 나타내는 동시에 어떤 구간의 비중이 높은지 구별되도록 비율 차트도 그려 넣었습니다.
이렇게 하니 트랜잭션 테이블에서 개별 데이터의 비중과 트랜잭션 전체 응답 시간이 한눈에 보이기 시작합니다. 트랜잭션 테이블만으로도 지연의 원인도 어느 정도 가늠해볼 수 있게 되었습니다. 이제 사용자는 수없이 많은 트랜잭션 목록 중 어떤 트랜잭션에 대해 프로파일 분석을 해야 하는지 빠르게 파악할 수 있게 되었습니다.
트랜잭션 필터링 기능을 제공하다
만약 조회한 트랜잭션의 수가 매우 많다면 시각화한 트랜잭션 테이블만으로 문제가 있는 트랜잭션에 접근하기가 쉽지 않을 것입니다. 제니퍼는 X-View를 통해 수십만 건 이상의 데이터를 조회할 수 있기 때문입니다.
우선, X-View 차트에서 6~8초를 넘는 트랜잭션이 보인다고 가정해보겠습니다.
<대시보드의 X-View 차트>
<트랜잭션 필터링 화면>
Y축의 값이 기본적으로 8초이기 때문에 차트의 최상단 부분부터 확인하고자 하는 점들을 드래그하여 트랜잭션 분석 화면을 띄웠습니다. 트랜잭션 목록에는 6~8초 걸린 트랜잭션과 8초보다 훨씬 오래 걸린 트랜잭션들이 혼재하고 있습니다. 아주 오래 걸린 트랜잭션들의 지연 원인은 모두 동일하고 분명하기에 6~8초 사이의 트랜잭션만 걸러내고 싶은 상황입니다. 왼쪽의 응답시간 조절 바를 이용하여 6~8초로 조절해봅니다.
오른쪽에 내가 보고자 하는 6~8초 대의 트랜잭션들이 필터링되고 있습니다. 하지만 아직도 트랜잭션 결과가 많습니다. 왼쪽 필터링 기능 중 애플리케이션 이름별로 그룹핑된 항목들이 눈에 띕니다. 최근 내가 수정한 애플리케이션 이름과 동일한 이름을 가진 녀석을 체크하여 필터링합니다. 트랜잭션 목록이 4개로 주는 모습을 확인할 수 있습니다. 이제 4개로 줄어든 트랜잭션들을 대상으로 상세 프로파일 분석을 시작할 수 있겠습니다.
이처럼 트랜잭션 필터링 기능에서는 상황에 맞게 1개의 트랜잭션에 포함하고 있는 정보들(도메인, 인스턴스, 비즈니스, 클라이언트IP, 시작시간, 응답시간, 애플리케이션 명 등)을 개별적으로 필터링할 수 있습니다. 또한 이러한 정보들의 통계치를 제공하여 수집된 데이터의 분포도를 파악해보거나, 데이터의 특성을 확인하여 어떤 대상을 필터링해야 할 지 결정하는 데 도움을 줍니다.
타임라인&프로파일 차트를 통해 비동기 프로파일 분석을 가능하게 하다.
콜-트리 테이블을 대체하는 타임라인&프로파일 차트
앞에서도 언급했지만, 이 일을 시작하게 된 이유가 비동기 구조의 프로파일 분석을 기존의 콜-트리 테이블로는 불가능했기 때문입니다. 그래서 탄생한 것이 타임라인&프로파일 차트입니다. 새롭게 개발한 차트는 콜-트리 테이블과 달리 각각의 프로파일 호출 구조를 파악하기 어렵다는 단점이 있습니다. 또한 프로파일 호출 구조에서 누락된 프로파일이나 에러, 스택트레이스 같은 노드들도 같이 표현하기 때문에 데이터양에 따라 다소 복잡하게 느껴질 수 있습니다.
이러한 문제를 해결하기 위해 프로파일 차트의 분석 범위를 좁히기 위한 방법으로 타임라인 차트를 추가했습니다. 마우스로 드래그하여 적절한 시간 범위를 선택한 후에 마우스 휠이나 키보드 방향키(위/아래)를 통해 시간 범위를 조절할 수 있으며, 마우스를 이동시키거나 키보드 방향키(좌/우)를 통해 시간 범위를 변경할 수 있습니다. 그 밖에 분석하고자 하는 프로파일을 찾기 위한 링크가 화면 곳곳에 존재하며, 사용자는 다양한 루트에서 자신이 원하는 프로파일에 쉽게 접근할 수 있습니다.
<좌측 요약 컴포넌트에서 프로파일 찾기>
<우측 프로파일 상세에서 프로파일 찾기>
프로파일 구조를 쉽게 파악하기
<프레임 그래프>
프레임 그래프는 프로파일 호출 구조에서 누락된 프로파일이나 메시지나 소켓 같이 응답시간이 없는 프로파일은 제외되며, 콜-트리 테이블과 동일하게 계층 구조로 데이터를 표현합니다. 프로파일 호출 구조를 한눈에 파악할 수 있다는 장점이 있기 때문에 상황에 맞게 사용하면 좋은데, 프로파일 차트와 동일하게 타임라인 차트 인터랙션을 제공합니다. 주로 하위 프로파일이 상위 프로파일에 비해 너무 작게 표현될 때, 확대해서 보는 목적으로 사용됩니다.
MSA 환경에서 트랜잭션 간의 연관성 분석하기
<과거의 연관트랜잭션 분석>
제니퍼의 X-View 프로파일 분석에서는 사용자가 확인하고자 하는 트랜잭션의 호출 관계를 토폴로지의 형태로 확인할 수 있는 기능을 제공하고 있습니다.
다음 두 가지 조건을 만족할 경우 서비스 간의 호출관계를 토폴로지로 구성할 수 있습니다.
- HTTP, HTTPS, RMI, WCF, SOAP, NET_REMOTE, COMPLUS, SPRING WEB CLIENT 호출이 있는 경우
- 호출하는 서비스에도 제니퍼 에이전트가 설치된 경우
토폴로지는 제니퍼 에이전트가 설치된 서비스를 노드로 표현하며 호출 횟수와 평균응답시간을 보여줍니다. 하나의 트랜잭션 내에서 호출되는 수건 내의 외부 호출을 표현하기에 적절한 방식입니다.
그러나 MSA 가 본격적으로 화두 되면서 최근 서비스에서는 트랜잭션 내에서 외부 서비스 호출 횟수가 많아지고 호출 구조 또한 복잡해지는 추세를 보이고 있습니다. 이러한 서비스를 모니터링 할 때에는 서비스 단위로 묶어서 호출 횟수, 응답시간을 요약해서 보여줄 경우 다음과 같은 한계가 있습니다.
- 서비스의 호출이 하나의 노드 연결선으로 요약되어 그중 지연된 트랜잭션을 찾기 위해서는 추가적인 분석 과정이 필요
- 서비스 호출 분기가 많은 경우 트랜잭션을 호출한 상위 트랜잭션의 호출 구조 분석이 어려움
이와 같은 단점을 해결하기 위해서는 토폴로지 또한 개별 트랜잭션 단위로 호출 관계를 표현해야 합니다. 표현된 개별 트랜잭션 단위의 연결 구조를 제니퍼의 강점인 개별 트랜잭션 분석 기능과 연결하면 병목지점을 손쉽게 찾을 수 있습니다.
개선된 연관 트랜잭션 상관관계 분석
그래서 X-View 분석 기능을 개편하며 연관 트랜잭션 기능을 전면으로 새롭게 개발했습니다. 트랜잭션 분석 화면에서 작은 레이어로 띄워 보여주던 것서 페이지 전환을 통해 좀 더 넓은 관점에서 트랜잭션의 서비스 호출 관계를 파악할 수 있습니다.
또한, 서비스 단위로 노드를 묶지 않고 개별 트랜잭션 호출의 상관관계를 표현했기 때문에 각 트랜잭션 호출의 시작부터 끝까지 한눈에 파악이 가능합니다. 각 노드에 표현한 Method, SQL, ExternalCall 을 막대 그래프를 통해 시각적으로 보여주고 있어 병목이 되는 문제 지점을 빠르게 분석할 수 있습니다.
<개선된 연관트랜잭션 분석>
트랜잭션 분석을 잘 할 수 있는 기능을 개발하기 위해…
주식 가격을 표현하기 위해 대중적으로 많이 사용하고 있는 캔들스틱 차트는 19세기 메이지 시대부터 사용되었다고 추측하곤 합니다. 1980년대 후반부터 미국의 일부 거래소에서 캔들스틱 차트를 사용하기 시작했고, 이후에는 전 세계적으로 캔들스틱 차트가 사용되고 있습니다. 대중적으로 널리 사용되기까지 100년이란 시간이 걸렸지만, 아직까지도 대체할만한 시각화 요소가 나오지 않는 걸 보면 캔들스틱을 대체할 만한 차트가 나오기 어려워 보입니다.
사실 기존의 X-View 트랜잭션 분석 화면의 기능이나 시각화 요소들을 완전히 대체할 수 있다고 생각하지 못했습니다. 그 이유는 캔들스틱 차트의 사례와 동일합니다.
X-View 차트를 통한 트랜잭션 분석 기능은 제니퍼의 핵심 기능이고, 제니퍼가 APM 제품으로써 시장에 나오고 꼭 사용해야 하는 APM 제품으로 알려지기까지 큰 역할을 한 것도 사실입니다.
비동기와 MSA라는 기술변화 속에서 우리는 트랜잭션 분석을 더 잘하기 위한 다양한 방법을 고민했습니다. 기존 사용자들의 사용성 또한 함께 고려해야 했기에 꽤 오랜 시간이 걸렸지만 포기하지 않고 제니퍼답게 더 멋진고 쉽게 모니터링할 수 있도록 개선했습니다.
고객의 피드백(Feedback)을 통해서 제품이 발전해야 한다는 점에서 지금의 시도는 끝이 아닌 새로운 여정의 시작이라고 생각합니다. 앞으로 우리가 고민하고 노력할 이러한 시도들이 제니퍼를 사용하는 많은 사람에게 물음표가 아닌 느낌표가 되기를 기대해봅니다.
'제니퍼 개발 이야기' 카테고리의 다른 글
[제니퍼 기능 소개] 제니퍼 실시간 이상 탐지 (ANOMALY DETECTION) (0) | 2023.08.10 |
---|---|
고마웠다, 제니퍼 SFR(Stacktrace Flight Recorder) (1) | 2023.08.10 |
비동기 모니터링 (Asynchronous Monitoring) (0) | 2023.08.10 |
스택트레이스 샘플링을 이용한 성능 분석 – SFR(Stacktrace Flight Recorder)_제니퍼소프트 (0) | 2022.08.23 |
제니퍼 JENNIFER – 쿠버네티스 환경(AKS, EKS, GKE,…) 지원 (0) | 2022.08.23 |
제니퍼 실험실. 제니퍼에서 새로운 가능성을 실험하라 (0) | 2017.07.24 |
제니퍼 개발 이야기(UI/UX)_ 제니퍼 UI/UX의 특징 (0) | 2017.07.24 |
제니퍼 개발 이야기(UI/UX)_좀 더 쉽고 빠르게 더 멋지게 모니터링하자. (0) | 2017.07.24 |
제니퍼소프트 인턴 프로그램을 마치며 (0) | 2017.07.24 |
[개발인] 홍재석 “글쓰기도 개발도, 본질은 공유 (0) | 2015.03.13 |