잡동사니를 모아두는 서랍장
jar, war, ear 차이 본문
저번에 팀원 한분이 물어보고 다니길래 나도 헷갈려서 정리.
jar에서 ear로 갈수록 단위가 크다.
- jar (java archive)
- 하나의 application 기능이 가능하도록 java파일 등을 압축하고 지원.
- 라이브러리, 리소스, property 파일들을 포함한다.
- JDK에서 제공하는 Java Archive Tool을 이용하여 jar 파일에 대한 작업을 할 수 있다. (Jar tool)
- path 등의 경로를 유지하기 때문에 배포된 jar 파일을 사용하는 사용자들은 각 파일들에 대한 path 문제 신경 X.
- war (web archive)
- jar와 달리 웹 어플리케이션을 지원하기 위한 압축방식.
- Web container는 서블릿, jar파일과 WEB-INF폴더에 있는 web.xml 파일을 가지고 있는 war 파일로 패키징된 웹 모듈을 필요로 한다. (패키지 개념, servlet context 접근을 위해 관련된 모든 파일들을 패키지화)
- war 파일로 올리면 tomcat(was)이 알아서 압축을 해제해서 배포해준다.
- jsp, servlet, gif, html, jar 등을 압축하고 지원.
- ear (enterprise archive)
- 하나의 웹 어플리케이션 단위를 넘어서 실제 서버에서 배포하기 위한 단위를 말한다.
- 이를 위해서 jar와 war를 묶어서 각각의 기능을 지원한다.
- jar 는 어플리케이션 레벨(business layer)
- war는 웹어플리케이션 레벨(web layer)
- Standalone web container(such as Tomcat, Jetty)는 EAR 파일을 지원하지 않는다.
- 완전한 어플리케이션 서버가 아니기 때문이다.
- 이러한 웹 어플리케이션은 war 파일로 deploy
* WAR에 대한 추가 설명
WAR는 자바 기반의 웹 프로젝트의 최종 결과 포맷이다. 이것은 기본적인 내용이지만 웹 프로젝트에서 배포를 위한 최소한의 단위가 되므로 매우 중요하다.
WAS(Web Application Server)마다 배포 방식과 설정이 조금씩 다르지만 기본적으로 WAR파일에 대한 규격은 동일하다. WAR 파일과 JAR 파일 모두 파일 시스템 측면에서는 ZIP 파일과 유사하며 JVM 위에서 실행할 수 있도록 메타 정보가 추가되어 있다.
JAR의 경우에는 실행될 클래스(main)를 명시하며, WAR 파일의 경우에는 단독으로 실행할 수 없고 서버 컨테이너에 의해서 실행되므로 배포에 대한 메타 정보가 담겨 있다. 그래서 web.xml을 배포 서술자(DD, Deploy Description)라고 부르며, 이 파일에는 웹 프로젝트에 대한 설정 정보가 담겨 있다.
서버에서는 배포 서술자 정보를 읽어 컨텍스트를 생성한다. 컨텍스트는 기본적으로 WAR 파일명과 동일한 이름으로 생성되고, 사용자가 웹 디렉터리에 있는 자원에 접근할 수 있게 한다.
(최근에는 보안상의 이유로 사용자가 JSP에 직접적인 접근을 할 수 없게 WEB-INF 하위에 디렉터리를 만들어 사용한다.)
참고
'Java' 카테고리의 다른 글
jar 파일 실행 시 내부 리소스를 못읽는다면 확인해볼 사항 (0) | 2021.04.16 |
---|---|
Java Reflection 으로 인스턴스 생성하는 예시 (0) | 2020.12.03 |
객체지향 5원칙(SOLID) (0) | 2020.12.02 |
Comments