[]
        
(Showing Draft Content)

Server 초기화

@mescius/js-collaborationServer 클래스는 실시간 협업을 위한 서버 측 엔드포인트를 초기화합니다.

이 페이지에서는 Server 인스턴스를 생성하고 구성하는 방법을 설명합니다.

설치

서버 패키지를 설치합니다.

npm install @mescius/js-collaboration

독립 실행 모드로 시작

가장 간단한 서버 시작 방법은 port를 지정하는 것입니다.

import { Server } from '@mescius/js-collaboration';

const server = new Server({ port: 8080 });

server.on('connect', (context) => {
  // 클라이언트 연결 처리
});

협업 서비스가 독립적으로 실행되는 경우 이 모드를 사용합니다.

기존 HTTP 서버에 연결

애플리케이션에서 이미 Node.js 서버(예: Express)를 사용하고 있다면 협업 서버를 해당 서버에 연결할 수 있습니다.


지원되는 서버 유형:

  • http.Server

  • https.Server

  • http2.Http2Server

  • http2.Http2SecureServer

import express from "express";
import { createServer } from "http";
import { Server } from "@mescius/js-collaboration";

const app = express();
const httpServer = createServer(app);

const server = new Server({ httpServer });

app.use(express.static("public"));

server.on("connect", (context) => {
  // 협업 로직
});

httpServer.listen(8080);

다음과 같은 경우 이 모드를 사용합니다.

  • REST API와 동일한 서버를 공유하는 경우

  • 기존 미들웨어를 사용하는 경우

  • 통합 백엔드 서비스로 배포하는 경우

엔드포인트 경로 구성

기본적으로 협업 엔드포인트는 다음 경로를 사용합니다.


/collaboration/

서버와 클라이언트 구성은 반드시 동일한 path를 사용해야 합니다.

서버

const server = new Server({
  port: 8080,
  path: "/my-custom-path/"
});

클라이언트

import { Client } from "@mescius/js-collaboration-client";

const client = new Client("ws://server-domain.com:8000", {
  path: "/my-custom-path/"
});

고급 구성

Server 생성자는 port, httpServer, path 외에도 IServerConfig를 통해 다양한 고급 구성 옵션을 지원합니다.


이 옵션을 사용하면 다음 작업을 수행할 수 있습니다.

  • CORS(교차 출처 접근) 구성

  • 핸드셰이크 또는 업그레이드 요청 검증

  • 최대 페이로드 크기 제어

  • 분산 배포 환경을 위한 Socket.IO 어댑터 사용자 지정

다음 예제는 여러 고급 옵션을 운영 환경과 유사한 구성으로 결합한 예시입니다. 환경에 맞게 값을 변경하여 사용하세요.

import { Server } from '@mescius/js-collaboration';
import { createClient } from 'redis';
import { createAdapter } from '@socket.io/redis-adapter';

const pubClient = createClient({ url: 'redis://localhost:6379' });
const subClient = pubClient.duplicate();

await Promise.all([pubClient.connect(), subClient.connect()]);

const server = new Server({
  port: 8080,

  // 사용자 지정 엔드포인트
  path: "/collaboration/",

  // 다중 노드 브로드캐스팅 활성화
  socketIoAdapter: createAdapter(pubClient, subClient),

  // CORS 구성
  cors: {
    origin: ["https://app.example.com"]
  },

  // 핸드셰이크 요청 제한
  allowRequest: (req, callback) => {
    const origin = req.headers.origin;
    callback(null, !!origin);
  },

  // 페이로드 크기 제한
  maxHttpBufferSize: 1024 * 1024 * 1024,
  maxDecompressedMessageSize: 1024 * 1024 * 1024,
});

여러 서버 인스턴스로 배포

다중 노드 환경(예: 로드 밸런서 뒤에서 실행되는 환경)에서는 인스턴스 간 메시지를 동기화하기 위해 사용자 지정 어댑터를 구성해야 합니다.


참고:

API 참조

전체 구성 옵션은 다음 문서를 참조하세요.

다음 단계

서버를 초기화한 후에는 Server 클래스의 메서드를 사용하여 연결 및 메시지 처리를 위한 훅(hook)과 미들웨어를 등록할 수 있습니다. 자세한 내용은 Server 클래스미들웨어를 참조하세요.