오늘은 우리가 매일 사용하는 인터넷 서비스, 클라우드 저장소, 온라인 게임 등이 어떻게 수많은 사용자 요청을 빠르고 안정적으로 처리할 수 있는지 알아보는 시간을 가져보려 합니다.
바로
네트워크
로 연결된 여러 컴퓨터들이 마치 하나의 강력한 컴퓨터처럼 협력하여 일하는 기술,
분산 시스템
에 대한 이야기입니다.
🚀
분산 시스템이란 무엇이고 왜 사용할까요?🔗
분산 시스템(Distributed System)이란, 여러 대의 독립적인 컴퓨터들이 네트워크를 통해 연결되어, 사용자에게는 마치 하나의 통일된 시스템처럼 보이도록 작동하는 시스템을 말합니다. 우리가 사용하는 구글 검색 엔진, 페이스북, 넷플릭스 같은 대규모 서비스들은 모두 수많은 컴퓨터로 이루어진 분산 시스템 위에서 동작하고 있습니다.
그렇다면 왜 굳이 여러 컴퓨터를 묶어서 사용할까요? 여기에는 몇 가지 중요한 장점들이 있습니다.
✅
자원 공유 (Resource Sharing)🔗
여러 컴퓨터에 흩어져 있는 하드웨어(프린터, 디스크 등)나 소프트웨어(데이터베이스, 파일 등) 자원들을 네트워크를 통해 함께 사용할 수 있습니다.
예를 들어, 사무실에 있는 여러 대의 컴퓨터가 단 하나의 프린터를 공유해서 사용하는 것이죠.
✅
계산 속도 향상 (Computation Speedup)🔗
하나의 거대한 작업을 여러 개의 작은 작업으로 나누어 여러 컴퓨터에 분산시켜 동시에 처리하게 함으로써, 전체 작업 완료 시간을 크게 단축할 수 있습니다.
마치 여러 사람이 함께 일을 나누어 하면 더 빨리 끝나는 것과 같은 원리입니다. 이를
병렬 처리(Parallel Processing)
라고도 합니다.
만약 시스템을 구성하는 여러 컴퓨터 중 하나가 고장 나더라도, 다른 컴퓨터들이 그 역할을 대신 수행하여 전체 시스템은 계속해서 서비스를 제공할 수 있습니다.
중요한 파일 여러 곳에 복사해 두면 하나가 사라져도 안전한 것처럼, 시스템의
결함 허용성(Fault Tolerance)
이 높아지는 것입니다.
네트워크로 연결된 컴퓨터들은 서로 정보를 쉽게 교환할 수 있습니다. 이메일을 보내거나 메신저로 대화하는 것처럼, 분산 시스템은 사용자 또는 시스템 간의 원활한 정보 교환 수단을 제공합니다.
Q:"분산 시스템을 사용하는 이유(장점)는 무엇인가요?"
A: 자원 공유, 성능 향상(계산 속도), 신뢰성(결함 허용), 통신
🚀
네트워크 구조: 컴퓨터들을 어떻게 연결할까?🔗
분산 시스템은 컴퓨터들이
네트워크
를 통해 연결되어 있다고 했죠? 이 네트워크는 컴퓨터들을 서로 연결하는 방식이나 규모에 따라 몇 가지 종류로 나눌 수 있습니다.
✅
LAN (Local Area Network)🔗
비교적 가까운 거리에 있는 컴퓨터들을 연결하는 네트워크입니다. 예를 들어, 집 안의 컴퓨터와 프린터, 또는 한 사무실이나 건물 내의 컴퓨터들을 연결하는 경우가 해당합니다. 마치 한 집안의 가족들처럼 가까이 모여 있는 그룹이라고 생각할 수 있습니다. 속도가 빠르고 구축 비용이 상대적으로 저렴한 편입니다.
✅
WAN (Wide Area Network)🔗
LAN보다 훨씬 넓은 지역, 예를 들어 도시와 도시, 국가와 국가를 연결하는 거대한 네트워크입니다. 우리가 흔히 말하는 인터넷(Internet)이 바로 전 세계를 연결하는 가장 대표적인 WAN입니다. 여러 도시를 잇는 고속도로망과 비슷하다고 볼 수 있습니다. LAN보다는 속도가 느리고 비용이 더 많이 들 수 있습니다.

LAN & WAN
🚀
통신 구조: 컴퓨터들은 어떻게 대화할까?🔗
네트워크로 연결된 컴퓨터들은 서로 정보를 주고받으며 협력해야 합니다. 이때 사용하는 대화 방식, 즉 통신 구조에는 여러 가지가 있습니다.
✅
메시지 전달 (Message Passing)🔗
컴퓨터들이 서로에게
메시지
라는 데이터 꾸러미를 보내고 받으며 통신하는 방식입니다.
마치 편지를 주고받는 것과 비슷하죠. 보내는 컴퓨터는 메시지를 만들어서 네트워크로 보내고, 받는 컴퓨터는 그 메시지를 받아서 내용을 확인하고 필요한 작업을 수행합니다.
직접적인 연결 없이도 정보를 교환할 수 있다는 장점이 있습니다.
✅
RPC (Remote Procedure Call)🔗
한 컴퓨터가 네트워크 상의 다른 컴퓨터에 있는 함수(Procedure 또는 Method)를 마치 자신의 함수처럼 호출하는 방식입니다.
프로그래머 입장에서는 원격지에 있는 함수를 호출하는 코드가 로컬 함수를 호출하는 코드와 거의 동일하게 보여서, 분산 프로그래밍을 좀 더 쉽게 할 수 있다는 장점이 있습니다. 마치 옆자리 동료에게 "이것 좀 계산해줘"라고 직접 부탁하는 것과 비슷합니다.
Q: "RPC가 무엇인가요?"
A: "원격지에 있는 프로시저(함수)를 로컬에 있는 것처럼 호출할 수 있게 하는 통신 메커니즘입니다. 분산 환경에서 컴포넌트 간의 상호작용을 쉽게 구현하도록 돕습니다."

message & rpc
네트워크로 연결된 시스템을 관리하는 운영체제(OS)에도 약간의 차이가 있습니다.
✅
네트워크 운영체제 (Network OS)🔗
여러 대의 독립적인 컴퓨터들이 네트워크로 연결되어 자원을 공유할 수 있도록 지원하는 운영체제입니다. 각 컴퓨터는 자신만의 OS를 가지고 독립적으로 작동하지만, 네트워크를 통해 다른 컴퓨터의 파일이나 프린터 등에 접근할 수 있습니다.
사용자는 어떤 컴퓨터에 접속해서 작업하는지 명확히 알고 있어야 하는 경우가 많습니다. (예: Windows Server, 오래된 Unix 시스템)
✅
분산 운영체제 (Distributed OS)🔗
네트워크로 연결된 여러 컴퓨터들을 마치 하나의 강력한 단일 시스템처럼 보이게 만드는 운영체제입니다. 사용자는 자신이 사용하는 자원이 어느 컴퓨터에 있는지 알 필요가 없습니다.
OS가 알아서 자원을 관리하고 작업을 분산시켜 처리합니다. 진정한 의미의 분산 시스템을 구현하는 데 사용되지만, 설계하고 구현하기가 매우 복잡합니다. (예: 연구용 시스템인 Amoeba, Chorus 등. 현대의 클라우드 플랫폼들도 일부 분산 OS의 특징을 가집니다.)
🚀
분산 시스템의 설계 문제: 고려해야 할 점들🔗
분산 시스템을 만들 때는 여러 가지 어려운 문제들을 고려해야 합니다. 마치 여러 사람이 함께 일할 때 규칙과 조율이 필요한 것과 같습니다.
분산 시스템의 가장 중요한 목표 중 하나는 사용자나 프로그래머에게 시스템이 여러 컴퓨터로 분산되어 있다는 사실을 가능한 한 숨기는 것입니다. 이를
투명성
이라고 합니다.
사용자 수나 데이터 양이 증가하더라도 시스템이 성능 저하 없이 원활하게 작동할 수 있는 능력을 말합니다.
분산 시스템은 컴퓨터를 더 추가하는 방식으로 비교적 쉽게 확장할 수 있어야 합니다.
✅
신뢰성 (Reliability) 및 결함 허용성 (Fault Tolerance)🔗
앞서 장점에서도 언급했듯이, 일부 구성 요소에 고장이 발생하더라도 전체 시스템이 중단되지 않고 계속 작동할 수 있어야 합니다.
이를 위해 중복(Redundancy), 오류 감지(Error Detection), 복구(Recovery) 등의 기술이 사용됩니다.
여러 사용자가 동시에 데이터를 접근하거나 수정할 때, 데이터의 정확성과 일관성을 유지하는 것이 중요합니다.
특히 데이터가 여러 곳에 복제되어 있는 경우, 모든 복제본이 동일한 상태를 유지하도록 관리하는 것은 매우 어려운 문제입니다.
분산 시스템 환경에서 파일 관리는 어떻게 할까요? 이때 사용되는 것이
분산 파일 시스템(Distributed File System, DFS)
입니다. DFS는 네트워크로 연결된 여러 서버 컴퓨터에 저장된 파일들을 사용자에게 마치 자신의 로컬 컴퓨터에 있는 파일처럼 접근하고 사용할 수 있게 해주는 시스템입니다.

DFS 시각화
DFS에서 파일이나 디렉토리에 이름을 붙이고 관리하는 방식(명명, Naming)은 매우 중요합니다. 사용자가 파일의 실제 위치를 몰라도 쉽게 접근할 수 있도록
위치 투명성
을 제공하는 것이 핵심입니다.
- 이름 지정 방식: 보통 여러 서버에 걸쳐 파일 이름을 고유하게 관리하기 위해, 서버 이름과 로컬 파일 경로를 조합하거나 (예: ), 전역적인 이름 공간(Global Namespace)을 사용하여 모든 파일이 하나의 계층적 구조(마치 하나의 큰 C 드라이브처럼) 안에 있는 것처럼 보이게 합니다. 후자가 위치 투명성을 더 잘 제공합니다.
- 투명성: 위치 투명성 외에도, 사용자가 로컬 파일과 동일한 방식으로 원격 파일에 접근할 수 있도록
접근 투명성
을 제공하는 것도 중요합니다.
DFS에서 사용자가 다른 컴퓨터에 있는 파일에 접근할 때, 내부적으로는 몇 가지 다른 방식으로 동작할 수 있습니다.
원격 서버에서 파일을 읽어올 때, 자주 사용될 것을 대비해 사용자 컴퓨터(클라이언트)나 가까운 서버에 파일의 복사본을 임시로 저장해두는 기술입니다.
다음에 같은 파일에 접근할 때는 원격 서버까지 가지 않고 캐시된 복사본을 사용하므로 접근 속도가 훨씬 빨라집니다.
하지만 원본 파일이 변경되었을 때 캐시된 내용과 일치하지 않는
일관성(Consistency)
문제가 발생할 수 있어서, 이를 해결하기 위한 캐시 유효성 검사(Cache Validation) 메커니즘이 필요합니다. (자료구조의
해시 테이블
이 캐시 구현에 자주 사용됩니다.)
➡️
상태 유지 서버 vs 상태 비유지 서버🔗
서버가 클라이언트의 파일 접근 상태(예: 어떤 파일을 열었는지, 파일 포인터 위치가 어디인지 등)를 기억하는지 여부에 따라 나뉩니다.
상태 유지 서버
: 클라이언트 정보를 기억하므로 통신 횟수를 줄일 수 있지만, 서버에 장애가 발생하면 상태 정보가 유실되어 복구가 어렵습니다.
상태 비유지 서버
: 각 요청마다 필요한 모든 정보를 클라이언트가 보내야 하므로 통신량이 많아질 수 있지만, 서버는 상태를 기억할 필요가 없어 구조가 단순하고 장애 복구가 용이합니다. NFS(Network File System)가 대표적인 상태 비유지 방식입니다.

상태 유지 서버
분산 파일 시스템(DFS)은 현대 컴퓨팅 환경, 특히 클라우드 서비스와 빅데이터 처리에서 없어서는 안 될 핵심 기술입니다.
구글의 GFS, Hadoop의 HDFS, Ceph 등 다양한 DFS들이 개발되어 사용되고 있으며, 각각의 시스템은 특정한 목적(대용량 파일 처리, 높은 내결함성 등)에 맞게 설계되었습니다.
앞으로 데이터의 양이 계속해서 증가하고 더 많은 서비스가 분산 환경을 기반으로 구축됨에 따라, DFS는 더욱 중요해질 것이며 확장성, 성능, 일관성, 보안 등 다양한 측면에서 지속적인 연구와 발전이 이루어질 것입니다.
오늘 우리는 네트워크로 연결된 여러 컴퓨터들이 함께 작동하는 분산 시스템에 대해 알아보았습니다.
- Operating System Concepts - Abraham Silberschatz, Peter B. Galvin, Greg Gagne
- Distributed Systems: Concepts and Design - George Coulouris, Jean Dollimore, Tim Kindberg