목차
1. 웹 서버란?
2. Was(Web Application Server)란?
2-2 WAS끼리 통신하는 방법
3. 웹 서버와 WAS(Web Application Server)의 차이는?
웹 서버란 HTTP 프로토콜을 기반으로 클라이언트가 웹 브라우저에서 어떠한 요청을 하면 그 요청을 받아 정적 컨텐츠를 제공하는 서버이다. 정적 컨텐츠란 단순 HTML 문서, CSS, 이미지, 파일 등 즉시 응답 가능한 컨텐츠이다.
이때 웹 서버가 정적 컨텐츠가 아닌 동적 컨텐츠를 요청받으면 WAS에게 해당 요청을 넘겨주고, WAS에서 처리한 결과를 클라이언트에게 전달하는 역할도 해준다.
이러한 웹 서버에는 Apache, NginX 등이 있다.
하지만 정적인 데이터(html)를 응답하다보면 비효율 적인 일이 발생할 수 있다.
그 이유는 만들어진 데이터를 보내주는데 필요 없는 것 까지 같이 보내주기 때문에 비효율 적인 일이 발생하는 것이다.
정적은 만들어진 데이터를 보내주는 것이고
동적은 요청에 따라 필요한 데이터만 만들어서 보내주는 것이다.
좀 더 자세히 설명하면 뉴스의 경우 페이지 내에 여러개의 카테고리로 나눠져 있는데
정적의 경우에는 페이지의 새로고침 없이 서버와 통신하여 내용만 가져오며 오류가 발생하여도 (만들어져 있는 html에 따라서 다르지만) 이제 불러오던 페이지만 페이지를 불러올 수 없다 나오고 이전의 가져왔던 카테고리는 그대로 나오게 된다.
하지만 동적의 경우 페이지를 새롭게 만들어서 가져오기 때문에 새로고침이 발생하며 오류가 발생시 페이지를 불러올 수 없게 되며 이전 카테고리도 불러볼 수 없게 된다.
하지만 뉴스의 경우 최신정보를 제공해 주기 위해서 동적으로 만들어진다는 것을 기억하자
WAS란 DB 조회 혹은 다양한 로직 처리를 요구하는 동적 컨텐츠를 제공하기 위해 만들어진 Application 서버이다. HTTP 프로토콜을 기반으로 사용자 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어로서, 주로 데이터베이스 서버와 같이 수행된다.
WAS는 JSP, Servlet 구동환경을 제공해주기 때문에 서블릿 컨테이너 혹은 웹 컨테이너로 불린다.
이러한 WAS는 웹 서버의 기능들을 구조적으로 분리하여 처리하고자 하는 목적으로 제시되었다. 분산 트랜잭션, 보안, 메시징, 쓰레드 처리 등의 기능을 처리하는 분산 환경에서 사용된다. WAS는 프로그램 실행 환경과 DB 접속 기능을 제공하고, 여러 개의 트랜잭션을 관리 가능하다. 또한 비즈니스 로직을 수행할 수 있다.
Tomcat, Jetty, JBoss, WildFly, WebSphere 등이 대표적인 WAS입니다.
WAS는 PHP, JSP, ASP와 같은 언어들을 사용해 동적인 페이지를 생성할 수 있는 서버이다
이런 프로그래밍 언어를 사용하기 때문에 비즈니스 로직을 수행 가능하다
웹 서버 + 컨테이너 라고 생각할 수 있다
컨테이너 : jsp, servlet을 실행시킬 수 있는 소프트웨어
위와같은 구성으로 동적 컨텐츠를 생성해야 할 때 컨테이너로 보낸다
컨테이너에서 Servlet이 동적 컨텐츠를 생성한다
컨테이너는 생성된 동적 컨텐츠를 클라이언트에게 보낸다
목차로이동
여러 개의 WAS가 동작하고 있는 경우, 이들 사이에서 데이터나 세션 정보 등을 공유해야 할 수 있습니다. WAS끼리 통신하는 대표적인 방법으로는 다음과 같은 것들이 있습니다:
#### 로드 밸런서(Load Balancer)를 통한 통신
여러 개의 WAS를 로드 밸런서로 연결하여 클라이언트 요청을 분산합니다.
로드 밸런서가 WAS에게 요청을 전달하면, WAS 간의 세션 공유를 위해 세션 클러스터링(Session Clustering)을 사용할 수 있습니다.
세션 클러스터링은 WAS들 사이에서 세션 정보를 공유하여 사용자의 요청이 다른 WAS로 전환되더라도 사용자의 상태를 유지할 수 있도록 합니다.
#### 메시지 큐(Message Queue)를 활용한 통신
WAS들은 메시지 큐를 통해 비동기적으로 데이터를 교환할 수 있습니다.
WAS들은 메시지를 큐에 넣고, 다른 WAS는 해당 큐에서 메시지를 가져와 처리합니다.
비동기 통신을 통해 느슨한 결합(Loose Coupling)을 유지하면서 데이터를 주고받을 수 있습니다.
RESTful API 호출
WAS들은 RESTful API를 사용하여 서로 통신할 수 있습니다.
HTTP 기반의 RESTful API를 활용하여 데이터를 요청하고 응답합니다.
스프링 부트를 실행하며 톰캣이 내장되어 있는데 여기서 Rest Api를 이용한 서버끼리의 통신도 was라 볼수있다.
WAS와 웹 서버는 분리하여 서버의 부하를 방지해야 한다. WAS는 DB 조회나 다양한 로직을 처리하고, 단순한 정적 컨텐츠는 웹 서버에서 처리해줘야 한다. 만약 정적 컨텐츠까지 WAS가 처리한다면 부하가 커지게 되고, 수행 속도가 느려질 것이다.
SSL에 대한 암호화, 복호화 처리에 웹 서버를 사용 가능
로드 밸런싱을 위해 웹 서버를 사용할 수 있다. 여러 개의 서버를 사용하는 대용량 웹 어플리케이션의 경우 웹 서버와 WAS를 분리하여 무중단 운영을 위한 장애 극복에 쉽게 대응할 수 있다.
하나의 서버에서 PHP, JAVA 애플리케이션을 함께 사용할 수 있다.
이러한 이유로 웹 서버를 WAS 앞에 두고 필요한 WAS들을 웹 서버에 플러그인 형태로 설정하면 효율적인 분산 처리가 가능하다.
Client -> 웹 서버 - > DB
Client -> WAS -> DB
Client -> 웹 서버 -> WAS -> DB
위에 그림은 3번 구조를 나타낸다. 클라이언트가 웹 서버에 HTTP 요청을 보내면 웹 서버는 정적인 컨텐츠 요청은 바로 응답하고, 동적인 컨텐츠 요청은 WAS에게 넘겨서 처리하고 결과를 WAS에게 받아서 클라이언트에게 넘겨준다.
목차로 이동
1. 웹서버와 was를 분리하여 서버 부하를 방지해야한다.
was단독으로 사용하는 것은 가능하지만 추천하지 않는다. 보안과 로드밸런싱에 손이 많이가며 안될 수도 있다.
웹서버와 was를 분리하면 로드밸런싱으로 웹 서버 하나에 여러대의 was 연결이 가능하여 무중단 운영을 위한 장애 극복에 대응이 가능하다
여러 웹 어플리케이션 서비스가 가능하다
하나의 서버에 php, java애플리케이션을 함께 사용할수있다.