-
성능 이슈 해결 방법은?Interview 2025. 3. 17. 19:26728x90
API 응답 속도 및 데이터베이스 성능 개선을 위한 방법은?
API 성능 최적화는 모니터링 → 병목 지점 분석 → 캐싱, 비동기 처리, 로드 밸런싱 적용으로 접근하며,
데이터베이스 최적화는 인덱싱, 샤딩, 쿼리 개선, 정규화 vs 비정규화 등을 고려하여 성능을 개선합니다.API 응답 속도 저하와 데이터베이스 성능 문제는 모니터링 → 원인 분석 → 최적화의 단계적 접근 방식으로 해결합니다.
1️⃣ 특정 API 응답 속도가 느려졌다면 어떻게 디버깅하고 최적화할 것인가요?
(1) API 성능 저하 원인 분석 (Root Cause Analysis)
🔹 단계별 디버깅 프로세스
- 모니터링 및 로그 분석
- Grafana, Prometheus, Datadog, AWS CloudWatch로 API 응답 시간 분석
- ELK Stack (Elasticsearch, Logstash, Kibana) / Loki로 애플리케이션 로그 확인
- 분산 트레이싱 (OpenTelemetry, Jaeger, AWS X-Ray) 활용하여 병목 구간 식별
✅ 예시:
"API 응답 시간이 500ms에서 2초 이상으로 증가한 경우, Prometheus에서 latency > 2s인 요청을 추적하고, Jaeger로 서비스 간 호출을 분석합니다."- 서버 리소스 확인
- CPU, 메모리 사용량 확인 (top, htop, Prometheus)
- 네트워크 대역폭 문제 여부 확인 (AWS VPC Flow Logs, Netdata)
- 디스크 I/O 확인 (iostat, vmstat)
✅ 예시:
"CPU 사용률이 90% 이상이면, HPA(Kubernetes Horizontal Pod Autoscaler)를 조정하여 인스턴스를 추가 확장합니다."- API 요청 흐름 분석
- Database Query Latency
- 외부 API 호출 문제 여부 (HTTP Timeout, Third-Party API 지연)
- 캐싱 적용 여부 확인
✅ 예시:
"API가 DB에서 데이터를 가져오는데 5초가 걸린다면, Slow Query를 분석하여 쿼리 최적화를 진행합니다."(2) API 최적화 방법
- 캐싱 적용 (Redis, Memcached)
- 반복되는 API 요청을 캐싱하여 데이터베이스 부하 감소
- TTL(Time-To-Live) 설정으로 데이터 최신성 유지
✅ 예시:
"자주 조회되는 상품 목록 API는 Redis에 캐싱하여 API 응답 속도를 100ms 이하로 유지합니다."- 비동기 처리 (Async Processing)
- Queue (Kafka, RabbitMQ, SQS) 활용하여 백그라운드 작업 처리
- **WebSocket, Server-Sent Events (SSE)**로 실시간 데이터 제공
✅ 예시:
"결제 완료 후 주문 확인 이메일 전송은 Kafka 이벤트로 처리하여 API 응답 속도를 단축합니다."- Database Connection Pool 최적화
- DB Connection Pool (HikariCP, PgBouncer) 사용하여 커넥션 재사용
- DB Timeout 설정으로 과부하 방지
✅ 예시:
"HikariCP의 maximumPoolSize를 조정하여 동시 연결을 최적화합니다."- Load Balancing & Auto Scaling 적용
- AWS ALB, Nginx Reverse Proxy를 통해 부하 분산
- Kubernetes HPA로 트래픽 증가 시 자동 확장
✅ 예시:
"트래픽 급증 시 Auto Scaling Group을 활용하여 EC2 인스턴스를 동적으로 증가시킵니다."2️⃣ 데이터베이스 쿼리 성능을 개선해야 한다면 어떤 방법을 사용할 것인가요?
(1) 데이터베이스 성능 저하 원인 분석
- Slow Query 확인
- MySQL → SHOW PROCESSLIST; / EXPLAIN ANALYZE
- PostgreSQL → pg_stat_statements / EXPLAIN (ANALYZE, BUFFERS)
- MongoDB → db.system.profile.find()
✅ 예시:
"MySQL EXPLAIN을 사용하여 특정 인덱스를 타지 않는 쿼리를 분석하고 최적화합니다."- Locking & Deadlock 분석
- Row Lock vs Table Lock 확인 (SHOW ENGINE INNODB STATUS;)
- Deadlock 방지를 위해 트랜잭션 순서 조정
✅ 예시:
"INSERT 시 SELECT FOR UPDATE를 잘못 사용하여 Deadlock이 발생하는 경우, Optimistic Locking을 적용합니다."(2) 데이터베이스 성능 최적화 전략
- 인덱스(Indexing) 최적화
- B-Tree, Hash Index, Full-Text Index 활용
- Covering Index로 쿼리 속도 개선
✅ 예시:
"자주 조회되는 order_id 컬럼에 인덱스를 추가하여 SELECT 성능을 5배 향상시켰습니다."- 데이터베이스 샤딩 (Sharding)
- User ID 기반 샤딩 → 데이터 균등 분배
- Range Sharding vs Hash Sharding 비교 적용
✅ 예시:
"사용자 트랜잭션 데이터를 user_id % 10으로 10개의 샤드에 분산 저장하여 성능을 최적화합니다."- 데이터 정규화 & 비정규화 선택
- 정규화 → 데이터 중복 방지 (3NF, BCNF)
- 비정규화 → JOIN 최소화하여 성능 개선
✅ 예시:
"실시간 조회 성능을 높이기 위해 User 테이블과 Order 테이블을 조인하는 대신, Order 테이블에 User 정보를 캐싱합니다."- 쿼리 최적화 (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'Interview' 카테고리의 다른 글
Backtracking(백트래킹)과 DFS의 차이점 (0) 2025.03.17 시스템의 복원력을 높이기 위한 Chaos Engineering 전략 (0) 2025.03.17 대량 주문 트래픽을 처리하는 확장 가능한 아키텍처 설계 (0) 2025.03.16 이커머스 플랫폼을 위한 확장 가능한 아키텍처를 설계해보세요. (0) 2025.03.16 로그 분석을 활용한 장애 탐지 방법을 설명하세요 (0) 2025.03.16 - 모니터링 및 로그 분석