기본 콘텐츠로 건너뛰기

개발 공부 - jar, war, ear

용어 뜻:

Java로 개발한 application을 배포할 때는 jar, war 형태로 배포하게 된다.
이 둘은 완전히 동일한 형식이나

war는 web application을 배포하는 형식이고
jar는 library나 일반 application을 배포하는 형식이다.

Java ARchive: jar 압축은 하나의 application 기능이 가능하도록 java 파일 등을 압축하고 지원해준다.
path 등의 경로를 유지하기 때문에 jar 파일을 사용하는 사용자들은 각 파일들에 대한 path 문제에서 벗어날 수 있다.
예를 든다면 ojdbc14.14, servlet-api,jar 등을 들 수 있다.

Web ARchive: war 압축은 jar과 달리 웹 어플리케이션을 지원하기 위한 압축방식이다.
웹 어플리케이션을 지원하기 위해서 war 압축방식은 jsp, servlet, gif, html, jar 등을 압축하고 지원해주며
이는 jar과 같은 맥락으로 servlet context 접근을 위해 관련된 모든 파일들을 패키지화하여 준다는 말이다.

추가로 Enterpriser Archive: ear 는 하나의 웹 어플리케이션 단위를 넘어 실제 서버에서 배포하기 위한 단위를 말한다.
이를 위해서 jar과 war를 묵어서 각각의 기능을 지원해준다.
jar는 어플리케이션 레벨(비즈니스 레이어)
war는 웹 어플리케이션 레벨(웹 레이어) 를 지원하도록 하는 것이다.

jar, war, ear 파일들의 특징은
1. 세 가지 모두 압축파일이다.
2. 구조적인 차이가 없다.
3. 확장자를 바꿔도 문제가 없다.
4. 만들어진 목적이 다르다.
4-1) jar: 자바 클래스 파일들이 주이며, EJB 파일들을 포함한다.
4-2) war: 웹 어플리케이션에 관련된 파일들을 포함한다. (jsp, servlet 파일들)
4-3) ear: 엔터프라이즈 애플리케이션에 필요한 모든 파일을 포함한다. (jar, war 등등)




Java Application의 배포시
META-INF 폴더에 build 시에 사용한 pom 파일을 비롯해서 MANIFEST.MF 파일이 있는 것을 알 수 있는데
이 파일은 
매니페스트 버전, 빌드한 사용자, 빌드 jdk 버전, 빌드 툴 등과 같은 정보를 포함한다.

이 내용은 jar 파일에 대한 manual 이나 spec을 기록하는 폴더이다.
그리고 web-resouce와 같은 정적인 resource를 배포할 때도 역시 META-INF 폴더를 이용하게 된다.
jar 파일은 자신이 개발한 class를 가질 수도 있고 심지어 jar에 jre 까지 포함하고 다른 jar을 추가하는 것도 가능하다.

jar 형태로 구성이 되는 경우 ClassLoader에 의해 로드되는 객체들은 jar의 root에 위치하게 된다.
이 부분이 war과 jar의 가장 큰 차이를 가지고 오게 된다.

war로 패키징하는 경우에는
war의 기본 정보와 static-resource를 저장한 META-INF 폴더의 경우에는 jar과 동일하게 만들어진다.
그리고 또 다른 폴더가 하나 더 생기는데 WEB-INF 폴더이다.
이 폴더는 외부 library와 개발된 어플리케이션의 컴파일된 클래스 파일이 위치하는 classes 폴더를 포함한다.

war의 경우에는 ClassLoader에 의해 로드되는 객체들은 classes 폴더를 기준으로 로드가 이루어지게 된다.

그리고 이 안에는 web.xml이라는 매우 중요한 파일이 하나 들어가게 되는데
java web application의 구성은 기본적으로 WEB-INF/web.xml에서 결정된다.

web.xml은 필터, 서블릿, DB Source 등 web container가 구동하는데 이용되는 환경설정파일이다.
서버가 처음 로딩될 때 web.xml 파일을 읽어들여 해당 환경설정에 대해 어플리케이션 배치를 하게 된다.

다른 말로 web.xml은 배치 서술자(deployment descriptor)라고도 한다.

web.xml에 들어가는 환경설정은 다음과 같은 것들이 존재한다.
1. 필터 정보(매핑 포함)
2. 서블릿 정보(매핑 포함)
3. 웹 어플리케이션 정보
4. 세션 정보
5. 세션 정보가 소멸, 생성, 수정되는 것을 알려주는 리스너 정보
6. MIME 매핑
7. welcomefile 정보
8. errorPage 정보
9. url 보호 정보
10. 엔터프라이즈 빈의 홈 레퍼런스 정보(로컬 레퍼런스 정보 포함)


출처:
시드라엘, 2016-10-31, http://enspring.tistory.com/512

댓글

이 블로그의 인기 게시물

Ebook - 전자책 drm 상관 없이 pdf로 만들기

yes24와 교보문고에서 ebook을 구매 해야 했는데 너무 불편하고, 필기가 매우 화날 정도로 안 좋아서 원시적으로 사용하기로 했다. 1. 목적 : ebook에서 필기 및 사용이 불편하여 pdf로 변환  2. 용도 : 개인 사용 목적이며 화질이 다소 저하되어도 필기만 용이하면 상관 없음 3. 방법 1) 휴대폰 및 카메라로 동영상을 촬영했다. DRM 때문에 프로그램으로는 촬영이 안 되는 것을 확인했다. (사실 개인 사용 목적이면 기본 화면 캡쳐를 사용해도 된다...) 2) 마우스 클릭 해주는 매크로를 사용했다. (1) key_macro.exe > https://blog.daum.net/pg365/250 듀얼 모니터에서 위치 이탈 현상이 있긴 해도 괜찮았다. (2) AutoClick.exe > http://bestsoftwarecenter.blogspot.com/2011/02/autoclick-22.html 이 걸로 잘 사용했다. 3초마다 한 번 클릭하도록 사용했다. 3) 동영상을 이미지로 변경해주는 프로그램을 사용했다. Free Video to JPG Converter > https://www.dvdvideosoft.com/products/dvd/Free-Video-to-JPG-Converter.htm (240826: 다운로드 시 정상적으로 되지 않아서 URL 수정) 일 하면서 듀얼 모니터에 켜 놨는데 속도가 괜찮았다. * Every frame 으로 사용해야 한다. 4) 중복 사진 제거해주는 프로그램을 사용했다. VlsiPics  > http://www.visipics.info/index.php?title=Main_Page 생각보다 느리니 퇴근시에 걸어놓고 가면 된다. 한번 play가 끝나면 Auto-select 하고 Delete 하면 된다. 5) 이미지를 일괄 Crop 작업 해주는 프로그램을 사용했다. JPEGCrops > https://jpegcrops.softonic.kr/ *...

개발 공부 - json JSONObject 사용 시 백슬래시(\), 원화 표시(\) 제거 및 치환

import org.json.simple.JSONObject; String dataString = new String(authData.toJSONString()); dataString = dataString.replaceAll("\\\\", ""); String 으로 안 바뀌는 가 싶어서 String 으로 변환 해 주고 작업 하였다. 사실 toJSONString 해도 정상 동작 해야 하는데 이유를 잘 모르겠음. 그리고 나서 다시 이클립스 구동 하니 toString 도 먹은 걸로 봐서 이상하다고 생각! String dataString = authData.toString(); dataString = dataString.replaceAll("\\\\", ""); 어쨌든 백 슬래시 제거를 해줘야 하는데 \\ 도 아니고 \\\\를 해야 변환이 가능했다는 결말이었습니다. 참고 : https://stackoverflow.com/questions/15450519/why-does-string-replace-not-work/15450539 test =test.replace("KP", "");  replace 후에 담아 주지 않으면 적용이 안 됩니다!

개발 공부 - OracleXETNSListener 서비스가 로컬 컴퓨터에서 시작했다가 중지되었습니다.

여러 가지 요인이 있지만 PC 이름 변경시 OracleXETNSListener 서비스 시작이 불가능합니다. 고치는 법은 C:\oraclexe\app\oracle\product\11.2.0\server\network\ADMIN 와 같은 설치 경로에서 listener.ora와 tnsnames.ora 의 pc명을 바꾼 PC명으로 바꿔주면 됩니다. 그래도 안 된다면 cmd 창에서 services.msc 를 입력 후 OracleXETNSListener 서비스를 시작 시키면 됩니다. 오류명: OracleXETNSListener 서비스가 로컬 컴퓨터에서 시작했다가 중지되었습니다. 일부 서비스는 다른 서비스 또는 프로그램에서 사용되지 않으면 자동으로 중지됩니다. 참고한 사이트들 1. http://blog.naver.com/visioner7/120165951652 2. http://database.sarang.net/?inc=read&aid=6819&criteria=oracle&subcrit=&id=&limit=20&keyword=ora-12560&page=5 이런 걸 보면 오라클은 앙칼진 시골 아가씨야