Back_End/Java

Web Application Server (WAS)

10Biliion 2024. 11. 28. 08:22

 

 

 

WAS(Web Application Server)는 클라이언트의 요청을 처리하고 동적인 웹 애플리케이션을 실행하기 위한 서버 소프트웨어입니다. WAS는 웹 서버와 애플리케이션 서버의 기능을 모두 포함하며, 주로 JSP, Servlet, Spring 등의 기술을 기반으로 동작합니다


WAS의 역할

  1. HTTP 요청 처리
    • 클라이언트(주로 브라우저)로부터 HTTP 요청을 수신하고, 적절한 응답을 반환합니다.
  2. 동적 컨텐츠 생성
    • 정적인 HTML 파일을 제공하는 웹 서버와 달리, 데이터베이스나 다른 비즈니스 로직을 이용해 동적인 데이터를 생성합니다.
  3. 애플리케이션 실행 환경 제공
    • Java EE 표준을 기반으로 다양한 API와 서비스를 제공하여 웹 애플리케이션이 실행되도록 지원합니다.
  4. 로드 밸런싱 및 클러스터링
    • 대규모 트래픽을 처리하기 위해 여러 서버에 요청을 분산하거나, 서버 장애 시에도 애플리케이션이 중단되지 않도록 고가용성을 제공합니다.

WAS 동작 원리

  1. HTTP 요청 수신
    • 클라이언트의 요청은 웹 서버(예: Apache HTTP Server, Nginx)를 거쳐 WAS로 전달됩니다.
  2. 요청 분석 및 라우팅
    • WAS는 URL, HTTP 메서드 등을 분석하여 어떤 애플리케이션이나 컴포넌트가 요청을 처리할지 결정합니다.
  3. 비즈니스 로직 처리
    • 지정된 애플리케이션은 데이터베이스와의 상호작용, 계산, 파일 처리 등 비즈니스 로직을 실행합니다.
  4. 응답 생성 및 반환
    • 요청 처리 결과를 기반으로 동적인 HTML, JSON, XML 등의 응답 데이터를 생성하고 클라이언트에 반환합니다.

WAS 아키텍처

  1. Servlet 컨테이너
    • JSP와 Servlet을 실행하고 관리하는 핵심 모듈입니다. 요청과 응답 객체를 생성하고, 애플리케이션의 비즈니스 로직을 호출합니다.
  2. EJB 컨테이너
    • 엔터프라이즈 자바 빈(EJB)을 관리하며, 트랜잭션, 보안, 분산 처리를 지원합니다.
  3. JNDI 서비스
    • 애플리케이션에서 데이터베이스, 메시징 시스템 등의 자원을 쉽게 찾고 연결할 수 있도록 이름 기반 디렉터리 서비스를 제공합니다.
  4. JMS 서비스
    • 메시지 기반의 비동기 통신을 지원하여 시스템 간 데이터 교환을 효율적으로 처리합니다.
  5. 트랜잭션 관리
    • 데이터베이스 작업이 원자성을 가지도록 트랜잭션을 관리합니다.
  6. 보안 관리
    • 인증과 권한 부여를 통해 애플리케이션과 데이터의 안전성을 보장합니다.

주요 WAS 종류

  1. Apache Tomcat
    • Java Servlet과 JSP를 실행할 수 있는 경량 WAS로, 오픈 소스이며 높은 성능을 자랑합니다.
  2. JBoss EAP (WildFly)
    • Red Hat에서 제공하는 오픈 소스 WAS로, Java EE 표준을 완벽히 지원합니다.
  3. WebSphere Application Server
    • IBM에서 제공하는 상용 WAS로, 대규모 엔터프라이즈 환경에 적합합니다.
  4. Oracle WebLogic
    • Oracle의 WAS로, 높은 안정성과 확장성을 제공합니다.
  5. GlassFish
    • Java EE 참조 구현으로, 다양한 Java EE 기능을 테스트할 수 있는 WAS입니다.

WAS와 웹 서버의 차이

구분 웹 서버(Web Server) WAS(Web Application Server)
역할 정적 콘텐츠 제공 동적 콘텐츠 생성
기술 HTML, CSS, JS JSP, Servlet, EJB
예시 Apache HTTP Server, Nginx Tomcat, WebLogic
확장성 제한적 클러스터링, 로드 밸런싱 가능

WAS 설정 및 최적화

  1. JVM 튜닝
    • 힙 메모리 크기, 가비지 컬렉션 설정 등을 최적화하여 성능을 향상시킵니다.
  2. 스레드 풀 관리
    • 요청을 처리하는 스레드의 개수를 적절히 설정하여 리소스 낭비를 방지합니다.
  3. 커넥션 풀 관리
    • 데이터베이스 연결을 재사용하도록 설정하여 요청 처리 속도를 높입니다.
  4. 캐싱 사용
    • 정적 또는 자주 사용하는 데이터를 캐싱하여 응답 속도를 개선합니다.
  5. 보안 강화
    • SSL 인증서 적용, 방화벽 설정, 보안 패치 업데이트 등을 통해 애플리케이션의 보안을 강화합니다.