클라이언트와 서버는 각각 client와 server라는 의미의 영어가 어원. 즉 client가 요청(request)하면 server가 응답(response) 해주는 구조. 웹서버는 네트워크상에 공개하는 하이퍼텍스트(HTML 형식의 파일)를 쌓고, 웹 클라이언트가 요청하는 HTML파일을 건네준다.
왜 클라이언트와 서버로 나뉠까?
웹에서 다양한 컨텐츠를 불특정 다수에게 공개하려면 콘텐츠를 적절히 정리하고 관리하는 것이 매우 중요. 웹에 존재하는 대부분의 컨텐츠는 업데이트가 이루어진다. 그런데 이 컨텐츠가 여러곳에 분산돼 있다면 어디에 저장되어있는지 파악하고 동시에 갱신하는게 어렵다. 즉 웹서버와 같이 컴퓨터 하나에 정보를 모아 두는 편이 관리가 수월하다.
웹은 불특정 다수의 사람들이 자유롭게 열람할 수 있어야 하는데 사용자가 웹 서버를 직접 조작하는 것은 비현실적인 일이다. 따라서 사용자의 PC를 웹 클라이언트로 컨텐츠를 관리하는 컴퓨터를 웹 서버로 나눴다.
웹 서버와 WAS(Web Application Server)
웹 서버와 WAS의 차이는 어떤 타입의 컨텐츠를 제공하느냐의 차이이다.
웹서버는 정적인 컨텐츠(html, css, js)를 제공하는 서버이다. 대표적으로 Apache와 Nginx가 있다.
WAS는 DB 조회나, 어떤 로직을 처리해야 하는 동적인 컨텐츠를 제공하는 서버이다. 대표적으로 Tomcat이 있다.
웹 서버와 WAS는 독립적으로 존재할 수 있고, 대부분의 WAS는 정적인 컨텐츠를 제공해주고 있기 때문에, 웹서버 없이 WAS만 존재할 수 있다. 그래서 WAS는 웹 서버를 포함하는 개념이라고 생각할 수 있다.
웹 서버를 사용하는 이유?
WAS가 해야 할 일의 부담을 줄이기 위해서!
WAS 앞에 웹 서버를 둬서 웹 서버에서는 정적인 컨텐츠만 제공하고 WAS는 Application의 로직만 수행하도록 기능을 분배하여 서버의 부담을 줄일 수 있다.
WAS의 환경설정 파일을 외부에 노출시키지 않도록 하기 위해서!
클라이언트를 연결하는 포트가 WAS와 직접 연결이 되어 있다면 WAS의 환경설정 파일이 외부에 노출될 가능성이 있다. 웹 서버를 WAS의 앞단에 배치시켜 클라이언트는 웹 서버 하고만 통신하게 하여 WAS의 보안을 강화시킬 수 있다.