컨테이너에서 웹 애플리케이션 실행하기
앞 에서 웹 애플리케이션 구조와 구성 요소를 알아보았다. 그럼 실제로 간단한 웹 애플리케이션을 만들어 톰캣 컨테이너에서 실행 한 수 웹 브라우저에서 요청하면 정상적으로 실행되는지 실습을 해 봅시다. 물론 이클립스에서 자동으로 한 번에 웹 애플리케이션을 만들 수 있지만 한 번 정도는 직접 웹 애플리케이션을 만들어 보는 것도 좋은 경험이 될 것이다.
1. 컨테이너에 웹 애플리케이션 등록
웹 애플리케이션은 일반 PC 에서 실행되는 자바 애플리케이션과 달리 단독으로 실행할 수 없다. 웹 애플리케이션은 톰캣과 같은 웹 컨테이너에서 실행되는 구조이다. 따라서 우리가 만든 웹 애플리케이션을 실행하려면 우선 톰캣에 등록부터 해야한다.
웹 애플리케이션을 톰캣 컨테이너에 등록하는 방법은 다음 두가지 입니다.
① %CATALINA_HOME%webApps 디렉터리에 애플리케이션을 저장
② server.xml 에 직접 웹 애플리케이션을 등록
NOTE_ JDK 경로는 환경 변수에 등록하면서 JDK 루트 디렉터리를 JAVA_HOME 이라고 불렀다. 톰캣의 루트 디렉터리는 보통 CATALINA_HOME으로 묵시적으로 사용하고 있다. 이 책에서는 앞에서 C:/tomcat9 으로 루트 디렉터리를 만들었다.
첫 번째 방법은 CATALINA_HOME, 즉 설치한 톰캣 루트 디렉터리의 하위 디렉터리인 webapps 폴더에 작성한 웹 애플리케이션을 위치시킨 다음 톰캣을 껏다가 다시 실행하면 톰캣이 자동으로 웹 애플리케이션을 인식한 후 실행시키는 방법이다. 두 번쨰 방법은 임의의 장소에 위치해 있는 웹 애플리케이션을 톰캣의 설정 파일인 server.xml 에 등록해서 실행하는 방법이다.
우선 첫번째 방법입니다.
1. C 드라이브의 webShop 폴더 전체를 복사한 후 톰캣 루트 디렉터리의 하위에 있는 webapps 폴더에 붙여 넣는다.
2. VS Code 를 실행한 후 새 파일을 선택
3. HTML 코드를 입력한다.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello JSP!</title>
</head>
<body>
Hello JSP <br>
안녕하세요!!
</body>
</html>
4. main.html 을 webShop 폴더에 저장한다.
2. 톰캣 실행
이제 웹 애플리케이션을 서비스 하기 위해 톰캣을 실행해 봅시다.
1. 톰캣을 설치한 루트 디렉터리의 bin 폴더로 이동한다.
2. bin 디렉터리의 Tomcat9.exe를 더블클릭해 실행.
3. 콘솔창이 나타나면서 톰캣 컨테이너가 실행된다.
3. 브라우저에서 웹 애플리케이션 요청
이제 톰캣 컨테이너가 시작되면서 webShop 애플리케이션이 자동으로 등록되어 실행될 것이다. 그럼 톰캣이 실행시킨 webShop 애플리케이션을 웹 브라우저에서 요청해 보겠다.
다음은 톰캣에서 실행한 웹 애플리케이션을 웹 브라우저에서 요청하는 방법이다.
http://IP주소:포트번호/컨텍스트이름/요청파일이름
먼저 톰캣 컨테이너가 위치해 있는 IP 주소를 입력하고 콜론(:)으로 구분하여 톰캣 설치 시에 입력한 포트 번호 (여기서는 8090)를 입력한다. 그런 다음 컨텍스트 이름(여기서는 webShop)을 입력한다. (컨택스트 이름에 관해서는 뒤에서 자세히 설명한다. )
이 예제의 경우는 IP 주소가 127.0.0.1 이고, 현재 예제는 컨텍스트 이름이 웹 애플리케이션 이름과 같다. 그리고 다음과 같이 JSP나 HTML 파일 이름을 입력하면 된다.
http://127.0.0.1:8090/webShop/main.html
다음은 실제로 webShop 프로젝트의 main.html 을 브라우저에서 요청한 경우에 나타난 화면이다.
TIP_현재는 톰캣이 로컬 PC에 설치되어 있기 때문에 127.0.0.1 대신 localhosts 라고 입력해도 된다.
이제는 임의의 위치에 작성한 웹 애플리케이션을 톰캣에 등록한 후 실행하는 방법을 알아보겠다. 먼저 컨텍스트(Context)의 정의와 특징부터 알아보자.
4. 컨텍스트란?
앞 절에서 webShop 프로젝트를 미리 webapps 폴더에 위치시켜 놓은 다음 톰캣을 실행했을 때 자동으로 webShop이 등록되어 실행되는 것을 확인했다. 이 방법은 우리가 웹 애플리케이션 개발을 모두 완료한 후 사용자에게 서비스할 때 사용하면 편리하다.
그런데 실제 개발 과정에서는 수시로 애플리케이션을 실행하고 테스트해 봐야 한다. 그때마다 이런 식으로 프로젝트 파일을 통째로 복사해야 한다면 어떨까? 심지어 원격으로 설치된 경우는 FTP로 업로드 해야 하는 데 이는 정말 번거로운 일이다. 따라서 실제로 개발할 때는 앞서 우리가 C 드라이브에 webShop을 만든 것처럼 개발자가 정한 위치에 웹 애플리케이션을 생성한 후 그 위치를 server.xml 에 등록해 놓고 톰캣을 실행하는 식으로 개발해야 한다. 그러면 톰캣이 server.xml에 입력된 정보에 따라 해당 위치로 이동하여 애플리케이션을 확인한 후 실행한다.
이때 server.xml에 등록하는 웹 애플리케이션을 컨텍스트(Context)라 부른다. 즉, 톰캣 입장에서 인식하는 한 개의 웹 애플리케이션이라고 보면 된다.
컨테이너 실행 시 웹 애플리케이션 당 하나의 컨텍스트가 생성된다. 컨택스트 이름은 웹 애플리케이션 이름과 같게 만드는 것이 일반적이나 보안상의 이유 또는 웹 애플리케이션 이름이 긴 경우 등 은 다르게 만들 수도 있다.
컨텍스트의 주요 특징은 다음과 같다.
- 웹 애플리케이션당 하나의 컨텍스트가 등록된다.
- 웹 애플리케이션 이름과 같을 수도 있고 다를 수도 있다.
- 컨텍스트 이름은 중복되면 안된다..
- 웹 애플리케이션의 의미를 가장 잘 나타낼 수 있는 명사형으로 지정한다.
- 대소문자를 구분한다.
- server.xml 에 등록한다.
5. 톰캣 컨테이너에 컨텍스트 등록하기
이번에는 임의의 폴더에 만든 webShop 웹 애플리케이션을 server.xml 에 컨텍스트로 등록해서 실행하는 과정을 알아보겠다. server.xml 은 톰캣 설치 루트 디렉터리 아래, conf 디렉터리 안에 있다.
server.xml에 컨텍스트를 등록하려면 다음과 같이 <Context> 태그를 이용해야 한다.
코드 server.xml 에 컨텍스트 등록하기
<Context path="/컨텍스트 이름"
docBase="실제 웹 애플리케이션의 WEB-INF 디렉터리 위치"
reloadable="true 또는 false " />
코드 등록 예
<Context path="/webMal"
docBase="C:\\webShop"
reloadable="true" />
일반적으로 컨텍스트 이름은 웹 애플리케이션 이름과 동일하게 한다. 하지만 지금은 실습을 위해 다르게 등록해 보겠다. 실제 웹 애플리케이션은 C:\\webShop 디렉터리에 있지만 여기에서는 /webShop 이 아닌 /webMal 이라는 이름으로 컨텍스트를 등록하겠다.
<Context> 태그란
톰캣은 모든 설정 정보를 XML로 저장한 후 실행 시 정보를 읽어와 설정대로 실행한다.
따라서 우리가 만든 웹 애플리케이션도 미리 <Context>태그를 이용해서 server.xml 에 등록해 두어야 톰캣이 설정한 대로 웹 애플리케이션을 실행한다. 아래에서 <Context>태그의 여러 가지 요소의 기능을 정리해두었다.
구성 요소 | 기능 |
path | 웹 애플리케이션의 컨텍스트 이름이다. 웹 애플리케이션 이름과 다를 수도 있으며, 웹 브라우저에서 실제 웹 애플리케이션을 요청하는 이름이다. |
docBase | 컨텍스트에 대한 실제 웹 애플리케이션이 위치한 경로이다. WEB-INF 상위 폴더까지의 경로르 나타낸다. |
reloadable | 실행 중 소스 코드가 수정될 경우 바로 갱신할지를 설정한다. 만약 false로 설정하면 톰캣을 다시 실행해야 추가한 소스 코드의 기능이 반영된다. |
server.xml을 메모장이나 VS Code로 열어 <Host> 태그 안에 <Context>태그를 이용해서 등록한다.
코드 C:/tomcat9/conf/server.xml
<Context path="/webMal"
docBase="C:\webShop"
reloadable="true" />
그리고 첫 번째 톰캣 실행 시 사용한 main.html 을 복사하여 C:\webShop에 붙여 넣는다.
그런 다음 톰캣을 재실행하여 웹 브라우저에서 등록한 컨텍스트 이름인 /webMal/main.hsml로 요청한다.
- http://127.0.0.1:8090/webMal/main.html
톰캣 재실행 후 웹 브라우저에서 요청한 결과를 볼수있다.
6.톰캣 컨테이너에서의 웹 애플리케이션 동작 과정
이번에는 앞의 두가지 방법으로 톰캣 컨테이너에 웹 애플리케이션을 등록한 후 브라우저에서 요청할 경우 톰캣이 브라우저에 서비스하느 과정을 알아보자.
실제 웹 브라우저에서 컨텍스트 이름으로 요청할 경우 웹 애플리케이션이 등족하는 과정은 다음과 같다.
① 웹 브라우저에서 컨텍스트 이름(webMal)로 요청한다.
② 요청을 받은 톰캣 컨테이너는 요청한 컨텍스트 이름이 server.xml 에 있는지 확인한다.
③ 해당 컨텍스트 이름이 있으면 컨텍스트 이름에 대한 실제 웹 애플리케이션이 있는 경로(C:\webShop)로 가서 요청한 main.html 을 클라이언트 웹 브라우저로 전송한다.
④ 웹 브라우저는 전송된 main.html 을 브라우저에 나타낸다.
컨텍스트 이름으로 요청할 경우 이 컨텍스트 이름이 미리 server.xml 에 등록되어 있어야 한다. 만약 등록되어 있지 않은 컨텍스트 이름으로 요청하면 404 오류가 발생한다.