← 글 목록

notes

Cloud v 로드밸런싱

Cloud V 로드밸런싱 구성·백엔드 연결과 트래픽 분산 설정 메모.


1. 전체 구조 (권장)

[사용자] → DNS → Cloud V L7 LB (대표 IP)
                    ↓
         ┌──────────┼──────────┐
    [서버1:3000] [서버2:3000] [서버N:3000]
         (동일 Docker 이미지)
  • LB 앞단: 443(HTTPS) + 필요 시 80→443 리다이렉트
  • LB 뒤단(백엔드): 각 VM의 앱 포트로 전달

2. 스크린샷 기준 — 수정 포인트

지금 화면은 LB 80 → 서버 80인데, 이 프로젝트는 앱이 3000에서 뜹니다.

docker-compose로 호스트 13004에 매핑했다면, LB 백엔드 포트는 13004로 맞추면 됩니다. LB → VM IP:13004.

3. Standard LB vs Dynamic LB

  • 처음엔 Standard LB로 시작
  • 동시 접속·피크가 1만에 가깝거나 CPU/연결 한계가 보이면 Dynamic 전환

4. 스케줄링 알고리즘

Cloud V 권장은 Source Hashing입니다.

  • Source Hashing: 같은 IP → 같은 서버 (세션·캐시 안정)
  • Round Robin: 균등 분산 (서버 성능이 비슷할 때)
  • Least Connection: 연결 수 적은 서버 우선

이 프로젝트는 memSeq 쿠키·iron-session 등 쿠키 기반이라 Round Robin도 가능합니다.

다만 Next SSR·React Query 캐시·배포 직후 노드별 차이를 줄이려면 Source Hashing을 권장합니다.


5. 서버 노드 등록 체크리스트

  • VM마다 같은 Docker 이미지 배포 (APP_NAME=thankqcamping)
  • Cloud V LB에서 내부 IP(스마일서브/베어메탈 대역) 등록
  • 노드 등록 후 「시작」 클릭 (안 하면 분산 안 됨)
  • LB 방화벽: 443, 80 인바운드
  • 백엔드 VM 방화벽: LB IP → 3000(또는 13004) 허용

6. HTTPS 설정

  • 443 HTTPS 리스너 추가
  • 인증서: Cloud V/도메인 SSL 또는 Let's Encrypt
  • 백엔드는 HTTP 3000 유지 (SSL 종료는 LB에서)

next.config.ts의 serverActions.allowedOrigins에 실제 배포 도메인이 들어가 있는지 확인하세요.


7. 헬스체크 (추가 권장)

현재 /api/health 같은 경로가 없습니다. LB 모니터링용으로 가벼운 엔드포인트 추가를 권장합니다.

// apps/thankqcamping/app/api/health/route.ts
export function GET() {
  return Response.json({ status: "ok" }, { status: 200 });
}

모니터링: /api/health, 기대 응답 200.


8. 배포·운영 팁

  • 롤링 배포: LB에서 노드 1대 중지 → 배포 → 헬스체크 OK → 시작 → 다음 노드
  • 동일 빌드: 모든 노드에 같은 DEPLOYMENT_VERSION (Next deploymentId·정적 chunk 불일치 방지)
  • 백엔드 API는 Next rewrites로 프록시 → LB는 프론트(Next)만 분산하면 됨
  • DNS A레코드를 LB 대표 IP로

9. 예시 최종 설정

로드밸런서 이름: thankqcamping-prod-lb
스케줄링: Source Hashing
사양: Standard LB

[서비스 Port 1]
  Protocol: HTTPS
  LB Port: 443
  Server Port: 3000
  Monitoring: /api/health, 15초, 5초

[서비스 Port 2] (선택)
  Protocol: HTTP
  LB Port: 80
  Server Port: 3000
  (80 → 443 리다이렉트는 LB 또는 앱에서 처리)

백엔드 노드:
  - web-01 (10.x.x.1:3000) [시작]
  - web-02 (10.x.x.2:3000) [시작]

서버가 몇 대인지, 도메인·SSL을 LB에서 할지 VM에서 할지 알려주시면 그에 맞춰 포트·방화벽·HTTPS 값을 더 구체적으로 적어드리겠습니다 🙏