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가 있습니다.
참고
'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 |
댓글