4단원: 성능 분석과 병목 진단
학습 목표
이 단원을 마치면 다음을 할 수 있습니다.
- 성능 분석의 3단계(현상 파악 → 원인 특정 → 해결)를 설명할 수 있습니다
- 트랜잭션 통계에서 느린 URL과 SQL을 식별할 수 있습니다
- 성능 조회에서 시계열 메트릭을 조회하고 비교할 수 있습니다
1. 성능 분석 방법론
1.1 성능 분석 3단계
성능 문제를 체계적으로 해결하려면 3단계 접근법을 사용합니다.
| 단계 | 질문 | FlowKat 도구 |
|---|---|---|
| 1. 현상 파악 | "무엇이 느린가?" | 트랜잭션 통계 (URL 통계, 에러 통계) |
| 2. 원인 특정 | "왜 느린가?" | XLOG 프로파일, SQL 통계 |
| 3. 해결 확인 | "개선되었는가?" | 성능 조회 (시계열 비교) |
현상 파악 원인 특정 해결 확인
┌─────────┐ ┌─────────┐ ┌─────────┐
│ URL 통계 │────▶│ 프로파일 │────▶│ 성능 조회 │
│ 에러 통계 │ │ SQL 통계 │ │ 전후 비교 │
└─────────┘ └─────────┘ └─────────┘
1.2 병목 유형 3가지
성능 병목은 대부분 아래 세 가지 유형에 해당합니다.
| 유형 | 특징 | 진단 도구 |
|---|---|---|
| DB 쿼리 병목 | SQL 실행 시간이 긴 경우 | SQL 통계, 프로파일 SQL 스텝 |
| 외부 호출 병목 | 외부 API 응답이 느린 경우 | HTTP 호출 통계, 프로파일 외부 호출 스텝 |
| 코드 병목 | 애플리케이션 로직 자체가 느린 경우 | 프로파일 Gap Time, 메서드 스텝 |
2. 트랜잭션 통계
2.1 URL 통계
URL 통계는 서비스의 각 URL별 호출 수, 평균 응답시간, 에러율을 집계한 표입니다. "어떤 URL이 가장 느린가?"를 한눈에 파악할 수 있습니다.
접근 경로:
메뉴: 대시보드 > 트랜잭션 통계 > URL 통계
URL: /workgroup/[workgroupId]/tx-stats/url
| 컬럼 | 의미 | 활용법 |
|---|---|---|
| URL | 요청 경로 | 느린 URL 식별 |
| 호출 수 | 해당 URL의 총 요청 건수 | 트래픽이 많은 URL 우선 개선 |
| 평균 응답시간 | 요청당 평균 처리 시간 | 높은 값부터 확인 |
| 에러 수 | 에러가 발생한 건수 | 에러가 많은 URL 원인 분석 |
호출 수가 많고 응답시간이 긴 URL을 먼저 개선하면 가장 큰 효과를 얻을 수 있습니다.
2.2 SQL 통계
SQL 통계는 실행된 SQL 쿼리별 실행 횟수와 수행 시간을 집계합니다.
접근 경로:
메뉴: 대시보드 > 트랜잭션 통계 > SQL 통계
URL: /workgroup/[workgroupId]/tx-stats/sql
| 컬럼 | 의미 |
|---|---|
| SQL 해시 | 쿼리 식별자 |
| 실행 횟수 | 해당 쿼리가 실행된 총 횟수 |
| 평균 수행시간 | 쿼리당 평균 실행 시간 |
| 최대 수행시간 | 가장 오래 걸린 실행 시간 |
2.3 에러 통계
에러 통계는 에러 유형별 발생 건수를 집계합니다. 반복되는 에러 패턴을 빠르게 식별할 수 있습니다.
접근 경로:
메뉴: 대시보드 > 트랜잭션 통계 > 에러 통계
URL: /workgroup/[workgroupId]/tx-stats/error
3. 성능 조회
3.1 성능 조회란?
성능 조회 페이지에서는 수집된 메트릭 데이터를 시계열 라인 차트로 시각화합니다. "시간에 따라 어떻게 변했는가?"를 확인할 때 사용합니다.
접근 경로:
메뉴: 대시보드 > 분석 > 성능 조회
URL: /workgroup/[workgroupId]/analysis/performance
3.2 조회 3단계
성능 조회는 다음 3단계로 데이터를 조회합니다.
| 단계 | 선택 항목 | 설명 |
|---|---|---|
| 1 | Family 선택 | 오브젝트 유형 선택 (JAVA, HOST 등) |
| 2 | 오브젝트 선택 | 조회할 서버/인스턴스 선택 |
| 3 | 메트릭 선택 | 확인할 지표 선택 (CPU, TPS, 응답시간 등) |
3.3 주요 기능
| 기능 | 설명 |
|---|---|
| 다중 조건 비교 | 여러 메트릭을 동시에 차트에 표시하여 비교 |
| 개별/집계 모드 | 서버별 개별 조회 또는 여러 서버 집계 조회 |
| 박스 줌 | 차트 영역을 드래그하여 특정 시간대를 확대 |
| CSV 내보내기 | 차트 데이터를 CSV 파일로 저장 |
개선 작업 전후를 비교할 때 유용합니다.
- 개선 전 날짜 범위로 응답시간 차트 조회
- 개선 후 날짜 범위로 같은 메트릭 조회
- 두 차트를 비교하여 실제 개선 효과 확인
4. 실습: 병목 진단 워크플로우
아래 순서로 성능 병목을 찾고 분석하는 과정을 실습합니다.
단계 1: URL 통계에서 느린 URL을 식별합니다
- 트랜잭션 통계 > URL 통계로 이동합니다
- 조회 시간 범위를 설정하고 검색합니다
- 평균 응답시간 기준으로 내림차순 정렬합니다
- 가장 느린 URL 2~3개를 메모합니다
단계 2: 해당 트랜잭션의 프로파일을 분석합니다
- XLOG > XLOG 검색/분석으로 이동합니다
- 같은 시간 범위를 설정합니다
- 느린 URL에 해당하는 트랜잭션을 찾아 프로파일을 엽니다
- 어떤 스텝(SQL, 외부 호출, 메서드)에서 시간이 소요되는지 확인합니다
단계 3: SQL 통계에서 느린 쿼리를 확인합니다
- 트랜잭션 통계 > SQL 통계로 이동합니다
- 평균 수행시간 기준으로 정렬합니다
- 느린 쿼리의 SQL 문장을 확인합니다
- 프로파일에서 본 SQL과 일치하는지 대조합니다
단계 4: 성능 조회에서 추이를 확인합니다
- 분석 > 성능 조회로 이동합니다
- Family를 선택하고 (예: JAVA) 대상 서버를 선택합니다
- 응답시간 관련 메트릭을 선택하여 시계열 차트를 확인합니다
- 문제가 발생한 시간대에 응답시간이 증가했는지 확인합니다
반드시 현상 파악(통계) → 원인 특정(프로파일) → 추이 확인(성능 조회) 순서로 진행합니다. 처음부터 프로파일을 하나씩 열어보면 시간이 오래 걸립니다. 통계에서 문제 범위를 좁힌 뒤 프로파일로 정밀 분석하는 것이 효율적입니다.
5. 분석 결과 정리 템플릿
성능 분석 결과를 정리할 때 아래 템플릿을 활용하면 팀 내 공유가 수월합니다.
| 항목 | 내용 |
|---|---|
| 증상 | 어떤 URL에서 응답 지연이 발생했는가? |
| 발생 시각 | 언제부터 언제까지 발생했는가? |
| 영향 범위 | 전체 서비스인가, 특정 URL만인가? |
| 원인 | 프로파일에서 확인한 병목 구간 (SQL / 외부 호출 / 코드) |
| 근거 데이터 | 관련 통계 수치, 프로파일 스크린샷 |
| 조치 방안 | 어떻게 개선할 것인가? |
| 개선 확인 | 성능 조회에서 전후 비교 결과 |
분석 결과를 FlowKat의 이슈 추적 기능에 이슈로 등록하면, 해결 과정을 체계적으로 기록하고 공유할 수 있습니다. 3단원에서 배운 이슈 추적 기능을 활용하세요.
학습 완료 체크리스트
이 단원을 마쳤다면 아래 항목을 확인해 보세요.
- 성능 분석 3단계(현상 파악 → 원인 특정 → 해결 확인)를 설명할 수 있다
- URL 통계에서 느린 URL을 찾고 정렬할 수 있다
- SQL 통계에서 느린 쿼리를 확인할 수 있다
- 성능 조회에서 메트릭을 선택하고 시계열 차트를 조회할 수 있다
- 통계 → 프로파일 → 성능 조회 순서로 분석하는 워크플로우를 이해했다
모든 학습을 완료하기 전에 확인해 보세요.
- 성능 병목의 3가지 유형은 무엇인가요?
- URL 통계에서 개선 우선순위를 정할 때 어떤 기준을 사용하나요?
- 성능 조회 페이지에서 데이터를 조회하는 3단계는 무엇인가요?
정답 확인
- DB 쿼리 병목(SQL 실행 시간 과다), 외부 호출 병목(외부 API 응답 지연), 코드 병목(애플리케이션 로직 자체 느림)입니다.
- 호출 수가 많고 응답시간이 긴 URL을 우선적으로 개선합니다. 트래픽이 많은 URL을 개선하면 전체 서비스 성능에 가장 큰 효과가 있습니다.
- Family 선택(오브젝트 유형) → 오브젝트 선택(서버/인스턴스) → 메트릭 선택(CPU, TPS, 응답시간 등) 3단계입니다.
4개 단원을 모두 완료했습니다. 이제 FlowKat의 핵심 기능을 활용하여 시스템 성능을 모니터링하고 문제를 진단할 수 있습니다.
더 자세한 기능 설명은 사용자 가이드를 참고하세요.