HTTP 서버 (웹 서버) vs WAS (Web Application Server)

푸드테크·2022년 7월 15일

안녕하세요 푸드 테크팀 백엔드 개발자 박형민입니다.

오늘은 온보딩 과제를 하면서, 공부해 본 웹 서버와 웹 어플리케이션에 대해서 포스팅해보고자 합니다.



1. HTTP server (Web Server)

HTTP servser 란

웹 서버(HTTP Server)는, 소프트웨어의 관점과, 하드웨어의 관점 2 가지로 해석이 가능한 용어입니다.

소프트웨어에서의 HTTP Server

  • 웹 브라우저와 같은 "클라이언트" 로 부터 HTTP 프로토콜로 요청을 받고, 요청에 대해 HTML 문서와 같은 정적인 웹 페이지를 응답해주는 소프트웨어 입니다.

하드웨어에서 HTTP Server

  • 위와 같은 기능을 제공하는 컴퓨터 프로그램을 실행하는 하나의 컴퓨터 입니다.

ex)


웹사이트의 컴포넌트 파일들을 저장하는 컴퓨터
컴포넌트 파일에는 html 문서/images/css stylesheets/JavaScript 파일 등
이 컴포넌트 파일들을 최종 소비자의 디바이스에 전달함
웹 서버는 인터넷에 연결되어 있고, 도메인 이름을 통해 접속될 수 있음

정리하자면

웹 서버란, HTTP 또는 HTTPS 를 통해 웹 브라우저에서 요청하는 HTML 문서나 오브젝트(이미지 파일 등)을 전성해주는 서비스 프로그램을 말하며,
웹 서버 소프트웨어를 구동하는 하드웨어 또한 웹 서버라고 불려집니다.

💡 웹 서버의 주 기능은, 웹 페이지 (정적 컨텐츠) 를 클라이언트에게 전달하는 것 입니다.
(정적 컨텐츠 : 그림, CSS, 자바스크립트를 포함한 HTML)



웹 서버의 종류

1. 아파치
2. Nginx
3. IIS
4. GWS






2.WAS 란

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 를 따로 두기도 한다.

Web Container

웹 컨테이너란 (서블릿 컨테이너란)


웹 컨테이너란. JSP, Servlet을 실행시키는 소프트웨어이다.
그래서 서블릿 컨테이너라고도 불리며, 이 JSP 와 Servlet 은 오직 자바 어플리케이션을 실행시키기 위한 것이다.

  • Apache 는 CGI 라는 개념을 제공하는데, CGI (공용 게이트웨이 인터페이스) 란, 2개 이상의 컴퓨터 간의 자료들을 주고 받는 프로그램, 또는 주고 받아 프로그램을 동작시키기위한 방법을 정의한 프로그램입니다.

  • PHP, Perl, Python등의 언어는 Apache를 통해 CGI를 적용시키는 것이 가능한데, JAVA는 안된다고 합니다.

  • 즉, Java는 따로 CGI 와 같은 기능을 위해 컨테이너 라는 것이 필요하고, 이를 WAS 의 웹 컨테이너가 수행합니다.


💡 즉, 웹 컨테이너는 Java 서블렛과 상호작용하는 WAS의 구성요소이며, 자바 어플리케이션을 웹 서버상에서 잘 동작시키기위한 프로그램입니다.

👏🏻 WAS 내부에서 개발자 대신 서블릿을 관리해주는 녀석입니다!



웹 컨테이너의 동작 과정

  1. 클라이언트는 웹서버로 Request(요청)을 보냅니다.
  2. 서블릿을 포함하는 WAS는 컨테이너로 요청을 보냅니다.
  3. 컨테이너가 요청을 각 서블릿에게 전달합니다.
  4. 서블릿 메소드가 로드됩니다.
  5. 서블릿은 컨테이너에 관련 Response (응답) 을 넘겨줍니다.
  6. 컨테이너는 이를 서버에 전달하고, 서버는 응답을 클라이언트에게 전달합니다.






WAS 의 내부 동작 과정

  1. 웹 서버로 부터 요청이 들어오면, 제일 먼저 컨테이너가 이를 처리합니다.
  2. 컨테이너는 배포서술자(Web.xml) 을 참조하여 해당 서블릿에대한 스레드를 생성하고 요청( httpServletRequest ) 및 응답 (httpServletResponse) 객체를 생성하여 전달합니다.
    • 스레드란? - 프로세스 내에서 실제 작업을 수행하는 주체
  3. 컨테이너는 사용자가 요청한 URL을 분석하여 어느 서블릿에 대한 요청인지 찾는다.
  4. 컨테이너는 서블릿을 호출 (service() ) 하여. HTTP Method 요청에 따라 메소드를 호출합니다.
    5 .호출된 메소드는 동적 페이지를 생성한 후 HttpServletResponse 객체에 실어 컨테이너에 전달한다.
  5. 컨테이너는 전달 받은 객체를 웹 서버에 전달하고 생성되었던 스레드르 종료하고 요청 ( HttpServletRequest ) 및 응답 (HttpServletResponse ) 객체를 소멸시킵니다.






3. Web Server vs WAS

둘의 차이점은, 어떤 타입의 컨텐츠(정적, 동적)을 제공해 줄 것인가

WAS 안에, Web Server 가 있는데 왜 분리 하는거지..? 라고 생각했는데

웹 서버와 WAS 는 각각 독립적으로 존재할 수 있고

대부분의 WAS 는 정적인 컨텐츠를 제공해주고 있기 때문에, 별도의 웹 서버 없이 WAS 만 존재할 수 있다고 합니다.



그렇다면 Web Server를 사용하는 이유는?

굳이 WAS와 별도로 Web server, HTTP Server 를 사용하는 이유는

1. WAS 가 해야할 일의 부담을 줄이기 위해서입니다.

WAS 앞에 웹 서버를 둠으로 써, 정적인 컨텐츠의 처리는 웹 서버에 맞기고, WAS 는 어플리케이션의 로직만 수행 가능하도록 기능을 분배해서 서버의 부담을 줄이기 위함입니다.


2. WAS의 환경 설정 파일을 외부에 노출시키지 않기 위해서라고 합니다.

  • 클라이언트가 WAS 의 포트를 직접 연결하게 된다면, 중요한 설정 파일들이나 암호키들이 노출 될 가능성이 있습니다.
  • 따라서, Web Server 를 통해서만, WAS 에 접근하게 함으로써, 웹 서버와 WAS 에 접근하는 포트가 다르기 때문에 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/
  
profile
푸드 테크 기술 블로그

1개의 댓글

comment-user-thumbnail
2022년 7월 22일

web 서버와 was 서버의 동작과정까지 정리 해주셔서 몰랐던 내용을 알수 있었습니다! 감사합니다.

답글 달기