마이크로서비스(2)

CHLEE·2023년 5월 9일
0

DevOps

목록 보기
16/24
post-custom-banner
  • 메시지 서비스로는 대표적으로 Apache Kafka와 Amazon SQS, Amazon Kinesis가 있습니다. 각각은 어떤 차이가 있나요?


    Apache Kafka, Amazon SQS 및 Amazon Kinesis는 모두 대규모 분산 메시징 시스템입니다. 각각의 서비스는 데이터를 안정적으로 처리하고 전송하는 데 사용됩니다. 그러나 각각의 서비스는 약간의 차이가 있습니다.

    Apache Kafka는 분산 스트리밍 플랫폼으로, 실시간 데이터 피드 처리에 사용됩니다. 이것은 대규모 데이터 스트림을 처리하고, 비동기식 데이터 처리와 메시지 큐잉에 적합합니다. 또한 Apache Kafka는 일회성 메시징 및 큐 처리 시스템보다 더 높은 처리량을 가지고 있습니다.

    Amazon SQS는 AWS에서 호스팅되는 완전 관리형 서비스로, 표준 메시징 대기열을 지원합니다. Amazon SQS는 이벤트 드리븐 아키텍처를 사용하며, 처리량이 높은 애플리케이션에 이상적입니다. 또한 무한한 수의 메시지를 지원하며, 고 가용성 및 확장성을 보장합니다.

    Amazon Kinesis는 AWS에서 호스팅되는 데이터 스트리밍 플랫폼입니다. Amazon Kinesis는 대규모 데이터 스트림을 처리하고, 데이터를 실시간으로 분석하고 처리할 수 있습니다. Amazon Kinesis는 이벤트 기반 아키텍처를 사용하며, 대규모 데이터 스트림 처리 및 실시간 분석에 적합합니다.

    따라서, 이 세 가지 서비스는 서로 비슷한 기능을 제공하지만, 각각은 특정 상황에 더 적합합니다. Apache Kafka는 대규모 데이터 스트림 처리에 적합하며, Amazon SQS는 고성능 대기열 시스템으로, Amazon Kinesis는 대규모 데이터 스트림 처리 및 분석에 적합합니다.

  • 웹 서비스에서 메시지 브로커(메시지 큐)를 이용해 비동기적인 방법이 활용되는 사례를 하나 이상 찾아보고, 어떻게 활용되는지 설명하세요.


    웹 서비스에서 메시지 브로커를 이용해 비동기적인 방법이 활용되는 사례는 다양합니다. 이 중에서 가장 일반적인 예로는 이메일 전송 시스템이 있습니다.

    일반적으로 웹 서비스에서 이메일을 보내기 위해서는 사용자의 요청에 대한 즉각적인 응답이 필요합니다. 그러나 이메일 전송은 일반적으로 시간이 오래 걸리는 작업으로, 이 작업이 끝날 때까지 웹 서비스의 응답을 차단하는 것은 효율적이지 않습니다.

    이러한 문제를 해결하기 위해 비동기 방식으로 작업을 처리하는 것이 유용합니다. 이 경우, 웹 서비스는 메시지 브로커를 통해 이메일 전송 작업을 요청하고, 즉시 응답합니다. 메시지 브로커는 이 요청을 대기열에 추가하고, 이메일 전송 작업이 완료될 때까지 대기합니다. 작업이 완료되면, 메시지 브로커는 결과를 다시 웹 서비스에게 전송합니다.

    이 방법을 사용하면, 웹 서비스는 사용자의 요청에 대한 즉각적인 응답을 보내고, 메시지 브로커를 통해 이메일 전송 작업을 비동기적으로 처리할 수 있습니다. 이를 통해 웹 서비스의 처리량을 향상시키고, 사용자 경험을 개선할 수 있습니다.

    또 다른 예로는 주문 처리 시스템이 있습니다. 주문 처리 시스템은 주문을 받은 후, 결제 처리 및 상품 발송 등의 작업을 수행해야 합니다. 이러한 작업은 시간이 오래 걸리는 작업이므로, 비동기 방식으로 처리하는 것이 효율적입니다. 주문 정보는 메시지 브로커를 통해 대기열에 추가되고, 각 작업이 완료될 때마다 메시지 브로커를 통해 다음 단계로 이동합니다. 이를 통해 주문 처리 시스템의 처리량을 향상시키고, 사용자 경험을 개선할 수 있습니다.

  • JSON 이전에 주로 사용하던 데이터 교환 포맷으로는 XML이 있습니다. JSON이 XML 보다 유리한 점이 무엇인가요?


    JSON과 XML은 모두 데이터 교환에 많이 사용되는 포맷입니다. 하지만 JSON이 XML보다 유리한 점이 몇 가지 있습니다.

    1. 가독성: JSON은 XML보다 더 간단하고 읽기 쉬운 구문을 가지고 있습니다. JSON은 중괄호와 대괄호를 사용하여 데이터를 구분하므로, 데이터를 쉽게 파악할 수 있습니다. 반면에 XML은 태그를 사용하여 데이터를 구분하므로, 데이터를 파악하기 어려울 수 있습니다.

    2. 크기: JSON은 XML보다 더 적은 용량을 가지고 있습니다. JSON은 데이터를 표현하는 데 필요한 문자 수가 적기 때문에, 네트워크 대역폭을 절약할 수 있습니다.

    3. 파싱 속도: JSON은 XML보다 더 빠르게 파싱됩니다. JSON은 자바스크립트에서 사용하는 구문을 사용하므로, 자바스크립트 엔진에서 파싱이 더 빠르게 처리됩니다.

    4. 프로그래밍 언어 지원: JSON은 대부분의 프로그래밍 언어에서 지원됩니다. JSON은 자바스크립트에서 사용하는 구문을 기반으로 하므로, 자바스크립트를 비롯한 다른 프로그래밍 언어에서도 쉽게 사용할 수 있습니다. 반면에 XML은 다양한 구문을 지원하기 때문에, 언어에 따라 지원되는 기능이 다를 수 있습니다.

      따라서, JSON은 가독성이 좋고 용량이 작으며 파싱 속도가 빠르며 다양한 프로그래밍 언어에서 지원되기 때문에, XML보다 데이터 교환에 더 유리한 포맷입니다.

  • JSON 포맷은 텍스트 형식으로, VS Code와 같은 텍스트 에디터에서 읽을 수 있습니다. 반면 텍스트 에디터로 읽을 수 없는 바이너리(이진) 형식의 데이터 교환 포맷(예를 들어 protobuf)도 있습니다. 텍스트 형식의 데이터 교환 포맷과 이진 형식의 데이터 교환 포맷의 차이점과 장단점은 무엇인가요?


    텍스트 형식의 데이터 교환 포맷과 이진 형식의 데이터 교환 포맷은 각각 장단점이 있습니다.

    1. 텍스트 형식의 데이터 교환 포맷
      장점:
    • 사람이 읽을 수 있는 형식으로 구성되어 있어, 가독성이 뛰어나며 디버깅이 용이합니다.

    • 텍스트 파일이므로, 개발자가 손쉽게 편집하고 수정할 수 있습니다.

    • 대부분의 프로그래밍 언어에서 지원하므로, 다양한 플랫폼에서 사용이 가능합니다.

      단점:

    • 용량이 크고 전송 속도가 느립니다.

    • 파싱이나 직렬화 과정에서 데이터 유효성 검사가 필요하며, 오류 발생 시 데이터 손실이 발생할 수 있습니다.

    1. 이진 형식의 데이터 교환 포맷
      장점:
    • 용량이 작고 전송 속도가 빠릅니다.

    • 파싱이나 직렬화 과정에서 데이터 유효성 검사가 필요 없습니다.

    • 데이터 유형을 정확하게 지정할 수 있어, 전송 데이터의 크기를 최소화할 수 있습니다.

      단점:

    • 사람이 읽을 수 없는 형식으로 구성되어 있기 때문에, 디버깅이 어렵습니다.

    • 데이터를 수정하려면 전용 툴을 사용해야 하므로, 개발자가 직접 수정하는 것이 어렵습니다.

    • 프로그래밍 언어나 플랫폼마다 이진 형식이 다를 수 있으므로, 호환성 문제가 발생할 수 있습니다.

      따라서, 텍스트 형식의 데이터 교환 포맷은 가독성이 좋고 편집이 용이하며 다양한 플랫폼에서 지원되지만 용량이 크고 전송 속도가 느립니다. 이진 형식의 데이터 교환 포맷은 용량이 작고 전송 속도가 빠르며 데이터 유형을 정확하게 지정할 수 있지만, 디버깅이 어렵고 호환성 문제가 발생할 수 있습니다. 데이터 교환의 목적과 환경에 맞게 적절한 포맷을 선택해야 합니다.

  • 메시지 브로커의 두 가지 방식인 Queue 방식과 Topic 방식은 어떤 차이가 있나요?


    메시지 브로커에서 Queue 방식과 Topic 방식은 메시지를 송수신하는 방식에 차이가 있습니다.

    1. Queue 방식
    • 메시지를 큐(Queue)에 저장하여 하나의 메시지를 하나의 수신자가 처리하도록 구성된 방식입니다.
    • 메시지를 보낼 때는 큐 이름을 명시하고, 해당 큐를 구독하는 수신자가 메시지를 처리합니다.
    • 메시지를 처리한 수신자는 해당 메시지를 큐에서 삭제합니다.
    • 대표적인 Queue 방식 메시지 브로커로는 RabbitMQ, ActiveMQ 등이 있습니다.
    1. Topic 방식
    • 메시지를 토픽(Topic)이라는 주제에 맞게 발행(Publish)하고, 이에 대해 관심이 있는 수신자가 해당 토픽을 구독(Subscribe)하는 방식입니다.

    • 토픽은 메시지를 발행할 때 지정되며, 여러 수신자가 하나의 토픽을 구독할 수 있습니다.

    • 메시지를 처리한 수신자는 해당 메시지를 토픽에서 삭제하지 않습니다.

    • 대표적인 Topic 방식 메시지 브로커로는 Apache Kafka, Amazon SNS 등이 있습니다.

      두 방식의 차이점은 메시지를 처리하는 방식에 있습니다. Queue 방식은 하나의 메시지를 하나의 수신자만 처리하도록 구성되어 있기 때문에, 각 수신자는 자신에게 할당된 메시지만 처리하게 됩니다. 따라서, 분산 환경에서 일관된 처리를 보장할 수 있습니다. 반면에, Topic 방식은 하나의 메시지를 여러 수신자가 동시에 처리할 수 있습니다. 이 방식은 메시지를 여러 수신자에게 브로드캐스트하는 용도로 사용될 수 있습니다. 이러한 특성 때문에, Kafka와 같은 Topic 방식 메시지 브로커는 대규모 분산 시스템에서 많이 사용됩니다.

  • 동기와 비동기 방식의 차이점은 무엇인가요?


    동기(synchronous)와 비동기(asynchronous)는 컴퓨터 프로그래밍에서 자주 사용되는 용어입니다. 두 용어는 프로그램이 작업을 처리하는 방식에 대한 차이를 나타냅니다.

    동기적인 방식은 작업을 순차적으로 처리합니다. 즉, 한 작업이 끝나기 전까지 다음 작업을 실행하지 않습니다. 이 방식은 프로그램이 간단하고 직관적일 때는 유용하지만, 작업이 오래 걸리는 경우 전체 시스템이 느려지거나 멈출 수 있습니다.

    반면에 비동기적인 방식은 작업을 순차적으로 처리하지 않습니다. 즉, 한 작업이 끝나기를 기다리지 않고 다음 작업을 실행합니다. 작업이 실행되는 동안 시스템은 다른 작업을 처리할 수 있으며, 작업이 완료되면 결과를 반환합니다. 이 방식은 시스템의 처리량을 높일 수 있으며, 작업이 오래 걸리는 경우에도 전체 시스템이 멈추지 않습니다.

    예를 들어, 웹 페이지를 로딩하는 경우를 생각해보면, 동기적 방식에서는 페이지의 모든 내용이 로딩될 때까지 기다려야 합니다. 반면에 비동기적 방식에서는 페이지의 일부 내용이 로딩되면 다른 내용을 로딩하고, 로딩이 완료되면 화면에 표시할 수 있습니다. 이러한 방식은 사용자 경험을 향상시키며, 전체 시스템의 성능을 향상시킵니다.

    따라서, 동기적 방식은 작업의 순서를 중요하게 여기는 경우에 사용하고, 비동기적 방식은 작업의 결과를 기다리지 않아도 되는 경우에 사용합니다.

  • CQRS란 무엇인가요?


    CQRS는 Command Query Responsibility Segregation의 약자로, '명령과 조회의 책임 분리'라는 의미를 가지고 있습니다. CQRS는 분산 시스템에서 동시성과 확장성 문제를 해결하기 위한 아키텍처 패턴 중 하나입니다.

    CQRS는 전통적인 CRUD(Create, Read, Update, Delete) 기반의 아키텍처 패턴과는 달리, 명령(Command)과 조회(Query)를 분리하여 각각 다른 모델로 처리합니다. 이러한 방식으로 인해 시스템의 복잡도를 낮출 수 있습니다.

    CQRS 패턴에서는 명령(Command)과 조회(Query)를 처리하기 위한 서로 다른 모델을 사용합니다. 명령 모델은 데이터를 생성하고 갱신하는 작업에 집중하며, 조회 모델은 데이터를 읽는 작업에 집중합니다. 이를 통해 시스템의 기능을 명확하게 구분하여 개발할 수 있습니다.

    또한, CQRS 패턴에서는 분산 시스템에서 발생할 수 있는 동시성 문제를 해결하기 위해 이벤트 소싱(Event Sourcing)이라는 패턴을 사용할 수 있습니다. 이벤트 소싱은 시스템에서 발생하는 모든 이벤트를 저장하고, 이를 기반으로 시스템의 상태를 복원하는 방식입니다.

    CQRS 패턴은 시스템의 확장성과 성능을 향상시키는 데 유용한 아키텍처 패턴입니다. 하지만, 구현이 복잡하고 추가적인 비용이 들어가기 때문에, 단순한 시스템에서는 사용하지 않는 것이 좋습니다.

profile
🤗
post-custom-banner

0개의 댓글