웹 서버(Web Server)와 WAS(Web Application Server) 알아보기

suover

network

서론

현대 웹 애플리케이션 아키텍처에서 웹 서버(Web Server)웹 애플리케이션 서버(WAS, Web Application Server) 의 역할을 명확히 이해하는 것은 고성능·고가용성 시스템을 설계·운영하는 데 필수적입니다. 두 서버는 종종 함께 사용되지만, 그 내부 기능과 책임 범위에는 분명한 차이가 있습니다. 본 글에서는 웹 서버와 WAS의 정의·구조·주요 기능·실제 구성 예시를 살펴보고, 어떤 상황에서 각각을 선택·조합해야 하는지에 대해 안내합니다.

웹 서버(Web Server)

정의
  • 웹 서버는 HTTP(S) 프로토콜을 통해 들어오는 요청을 처리하고, 주로 정적 콘텐츠(HTML, CSS, JavaScript, 이미지 등)를 클라이언트에 전달하는 서버 소프트웨어입니다.
  • 전통적으로 정적 파일 서비스, 로드 밸런싱, SSL 종료(SSL termination) 등이 주요 기능입니다.
주요 기능
  1. 정적 컨텐츠 서비스
    • 파일 시스템 상의 리소스를 직접 읽어 HTTP 응답 본문으로 반환
    • 캐시 설정(Expires, Cache-Control) 및 압축(Gzip) 지원
  2. SSL/TLS
    • 클라이언트와의 암호화 통신(HTTPS)을 처리
    • 인증서 관리 및 갱신(AutoSSL, Let’s Encrypt 연동 등)
  3. 로드 밸런싱 & 리버스 프록시
    • 다수의 백엔드 서버(WAS 등)로 트래픽 분산
    • 요청 URL·헤더 기반 라우팅
  4. 정책 기반 접근 제어
    • IP 화이트/블랙리스트
    • 요청 크기·시간 제한
대표 소프트웨어 및 아키텍처
  • Apache HTTP Server
    • 모듈 기반 구조(apache2 모듈)
    • Multi-Processing Module(MPM) 선택 가능
  • Nginx
    • 이벤트 기반 비동기 모델(Worker 프로세스 + Event Loop)
    • 낮은 메모리·CPU 사용으로 고성능
  • Microsoft IIS
    • Windows 통합 관리
    • .NET 애플리케이션과 호환성

Nginx 이벤트 모델 예시

Nginx
worker_processes auto;
events {
    worker_connections 1024;
}
http {
    sendfile on;
    gzip on;
    server {
        listen 80;
        server_name example.com;
        root /var/www/html;
    }
}
Nginx

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

정의
  • WAS는 서버측에서 실행되는 동적 애플리케이션 로직(서블릿, JSP, EJB, Spring Bean 등)을 처리하고, 비즈니스 로직·데이터베이스 연동·트랜잭션 관리 기능을 제공하는 서버 환경입니다.
  • HTTP 요청을 받아 내부 로직을 수행한 뒤, 결과를 웹 서버 혹은 클라이언트로 반환합니다.
주요 기능
  1. 서블릿/컨테이너 기능
    • Java EE 기준의 Servlet, JSP 스펙 준수
    • 서블릿 라이프사이클 관리(init(), service(), destroy())
  2. 비즈니스 로직 실행
    • EJB(Enterprise JavaBeans), CDI, Spring Framework 등 컴포넌트 실행
  3. 데이터베이스 커넥션 풀
    • javax.sql.DataSource 인터페이스 기반 커넥션 풀 제공
  4. 트랜잭션 관리
    • JTA(Java Transaction API) 연동
    • 선언적 트랜잭션(@Transactional)
  5. 세션 관리
    • HTTP 세션 클러스터링 및 세션 복제
  6. 보안 관리
    • 인증·인가(폼 인증, BASIC, OAuth2)
    • 역할 기반 접근 제어(RBAC)
대표 소프트웨어 및 아키텍처
  • Apache Tomcat
    • 경량 서블릿 컨테이너
    • Spring Boot 기본 내장 서버로도 사용
  • Jetty
    • 임베디드 모드에 최적화
    • 컴팩트한 구조
  • WildFly (구 JBoss AS), Oracle WebLogic, IBM WebSphere
    • 풀 스택 Java EE 서버
    • 클러스터링·관리 콘솔·운영 툴 제공

Tomcat 서버.xml 예시 (Connector 설정)

XML
<Connector port="8080"
           protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           maxThreads="200"
           minSpareThreads="25"
           enableLookups="false" />
XML

웹 서버 vs WAS 비교

구분웹 서버WAS
처리 대상정적 콘텐츠동적 콘텐츠(비즈니스 로직)
프로토콜 핸들링HTTP(S)HTTP(S) + 서블릿/JSP 스펙
주요 기능파일 서비스, SSL, 로드밸런싱서블릿 컨테이너, 트랜잭션, 세션, 보안
성능 특성낮은 리소스, 높은 동시 처리로직 실행 비용, JVM·스레드 풀 관리 필요
확장성가볍게 수평 확장 쉬움클러스터링·세션 복제로 수평 확장 가능
구성 예시Nginx → 정적 리소스 직접 전달Nginx → WAS 프록시 → 동적 처리 수행

실제 인프라 구성 예시: Nginx + Tomcat 연동

  1. Nginx: 외부 요청 수신, SSL 종료, 정적 파일 서비스, 프록시 전달
  2. Tomcat: 동적 요청(예: /app/*) 처리, 비즈니스 로직 실행
Nginx
server {
    listen 80;
    server_name www.example.com;

    # 정적 리소스 처리
    location ~* \.(jpg|png|css|js|html)$ {
        root /var/www/html;
        expires 7d;
    }

    # 동적 요청 프록시
    location /app/ {
        proxy_pass http://127.0.0.1:8080/app/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_buffering off;
    }
}
Nginx

Tomcat 쪽에는 server.xml 의 Connector 설정만으로 포트 8080을 열어두고, 애플리케이션을 배포하면 됩니다.

선택 가이드

  1. 정적 콘텐츠가 대부분일 때
    • Nginx, Apache와 같은 웹 서버 단독 운영
    • CDN (Content Delivery Network) 활용 권장
  2. 복잡한 비즈니스 로직·데이터베이스 연동이 필요할 때
    • WAS 기반 애플리케이션 서버 도입
    • Spring, Jakarta EE 스펙 활용
  3. 대규모 트래픽 환경
    • 웹 서버와 WAS를 분리하여 역할 분담
    • 웹 서버 앞단에서 캐싱·SSL·로드밸런싱 처리
    • WAS 클러스터링으로 세션·트랜잭션 안정성 확보
  4. 운영·유지보수 고려
    • 경량화된 구조를 원하면 Tomcat + Jetty
    • 엔터프라이즈 기능(관리 콘솔·클러스터링 등)이 필요하면 WildFly·WebLogic

결론

웹 서버는 정적 컨텐츠에 특화된 가볍고 빠른 처리 엔진이며, WAS는 동적 비즈니스 로직 실행·트랜잭션 관리 등 애플리케이션 실행 환경을 제공합니다. 대부분의 실무 환경에서는 두 서버를 적절히 조합(예: Nginx + Tomcat)하여, 정적 자원 서비스와 동적 로직 처리를 효율적으로 분리·최적화함으로써 높은 성능과 안정성을 달성합니다. 본 블로그의 구성 예시와 선택 가이드를 참고하여, 여러분의 시스템 요구사항에 맞는 최적의 서버 구성을 설계하시길 바랍니다.

Leave a Comment