네트워크 장애 원인 분석 및 해결 방법
1) 서버 간 패킷 손실
서버 간 네트워크가 불안정하여 요청이 손실됨
해결 방법: ping
, traceroute
로 확인 후 방화벽 설정 점검
2) DNS 문제
도메인 네임이 올바르게 해석되지 않음
해결 방법: nslookup
, dig
로 DNS 상태 확인
3) 방화벽 설정 오류
특정 포트가 차단됨
해결 방법: iptables -L
, firewalld
확인
리소스 부족(CPU, 메모리, 디스크) 원인 분석 및 해결 방법
1) CPU 100% 사용
원인: 무한 루프, 과부하
해결 방법: top
, htop
으로 확인 후 프로세스 최적화
2) 메모리 누수
원인: GC 문제, 메모리 해제 실패
해결 방법: free -m
, top
으로 메모리 상태 확인
3) 디스크 부족
원인: 로그 파일 누적, 대용량 데이터 저장
해결 방법: df -h
, du -sh
로 디스크 사용량 분석
cf) 서버의 CPU 사용량을 확인하는 기본적인 명령어
PID
: 프로세스 ID (각 프로세스를 식별하는 고유한 번호)
COMMAND
: 실행 중인 프로세스(애플리케이션) 이름
%CPU
: 해당 프로세스가 사용하는 CPU 비율
TIME
: 프로세스가 실행된 총 CPU 사용 시간
#TH
: 프로세스가 실행하는 스레드 개수
WQ
: Work Queue(작업 큐) 개수
#PORTS
: 해당 프로세스가 사용하는 포트 개수
MEM
: 프로세스가 사용하는 물리적 메모리(RAM) 크기
PURG
: 정리 가능한 메모리 크기 (일부 캐시된 메모리)
CMPRS
: 압축된 메모리 사용량
PGRP
: 프로세스 그룹 ID
서비스 간 의존성 문제 원인 분석 및 해결 방법
(원인 분석)
1) 동기 호출
서비스 간 API 호출이 동기적으로 동작하여 응답을 기다려야 함
ex) REST API 요청 대기 시간이 길어져 서비스가 느려짐
2) 순환 의존성
서로 다른 서비스가 서로를 호출하면서 무한 루프 발생 가능
ex) A -> B 호출, B -> A 호출로 인해 응답 대기
3) 트랜잭션 롤백 문제
분산 환경에서 트랜잭션 일관성을 보장하기 어려움
ex) 데이터 저장 도중 일부 서비스가 실패하여 불완전한 데이터 저장
(해결 방법)
1) 비동기 메시징
2) Circuit Breaker 패턴
3) API Gateway를 통한 서비스 분리
4) SAGA 패턴을 통한 트랜잭션 관리
배포 실패 문제 원인 분석 및 해결 방법
(원인 분석)
1) 환경 변수 설정 오류
2) 데이터베이스 마이그레이션 실패
3) 트래픽 급증으로 인한 장애
4) 무중단 배포 전략 미적용
(해결 방법)
1) Blue-Green Deployment
2) Canary Deployment
3) Feature Toggle 적용
4) 자동화된 배포 테스트 (CI/CD)
DB 이슈 원인 분석 및 해결 방법
(원인 분석)
1) 성능 문제
2) 데이터 일관성 문제
3) 데드락 발생
4) Connection Pool 과부하
5) Replication 지연
6) DB 트랜잭션 롤백 문제
(해결 방법)
성능 문제 해결방법
: 인덱스 최적화, Query 튜닝, 캐싱 적용, Sharding 적용, Connection Pool 최적화
장애 발생 시 신속하게 대응 가능한 전략
: Auto Failover 설정, Backup & Restore 전략, Read Replica 활용, 트랜잭션 로깅 및 롤백
장애 진단 프로세스 5단계
1) 장애 탐지
장애 발생 여부를 모니터링 시스템을 통해 확인
주요 도구: Prometheus, ELK, Grafana
2) 초기 진단
로그 및 시스템 상태 확인
주요 도구: journalctl, tail -f, kubectl logs
3) 원인 분석
서비스, 네트워크, DB 등 문제 발생 원인 식별
주요 도구: Jaeger, Wireshark, MySQL EXPLAIN
4) 대응 및 복구
임시 해결책 적용 및 서비스 복구
주요 도구: Kubernetes Rollback, Auto Healing
5) 사후 분석
장애 발생 원인 정리 및 재발 방지 대책 수립
주요 도구: Incident Report, 블레임리스 문화 적용
장애 발생 및 대응 사례 예시 참고 링크