[c] 분산 시스템 프로토콜

분산 시스템은 여러 컴퓨터들이 네트워크로 연결돼 동시에 동작하는 시스템을 말합니다. 이러한 분산 시스템들은 효율적인 통신과 조정을 위해 특정한 프로토콜을 사용합니다. 이번 포스트에서는 분산 시스템에서 사용되는 주요 프로토콜 몇 가지를 살펴보겠습니다.

목차

  1. RPC
  2. REST
  3. gRPC
  4. Apache Kafka

RPC

RPC는 Remote Procedure Call의 약자로, 분산 환경에서 프로시저 호출을 가능하게 하는 프로토콜입니다. 클라이언트가 서버에 있는 원격 객체의 메서드를 마치 로컬에서 호출하는 것처럼 사용할 수 있도록 하는 기술입니다.

예제 코드:

import xmlrpc.client
proxy = xmlrpc.client.ServerProxy("http://www.example.com/RPC2")
print(proxy.add(2, 3))

자세한 내용은 여기에서 확인할 수 있습니다.

REST

REST(Representational State Transfer)는 HTTP 프로토콜을 기반으로 한 아키텍처 스타일 중 하나로, 분산 시스템 간의 상호 작용을 위한 프로토콜입니다. 간단하고 통합성이 좋으며 자원을 정의하고 자원에 대한 상태를 주고 받는 것에 중점을 둡니다.

예제 코드:

// GET request using fetch
fetch('https://api.example.com/data')
  .then(response => response.json())
  .then(data => console.log(data));

REST의 자세한 내용은 여기에서 확인할 수 있습니다.

gRPC

gRPC는 Google에서 개발한 오픈 소스 RPC(Remote Procedure Call) 프레임워크로, 프로토콜 버퍼(Protocol Buffers)를 사용하여 효율적인 통신을 제공합니다. HTTP/2 기반의 프로토콜을 사용하며, 다양한 언어로 지원됩니다.

예제 코드:

syntax = "proto3";

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloResponse);
}

message HelloRequest {
  string name = 1;
}

message HelloResponse {
  string message = 1;
}

gRPC에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

Apache Kafka

Apache Kafka는 분산 스트리밍 플랫폼으로, 대용량의 데이터 스트림을 실시간으로 처리하기 위한 프로토콜입니다. 이벤트 기반 아키텍처를 구현하고, 높은 처리량과 낮은 지연 시간을 제공합니다.

Kafka에서 메시지(이벤트)를 송수신하는 예제 코드:

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
Producer<String, String> producer = new KafkaProducer<>(props);
producer.send(new ProducerRecord<String, String>("my-topic", "key", "value"));

Apache Kafka에 대한 자세한 내용은 여기에서 확인할 수 있습니다.