본문 바로가기

카테고리 없음

톰켓에 WAR배포하기

export WAR


배포할 프로젝트를 WAR로 추출한다. WAR는 web application archive의 약자로 웹 어플리케이션을 배포하기 위한 파일들의 압축이다.

이클립에서 생성한 Dynamic Web Project를 Export할 때 서버 런타임을 톰켓으로 선택한다면 해당 프로젝트 WebContent 하위의 모든 폴더와 파일을 내보내게 된다. 프로젝트에 자바 소스가 존재하면 컴파일된 클래스 파일을 WAR에 포함시키며 WEB-INF/classes 아래 경로에 위치하게 된다.


WAR vs JAR ?


자바로 개발한 application을 배포할 때는 주로 jar, war 형태로 배포를 하게 된다. 이 둘은 완전히 동일한 방식이다. 다만 war는 web application을 배포하는 형식이고, jar는 library나 일반 application을 배포하는 형식이다.

 Jar파일을 보면 우리가 생성하지 않은 폴더(META-INF)가 생성되어 있다. 이 프로젝트에는 build 시에 사용한 pom.xml 파일과 MANIFEST.MF 파일이 있다. 즉 해당 폴더에는 jar파일에 대한 메뉴얼이나 스팩에 대한 내용이 담겨 있다. WAR에서도 web-resource와 같은 정적인 resource를 배포할 때도 역시 META-INF 폴더를 이용하게 된다. 

 ClassLoader에 의해 로드되는 객체들은 jar의 root에 위치하게 된다.

[ jar의 파일 구조 ]



 war의 폴더 구조는 기본정보와 static resource를 저장한 META-INF와 개발된 application의 compile된 class 파일이 위치한 WEB-INF 2가지 폴더가 생성됩니다. WEB-INF안에는 web.xml이라는 중요한 파일이 존재합니다. web.xml에는 필터, 서블릿, DB소스 등 web container가 구동하는데 이용되는 환경설정 파일입니다. 즉 서버가 처음 로딩될때 web.xml 파일을 읽어들여 해당 환경설정에 대해 어플리케이션 배치를 하게 됩니다.(deployment descriptor)

[ war의 파일 구조 ]




 




WAR 배포 vs html 테스트 ?


웹서버에 war 배포하는 거랑 그냥 생성된 html을 테스트 하는거랑 무엇이 다른거지?? 왜 굳이 war를 배포하는 거지?


예제 1) Eclipse에서 Dynamic Web Project를 생성해서 팀원들에게 공유한다고 생각해보자. war로 묶어서 웹 서버(tomcat)에 배포하지 않는다면 해당 project를 zip으로 묶어서 웹서버의 디렉토리에 넣어줘야 함. 


하지만 예제1만이 이유라면 TOP IDE에서 굳이 배포기능을 만들 필요가 있을까? 왜냐하면 Build를 하면 자동으로 해당 디렉토리에 내용이 변경되고 다른 컴퓨터에서는 '192.168.11.37:52790/ProjecName' 을 쳐서 들어가면 되자나.......  


configuration & deploy


WAR를 톰켓에 배포하는 방법은 두 가지가 있다

  1. 톰켓에서 제공하는 GUI 툴인 manager/html 페이지에서 설정
    1) 톰켓 매니저 접속 권한을 설정한다. tomcat-user.xml을 열어 role, user를 설정해준다.
    2) 톰켓경로/bin/startup.bat을 실행해 서버를 시작한다.
    3) localhost:8080/manager/html을 입력해 Manager 관리창을 띄운다.
    4) [Depoly]-[War file to deploy]에서 WAR파일을 선택해 'deploy'한다.
    5) 페이지 상단에 있는 배포중인 애플리케이션을 관리하는 [Applications]에서 배포한 애플리케이션을 활성화 한다.
    6) 배포가 완료되면 localhost:8080/war파일명 으로 접근할 수 있다.

  2. 톰켓경로/conf/server.xml 파일을 통한 webapp 설정