웹 URL, 웹 애플리케이션 위치 및 구조, web.xml
웹 애플리케이션
서블릿을 만드는 목적은 클라이언트에 서비스하기 위해서입니다. 이번 포스팅에서는 웹서버에 서블릿이 어떤 구조로 있어야 하며, 클라이언트가 서블릿에 접근하는 방법을 알아보겠습니다.
웹 애플리케이션 접근
클라이언트는 웹서버에 서비스를 요청할 때 URL 정보를 보낸다. 만약 클라이언트가 서버에 다음과 같은 URL 정보를 보냈다면, 클라이언트가 요청한 문서를 찾아가고자 URL의 정보를 다음과 같은 용도로 사용한다.
http://70.12.220.93:8080/edu/index.jsp
1) IP가 70.12.220.93인 컴퓨터를 찾아감
2) 8080 포트를 사용하고 있는 서버를 찾아감
3) edu라는 이름의 웹 애플리케이션을 찾아감
4) /index.jsp 파일을 찾아감
클라이언트가 URL의 컴퓨터 주소와 포트 번호를 이용해 웹서버까지 찾았다면 다음 목적지는 웹 애플리케이션입니다. 웹서버가 클라이언트에 서비스하는 단위는 웹 애플리케이션입니다. 그래서 개발할 때 먼저 웹 애플리케이션을 생성한 후, 그 안에 서비스하고자 하는 파일들을 작성합니다. 그리고 작성된 파일을 실행하려면 파일이 포함된 웹 애플리케이션을 웹서버에 올린(deploy) 후 서비스를 요청합니다.
웹 애플리케이션 위치
서비스는 서버에서 애플리케이션 단위로 이루어집니다. 웹서버마다 시작될 때 자동으로 애플리케이션으로 인식하여 서비스를 올려주는 디렉터리가 있습니다. 아파치 톰캣(Tomcat)의 경우 톰캣을 설치한 디렉터리 하위의 webapps 디렉터리에 애플리케이션들이 있습니다.
webapps 디렉터리에 있는 하위 디렉터리 또는 디렉터리가 압축된 war 파일은 하나의 애플리케이션으로 인식합니다.
이클립스에서 실제 애플리케이션의 루트 디렉터리는 "WebContent"입니다. 이 디렉터리가 톰캣의 webapps의 하위 디렉터리에 해당합니다. 어차피 애플리케이션의 루트 디렉터리는 URL에서 "/"라는 기호로 접근하므로 디렉터리 이름이 무엇인지는 상관없습니다.
웹 애플리케이션 구조
웹 애플리케이션은 디렉터리나 디렉터리가 압축된 형태로 웹서버에 올려서 서비스합니다.
웹 애플리케이션은 하나의 디렉터리입니다. 이 디렉터리 안에 서비스하려는 문서들을 만들어 놓으면 웹에서 서비스되는 것입니다. 그런데 반드시 모든 웹 애플리케이션이 공통으로 가져야 하는 디렉터리와 파일이 있습니다. 그것은 웹 애플리케이션 루트 디렉터리 바로 하위에 WEB-INF 디렉터리이며, WEB-INF 디렉터리에는 web.xml 파일이 있어야 합니다.
또한, 현재 웹 애플리케이션에서 서비스하려는 클래스 파일이 있다면 WEB-INF/classes 디렉터리 하위에 있어야 합니다. 그리고 클래스 파일들이 jar로 압축되어 있다면 WEB-INF/lib 디렉터리에 있어야 합니다. 왜냐하면, 클래스 파일들이 WEB-INF/classes 또는 WEB-INF/lib에 있어야만 WAS를 구성하는 애플리케이션 서버들이 자동으로 인식할 수 있기 때문입니다. web.xml 파일과 클래스 파일을 제외한 다른 파일들은 웹 애플리케이션 루트 디렉터리 하위의 어느 곳에 있어도 상관 없습니다.
환경설정 파일: web.xml
웹서버가 서비스를 시작하기 위해 구동할 때 서버에서 많은 일이 일어납니다. 그중의 하나가 클라이언트에 서비스하기 위한 웹 애플리케이션을 준비하는 작업입니다. 이때 웹서버는 각 웹 애플리케이션의 web.xml 파일을 읽습니다. web.xml은 웹 애플리케이션의 서비스 처리에 관한 내용이 정의된 파일입니다. 웹서버는 web.xml에 정의된 내용대로 웹 애플리케이션을 실행하기 위한 설정을 수행합니다.
정리하자면, web.xml은 웹 애플리케이션 실행에 관해 정의하는 환경설정 파일이며, 웹 애플리케이션 서비스 시작 시 웹서버가 읽어서 사용하는 파일입니다.
만약 web.xml 파일에 정의한 내용이 논리적으로나 문법적으로 잘못되었다면, 웹서버가 웹 애플리케이션을 서비스하는 데 필요한 준비 설정을 올바르게 할 수 없습니다. 웹서버는 웹 애플리케이션 단위로 서비스한다고 했습니다. 따라서 잘못 작성한 web.xml 파일 때문에 서비스에 실패한다면, 웹 애플리케이션 안에 있는 모든 파일은 서비스되지 않습니다.
서블릿 디렉터리
서블릿 디렉터리란, 서블릿이 공식적으로 존재하는 디렉터리로서 (서블릿 컨테이너를 내장한) 모든 WAS의 구조가 같습니다. 서블릿 프로그램 실행에 관련된 클래스 파일들은 이 디렉터리에 있어야만 서블릿 컨테이너가 인식하여 실행합니다. 서블릿 디렉터리는 웹 애플리케이션의 루트 디렉터리 하위의 WEB-INF/classes입니다.
이클립스에서 서블릿을 개발할 때는 소스 폴더에 자바 소스를 작성하면 자동으로 컴파일되어 클래스 파일이 생성됩니다.