웹 서버 구조
톰캣의 내부 구조와 처리과정
1. 클라이언트가 브라우저에서 URL을 요청 (8080포트) - ex) http://www.naver.com/event/list
2. 톰캣의 Thread Pool에서 해당 요청을 받아서 Connector를 통해 HTTP버전에 맞는 요청을 연결해준다.
3. Engine에서 URL에 해당하는 Host로 접근 - ex) www.naver.com
4. 호스트의 각 Context(Spring Project) 로 접근 - ex) /event
5. Context 내부에는 각각의 서블릿이 들어있으며 url에 맞는 서블릿에 접근한다. - ex) /list
6. 해당 서블릿이 실행되고 그 결과를 브라우저에 전송한다.
브라우저 요청 -> 톰캣서버 -> Host -> Context -> Servlet (DispathcerServlet) -> 결과값 응답 순으로 실행된다.
STS에서 요청, 응답 과정을 확인해보자
디버깅을 통해 실행 시 쌓여있는 호출 스택을 통해 Tomcat 내부에서 어떤일이 일어나는지 확인할 수 있다.
톰캣의 내부 설정 파일 - server.xml, web.xml
톰캣설치경로/conf/server.xml : Tomcat 서버 설정 파일
톰캣설치경로/conf/web.xml : Tomcat의 모든 web app의 공통 설정
웹앱이름/WEB-INF/web.xml : 각 프로젝트별 web app의 개별 설정
(sts에서는 프로젝트/src/main/webapp/WEB-INF/web.xml)
server.xml
<Server port="8005" shutdown="SHUTDOWN">
...
<Service name="Catalina">
...
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
...
// Engine은 여러 Host 포함 가능 그 중에서 어떤 host를 디폴트로 설정할지 지정할 수 있다.
<Engine defaultHost="localhost" name="Catalina">
...
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
...
<Context docBase="ch2" path="/ch2_1" reloadable="true" source="org.eclipse.jst.jee.server:ch2"/>
...
- Host
appBase : 해당 폴더 안에 war파일 저장
unpackWARs : war파일로 배포하면 자동으로 압축을 풀라는 설정
web.xml ( 공통 설정)
// 서블릿 등록
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
// 등록한 서블릿을 URL에 매핑
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
web.xml (개별 프로젝트 설정)
// 원격프로그램 등록
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
// URL 매핑
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
원격프로그램을 브라우저에서 요청하려면 서블릿으로 등록하고 URL을 연결해야 한다.
기존에는 web.xml에서 등록했던 것을 Spring에서 어노테이션으로 옮겨졌다. 우린 Spring에서 @Controller, @RequestMapping 어노테이션을 통해 원격프로그램을 연결했다.
'프로그래밍 > Spring' 카테고리의 다른 글
[Spring] Servlet에 대해 간단히 알아보자 (0) | 2021.12.30 |
---|---|
[Spring] 관심사의 분리와 MVC 패턴에 대해 알아보자 (0) | 2021.12.29 |
[Spring] 클라이언트와 서버에 대해 알아보자 (0) | 2021.12.28 |
[Spring] HTTP 요청과 응답에 대해 알아보자 (0) | 2021.12.28 |
[Spring] 원격 프로그램 실행방법에 대해 알아보자 (0) | 2021.12.27 |