TIO 성능 테스트 결과 분석 (40명 동시 사용자)

2025. 7. 29. 04:08·Jungle

테스트 개요

테스트 환경

  • 최대 동시 사용자: 40명
  • 테스트 시간: 22분 30초
  • 테스트 대상: 실제 사용자 여정 시뮬레이션

사용자 여정 시나리오

로그인 → 상품 목록 조회 → 상품 상세 조회 → 메인 복귀 
→ 가상 피팅 → 찜하기 → 옷장 조회 → 장바구니 추가 
→ 주문서 작성 → 배송지 선택 → 주문 생성

성능 지표 비교

주요 개선 결과

지표 개선 전 개선 후 목표 달성 여부
API 성공률 75% 90.90% 90% ✅
사용자 여정 완료율 0% 100% 85% ✅
로그인 성공률 99.89% 100% 95% ✅
응답시간 (95%) 2.62초 712ms 3초 이내 ✅
평균 응답시간 672ms 181ms - 개선됨

개선율 요약

  • 응답시간: 73% 개선 (2.62초 → 0.71초)
  • 여정 완료율: 100%p 개선 (0% → 100%)
  • API 성공률: 21%p 개선 (75% → 90.9%)
  • HTTP 실패율: 31% 감소 (33.3% → 23.1%)

주요 최적화 내용

1. N+1 쿼리 문제 해결

문제 상황

// 상품 100개 조회 시 101번의 쿼리 발생
products.forEach(product -> 
    product.getCategory().getName() // 각 상품마다 추가 쿼리
);

해결 방법

// Fetch Join으로 한 번의 쿼리로 해결
@Query("SELECT p FROM Product p JOIN FETCH p.category")
List<Product> findAllWithCategory();

결과: 101개 쿼리 → 1개 쿼리로 최적화

2. 주문 시스템 안정화

  • 이전: 주문서 작성 성공률 0%
  • 현재: 주문서 작성 성공률 100%

OrderService의 N+1 쿼리 문제를 해결하여 주문 프로세스가 정상 작동하게 되었습니다.

3. 데이터베이스 최적화

  • HikariCP 커넥션 풀 설정 조정
  • JPA 배치 처리 적용 (batch_size=50)
  • 지연 로딩 최적화

테스트 시나리오 구현

// k6 성능 테스트 핵심 로직
export let options = {
  stages: [
    { duration: '2m', target: 10 },   // 워밍업
    { duration: '5m', target: 20 },   // 일반 트래픽
    { duration: '10m', target: 20 },  // 안정화
    { duration: '3m', target: 40 },   // 피크 트래픽
    { duration: '2m', target: 0 },    // 종료
  ],
  thresholds: {
    login_success_rate: ['rate>0.95'],
    api_success_rate: ['rate>0.90'],
    user_journey_completion_rate: ['rate>0.85'],
    http_req_duration: ['p(95)<3000'],
  },
};

export default function () {
  // 1. 로그인
  let loginRes = http.post(`${BASE_URL}/api/auth/mail/login`, loginData);
  
  // 2. 메인 상품 조회
  let mainRes = http.get(`${BASE_URL}/api/home/products`, authHeaders);
  
  // 3. 상품 상세 조회
  products.forEach(product => {
    http.get(`${BASE_URL}/api/products/${product.id}`, authHeaders);
  });
  
  // 4. 가상 피팅
  http.post(`${BASE_URL}/api/avatars/try-on`, fittingData, authHeaders);
  
  // 5. 장바구니 추가
  http.post(`${BASE_URL}/api/cart/items`, cartData, authHeaders);
  
  // 6. 주문 프로세스
  http.get(`${BASE_URL}/api/addresses`, authHeaders);
  http.post(`${BASE_URL}/api/orders`, orderData, authHeaders);
}

현재 상태 분석

해결된 문제들

  1. 메인 페이지 로딩 지연 - 응답시간 대폭 개선
  2. 주문서 작성 실패 - 성공률 100% 달성
  3. 데이터베이스 과부하 - N+1 쿼리 최적화로 해결
  4. 사용자 여정 중단 - 전체 프로세스 정상 작동

개선이 필요한 영역

  • HTTP 실패율 23%: 일부 API에서 간헐적 실패 발생
  • 외부 의존성: 네트워크 또는 외부 서비스 연동 부분

테스트에서 제외된 기능

  • 결제 시스템: QR 코드 방식으로 자동화 테스트 제한
  • 실제 결제 처리: 테스트 환경 안전성을 위해 제외

다음 단계

단기 계획 (1-2주)

  1. 최적화된 코드 프로덕션 배포
  2. 실시간 모니터링 시스템 구축
  3. 남은 HTTP 실패율 원인 분석

중기 계획 (1개월)

  1. CDN 적용으로 정적 리소스 최적화
  2. 캐싱 전략 고도화
  3. 추가 성능 테스트 (더 높은 동시 사용자 수)

주요 교훈

성능 최적화 우선순위

  • N+1 쿼리 해결이 가장 큰 성능 개선 효과를 가져옴
  • 코드 레벨 최적화가 인프라 변경보다 효과적일 수 있음

테스트 방법론

  • 실제 사용자 여정을 시뮬레이션하는 것이 중요
  • 단순 부하 테스트로는 발견하지 못한 문제들을 찾을 수 있음

데이터베이스 중심 접근

  • 웹 애플리케이션 성능 병목의 대부분이 데이터베이스 관련
  • ORM 사용 시 쿼리 최적화에 특별한 주의가 필요
728x90

'Jungle' 카테고리의 다른 글

데이터베이스 액세스 최적화로 TPS 4.4% 향상시키기 (144.6 → 151 TPS)  (0) 2025.08.01
TIO 성능 테스트: EC2 업그레이드로 144 TPS 달성하기  (0) 2025.07.29
TIO 개선 소요 파악 - 성능 최적화  (0) 2025.07.29
상세이미지 버킷 링크 노출  (0) 2025.07.24
성능 분석 실패기 : Grafana K6, N+1 문제를 폭로하다  (0) 2025.07.24
'Jungle' 카테고리의 다른 글
  • 데이터베이스 액세스 최적화로 TPS 4.4% 향상시키기 (144.6 → 151 TPS)
  • TIO 성능 테스트: EC2 업그레이드로 144 TPS 달성하기
  • TIO 개선 소요 파악 - 성능 최적화
  • 상세이미지 버킷 링크 노출
ahpicl64
ahpicl64
in the clouds
  • ahpicl64
    구름
    ahpicl64
  • 전체
    오늘
    어제
    • 분류 전체보기 (95)
      • WIL (4)
      • Jungle (36)
      • AWS (2)
      • SQL (2)
      • CS:APP (17)
      • Algorithm (10)
      • K8s (7)
      • 자료 구조 (10)
      • Spring (4)
      • React (0)
      • 운영체제 (1)
      • 기타등등 (2)
      • 이야기 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    자료구조
    DevOps
    알고리즘
    부하테스트
    github actions
    S3
    CloudFront
    트러블슈팅
    k8s
    IAM
    AWS
    컴퓨터시스템
    queue
    어셈블리
    CSAPP
    DB
    python
    Spring boot
    EC2
    Spring
  • 02-21 08:19
  • hELLO· Designed By정상우.v4.10.3
ahpicl64
TIO 성능 테스트 결과 분석 (40명 동시 사용자)
상단으로

티스토리툴바