웹서버와 WAS의 차이?

  • Web Server
    • 정적 컨텐츠를 반환하는 기능
      • 서버 사이드 프로세싱이 필요 없는 단순 html, css, js같은 것.
    • 예) Apache, IIS, nginx
  • Web Container
    • 서버 사이드 프로세싱이 필요한 동적 페이지를 resolve하는 기능
      • 예를 들면 JSP같은 것.
    • 이렇게 만든 페이지를 반환해주지는 못함.
  • WAS
    • WAS = Web Server + Web Container
    • 즉, 동적 컨텐츠 resolve & 반환하는 기능
    • 예) Tomcat
 
 

WAS에 웹서버가 내장되어 있는데, 별도로 웹서버를 따로 두는 이유?

아래와 같은 이유로 보통 앞단에 apache나 nginx같은 Web Server를 별도로 두고 reverse proxy를 통해 Tomcat으로 forwarding해주는 방식으로 많이 쓴다.

 

부하 분산

WAS는 동적 컨텐츠를 반환하게 되는데, 동적 컨텐츠를 반환한다는건 즉 비즈니스 로직을 처리한 다음 결과를 return해준다는 것과 같다.
웹서버와 WAS를 나누게 되면 WAS는 비즈니스 로직을 처리하고 동적 컨텐츠를 반환하는데 집중하고, 웹 서버는 기타 잡다한 일들을 도맡아 처리할 수 있다.
  • 정적 컨텐츠는 WAS까지 전달하지 않고 Web Server에서 받자마자 바로 리턴해주면 WAS의 부담을 덜 수 있다.
  • SSL을 적용할 때 암/복호화 처리도 Web Server단에서 해주면 WAS는 비즈니스 로직 처리에만 집중할 수 있다.
  • 방화벽, 세션 관리 등을 Web Server에서 처리 가능
  • FE는 웹서버에서 바로 내려주고, api call만 WAS에서 받아 처리하는 식으로 동작할 수 있음
 

Reverse Proxy를 통해 Web Server 1 : N WAS 구조가 가능

  • 웹서버가 reverse proxy 역할을 함
    • 요청 domain이나 location에 따라서 각기 다른 WAS로 forwarding 해줄 수 있음
    • Web Server와 WAS가 같은 물리장비에 떠 있을 때도 가능.
  • 보통 L4 switch를 별도로 두게 되지만, Web Server가 L4 switch 역할을 할 수도 있음.
    • 로드 밸런서 역할
    • 무중단 배포가 가능하다.
  • [nginx] reverse proxy 설정   
  • SSL 인증서나 URL whitelist / IP whitelist 설정을 한대에서 처리 가능
    • 물려 있는 WAS가 여러 대이거나, (WAS, Kibana) 등 앱서버가 여러 대 인 경우 각자 SSL 처리 하기 보다는 웹서버에만 인증서 세팅하면 관리하기 용이함
    • 그래서 WebServer <> WAS 구간은 http로 두는 경우 많음.

 

Apache와 nginx 차이

  • Apache
    • request를 multi-thread 기반으로 처리
    • httpd.conf에 사용할 모듈 명시
  • nginx
    • request를 async event-driven 기반으로 처리
    • 사용할 모듈을 아예 nginx 컴파일 시 명시해서 바이너리에 포함시켜버림

 

참고

 

'DevOps & Server' 카테고리의 다른 글

[CI/CD] 젠킨스 Jenkins  (0) 2019.05.09
vagrant  (0) 2018.11.02
ansible 앤서블 설명  (0) 2018.10.30
docker  (0) 2018.10.27
AWS, Google Cloud, Oracle Cloud 비교  (0) 2017.04.22