웹 서버(Web Server)
우리가 흔히 말하는 웹 서버는 무엇일까?
웹 서버의 구성요소인 웹(Web)과 서버(Server)를 분리해서 생각해보자.
Web은 인터넷을 기반으로 정보를 제공해주고, 검색할 수 있게 해주는 서비스를 제공하는 시스템을 말한다.
Server는 서빙하는 사람이라는 단어에서 알 수 있듯이 클라이언트에게 네트워크를 통해 정보나 서비스를 제공해주는 컴퓨터 시스템이다.
그러면 이 두 단어가 합쳐진 웹 서버는 무엇일까?
웹 서버(Web Server)는 인터넷을 기반으로 클라이언트에게 웹 서비스를 제공하는 컴퓨터를 의미한다.
클라이언트는 주소(URL)를 가지고 통신 규칙(HTTP) 알맞게 웹 서버에게 요청하면 알맞은 내용(HTML)을 응답받을 수 있는 것이다.
정리하자면 웹 서버는 클라이언트 요청을 항상 기다리고 있다.
클라이언트가 웹 서버에게 요청을 보내면, 해당 요청에 알맞는 데이터들을 내려주는 형태이다.
이때 웹 서버는 HTML, CSS, 이미지 등과 같은 정적인 데이터만을 응답해 줄 수 있다.
여기서 정적인 데이터가 이해하기 어려울 수 있다.
쉽게 말하자면 모든 클라이언트에게 똑같은 데이터만 제공해 줄 수 있는 것이다.
예를 들면, 학생에게는 문제집 정보를 선생님에게는 교육 자료 정보를 제공해줘야 하는 홈페이지가 있다고 해보자.
정적 데이터를 제공해주는 홈페이지는 고정된 데이터만 보여줄 수 있기 때문에 학생과 선생님 누가 들어오든 문제집 정보만 보여주거나 교육 자료 정보만 보여주거나 혹은 둘 다를 보여줘야 한다.
학생과 선생님. 각각의 클라이언트에 따라 적절한 데이터를 제공해 줄 수는 없을까?
이런 필요성이 생기게 되면서 클라이언트에 따라 변화하는 데이터인 동적 데이터를 내려주고 싶다는 욕구가 생긴 것이다.
웹 애플리케이션 서버(WAS)
앞서 말한 동적 데이터를 내려주는 방법으로 웹 애플리케이션 서버(WAS)가 등장했다.
웹 애플리케이션 서버(WAS)는 웹 애플리케이션과 서버 환경을 만들어 동작시키는 기능을 제공하는 소프트웨어 프레임워크이다.
웹 서버는 요청을 받고 동적 처리가 필요한 데이터는 웹 애플리케이션으로 넘긴다.
웹 애플리케이션을 실행시켜 필요한 기능을 수행하고 그 결과를 웹 서버에게 다시 전달한다.
이후에 웹 서버는 이를 클라이언트에게 전달함으로써 동적 데이터를 클라이언트에게 전달할 수 있게 된 것이다.
이러한 WAS는 대부분 Web Server를 포함하는 Web Server + Web Container로 구성된다.
Web Server는 HTML, CSS, 이미지 등의 정적 데이터를 처리하고, Web Container는 JSP, Servlet, ASP, PHP 등의 동적 데이터를 처리하는 구조이다.
Web Container는 동적 데이터를 처리하는 과정에서 DB 조회를 통해 데이터를 저장하고, 가져올 수 있다.
웹 서버와 웹 애플리케이션 서버의 구분
이제 웹 서버와 웹 애플리케이션 서버에 대해 알았을 것이다.
간단하게 요약하자면, 웹 서버와 웹 애플리케이션 서버의 차이는 상황에 따라서 변하는 데이터를 제공할 수 있는가의 차이이다.
이러한 웹 서버에는 대표적으로 Apache, Nginx 등이 있으며, WAS에는 Tomcat, IBM, JEUS 등이 있다.
자, 여기서 몇 가지 궁금한 점이 생겼을 수도 있다.
앞서 소개한 WAS 이미지를 보면, WAS 내부에 Web Server와 Web Container로 구성된 것을 볼 수 있다.
그러면 WAS만으로도 Web Server, Web Container 역할을 할 수 있다는게 아닐까?
그러면 왜 Web Server가 따로 필요한거지? 등의 의문을 품을 수 있다.
답을 말하자면, WAS만으로도 충분히 정적 데이터와 동적 데이터를 클라이언트에게 모두 제공할 수 있다.
하지만 웹 서버와 웹 애플리케이션 서버는 다음과 같이 분리하여 서버를 구축하는 것이 좋다.
웹 서버와 웹 애플리케이션 서버를 분리함으로써 하나의 서버에만 부담되던 요청을 분리하여 서버 부하를 방지할 수 있다.
또한, 비교적 민감한 데이터를 다루는 WAS 부분과 Client 요청 사이에 Web Server가 위치함으로써 보안적으로도 보다 안전할 수 있다고 할 수 있다.
이러한 장점 외에도 여러 대의 WAS를 하나의 웹 서버에 연결하여 사용할 수 있다는 장점이 있다.(로드밸런싱)
웹 서버 설정으로 이러한 로드 밸런싱이 가능하다. 이에 따라 여러 개의 WAS 서버를 연결할 수 있게 해 주고, 혹시라도 하나의 WAS 서버가 문제가 발생하여 멈추더라도 멈춘 WAS가 복구되는 동안 다른 WAS가 있기 때문에 정상적인 서버 응답을 수행할 수 있다.
또한, 여러 WAS에 요청을 분산하여 줄 수 있는 것이 가능해져서 요청에 대한 부담을 나눌 수도 있다.
여러 대의 WAS를 사용하면 여러 웹 애플리케이션 서비스가 가능하다는 장점도 있다.
예를 들어, 하나의 WAS는 Java로 만들고, 하나는 PHP, 하나는 Python 등 각 WAS를 원하는 언어를 바탕으로 구현할 수 있는 것이다.
참고
https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html
'👨💻 개발' 카테고리의 다른 글
깃(Git), 깃허브(Github) 활용하기 (0) | 2021.12.28 |
---|---|
스프링과 스프링부트 차이(Spring vs Spring boot) (0) | 2021.12.11 |
서블릿(Servlet)이란? 서블릿에서 스프링까지 (0) | 2021.12.11 |
IAM이란? (0) | 2021.12.08 |
SpringBoot에 CloudFront 적용 (0) | 2021.12.07 |