분산 시스템
분산 시스템(distributed system)은 여러 독립적인 컴퓨터 또는 프로세스가 컴퓨터 네트워크를 통해 통신하고 공동의 기능을 제공하도록 구성된 시스템이다. 이용자는 하나의 서비스처럼 접근할 수 있지만 실제 처리 과정은 서로 다른 장치의 메모리·저장 장치와 실행 환경에 분산된다....
| 영문명 | Distributed system |
|---|---|
| 분류 | 컴퓨터 과학 · 컴퓨터 네트워크 · 소프트웨어 공학 |
| 정의 | 네트워크로 연결된 여러 컴퓨터가 하나의 시스템으로 기능하는 구조 |
| 기본 구성 | 노드 · 서비스 · 메시지 · 저장소 · 네트워크 |
| 통신 | RPC · 메시징 · 이벤트 스트림 |
| 핵심 과제 | 동시성 · 부분 장애 · 일관성 · 확장성 |
| 데이터 처리 | 복제 · 샤딩 · 파티셔닝 |
| 합의 알고리즘 | Raft · Paxos |
| 일관성 모델 | 강한 일관성 · 최종 일관성 |
| 장애 대응 | 재시도 · 타임아웃 · 페일오버 · 중복 요청 처리 |
| 대표 환경 | 클라우드 서비스 · 분산 데이터베이스 · 데이터센터 |
| 보안 | 서비스 인증 · 권한 관리 · 통신 암호화 |
| 관련 개념 | CAP 정리 · 논리적 시계 · 상태 머신 복제 |
| 참고 자료 | MIT 6.5840 분산 시스템 |
분산 시스템(distributed system)은 여러 독립적인 컴퓨터 또는 프로세스가 컴퓨터 네트워크를 통해 통신하고 공동의 기능을 제공하도록 구성된 시스템이다. 이용자는 하나의 서비스처럼 접근할 수 있지만 실제 처리 과정은 서로 다른 장치의 메모리·저장 장치와 실행 환경에 분산된다. 분산 시스템의 핵심 문제는 단순히 컴퓨터를 많이 연결하는 것이 아니라, 네트워크 지연과 메시지 손실, 일부 장치의 장애가 발생하는 상황에서도 올바른 결과와 예측 가능한 서비스를 제공하는 데 있다.[1]
분산 시스템의 발전은 시분할 컴퓨터 사이의 파일·자원 공유, 원격 절차 호출과 네트워크 운영체제 연구에서 시작되었다. 1980~1990년대에는 클라이언트-서버 구조, 분산 객체와 분산 파일 시스템이 널리 연구되었고, 대규모 웹 서비스가 성장하면서 서버 클러스터와 분산 데이터베이스가 실용적인 기반 기술이 되었다. 이후 클라우드 컴퓨팅과 컨테이너 오케스트레이션, 메시지 큐 등이 보편화되며 물리 컴퓨터와 운영체제 인스턴스를 여러 지역에 배치하는 일이 흔해졌다.
분산 시스템에서는 프로세스가 다른 컴퓨터의 메모리를 직접 읽지 못하므로 메시지를 통해 상태와 요청을 교환한다. RPC와 REST API, 메시지 큐 및 이벤트 스트림은 서로 다른 서비스의 기능을 연결하는 대표적인 방식이다. 그러나 네트워크 요청의 도착 시간과 순서는 일정하지 않고 요청한 서버가 중간에 종료될 수도 있다. 따라서 타임아웃·재시도·중복 요청 방지·멱등성 처리가 프로그램의 정확성에 직접 영향을 준다.
여러 노드가 같은 데이터를 보유하도록 하는 복제는 장애 대응과 읽기 처리량 개선에 유용하다. 반면 한 노드의 갱신을 다른 노드에 언제 반영할지에 따라 강한 일관성, 최종 일관성과 다양한 중간 모델이 구분된다. Raft나 Paxos 같은 합의 알고리즘은 일부 노드의 장애에도 다수 노드가 상태나 로그의 순서에 합의하도록 설계된다. 이러한 알고리즘이 모든 네트워크 분할에서 가용성을 무제한으로 보장하는 것은 아니다.[2]
분산 시스템의 확장 방법으로는 서비스 인스턴스를 늘리는 수평 확장과 데이터를 여러 파티션에 나누는 샤딩이 있다. 로드 밸런서는 클라이언트 요청을 여러 서버에 배분하고 캐시는 원본 저장소의 부담을 줄인다. 이러한 기술을 결합하면 대량 요청을 처리할 수 있지만 노드 수가 늘어날수록 배포·관측성·데이터 이동과 장애 분석이 복잡해진다. 로그·메트릭·분산 추적과 자동화된 장애 복구 체계는 실제 운영에서 중요한 역할을 한다.
분산 시스템은 데이터베이스, 웹 서비스, 금융 결제, 대규모 저장소, 과학 계산, 게임 서버와 산업용 제어망에 폭넓게 사용된다. CAP 정리는 네트워크 분할 조건에서 일관성과 가용성의 설계상 제약을 이해하는 데 도움을 주지만 모든 시스템을 단순히 두 가지 특징 중 하나만 선택하는 문제로 환원해서는 안 된다. 시스템 설계자는 장애 모델과 데이터 손실 허용 범위, 응답 지연, 복구 시간 및 운영 비용을 함께 평가해야 한다.