정의
정적인 웹 애플리케이션 기능을 그대로 사용하면서 서블릿, JSP, 자바 클래스들을 추가하여 사용자에게 동적인 서비스를 제공하는 프로그램이다.
웹 컨테이너에서 실행되는 JSP, 서블릿, 자바 클래스들을 사용해 정적 웹 프로그래밍 방식의 단점을 보완하여 서비스를 제공하는 서버 프로그램이다.
기본 구조
톰캣과 같은 웹 컨테이너에서 실행하는 웹 애플리케이션의 기본 구조를 파악해보자.
구성 요소 기능
Application Name | 웹 애플리케이션의 루트 디렉토리. 다른 웹 애플리케이션 이름과 중복을 허용하지 않으며, JSP, HTML 파일을 저장한다. |
WEB-INF | 웹 애플리케이션에 관한 정보가 저장된 곳이다. 이 디렉터리는 외부에서 접근할 수 없다. |
classes | 웹 애플리케이션이 수행하는 서블릿과 다른 일반 클래스들이 위치하는 곳이다. |
lib | 웹 애플리케이션에서 사용되는 여러 가지 라이브러리 압축파일(jar파일)이 저장되는 곳이다. DB 연동 드라이버나 프레임워크 기능 관련 jar 파일이 저장된다. lib 디렉터리의 jar는 클래스패스가 자동으로 설정된다. |
web.xml | 배치 지시자(Deployment Descriptor)로서 일종의 환경 설정 파일이다. 웹 애플리케잉션에 대한 여러 가지 설정을 할 때 사용한다. |
이외에도 추가로 구성되는 요소들이 있다.
구성 요소 기능
JSP/HTML | JSP 파일과 HTML 파일이 저장되는 곳이다. |
CSS | CSS 파일이 저장되는 곳이다. |
Image | 웹 애플리케이션에서 사용되는 이미지가 저장되는 곳이다. |
js | 자바스크립트 파일이 저장되는 곳이다. |
bin | 애플리케이션에서 사용되는 각종 실행 파일이 저장되는 곳이다. |
conf | 프레임워크에서 사용하는 각종 설정 파일이 저장되는 곳이다. |
src | 자바 소스파일이 저장되는 곳이다. |
컨텍스트(Context)란
실제 개발 과정에서는 수시로 애플리케이션을 실행하고 테스트해 봐야 한다. 그때마다 프로젝트 전부를 복사해서 일을 처리해야 한다면 많이 번거로워진다. 따라서 실제로 개발할 때는 개발자가 정한 위치에 웹 애플리케이션을 생성한 후 그 위치를 server.xml에 등록해 놓고 톰캣을 실행하는 식으로 개발을 진행한다.
이때, server.xml에 등록하는 웹 애플리케이션을 컨텍스트(Context)라고 한다. 톰캣의 입장에서 인식하는 하나의 웹 애플리케이션이라고 볼 수 있다.
컨테이너 실행 시 웹 애플리케이션당 하나의 컨텍스트가 생성된다. 컨텍스트의 이름은 웹 애플리케이션 이름과 동일하게 만드는 것이 일반적이지만 보안상의 이유 또는 웹 애플리케이션 이름이 긴 경우 등은 다르게 만들 수 있다. (일반적으로 다르게 만든다.)
컨텍스트의 주요 특징
➡️ 웹 애플리케이션당 하나의 컨텍스트가 등록된다.
➡️ 웹 애플리케이션 이름과 같거나 다를 수 있다.
➡️ 컨텍스트 이름은 중복되면 안 된다. (톰캣에서 필터링할 수 없다.)
➡️ 웹 애플리케이션의 의미를 가장 잘 나타낼 수 있는 명사형으로 지정한다.
➡️ 대소문자를 구분한다.
➡️ server.xml에 등록한다.
톰캣 컨테이너에 컨텍스트 등록
<!-- server.xml -->
<Context path="/컨텍스트 이름"
docBase="실제 웹 애플리케이션의 WEB-INF 디렉터리 위치"
reloadable="true 또는 false" />
💡 태그란 톰캣은 모든 설정 정보를 XML로 저장한 후 실행 시정보를 읽어와 설정대로 실행한다.
따라서 우리가 만든 웹 애플리케이션도 미리 <Context> 태그를 이용해서 server.xml에 등록해 두어야 톰캣이 설정한 대로 웹 애플리케이션을 실행합니다. <Context> 태그의 여러 가지 요소의 기능을 살펴보자.
구성 요소 기능
path | 웹 애플리케이션의 컨텍스트 이름입니다. 웹 애플리케이션 이름과 다를 수 있으며, 웹 브라우저에서 실제 웹 애플리케이션을 요청하는 이름이다. |
docBase | 컨텍스트에 대한 실제 웹 애플리케이션이 위치한 경로이다. WEB-INF 상위 폴더까지의 경로를 나타낸다. |
reloadable | 실행 중 소스 코드가 수정될 경우 바로 갱신할지 설정한다. 만약 false로 설정하면 톰캣을 다시 실행해야 추가한 소스 코드의 기능이 반영된다. |
</aside> |
톰캣 컨테이너에서의 웹 애플리케이션 동작 과정
http://localhost:8090/contextName/main.html
- 웹 브라우저에서 컨텍스트 이름(contextName)으로 요청한다.
- 요청을 받은 톰캣 컨테이너는 요청한 컨텍스트 이름이 server.xml에 있는지 확인한다.
- 해당 컨텍스트 이름이 있으면 컨텍스트 이름에 대한 실제 웹 애플리케이션이 있는지 경로로 가서 요청한 main.html을 브라우저에 나타낸다.
- 웹 브라우저는 전송된 main.html을 브라우저 보여준다.
'Programming > Java' 카테고리의 다른 글
[Servlet / JSP] JSP 출력 버퍼 (0) | 2023.08.22 |
---|---|
[Servlet / JSP] 서블릿 (0) | 2023.08.17 |
[Servlet / JSP] 웹 프로그래밍 기본 (0) | 2023.08.13 |
[Servlet / JSP] MVC 패턴 & 실제 구조 (0) | 2023.08.09 |
[Servlet / JSP] 서블릿 웹 프로젝트 생성 (0) | 2023.08.09 |