1일 1CS(Computer Science)

단일 장애 지점(SPOF)이란 무엇인가요?

표자 2025. 6. 27. 10:32

🤔 SPOF가 뭔가요?

단일 장애 지점(Single Point of Failure, SPOF)은 마치 우리 집의 메인 전기 차단기 같은 존재예요! 🏠⚡

메인 차단기가 고장나면 집 전체가 정전되죠? 시스템에서도 마찬가지로 하나의 구성 요소가 죽으면 전체 서비스가 마비되는 지점을 SPOF라고 해요.

💡 가용성(Availability)이란?

  • 정상 운영 시간 ÷ 전체 시간 × 100
  • 99.999% = 연간 5분 정도만 다운타임 허용 (고가용성, HA) 😱
  • 카카오톡이 하루 종일 안 된다고 생각해보세요... 그게 바로 가용성 문제!

🔍 현재 상황 분석

주어진 시스템을 살펴보면

✅ DB: Master 1대 + Replica 3대 (Failover 지원) - 안전함!
❌ API Server: 1대만 운영 - 위험한 SPOF!

API 서버가 유일한 SPOF예요! 📍

서버 한 대가 다운되면

  • OOM (메모리 부족) 💾
  • 네트워크 장애 🌐
  • 하드웨어 고장 💻
  • 트래픽 폭증 📈

이 모든 경우에 서비스가 완전히 멈춰버려요!

🛠️ 해결책: 서버 이중화 + 로드밸런서

로드밸런서의 역할

마치 은행 창구 안내원 같은 존재예요! 🏦

고객(요청)이 오면 가장 한가한 창구(서버)로 안내해주고, 특정 창구가 점심시간(다운)이면 다른 창구로 보내주죠.

Next.js 개발자라면 이렇게 생각해보세요

// 단일 서버 (위험!)
const server = new Server({ port: 3000 });

// 이중화 (안전!)
const servers = [
  new Server({ port: 3000 }),
  new Server({ port: 3001 }),
  new Server({ port: 3002 })
];

⚠️ 서버 이중화 시 주의사항

1. 🔐 세션 문제

문제상황: A 서버에서 로그인했는데, 다음 요청이 B 서버로 가면 "로그인 안 됐다"고 나와요!

해결방법

  • JWT 토큰 사용 (Next.js에서 많이 씀!) 🎫
  • Redis 같은 외부 세션 저장소 활용
  • 스티키 세션 (같은 사용자는 항상 같은 서버로)

2. ⚡ 동시성 문제

예시: 쿠팡에서 마지막 1개 상품을 동시에 2명이 주문하는 상황

단일 서버: 내부 락으로 해결 가능

이중화 서버: 분산 락(Redis) 또는 DB 락 필요

3. 📊 로그 관리

각 서버마다 다른 로그 파일이 생겨요!

  • ELK Stack (Elasticsearch + Logstash + Kibana)
  • 중앙 집중식 로그 관리 시스템 필요

4. ⚖️ 로드밸런싱 알고리즘

  • Round Robin: 순서대로 돌아가며 (가장 간단) 🔄
  • Least Connections: 연결 수가 적은 서버 우선 📊
  • Weighted: 서버 성능에 따라 가중치 부여 ⚖️

5. 🚀 배포 전략

블루-그린 배포: 새 버전 서버 준비 → 트래픽 전환 → 기존 서버 종료 롤링 배포: 하나씩 순차적으로 업데이트

💰 비용 vs 효과

구성 비용 안정성 추천도

서버 1대 💰 개발/테스트용
서버 2대 + LB 💰💰💰 ⭐⭐⭐⭐ 운영환경 필수!
서버 3대+ 💰💰💰💰 ⭐⭐⭐⭐⭐ 대용량 서비스

🎯 실제 적용 팁

Next.js 프로젝트라면

  • Vercel 배포 시 자동으로 다중 인스턴스 제공 ✨
  • AWS ALB + EC2 Auto Scaling Group 활용
  • Docker + Kubernetes로 컨테이너 오케스트레이션

Node.js 백엔드라면

  • PM2 Cluster Mode로 프로세스 이중화
  • Docker Swarm 또는 Kubernetes 활용
  • 상태를 메모리에 저장하지 말고 Redis/DB 활용

📝 면접 답변

"SPOF는 시스템에서 하나가 고장나면 전체가 마비되는 지점입니다. 주어진 시스템에서는 API 서버 1대가 SPOF입니다.

해결을 위해 서버를 2대 이상으로 이중화하고 로드밸런서를 앞단에 배치해야 합니다. 이때 세션 불일치 문제는 JWT나 외부 세션 저장소로, 동시성 문제는 분산 락으로 해결하며, 로그는 중앙 집중식으로 관리합니다.

배포는 블루-그린이나 롤링 방식을 사용하여 무중단 배포를 구현해야 합니다."

 

 


단일 장애 지점(SPOF)이란 무엇인가요?

백엔드와 관련된 질문이에요.

단일 장애 지점(Single Point of Failure, SPOF) 이란 전체 시스템에서 제대로 동작하지 않는 경우, 전체 시스템이 중단되는 특정 구성 요소를 의미합니다. 서버와 네트워크, 프로그램 등 정보 시스템이 정상적으로 사용할 수 있는 정도를 가용성(Availability) 이라고 합니다. 가용성은 정상적인 사용 시간(Uptime)을 전체 사용 시간(Uptime+Downtime)으로 나누어 구할 수 있습니다. 이때, 가용성이 99.999% 처럼 높은 경우에 고가용성(High Availability, HA) 이라 합니다. 시스템이 고가용성을 만족하기 위해서는 SPOF를 식별하고, 개선하는 작업이 필요합니다.

다음과 같은 상황에서 SPOF를 식별하고 개선해 주세요. 🤔

1. API Server 1대를 운용합니다.
2. DB는 Master Replica 구성을 사용합니다.
3. Master DB는 1대이며, 3대의 Replica DB를 사용하고 있습니다. (Failover는 지원됩니다.)

현재 서버는 단일 서버로 구성되어 있습니다. OOM(Out Of Memory), 네트워크 장애, 자원 고갈, 하드웨어 장애와 같은 문제가 발생할 경우 서버의 고장이 전체 시스템의 고장으로 이어질 수 있습니다.

이 문제를 개선하기 위해서 서버를 이중화하고, 로드 밸런서를 사용할 수 있습니다. 이중화는 동일한 애플리케이션을 여러 서버에 배포하여 한 서버가 다운되더라도 다른 서버가 서비스를 제공할 수 있도록 합니다. 로드 밸런서는 서버에 들어오는 트래픽을 여러 서버로 분산시켜주는 역할을 합니다. 만약, 특정 서버가 고장나는 경우에는 로드 밸런서에서 해당 서버로 향하는 요청을 다른 정상 서버로 전달합니다.

서버를 이중화할 때 점검해야 하는 부분들은 무엇인가요? 😀

서버를 이중화할 때 점검해야할 지점들은 애플리케이션 특성에 따라 상이합니다. 대표적으로 점검해야할 부분들은 동시성 문제, 세션 불일치 문제, 로그 및 메트릭 수집, 로드 밸런싱 알고리즘, 배포 등이 있습니다.

  • 애플리케이션 내부에서 동시성 문제를 해결하기 위한 코드가 이중화 환경에서도 안전하게 작동하는지 점검해볼 필요성이 있습니다. 예를 들어, 단일 서버인 경우에는 자바의 synchronized, ReentrantLock을 사용하여 멀티 스레드 환경에서 동시성 문제를 해결 할 수 있었습니다. 하지만, 이중화된 환경에서는 해당 방법들이 제대로 동작하지 않을 가능성이 매우 높습니다. 이 경우, 분산 잠금이나 DB 잠금을 사용하는 것이 적절할 수 있습니다.
  • 만약 서버에서 세션 기반 인증을 사용하고 있다면, 세션 불일치 문제를 겪을 수 있습니다. 이 경우, 세션 클러스터링이나 스티키 세션, 토큰 기반 인증, 외부 세션 저장소 등을 고려해야합니다.
  • 서버에서 생성되는 로그와 메트릭 데이터가 여러 서버에 걸쳐서 쌓이게 됩니다. 해당 데이터를 시각화하여 한눈에 확인하기 위해서는 각 서버에서 발생되는 데이터를 수집 및 통합하여 관리할 필요성이 생깁니다.
  • 적절한 로드 밸런싱 알고리즘을 선택해야할 필요성이 있습니다. 비효율적인 로드 밸런싱 알고리즘을 사용한다면, 한 서버에만 요청이 몰려서 이중화와 로드 밸런싱을 적용한 의미가 퇴색될 수 있습니다.
  • 서버 배포에 대해서 고민해볼 필요성이 있습니다. 서버가 늘어날 수록, 동일한 서비스의 다양한 버전이 운영될 수 있으며, 배포 시간이 증가하거나 배포 중 장애에 대한 대응이 복잡해질 수 있습니다.
728x90