Web Server, WAS, Tomcat, Nginx

[verify$y]·2025년 8월 16일
0

CS핵심개념

목록 보기
32/35



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 대표 예시 :

  • Nignx, Apache




WAS 웹 어플리케이션 서버

  • Web Application Server이 정식표현이며 Application Server라고 불린다. 약어로 AS라고도 불린다.
  • 현재 우리가 사용하는 웹서버가 모두 WAS이며 WAS는 Web Container + Web Server가 합쳐진 것으로 웹 애플리케이션과 서버 환경을 만들어 동작시키는 기능을 제공하는 소프트웨어 프레임워크
  • 웹 서버와 DB사이에 위치하여 미들웨어이며 당연히 DB와의 상호작용을 한다.
  • 익히 알고아는 tomcat이 WAS이다.
  • 비즈니스 로직과 DB 작업을 수행하며 동적 컨텐츠를 제공하고 정적 컨텐츠도 제공한다.

WAS 대표 예시 :

  • Tomcat, Web logic, Jeusㄴ

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은왜 비즈니스 로직 처리에 집중하도록 두어야할까?

  • 그 이유는 역할 분담 문제이다.
  1. Tomcat도 정적 파일 처리 가능 있다.
  • 예전에는 웹서버(Nginx, Apache HTTP Server) 없이 Tomcat만으로 서비스하는 경우 많았으나 현재는 아님
  • 하지만 정적 리소스 처리 성능은 Nginx에 비해 떨어집니다. 그 이유는:
    - Tomcat은 HTTP 요청을 Servlet Container를 통해 처리 → 요청마다 서블릿 매핑, 필터, 스레드풀 진입
    - Nginx는 C 기반 비동기 이벤트 루프라서 I/O 처리가 훨씬 빠름
    - 높은 동시접속에서 Tomcat은 스레드 수 제한 때문에 정적 파일 처리 시 리소스 낭비 발생

  1. 그럼에도 역할을 나누는 이유
  • 운영환경에서는 보통 "정적 = 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

  1. 정적,동적 분리
    • Nginx: 정적 요청 처리, SSL, 캐싱
    • Tomcat: 동적 로직 처리
  2. 성능 최적화
    • Nginx가 빠른 I/O 처리로 부하를 줄이고, Tomcat은 CPU·메모리를 비즈니스 로직에만 사용
  3. 확장성과 안정성
    • Nginx 로드 밸런싱 → Tomcat 여러 대를 병렬로 운영 가능
  4. 보안
    • 내부 구조(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가 앞단에 있는 이유

  1. 정적 리소스 빠른 응답: HTML/CSS/JS, 이미지, 동영상 등은 Tomcat까지 안 가고 Nginx에서 바로 제공
  2. 부하 분산: Tomcat이 여러 대일 때 트래픽을 고르게 분배
  3. 보안: WAS와 DB의 내부 네트워크를 외부에서 직접 접근하지 못하게 보호
  4. SSL/TLS 처리: HTTPS 암호화를 Nginx에서 끝내고 Tomcat에는 HTTP로 전달
  5. 캐싱: 자주 쓰이는 응답을 저장해 서버 부하 감소



예시 : 사용자가 https://google.com/login에 접속

  1. 브라우저 요청이 Nginx로 도착
    1.1. 사용자가 주소창에 입력 → DNS 조회 → 해당 도메인의 IP로 연결
    1.2. HTTPS라서 먼저 TLS 핸드셰이크 진행

  2. Nginx가 SSL 복호화
    2.1. 클라이언트가 전송한 암호화된 데이터를 Nginx가 복호화
    2.2. 이후 내부 통신은 HTTP로 Tomcat에 전달

  3. Nginx: 요청 판단 & 라우팅 : login에 요청이 동적 페이지임을 판단 → Tomcat으로 전달
    3.1. 정적 리소스(이미지, CSS, JS)가 아니므로 Tomcat으로 전달(Reverse Proxy)

  4. Nginx → Tomcat
    4.1. Nginx가 내부 네트워크를 통해 Tomcat에 HTTP 요청 전달

  5. Tomcat: 비즈니스 로직 처리
    5.1. DB에서 사용자 정보 조회나 인증 로직 수행

  6. Tomcat → Nginx
    6.1. Tomcat이 생성한 응답을 Nginx에 반환

  7. Nginx → 브라우저
    7.1. Nginx가 응답을 클라이언트에 전달

profile
welcome

0개의 댓글