혼공네 Final 챕터.
안정성은 특정 기능을 언제든 균일한 성능으로 수행할 수 있는 특성이다.
안정성을 수치화하는 대표적인 개념으로 가용성(Availability) 과 고가용성(High Availability, HA) 이 있다.
이는 “컴퓨터 시스템이 특정 기능을 실제로 수행할 수 있는 시간의 비율” 로 정의된다.
가용성(%) = 업타임 / (업타임 + 다운타임)
고가용성은 일반적으로 99.999%, 즉 파이브 나인즈(Five Nines) 로 표현된다.
이는 1년 기준 약 5.26분, 한 달 기준 26.3초의 다운타임을 의미하며,
하루로 환산하면 약 1초의 중단 시간만 허용되는 수준이다.
시스템은 다양한 이유로 장애를 겪는다.
이러한 상황에서도 기능을 유지할 수 있는 능력을 결함 감내(Fault Tolerance) 라 한다.
결함 감내를 실현하기 위한 대표적 방법이 이중화(Redundancy) 이다.
이중화란 핵심 구성요소를 예비로 중복 배치하여 장애 발생 시 즉시 대체할 수 있도록 하는 기술이다.
이중화의 대상은 시스템 전체 중단을 유발할 수 있는 지점으로,
이를 단일 장애점(SPOF, Single Point of Failure) 이라 부른다.
이중화 방식은 두 가지로 구분된다.
이중화를 확장한 형태로 다중화(Multiplexing) 도 존재하며,
3개 이상의 예비 구성을 통해 높은 안정성을 확보할 수 있다.
네트워크 인터페이스를 다중화하는 대표적인 기술이 티밍(Teaming) 과 본딩(Bonding) 이다.
둘 다 여러 네트워크 인터페이스를 하나의 논리적 인터페이스처럼 동작시키는 기술이다.
이를 통해 대역폭을 확장하거나, 한 인터페이스에 장애가 발생하더라도
다른 인터페이스를 통해 지속적인 통신이 가능해진다.
서버에 과도한 트래픽이 집중되면 CPU 과열, 메모리 부족, 요청 지연 등의 문제가 발생한다.
이로 인해 가용성이 떨어질 수 있으며, 이를 방지하기 위한 기술이 로드 밸런싱이다.
로드 밸런싱(load balancing) 은 다수의 서버에 요청을 고르게 분산하여
시스템 전체의 부하를 균등하게 유지하는 기술이다.
하드웨어적으로는 L4/L7 스위치에서 수행할 수 있으며,
소프트웨어적으로는 Nginx, HAProxy, Envoy 등의 도구를 통해 구현할 수 있다.
로드 밸런서가 사용하는 대표적인 분배 알고리즘은 다음과 같다.
소프트웨어 시스템 내부에서도 부하를 분산하는 구조가 존재한다.
대표적으로 RabbitMQ 와 Celery 가 있다.
RabbitMQ는 메시지 브로커(Message Broker) 로,
서버 간 데이터를 안전하게 주고받는 비동기 메시징 시스템이다.
생산자(Producer)가 보낸 메시지를 큐에 저장하고,
소비자(Consumer)가 이를 꺼내 처리한다.
이를 통해 작업을 여러 워커로 분산시켜 서버 부하를 줄일 수 있다.
Celery는 분산 작업 큐(Distributed Task Queue) 로,
대량의 비동기 작업을 여러 워커 프로세스에 분배하여 실행하는 구조이다.
내부적으로 RabbitMQ 또는 Redis 같은 메시지 브로커를 사용한다.
예를 들어 대용량 이미지 처리, 로그 수집, 데이터 변환 등의 작업을 여러 노드에 분산할 수 있다.
┌────────────────────┐
│ Web App │
│ (Django/FastAPI) │
└────────┬───────────┘
│ ① delay()
▼
┌────────────────────┐
│ RabbitMQ │ ← 메시지 브로커
│ (Task Queue) │
└────────┬───────────┘
│ ② 메시지 전달
▼
┌────────────────────┐
│ Celery Worker │ ← 백그라운드에서 작업 수행
│ (Task Executor) │
└────────┬───────────┘
│ ③ 결과 저장
▼
┌────────────────────┐
│ Result Backend │ ← Redis / DB
└────────────────────┘
이중화나 로드 밸런싱 구조에서는 각 서버의 상태를 지속적으로 확인해야 한다.
이를 헬스 체크(Health Check) 라 한다.
주기적으로 특정 엔드포인트나 포트를 호출해 정상 응답(200 OK 등) 이 오는지 확인하며,
문제가 감지된 서버는 자동으로 분배 대상에서 제외된다.
Nginx, Kubernetes, AWS ELB 등에서 모두 사용되는 핵심 기능이다.
프록시 서버(Proxy Server) 는 클라이언트와 서버 사이에서 통신을 중개하는 시스템이다.
클라이언트는 실제 서버가 아닌 프록시 서버로 요청을 보내며,
프록시가 이를 대신 전달하고 응답을 반환한다.
이를 통해 보안, 캐싱, 부하 분산, IP 마스킹 등의 기능을 수행한다.
프록시는 동작 위치와 목적에 따라 구분된다.
리버스 프록시는 로드 밸런서 역할도 수행할 수 있으며,
캐시를 활용해 서버 부하를 줄이는 기능을 제공한다.
암호화(Encryption) 는 원문 데이터를 제3자가 알아볼 수 없는 형태로 변환하는 과정이다.
복호화(Decryption) 는 암호화된 데이터를 원문 데이터로 되돌리는 과정이다.
암호화와 복호화는 데이터 송수신의 안전성 확보 뿐 아니라 인증서 기반 검증에도 활용된다.
핵심 요소는 키(Key) 로, 키의 특성과 사용 방식에 따라 암호화 방식이 구분된다.
인증서(Certificate) : 공개키와 소유자 정보를 검증한 전자 문서, 신뢰 기관(CA) 발급
디지털 서명(Digital Signature) : 데이터 무결성과 발신자 인증을 위한 전자 서명
해시(Hash) : 임의 길이 데이터를 고정 길이 값으로 변환하는 함수
해시 값(Hash Value) : 해시 함수 출력 값, 데이터 변조 확인 가능
특징:
용도:
HTTPS(HyperText Transfer Protocol Secure) : HTTP + 암호화
SSL(Secure Socket Layer) : HTTPS 초기 암호화 프로토콜
TLS(Transport Layer Security) : SSL 업그레이드 버전, 현재 표준
암호 스위트(Cipher Suite) : 통신 시 사용할 암호화 알고리즘 집합
전파(Radio Wave) : 전자기파를 이용한 정보 전달 수단
주파수(Frequency) : 전파의 진동 횟수, Hz 단위
Wi-Fi : IEEE 802.11 규격 기반 무선 통신
AP(Access Point) : 클라이언트와 네트워크 연결 제공, 신호 중계 역할