본문 바로가기

개발 공부

웹 서버(Web Server), 웹 애플리케이션 서버(WAS)

웹 서버(Web Server)

웹 서버는 정적 리소스(Static Resource) 를 클라이언트(브라우저)에게 제공하는 역할을 합니다.

예를 들어 React, Angular 프로젝트를 빌드하면 index.html, main.js, style.css 같은 정적 파일이 나옵니다.
이 파일들을 클라이언트에게 빠르게 전달하는 게 바로 웹 서버의 역할입니다.

 

 

웹 서버의 주요 특징

  • HTML, CSS, JS, 이미지, 영상 같은 정적 파일 처리
  • 요청(Request) → 응답(Response) 흐름 단순 처리
  • 캐싱(Cache) 지원, 로드 밸런싱(Load Balancing) 지원
  • 대규모 트래픽에서도 빠른 응답 가능

대표적인 웹 서버

  • Apache HTTP Server
  • Nginx
  • Microsoft IIS

쉽게 말해, 웹 서버는 "정적 파일 배포 전문 서버" 라고 생각하면 됩니다.

 


 

웹 애플리케이션 서버(WAS, Web Application Server)

WAS는 동적 리소스(Dynamic Resource) 를 처리하는 서버입니다.
정적 파일만 제공하는 웹 서버와 달리, DB와 연동하거나 비즈니스 로직을 실행해 동적으로 생성된 데이터를 반환합니다.

 

WAS의 주요 특징

  • 로그인, 회원가입, 장바구니, 결제 등 비즈니스 로직 수행
  • DB 연결, 트랜잭션 관리, 세션 관리
  • REST API, GraphQL API, 웹소켓 등 동적 응답 처리
  • 애플리케이션 실행 환경 제공 (Java, Spring, Node.js 등)

 

대표적인 WAS

  • Tomcat (Java Servlet 컨테이너)
  • JBoss / WildFly
  • WebLogic / WebSphere
  • Node.js (자체적으로 WAS 역할 수행)

WAS는 "애플리케이션 로직 실행 엔진" 역할을 합니다.

 

 


 

웹 서버 vs WAS 비교 표

구분 웹 서버(Web Server) 웹 애플리케이션 서버(WAS)
역할 정적 리소스 제공 동적 콘텐츠 생성
처리 대상 HTML, CSS, JS, 이미지 API 요청, 비즈니스 로직, DB 연동
예시 응답 index.html 전달 로그인 API, 게시글 목록 조회
주요 기능 요청/응답 전달, 캐싱, 로드밸런싱 트랜잭션 관리, 세션 처리, 동적 로직
대표 기술 Apache, Nginx, IIS Tomcat, JBoss, WebLogic, Node.js

 

왜 웹 서버와 WAS를 분리할까?

실제 서비스에서는 웹 서버와 WAS를 분리해서 운영하는 경우가 많습니다.

 

1. 성능 최적화

  • 정적 파일(index.html, JS, CSS)은 웹 서버가 바로 응답
  • 동적 요청(API, DB 조회 등)만 WAS로 전달
    • WAS의 부담을 줄이고, 전체 응답 속도가 빨라집니다.

2. 보안 강화

  • 외부에서 직접 WAS에 접근하지 못하고, 웹 서버를 거쳐야 함
    • 내부 네트워크에서만 WAS 동작 → 보안성 향상

3. 확장성 확보

  • 웹 서버에서 로드밸런싱 → 여러 WAS로 트래픽 분산 가능
    • 대규모 트래픽 대응 가능

 


정리

  1. Nginx는 배포 담당
    • dist/, build/ 폴더 안의 정적 파일을 클라이언트에게 서빙
    • React Router, Angular Router 같은 SPA 라우팅을 위해 index.html fallback 설정 필요
  2. WAS는 API 담당
    • 로그인, 데이터 CRUD 요청은 WAS가 처리
    • GraphQL, REST API, WebSocket 서버도 WAS 범주
  3. 프록시 설정 중요
    • 로컬 개발 시: React/Angular → 프록시 설정해서 API 서버 호출
    • 실제 배포 시: Nginx가 /api 요청을 WAS로 라우팅

'개발 공부' 카테고리의 다른 글

bind  (0) 2025.09.24
Hoisting(호이스팅)  (0) 2025.09.21
거시적인 관점에서 코드를 짜기  (0) 2025.09.08
try-catch & then-catch  (1) 2025.08.03
Pub/Sub (3) - Next.js + Zustand  (0) 2025.06.30