Web Server 와 WAS

2022. 5. 9. 02:47Spring

기본적으로 Web은 여러 가지 프로토콜이 있지만 HTTP을 사용하고 URL, HTML을 이용하여 컨텐츠를 제공한다.

 

서버는 클라이언트 - 서버 환경에서 

클라이언트에게 네트워크를 통해 정보와 서비를 제공하는 하나의 컴퓨터 시스템 혹은, 프로그램이다

 

예를 들어

브라우저에서 특정 주소로 규칙에 맞게 HTTP요청을 하면 클라이언트의 요청을 기다리고 있던 서버는 해당 요청에 맞는 컨텐츠( Html, CSS, Image )를 제공한다  

 

즉 정적인 컨텐츠를 제공한다고 볼 수 있다. View 서빙 하는 것이 주 목적이라고 할 수 있다.

하지만 WAS는 좀 더 큰 개념이라고 할 수 있다.

 

WAS는 Web Container를 제공하여 JSP 이나 Servlet 더 나아가 DB와의 연결 또한 가능하게 한다.

 

즉 단순하게 설명하자면 Web Server는 HTML, CSS, Image 등의 정적인 컨텐으를 제공하고

Web Container는 DB와 JSP, Thymeleaf 같은 탬플릿 엔진을 이용하여 동적인 HTML을 제공하거나 나 나아가 JSON, 등의 여러 데이터들을 제공 할 수 있다.

 

예를 들면 현재 이용자의 정보를 홈페이지에서 띄워주거나 ex) ~님 안녕하세요

그때 그때 마다 다른 정보들을 제공할 수 있다

 

기존에는 WAS가 Web Server 또한 들고 있었지만 현재에서는 WAS와 Web Server를 분리한다.

 

그 이유는 

 

첫째 기능을 분리하여 서버의 부하를 줄인다.

- WAS는 DB와 비지니스 로직관련하여 집중하여 제공하고 Web Server는 이를 서빙 하는데 집중 하도록 한다.

  만약 기존 처럼 WAS가 Web Server 까지 들고 있었다면 WAS가 감당해야 하는 부하는 더 증가할 것이다.

 

둘째 보안을 강화한다

- 클라이언트에게 요청이 들어오면 Web Server가 이를 1차적으로 받고 이 후에 WAS로 넘어가는 방식을 사용하여

  SSL 관련 암복호화를 Web Server가 담당하고 공격에 대해 Web Server를 앞단에서 처리하게 하여 중요한 정보가 담긴 

  WAS까지 전파되지 못하게 한다.

- 또한 WAS의 위치, 주소 (IP) 등을 감출 수 있다. 기본적으로 Web Server가 요청을 받고 이를 WAS로 Web Server가

  직접적으로 다시 요청을 전달하는 방식이기 때문에 클라이언트에게 WAS의 주소나 안의 코드 혹은 파일들을 숨긴다. 

 

셋째 여러 대의 WAS를 연결할 수 있다.

- Web Server는 각 서버 ( 여기선 WAS라 칭함 )의 부하 정도에 따라 트래픽을 분산하는 등

  여러 최적화 작업을 도맡아 한다. 이를 통해 WAS 한대에 몰리는 트래픽을 분산시키고 서버가 죽는 현상을 방지 할 수    있다.

- 또한 한 WAS에서 서버가 죽는다고 하더라도 다른 WAS를 통하여 지속해서 서비스를 제공할 수 있다. 

  즉 서버가 한대가 죽는다고해도 다른 WAS에서 서비스를 지속하기 때문에 무중단 운영을 제공 할 수 있고

  장애 극복에 있어서도 비교적 쉽게 대응이 가능하다.

 

 넷째 서로 다른 종류의 프레임워크 혹은 언어로 서비스가 가능하다

- 언어 혹은 프레임워크 별로 각자가 갖는 장점과 단점이 있다. 하지만 만약 WAS를 하나 밖에 사용 하지 못한다면

  서비스의 확장성과 품질은 낮아질 것이다. 이렇게 Web Server와 WAS를 따로 둠으로써 인공지능 혹은 데이터 분석이   필요한 곳에는 Python을 사용하거나 빠른 실시간 처리가 필요한 로직들은 JS 프레임 워크를 사용하고 

 안정성이 중요시 되는 Main WAS에는 스프링을 사용하는 등 여러 서비스들에 대하여 좀 더 유연하게 대처 할 수 있다.

 

Web Server의 종류

Apache, Nginx가 가장 많이 사용된다 이 중 에서도 Nginx가 가장 널리 사용되는 추세이다

 

WAS의 종류

톰캣, Jetty, Undertow

 

스프링 부트는 기본적으로 톰캣을 내장하고 있다.

 

 

 

마치며

 

기본적이기도 하고 이미 몇번을 본 내용이지만 기록을 하지 않고 하다보니 자꾸만 까먹는 경향이 있는 것 같다.

앞으로 배운 것을 하나하나 씩 적을 필요가 있는것 같다.

블로그도 쉬지 않고 작성하자