1. Web Serber vs WAS
톰캣은 Web Application Server(WAS)의 일종으로, 동적인 웹 콘텐츠를 서비스하는 서버 프로그램이다.
웹 애플리케이션 서버와 구분되는 개념으로 웹 서버(Web Server)가 있다. 웹 서버는 정적(static)인 데이터와 웹 콘텐츠를 제공해준다.
WAS가 웹서버의 업그레이드 버전이라고 이해해서는 안 된다. 단지 목적과 기능이 다를 뿐이다. 예를 들어, 어떤 웹 사이트가 특별히 사용자의 조건에 따라 동적인 데이터를 계산할 필요가 없으며, 콘텐츠 내용이 업데이트되는 주기도 매우 느리다면 어떻게 될까? 차라리 웹 서버가 나을지도 모른다.
예를 들어, 코로나 현황 보드 웹사이트라면 특별히 사용자 로그인도 요구되지 않는데다, 정보만 예쁘게 잘 꾸며서 보여주는 용도다. 여기에 코로나 정보 업데이트 주기가 실시간이 아니라, 정부 부처가 매일 하루에 한 번 주기로 발표하는 정보에 따라 업데이트된다면..? 굳이 웹 애플리케이션 서버를 구축할 필요는 없을 것이다.
여하튼, 하고 싶은 말은 WAS나 Web Server나 장단점이 있다는 것이다.
2. 톰캣의 Web Server 기능
톰캣은 WAS로서 웹 애플리케이션 서버 기능을 담당한다. 엄밀하게 따지면 웹서버가 아니라 WAS다. 하지만 톰캣은 웹 서버 기능도 내장하고 있다. 실무에서는 WAS와 Web Server를 독립적으로 구축할 수도 있지만, 톰캣의 내장 웹 서버 기능을 활용할 수도 있다.
톰캣의 근본이 웹 애플리케이션 서버이고, 구체적으로 따지자면 URL 패턴에 매핑된 서블릿 코드를 실행하는 서블릿 컨테이너다.
톰캣은 이러한 애플리케이션 서버의 기능을 활용해 웹 서버 기능까지 포괄해 구현한다.
톰캣의 설치 디렉토리의 [conf] 내에는 web.xml 파일이 있다. 이것은 모든 웹 애플리케이션 전체에 적용되는 상위 설정이다. 특정 웹 애플리케이션의 [WEB-INF] 디렉토리의 web.xml 과는 다르다.
이 파일에서도 URL 패턴에 대한 서블릿을 매핑할 수 있다.
파일에는 위와 같이 default servlet과 jsp servlet에 대한 매핑도 보여주고 있다.
"The default resource-serving servlet for most web applications, used to serve static resources such as HTML pages and images."
디폴트 서블릿이 바로 정적 콘텐츠(html, css, js, ...)를 서비스하는 서블릿 코드다. 기본 루트인 / 에 매핑되므로 / URL에 대한 작업을 처리할 수도 있다.
물론 이 web.xml에 대한 매핑 정보는 최후의 수단으로서, 사용자가 자신의 애플리케이션의 WEB-INF 디렉토리 안에 있는 web.xml으로 동일 패턴을 오버라이딩(덮어쓰기)하면 작동하지 않는다. 디폴트 서블릿은 기존의 URL 매핑으로 연결되는 서블릿이나 필터를 찾지 못했을 때 작동한다.
따라서 톰캣을 웹 서버로 사용하는 것이 아주 바람직하다고 볼 수는 없다.
3. JSP 처리
JSP는 요즘 잘 사용하는 편은 아니라고 들었다. 하지만 명색이 JavaEE의 표준 명세이기 때문에 톰캣과 같은 서블릿 컨테이너가 이를 지원하고 있다.
JSP 코드는 겉으로는 html 파일처럼 생겼지만 결국은 서블릿 코드로 컴파일되어 실행되어야 한다. 따라서 이 기능을 담당하기 위해 JSP를 컴파일하고 처리하고 실행하는 애플리케이션(서블릿)이 있어야 하며, 이것이 바로 jsp servlet이다.
역시나 위 그림의 web.xml을 보면 모든 *.jsp 확장자에 대해 JSP Servlet이 받아서 처리한다고 나와 있다. 웹 서버의 동작 원리와 비슷한 원리다.
'IT 공부 > 자바와 웹 애플리케이션' 카테고리의 다른 글
[lombok] - 롬복(lombok) 작동 원리 (어노테이션 프로세서) (0) | 2024.01.02 |
---|---|
[톰캣] - JavaEE(JakartaEE) 스펙 버전 지원 (0) | 2024.01.02 |
[자바] - 어노테이션 정보 읽는 방법 (0) | 2024.01.01 |
[인텔리제이] - 톰캣 실행과 설정 관리 및 프로젝트 배포 환경 (0) | 2024.01.01 |
[인텔리제이] - 자바 웹 프로젝트 설정에 대한 각 요소의 의미 (0) | 2024.01.01 |