
Static WebSite과 Dynamic WebSite 차이
- Static Web : Client ↔ Web Server
- Dynamic Web : Client ↔ Web Server ↔ WAS or DataBase
Web Server 웹 서버
- 웹서버 소프트웨어, 하드웨어서버를 말하기도 한다. 이 둘은 서로 다른 개념이다.
- 일반적으로 말하는 웹서버는 웹 브라우저가 HTTP, HTTPS 통신프로토콜을 통해 Client에게 정적파일을 전달한다.
- 정적인 컨텐츠(HTML, 이미지, CSS 등)를 제공하는 역할, 즉 웹 페이지를 보여주는 기본적인 역할
- Niginx는 웹서버이다.
- 과거 Web Server는 정적파일만 전달할 수 있다는 한계가 있다. 그래서 해결책으로 등장한 개념이 WAS이다.
Web Server 대표 예시 :
WAS 웹 어플리케이션 서버
- Web Application Server이 정식표현이며 Application Server라고 불린다. 약어로 AS라고도 불린다.
- 현재 우리가 사용하는 웹서버가 모두 WAS이며 WAS는 Web Container + Web Server가 합쳐진 것으로 웹 애플리케이션과 서버 환경을 만들어 동작시키는 기능을 제공하는 소프트웨어 프레임워크
- 웹 서버와 DB사이에 위치하여 미들웨어이며 당연히 DB와의 상호작용을 한다.
- 익히 알고아는 tomcat이 WAS이다.
- 비즈니스 로직과 DB 작업을 수행하며 동적 컨텐츠를 제공하고 정적 컨텐츠도 제공한다.
WAS 대표 예시 :
WAS의 기능
- DB접속
- 여러 개의 트랜잭션을 관리
- 비즈니스 로직 수행
요즘 웹 사이트 작동 방식 : Client <-> Web Server <-> WAS / DB

WAS 구성요소와 동작 방식 :

Web Server Architecture
- 아래와 같이 크게 3가지 아키텍처가 존재한다.
- Client <-> Web Server + DB
- Client <-> WAS -> DB
- Client <-> Web Server <-> WAS <-> DB
- 특히나 아키텍처에서 Web Server와 WAS를 둘다 두는 경우가 많다. 이러한 경우를 웹 서버와 WAS를 분리한 아키텍처라고 한다
왜 WAS와 Web Server를 분리할까?
- 서버에서 동적데이터와 정적 데이터를 모두 한 곳에서 담당하는 것은 서버에 부하를 증가시키게 되는데
- 동적처리와 정적처리 서버로 분리한다.
- 그 이유로는
- Web Server 부하 방지하고자 WAS를 추가하여 분업화 :
- 모든 데이터(동적, 정적)를 한 서버에서 모두 처리하기에는 리소스(H/W 자원)은 한정됨. 리소스를 효율적으로 사용할 수 있다.
- 분화된 기능에 대한 관리 용이성
- 보안 강화 :
- 외부 접근을 막아서 서버 환경에 대한 노출을 원천 차단하여 보안을 유지할 수 있다.
- 다양한 WAS 환경 제공 :
- 웹서버가 로드밸런서 역할을 하여 다양한 WAS와 연결할 수 있습니다. 예를 들면 Nignx를 사용하여 로드밸런싱을 할 수 있다. 웹 서버 앞단에 위치하여 웹 서버와 클라이언트 사이에 위치하여 서버대신 요청을 처리하고 응답한다.
- 성격이 다른 Application들을 동시에 제공할 수 있습니다.
- WAS는 정적/동적 데이터 처리가 가능한 서버이다. 따라서 Web Server가 없더라도 모든 작업이 가능하다.
왜 Tomcat + Nignx조합 아키텍처에서 Tomcat은왜 비즈니스 로직 처리에 집중하도록 두어야할까?
- Tomcat도 정적 파일 처리 가능 있다.
- 예전에는 웹서버(Nginx, Apache HTTP Server) 없이 Tomcat만으로 서비스하는 경우 많았으나 현재는 아님
- 하지만 정적 리소스 처리 성능은 Nginx에 비해 떨어집니다. 그 이유는:
- Tomcat은 HTTP 요청을 Servlet Container를 통해 처리 → 요청마다 서블릿 매핑, 필터, 스레드풀 진입
- Nginx는 C 기반 비동기 이벤트 루프라서 I/O 처리가 훨씬 빠름
- 높은 동시접속에서 Tomcat은 스레드 수 제한 때문에 정적 파일 처리 시 리소스 낭비 발생
- 그럼에도 역할을 나누는 이유
- 운영환경에서는 보통 "정적 = Nginx", 동적 = Tomcat" 으로 나눕니다.
- Tomcat: JSP/서블릿/Spring MVC 같은 동적 컨텐츠(비즈니스 로직) 처리
- Nginx: HTML, CSS, JS, 이미지, 영상 같은 정적 컨텐츠 서빙 + 캐싱
- 이렇게 하면 Tomcat 스레드풀은 오직 동적 요청 처리에만 쓰여서 CPU/메모리 효율이 좋아집니다.
- 예시 : 쇼핑몰 메인페이지 요청올떄 처리하는 방법
-
1) Nginx가 HTML/CSS/JS, 상품 이미지 등을 바로 제공 (정적 캐시 적용)
-
2) 상품 목록 API 요청은 Nginx가 Tomcat에 전달
-
3) tomcat은 DB 조회, 비즈니스 로직 실행 후 JSON 응답
-
4) Nginx가 응답을 받아 클라이언트에 전달
-
효과 : 위 구조면 정적 파일 요청이 몰려도 Tomcat은 전혀 부하를 받지 않습니다.
Tomcat – WAS(Web Application Server)
목적: Java 기반 웹 애플리케이션 실행
주요 역할
- 서블릿 컨테이너: Java Servlet, JSP, Spring MVC 등 Java 웹 애플리케이션을 실행
- 비즈니스 로직 처리: DB 조회, 데이터 가공, API 응답 생성
- 동적 컨텐츠 생성: 사용자의 요청에 따라 HTML/JSON/XML 등 동적으로 만들어 응답
- HTTP 요청 처리: 내장 HTTP 커넥터로 요청/응답 관리 (정적 파일도 제공 가능)
- 세션/쿠키 관리: 로그인, 장바구니 등 상태 정보 관리
요약
- Tomcat은 “동적” 처리에 강점이 있지만, 정적 파일 대량 처리나 부하 분산에는 비효율적입니다.
Nginx – Web Server / Reverse Proxy
목적: 앞단에서 네트워크 요청을 빠르고 효율적으로 처리
주요 역할
- 정적 파일 서빙: HTML, CSS, JS, 이미지, 영상 등 I/O 중심 작업에 매우 빠름
- 리버스 프록시: 클라이언트 요청을 Tomcat이나 다른 서버로 전달
- 로드 밸런싱: 여러 대의 Tomcat에 트래픽을 분산
- SSL/TLS 처리: HTTPS 암호화/인증서 관리 (TLS 종료)
- 캐싱: 정적/동적 응답을 캐시에 저장해 재사용
- 요청 제한·접속 제어: 과도한 요청 방어, IP 차단, WAF 연동
요약
- Nginx는 네트워크 I/O·정적 처리·프록시에 특화된 경량 고성능 서버입니다.
둘을 함께 쓰는 이유 : Tomcat + Nginx
- 정적,동적 분리
- Nginx: 정적 요청 처리, SSL, 캐싱
- Tomcat: 동적 로직 처리
- 성능 최적화
- Nginx가 빠른 I/O 처리로 부하를 줄이고, Tomcat은 CPU·메모리를 비즈니스 로직에만 사용
- 확장성과 안정성
- Nginx 로드 밸런싱 → Tomcat 여러 대를 병렬로 운영 가능
- 보안
- 내부 구조(IP, 포트) 숨기고, Nginx에서 접근 제어
Tomcat, Nginx 역할 요약
- Tomcat: 자바 웹 애플리케이션 실행기
- Nginx: 빠른 네트워크 관문
Tomcat + Nginx 아키텍처
Tomcat + Nginx 아키텍처에서 Nginx의 위치
- Client ↔ [Nginx] ↔ Tomcat
- 정확히 말하면 Nginx가 서버 앞단(Front)에서 클라이언트와 실제 웹 애플리케이션 서버(Tomcat 같은 WAS) 사이에 위치
Tomcat + Nginx 아키텍처 구조
Client (브라우저/앱)
↓ HTTP/HTTPS 요청
Nginx (웹 서버 / 리버스 프록시)
↓
Tomcat (WAS – 비즈니스 로직 처리)
↓
Database (MySQL, Oracle 등)
- Client → Nginx: 사용자가 브라우저나 앱에서 요청을 보내면, 가장 먼저 Nginx가 받습니다.
- Nginx → Tomcat: 정적 파일이면 Nginx에서 바로 응답, 동적 요청이면 Tomcat으로 전달(리버스 프록시)
- Tomcat → DB: 동적 처리를 위해 DB 쿼리 수행
- 응답 경로: DB 결과를 Tomcat이 가공 → Nginx가 받아서 클라이언트에 전달
Nginx가 앞단에 있는 이유
- 정적 리소스 빠른 응답: HTML/CSS/JS, 이미지, 동영상 등은 Tomcat까지 안 가고 Nginx에서 바로 제공
- 부하 분산: Tomcat이 여러 대일 때 트래픽을 고르게 분배
- 보안: WAS와 DB의 내부 네트워크를 외부에서 직접 접근하지 못하게 보호
- SSL/TLS 처리: HTTPS 암호화를 Nginx에서 끝내고 Tomcat에는 HTTP로 전달
- 캐싱: 자주 쓰이는 응답을 저장해 서버 부하 감소
예시 : 사용자가 https://google.com/login에 접속
-
브라우저 요청이 Nginx로 도착
1.1. 사용자가 주소창에 입력 → DNS 조회 → 해당 도메인의 IP로 연결
1.2. HTTPS라서 먼저 TLS 핸드셰이크 진행
-
Nginx가 SSL 복호화
2.1. 클라이언트가 전송한 암호화된 데이터를 Nginx가 복호화
2.2. 이후 내부 통신은 HTTP로 Tomcat에 전달
-
Nginx: 요청 판단 & 라우팅 : login에 요청이 동적 페이지임을 판단 → Tomcat으로 전달
3.1. 정적 리소스(이미지, CSS, JS)가 아니므로 Tomcat으로 전달(Reverse Proxy)
-
Nginx → Tomcat
4.1. Nginx가 내부 네트워크를 통해 Tomcat에 HTTP 요청 전달
-
Tomcat: 비즈니스 로직 처리
5.1. DB에서 사용자 정보 조회나 인증 로직 수행
-
Tomcat → Nginx
6.1. Tomcat이 생성한 응답을 Nginx에 반환
-
Nginx → 브라우저
7.1. Nginx가 응답을 클라이언트에 전달