-
Notifications
You must be signed in to change notification settings - Fork 1
[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 명이 넘는 사용자의 요청에도 정상적으로 소켓 연결을 진행하는 것을 확인하였습니다.
- [FE] 프론트엔드 기술스택
- [FE] 라이브러리 없이 차트 구현 이유
- [FE] Canvas API 사용방법
- [FE] 네비게이션 바 애니메이션 구현
- [FE] Socket.io 사용방법
- [FE] Tanstack Router에 대하여...
- [FE] Intl(Internationalization) API
- [FE] React Suspense 적용
- [FE] 한글 입력 방식의 유연성을 높인 검색 시스템 구현하기
- [BE] 백엔드 기술 스택
- [BE] SSE vs Socket.io
- [BE] Redis를 도입하게 된 계기
- [BE] ACG Rule을 활용한 Secure CI CD 파이프라인 구현
- [BE] Nginx 로드밸런싱을 통해 한국 투자 API 소켓 제한 극복
- [BE] 주가 지수 기능 개발 과정
- [BE] 매수 및 매도 기능 개발 과정
- [BE] 실시간 자산 조회 기능 개발 과정
- [BE] 단위 테스트
- [BE] redis를 이용한 한국투자 Open API 세션 관리
- [BE] 데이터베이스 인덱싱
- [FE] React에서의 DOM 요소 접근 (useRef vs getElementById)
- [FE] Outlet을 활용한 공통 레이아웃 관리
- [FE] react hooks가 특정 조건에서 실행되면 안되는 이유 & useQuery에 query function 매개변수가 undefined일 수도 있을 때 어떻게 해결할까
- [FE] cross‐domain 로컬 환경에서 cookie로 인증 처리하기 with vite proxy
- [FE] 크롬&사파리 Composition 차이
- [FE] useEffect 의존성 배열
- [BE] Naver Cloud Platform HTTPS 무응답 현상
- [BE] 한국투자 Open API에서 access token을 발급받지 못하는 문제
- [BE] 한국투자 Open API와 웹소켓 연결이 되지 않던 문제
- [BE] 한국투자 Open API 웹소켓 연결이 중단되는 문제
- [BE] 같은 주식 주문이 동시에 여러 번 체결되는 문제
- [BE] 한국투자 Open API Websocket 세션을 두 개에서 한 개로 변경하기
- [BE] Nginx 로드 밸런싱 중 Socket bad Request 발생하는 현상
- [BE] 매수/매도 체결 로직에 의해 redis pub/sub이 정상적으로 동작하지 않는 문제