6. Tomcat의 설정 파일 - sever.xml, web.xml
web.xml은 톰캣에 있는 web.xml과 STS prj에 있는 web.xml 2가지가 있다. 톰캣의 모든 web app의 공통 설정으로 먼저 실행 한 다음에 STS prj의 web.xml 개별 설정으로 넘어간다. 공통 설정 web.xml의 경로는 톰캣 설치 경로/config/web.xml에 있고(1개) 개별 설정 web.xml은 프로젝트, context마다 있다.
❓ XML(Extensible Markup Language)은 데이터를 정의하는 규칙을 제공하는 마크업 언어
Package Explorer의 Server 항목을 보면 Tomcat v9.0 하위 항목에 공통 설정 web.xml이 있다. 뒤에 나오겠지만 이 web.xml이 먼저 실행되고 나서, 개별 설정 web.xml에 중복된 코드가 있으면 대체된다.
실제로는 tomcat을 설치한 폴더의 conf 폴더에 web.xml이 있다. 이 파일을 복사해서 STS는 복사본을 갖고 따로 관리할 수 있게한다. 왜 이렇게 해야할까? 개별적으로 복사본을 갖고 실행해야 STS에서 여러 개 서버 설정을 두고 각기 다른 서버를 실행 할 수 있다. Test server, Administration server, Operating server 등 설정을 다르게 해서 서버를 구동할 수 있는 장점이 있다. 따라서 Tomcat에 있는 web.xml 원본 파일은 두고 STS에서 이 파일을 복사해서 사용하는 이유이다.
STS sever.xml을 바꾸더라도 Tomcat 폴더에 있는 web.xml과는 전혀 상관이 없다. 따라서 STS에서 바꾸더라도 원본에는 영향이 없다.
serverl.xml 파일을 열어보면 Source, Design이 있고 Design은 코드를 xml을 간결하게 볼 수 있다. (더 어려워 보이는 건 기분 탓 인가?)
1. 공통 server.xml - Server port
server.xml의 Source를 들여다보면 Sever 설정 tag가 있다.
2. 공통 server.xml - Service
그 다음 중요한 것이 Service tag이다. Server안에 Service가 있다. Service이름은 Catalina이다.(Spring의 처음 프로젝트 이름이 Catalina였다고 한다?)
3. 공통 server.xml - Connector
Connector에서는 protocol="HTTP/1.1"로 요청이 오면 해당하는 Connector가 처리하라는 말이다. Connector가 여러 개 있는데 port="8080"에서 대기한다.
port="80"으로 바꾸면, "locathost:8080"에서 ":8080"입력 하지 않아도 된다. HTTP 기본 port 번호가 "80"이기 때문에 따로 적어주지 않아도 실행된다.
4. 공통 server.xml - Engine
Engine이 있고 이름은 Catalina이다. Engine은 여러 Host를 포함 가능하다. Host 중 default를 어떤 것으로 할지 정할 수 있는데, 여기서는 locahost를 default로 지정했다.
5. 공통 server.xml - Host
Host가 있는데 unpackWARs="true"는 *.war 압축파일을 자동으로 풀라는 말이다. appBase="webapps"는 이 폴더 아래다가 WAR파일을 두라는 말이다.(이 때, webapps폴더는 STS가 아니라 Tomcat이다.)
6. 공통 server.xml - Context
마지막으로 Context가 있고, path가 "/ch2"로 되어있다. Context가 여러개 있으면 여러개 등록되어 있다.
7. 공통 web.xml - 정리
Tomcat에 있는 모든 webapp의 공통 설정인 web.xml이 먼저 적용되고 다음 prj의 개별설정 web.xml이 적용된다.
공통 web.xml에 servlet을 등록하는 곳이 있다. 원격 프로그램은 서블릿을 등록하고 URL을 연결한다. 원래 서블릿 등록, URL 연결을 이 web.xml파일에서 작성했지만, 현재는 annotation(@) 기반으로 많이 넘어가는 추세이다. 하지만 web.xml도 알아두면 편하다.
서블릿 등록 -> @Controller
URL 연결 -> @RequestMapping
@Controller, @RequestMapping은 스프링에서만 사용하고, 서블릿에서는 @WebServlet을 사용한다. 곧 서블릿에 대해서 자세히 배울 것이다.
공통 web.xml의 위 부분이 URL을 Mapping하는 부분인데 default 이름의 servlet을 특정 주소<url-pattern>/<url-pattern>에 연결한 것인데, 주소와 연결한 것이 아니라 pattern에 연결한 것이다.
개별 web.xml파일을 보면 원격 프로그램 등록, URL Mapping이 있다. 등록과 Mapping을 여러 사람이 등록하고 길게 쓰는 것이 복잡하므로 annotation으로 넘어가고 있다.
⭐ annotaion을 쓰면 되는데 web.xml을 자세히 배우는 이유는 sevlet과 Spring은 떼어놓을 수 없다. Spring에서 '@'을 쓰면 자동으로 되는 것 같지만 많은 작업을 대신할 뿐 본질에는 변함이 없다. 따라서 Serlvet 강의를 위해서도 잘 알아 두자.
'스프링의 정석 > Ch. 02 Spring MVC' 카테고리의 다른 글
ch2_08. 텍스트와 바이너리, MIME, Base64 (0) | 2023.04.12 |
---|---|
ch2_07. HTTP 요청과 응답 - 이론(1) (0) | 2023.04.12 |
ch2_05. 클라이언트와 서버(3) (0) | 2023.04.12 |
ch2_04. HTTP 요청과 응답 - 예제 (0) | 2023.04.10 |
ch2_03. HTTP 요청과 응답 - 실습 (0) | 2023.04.10 |