이전 글에서 웹 요청을 위한 HTTP 요청/응답 메시지를 알아보았습니다.

그렇다면 웹 서버에서는 이러한 요청을 어떻게 처리하는 걸까요?


정적인 요청과 동적인 요청, 그 차이는?

자바 웹 개발을 처음 시작할때, Apache Tomcat을 설치하면서 WAS의 역할에 대해 간략하게 배우게 되죠.

WAS의 역할은 동적인 요청을 처리하는 거라고 하는데, 그렇다면 정적인 것과 동적인 것은 어떻게 구분을 할까요?


저도 몇년동안 이걸 어떻게 정의할 수 있을지 고민이 많았습니다만..

핵심은 "정보가 변하는가?" 입니다.

정적인 요청은 한번 위치시켜 놓으면 변하지 않는 정보에 대한 요청인 거고,

(사람의 개입없이 단순히 웹 서버가 작동중일때를 기준)

동적인 요청은 요청의 식별자는 동일해도, 부가적인 정보(HTTP 요청 헤더, 파라미터 변수 혹은 json/xml 형식의 message-body)의 유무나

시간이 지나면서 변하게 되는 데이터인지에 따라

요청할때마다 응답하는 정보가 달라지는 경우를 말하는거죠


그래서 Tomcat같은 WAS는 이런 동적인 요청을 처리하기 위해 HTTP 요청 메시지를 파싱하고,

파라미터나 헤더값, message-body에 따라 동적인 데이터의 저장소 (보통은 DB) 에서 CRUD 같은 지지고볶는 작업을 통해 

가공된 응답을 만들어서 전달하는 것인데요.

(이 부분을 back-end라고 부르죠~)


반면 정적인 요청을 전담하는 웹 서버에서는 요청의 식별자를 요청하는 자원의 상대적인 위치로 인식하고

찾아서 있으면 메시지에 포함하거나 다운로드를 할 수 있도록 응답상태를 Redirect 로 만들어서 보내고,

없으면 응답상태가 403이 되는거죠.


Apache 웹 서버는 이런 정적인 요청을 처리해서 응답하도록 설계/개발된 서버 프로그램이라고 정리할 수 있겠습니다!


정적인 요청과 동적인 요청을 웹서버는 어떻게 구분하지?

아쉽게도 웹서버 자체에서 요청을 받는 시점에 정적인지 동적인지 구분해서 처리할수 있는 방법은 없습니다.

웹 서버는 일단 HTTP 요청 메시지의 URI로 요청 자원을 찾아보고 없으면 설정에 따라 처리할 뿐이죠.


대신 대부분의 웹서버 프로그램들은 WAS와 연동이 가능하도록 플러그인 형태의 모듈을 제공합니다.

이걸 사용하면 웹서버가 먼저 요청을 처리하고 URI에 해당하는 정보 자원이 없으면

이 요청을 WAS에게 넘기는 방식으로 작동합니다.

(아니면 특정 포트를 통해 들어오는 요청은 무조건 WAS에 이관하도록 처리할 수도 있다고 합니다~)


따라서 웹 서버를 본격적으로 다룬다고 하면 설정을 이해할 수 있어야 됩니다.

저도 아직은 미생이지만.. 조만간 Apache 설정법을 정리해볼까 하네요~


번외) Tomcat이랑 다른 WAS도 정적인 요청 다 처리하는데..? 굳이 구분을 왜 하는거야?

..라고 질문하는 분들을 위해

네 맞습니다. 자바 웹 개발 처음 배울때 분명히 tomcat에서 이미지도 처리해주고 css랑 js파일 경로 다 제공해줬죠.

WAS자체만으로도 웹서버로 사용가능한건 맞죠.

다만, 정확히 알아두고 넘어가야 하는 건, WAS로 나오는 서버프로그램들은 Apache 같은 웹 서버의 경량버전을 내포한채로 공개됩니다.

즉, WAS는 사실 동적인 요청을 처리하기 위한 Servlet Container + 경량 웹 서버 모듈인거죠.


자바같이 서버 구현이 가능한 언어에서는 동적인 웹 요청을 처리하기 위한 프로세스를 컨테이너에서 관리하도록 하고,

여기에 웹 서버처럼 작동할 수 있도록 웹 서버의 필수 핵심 기능을 더 붙여서 WAS를 개발한 게 됩니다.

servlet 같은 프로그램 실행 thread의 컨테이너가 WAS의 핵심은 맞지만, WAS == 컨테이너는 엄밀하게 따지면 잘못된거라고 생각되네요.


그래서 WAS에서는 웹 서버에 대한 설정은 깊게 못합니다. 

아예 못한다고 하긴 무리가 있겠지만, 정확히는 웹서버 상의 상당히 많은 설정들이 생략 혹은 default로 박혀버려서

대표적인 몇가지 (HTTPS 및 timeout 정도)를 제외하고는 설정이 불가능 한거죠.


사실 Apache 같은 웹서버를 사용하는 이유라고 하면, 웹으로 유입되는 네트워크 트래픽을 관리하거나

동적인 영역과 정적인 영역을 분리하는게 좋다여서, SI/SM 같은 회사 전산에서는 굳이 필요하지 않을 수도 있습니다.

대신, 웹/모바일 서비스가 회사의 메인인 경우는 트래픽이 많으면 많을 수록 매출로 연결되는데,

안정적인 웹 속도와 사용감을 제공하기 위해서는 웹 서버의 설정이 꼭 필요하고,

실제로도 카카오, 네이버 등의 대형 IT회사에서는 이쪽 전문인력만 따로 뽑아서 키우기도 합니다.


결론은 인터넷을 거쳐 온 후의 서버 측 웹 요청을 중간에 컨트롤할 필요가 있으면 웹서버와 WAS를 분리해서 사용합니다~


Posted by kevin.jeong.
,