2단원: 트랜잭션과 XLOG
학습 목표
이 단원을 마치면 다음을 할 수 있습니다.
- 트랜잭션의 개념과 구성 요소를 설명할 수 있습니다
- XLOG 차트에서 느린 트랜잭션을 식별할 수 있습니다
- 프로파일 분석으로 병목 구간(SQL, 외부 호출)을 찾을 수 있습니다
1. 트랜잭션이란?
1.1 기본 개념
트랜잭션(Transaction) 은 사용자의 요청이 서버에 도착하여 응답을 보내기까지의 전체 과정입니다.
사용자 요청(HTTP) → 서버 처리 → 응답 반환
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
이 전체 과정이 하나의 트랜잭션
예를 들어, 사용자가 "주문 내역 조회" 버튼을 누르면 다음과 같은 과정이 하나의 트랜잭션입니다.
| 순서 | 구간 | 예시 |
|---|---|---|
| 1 | HTTP 요청 수신 | GET /api/orders |
| 2 | 비즈니스 로직 | 권한 확인, 데이터 가공 |
| 3 | DB 조회 | SELECT * FROM orders WHERE user_id = ? |
| 4 | 외부 호출 | 결제 서비스 API 호출 |
| 5 | HTTP 응답 반환 | JSON 데이터 전송 |
1.2 왜 트랜잭션 분석이 중요한가요?
응답이 느릴 때, 전체 트랜잭션의 어떤 구간에서 시간이 오래 걸리는지 알아야 문제를 해결할 수 있습니다.
| 병목 구간 | 증상 | 해결 방향 |
|---|---|---|
| SQL 쿼리 | DB 조회에서 대부분의 시간 소비 | 쿼리 최적화, 인덱스 추가 |
| 외부 호출 | 외부 API 응답 대기 | 타임아웃 설정, 비동기 처리 |
| 비즈니스 로직 | 코드 내부 처리 시간 과다 | 알고리즘 개선, 캐싱 적용 |
2. XLOG: 트랜잭션 산점도
2.1 XLOG란?
XLOG는 트랜잭션의 응답시간을 시간축 위에 점으로 표시한 산점도(scatter chart)입니다. FlowKat에서 가장 많이 사용하는 분석 도구 중 하나입니다.
- 가로축: 트랜잭션이 완료된 시간
- 세로축: 응답시간(ms)
- 각 점: 하나의 트랜잭션
2.2 XLOG 읽는 법
| 패턴 | 의미 | 조치 |
|---|---|---|
| 낮은 위치에 점이 고르게 분포 | 정상 상태 (빠른 응답) | 특별한 조치 불필요 |
| 갑자기 높은 위치에 점이 나타남 | 느린 트랜잭션 발생 | 해당 점을 클릭하여 프로파일 확인 |
| 일정 높이에 수평선 형태 | 특정 시간만큼 일괄 지연 | DB Lock이나 타임아웃 의심 |
| 점이 사라짐 | 서비스 중단 또는 데이터 미수집 | 서버 상태 확인 |
FlowKat에서 XLOG를 확인하는 방법은 두 가지입니다.
| 구분 | 경로 | 설명 |
|---|---|---|
| XLOG 검색/분석 | 대시보드 > XLOG > XLOG 검색/분석 | 시간 범위를 지정하여 트랜잭션을 검색합니다 |
| 실시간 XLOG 위젯 | 시스템 대시보드 내 XLOG 차트 | 대시보드에서 실시간으로 트랜잭션을 확인합니다 |
3. 프로파일: 트랜잭션 내부 분석
3.1 프로파일이란?
프로파일(Profile) 은 하나의 트랜잭션 내부에서 어떤 단계를 거쳤는지 시간순으로 기록한 것입니다. XLOG에서 트랜잭션을 선택하면 프로파일 상세 화면을 볼 수 있습니다.
프로파일에서 확인할 수 있는 정보입니다.
| 항목 | 설명 |
|---|---|
| 스텝별 실행 추적 | 메서드 호출, SQL 실행, 외부 호출 등 단계별 실행 경로 |
| Gap Time | 각 스텝 사이의 시간 소비를 가로 막대로 시각화 |
| SQL 쿼리 | 실행된 SQL 문장과 바인드 변수 |
| 외부 호출 | HTTP 호출 대상 URL과 응답시간 |
| Overview | 서비스명, 총 응답시간, 에러 여부 요약 정보 |
3.2 프로파일에서 병목 찾기
프로파일을 열면 각 스텝의 소요 시간이 표시됩니다. 가장 시간이 오래 걸린 스텝이 병목의 원인입니다.
[예시: 총 응답시간 2,500ms]
스텝 1: 메서드 호출 ████ 120ms
스텝 2: SQL 실행 ██████████████████████████ 2,100ms ← 병목!
스텝 3: 외부 호출 ███ 80ms
스텝 4: 응답 처리 ██ 50ms
Gap Time ██ 150ms
위 예시에서는 SQL 실행이 2,100ms로 전체 응답시간의 84%를 차지하고 있습니다. 이 SQL 쿼리를 최적화하면 응답 속도가 크게 개선됩니다.
4. 실습: XLOG로 느린 트랜잭션 찾기
단계 1: XLOG 페이지에 접속합니다
- 좌측 메뉴에서 XLOG > XLOG 검색/분석을 클릭합니다
- 조회할 시간 범위를 설정합니다 (예: 최근 1시간)
- 대상 서버를 선택한 뒤 검색 버튼을 클릭합니다
단계 2: XLOG 차트에서 느린 트랜잭션을 찾습니다
- 산점도에서 높은 위치에 있는 점이 느린 트랜잭션입니다
- 마우스로 해당 영역을 드래그하여 선택합니다
- 선택 영역 내 트랜잭션 목록이 하단에 표시됩니다
단계 3: 프로파일 상세를 확인합니다
- 트랜잭션 목록에서 응답시간이 긴 항목을 클릭합니다
- 프로파일 팝업이 열리면 Overview 영역에서 전체 요약을 확인합니다
- 스텝 목록에서 소요 시간이 가장 긴 항목을 찾습니다
단계 4: SQL 및 외부 호출 구간을 확인합니다
- SQL 스텝을 클릭하면 실행된 쿼리 문장과 바인드 변수를 볼 수 있습니다
- 외부 호출 스텝을 클릭하면 호출 대상 URL과 응답시간을 확인합니다
- Gap Time 막대에서 스텝 사이 빈 시간이 큰 구간을 확인합니다
SQL 쿼리 상세 보기는 역할 설정에서 ALLOW_SQL_VIEW 권한이 부여된 경우에만 표시됩니다. 권한이 없으면 관리자에게 요청하세요.
학습 완료 체크리스트
이 단원을 마쳤다면 아래 항목을 확인해 보세요.
- 트랜잭션이 무엇인지, 어떤 구간으로 구성되는지 설명할 수 있다
- XLOG 차트에서 느린 트랜잭션의 위치를 식별할 수 있다
- XLOG에서 영역을 드래그하여 트랜잭션 목록을 조회했다
- 프로파일에서 SQL 스텝과 외부 호출 스텝을 확인했다
- 어떤 스텝이 병목인지 판단하는 방법을 알고 있다
다음 단원으로 넘어가기 전에 확인해 보세요.
- XLOG 차트에서 가로축과 세로축은 각각 무엇을 나타내나요?
- 프로파일에서 SQL 스텝이 전체 응답시간의 대부분을 차지한다면, 어떤 조치를 고려해야 하나요?
- XLOG 차트에서 특정 높이에 점이 수평선 형태로 나타나면 무엇을 의심해야 하나요?
정답 확인
- 가로축은 트랜잭션이 완료된 시간, 세로축은 응답시간(ms)입니다.
- SQL 쿼리 최적화(인덱스 추가, 쿼리 개선)를 고려해야 합니다. 프로파일에서 해당 SQL 문장을 확인하여 DBA와 협의하는 것이 좋습니다.
- DB Lock이나 타임아웃을 의심해야 합니다. 특정 시간만큼 일괄적으로 지연되는 패턴은 외부 리소스 대기를 의미합니다.
3단원: 이벤트 알람과 이슈 추적에서는 FlowKat의 이벤트 알람 시스템과 이슈 추적 기능을 배웁니다.