분산 처리 시스템이란? What is Distributed System?

Heonjang Lee
3 min readDec 22, 2021

--

최근에 동료와 일을 하면서 소스 코드라는 말을 사용 하던 중, 갑자기 나 스스로 소스 코드라는 단어의 뜻을 정확히 알고 있나? 에 대해서 의심을 품은적이 있었다

소스 코드란 프로그램이 동작하기 위한 코드… 언저리인거 같은데… 그럼 그냥 “코드” 랑 뭐가 다르지…? 라는 질문이 나왔었고, 구글링을 통해 소스 코드란 컴파일 되기 전 Human-Readable한 포맷의 코드라는 정의를 다시 상기 할 수 있었었다.

소스 코드같이 정말 기본적인 단어가 헷갈렸던 것 처럼 현재 많은 Computer Science Terminology를 정확히 알고 있나하는 의심이 들었었고, 그래서 이번기회에 Distributed System이라는 단어에 대해서 정의를 좀 더 명확히 하고자 한다.

데이터 엔지니어로서, Distributed System, 분산처리시스템 이라는 단어는 입에 달고 살 수 밖에 없는 단어인 것 같다. (물론 내가 Distributed System의 광팬이여서 좀 더 그런편인것 같긴 하다)

HBase, Kafka, Spark, EMR, S3 등등 Big Data와 Distributed System은 뗄래야 뗄 수 없는 관계가 이미 되버렸고 좋은 데이터 엔지니어는 DS에 대한 깊은 이해 없이는 될 수가 없다고 생각한다

DS = Distributed System

EMR(DS)에대해 동료들에게 설명할 때 나는 Andrew Tanenbaum의 Definition을 주로 빌려 쓰곤 했다

“A distributed system is a collection of independent computers that appear to the users of the system as a single computer.” — Andrew Tanenbaum

소스 코드란 프로그램이 동작하기 위한 코드… 라고 간단히 생각했던 것 처럼, 동료들에게 DS란 여러개의 컴퓨터가 하나의 컴퓨터처럼 동작하는 것 이라고 간단히 설명했었었고, 나 또한 그렇게 간단하게 생각을 하고 있었었다.

물론 이말이 “틀렸다" 라고는 생각하지 않는다, 하지만 Distributed System을 정의하기 위해서는 좀 더 DS의 특징을 나타 낼 수 있는 정의가 필요 하다.

Distributed System의 특징을 잘 표현하기 위해서는, 위에서 내렸던 간단한 정의를 다시한번 상기 시킬 필요가 있다. DS는 결국 Independent한 시스템들의 모음으로 구성되어있기 때문에 서로의 연결이 불안정하고, 각 시스템들의 안정성을 보장 할 수 없으며, Asynchronous한 모임 이라고 할 수가 있겠다.

즉 Distributed System이란 하나의 Task를 여러개의

  1. Fail 할 수 있고
  2. Disconnected 될 수 있고
  3. Asynchronous하게 돌아가는

컴퓨터들로 실행 할 수 있게 만드는 시스템이라고 할 수 있겠다.

이러한 특성들 때문에 DS는 Replication, Leader Election 등 여러가지 Failover 기법들이 사용 하고 또한 엔지니어도 이러한 경우의 수 들을 잘 이해하고 여러가지 문제상황들을 고려해야 한다.

Distributed System에 관해서 쓰는 글들은 많은 부분들이 University of Illinois — Urbana-Champaign의 CS425 수업에서 가져 왔으며, 2020년 가을 수업을 진행한 교수인 Indranil Gupta에게 감사를 표한다. Lecture Slide는 https://courses.engr.illinois.edu/cs425/fa2020/lectures.html에서 찾아볼 수 있다.

--

--