일기

분산 시스템 아키텍쳐

Realuda72 2025. 1. 20. 23:41

 중앙 집중형 시스템에서는 모든 데이터와 리소스가 단일 서버에서 보관되고 제어된다. 사용자는 이 허브에 연결하여 데이터를 액세스하고 처리한다. 이 구성은 유지 관리와 보안이 쉽지만 너무 많은 사용자가 동시에 액세스하거나 중앙 서버가 오작동하는 경우 병목 현상이 발생할 수 있다.

 반면 분산 시스템은 데이터와 리소스를 여러 서버 또는 위치, 종종 다양한 물리적 장소에 분산한다. 이 구성을 통해 구성 요소 오류가 발생하더라도 시스템이 작동할 수 있으므로 더 나은 확장성과 안정성이 확보된다. 그러나 상호작용 지점이 많기 때문에 분산 시스템은 보안 및 관리가 어려울 수 있다.

 

분산 시스템 아키텍쳐

 일반적으로 분산 시스템 아키텍처는 다음과 같다.

 

클라이언트-서버 아키텍쳐

 이 설정에서 서버는 리소스나 서비스를 제공하고 클라이언트는 이를 요청한다. 클라이언트와 서버는 네트워크를 통해 통신한다.

 

피어투피어(P2P) 아키텍쳐

 네트워크의 각 노드 또는 피어는 클라이언트와 서버 역할을 모두 수행하여 서로 직접 리소스를 공유한다.

 

3계층 아키텍쳐

 이 모델은 프레젠테이션(UI), 어플리케이션(비즈니스 로직), 데이터(데이터베이스)의 세 가지 계층으로 구성된다. 각 계층은 더 쉬운 확장 및 유지 관리를 위해 분리된다.

 

마이크로서비스 아키텍쳐

 어플리케이션은 작고 독립적인 서비스로 나뉘며, 각각은 특정 기능을 처리한다. 이러한 서비스는 종종 REST API또는 메시징을 사용하여 네트워크를 통해 통신한다.

 

서비스 지향 아키텍쳐(SOA)

 마이크로서비스와 유사하게, SOA는 기능을 서비스로 구성한다. 그러나 SOA는 일반적으로 엔터프라이즈 서비스 버스(ESB)를 사용하여 서비스 간 통신을 관리한다.

 

이벤트 기반 아키텍쳐

 구성 요소는 직접 요청하는 대신 이벤트를 보내고 응답하여 상호작용한다. 이벤트는 시스템의 다양한 부분에서 특정 작업이나 프로세스를 트리거한다.

분산 시스템의 장점

  • 리소스 공유: 시스템 내 어디에서나 하드웨어, 소프트웨어 또는 데이터를 사용할 수 있다.
  • 개방성: 시스템의 확장 및 개선과 관련이 있다.
  • 동시성: 분산 시스템에서 자연스럽게 나타나는데, 원격 위치에 있는 별도의 사용자가 수행할 수 있는 동일한 활동이나 기능을 처리한다. 모든 로컬 시스템에는 독립적인 운영 체제와 리소스가 있다.
  • 확장성: 여러 프로세서가 더 많은 사용자와 통신하여 시스템의 반응성을 개선함으로써 시스템의 규모를 늘린다.
  • 장애 내구성: 하드웨어나 소프트웨어에 장애가 발생하더라도 시스템 성능에 영향을 주지 않고 시스템이 계속 정상적으로 작동할 수 있도록 시스템의 안정성을 중시한다.
  • 투명성: 모든 시스템에는 개인정보 보호가 있어야 하므로 분산 시스템의 복자성을 사용자와 어플리케이션 프로그램에 숨겨준다.

분산 시스템의 단점

  • 아직까지 분산 시스템에 적합한 소프트웨어가 없다.
  • 여러 시스템이 리소스와 데이터를 공유하기 떄문에 데이터에 쉽게 접근할 수 있어 보안에 문제가 있다.
  • 네트워크 포화로 인해 데이터 전송에 장애가 발생할 수 있다. 즉, 네트워크에 지연이 발생하면 사용자는 데이터에 액세스하는 데 문제가 발생한다.
  • 단일 사용자 시스템에 비해 분산 시스템과 관련된 데이터베이스는 훨씬 더 복잡하고 관리하기 어렵다.
  • 분산 시스템의 모든 노드가 동시에 데이터를 보내려고 하면 네트워크가 과부하될 수 있다.

계층적 아키텍쳐

 분산 시스템의 계층적 아키텍쳐는 시스템을 계층적으로 구성하며, 각 계층에는 특정 기능과 책임이 있다. 이 디자인 패턴은 복잡성을 관리하고 관심사 분리를 촉진하는데 도움이 된다.

  • 계층적 아키텍쳐에서 시스템은 뚜렷한 여러 계층으로 나뉘고, 각 계층은 특정 서비스를 제공하고 인접한 계층과만 상호작용한다
  • 이러한 분리는 시스템을 보다 효과적으로 관리하고 확장하는데 도움이된다.

  • 프레젠테이션 레이어: 사용자 상호작용 및 데이터 표시를 처리한다. 사용자 인터페이스와 클라이언트 측 상호작용을 담당한다.
  • 어플리케이션 계층: 비즈니스 로직과 어플리케이션별 기능을 포함한다.
  • 미들웨어 계층: 서로 다른 구성 요소나 서비스 간의 통신과 데이터 교환을 원활하게 한다.
  • 데이터 액세스 계층: 데이터베이스나 다른 데이터 소스에서의 데이터 저장과 검색을 관리한다.

계층적 아키텍쳐의 장점

  • 관심사 분리: 각 계층은 시스템의 특정 측면에 집중하여 개발, 테스트 및 유지 관리를 보다 쉽게 만든다.
  • 모듈성: 한 계층의 변경 사항이 다른 계층에 반드시 영향을 미치지 않으므로 보다 유연한 업데이트와 향상이 가능하다.
  • 재사용성: 레이어는 동일 시스템 내의 여러 어플리케이션이나 서비스에서 재사용될 수 있다.
  • 확장성: 서로 다른 계층을 독립적으로 확장하여 증가된 부하나 성능 요구 사항을 처리할 수 있다.

계층적 아키텍쳐의 단점

  • 성능 오버헤드: 각 계층은 계층 간의 데이터 전달 및 처리로 인해 추가적인 오버헤드를 발생시킨다.
  • 복잡성: 계층 간 상호작용을 관리하고 적절한 통합을 보장하는 일은 복잡할 수 있으며, 특히 대규모 시스템에서는 더욱 그렇다.
  • 경직성: 관심사를 엄격하게 분리하면 경직성이 발생할 수 있으며, 시스템 요구사항이 변경되면 여러 계층에 걸쳐 상당한 수정이 필요할 수 있다.

피어투피어(P2P) 아키텍쳐

 피어투피어(P2P) 아키텍쳐는 각 노드 또는 피어가 클라이언트와 서버 역할을 모두 수행하여 네트워크에 리소스와 서비스를 제공하는 분산형 네트워크 디자인이다. 이 아키텍쳐는 노드가 클라이언트 또는 서버로서 별도의 역할을 하는 기존 클라이언트-서버 모델과 대조된다.

 P2P 아키텍쳐에서 모든 노드는 네트워크에 참여하는 동등한 참여자이며, 각자 요청을 시작하고 수신할 수 있다. 피어는 중앙 서버에 의존하지 않고 파일이나 컴퓨팅 능력과 같은 리소스를 공유하기 위해 협업한다.

피어투피어(P2P) 아키텍쳐의 장점

  • 장애 허용성: 분산된 특성으로 인해 하나 또는 여러 피어의 장애로 인해 전체 네트워크가 중단되지 않는다.
  • 비용 효율성: 피어의 기존 리소스를 활용하여 값비싼 중앙 서버와 인프라의 필요성을 제거한다.
  • 확장성: 새로운 피어가 추가될 때마다 네트워크 용량이 향상되므로 늘어나는 피어 수를 쉽게 수용할 수 있다.

피어투피어(P2P) 아키텍쳐의 단점

  • 보안: 분산화로 인해 네트워크를 감독하거나 제어할 중앙 기관이 없기 때문에 보안 정책을 시행하고 악의적인 활동을 관리하는 것이 어려울 수 있다.
  • 성능 변동성: 서비스 품질은 피어의 리소스와 가용성에 따라 달라질 수 있으므로 이로 인해 성능이 일관되지 않을 수 있다.
  • 복잡성: 중앙 제어 없이 연결, 데이터 일관성 및 네트워크 조정을 관리하는 것은 복잡할 수 있으며 정교한 프로토콜이 필요할 수 있다.

데이터 중심 아키텍쳐

 데이터 중심 아키텍쳐는 데이터의 중앙 관리 및 활용에 초점을 맞춘 아키텍쳐 스타일이다. 이 접근 방식에서 데이터는 중요한 자산으로 취급되며 시스템은 어플리케이션 로직이나 사용자 인터페이스가 아닌 데이터 관리, 저장 및 검색 프로세스를 중심으로 설계되었다.

데이터 중심 아키텍쳐의 핵심 원칙

  • 중앙 집중식 데이터 관리: 데이터는 중앙 저장소 또는 데이터베이스에 관리되고 저장되어 다양한 어플리케이션과 서비스에서 접근할 수 있다.
  • 데이터 추상화: 어플리케이션 로직에서 데이터를 추상화하여 다양한 서비스나 어플리케이션이 잘 정의된 인터페이스를 통해 데이터와 상호작용할 수 있도록 한다.
  • 데이터 정규화: 중복을 줄이고 무결성을 개선하기 위해 정규화 기술을 사용하여 데이터를 구조화된 방식으로 구성한다.
  • 데이터 통합: 다양한 소스와 시스템의 데이터를 통합하여 통일된 뷰를 제공하고 포괄적인 데이터 분석을 가능하게 한다.
  • 확장성 및 성능: 점점 늘어나는 데이터를 효율적으로 처리할 수 있는 데이터 저장 및 관리 시스템을 설계한다.

데이터 중심 아키텍쳐의 장점

  • 일관성: 중앙 집중식 데이터 관리를 통해 단일 진실 소스를 유지하고 시스템 전체에서 데이터 일관성을 보장할 수 있다.
  • 통합: 다양한 소스의 데이터를 쉽게 통합하여 통일된 뷰를 제공하고 더 나은 의사 결정을 내릴 수 있도록 한다.
  • 데이터 품질: 데이터 정규화 및 추상화는 데이터 품질을 개선하고 중복을 줄여 더 정확하고 신뢰할 수 있는 정보를 제공하는데 도움이 된다.
  • 효율성: 중앙 관리를 통해 데이터 접근 및 검색 프로세스를 최적화하여 전반적인 세스템 효율성을 개선할 수 있다.

데이터 중심 아키텍쳐의 단점

  • 단일 장애 지점: 중앙 집중식 데이터 저장소는 병목 현상이나 단일 장애 지점이 될 수 있으며, 잠재적으로 시스템 안정성에 영향을 미칠 수 있다.
  • 성능 오버헤드: 대량의 중앙 집중형 데이터를 관리하면 성능 오버헤드가 발생할 수 있으며, 이를 위해 견고한 인프라와 최적화 전략이 필요하다.
  • 복잡성: 중앙 집중형 데이터 세스템을 설계하고 관리하는 일은 복잡할 수 있으며, 특히 대규모의 다양한 데이터 세트를 다루는 경우 더욱 그렇다.
  • 확장성 과제: 증가하는 데이터 볼륨과 액세스 수요를 수용하기 위해 중앙 집중식 데이터 시스템을 확장하는 것은 어려울 수 있으며, 상당한 인프라 투자가 필요할 수 있다.

서비스 지향 아키텍쳐(SOA)

 서비스 지향 아키텍쳐(SOA)는 소프트웨어 구성 요소인 "서비스"가 네트워크에서 제공되고 소비되는 분산 시스템의 설계 패러다임이다. 각 서비스는 특정 비즈니스 기능을 수행하고 표준화된 프로토콜을 통해 다른 서비스와 통신하는 개별 단위이다.

서비스 지향 아키텍쳐(SOA)의 핵심 원칙

  • 느슨한 결합: 서비스는 독립적으로 설계되어 서로에 대한 종속성을 최소화한다.
  • 서비스 재사용성: 서비스는 다양한 어플리케이션과 컨텍스트에서 재사용되도록 만들어진다.
  • 상호 운용성: 서비스는 XML이나 JSON과 같은 표준화된 통신 프로토콜 및 데이터 형식을 사용하여 상호작용한다.
  • 발견 가능성: 서비스는 서비스 디렉토리나 레지스트리에 등록되어 다른 서비스나 어플리케이션에서 검색되고 호출될 수 있다.
  • 추상화: 서비스는 필요한 인터페이스만 노출하고 내부 구현 세부사항은 숨긴다.

서비스 지향 아키텍쳐(SOA)의 장점

  • 유연성: 느슨한 결합을 통해 전체 시스템에 영향을 주지 않고 서비스를 더 쉽게 변경하고 업데이트할 수 있다.
  • 재사용성: 여러 어플리케이션에서 서비스를 재사용하여 중복성과 개발 노력을 줄일 수 있다.
  • 확장성: 서비스를 독립적으로 확장하여 동적 부하 분산 및 효율적인 리소스 활용을 지원한다.
  • 상호 운용성: 표준화된 프로토콜을 통해 다양한 플랫폼과 기술 간의 통합이 가능해져 협업과 데이터 교환이 촉진된다.

서비스 지향 아키텍쳐(SOA)의 단점

  • 복잡성: 여러 서비스와 그 상호 작용을 관리하는 데는 복잡성이 발생할 수 있으므로 효과적인 거버넌스와 오케스트레이션이 필요하다.
  • 성능 오버헤드: 네트워크를 통해 서비스 간 통신은 지연과 오버헤드를 발생시켜 전체 시스템 성능에 영향을 미칠 수 있다.
  • 보안: 여러 서비스에서 안전한 통신과 일관된 보안 정책을 보장하는 것은 어려울 수 있다.
  • 배포 및 유지 관리: 분산된 서비스 컬렉션을 배포하고 유지 관리하려면 견고한 인프라와 관리 관행이 필요하다.

이벤트 기반 아키텍쳐

 이벤트 기반 아키텍쳐(EDA)는 시스템에서 데이터와 제어의 흐름이 이벤트에 의해 구동되는 아키텍쳐 패턴이다. EDA시스템의 구성 요소를 시스템 내의 상태 변경 또는 동작을 나타내는 이벤트를 생성하고 소비하여 통신한다.

이벤트 기반 아키텍쳐의 핵심 원칙

  • 이벤트 생성자: 상태 변경이나 동작을 알리는 이벤트를 생성하는 구성 요소 또는 서비스이다.
  • 이벤트 소비자: 이벤트를 수신하고 이에 반응하여 필요에 따라 처리하는 구성 요소 또는 서비스이다.
  • 이벤트 채널: 메시지 큐나 이벤트 스트림과 같이 생산자와 소비자 간에 이벤트를 전송하기 위한 메커니즘이다.
  • 느슨한 결합: 생산자와 소비자가 분리되어 직접 호출이 아닌 이벤트를 통해 상호작용하므로 더 유연한 시스템 상호작용이 가능하다.

이벤트 기반 아키텍쳐의 장점

  • 확장성: 이벤트 제작자와 소비자를 분리하여 확장 가능하고 반응성이 뛰어난 시스템을 지원한다.
  • 유연성: 변화하는 상황에 적응하여 이벤트를 동적으로 실시간으로 처리할 수 있다.
  • 반응성: 시스템이 이벤트에 즉시 대응할 수 있도록 하여 반응성과 사용자 경험을 개선한다.

이벤트 기반 아키텍쳐의 단점

  • 복잡성: 이벤트 흐름 관리, 안정적인 전달 보장, 이벤트 처리 등은 복잡할 수 있다.
  • 이벤트 순서: 이벤트의 올바른 처리 순서를 보장하는 것은 특히 숨산 시스템에서 어려울 수 있다.
  • 디버깅 및 테스트: 이벤트 기반 시스템에서 문제를 해결하는 것은 비동기적이고 분산된 특성으로 인해 어려울 수 있다.

마이크로서비스 아키텍쳐

 마이크로서비스 아키텍쳐는 어플리케이션이 각각 특정 기능을 수행하는 작고 독립적인 서비스로 구성된 디자인 패턴이다. 이러한 서비스는 느슨하게 결합되어 있으며, 종종 HTTP 또는 메시징 큐를 통해 가벼운 통신 프로토콜을 통해 서로 상호작용한다.

마이크로서비스 아키텍쳐의 핵심 원칙

  • 단일 책임: 각 마이크로서비스는 단일 비즈니스 역량이나 기능에 초점을 맞추어 모듈성을 향상시킨다.
  • 자율성: 마이크로서비스는 독립적으로 배포 및 확장 가능하므로 다른 서비스에 영향을 주지 않고 변경 및 업데이트가 가능하다.
  • 분산형 데이터 관리: 각 마이크로서비스는 자체 데이터를 관리하여 종속성을 줄이고 확장성을 촉진한다.
  • 서비스간 통신: 서비스는 잘 정의된 API나 메시징 프로토콜을 통해 통신한다.

마이크로서비스 아키텍쳐의 장점

  • 확장성: 서비스는 수요에 따라 독립적으로 확장될 수 있으므로 리소스 활용도가 향상된다.
  • 복원력: 한 서비스에서 오류가 발생해도 반드시 다른 서비스에 영향을 미치지 않으므로 시스템 안정성이 향상된다.
  • 배포 유연성: 마이크로서비스는 독립적으로 개발, 배포, 업데이트할 수 있어 지속적인 배포가 용이하다.

마이크로서비스 아키텍쳐의 단점

  • 복잡성: 여러 서비스와 그 상호작용을 관리하는 것은 복잡할 수 있으며, 효과적인 오케스트레이션이 필요하다.
  • 데이터 일관성: 분산된 데이터 관리로 인해 서비스는 전반의 데이터 일관성을 보장하는 것이 어려울 수 있다.
  • 네트워크 오버헤드: 마이크로서비스간 통신으로 인해 지연이 발생할 수 있으며 네트워크 트래픽의 효율적인 처리가 필요하다.

클라이언트 서버 아키텍쳐

 클라이언트-서버 아키텍쳐는 시스템이 클라이언트와 서버라는 두 가지 주요 구성 요소로 나뉜 분산 시스템의 기본 모델이다. 이 아키텍쳐는 작업과 서비스가 네트워크 내의 여러 엔티티에 어떻게 분산되는지 정의한다.

클라이언트 서버 아키텍쳐의 핵심 원칙

  • 관심사 분리: 클라이언트는 사용자 상호작용과 요청을 처리하는 반면, 서버는 리소스, 데이터, 비즈니스 로직을 관리한다.
  • 중앙 관리: 서버는 리소스와 서비스를 중앙화하여 여러 클라이언트가 접근할 수 있도록 한다.
  • 요청-응답 모델: 클라이언트가 서버에 요청을 보내고, 서버는 이 요청을 처리하고 응답을 다시 보낸다.
  • 확장성: 서버는 점점 늘어나는 클라이언트나 요청을 처리하도록 확장될 수 있다.
  • 보안: 보안 메커니즘은 종종 서버 측에 구현되어 액세스를 제어하고 중요한 데이터를 관리한다.

클라이언트 서버 아키텍쳐의 장점

  • 중앙 제어: 중앙 위치에서의 리소스와 서비스를 보다 쉽게 관리하고 업데이트할 수 있다.
  • 간소화된 유지 관리: 업데이트와 변경 사항은 서버 측에서 이루어지므로 클라이언트 측 수정 필요성이 줄어든다.
  • 리소스 최적화: 서버는 성능과 안정성을 위해 최적화되어 여러 클라이언트에게 효율적으로 서비스를 제공할 수 있다.
  • 보안 관리: 중앙 집중화된 보안 정책과 제어를 통해 리소스와 데이터를 보다 쉽게 보호할 수 있다.

클라이언트 서버 아키텍쳐의 단점

  • 단일 장애 지점: 서버는 단일 장애 지점이 될 수 있으며, 이 경우 서버가 다운되면 연결된 모든 클라이언트에 영향을 미친다.
  • 확장성 과제: 많은 수의 클라이언트 요청을 처리하면 서버에 과부하가 걸릴 수 있으므로 신중한 부하 관리 및 확장 전략이 필요하다.
  • 네트워크 종속성: 클라이언트는 서버 리소스에 액세스하기 위해 네트워크 연결에 의존하며, 이는 성능과 안정성에 영향을 미칠 수 있다.
  • 성능 병목 현상: 서버에 대한 수요가 높으면 성능 병목 현상이 발생할 수 있으므로 효율적인 리소스 관리 및 최적화가 필요하다.

'일기' 카테고리의 다른 글

컴퓨터 메모리  (0) 2025.01.21
TCP 소켓 프로그래밍 실습  (0) 2025.01.17
CPU  (0) 2025.01.15
삼각함수  (0) 2025.01.14
로드 밸런싱  (0) 2025.01.14