본문 바로가기

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

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

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

https://fastcampus.info/4n8ztzq

 

 

안녕하세요 :)

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

 

마흔 일곱번째 날에는 채팅 프로젝트에 레디스 클러스터 적용에 대해 배웠었는데요. 오늘은 과연 어떤 내용들을 배울 수 있을지 공부하고 포스팅 하도록 하겠습니다.

 

 

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

Part 5. 모놀리틱 서비스 분해 >

Ch 4. 마지막으로 남은 SPOF 제거를 위한 Nginx 다중 인스턴스와 서비스 디스커버리 연동 >

02. Docker Compose를 사용한 로컬 Consul 클러스터와 Nginx 다중 인스턴스 구성

입니다.

 


📌 도커 컴포즈를 사용한 로컬 Consul 클러스터와 Nginx 다중 인스턴스 구성

  • 🛠️ 주요 작업
    • 🐳 도커 컴포즈로 Consul 3개 노드 + Nginx 2개 노드 실행
    • ⚙️ 자바 코드 수정 ❌ → 설정 파일과 쉘 스크립트(register_nginx.sh)만 추가
    • 🌐 Consul UI 활성화 → 클러스터/서비스 상태 확인 가능

 

🏗️ Consul 클러스터 구성

  • 📦 버전: 2.21.1 사용
  • 🔌 포트: 8500 → 18500 으로 매핑
  • 🖥️ agent -server -ui -bootstrap-expect=3 → 최소 3노드 클러스터
  • 🧩 각 노드는 retry-join 옵션으로 서로 연결
  • 📂 데이터 디렉토리 볼륨 매핑
  • 🩺 헬스체크: curl -f http://localhost:8500/v1/status/leader

 

🌍 Nginx 다중 인스턴스 구성

  • 🖧 Nginx 2개 컨테이너 (80, 81 포트)
  • 🔑 Consul 서비스 등록용 환경 변수 추가
    • SERVICE_NAME=nginx
    • INTERNAL_SERVICE_NAME=nginx-1 (또는 nginx-2)
  • 📜 register_nginx.sh 실행 → Consul API 호출로 동적 등록
  • 🩺 Consul 헬스체크(TCP 기반) 후 서비스 상태 확인

 

📜 register_nginx.sh 동작

  • 🖥️ 컨테이너 내부 IP/Port 가져오기
  • 🔗 curl 요청으로 Consul에 서비스 등록
  • ✅ 헬스체크: TCP 연결 여부 확인 (interval=10s, timeout=3s)
  • 🚀 Nginx 실행과 동시에 서비스 자동 등록

 

🔎 실행 결과

  • 🖥️ Consul UI → 3개의 노드 & 2개의 Nginx 서비스 확인
  • 📡 REST API 요청으로 서비스 목록(JSON) 조회 가능
    • Nginx 2개 인스턴스 (localhost:80, localhost:81) 확인
  • 🧪 Postman 테스트 → ping 엔드포인트 호출 성공