Close

분산 시스템이란?

분산 시스템 및 마이크로서비스 아키텍처 개요

Kev Zettler 얼굴 사진
Kev Zettler

풀스택 웹 개발자


분산 시스템은 공유하는 공동의 목표를 달성하기 위해 여러 개의 개별 컴퓨팅 노드에서 컴퓨팅 리소스를 활용하는 컴퓨터 프로그램의 모음입니다. 분산 시스템은 시스템에서 병목 현상이나 중앙에 장애 지점을 제거하는 것을 목표로 합니다.

애플리케이션을 한 개 단위로 배포할 수 있게 만들어서 잘 작동하지만 시간이 지나면서 크기와 복잡성이 커지면 어떻게 될까요? 유지 관리가 더 어려워지고 개발 속도가 느려지며 장애 발생의 위험이 높아지는 경우가 많습니다. 이 경우 모놀리식 애플리케이션이 진화하는 경로는 분산 시스템, 일반적으로 마이크로서비스 아키텍처로 진화하는 것입니다.

분산 시스템이란?


분산 시스템은 공유하는 공동의 목표를 달성하기 위해 여러 개의 개별 컴퓨팅 노드에서 컴퓨팅 리소스를 활용하는 컴퓨터 프로그램의 모음입니다. 분산 컴퓨팅 또는 분산 데이터베이스라고도 하며, 별도의 노드가 공동의 네트워크를 통해 통신하고 동기화합니다. 이러한 노드는 일반적으로 별도의 물리적 하드웨어 장치를 나타내지만 별도의 소프트웨어 프로세스 또는 기타 반복적인 캡슐화 시스템을 나타낼 수도 있습니다. 분산 시스템은 시스템에서 병목 현상이나 중앙에 장애 지점을 제거하는 것을 목표로 합니다.

분산 컴퓨팅 시스템의 특징은 다음과 같습니다.

리소스 공유 – 분산 시스템은 하드웨어, 소프트웨어 또는 데이터를 공유할 수 있음

동시 처리 – 여러 시스템에서 동일한 기능을 동시에 처리할 수 있음

확장성 – 컴퓨팅 및 처리 용량은 추가 시스템으로 확장할 때 필요에 따라 확장할 수 있음

오류 감지 – 장애를 더 쉽게 감지할 수 있음

투명성 – 노드는 시스템의 다른 노드에 액세스하고 통신할 수 있음

코드-스토어 아이콘
관련 자료

Microservices vs. monolithic architecture

세 개의 고리 아이콘
솔루션 보기

Compass를 사용하여 구성 요소 관리

중앙 집중식 시스템과 분산 시스템의 차이점은?


중앙 집중식과 분산 비교 이미지

중앙 집중식 컴퓨팅 시스템에서는 하나의 컴퓨터가 모든 컴퓨팅을 한 곳에서 수행합니다. 중앙 집중식 시스템과 분산 시스템의 주요 차이점은 시스템 노드 간의 통신 패턴입니다. 중앙 집중식 시스템의 상태는 클라이언트가 맞춤형 방식으로 액세스하는 중앙 노드 내에 포함됩니다. 중앙 집중식 시스템의 노드는 모두 중앙 노드에 액세스하므로 네트워크가 혼잡해지고 느려질 수 있습니다. 중앙 집중식 시스템에는 단일 장애 지점이 있지만 분산 시스템에는 단일 장애 지점이 없습니다.

분산 시스템은 마이크로서비스와 동일합니까?


마이크로서비스 아키텍처는 애플리케이션을 별도의 구성 요소 또는 “서비스”로 나누기 때문에 분산 시스템의 한 유형에 해당합니다. 예를 들어 마이크로서비스 아키텍처에는 비즈니스 기능(결제, 사용자, 제품 등)에 해당하는 서비스가 있을 수 있으며, 해당하는 각 구성 요소는 서비스에서 맡은 작업에 대한 비즈니스 로직을 처리합니다. 그러면 서비스의 중복된 복사본이 시스템에 여러 개 생기므로 서비스에 대한 중앙 집중식 장애 지점이 없습니다.

분산 추적이란?


분산 추적은 분산 시스템에서 실행하는 요청의 결과를 프로파일링하거나 모니터링하는 데 사용되는 방법입니다. 각 개별 노드마다 별도의 로그 및 메트릭 스트림이 있기 때문에 분산 시스템을 모니터링하는 것이 어려울 수 있습니다. 분산 시스템을 정확하게 파악하려면 이러한 개별 노드 메트릭을 종합적인 보기로 집계해야 합니다.

분산 시스템에 대한 요청은 일반적으로 시스템 내의 전체 노드 집합에 액세스하지 않으며, 그 대신 부분적인 집합 또는 노드를 통과하는 경로에 액세스합니다. 분산 추적은 분산 시스템을 통해 일반적으로 액세스되는 경로를 명확히 하여 팀이 이러한 경로를 분석하고 모니터링할 수 있도록 합니다. 분산 추적은 시스템의 각 노드에 설치되며, 이를 통해 팀은 시스템에서 노드 상태 및 요청 성능에 대한 정보를 쿼리할 수 있습니다.

분산 시스템의 장점, 단점 및 위험


분산 시스템은 시스템 안전성 및 성능을 개선하는 데 종종 도움이 됩니다. 중앙 집중식 장애 지점과 병목 현상을 제거하여 안정성이 향상됩니다. 분산 시스템의 노드는 중복성을 제공하므로 노드 장애가 발생할 경우 장애를 처리하고 교체하도록 다른 노드가 준비되어 있습니다. 노드를 수평적으로 및 수직적으로 손쉽게 확장할 수 있으므로 성능이 향상됩니다. 시스템에 과도한 부하가 걸리면 노드를 추가하여 부하를 처리할 수 있습니다. 광범위한 부하를 처리하도록 개별 노드의 용량을 늘릴 수도 있습니다.

그러나 이러한 장점에 대해 시스템이 지나치게 복잡해지고 유지 관리가 어려워지는 “개발에서 무분별한 확장”이 발생할 수 있습니다. 시스템이 복잡해짐에 따라 팀은 이러한 시스템을 효과적으로 구성, 관리 및 개선하는 데 어려움을 겪을 수 있습니다. 이러한 문제의 일부는 서로 다른 구성 요소가 서로 어떻게 관련되어 있는지, 또는 특정 소프트웨어 구성 요소 요소를 누가 소유하고 있는지 이해하는 것일 수 있습니다. 따라서 운영 상태를 극대화하고 종속 구성 요소뿐만 아니라 고객에게 부정적인 영향을 미치지 않도록 구성 요소를 변경하는 방법을 이해하기가 어렵습니다. 시스템에 여러 리포지토리가 있는 경우 분산 시스템의 코드를 관리하고 구성하기 위해 Atlassian의 Compass와 같은 특수 도구가 필요할 수 있습니다.

분산 시스템의 아키텍처


분산 시스템에는 다양한 유형이 있습니다. 가장 일반적인 유형은 다음과 같습니다.

클라이언트 서버

클라이언트-서버 아키텍처는 두 가지 주요 책임으로 나뉩니다. 클라이언트는 사용자 인터페이스 프레젠테이션을 담당하며 네트워크를 통해 서버에 연결합니다. 서버는 비즈니스 로직 및 상태 관리를 담당합니다. 서버에 중복성이 없으면 클라이언트-서버 아키텍처는 단순한 중앙 집중식 아키텍처가 될 수 있습니다. 진정으로 분산된 클라이언트-서버 설정에는 클라이언트 연결을 분산하기 위한 여러 서버 노드가 있습니다. 대부분의 최신 클라이언트-서버 아키텍처는 서버의 캡슐화된 분산 시스템에 연결하는 클라이언트입니다.

다중 티어

다중 티어 아키텍처는 클라이언트-서버 아키텍처를 확장한 것입니다. 다중 티어 아키텍처의 서버는 데이터 처리 및 데이터 관리와 같이 백엔드 서버와 관련된 추가적인 책임을 분리하는 더 세분화된 노드로 나뉩니다. 이러한 추가 노드는 오래 실행하는 작업을 비동기식으로 처리하고 나머지 백엔드 노드를 확보하여 클라이언트 요청에 응답하고 데이터 스토리지와의 인터페이스에 집중하도록 하는 데 사용됩니다.

피어 투 피어

피어 투 피어 분산 시스템에서 각 노드는 애플리케이션의 전체 인스턴스를 포함합니다. 프레젠테이션과 데이터 처리 간에는 노드가 분리되지 않습니다. 노드는 프레젠테이션 계층과 데이터 처리 계층을 포함합니다. 피어 노드는 시스템 전체의 상태 데이터 전체를 포함할 수 있습니다.

피어 투 피어 시스템은 극대화된 중복성이라는 장점을 가지고 있습니다. 피어 투 피어 노드 초기화되고 온라인 상태가 되면 다른 피어를 검색하여 연결하고 로컬 상태를 확장된 시스템의 상태와 동기화합니다. 이 기능을 사용하면 피어 투 피어 시스템에서 하나의 노드 장애가 발생해도 다른 노드가 중단되지 않습니다. 또한 피어 투 피어 시스템이 지속적으로 유지된다는 것을 의미합니다.

서비스 지향 아키텍처

서비스 지향 아키텍처(SOA)는 마이크로서비스의 이전 아키텍처입니다. SOA와 마이크로서비스의 주요 차이점은 노드 범위입니다. 마이크로서비스 노드의 범위는 기능 수준에 있습니다. 마이크로서비스에서 노드는 결제 처리와 같은 특정 기능 집합을 처리하기 위해 비즈니스 로직을 캡슐화합니다. 마이크로서비스에는 독립적인 데이터베이스 노드와 인터페이스를 수행하는 여러 개의 서로 다른 비즈니스 로직 노드가 포함되어 있습니다. 이에 비해, SOA 노드는 전체 애플리케이션 또는 엔터프라이즈 부서를 포함합니다. SOA 노드의 서비스 경계는 일반적으로 노드 내의 데이터베이스 시스템 전체를 포함합니다.

마이크로서비스의 장점으로 인해 마이크로비스는 SOA을 대체하는 더 인기 있는 대안으로 부상했습니다. 마이크로서비스는 구성 가능성이 더 높아 팀이 소규모 서비스 노드에서 제공하는 기능을 다시 사용할 수 있습니다. 마이크로서비스는 더욱 강력하며 보다 동적인 수직 및 수평 확장이 가능합니다.

분산 시스템 사용 사례

많은 최신 애플리케이션은 분산 시스템을 사용합니다. 트래픽이 많은 웹 및 모바일 애플리케이션은 분산 시스템입니다. 사용자는 클라이언트-서버 방식으로 연결하며, 여기서 클라이언트는 웹 브라우저 또는 모바일 애플리케이션입니다. 그런 다음 서버는 자체적인 분산 시스템입니다. 최근 웹 서버는 다중 티어 시스템 패턴을 따릅니다. 메시지 큐 시스템을 통해 통신하는 많은 서버 로직 노드에 요청을 위임하는 데 로드 밸런서를 사용합니다.

Kubernetes는 컨테이너의 모음에서 분산 시스템을 만들 수 있기 때문에 분산 시스템에 널리 사용하는 도구입니다. 컨테이너가 분산 시스템의 노드를 만들면 Kubernetes가 노드 간의 네트워크 통신을 오케스트레이션하고 시스템 내 노드의 동적인 수평 및 수직 확장을 처리합니다.

분산 시스템의 또 다른 좋은 예로는 피어 투 피어 분산 시스템인 비트코인 및 이더리움과 같은 암호화폐가 있습니다. 암호화폐 네트워크의 모든 노드는 통화 원장의 전체 내역에 대한 자체적인 복제본입니다. 통화 노드가 온라인 상태가 되면 다른 노드에 연결하고 원장의 전체 사본을 다운로드하여 부트스트랩합니다. 또한 암호 화폐에는 JSON RPC 프로토콜을 통해 원장 노드에 연결하는 클라이언트 또는 “지갑”이 있습니다.

결론...


분산 시스템은 대부분의 최신 소프트웨어 환경에서 널리 채택되어 사용됩니다. 소셜 미디어 앱, 동영상 스트리밍 서비스, 전자 상거래 사이트 등은 모두 분산 시스템으로 작동됩니다. 중앙 집중식 시스템은 확장을 처리하기 위해 자연스럽게 분산 시스템으로 진화합니다. 마이크로서비스는 분산 시스템을 구축하는 데 널리 사용 및 채택되는 패턴입니다.

분산 시스템은 구축하고 유지 관리하기 더 복잡하지만 Atlassian의 Compass는 이러한 문제를 해결해 줍니다. Compass는 개발자 경험 플랫폼으로, 분산된 아키텍처를 탐색할 수 있도록 도와주며 엔지니어링 결과물에 대한 단절된 정보와 이러한 정보를 사용하여 공동 작업하는 팀원들을 중앙 집중식의 검색 가능한 위치로 모아줍니다.

Kev Zettler
Kev Zettler

Kev는 선임 풀스택 웹 개발자이자 계속하여 신규 기업을 만들고 있는 사업가로 애자일 방법론을 활용한 제품 및 팀 구축 부문에서 십여 년의 경력을 보유하고 있습니다. DevOps, 암호화폐 및 VR/AR 부문 등 새롭게 부상하는 오픈소스 기술에 대한 열정적인 기여자, 저자이자 교육자이기도 합니다. 여가 시간에는 인디 게임 개발 모임에 참여합니다.


이 문서 공유

여러분께 도움을 드릴 자료를 추천합니다.

이러한 리소스에 책갈피를 지정하여 DevOps 팀의 유형에 대해 알아보거나 Atlassian에서 DevOps에 대한 지속적인 업데이트를 확인하세요.

DevOps 일러스트레이션

Compass 커뮤니티

장애물 극복 일러스트레이션

자습서: 컴포넌트 만들기

맵 일러스트레이션

Compass 무료로 시작하기

DevOps 뉴스레터 신청

Thank you for signing up