분산 시스템은 여러 컴퓨터들이 네트워크로 연결돼 동시에 동작하는 시스템을 말합니다. 이러한 분산 시스템들은 효율적인 통신과 조정을 위해 특정한 프로토콜을 사용합니다. 이번 포스트에서는 분산 시스템에서 사용되는 주요 프로토콜 몇 가지를 살펴보겠습니다.
목차
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에 대한 자세한 내용은 여기에서 확인할 수 있습니다.