[CL] Nginx가 필요한 이유 - 100-hours-a-week/6-nemo-wiki GitHub Wiki

✅ NGINX가 필요한 이유

🔹 1. 멀티 서비스 구조에서의 요청 분기

⛳️ 배경

  • 프론트엔드(Next.js): 3000 포트
  • 백엔드(Spring Boot): 8080 포트
  • AI 서비스(FastAPI): 8000 포트

사용자는 https://nemo.ai.kr 도메인만 접속하지만, 내부 서비스는 포트가 분리되어 있음

✅ 필요성

  • 요청 경로에 따라 내부 포트로 자동 분기 (리버스 프록시)
  • 예시:
    • /api/localhost:8080
    • /ai/localhost:8000
    • /localhost:3000

➡ NGINX는 요청 경로에 따른 서비스 분기 처리를 담당


🔹 2. SSL 인증서 적용 및 HTTPS 통신 제공

⛳️ 배경

  • 로그인, 인증 등 보안이 필요한 기능을 HTTPS 없이 운영하면 보안 위협 존재
  • 대부분 OAuth, JWT 기반 로그인은 HTTPS 전제

✅ 필요성

  • NGINX에 Certbot을 연동하여 SSL 인증서 적용
  • Let’s Encrypt로 무료 발급 + 자동 갱신 가능
  • 외부는 HTTPS, 내부는 HTTP로 처리

➡ NGINX는 SSL 종단점(Termination Point) 역할을 수행


🔹 3. 정적 파일 및 SSR 요청 라우팅

⛳️ 배경

  • Next.js는 /_next, .ico, .js정적 파일 요청과, /SSR 페이지 요청이 혼재

✅ 필요성

  • 정적 경로와 SSR 경로를 각각 프록시 설정
  • NGINX가 프론트 요청을 적절히 처리

➡ Next.js의 정적/동적 요청을 분리 라우팅 가능


🔹 4. 보안 강화 및 접근 제한

⛳️ 배경

  • 실수로 .env, .git 같은 민감한 파일이 노출될 수 있음
  • 내부 포트 직접 접근은 보안상 위험

✅ 필요성

  • 민감 파일 접근 차단 (location ~ /\.env { deny all; })
  • IP 접근 제한, 경로 단위 허용 설정 가능

➡ NGINX는 보안 제어 기능도 수행


🔹 5. 단일 도메인으로 멀티 서비스 제공

⛳️ 배경

  • 여러 서비스를 운영하더라도 사용자는 하나의 도메인으로 접근하는 것이 가장 편리

✅ 필요성

요청 경로 내부 포트 서비스
/api/ 8080 백엔드 (Spring Boot)
/ai/ 8000 AI (FastAPI)
/ 3000 프론트 (Next.js)

➡ NGINX는 서비스 통합 게이트웨이 역할


🔹 6. 향후 확장성과 유지보수 측면에서 유리

✅ 필요성

  • 서비스 추가 시 포트만 다르면 NGINX 설정으로 분기 가능
  • /admin, /chat, /internal 등 유연하게 확장 가능
  • 로깅, 에러 페이지, 캐싱 등 커스터마이징 가능

➡ 유지보수와 확장성이 뛰어난 구조 제공


✅ 결론

NGINX는 단순한 웹 서버가 아니라,
멀티 포트 기반 서비스 통합, HTTPS 제공, 보안 강화, 유지보수 및 확장성 향상을 위한 리버스 프록시 서버이자 Gateway이다.