6주차 Unit 2.1 — 웹서버(Web Server) vs WAS(Web Application Server)

Psj·2026년 5월 28일

F-lab

목록 보기
187/230

Unit 2.1 — 웹서버(Web Server) vs WAS(Web Application Server)

F-LAB JAVA · 6주차 · Phase 2 · 웹 인프라 기초
🌐 Phase 2 시작 — Spring MVC 전 인프라 정리


📌 학습 목표

이 Unit을 끝내면 다음을 답할 수 있어야 한다.

  • 웹서버와 WAS 의 역할 차이는?
  • 정적 자원 vs 동적 자원 은?
  • 웹서버 예시 (Apache, Nginx) 는?
  • WAS 예시 (Tomcat, Jetty) 는?
  • 실무 구성 (Nginx + Tomcat) 은?
  • WAS 만으로 정적 서빙되는데 웹서버를 두는 이유는?
  • Spring Boot 내장 톰캣 은 어느 영역인가?
  • 리버스 프록시 역할은?
  • 3-tier 아키텍처 는?

🎯 핵심 한 문장

웹서버는 HTML·CSS·이미지 같은 정적 자원을 파일 그대로 응답하고 (Apache·Nginx), WAS 는 서블릿·JSP 같은 동적 자원을 코드 실행 후 결과로 응답하며 (Tomcat·Jetty), 실무에서는 Nginx 가 정적 파일을 처리하고 동적 요청만 Tomcat 에 위임하는 구성을 쓴다.
웹서버 는 정적 자원 (HTML, CSS, 이미지) 을 파일 그대로 클라이언트에 응답하며, 대표적으로 Apache, Nginx 가 있다.
WAS (Web Application Server) 는 동적 자원 (서블릿, JSP) 을 처리하여 코드를 실행하고 그 결과를 응답하며, Tomcat, Jetty, Undertow 가 있다.
실무 구성은 클라이언트 ↔ Nginx (웹서버, 정적 파일)Tomcat (WAS, 동적 요청) ↔ DB 로, Nginx 가 정적 파일을 직접 처리하고 동적 요청만 Tomcat 에 위임한다.
WAS 만으로도 정적 서빙이 가능하지만, 웹서버를 앞에 두면 정적 처리 분리·부하 분산·보안·SSL 종료 등의 이점이 있으며, Spring Boot 의 내장 톰캣은 WAS 영역 으로 별도 WAS 설치 없이 애플리케이션에 포함된다.

비유 — 편의점 vs 주방 있는 식당

웹서버 vs WAS = 편의점 vs 식당:

웹서버 (편의점):
  - 진열된 상품 그대로 (정적)
  - 빵, 음료 (HTML, 이미지)
  - 만들지 않고 건넴
  - 빠름

WAS (주방 식당):
  - 주문 받아 요리 (동적)
  - 재료로 음식 만듦 (코드 실행)
  - 시간 걸림
  - 맞춤

실무 구성 (편의점 + 주방):
  - 손님 → 편의점(Nginx)
    - 진열품(정적): 바로 줌
    - 요리(동적): 주방(Tomcat) 에 전달
  - 주방은 요리만 (효율)

왜 편의점 앞에:
  - 진열품 빨리 (정적)
  - 주방 부담 ↓
  - 여러 주방 분산
  - 입구 보안

Spring Boot 내장 톰캣:
  - 식당이 주방 내장
  - 별도 주방 임대 X

→ 웹서버(정적, Nginx) + WAS(동적, Tomcat), Nginx 앞단 → 효율/보안/분산.


🧭 9개 섹션 로드맵

1. 웹서버 vs WAS 역할
2. 정적 vs 동적 자원
3. 웹서버 예시
4. WAS 예시
5. 실무 구성
6. 왜 웹서버를 따로
7. Spring Boot 내장 톰캣
8. 리버스 프록시
9. 면접 + 자기 점검

1️⃣ 웹서버 vs WAS 역할

1.1 역할 차이

구분웹서버WAS
역할정적 자원 제공동적 자원 처리
처리파일 그대로코드 실행 → 결과
예시Apache, NginxTomcat, Jetty
속도빠름상대적 느림

1.2 웹서버

웹서버:

  정적 자원 응답:
    - HTML, CSS, JS, 이미지
    - 파일 그대로 전송
    - 빠름

1.3 WAS

WAS:

  동적 자원 처리:
    - 서블릿, JSP
    - 코드 실행
    - 결과 생성·응답

1.4 ILIC 의 맥락

ILIC 구성:

웹서버 (Nginx):
  - Vue 3 빌드 결과 (정적)
  - HTML, CSS, JS
  - 이미지

WAS (Tomcat, Spring Boot):
  - 431 API (동적)
  - 비즈니스 로직
  - DB 조회

1.5 자기 점검 답변

웹서버와 WAS의 역할 차이는?

:
1. 웹서버:

  • 정적 자원
  • 파일 그대로
  1. WAS:

    • 동적 자원
    • 코드 실행
  2. 예시:

    • Nginx / Tomcat
  3. 속도:

    • 웹서버 빠름

2️⃣ 정적 vs 동적 자원

2.1 정적 자원

정적 자원:

  변하지 않는 파일:
    - HTML, CSS, JS
    - 이미지, 폰트
    - 다운로드 파일

  → 그대로 전송

2.2 동적 자원

동적 자원:

  요청마다 생성:
    - 사용자별 데이터
    - DB 조회 결과
    - 계산 결과

  → 코드 실행

2.3 비교

정적 vs 동적:

정적:
  - 모두에게 같음
  - 파일 그대로
  - 캐시 쉬움

동적:
  - 요청마다 다름
  - 코드 실행
  - 캐시 어려움

2.4 ILIC 의 맥락

ILIC 정적 vs 동적:

정적:
  - 로고 이미지
  - Vue 빌드 JS/CSS
  - 정적 HTML 페이지

동적:
  - GET /api/shipments (배송 목록)
  - POST /api/bookings (예약 생성)
  - 사용자별 대시보드 데이터
  → 매번 DB 조회·계산

2.5 자기 점검 답변

정적 자원 vs 동적 자원은?

:
1. 정적:

  • 변하지 않는 파일
  1. 동적:

    • 요청마다 생성
  2. 비교:

    • 같음 vs 다름
  3. 처리:

    • 그대로 vs 코드 실행

3️⃣ 웹서버 예시

3.1 Apache

Apache HTTP Server:

  - 가장 오래된 웹서버
  - 모듈 기반
  - 안정적
  - .htaccess

3.2 Nginx

Nginx:

  - 고성능 (이벤트 기반)
  - 리버스 프록시
  - 로드 밸런서
  - 정적 파일 빠름

→ 현대 표준

3.3 Apache vs Nginx

Apache vs Nginx:

Apache:
  - 프로세스/스레드 기반
  - 동적 모듈 풍부

Nginx:
  - 이벤트 기반 (비동기)
  - 고동시성
  - 정적/프록시 강점

3.4 ILIC 의 맥락

ILIC 웹서버 (Nginx):

  nginx-proxy 컨테이너:
    - Vue 3 정적 파일 서빙
    - /api 요청 → 백엔드 프록시
    - SSL 종료
    - 정적 캐싱

  (프로덕션: Docker on Ubuntu)

3.5 자기 점검 답변

웹서버 예시 (Apache, Nginx) 는?

:
1. Apache:

  • 오래됨, 모듈
  1. Nginx:

    • 고성능, 이벤트 기반
  2. 차이:

    • 프로세스 vs 이벤트
  3. 현대:

    • Nginx 표준

4️⃣ WAS 예시

4.1 Tomcat

Apache Tomcat:

  - 가장 널리 쓰임
  - 서블릿 컨테이너
  - Spring Boot 기본 내장
  - JSP 지원

4.2 Jetty

Jetty:

  - 경량
  - 임베디드 친화
  - 빠른 시작

4.3 Undertow

Undertow:

  - 고성능 (JBoss)
  - 논블로킹
  - Spring Boot 선택지

4.4 서블릿 컨테이너

서블릿 컨테이너:

  WAS = 서블릿 컨테이너:
    - 서블릿 생명주기 관리
    - 요청 → 서블릿 매핑
    - 스레드 풀

4.5 ILIC 의 맥락

ILIC WAS (Tomcat):

  Spring Boot 내장 Tomcat:
    - 431 API 처리
    - 서블릿 (DispatcherServlet)
    - 비즈니스 로직 실행
    - DB 조회

  backend 컨테이너 (Docker)

4.6 자기 점검 답변

WAS 예시 (Tomcat, Jetty) 는?

:
1. Tomcat:

  • 가장 널리, 기본
  1. Jetty:

    • 경량
  2. Undertow:

    • 고성능
  3. 공통:

    • 서블릿 컨테이너

5️⃣ 실무 구성

5.1 구성도

실무 구성:

[클라이언트]
    ↓
[Nginx (웹서버)]
    - 정적 파일 직접
    - 동적은 위임
    ↓
[Tomcat (WAS)]
    - 동적 요청만
    ↓
[DB]

5.2 역할 분담

역할 분담:

Nginx:
  - 정적 파일 (HTML/CSS/JS/이미지)
  - SSL 종료
  - 로드 밸런싱

Tomcat:
  - 동적 요청 (API)
  - 비즈니스 로직

5.3 요청 흐름

요청 흐름:

  GET /logo.png:
    - Nginx 가 직접 (정적)

  GET /api/shipments:
    - Nginx → Tomcat 위임 (동적)
    - Tomcat 처리 → 응답

5.4 ILIC 의 맥락

ILIC 프로덕션 구성:

[클라이언트]
    ↓
[nginx-proxy 컨테이너]
    - Vue 정적 파일 (frontoffice/backoffice)
    - /api/* → backend 프록시
    ↓
[backend 컨테이너 (Spring Boot + Tomcat)]
    - 431 API
    ↓
[MySQL + Redis]

정적: nginx 직접
동적: backend 위임
→ 효율적 분담

5.5 자기 점검 답변

실무 구성 (Nginx + Tomcat) 은?

:
1. 구성:

  • 클라이언트 → Nginx → Tomcat → DB
  1. 분담:

    • Nginx: 정적
    • Tomcat: 동적
  2. 흐름:

    • 정적 직접, 동적 위임
  3. 효율:

    • 역할 분리

6️⃣ 왜 웹서버를 따로

6.1 WAS 만으로도 가능

WAS 만으로도:

  Tomcat:
    - 정적 파일 서빙 가능
    - 동적 처리 가능

  → 그런데 왜 웹서버를?

6.2 이유 1 — 효율

이유 1 — 효율:

  정적 파일:
    - WAS 가 처리하면
    - 비싼 스레드 낭비

  웹서버:
    - 정적 빠르게
    - WAS 는 동적만 (집중)

6.3 이유 2 — 부하 분산

이유 2 — 부하 분산:

  웹서버 (로드 밸런서):
    - 여러 WAS 분산
    - 트래픽 분배

  → 확장성

6.4 이유 3 — 보안

이유 3 — 보안:

  웹서버 앞단:
    - WAS 직접 노출 X
    - SSL 종료
    - 공격 차단

  → 보안 계층

6.5 이유 4 — 기타

기타 이유:

  - 정적 캐싱
  - 압축 (gzip)
  - 요청 필터링
  - 무중단 배포

6.6 ILIC 의 맥락

ILIC 가 nginx 를 두는 이유:

  1. 효율:
     - Vue 정적 파일은 nginx 가 빠르게
     - Spring Boot 는 API 만 (스레드 절약)

  2. 부하 분산:
     - 향후 backend 여러 대 분산 가능

  3. 보안:
     - SSL 종료 (HTTPS)
     - backend 직접 노출 X
     - CORS, 헤더 제어

  4. 기타:
     - 정적 캐싱
     - gzip 압축
  → wkbiz.com CORS 도 nginx/Spring Security 레벨 관리

6.7 자기 점검 답변

WAS만으로 정적 서빙되는데 웹서버를 두는 이유는?

:
1. 효율:

  • WAS 스레드 절약
  1. 부하 분산:

    • 로드 밸런싱
  2. 보안:

    • SSL, 노출 차단
  3. 기타:

    • 캐싱, 압축

7️⃣ Spring Boot 내장 톰캣

7.1 내장 톰캣

내장 톰캣:

  Spring Boot:
    - Tomcat 을 jar 안에 포함
    - 별도 WAS 설치 X
    - java -jar 로 실행

→ WAS 영역 (내장)

7.2 WAS 영역

WAS 영역:

  내장 톰캣:
    - WAS (동적 처리)
    - 서블릿 컨테이너
    - 웹서버 X (정적은 가능하나 주역할 X)

7.3 편의성

편의성:

  내장 WAS:
    - 별도 Tomcat 설치 X
    - 배포 간단 (jar 하나)
    - DevOps 부담 ↓

→ 마이크로서비스 적합

7.4 그래도 앞단 웹서버

그래도 앞단 웹서버:

  내장 톰캣 있어도:
    - 프로덕션은 nginx 앞단
    - 정적/SSL/분산

  → 내장은 WAS, nginx 는 웹서버

7.5 ILIC 의 맥락

ILIC Spring Boot 내장 톰캣:

  backend 컨테이너:
    - Spring Boot jar
    - 내장 Tomcat (WAS)
    - java -jar 실행
    - 431 API 처리

  하지만 프로덕션:
    - nginx-proxy (웹서버) 앞단
    - nginx: 정적/SSL
    - 내장 톰캣: 동적 API

  → 내장 톰캣 = WAS 영역
  → nginx = 웹서버 영역

7.6 자기 점검 답변

Spring Boot 내장 톰캣은 어느 영역인가?

:
1. 내장 톰캣:

  • WAS 영역
  1. WAS:

    • 동적 처리
  2. 편의:

    • 별도 설치 X
  3. 그래도:

    • nginx 앞단 (프로덕션)

8️⃣ 리버스 프록시

8.1 리버스 프록시

리버스 프록시:

  클라이언트 ↔ 프록시 ↔ 서버:
    - 프록시가 서버 대신 받음
    - 적절한 서버로 전달

  Nginx 의 역할

8.2 포워드 vs 리버스

포워드 vs 리버스:

포워드 프록시:
  - 클라이언트 측
  - 클라이언트 숨김

리버스 프록시:
  - 서버 측
  - 서버 숨김 (보호)

8.3 리버스 프록시 이점

리버스 프록시 이점:

  - 로드 밸런싱
  - SSL 종료
  - 캐싱
  - 보안 (서버 숨김)
  - 압축

8.4 ILIC 의 맥락

ILIC nginx 리버스 프록시:

  클라이언트
    ↓ HTTPS
  nginx-proxy (리버스 프록시)
    - SSL 종료 (HTTPS → HTTP)
    - /api/* → backend:8080
    - 정적 → 직접
    ↓
  backend (숨겨짐, 직접 노출 X)

  → nginx 가 backend 보호 + 라우팅

8.5 자기 점검 답변

리버스 프록시 역할은?

:
1. 리버스 프록시:

  • 서버 대신 받음
  1. vs 포워드:

    • 서버 측 vs 클라이언트 측
  2. 이점:

    • 분산/SSL/보안
  3. Nginx:

    • 리버스 프록시

9️⃣ 면접 + 자기 점검

9.1 면접 단골 질문 매핑

Q핵심 답변
웹서버 vs WAS?정적 vs 동적
정적 vs 동적?파일 vs 코드 실행
웹서버 예시?Apache, Nginx
WAS 예시?Tomcat, Jetty
실무 구성?Nginx + Tomcat
왜 웹서버 따로?효율/분산/보안
내장 톰캣?WAS 영역
리버스 프록시?서버 보호/라우팅
3-tier?웹서버/WAS/DB
SSL 종료?nginx 에서

9.2 자기 점검 체크리스트

역할

  • 웹서버/WAS

정적/동적

  • 차이

웹서버

  • Apache/Nginx

WAS

  • Tomcat/Jetty

실무 구성

  • Nginx+Tomcat

왜 웹서버

  • 효율/분산/보안

내장 톰캣

  • WAS

리버스 프록시

  • 역할

9.3 추가 심화 질문

Q1: WAS 가 웹서버 포함?

답:

  • WAS 도 정적 서빙 가능
  • 웹서버 기능 일부 포함
  • 하지만 전문 웹서버보다 비효율
  • 분리 권장

Q2: 로드 밸런서?

답:

  • 여러 서버 분산
  • L4 (전송), L7 (애플리케이션)
  • Nginx, HAProxy
  • 가용성/확장성

Q3: CDN?

답:

  • Content Delivery Network
  • 정적 자원 분산 (지역)
  • 캐싱 (엣지)
  • 빠른 전송

Q4: 서블릿 컨테이너 vs WAS?

답:

  • 서블릿 컨테이너: 서블릿 실행 (Tomcat)
  • WAS: + EJB 등 (전통)
  • Tomcat = 서블릿 컨테이너
  • 현대는 거의 동일시

Q5: 무중단 배포?

답:

  • 웹서버 앞단 활용
  • 블루-그린, 롤링
  • nginx 트래픽 전환
  • 서비스 중단 X

🎯 핵심 요약 — 3줄 정리

1. 웹서버 vs WAS

  • 웹서버 (Apache/Nginx): 정적 자원 파일 그대로
  • WAS (Tomcat/Jetty): 동적 자원 코드 실행 후 응답

2. 실무 구성

  • Nginx (정적/SSL/프록시) + Tomcat (동적 API)
  • 효율/부하 분산/보안 위해 웹서버를 앞단에

3. Spring Boot 내장 톰캣

  • WAS 영역 (별도 설치 X, jar 에 포함)
  • 프로덕션은 그래도 nginx 앞단

📚 다음으로...

Unit 2.2 — 서블릿(Servlet)과 JSP

이번 Unit에서 웹서버 vs WAS 를 봤다면, 다음은 서블릿과 JSP.

  • 서블릿 (자바 HTTP 처리)
  • JSP (HTML + 자바, 컴파일 시 서블릿)
  • MVC 진화

Phase 2 진행 상황

🌐 Phase 2 — 웹 인프라 기초
  ✅ Unit 2.1 웹서버 vs WAS ← 여기
  ⏭ Unit 2.2 서블릿과 JSP
  ⏭ Unit 2.3 SSR vs CSR
  ⏭ Unit 2.4 JAR vs WAR

6주차 누적 진행

🧪 Part A — 학습 도구와 환경
  ✅ Phase 1 — JUnit 테스트 (5 Unit)
  🌐 Phase 2 — 웹 인프라 기초 (1/4 진행)

총: 6/28 Unit

🌐 Phase 2 시작 — 웹 인프라 기초

profile
Software Developer

0개의 댓글