SW/면접

Fault Tolerance 시스템 쉽게 이해하기: 서비스가 멈추지 않도록 하는 법

얇은생각 2025. 4. 9. 07:30
반응형

장애 허용, 왜 이렇게 중요할까?

한번 상상해보세요. 밤늦게 운영 중인 서비스가 갑자기 멈춰버렸어요. 로그를 뒤져보지만 원인은 불명. 하필 중요한 날이면 어떨까요? 예를 들면, 블랙프라이데이 쇼핑몰 서버가 다운된다면? 최악의 시나리오죠.

그래서 장애 허용(fault tolerance)은 선택이 아니라 필수입니다. 시스템이 안정적이어야 고객들이 불편을 겪지 않고, 회사도 불필요한 손실을 피할 수 있죠. 오늘은 장애가 발생해도 끄떡없는 시스템을 만드는 방법을 알아볼까요?

 


 

Fault Tolerance 시스템 쉽게 이해하기: 서비스가 멈추지 않도록 하는 법

 

장애 허용이란? 쉽게 이해하는 기본 개념

장애 허용 시스템이란 일부 문제가 생겨도 서비스 전체가 멈추지 않고 계속 작동하는 구조를 말해요. 핵심 포인트는:

  • 미리 장애를 예상하고 준비하기
  • 문제가 발생하면 빠르게 복구할 방법 마련하기
  • 중요한 기능이 언제든 정상적으로 돌아가도록 유지하기

 

자, 그럼 이런 시스템을 어떻게 구축할까요?

 

 


 

1. Replication: 중요한 정보는 여러 곳에 보관하자

데이터 복제(replication)는 데이터를 여러 개 복사해서 안전하게 보관하는 방식이에요.

예를 들어, 온라인 결제 시스템이 단 하나의 Database만 사용한다고 가정해 봅시다. 그런데 이 데이터베이스가 갑자기 장애를 일으키면? 고객들의 결제가 전부 멈춰버리겠죠. 하지만 동일한 데이터를 여러 개의 데이터베이스에 저장해 둔다면, 문제가 생겨도 다른 곳에서 데이터를 불러올 수 있습니다.

 

데이터 복제 방식

  • Synchronous Replication(Synchronous Replication): 변경 사항이 즉시 모든 복제본에 반영됨 → 데이터 일관성 보장 but 속도가 느릴 수도 있음.
  • Asynchronous Replication(Asynchronous Replication): 변경 사항을 나중에 복제 → 속도는 빠르지만 장애 시 데이터 불일치 가능성 있음.

 

 실전 예제: Cassandra의 데이터 복제

Cassandra 같은 Distributed Database는 데이터를 여러 노드에 자동으로 복제합니다. 특정 노드가 다운되더라도 다른 노드에서 데이터를 가져와서 정상적으로 서비스를 유지할 수 있죠.

 


 

2. Redundancy: Backup System은 필수!

백업 시스템이 없으면, 장애가 발생했을 때 서비스가 그대로 멈출 수밖에 없습니다. 그래서 미리 대비하는 것이 중요하죠.

 

 Active-Active(Active-Active) 방식

  • 여러 개의 서비스가 동시에 실행됨.
  • Load Balancer가 Traffic을 자동으로 분배.
  • 하나가 고장 나더라도 다른 인스턴스가 문제없이 서비스 유지.

 

 Active-Passive(Active-Passive) 방식

  • 주 서버가 운영되고, 백업 서버는 대기 상태.
  • 주 서버가 장애를 일으키면 백업 서버가 자동으로 전환됨.
  • 전환 과정에서 약간의 딜레이가 발생할 수도 있음.

 

실제 사례: RAID 저장소 시스템

  • RAID 0: 성능은 뛰어나지만 백업 기능 없음.
  • RAID 1: 데이터를 그대로 복제해 한쪽이 고장 나도 다른 쪽에서 복구 가능.

 


 

3. Failover (Failover)

Failover는 장애가 발생했을 때 시스템이 자동으로 백업 시스템으로 전환되는 과정입니다.

 

어떻게 동작할까?

  1. Monitoring System이 문제 감지 → 시스템이 정상적으로 작동하는지 지속적으로 확인.
  2. 트래픽 자동 전환 → 장애 발생 시 백업 시스템으로 자동 이동.
  3. 장애 복구 후 원래 시스템으로 복귀 → 문제가 해결되면 다시 원래 서버로 돌아감.

 

실제 사례: AWS Multi-AZ Deployment

AWS에서는 여러 가용 영역(AZ, Availability Zone)에서 애플리케이션을 배포할 수 있습니다. 특정 영역이 다운되면, 다른 영역에서 자동으로 트래픽을 처리해 서비스 중단을 막죠.

 


 

4. Load Balancing: 트래픽을 스마트하게 분산하자

트래픽이 몰리는 특정 서버만 과부하되면, 장애 발생 확률이 높아집니다. 이를 방지하기 위해 로드 밸런싱(load balancing)을 활용해야 합니다.

 

 로드 밸런싱 알고리즘

  • 라운드 로빈: 요청을 순차적으로 여러 서버에 분배.
  • 최소 연결 방식: 현재 가장 적게 연결된 서버로 트래픽을 보냄.
  • 가중치 기반 방식: 서버 성능에 따라 트래픽을 다르게 분배.

 

인기 있는 로드 밸런서

  • NGINX: 대규모 트래픽 처리에 강력한 로드 밸런서.
  • HAProxy: 고성능 웹 서비스 트래픽 관리에 최적화.

 


 

5. Graceful Degradation: 핵심 기능만이라도 유지하자!

아무리 준비를 잘해도 예상치 못한 장애는 발생합니다. 하지만 서비스가 완전히 멈추는 것보단, 최소한의 기능이라도 유지하는 게 중요하죠.

 

 실전 사례

  • 소셜 미디어 서비스 → 사용자가 많아지면 실시간 댓글 기능을 줄이고, 기본 글 읽기/쓰기 기능만 유지.
  • Circuit Breakers(Circuit Breakers) → 특정 서비스가 오류를 일으키면 전체 시스템이 영향을 받지 않도록 요청을 차단.

 


 

6. Real-Time Monitoring 및 Alert System

빠른 장애 대응을 위해서는 모니터링이 필수입니다. 문제가 발생하면 신속히 감지하고 대응해야죠.

 

주요 모니터링 도구

  • Prometheus: 시스템 성능 데이터를 수집하고 분석.
  • Grafana: 실시간 데이터 시각화.
  • PagerDuty: 장애 발생 시 즉시 알림을 보내 대응 가능.

 


 

결론: 장애 대비는 필수 투자!

예상하지 못한 장애는 언제든 발생할 수 있습니다. 하지만 미리 준비해 둔다면, 서비스 안정성을 높이고, 고객 불편을 최소화할 수 있습니다.

이 글이 도움이 되었다면, 시스템 설계 뉴스레터를 구독해보세요! 확장성과 안정성을 갖춘 시스템 구축에 대한 유용한 정보를 받아볼 수 있습니다.

더 스마트한 시스템을 구축하세요! 🚀

반응형