Web Application Server

웹 애플리케이션 서버(Web Application Server, WAS)는 웹 애플리케이션의 실행 환경을 제공하고, 동적인 콘텐츠를 처리하며, 데이터베이스와의 연동을 지원하는 소프트웨어 프레임워크이다.
WAS는 웹 서버와 함께 사용되며, 주로 HTTP 프로토콜을 통해 클라이언트 요청을 처리한다.

WAS는 현대적인 웹 애플리케이션 개발과 운영에서 필수적인 요소이다. 특히 데이터베이스와 연동하여 동적인 콘텐츠를 생성하고 복잡한 비즈니스 로직을 처리하는 데 강점을 가진다. 효율적인 시스템 설계를 위해 일반적으로 웹 서버와 함께 사용되며, 이를 통해 성능 최적화와 보안 강화가 가능하다.

WAS의 주요 개념

WAS의 주요 구성요소

  1. 웹 컨테이너(Web Container): 서블릿과 JSP의 생명주기를 관리하고 실행환경을 제공한다. 주요 기능으로는 요청을 적절한 서블릿에 매핑하고, 서블릿 인스턴스를 생성 및 관리하며, 세션을 관리한다.

웹 컨테이너의 동작 과정:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
// 서블릿 생명주기 관리 예시
public class ServletContainer {
    private Map<String, HttpServlet> servlets = new HashMap<>();
    
    public void init() {
        // 서블릿 초기화
        for (ServletConfig config : servletConfigs) {
            HttpServlet servlet = createServlet(config);
            servlet.init(config);
            servlets.put(config.getServletName(), servlet);
        }
    }
    
    public void service(HttpServletRequest request, HttpServletResponse response) {
        // 요청 처리
        String servletName = getServletMapping(request.getRequestURI());
        HttpServlet servlet = servlets.get(servletName);
        servlet.service(request, response);
    }
}
  1. EJB 컨테이너(Enterprise JavaBeans Container): 비즈니스 로직을 처리하는 EJB 컴포넌트의 실행환경을 제공한다. 트랜잭션 관리, 보안, 리소스 풀링 등을 담당한다.

EJB 컨테이너 구현 예시:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
@Stateless
public class OrderProcessingBean implements OrderProcessing {
    @PersistenceContext
    private EntityManager em;
    
    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public Order createOrder(OrderData data) {
        Order order = new Order(data);
        em.persist(order);
        return order;
    }
}

서블릿(Servlet)

  • 서블릿은 Java를 사용하여 웹 페이지를 동적으로 생성하는 서버측 프로그램이다.
  • Java 클래스 형태로 작성되며, 클라이언트의 요청을 처리하고 응답을 생성하는 역할을 수행한다.

JSP(JavaServer Pages)

  • JSP는 HTML 코드에 Java 코드를 삽입하여 동적인 웹 페이지를 생성하는 기술이다.
  • 서블릿의 단점인 HTML 작성의 불편함을 개선하여, 더 쉽게 뷰(View)를 개발할 수 있게 해준다.

WAS의 주요 기능

  1. 프로그램 실행 환경 제공:

    • WAS는 애플리케이션 코드를 실행할 수 있는 환경을 제공한다.
    • 예: JSP나 서블릿을 실행하여 동적인 웹 페이지를 생성.
  2. 데이터베이스 접속 및 관리:

    • 클라이언트 요청에 따라 데이터베이스와 통신하여 데이터를 조회하거나 업데이트한다.
    • 예: 사용자 로그인 정보 확인.
  3. 비즈니스 로직 수행:

    • 애플리케이션의 핵심 로직(예: 트랜잭션 처리, 계산 등)을 수행한다.
    • 예: 전자상거래 사이트에서 주문 처리.
  4. 트랜잭션 관리:

    • 여러 작업이 하나의 논리적 단위로 처리되도록 보장하며, 실패 시 롤백 기능 제공.
  5. 보안 및 세션 관리:

    • 사용자 인증 및 권한 부여, 세션 유지 등의 작업 수행.

WAS와 웹 서버(Web Server)의 차이

특징웹 서버(Web Server)WAS(Web Application Server)
주요 역할정적 콘텐츠(HTML, CSS, 이미지 등) 제공동적 콘텐츠(DB 조회, 비즈니스 로직 수행) 처리
기능 범위HTTP 요청 처리 및 정적 리소스 제공웹 서버 기능 + 애플리케이션 실행 환경 제공
예시Apache HTTP Server, NginxTomcat, WebLogic, JBoss
사용 사례단순 웹사이트(정적 페이지)전자상거래, 소셜 네트워크 등 복잡한 애플리케이션
보안 및 부하 분산앞단에서 요청 필터링 및 부하 분산백엔드 로직 처리 집중

WAS와 웹 서버의 협력

아키텍처 구조

일반적인 처리 흐름:

1
클라이언트 → 웹 서버 → WAS → DB
  1. 웹 서버가 정적 리소스(이미지, CSS) 직접 제공.
  2. 동적 요청 시 WAS로 전달 → 비즈니스 로직 실행 및 DB 연동.
  3. 처리 결과를 웹 서버에 반환 → 최종 응답 생성.

WAS 분리 이유

  1. 부하 분산: 정적/동적 처리 분리로 서버 리소스 효율화.
    • 동시 접속 10,000건 시 WAS 단독 처리보다 응답 시간 40% 감소.
  2. 장애 격리: WAS 장애 시 웹 서버에서 에러 페이지 제공으로 서비스 연속성 확보.
  3. 확장성: 로드 밸런싱을 통해 WAS 다중화 용이.

성능 최적화 기술

WAS의 대표적인 예시

  1. Apache Tomcat:
    • 오픈소스 기반으로 JSP/서블릿 구동에 최적화된 경량 WAS.
  2. WebLogic:
    • Oracle에서 제공하는 상용 WAS로 대규모 엔터프라이즈 애플리케이션에 적합.
  3. JBoss/WildFly:
    • Red Hat에서 개발한 오픈소스 WAS로 Java EE 표준 지원.
  4. IBM WebSphere:
    • IBM에서 제공하는 상용 WAS로 고성능과 안정성이 특징.

WAS 사용 시 장점

  1. 확장성: 다수의 트랜잭션과 사용자 요청을 효율적으로 처리 가능.
  2. 유지보수 용이성: 비즈니스 로직과 프론트엔드가 분리되어 코드 관리가 쉬움.
  3. 보안 강화: 세션 관리와 인증 절차를 통해 데이터 보호.

실제 적용 사례


참고 및 출처