MSA(Micro Service Architecture)

  • 마이크로서비스 아키텍처는 독립적으로 배포 가능한 작은 서비스들의 모음으로, 각각이 특정 비즈니스 기능을 담당하고 서로 가볍게 연결되어 있는 분산 시스템 아키텍처입니다. [ChatGPT-4.0]

이벤트 기반 통신을 사용하는 마이크로서비스 아키텍처의 특징

  1. 비동기성: 이벤트 기반 시스템은 비동기적으로 작동합니다. 서비스는 이벤트를 발행하고 다른 작업을 계속 진행할 수 있으며, 이벤트를 구독한 다른 서비스가 독립적으로 반응합니다.
  2. 탈중앙화: 이벤트 기반 아키텍처는 중앙 집중식 통신 모델보다 탈중앙화되어 있습니다. 서비스 간 직접적인 의존성이 줄어들며, 각 서비스는 독립적으로 작동하고 확장될 수 있습니다.
  3. 확장성: 이벤트 기반 통신을 사용하면 시스템의 확장성이 향상됩니다. 새로운 서비스를 추가하거나 기존 서비스를 확장하는 것이 더 쉬워집니다.
  4. 유연성과 유지보수성: 서비스 간 결합도가 낮기 때문에 시스템의 유연성과 유지보수성이 향상됩니다. 한 서비스의 변경이 다른 서비스에 미치는 영향이 줄어들며, 이로 인해 유지보수와 업데이트가 용이해집니다.
  5. 복원력: 이벤트 기반 시스템은 서비스 장애가 전체 시스템에 미치는 영향을 최소화합니다. 하나의 서비스에 문제가 발생해도 다른 서비스는 계속 정상적으로 작동할 수 있습니다.
  6. 복잡성의 증가: 비록 여러 장점이 있지만, 이벤트 기반 시스템은 디버깅과 모니터링이 더 복잡해질 수 있습니다. 이벤트 흐름을 추적하고 관리하는 것이 전통적인 요청/응답 기반 시스템보다 어려울 수 있습니다.
  7. 이벤트 추적: 이벤트의 생성, 전달, 처리를 추적하는 것이 중요합니다. 이를 위해 고급 모니터링 및 로깅 시스템이 필요할 수 있습니다.

[ChatGPT-4.0]

메시지 큐(Message Queue)

  • 컴퓨터 네트워크에서 메시지(데이터, 정보)를 전송하는 데 사용되는 통신 방법입니다. 이 방식은 송신자(sender)가 수신자(receiver)에게 메시지를 비동기적으로 전달할 수 있게 해주며, 메시지는 순차적으로 큐(queue)에 저장되고, 수신자는 준비가 될 때까지 메시지를 큐에서 꺼내어 처리합니다.
  • 메시지 큐의 주요 특징과 이점은 다음과 같습니다.
  1. 비동기 통신: 메시지 큐는 송신자와 수신자 간의 비동기 통신을 가능하게 합니다. 이는 송신자가 메시지를 전송한 후에도 다른 작업을 계속할 수 있음을 의미합니다.
  2. 탈중앙화된 처리: 메시지 큐는 시스템 간의 결합도를 낮춥니다. 한 시스템의 구성 요소가 실패해도 다른 시스템에는 영향을 미치지 않으며, 각 시스템은 독립적으로 작동할 수 있습니다.
  3. 신뢰성 있는 메시지 전달: 많은 메시지 큐 시스템들은 메시지가 안전하게 전달되고 처리될 수 있도록 보장합니다. 만약 수신자가 메시지를 제대로 처리하지 못하면, 그 메시지는 다시 큐에 들어가거나 에러 처리가 됩니다.
  4. 부하 분산: 메시지 큐는 작업 부하를 여러 프로세스나 서버에 분산시킬 수 있게 해주어 시스템의 확장성과 병렬 처리 능력을 향상시킵니다.
  5. 순서 보장: 일부 메시지 큐 시스템은 메시지가 전송된 순서대로 처리될 것을 보장합니다.
  6. 통합과 유연성: 다양한 시스템 또는 애플리케이션 간의 통합을 용이하게 하며, 새로운 시스템 또는 서비스를 추가하는 것이 상대적으로 쉽습니다.

[ChatGPT-4.0]

애그리거트(Aggregate)

  • 주로 도메인 주도 설계(Domain-Driven Design, DDD)의 컨텍스트에서 사용되는 용어로, 관련된 객체들을 하나의 단위로 묶은 것을 말합니다. 애그리거트는 도메인 모델에서 일련의 연관된 객체들을 캡슐화하여, 복잡한 도메인 로직을 관리하는 데 도움을 줍니다.
  • 애그리거트의 주요 개념과 특징은 다음과 같습니다.
  1. 루트 엔티티: 애그리거트에는 “루트 엔티티(Aggregate Root)”가 있으며, 이는 애그리거트의 진입점입니다. 루트 엔티티는 애그리거트의 모든 객체에 대한 접근을 제어하며, 애그리거트의 다른 객체들은 외부에서 직접 접근할 수 없고 루트 엔티티를 통해서만 접근됩니다.
  2. 경계: 애그리거트는 명확한 경계를 가지고 있으며, 이 경계 안의 객체들은 서로 긴밀하게 연관되어 있습니다. 경계 밖의 객체들과는 느슨한 결합을 유지합니다.
  3. 일관성 유지: 애그리거트는 내부의 일관성과 무결성을 유지하는 데 중점을 둡니다. 이를 위해 트랜잭션 관리, 도메인 규칙 검증 등이 루트 엔티티 내에서 수행됩니다.
  4. 데이터 무결성: 애그리거트는 데이터 무결성을 유지하기 위해 캡슐화와 정보 은닉을 사용합니다. 이는 도메인 로직의 복잡성을 줄이고, 오류 발생 가능성을 낮춥니다.

[ChatGPT-4.0]

CQRS(Command Query Responsibility Segregation, 커맨드 쿼리 책임 분리)

  • 소프트웨어 아키텍처 패턴의 하나로, 데이터를 수정하는 작업(커맨드)과 데이터를 조회하는 작업(쿼리)의 책임을 명확하게 분리하는 것을 의미합니다. 이 아키텍처 패턴은 복잡한 시스템에서 데이터의 읽기와 쓰기 작업을 더 효율적으로 관리하기 위해 사용됩니다.
  • CQRS의 주요 특징과 이점은 다음과 같습니다.
  1. 책임의 분리: CQRS는 읽기(쿼리)와 쓰기(커맨드) 로직을 분리함으로써 각각에 최적화된 처리를 가능하게 합니다. 이는 아키텍처의 복잡성을 줄이고, 각 부분의 유지보수를 용이하게 합니다.
  2. 스케일 아웃의 용이성: 읽기와 쓰기 작업이 분리되어 있기 때문에, 시스템의 부하에 따라 읽기 또는 쓰기 부분을 독립적으로 확장(스케일 아웃)할 수 있습니다.
  3. 성능 최적화: 읽기와 쓰기 작업에 대해 다른 데이터 모델을 사용할 수 있어, 각각의 작업에 최적화된 성능을 달성할 수 있습니다.
  4. 복잡도 관리: 복잡한 비즈니스 로직이나 대규모 트랜잭션을 처리하는 시스템에서, CQRS는 시스템의 복잡도를 줄이는 데 도움을 줄 수 있습니다.
  5. 보안과 안정성 향상: 읽기와 쓰기 작업의 분리는 보안 측면에서도 이점을 제공합니다. 예를 들어, 민감한 데이터에 대한 쓰기 작업을 보다 엄격하게 제어할 수 있습니다.
  • CQRS를 사용할 때는 몇 가지 고려사항도 있습니다. 이 패턴은 시스템의 복잡성을 증가시킬 수 있으며, 일관성 유지에 대한 추가적인 고려가 필요할 수 있습니다. 예를 들어, 읽기 모델과 쓰기 모델 간의 데이터 동기화를 관리해야 합니다. 따라서 CQRS는 모든 유형의 시스템에 적합한 것은 아니며, 시스템의 요구사항과 복잡성, 성능 요구사항을 고려하여 적절하게 적용해야 합니다.

[ChatGPT-4.0]

샤딩(Sharding)

  • 데이터베이스를 수평으로 분할하여 여러 서버에 데이터를 분산 저장하는 방법입니다. 각 샤드는 데이터베이스의 일부를 담당하며, 이러한 분할은 데이터베이스의 부하를 분산시켜 성능을 향상시키고, 시스템의 확장성을 증가시킵니다.

  • 수평 분할: 샤딩은 데이터를 수평으로 분할합니다. 이는 각 샤드가 데이터베이스의 전체 구조를 가지고 있지만, 데이터의 일부분만을 저장한다는 것을 의미합니다.
  • 부하 분산: 여러 샤드에 데이터를 분산함으로써, 단일 데이터베이스 서버에 집중되는 부하를 줄일 수 있습니다.
  • 확장성: 새로운 샤드를 추가함으로써 시스템을 쉽게 확장할 수 있습니다.
  • 고성능: 데이터베이스 쿼리는 분산된 샤드에서 병렬로 처리될 수 있으므로, 응답 시간이 단축되고 처리량이 증가합니다.

[ChatGPT-4.0]

샤드 클러스터(Shard Cluster)

  • 샤딩된 데이터베이스 시스템에서 여러 샤드를 관리하는 구조입니다. 샤드 클러스터는 일반적으로 여러 개의 샤드, 쿼리 라우터, 그리고 설정 서버로 구성됩니다.

  • 샤드: 각 샤드는 분할된 데이터베이스의 일부를 저장합니다. 이 샤드들은 각각 독립적인 서버에 위치할 수 있습니다.
  • 쿼리 라우터: 쿼리 라우터는 클라이언트로부터 받은 쿼리를 적절한 샤드로 전달하는 역할을 합니다. 이는 클라이언트가 어떤 샤드에 접근해야 하는지 알 필요가 없게 해줍니다.
  • 설정 서버: 설정 서버는 샤드 클러스터의 전체 구조와 각 샤드에 어떤 데이터가 저장되어 있는지에 대한 메타데이터를 관리합니다.

[ChatGPT-4.0]

샤딩과 샤드 클러스터 적용 고려사항

  • 데이터 분산 전략: 샤딩을 구현할 때는 데이터를 어떻게 분산시킬지에 대한 전략이 중요합니다. 잘못된 샤딩 전략은 데이터 불균형을 초래하고 성능 저하를 일으킬 수 있습니다.
  • 복잡성 증가: 샤딩은 시스템의 복잡성을 증가시킵니다. 데이터의 일관성, 백업, 복구 등이 더 복잡해질 수 있습니다.
  • 대규모 시스템에서 유용: 샤딩과 샤드 클러스터는 대용량의 데이터와 높은 트래픽을 처리해야 하는 대규모 시스템에서 특히 유용합니다.

[ChatGPT-4.0]

스케일 아웃(Scale Out)

  • 컴퓨터 시스템의 성능을 향상시키기 위한 방법 중 하나로, 추가적인 노드(예: 서버, 인스턴스)를 시스템에 추가하여 처리 능력을 확장하는 방식을 의미합니다. 이는 시스템의 병렬 처리 능력을 증가시켜 전체적인 처리량을 향상시키는 데 초점을 맞춥니다.

  • 스케일 아웃의 주요 특징과 이점은 다음과 같습니다.

  1. 부하 분산: 스케일 아웃을 통해 시스템의 부하를 여러 노드에 분산시켜, 단일 노드에 집중되는 부하를 줄일 수 있습니다.
  2. 확장성: 시스템이 추가적인 부하를 처리해야 할 때, 새로운 노드를 추가하기만 하면 되므로, 시스템의 확장성이 용이합니다.
  3. 고가용성: 여러 노드로 구성된 시스템은 단일 장애점(Single Point of Failure)을 감소시킵니다. 한 노드에 문제가 발생해도 시스템 전체가 다운되지 않으며, 높은 가용성을 제공합니다.
  4. 비용 효율성: 필요에 따라 자원을 점진적으로 추가할 수 있어, 초기 투자 비용을 낮출 수 있습니다.
  5. 유연성: 클라우드 컴퓨팅 환경에서 스케일 아웃은 특히 유용하며, 자원을 빠르고 유연하게 추가하거나 제거할 수 있습니다.
  • 스케일 아웃과 대비되는 개념은 스케일 업(Scale Up)입니다. 스케일 업은 기존의 노드(예: 서버)의 성능을 강화하는 것을 의미합니다(예: CPU, RAM 업그레이드). 반면, 스케일 아웃은 시스템에 노드를 추가하는 것입니다.
    • 스케일 업: 단일 노드의 성능 향상, 비용이 높을 수 있음, 확장성의 한계 존재
    • 스케일 아웃: 여러 노드에 부하 분산, 비용 효율적, 높은 확장성 및 유연성 제공
  • 스케일 아웃은 웹 서버, 데이터베이스 서버, 파일 서버와 같이 병렬 처리가 가능하고, 노드 추가를 통해 성능이 향상될 수 있는 시스템에 주로 적용됩니다. 대규모 트래픽을 처리해야 하는 웹 애플리케이션, 대용량 데이터를 다루는 빅데이터 처리 시스템, 분산 컴퓨팅 환경 등에서 스케일 아웃 방식이 널리 사용됩니다.

[ChatGPT-4.0]

참고

  • ChatGPT-4.0

보완/복습

  • 2024.01.11 생성