본문 바로가기

패스트캠퍼스/50일의 기적 AI 환급반

패스트캠퍼스 환급챌린지 40일차 : 대규모 채팅 플랫폼으로 한 번에 끝내는 실전 대용량 트래픽 커버 완전판 강의 후기

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://fastcampus.info/4n8ztzq

 

 

안녕하세요 :)

오늘은 "50일의 기적 AI 환급반_ 대규모 채팅 플랫폼으로 한 번에 끝내는 실전 대용량 트래픽 커버 완전판 " 챌린지에 도전하는 마흔 번째 날입니다.

 

서른 아홉번째 날에는 Docker Compose를 사용한 로컬 Nginx LB 구성에 대해 배웠었는데요. 오늘은 과연 어떤 내용들을 배울 수 있을지 공부하고 포스팅 하도록 하겠습니다.

 

 

오늘 학습할 내용의 제목은,

Part 4. 서비스 부하 분산을 위한 분리 시작 >

Ch 4.책임 분리로 진행하는 모놀리틱 서비스 분해와 Nginx 연동 >

05. Nginx를 도입하여 인증 서비스에 고가용성과 확장성을 확보한다

입니다.

 


🚀 엔진엑스를 도입하여 인증 서비스에 고가용성과 확장성을 확보하기

  • 이번 포스팅에서는 채팅 프로젝트에 Nginx를 도입하여 인증 서비스의 고가용성과 확장성을 확보하는 과정을 다룹니다.
  • 이번 작업은 프로젝트 구조상 복잡한 변경 없이, 기존 예제를 기반으로 WebSocket 처리와 로드밸런싱 설정을 실제 서비스 환경에 적용하는 데 초점을 맞췄습니다.

 

🛠 작업 개요

  • 목표: 인증 서버와 메시지 서버의 접속 지점을 Nginx로 통합하여 클라이언트와 서버 간의 의존성을 최소화
  • 핵심 변경점
    1. docker-compose에 Nginx 서비스 추가
    2. WebSocket 전용 location과 업그레이드 설정 적용
    3. 클라이언트의 다중 엔드포인트 접속 로직을 단일 엔드포인트로 변경

 

📦 Nginx 설정 가져오기

  • 이전 예제 프로젝트에서 Nginx 관련 설정 파일(docker-compose.yml 내 서비스, conf 디렉토리)을 그대로 복사해 채팅 프로젝트에 적용합니다.
  1. docker-compose에 Nginx 추가
  2. conf 디렉토리에 WebSocket 처리를 위한 업스트림과 location 설정 추가:
  • 인증 서버(auth)와 메시지 서버(message) 업스트림 정의
  • /ws 경로로 들어오는 요청은 WebSocket으로 업그레이드 처리
  • read_timeout, send_timeout을 하루(86400초)로 설정하여 장기 연결 유지

 

🌐 WebSocket 업그레이드 처리

  • WebSocket 통신은 HTTP/1.1 업그레이드가 필요하므로, 아래 설정을 적용했습니다.
  • 이를 통해 엔진엑스가 클라이언트의 요청을 WebSocket 연결로 변환하고, 서버와의 지속적인 통신을 안정적으로 유지합니다.

 

🔄 클라이언트 엔드포인트 단일화

  • 기존에는 인증 서버와 메시지 서버가 각각 다른 엔드포인트를 사용하고 있었습니다.
  • Nginx 도입 후, 클라이언트는 BASE_URL 하나만 바라보도록 변경했습니다.
    • REST API와 WebSocket이 동일 포트(80)로 통합
    • 추후 서버 인스턴스가 늘어나도 클라이언트 변경 없이 확장 가능

 

🧪 동작 검증

  1. 컨테이너 총 10개 구동 확인 (인증 서버, 메시지 서버, Nginx 포함)
  2. 클라이언트에서 회원가입 및 로그인 요청 → Nginx를 통해 인증 서버로 전달
  3. 두 개의 클라이언트가 동일 채널에서 WebSocket 채팅 진행
  4. Nginx 종료 시, 모든 연결이 즉시 끊기는 것을 확인 (Nginx를 통한 단일 진입점 검증 완료)

 

📈 적용 효과

 

  • 고가용성: 서버 인스턴스를 여러 개 띄우더라도 Nginx가 로드밸런싱 처리
  • 확장성: WebSocket·REST API 모두 단일 진입점 사용 → 클라이언트 변경 불필요
  • 유지보수성 향상: 서버 구조 변경 시에도 클라이언트 코드 수정 최소화

 

  • 이번 작업을 하면서 느낀 점은, 아키텍처에서 '진입점 통합' 의 중요성입니다. 서버를 분리하거나 늘릴 때 가장 큰 리스크 중 하나는 클라이언트 변경인데, Nginx 같은 프록시 계층을 두면 이 문제를 깔끔하게 해결할 수 있습니다.
  • 또한, WebSocket과 같은 장기 연결 기반 서비스는 타임아웃 관리와 업그레이드 설정이 필수적이라는 점을 다시 확인했습니다.
  • 앞으로 이런 구조를 다른 서비스에도 적용할 수 있으며, API Gateway 패턴이나 서비스 메시(mesh)로 확장해 나가면, 대규모 트래픽 환경에서도 안정성과 확장성을 동시에 확보할 수 있을 거라고 생각합니다.