이 README는 서버 간에 대량의 데이터를 스트리밍하는 방법과 스트리밍된 데이터를 실시간으로 처리하는 방법을 보여주는 Node.js 예제에 대한 개요를 제공합니다. 이 예제는 클라이언트, 서버 A (데이터 전송 서버), 서버 B (데이터 수신 서버), 그리고 서버 C (데이터 수신 서버2)의 네 가지 주요 구성 요소로 구성됩니다.
- A 서버를 먼저 실행하여 포트 8000에서 대기하게 합니다.
- B 서버 또는 C 서버를 실행하여 포트 9000에서 대기하게 합니다.
- client.js 사용하여 송신 서버(8000 포트)에 연결하고, 송신 서버가 자동으로 수신 서버(9000 포트)로 데이터를 전송하도록 합니다.
이 예제는 클라이언트가 서버 A에 대량의 데이터를 요청하는 시나리오를 시뮬레이션합니다. 요청을 받은 서버 A는 대량의 더미 데이터를 생성하고 이 데이터를 서버 B/C로 스트리밍합니다. 서버 B는 데이터 청크가 도착하는 대로, 전체 데이터 세트를 저장하지 않고 처리하는 버전이고, 서버 C는 전체 데이터 스트림을 수신하여 처리하기 전에 저장하는 버전입니다.
- 기능: 서버 A는 요청을 받을 때 대량의 데이터를 생성하고 전송하는 데이터 제공자 역할을 합니다.
- 데이터 생성: 객체의 리스트로 구성된 대량의 더미 데이터를 생성합니다. 각 객체는 ID, 이름, 설명을 포함합니다.
- 스트리밍: 생성된 데이터 세트를 JSON 문자열로 변환하여 TCP 연결을 통해 서버 B로 스트리밍합니다.
- 연결 처리: 클라이언트로부터 데이터 요청을 받으면 서버 A는 서버 B/C에 연결을 설정하고 생성된 데이터를 스트리밍합니다.
- 실시간 처리: 서버 B는 도착하는 대로 데이터 청크를 처리하며, 전체 데이터 세트를 기다리지 않고 처리를 시작합니다.
- 효율성: 이 방식은 메모리 사용량을 더 효율적으로 하고 처리 속도를 높일 수 있습니다. 왜냐하면 대량의 데이터 세트를 메모리에 저장할 필요가 없기 때문입니다.
- 사용 사례: 수신된 데이터의 즉각적인 처리가 필요하거나 전체를 저장할 필요 없이 스트리밍 데이터를 다룰 때 이상적입니다.
- 데이터 수신: 서버 C가 들어오는 모든 데이터 청크를 버퍼에 수집하는 방식으로 설계되었습니다.
- 처리: 전체 데이터 스트림을 수신한 후, 서버 C는 버퍼에 저장된 데이터를 다시 JSON 객체로 변환하여 처리합니다.
- 제한 사항: 이 접근 방식은 서버 C가 처리를 시작하기 전에 모든 데이터를 받고 저장해야 하므로, 대량의 데이터셋을 다룰 때 비효율적일 수 있습니다.
- 역할: 클라이언트는 서버 A에 데이터를 요청함으로써 데이터 전송 프로세스를 시작합니다.
- 상호 작용: 외부 엔티티가 서버 간에 대량의 데이터셋을 스트리밍하고 처리하도록 트리거하는 방법을 보여줍니다.