안녕하세요 푸드 테크팀 백엔드 개발자 박형민입니다.
오늘은 온보딩 과제를 하면서, 공부해 본 웹 서버와 웹 어플리케이션에 대해서 포스팅해보고자 합니다.
웹 서버(HTTP Server)는, 소프트웨어의 관점과, 하드웨어의 관점 2 가지로 해석이 가능한 용어입니다.
소프트웨어에서의 HTTP Server
하드웨어에서 HTTP Server
ex)
웹사이트의 컴포넌트 파일들을 저장하는 컴퓨터
컴포넌트 파일에는 html 문서/images/css stylesheets/JavaScript 파일 등
이 컴포넌트 파일들을 최종 소비자의 디바이스에 전달함
웹 서버는 인터넷에 연결되어 있고, 도메인 이름을 통해 접속될 수 있음

정리하자면
웹 서버란, HTTP 또는 HTTPS 를 통해 웹 브라우저에서 요청하는 HTML 문서나 오브젝트(이미지 파일 등)을 전성해주는 서비스 프로그램을 말하며,
웹 서버 소프트웨어를 구동하는 하드웨어 또한 웹 서버라고 불려집니다.
💡 웹 서버의 주 기능은, 웹 페이지 (정적 컨텐츠) 를 클라이언트에게 전달하는 것 입니다.
(정적 컨텐츠 : 그림, CSS, 자바스크립트를 포함한 HTML)
웹 서버의 종류
1. 아파치
2. Nginx
3. IIS
4. GWS
Was - Web Application Server 란, 간단하게 Web Server 에서 처리하지 못하는 동적인 컨텐츠를 처리하는 서버입니다.
클라이언트의 request(요청) 을 받아 DB 조회나, 어떤 로직을 처리해야하는 동적인 컨텐츠를 response(응답)하는 서버입니다.
Web Server 위에 서버 어플리케이션을 얹은 것입니다. ( WAS = Web Server + Web Container)
HTTP 를 통해 컴퓨터나 장치에 웹 어플리케이션을 수행해주는 미들웨어 입니다.
쉽게 말해, 웹 서버(Nginx) 와 웹 어플리케이션 (Spring) 이 통신을 할 떄,, Nginx 는 java 를 알지 못하고, Spring(웹 어플리케이션) 은 웹 서버의 요청이 어떤걸로 들어오는지 모르고 신경도 쓰지 않습니다.
WAS 에서, HTTP 요청을 java 로 바꾸고, JAVA Response를 Nginx 가 알 수 있도록 변환해줍니다.

요롷게 두기도하고, 이 WAS 앞에 Web Server 를 따로 두기도 한다.
웹 컨테이너란. JSP, Servlet을 실행시키는 소프트웨어이다.
그래서 서블릿 컨테이너라고도 불리며, 이 JSP 와 Servlet 은 오직 자바 어플리케이션을 실행시키기 위한 것이다.
Apache 는 CGI 라는 개념을 제공하는데, CGI (공용 게이트웨이 인터페이스) 란, 2개 이상의 컴퓨터 간의 자료들을 주고 받는 프로그램, 또는 주고 받아 프로그램을 동작시키기위한 방법을 정의한 프로그램입니다.
PHP, Perl, Python등의 언어는 Apache를 통해 CGI를 적용시키는 것이 가능한데, JAVA는 안된다고 합니다.
즉, Java는 따로 CGI 와 같은 기능을 위해 컨테이너 라는 것이 필요하고, 이를 WAS 의 웹 컨테이너가 수행합니다.
💡 즉, 웹 컨테이너는 Java 서블렛과 상호작용하는 WAS의 구성요소이며, 자바 어플리케이션을 웹 서버상에서 잘 동작시키기위한 프로그램입니다.
👏🏻 WAS 내부에서 개발자 대신 서블릿을 관리해주는 녀석입니다!


둘의 차이점은, 어떤 타입의 컨텐츠(정적, 동적)을 제공해 줄 것인가
WAS 안에, Web Server 가 있는데 왜 분리 하는거지..? 라고 생각했는데
웹 서버와 WAS 는 각각 독립적으로 존재할 수 있고
대부분의 WAS 는 정적인 컨텐츠를 제공해주고 있기 때문에, 별도의 웹 서버 없이 WAS 만 존재할 수 있다고 합니다.
굳이 WAS와 별도로 Web server, HTTP Server 를 사용하는 이유는
1. WAS 가 해야할 일의 부담을 줄이기 위해서입니다.
WAS 앞에 웹 서버를 둠으로 써, 정적인 컨텐츠의 처리는 웹 서버에 맞기고, WAS 는 어플리케이션의 로직만 수행 가능하도록 기능을 분배해서 서버의 부담을 줄이기 위함입니다.
2. WAS의 환경 설정 파일을 외부에 노출시키지 않기 위해서라고 합니다.
WAS 의 종류
톰캣(Tomcat), WebSphere, Weblogic, JBoss, Jeus
감사합니다! 틀린게 있다면 댓글로 알려주세요
참고 자료
1. 웹 서버란 : https://developer.mozilla.org/en-US/docs/Learn/Common_questions/What_is_a_web_server
2. WAS 와 Server 의 차이,and Web container란 : https://doozi316.github.io/web/2020/09/13/WEB26/
web 서버와 was 서버의 동작과정까지 정리 해주셔서 몰랐던 내용을 알수 있었습니다! 감사합니다.