본문 바로가기
Develop/CS

Web Server와 WAS 차이부터 연동 방법까지

by 연로그 2021. 1. 28.
반응형

AJP에 관해서 알아보면서 삽질하다보니 웹서버, 와스까지 흘러들어왔다.

찾아보는 김에 개념을 정리해둔다.

 

 

 

서버의 흐름하면 보통 위 그림과 비슷한 형식으로 그려져있다.

 

사용자는 80번 포트를 통해 웹서버(Apache)에 요청을 보내고,

만약, 서블릿이 필요한 요청이라면 웹서버(Apache)가 WAS(tomcat)에 요청을 보낸다.

 

 

웹 서버와 WAS의 차이

Web Server / WAS

Web Server

  • 웹 브라우저 클라이언트로부터 HTTP 요청을 받아들이고 html 문서와 같은 웹 페이지를 반환하는 컴퓨터 프로그램
  • 정적 컨텐츠(html, css, javascript, image, ...)를 제공하는 서버
  • ex: Apache, NGINX, ...

 

WAS; Web Application Server

  • 인터넷 상에서 HTTP 프로토콜을 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어
  • 동적 컨텐츠를 제공하는 서버
  • ex: Tomcat, JBoss, JEUS, ...

 

Tomcat은 따지자면 WAS보단 서블릿 컨테이너에 가깝다.

서블릿 컨테이너는 오직 서블릿 API만 지원하며,

애플리케이션 서버Java EE의 전체를 지원한다. (EJB, JMS, CDI, JTA, 서블릿 API)

WAS라고 부르기엔 EJB 같은 기술이 적용되어 있지 않기 때문에 정확한 말은 아니다.

 

하지만 톰캣은 서블릿 뿐만 아니라 JSP도 실행할 수 있기 때문에 톰캣 == 서블릿 컨테이너라는 말은 약간 제한적이다.

사람마다 분류하는 기준이 다르므로 필요에 따라 구분하면 될 것 같다.

나는 서블릿 컨테이너보다 WAS가 좀 더 큰 개념이다라는 정도의 이해로만 마치겠다.

 

왜 Apache와 tomcat을 연동할까?

-> WAS만 사용할 경우, 동적 데이터에 대한 처리가 늦어질 수 있다.

=> Apache는 웹서버의 역할만, Tomcat 서버는 서블릿 컨테이너 역할만 하도록 기능을 분리하기 위함

 

또는 대규모 사용자가 사용하는 시스템을 구축할 때, 하나의 웹서버에 여러 개의 톰캣을 연결해 부하를 분산시키는 로드밸런싱 구현을 위해 사용할 수 있다.

 

Apache와 tomcat의 연동

 

연동 방법에는 mod_jk, mod_proxy, mod_proxy_ajp 세 가지가 있다.

이 셋의 특징들을 살펴보자.

 

mod_jk

  • 예전부터 가장 많이 사용해왔다. 친숙.
  • tomcat 전용
  • 별도로 설치 필요
  • url이나 컨텐츠 별로 유연한 설정 가능

mod_proxy

  • mod_jk에 비해 설정이 간편하다
  • WAS에 의존적이지 않다.
  • reverse proxy 지원
  • url별 유연한 설정을 위해 ProxyPassMatch 사용 필요

mod_proxy_ajp

  • ajp protocol을 reverse proxy로 사용한다
  • WAS에 의존적이지 않다. 
  • url별 유연한 설정을 위해 ProxyPassMatch 사용 필요

성능 면에서는 mod_jk가 mod_proxy에 비해 압도적으로 좋다고 알려져있지만, apache 2.4 버전부터는 많이 발전되기 시작하며 최근에는 성능상 차이가 크지 않다.

 

 

AJP란? ( Apache Jserv Protocol )

  • Apache가 웹서버와 외부 서비스를 연동하기 위해 정한 규약(프로토콜)
  • 웹 서버의 인바운드 요청을 웹서버 뒤의 애플리케이션 서버를 통해 위임할 수 있는 바이너리 프로토콜

 

Forward Proxy & Reverse Proxy

apache web server의 mod_proxy는 forward proxy와 reverse proxy 두 가지 기능을 다 수행한다.

 

Forward Proxy

클라이언트가 특정 사이트(example.com)에 연결하려고 한다.

forward proxy 서버가 요청을 받고 example.com에 연결해 결과를 클라이언트에 전달해준다.

(사용자 pc가 example.com과 직접 연결 x)

 

forward proxy는 대개 캐싱 기능이 있어 자주 사용되는 컨텐츠일 때 월등한 성능 향상을 가져올 수 있다.

정해진 사이트만 연결하게 설정하는 등 웹 사용 환경을 제한할 수 있으므로 기업 환경에서 많이 사용한다.

 

 

Reverse Proxy

클라이언트가 example.com에 데이터를 요청한다.

Reverse Proxy가 요청을 받아 내부 서버에서 데이터를 받는다.

내부 서버에서 받은 데이터를 클라이언트에 전달해준다.

 

내부 서버가 직접 서비스를 제공하지 않는 이유 보안 때문이다.

 

보통 기업의 네트워크 환경은 DMZ라는 내부-외부 네트워크 사이의 구간이 존재하며, 이 구간에 메일 서버, 웹 서버, FTP 서버 등 외부 서비스를 제공하는 서버가 위치한다. WAS를 DMZ에 놓고 서비스할 수도 있지만, WAS는 보통 DB 서버와 연결된다. WAS가 털릴 경우 DB 서버까지 같이 위협받는 문제가 발생할 것이다.


참고

www.lesstif.com/system-admin/forward-proxy-reverse-proxy-21430345.html

http://en.wikipedia.org/wiki/Apache_JServ_Protocol

cwiki.apache.org/confluence/display/TOMCAT/Connectors

nowonbun.tistory.com/679?category=640790

codechasseur.tistory.com/25

pjh3749.tistory.com/267

 

반응형