ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 성능 이슈 해결 방법은?
    Interview 2025. 3. 17. 19:26
    728x90

    API 응답 속도 및 데이터베이스 성능 개선을 위한 방법은?

     

     

    API 성능 최적화모니터링 → 병목 지점 분석 → 캐싱, 비동기 처리, 로드 밸런싱 적용으로 접근하며,
    데이터베이스 최적화인덱싱, 샤딩, 쿼리 개선, 정규화 vs 비정규화 등을 고려하여 성능을 개선합니다.

     

     

    API 응답 속도 저하와 데이터베이스 성능 문제는 모니터링 → 원인 분석 → 최적화의 단계적 접근 방식으로 해결합니다.

     

    1️⃣ 특정 API 응답 속도가 느려졌다면 어떻게 디버깅하고 최적화할 것인가요?

    (1) API 성능 저하 원인 분석 (Root Cause Analysis)

    🔹 단계별 디버깅 프로세스

    1. 모니터링 및 로그 분석
      • Grafana, Prometheus, Datadog, AWS CloudWatch로 API 응답 시간 분석
      • ELK Stack (Elasticsearch, Logstash, Kibana) / Loki로 애플리케이션 로그 확인
      • 분산 트레이싱 (OpenTelemetry, Jaeger, AWS X-Ray) 활용하여 병목 구간 식별

    예시:
    "API 응답 시간이 500ms에서 2초 이상으로 증가한 경우, Prometheus에서 latency > 2s인 요청을 추적하고, Jaeger로 서비스 간 호출을 분석합니다."

    1. 서버 리소스 확인
      • CPU, 메모리 사용량 확인 (top, htop, Prometheus)
      • 네트워크 대역폭 문제 여부 확인 (AWS VPC Flow Logs, Netdata)
      • 디스크 I/O 확인 (iostat, vmstat)

    예시:
    "CPU 사용률이 90% 이상이면, HPA(Kubernetes Horizontal Pod Autoscaler)를 조정하여 인스턴스를 추가 확장합니다."

    1. API 요청 흐름 분석
      • Database Query Latency
      • 외부 API 호출 문제 여부 (HTTP Timeout, Third-Party API 지연)
      • 캐싱 적용 여부 확인

    예시:
    "API가 DB에서 데이터를 가져오는데 5초가 걸린다면, Slow Query를 분석하여 쿼리 최적화를 진행합니다."

     

    (2) API 최적화 방법

    1. 캐싱 적용 (Redis, Memcached)
      • 반복되는 API 요청을 캐싱하여 데이터베이스 부하 감소
      • TTL(Time-To-Live) 설정으로 데이터 최신성 유지

    예시:
    "자주 조회되는 상품 목록 API는 Redis에 캐싱하여 API 응답 속도를 100ms 이하로 유지합니다."

    1. 비동기 처리 (Async Processing)
      • Queue (Kafka, RabbitMQ, SQS) 활용하여 백그라운드 작업 처리
      • **WebSocket, Server-Sent Events (SSE)**로 실시간 데이터 제공

    예시:
    "결제 완료 후 주문 확인 이메일 전송은 Kafka 이벤트로 처리하여 API 응답 속도를 단축합니다."

    1. Database Connection Pool 최적화
      • DB Connection Pool (HikariCP, PgBouncer) 사용하여 커넥션 재사용
      • DB Timeout 설정으로 과부하 방지

    예시:
    "HikariCP의 maximumPoolSize를 조정하여 동시 연결을 최적화합니다."

    1. Load Balancing & Auto Scaling 적용
      • AWS ALB, Nginx Reverse Proxy를 통해 부하 분산
      • Kubernetes HPA로 트래픽 증가 시 자동 확장

    예시:
    "트래픽 급증 시 Auto Scaling Group을 활용하여 EC2 인스턴스를 동적으로 증가시킵니다."

     

     

    2️⃣ 데이터베이스 쿼리 성능을 개선해야 한다면 어떤 방법을 사용할 것인가요?

    (1) 데이터베이스 성능 저하 원인 분석

    1. Slow Query 확인
      • MySQL → SHOW PROCESSLIST; / EXPLAIN ANALYZE
      • PostgreSQL → pg_stat_statements / EXPLAIN (ANALYZE, BUFFERS)
      • MongoDB → db.system.profile.find()

    예시:
    "MySQL EXPLAIN을 사용하여 특정 인덱스를 타지 않는 쿼리를 분석하고 최적화합니다."

    1. Locking & Deadlock 분석
      • Row Lock vs Table Lock 확인 (SHOW ENGINE INNODB STATUS;)
      • Deadlock 방지를 위해 트랜잭션 순서 조정

    예시:
    "INSERT 시 SELECT FOR UPDATE를 잘못 사용하여 Deadlock이 발생하는 경우, Optimistic Locking을 적용합니다."

     

    (2) 데이터베이스 성능 최적화 전략

    1. 인덱스(Indexing) 최적화
      • B-Tree, Hash Index, Full-Text Index 활용
      • Covering Index로 쿼리 속도 개선

    예시:
    "자주 조회되는 order_id 컬럼에 인덱스를 추가하여 SELECT 성능을 5배 향상시켰습니다."

    1. 데이터베이스 샤딩 (Sharding)
      • User ID 기반 샤딩 → 데이터 균등 분배
      • Range Sharding vs Hash Sharding 비교 적용

    예시:
    "사용자 트랜잭션 데이터를 user_id % 10으로 10개의 샤드에 분산 저장하여 성능을 최적화합니다."

    1. 데이터 정규화 & 비정규화 선택
      • 정규화 → 데이터 중복 방지 (3NF, BCNF)
      • 비정규화 → JOIN 최소화하여 성능 개선

    예시:
    "실시간 조회 성능을 높이기 위해 User 테이블과 Order 테이블을 조인하는 대신, Order 테이블에 User 정보를 캐싱합니다."

    1. 쿼리 최적화 (Query Optimization)
      • JOIN 최적화 → Nested Loop 대신 Hash Join 사용
      • LIMIT / OFFSET 대신 Key-based Pagination 적용

    예시:
    "OFFSET 10000을 사용하는 대신, id > last_seen_id LIMIT 100 방식으로 Key-based Pagination을 적용하여 성능을 10배 향상시켰습니다."

     

     

     

     

    728x90
Designed by Tistory.