본문 바로가기
WAS

WAS란 무엇인가?

by 개발길 2023. 1. 7.

웹 개발을 위한 WAS를 설치하기 전에 WAS(Web Application Server)가 무엇인지 알아보겠습니다.

 

무작정 따라하는 것도 좋지만 "내가 무엇을 하고 있고 어떻게 사용되는가"에 대한 기본적인 지식은 있어야 이해나 활용에 있어서 좀 더 높은 레벨에 도달할 수 있을테니까요.

 

 

1. 웹서비스의 기본 구성

 

웹서비스의 기본 구성은 정적인 페이지를 처리하기 위한 WebServer와 동적인 페이지 처리를 위한 WAS로 구성됩니다.

 

웹서비스 기본 구성

웹서버(Web Server)

브라우저로부터 HTTP 요청을 받아 정적인 데이터(html, jpg, png 등)를 처리하여 HTTP 프로토콜로 응답하는 프로그램입니다. 정적인 파일을 처리하여 WAS의 부담을 덜어주고, 동적 처리가 필요한 정보는 WAS로 송신하여 처리하며 이중화 구성을 통해 FailOver 기능을 제공하는 역할을 수행합니다. 내부 구간과 DMZ 구간으로 분리되어 구성되는 경우, 웹서버를 DMZ 구간에 배치하여 보안성을 향상시킬 수 있습니다.

 

웹어플리케이션서버(WAS : Web Application Server)

HTTP로 요청 받은 동적 웹 컨텐츠를 처리하는 점에서 웹서버와 구별되며 주로 데이터베이스와 연동되어 동작합니다. 웹서버의 HTTP 퍼리 기능을 내재하고 있어 웹 서버 없이 단독으로 사용이 가능합니다. 최근에는 단순 HTTP 처리 외에 Framework(spring, struts 등)과 같은 특정 솔루션 구성을 위한 미들웨어 플랫폼으로 사용되고 있습니다.

 

 

2. 웹서버의 내부 구조

 

웹서버는 HTTP요청을 받아 HTML, PHP, CGI 등의 화면 처리와 jpg, exe, png 등의 파일을 처리하여 클라이언트로 응답을 전송합니다.

 

웹서버 구조

 

WAS 없이 웹서버를 DB(데이터베이스)와 직접 연결해서 사용이 가능하며 HTML, PHP, CGI와 같은 화면 처리와 exe, avi, jpg, avi 등의 파일 처리가 가능합니다.

 

웹서버의 동작 방식

(1) 클라이언트(사용자, 웹브라우저)가 서버에 요청을 보내고 서버가 해당 요청에 응답하는 것이 기본동작 방식입니다.

(2) 일반적으로 클라이언트는 Chrome, Edge, Safari, FireFox 등의 웹브라우저를 지칭합니다.

(3) 사용자와 웹브라우저는 클라이언트가 되어 서버에 서비스를 요청하고, 서버는 해당 요청에 대해 응답하여 서비스를 제공해 주고 웹브라우저 화면에 결과가 출력되는 것이 웹 어플리케이션의 동작원리 입니다.

(4) 서버 측에서는 웹서버가 최초의 요청과 최종적인 응답을 담당합니다.

 

 

3. WAS의 내부 구조

 

WAS는 HTTP 요청을 받아 JSP, Servle, EJB 를 통해 SQL을 처리한 후 결과를 응답합니다.

 

WAS의 내부 구조

 

WAS의 동작 방식

(1) 웹서버로부터 HTTP 요청을 컨테이너가 전달받습니다.

(2) 요청에 맞는 xml 등의 정보를 참조하여 쓰레드(Thread)를 생성하여 HTTP요청(httpServlet Request) 및 HTTP응답(httpServletResponse) 객체를 생성하여 전달합니다.

(3) 데이터 처리를 위해 DataSource로부터 DB Connection을 할당받아 DB(데이터베이스)로 SQL을 송신합니다.

(4) DB는 요청받은 SQL을 처리하여 결과 데이터를 응답합니다.

(5) 컨테이너는 처리 결과를 HTTP응답 객체에 담아 웹서버로 전달하고 요청 처리를 위해 생성하였던 쓰레드를 종료합니다.

 

쓰레드풀(Thread Pool)을 통한 처리 

WAS는 내부적으로 요청 처리를 이해서 쓰레드를 사용합니다. 이 때 매번 쓰레드를 생성한 뒤 사용하고 종료하는 방식의 처리는 시스템 자원을 매우 많이 사용하기 때문에 낭비가 심하게 발생할 수 있습니다. 이러한 점을 방지하고자 WAS 내에 미리 쓰레드를 여러 개 생성하여 풀(Pool)형태로 가지고 있다가 요청을 처리하는 형태로 동작하도록 구성되어 있습니다.

 

WAS 쓰레드 풀 구조

 

쓰레드 풀을 통한 처리 순서는 다음과 같습니다.

(1) 클라이언트로부터 전달된 요청은 리스너(Listen Thread)을 통해 받은 후 Socket read 쓰레드로 전달하여 read 합니다.

(2) 쓰레드풀의 큐로 전달되어 대기합니다. 쓰레드풀에서 대기하던 쓰레드(wait Thread)가 할당되어 큐에서 요청을 받아서 처리합니다.

(3) 요청을 할당받은 쓰레드는 핸들러를 통해 동작 처리됩니다.

(4) 핸들러를 통해 JSP/Servlet > EJB > DBPool > DB의 순서로 처리됩니다.

 

이때 DB처리를 위한 DB 풀은 쓰레드 풀과 마찬가지로 Pool 형태로 미리 생성되어 사용됩니다.

 

 

4. DB 연결 처리

WAS에서는 각종 데이터처리를 위해서 DB를 연결하여 사용할 수 있도록 기능을 제공하며, Oracle, DB2, Tibero 등 각종 상용DB나 mariaDB, PostgreSQL 등의 오픈DB 사용이 가능합니다.

WAS는 DB를 편리하게 사용할  수 있도록 JDBC ConnectionPool을 제공하며 다음과 같은 장점을 제공합니다.

 

(1) 처리 속도 향상 및 Pool 기능 제공

(2) 접속 ID/Password 에 대한 암호화

(3) 로드벨런싱 및 FailOver

(4) 장애 분석의 용이성

(5) 2PC(Phase Commit)

 

특히 WAS에서 동시에 2개 이상의 DB를 대상으로 DataSource 사용을 지원하며, 2PC(Phase Commit) 으로 처리가 가능하다. 2PC를 사용하는 경우에 별도의 2개 DB를 한 번에 Commit/Rollback 하는 등 트렌젝션의 편리성이 높으나 DB lock 현상 발생 및 처리 성능 저하가 발생할 수 있기 때문에 신중하게 사용하여야 한다.

 

WAS의 2PC(2Phase Commit)기능

 

 

 

'WAS' 카테고리의 다른 글

업무 서버를 추가해보기  (0) 2023.04.20
JEUS 샘플 테스트 페이지 호출해보기  (0) 2023.04.19
JEUS 구조 및 기동하기  (0) 2023.02.17
WAS 설치하기  (0) 2023.01.07