본문 바로가기
개발 관련 지식/웹 프로그래밍

WAS

by 권태일1147 2020. 6. 9.

Web Application Server 를 WAS(와스)라고 한다.

먼저 서비스를 제공하는 것은 서버, 그 서버에게 서비스를 요청하는 것은 클라이언트라고 한다. 웹 서버와 웹 브라우저가 대표적인 서버와 클라이언트의 관계이다.

 

다음은 DBMS와 클라이언트의 관계이다.

DBMS는 다수의 사용자들이 데이터베이스 안의 데이터에 접근할 수 있게 해주는 소프트웨어이다.

DBMS가 등장하기 전에 개발자들은 파일에 데이터를 저장하고 읽어들이는 기능을 모두 구현해야 했다. 이런 불편함을 개선하기 위해 DBMS가 등장하게 되었다.

DBMS는 보통 서버 형태로 서비스를 제공하기 때문에 이런 DBMS에 접속해서 동작하는 클라이언트 프로그램이 많이 만들어졌다. 근데 이런 방식의 문제점은 클라이언트의 로직이 많아지고 클라이언트 프로그램의 크기가 커진다는 문제가 있었다. 프로그램 로직이 변경되면 클라이언트가 매번 배포되어야 한다는 문제가 있었고, 대부분의 로직이 클라이언트에 포함되어 배포가 되기 때문에 보안이 나쁘다는 문제들을 가지고 있었다.

그래서 등장한 것이 미들웨어(MiddleWare) 라는 개념이다. 클라이언트와 DBMS 사이에 또 다른 서버를 두는 방식이다. 클라이언트는 중앙에 있는 미들웨어 역할의 서버에게 요청만 보내고, 미들웨어 역할의 서버는 로직을 수행하고, 데이터를 조작해야하면 DBMS에 요청한다. 그리고 그 결과를 클라이언트에 전송하면 클라이언트는 그 결과를 화면에 보여준다. 이렇게 하면 클라이언트는 복잡한 로직이 사라지고 화면에 결과만 보여주면 되기 때문에 사용자로부터 입력만 받아서 미들웨어에게만 보내는 역할만 하면 된다. 그래서 클라이언트 프로그램의 크기가 작아진다. 그리고 프로그램 로직이 변경된다하더라도 모든 클라이언트를 다시 배포할 필요 없이 중앙의 미들웨어만 변경하면 되는 장점이 생긴다.

 

WAS

최초의 웹이 등장했을 때 웹 브라우저는 정적 데이터만 보여주었다. 웹의 사용량이 많아지면서 사용자들의 요구 사항이 점점 커지게 되었고, 웹에서 데이터를 입력하고 조회하는 등 동적인 기능을 요구하게 되었다. 동적인 기능은 프로그래밍을 통해서 가능했다. 웹 서버에서 프로그래밍 기능이 들어가는 방식을 CGI라고 불렀다. CGI는 단순한 프로그래밍에서 사용할 시에는 문제가 없었으나, 웹이 점점 복잡해지면서 복잡한 프로그래밍적 기능을 요구하게 되었다. 보통 이런 복잡한 프로그래밍 기능은 DBMS와 연관된게 많았고, 브라우저와 DBMS 사이에서 동작하는 미들웨어가 필요하게 된 것이다. 이런 미들웨어를 WAS라고 말한다.

WAS가 가지는 중요한 기능 세가지가 있다.

  1. 프로그램 실행 환경과 데이터베이스 접속 기능
  2. 여러 개의 트랜잭션을 관리
  3. 업무를 처리하는 비즈니스 로직을 수행

이외에도 다양한 기능을 제공한다. 웹 서버의 기능도 기본적으로 제공한다. Apache라는 웹 서버를 같이 설치하지 않고 tomcat이라는 WAS만 설치해도 tomcat이 가지고 있는 웹 서버가 충분한 기능을 한다. 하지만 규모가 커질수록 웹 서버와 WAS를 분리해서 사용한다.

웹 서버는 정적인 컨텐츠를 전송하는 역할, WAS는 동적인 결과를 전송하는 역할을 한다.

WAS 자체에 문제가 발생할 경우 WAS를 재시작 해야하는 경우가 생기는데, 문제가 있는 WAS를 재시작할 때, 앞단의 웹 서버에서 먼저 해당 WAS를 이용하지 못하도록하고, WAS를 재시작한다면 웹 애플리케이션을 사용하는 사람은 해당 WAS에 문제가 생겼는지 모르고 이용할 수 있다.이런 처리를 장애 극복 기능이라고 한다. 웹 애플리케이션을 무중단으로 사용하기 위해 중요한 기능이다. 이러한 기능 때문에 보통 웹 서버가 WAS 앞단에서 동작하도록 한다.

 

'개발 관련 지식 > 웹 프로그래밍' 카테고리의 다른 글

멀티 쓰레드  (0) 2022.02.06
동기 비동기, 싱글스레드 멀티스레드  (0) 2021.01.29
웹서버  (0) 2020.06.09
웹 프론트엔드, 백엔드  (0) 2020.06.04
HTTP 프로토콜  (0) 2020.06.04