WEB

[Web] Web Server(웹서버, 아파치) 와 WAS(톰캣) 이해하기

포포015 2021. 6. 23. 23:10

1. 웹 서버와 WAS(web Application Server)

  • 웹 서버는 정적인 컨텐츠(html,css,js)를 제공하는 서버 ex) Apache, Nginx
  • WAS 는 DB조회나, 어떤 로직을 처리해야 하는 동적인 컨텐츠를 제공하는 서버 ex) Tomcat, jeus

 

즉 웹서버와 WAS의 차이는 어떤 타입의 컨텐츠를 제공하느냐의 차이이다.

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

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

그래서 WAS는 웹 서버를 포함하는 개념이라고 생각해도 될 것같다.

 

WAS 자체로 웹서버의 역할을 수행하기 때문에 무조건적으로 웹서버를 앞단에 두어야할 이유는없다.

그런데 일반적으로 웹서버를 WAS 앞단에 배치하게 되는데 ,

WAS만 사용하면될것이지 왜 웹서버를 앞단에 배치하는 구조를 사용할까?

 

2. 웹서버 사용 이유

1) WAS가 해야할 일의 부담을 줄이기 위해서

WAS 앞에 웹서버를 둬서 웹서버는 정적인 문서만 처리하도록하고, WAS는 애플리케이션의 로직만 수행하도록

기능을 분배하여 서버의 부담을 줄이기 위한것.

위의 그림처럼 WAS앞에 웹서버를 둠으로써 서버의 부담을 줄일수 있다.

웹 서버에서는 플로그인 형태로 WAS를 연결하면 일처리를 나눌수 있을것이다.

 

2) WAS의 환경설정 파일을 외부에 노출시키지 않도록 하기 위해

클라이언트와 연결하는 포트가 직접 WAS에 연결되어 있다면 중요한 설정파일들이 노출될수 있기때문에,

WAS설정파일을 외부에 노출시키지 않도록 하기 위해 웹서버를 앞단에 배치한다.

웹서버와 WAS에 접근하는 포트가 다르기때문에, WAS에 들어오는 포트에는 방화벽을 쳐서 보안을 강화할수도 있다.

 

3) 아파치(Apcahe)와 CGI, 그리고 톰캣(Tomcat)

자바 웹 애플리케이션을 개발할때 주로 사용하는 조합이 아파치 와 톰캣 일것이다.

그러면 다른 언어들은 톰캣같은 WAS가 없을까?

 

 

아파치에는 CGI(Common Gateway Interface) 라는것을 제공한다.

CGI는 이름 그대로 인터페이스로서, 웹서버 상에서 프로그램을 동작시키기 위한 방법을 정의한 프로그램

(또는 스크립트) 이다

 

즉 PHP , Perl, Python 등의 언어들은 CGI를 구현해 놓았기때문에 , 아파치에서 다양한 언어로 짜여진

각 프로그램을 실행할수 있다.

 

예를 들어 아파치에 PHP 모듈을 설치 했을경우, 요청이 왔을때 아파치는 HTTP 헤더를 분석하고

파싱하여 PHP로 파라미터를 넘겨준다. 그러면 PHP에서는 파라미터를 받아 응답할 HTML 문서를 만들어 

아파치에 전달한다.

HTML 문서를 전달 받은 아파치는 CSS, JS, img 등 정적인 자원들과 함께 브라우저로 반환한다.

 

그런데 자바는 CGI로 구현되어 있지않다.

자바 자체가 무겁고, Common 라이브러리와 JEE 라는 플랫폼이 존재하기 때문에

아파치에서 굳이 CGI를 제공하지 않은거 같다.

그렇기때문에 톰캣은 Default Servlet을 통해 정적인 파일을 제공해주기때문에 웹서버의 역할을

할수 있는것이다. (그럼에도 웹서버를 두는이유는 앞에 언급했다.)

 

 

출처 - https://victorydntmd.tistory.com/121