F-LAB JAVA · 6주차 · Phase 2 · 웹 인프라 기초
🌐 Phase 2 시작 — Spring MVC 전 인프라 정리
이 Unit을 끝내면 다음을 답할 수 있어야 한다.
웹서버는 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 WAS = 편의점 vs 식당:
웹서버 (편의점):
- 진열된 상품 그대로 (정적)
- 빵, 음료 (HTML, 이미지)
- 만들지 않고 건넴
- 빠름
WAS (주방 식당):
- 주문 받아 요리 (동적)
- 재료로 음식 만듦 (코드 실행)
- 시간 걸림
- 맞춤
실무 구성 (편의점 + 주방):
- 손님 → 편의점(Nginx)
- 진열품(정적): 바로 줌
- 요리(동적): 주방(Tomcat) 에 전달
- 주방은 요리만 (효율)
왜 편의점 앞에:
- 진열품 빨리 (정적)
- 주방 부담 ↓
- 여러 주방 분산
- 입구 보안
Spring Boot 내장 톰캣:
- 식당이 주방 내장
- 별도 주방 임대 X
→ 웹서버(정적, Nginx) + WAS(동적, Tomcat), Nginx 앞단 → 효율/보안/분산.
1. 웹서버 vs WAS 역할
2. 정적 vs 동적 자원
3. 웹서버 예시
4. WAS 예시
5. 실무 구성
6. 왜 웹서버를 따로
7. Spring Boot 내장 톰캣
8. 리버스 프록시
9. 면접 + 자기 점검
| 구분 | 웹서버 | WAS |
|---|---|---|
| 역할 | 정적 자원 제공 | 동적 자원 처리 |
| 처리 | 파일 그대로 | 코드 실행 → 결과 |
| 예시 | Apache, Nginx | Tomcat, Jetty |
| 속도 | 빠름 | 상대적 느림 |
웹서버:
정적 자원 응답:
- HTML, CSS, JS, 이미지
- 파일 그대로 전송
- 빠름
WAS:
동적 자원 처리:
- 서블릿, JSP
- 코드 실행
- 결과 생성·응답
ILIC 구성:
웹서버 (Nginx):
- Vue 3 빌드 결과 (정적)
- HTML, CSS, JS
- 이미지
WAS (Tomcat, Spring Boot):
- 431 API (동적)
- 비즈니스 로직
- DB 조회
웹서버와 WAS의 역할 차이는?
답:
1. 웹서버:
WAS:
예시:
속도:
정적 자원:
변하지 않는 파일:
- HTML, CSS, JS
- 이미지, 폰트
- 다운로드 파일
→ 그대로 전송
동적 자원:
요청마다 생성:
- 사용자별 데이터
- DB 조회 결과
- 계산 결과
→ 코드 실행
정적 vs 동적:
정적:
- 모두에게 같음
- 파일 그대로
- 캐시 쉬움
동적:
- 요청마다 다름
- 코드 실행
- 캐시 어려움
ILIC 정적 vs 동적:
정적:
- 로고 이미지
- Vue 빌드 JS/CSS
- 정적 HTML 페이지
동적:
- GET /api/shipments (배송 목록)
- POST /api/bookings (예약 생성)
- 사용자별 대시보드 데이터
→ 매번 DB 조회·계산
정적 자원 vs 동적 자원은?
답:
1. 정적:
동적:
비교:
처리:
Apache HTTP Server:
- 가장 오래된 웹서버
- 모듈 기반
- 안정적
- .htaccess
Nginx:
- 고성능 (이벤트 기반)
- 리버스 프록시
- 로드 밸런서
- 정적 파일 빠름
→ 현대 표준
Apache vs Nginx:
Apache:
- 프로세스/스레드 기반
- 동적 모듈 풍부
Nginx:
- 이벤트 기반 (비동기)
- 고동시성
- 정적/프록시 강점
ILIC 웹서버 (Nginx):
nginx-proxy 컨테이너:
- Vue 3 정적 파일 서빙
- /api 요청 → 백엔드 프록시
- SSL 종료
- 정적 캐싱
(프로덕션: Docker on Ubuntu)
웹서버 예시 (Apache, Nginx) 는?
답:
1. Apache:
Nginx:
차이:
현대:
Apache Tomcat:
- 가장 널리 쓰임
- 서블릿 컨테이너
- Spring Boot 기본 내장
- JSP 지원
Jetty:
- 경량
- 임베디드 친화
- 빠른 시작
Undertow:
- 고성능 (JBoss)
- 논블로킹
- Spring Boot 선택지
서블릿 컨테이너:
WAS = 서블릿 컨테이너:
- 서블릿 생명주기 관리
- 요청 → 서블릿 매핑
- 스레드 풀
ILIC WAS (Tomcat):
Spring Boot 내장 Tomcat:
- 431 API 처리
- 서블릿 (DispatcherServlet)
- 비즈니스 로직 실행
- DB 조회
backend 컨테이너 (Docker)
WAS 예시 (Tomcat, Jetty) 는?
답:
1. Tomcat:
Jetty:
Undertow:
공통:
실무 구성:
[클라이언트]
↓
[Nginx (웹서버)]
- 정적 파일 직접
- 동적은 위임
↓
[Tomcat (WAS)]
- 동적 요청만
↓
[DB]
역할 분담:
Nginx:
- 정적 파일 (HTML/CSS/JS/이미지)
- SSL 종료
- 로드 밸런싱
Tomcat:
- 동적 요청 (API)
- 비즈니스 로직
요청 흐름:
GET /logo.png:
- Nginx 가 직접 (정적)
GET /api/shipments:
- Nginx → Tomcat 위임 (동적)
- Tomcat 처리 → 응답
ILIC 프로덕션 구성:
[클라이언트]
↓
[nginx-proxy 컨테이너]
- Vue 정적 파일 (frontoffice/backoffice)
- /api/* → backend 프록시
↓
[backend 컨테이너 (Spring Boot + Tomcat)]
- 431 API
↓
[MySQL + Redis]
정적: nginx 직접
동적: backend 위임
→ 효율적 분담
실무 구성 (Nginx + Tomcat) 은?
답:
1. 구성:
분담:
흐름:
효율:
WAS 만으로도:
Tomcat:
- 정적 파일 서빙 가능
- 동적 처리 가능
→ 그런데 왜 웹서버를?
이유 1 — 효율:
정적 파일:
- WAS 가 처리하면
- 비싼 스레드 낭비
웹서버:
- 정적 빠르게
- WAS 는 동적만 (집중)
이유 2 — 부하 분산:
웹서버 (로드 밸런서):
- 여러 WAS 분산
- 트래픽 분배
→ 확장성
이유 3 — 보안:
웹서버 앞단:
- WAS 직접 노출 X
- SSL 종료
- 공격 차단
→ 보안 계층
기타 이유:
- 정적 캐싱
- 압축 (gzip)
- 요청 필터링
- 무중단 배포
ILIC 가 nginx 를 두는 이유:
1. 효율:
- Vue 정적 파일은 nginx 가 빠르게
- Spring Boot 는 API 만 (스레드 절약)
2. 부하 분산:
- 향후 backend 여러 대 분산 가능
3. 보안:
- SSL 종료 (HTTPS)
- backend 직접 노출 X
- CORS, 헤더 제어
4. 기타:
- 정적 캐싱
- gzip 압축
→ wkbiz.com CORS 도 nginx/Spring Security 레벨 관리
WAS만으로 정적 서빙되는데 웹서버를 두는 이유는?
답:
1. 효율:
부하 분산:
보안:
기타:
내장 톰캣:
Spring Boot:
- Tomcat 을 jar 안에 포함
- 별도 WAS 설치 X
- java -jar 로 실행
→ WAS 영역 (내장)
WAS 영역:
내장 톰캣:
- WAS (동적 처리)
- 서블릿 컨테이너
- 웹서버 X (정적은 가능하나 주역할 X)
편의성:
내장 WAS:
- 별도 Tomcat 설치 X
- 배포 간단 (jar 하나)
- DevOps 부담 ↓
→ 마이크로서비스 적합
그래도 앞단 웹서버:
내장 톰캣 있어도:
- 프로덕션은 nginx 앞단
- 정적/SSL/분산
→ 내장은 WAS, nginx 는 웹서버
ILIC Spring Boot 내장 톰캣:
backend 컨테이너:
- Spring Boot jar
- 내장 Tomcat (WAS)
- java -jar 실행
- 431 API 처리
하지만 프로덕션:
- nginx-proxy (웹서버) 앞단
- nginx: 정적/SSL
- 내장 톰캣: 동적 API
→ 내장 톰캣 = WAS 영역
→ nginx = 웹서버 영역
Spring Boot 내장 톰캣은 어느 영역인가?
답:
1. 내장 톰캣:
WAS:
편의:
그래도:
리버스 프록시:
클라이언트 ↔ 프록시 ↔ 서버:
- 프록시가 서버 대신 받음
- 적절한 서버로 전달
Nginx 의 역할
포워드 vs 리버스:
포워드 프록시:
- 클라이언트 측
- 클라이언트 숨김
리버스 프록시:
- 서버 측
- 서버 숨김 (보호)
리버스 프록시 이점:
- 로드 밸런싱
- SSL 종료
- 캐싱
- 보안 (서버 숨김)
- 압축
ILIC nginx 리버스 프록시:
클라이언트
↓ HTTPS
nginx-proxy (리버스 프록시)
- SSL 종료 (HTTPS → HTTP)
- /api/* → backend:8080
- 정적 → 직접
↓
backend (숨겨짐, 직접 노출 X)
→ nginx 가 backend 보호 + 라우팅
리버스 프록시 역할은?
답:
1. 리버스 프록시:
vs 포워드:
이점:
Nginx:
| Q | 핵심 답변 |
|---|---|
| 웹서버 vs WAS? | 정적 vs 동적 |
| 정적 vs 동적? | 파일 vs 코드 실행 |
| 웹서버 예시? | Apache, Nginx |
| WAS 예시? | Tomcat, Jetty |
| 실무 구성? | Nginx + Tomcat |
| 왜 웹서버 따로? | 효율/분산/보안 |
| 내장 톰캣? | WAS 영역 |
| 리버스 프록시? | 서버 보호/라우팅 |
| 3-tier? | 웹서버/WAS/DB |
| SSL 종료? | nginx 에서 |
답:
답:
답:
답:
답:
1. 웹서버 vs WAS
2. 실무 구성
3. Spring Boot 내장 톰캣
이번 Unit에서 웹서버 vs WAS 를 봤다면, 다음은 서블릿과 JSP.
🌐 Phase 2 — 웹 인프라 기초
✅ Unit 2.1 웹서버 vs WAS ← 여기
⏭ Unit 2.2 서블릿과 JSP
⏭ Unit 2.3 SSR vs CSR
⏭ Unit 2.4 JAR vs WAR
🧪 Part A — 학습 도구와 환경
✅ Phase 1 — JUnit 테스트 (5 Unit)
🌐 Phase 2 — 웹 인프라 기초 (1/4 진행)
총: 6/28 Unit
🌐 Phase 2 시작 — 웹 인프라 기초