요구사항을 던져보고, 요구사항별로 Web Server(NGINX)를 활용한 시스템 아키텍처를 어떻게 구성하는 것이 문제를 풀 수 있는지 살펴본다.
파란 박스는 서버 머신이라고 보면 된다.
LoadBalancer 제품을 사용할 수 있지만, web server 에서 필요한 다양한 설정을 제공하지 못할 때.
회사에 로드밸런서는 존재하지만, AWS ALB처럼 고급 기능은 없음 (예: L4 수준 로드밸런서만 사용).
따라서, 각 서버에 NGINX(Web Server)와 App Server가 함께 배포되어야 함.
로드밸런서 → NGINX → App 구조에서,
로드밸런서는 일반적으로 NGINX까지만 상태를 체크하므로,
해결 방안:
/healthz
)추가적으로,
SSL Offloading, cache 등의 기능을 loadbalancer 또는 API Gateway 레벨에서 지원이 가능하다면, backend를 더 효율적으로 구성할 수 있다.
AWS, Azure 등 클라우드의 고급 LoadBalancer 혹은 API Gateway가 SSL Offloading, 캐싱, 라우팅 등의 기능을 자체적으로 지원할 경우, 별도의 NGINX(Web Server) 없이 App에 직접 요청 전달이 가능하다.
→ 결과적으로 중간 레이어(NGINX)가 제거되면서 아키텍처가 단순해짐
6.1.2에서는 NGINX → App으로 데이터 전달 시 메모리 복사 및 두 번 사용 필요
6.1.3 구조에서는
요청이 바로 App에 전달
→ 고급 로드밸런서를 활용하면 경량화된 백엔드 구성, 낮은 레이턴시, 높은 리소스 효율성 확보가 가능하다.
그런데 이것보다 한 단계 더 나아갈 수 있다.
정적 파일이 거의 변경되지 않고, 파일의 URL 경로에 대해 immutable 하거나 버전관리가 된다면, 다음과 같이 구성할 수 있다.
= 이렇게 구성하면 파일 배포 누락, 덮어쓰기 문제, 머신별 파일 상태 불일치 등과 같은 운영상 문제를 크게 줄일 수 있다.
→ 특히 다중 서버 환경에서 발생할 수 있는 스태틱 파일 관련 장애를 구조적으로 예방할 수 있다.
이 구조는 단순 LoadBalancer가 아닌 L7 기반 API Gateway의 정교한 라우팅 기능이 필요하다.
→ 경로 기반, 도메인 기반 라우팅을 통해 요청 흐름을 보다 세밀하게 제어할 수 있다.
API Gateway는 URL 패턴을 기반으로 요청을 분석하고, 정적 파일은 S3로, 동적 요청은 App 서버로 적절히 분기할 수 있다.
→ 이를 통해 전체 시스템의 응답 속도를 개선하고 리소스 낭비를 줄일 수 있다.
SSL 오프로딩, 캐시, 인증 등 다양한 네트워크 기능도 함께 수행할 수 있다.
→ 클라이언트-서버 간 통신 효율성과 보안성을 동시에 확보할 수 있다.
File Storage 자체도 고가용성, 보안, 인증 등 엔터프라이즈 수준의 요구사항을 충족해야 한다.
→ 단순 저장소가 아닌 안정적인 콘텐츠 전송 인프라로서의 역할이 중요하다.
AWS S3, GCP Cloud Storage, Azure Blob Storage 등 주요 클라우드에서 이러한 요건을 지원한다.
→ 클라우드 기반의 정적 파일 호스팅은 비용 대비 운영 효율이 매우 높다.
이 구성은 정적 자산이 많고, 파일 배포로 인한 장애 리스크를 줄이고자 하는 경우에 적합하며,
구조적으로 앱 서버와 파일 저장소의 책임을 분리하여 전체 시스템의 신뢰성을 향상시킨다.