블로그 게시물 NGINX를 WebSocket 프록시로 사용하는 방법 에서는 NGINX를 사용하여 WebSocket 애플리케이션 서버를 프록시하는 방법에 대해 설명했습니다. 이 게시물에서는 WebSocket을 사용하여 실시간 애플리케이션을 만들 때 고려해야 할 아키텍처 및 인프라 문제 중 일부를 논의합니다. 여기에는 필요한 구성 요소와 시스템을 구성하는 방법이 포함됩니다.
HTTP는 요청/응답 기반 웹 애플리케이션에 적합합니다. 이 경우 통신 흐름은 항상 클라이언트가 요청을 시작하고 백엔드 서버가 응답합니다. 클라이언트와 서버 간의 상호 작용이 더 많고 메시지 기반의 상호작용이 필요한 웹 애플리케이션에는 단순한 HTTP 이상의 것이 필요합니다. HTTP를 통한 풀 듀플렉스 통신을 시뮬레이션하려는 이전 시도는 복잡했고 많은 단점이 있었습니다. WebSocket 프로토콜은 WebSocket JavaScript 인터페이스와 함께 이러한 유형의 애플리케이션을 구축하는 훨씬 더 쉬운 방법을 제공하는 동시에 전송되는 데이터 양과 대기 시간을 줄여줍니다.
클라이언트와 서버 간에 풀 듀플렉스 소켓 연결을 생성하는 기능을 통해 푸시, 폴 또는 스트리밍 통신을 활용하는 실시간 이벤트 기반 웹 애플리케이션을 개발할 수 있습니다. WebSocket을 사용하면 연결이 설정된 후 클라이언트나 서버 중 하나가 통신을 시작할 수 있습니다. 이를 통해 온라인 게임, 채팅, 주식 추적, 스포츠 경기 결과의 실시간 보고 등 다양한 유형의 웹 애플리케이션이 가능해졌습니다.
WebSocket의 또 다른 사용 사례는 WebRTC 기반 애플리케이션을 개발하는 것입니다. WebRTC는 브라우저 간 통신을 하는 애플리케이션을 만드는 데 사용됩니다. 통신 설정을 위해 별도의 신호 채널이 필요하며, WebSocket은 이를 위해 사용하기 좋은 프로토콜입니다.
WebSocket 웹 애플리케이션에 필요한 최소 인프라는 WebSocket JavaScript 애플리케이션을 실행하고 WebSocket 서버와 통신하는 클라이언트 브라우저입니다. 최근 출시된 모든 주요 브라우저는 WebSocket을 지원하지만, 클라이언트가 WebSocket을 지원하는 브라우저를 사용하는지 확인하는 것이 중요합니다. WebSocket 서버에는 많은 옵션이 있으며 여기에는 다양한 환경에 대한 몇 가지 예가 나와 있습니다(이 목록은 편의를 위해 제공되며 NGINX, Inc.의 보증을 구성하지 않습니다).
노드.js | 루비 | |
와스 | 웹소켓 레일 | |
소켓.io | em-웹소켓 | |
삭스JS | 웹머신-루비 | |
펄 | 수코양이 | |
모조리셔스 | 웹소켓 사용법 | |
넷::웹소켓::서버 | ||
페소(PHP) | 웹로직 | |
래칫 휠 장치 | WebLogic Server에서 WebSocket 사용 | |
PHP-푸시-웹소켓 | ||
PHP-웹소켓 | ||
파이썬 | ||
웹소켓 | ||
다운로드 |
단일 WebSocket 서버를 사용하는 것은 가능하지만 애플리케이션 성능은 서버 용량에 의해 제한되며 이는 단일 장애 지점이기도 합니다. 많은 실시간 애플리케이션은 광범위한 채택을 목표로 개발되지만 성장률을 예측하는 것은 어려울 수 있습니다. 실시간 애플리케이션의 인기가 높아지면서 이를 지원하려면 인프라가 다음을 지원해야 합니다.
이는 NGINX를 WebSocket 서버와 HTTP 서버 앞에 배치하여(대부분 WebSocket 애플리케이션도 HTTP를 사용함) WebSocket 인식 역방향 프록시 및 부하 분산 장치 역할을 하도록 하면 가능합니다. 모든 역방향 프록시가 WebSocket을 직접 지원하는 것은 아닙니다. 예를 들어 Amazon Web Services(AWS) 환경의 ELB(Elastic Load Balancing)와 같은 일부는 TCP 모드에서 실행해야 하므로 HTTP 헤더를 처리할 수 없습니다. 프록시 프로토콜은 이런 한계를 해결하기 위해 개발되었으며 NGINX도 이를 지원합니다. 즉, AWS에서는 WebSocket이 완벽하게 지원됩니다. NGINX를 WebSocket 역방향 프록시로 사용하면 라우팅 유연성과 NGINX에서 SSL 연결을 종료할 수 있는 기능 등의 추가 이점이 있습니다.
NGINX를 사용하는 일반적인 WebSocket 구성은 다음과 같습니다.
여기서는 HTTP와 WebSocket 서버 세트의 부하를 분산하는 고가용성 NGINX 서버 쌍에 연결하는 다양한 데스크톱 및 모바일 클라이언트를 보여줍니다. 이러한 유형의 구성은 WebSocket 서버 또는 NGINX 서버의 장애를 견딜 수 있으며 WebSocket 서버를 쉽게 추가하거나 제거할 수 있습니다. 또한, WebSocket 서버에 연결하는 방법에 대한 모든 라우팅 세부 정보는 클라이언트에게 숨겨져 있어 견고하고 확장 가능한 WebSocket 애플리케이션 인프라를 구축할 수 있습니다. 실시간 웹 애플리케이션의 경우 웹 성능과 안정성이 매우 중요합니다. 오늘 저희에게 연락하세요 NGINX Plus가 애플리케이션의 성능, 안정성 및 가용성을 개선하는 데 어떻게 도움이 될 수 있는지 알아보세요.
자세한 내용은 다음을 참조하세요.
"이 블로그 게시물에는 더 이상 사용할 수 없거나 더 이상 지원되지 않는 제품이 참조될 수 있습니다. 사용 가능한 F5 NGINX 제품과 솔루션에 대한 최신 정보를 보려면 NGINX 제품군을 살펴보세요. NGINX는 이제 F5의 일부가 되었습니다. 이전의 모든 NGINX.com 링크는 F5.com의 유사한 NGINX 콘텐츠로 리디렉션됩니다."