본문 바로가기
CS 및 면접 질문

WAS와 WS의 차이점

by ho-bolt 2022. 6. 17.

WS (Web Server )

: 웹서버는 정적인 컨텐츠(html, css, Js)를 제공하는 서버이다.

  • ex) Apache, Nginx

WAS (Web Application Server)

: WAS는 DB를 조회하거나 로직을 처리해야 하는 동적인 컨텐츠를 제공하는 서버이다.

  • ex) Tomcat, Jeus

결국 둘의 차이는 어떤 타입의 컨텐츠를 제공하느냐의 차이이다.

- WAS와 WS는 각각 독립적으로 존재가능하다. 
- 대부분의 WAS는 정적인 컨텐츠를 제공해주고 있기 때문에 웹 서버 없이 WAS만 존재할 수 있다. 
- WAS는 WS를 포함하는 개념이라고 볼 수 있다. 

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

하지만 일반적으로 WS를 WAS 앞 단에 배치하는 데 그 이유는 무엇일까?

WS를 사용하는 이유

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

-   위의 그림처럼 WAS앞에 WS를 두어 서버의 부담을 줄일 수 있다.
-   웹 서버에서 플러그인 형태로 WAS를 연결하여 일 처리를 나누는 것

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

  • 클라이언트와 연결하는 포트가 직접 WAS에 연결이 되어 있다면 중요한 설정 파일들이 노출될 수 있다.
  • 따라서 WAS 설정 파일을 외부에 노출시키지 않도록 하기 위해서 웹 서버를 앞단에 배치시킴
  • 웹 서버와 WAS에 접근하는 포트가 다르기 때문에, WAS에 들어오는 포트에는 방화벽을 쳐서 보안을 강화할 수도 있습니다.

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

  • 자바 웹 애플리케이션을 개발 할 때 주로 사용하는 조합은 아파치와 톰캣이다.
  • 그러면 다른 언어들은 톰캣 같은 WAS가 없을까요?

  • 아파치에는 CGI( Common Gateway Interface )라는 것을 제공해준다.
  • CGI는 이름 그대로 인터페이스로서, 웹 서버 상에서 프로그램을 동작시키기 위한 방법을 정의한 프로그램( 또는 스크립트 )이다.
  • PHP, Perl, Python 등의 언어들은 CGI를 구현해놓았기 때문에, 아파치에서 다양한 언어로 짜여진 각 프로그램을 실행할 수 있다.
ex)

아파치에 PHP 모듈을 설치했을 경우, 요청이 왔을 때 아파치는 HTTTP 헤더를 분석하고 파싱하여 PHP로 파라미터를 넘겨준다.

그러면 PHP에서는 파라미터를 받아 응답 할 HTML 문서를 만들어서 아파치에 전달한다.

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

하지만 자바는 CGI로 구현되어 있지 않다.

자바 자체가 무겁고, Common 라이브러리와 JEE라는 플랫폼이 존재하기 때문에 아파치에서 굳이 CGI를 제공하지 않은 것 같다.

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

 

WAS와 WS 차이 예시

정적 페이지 : 사용자의 요청에 관계없이 항상 동일한 페이지

동적 페이지 : 요청에 맞는 데이터 반환 

 

🤨 메인페이지와 마이 페이지

메인페이지는 불특정 유저가 요청해도 동일한 페이지를 보여준다. 

하지만 마이페이지는 유저가 선택한 서비스, 혹은 즐겨찾기와 같은 내용을 기반으로 페이지가 달라진다. 

WAS는 정적 페이지도 처리가 가능한데 분리하여 배포하는 이유는 더 빠르게 많은 요청을 처리할 수 있기 때문이다. 

 

 

답변 : 

WS는 웹서버로 메인페이지같은 불특정유저가 요청해도 똑같은 데이터를 내려주는 메인페이지와 같은 정적페이지를 처리할 때 사용됩니다. WAS는 마이페이지 같이 DB조회나 어떤 로직처리가 된 요청에 맞는 데이터를 반환해주는 동적 페이지를 처리할 때 사용됩니다. WS의 예시로는 Apache, Nginx가 있고 ,WAS로는 Tomcat, Jeus가 있습니다.

 

 

 

참고

https://victorydntmd.tistory.com/121

728x90

'CS 및 면접 질문' 카테고리의 다른 글

Nginx를 사용하는 이유  (0) 2022.06.19
Javascript this란 무엇일까??  (0) 2022.06.19
동적 바인딩  (0) 2022.06.16
객체지향 프로그래밍이란?  (0) 2022.06.16
Block I/O vs Non-Block I/O  (0) 2022.06.15

댓글