Skip to content

[BE] Nginx 로드밸런싱을 통해 한국 투자 API 소켓 제한 극복

박진명 edited this page Dec 3, 2024 · 1 revision

문제 상황

한국 투자 API 가 하나의 앱키와 시크릿 키로 이루어진 단일 세션당 41개로 소켓 연결을 제한하는 정책으로 운영되고 있었습니다. 이에 다수 사용자가 접속할 시에 이미 41개의 소켓이 모두 사용중이라면 이후 사용자들은 정상적인 데이터가 보이지 않는 현상이 발생하였습니다.

해결 방안

여러 해결방안 중 하나로 Nginx 로드 밸런싱을 구현 해보기로 하였습니다.

  • 세션 지속성

    이번 프로젝트에서 web socket을 사용하는 부분이 많다 보니 다른 서버에 요청이 분산되면 오류가 발생하는 것을 확인하였습니다. 이에 로드 밸런싱 방식 중 ip_hash 방식을 채택하여 클라이언트 IP 기반 동일 서버 연결을 보장함으로서 WebSocket 연결 안정성을 확보하였습니다.

  • 업스트림 서버 구성

    upstream backend_servers {
        ip_hash;
        server juga-docker-be-1:3000 max_fails=3 fail_timeout=30s;
        server juga-docker-be-2:3000 max_fails=3 fail_timeout=30s;
        server juga-docker-be-3:3000 max_fails=3 fail_timeout=30s;
    }

    총 3대의 백엔드 서버를 운영하였고 서버당 41개 소켓 , 총 123개의 소켓을 확보하였습니다.

결과

하나의 서버만으로 백엔드를 구성할 경우 41개 이후의 소켓 연결을 시도하면 한국 투자 API에서 MAX SUBSCRIBE OVER 응답을 전송하는 것을 확인하였습니다.

이와 달리 3개의 백엔드 서버를 구성하고 요청을 분산해본 결과 요청이 적절하게 분산되어 100 명이 넘는 사용자의 요청에도 정상적으로 소켓 연결을 진행하는 것을 확인하였습니다.

image

📜 개발 일지

⚠️ 트러블 슈팅

❗ 규칙

🗒️ 기록

기획
회의록
데일리스크럼
그룹 멘토링
그룹 회고

😲 개별 멘토링

고동우
김진
서산
이시은
박진명
Clone this wiki locally