Programming/Java

[Servlet / JSP] 웹 애플리케이션

seandoesdev 2023. 8. 13. 22:10

정의

정적인 웹 애플리케이션 기능을 그대로 사용하면서 서블릿, 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

  1. 웹 브라우저에서 컨텍스트 이름(contextName)으로 요청한다.
  2. 요청을 받은 톰캣 컨테이너는 요청한 컨텍스트 이름이 server.xml에 있는지 확인한다.
  3. 해당 컨텍스트 이름이 있으면 컨텍스트 이름에 대한 실제 웹 애플리케이션이 있는지 경로로 가서 요청한 main.html을 브라우저에 나타낸다.
  4. 웹 브라우저는 전송된 main.html을 브라우저 보여준다.