웹 애플리케이션
기존의 정적인 웹 애플리케이션의 기능을 그대로 사용하면서 예시로 서블릿(Servlet), JSP, 자바 클래스들을 추가하여 사용자에게 동적인 서비스를 제공하는 서버 프로그램을 말한다.
웹 애플리케이션은 보통 정해진 형식이 있으므로 서비스를 제공할 때도 형식에 맞게 만들어서 제공해야 한다.
또한 웹 애플리케이션은 단독으로 실행할 수 없기 때문에 톰캣과 같은 웹 컨테이너에서 실행되는 구조이다.
컨테이너에서 실행되는 모든 웹 애플리케이션은 웹 애플리케이션의 이름으로 이루어진 루트 디렉터리와 하위 디렉터리 구조를 기본 구조로 가진다.
웹 애플리케이션 기본 구조
웹 애플리케이션 이름
└ WEB-INF
└ classes
└ lib
└ web.xml
위와 같은 구조를 갖추지 않고 컨테이너에서 웹 애플리케이션을 실행하면 오류가 발생한다.
해당 구조를 갖춘 채 다른 기능을 추가하고 싶은 경우 폴더를 추가해서 사용하면 된다.
이클립스에서 Dynamic Web Project를 생성하는 경우 기본 구조를 생성해준다.
tomcat 8 버전까지는 web.xml 코드를 따로 추가하지 않아도 자동으로 생성이 되었지만 tomcat 9 버전부터는 xml을 직접 추가해야 한다.
프로젝트 생성 시 추가할지 결정하는 체크란이 있어서 해당 부분을 체크해주면 web.xml이 생성된다. 기본 값은 체크가 안된 것으로 되어있다.
웹 애플리케이션 이름
웹 애플리케이션 이름을 Book이라고 가정한다.
이때 기본 구조에 다르면 Book은 웹 애플리케이션의 루트 디렉터리로 다른 웹 애플리케이션 이름과 중복을 허용하지 않는다. Book 디렉터리 내에는 JSP HTML 파일이 저장된다.
WEB-INF
웹 애플리케이션에 관한 정보가 저장되는 곳으로 외부에서 접근할 수 없다.
classes
웹 애플리케이션이 수행하는 서블릿과 다른 일반 클래스들이 위치하는 곳이다.
lib
웹 애플리케이션에서 사용되는 여러 라이브러리 압축 파일(jar)이 저장되는 곳이다. DB 연동 드라이버나 프레임워크 기능 관련 파일이 lib 디렉터리에 저장된다. lib 디렉터리 내에 jar 파일을 추가하면 자동으로 클래스 패스가 설정되므로 Build Path에서 설정해주지 않아도 된다.
web.xml
배치 지시자(deployment descriptor)로서 일종의 환경 설정 파일이다. 웹 애플리케이션에 대한 여러 가지 설정을 할 때 사용된다.
컨텍스트(Context)
이클립스와 같은 IDE를 사용하지 않고 웹 애플리케이션을 실행시키려면 톰캣을 설치하고 톰캣 루트 디렉터리의 하위 디렉터리인 webapps 폴더에 작성한 웹 애플리케이션을 위치시킨 다음 톰캣을 실행해야 한다. 실행하면 톰캣 컨테이너가 시작되며 폴더에 옮겨놓은 웹 애플리케이션이 자동으로 등록되어 실행된다. 이 방법은 코드가 수정될 때마다 매번 파일을 옮겨줘야 하니 여간 불편한 게 아니다.
server.xml에 웹 애플리케이션을 등록해 놓고 톰캣을 실행하는 방식으로 개발하는 것이 더 편리하다.
웹 애플리케이션을 임의의 폴더 내에 위치시키고, 해당 폴더를 server.xml에 등록해놓는다. 그러면 톰캣이 server.xml에 등록된 정보를 따라 폴더 위치로 이동하여 애플리케이션을 확인한 후 실행한다.
이때 server.xml에 등록하는 웹 애플리케이션을 컨텍스트(Context)라고 부른다.
컨테이너 실행 시 웹 애플리케이션 당 하나의 컨텍스트가 생성된다. 따라서 컨텍스트 이름이 중복되면 안 된다. 컨텍스트 이름은 웹 애플리케이션과 같게 만드는 것이 일반적이나 보안상의 이유 등으로 인해 다르게 만들 수도 있다.