WAS와 Server의 차이? 그리고 Web Container 란?

Yuri Lee·2023년 12월 21일
0

WEB

목록 보기
1/1

Web Server란?

클라이언트의 request(요청)을 받아 정적인 컨텐츠(html, css, js)를 response(응답)하는 서버
ex) Apache, Nginx, IIS, WebtoB 등

WAS란?

  • Web Application Server
  • 클라이언트의 request(요청)을 받아 DB조회나, 어떤 로직을 처리해야하는 동적인 컨텐츠를 reponse하는 서버
    ex) Tomcat, WebLogic, WebSphere, Jeus, JBoss 등

둘의 차이점은?

  • 결론적으로 어떤 타입의 컨텐츠(동적, 정적)을 제공하냐는 것
  • 웹서버와 WAS는 각각 독립적으로 존재할 수 있다.
  • 대부분의 WAS는 정적인 컨텐츠를 제공해주고 있기 때문에, 웹서버 없이 WAS만 존재할 수 있다.
  • 즉, WAS는 웹 서버를 포함하는 개념이라고 할 수 있다.

웹 서버를 사용하는 이유?

  • WAS가 웹서버를 포함하는 개념이라면, 왜 굳이 웹서버와 WAS를 같이 사용하는 것일까?
  1. WAS가 해야할 부담을 줄이기 위해서
    -WAS 앞에 웹서버를 둬서 웹서버에서 정적인 문서만 처리하도록 하고, WAS는 애플리케이션의 로직만 수행하도록 기능을 분배해서 서버의 부담을 줄인다.
  2. WAS의 환경설정파일을 외부에 노출시키지 않도록 하기 위해서
    -클라이언트와 연결하는 포트가 직접 WAS에 연결이 되어있다면 중요한 설정 파일들이 노출될 수 있기 때문에 WAS설정 파일을 외부에 노출시키지 않도록 하기 위함.
    -웹 서버와 WAS에 접근하는 포트가 다르기 때문에 WAS에 들어오는 포트에는 방화벽을 쳐서 보안을 강화할수도 있다.

우리가 웹 어플리케이션을 개발할 때 사용하는 Apache Tomcat은 WAS(tomcat)가 웹 서버(apache)기능을 포함하고 있기 때문에 Apache Tomcat이라고 부르기도 하고, 실제로 WAS앞에 웹 서버를 두어서 Apache Tomcat이라고 부르기도 한다.

웹 컨테이너

Apache 는 CGI라는 개념을 지원한다.

CGI란?

  • Common Gateway Interface(공용 게이트웨이 인터페이스)
  • 인터페이스로서, 웹 서버 상에서 프로그램을 동작시키기 위한 방법을 정의한 프로그램
  • 웹 서버와 외부 프로그램 사이에서 정보를 주고 받는 방법이나 규약
  • 쉽게 설명하자면, 두 개 이상의 컴퓨터 간의 자료들을 주고 받는 프로그램, 또는 주고 받는 것 자체의 의미

PHP, Perl, Python 등의 언어는 Apache를 통해 CGI를 적용시키는 것이 가능한데, JAVA는 안된다.
즉, JAVA는 따로 CGI와 같은 기능을 위해 컨테이너라는 것이 필요하다.

웹컨테이너의 정의

  • 웹컨테이너는 Java 서블렛과 상호작용하는 WAS의 구성요소이다.
  • 서블릿의 생명주기를 관리한다.
  1. 서블릿을 로드해 초기화(init)한다.
  2. 클라이언트의 요청으로 서블릿 메소드를 호출한다.
  3. 서블릿 컨테이너가 종료되면 서블릿을 종료시키고(destroy) 메모리를 정리한다. (가비지 컬렉션)
  • 통신을 지원한다.
  1. 웹 서버로부터 받은 요청을 분석해 서블릿을 실행시키고, 서블릿에서는 웹서버의 정보를 확인할 수 있도록 하는 기능을 제공한다.
  2. 서블릿과 웹서버가 서로 통신할 수 있는 쉬운 방법들을 제공한다.
    ServerSock만들기/특정포트에 리스닝/연결 요청이 들어오면 스트림을 생성
  • 멀티스레딩을 지원한다.
    클라이언트의 요청에 따라 서블릿을 생성하고, 이미 생성된 서블릿에 대한 요청을 스레드를 생성해 실행한다.
  • 선언적 보안 관리
    보안에 관련된 내용을 서블릿, 자바 클래스 코드 안에 하드 코딩할 필요가 없다.
    즉, 필요한 데이터나 값, 코드 등을 직접 타이핑해서 집어 넣는 일이 없다.
    보안 관리는 배포 서술자(web.xml)에다가 기록하면 된다.
  • JSP를 지원한다.
  • 쉽게 말해 WAS내부에서 개발자 대신 서블릿을 관리하는 녀석
  • WAS별로 다양한 종류의 컨테이너를 내장하고 있으며, 이들 중 서블릿에 관련된 기능을 모아 놓은 것을 서블릿 컨테이너라고 한다.
  • 서블릿 컨테이너 외에 JSP 컨테이너, EJB컨테이너 등을 내장하고 있고, 다양한 컴포넌트들도 내장하고 잇다.

웹컨테이너의 작동


1. 클라이언트는 웹서버로 request를 보낸다.
2. 서블릿을 포함하는 WAS는 컨테이너로 요청을 보낸다.
3. 컨테이너가 요청을 각 서블릿에게 전달한다.
4. 서블릿 메서드가 로드된다.
5. 서블릿은 컨테이너에 관련 response를 넘겨준다.
6. 컨테이너는 이를 서버에 전달한다. 서버는 응답을 클라이언트에게 전달한다.

Conferences

https://doozi316.github.io/web/2020/09/13/WEB26/

profile
유리

0개의 댓글