본문 바로가기
Tools (도구)/Eclipse (이클립스)

이클립스 (STS) : Java Build Path, Deployment Assembly

by Hwanii_ 2024. 1. 23.
728x90

문제 상황 :

 

1) 프로젝트를 빌드하고 프로젝트를 서버에 배포할 때 어떻게 되는건지 ?

2) .war 파일의 개념은 무엇인지 ?

 

위의 상황을 마주한 이후,

프로젝트를 우클릭 해서 Properties를 누르면 확인할 수 있는,

Java Build Path와 Deployment Assembly에 대해 정리해보려고 한다.

 


 

1. Java Build Path

 

Java Build Path를 확인해보자.

 

 

위의 이미지와 같이 확인할 수 있다.

 

Source folders on build path 영역을 확인해보자.

 

 

Source 탭의 Source folders on build path 영역을 보면

src/main/java 등등의 경로를 확인할 수 있다.

 

이 경로는 프로젝트를 빌드할 때 컴파일러가 컴파일을 하기위한 프로젝트 내의 여러 파일 등이 위치하는 경로를 지정하는 것을 의미한다.

 

이클립스에서 프로젝트를 '빌드' 한다는 의미는 결국 '컴파일' 을 한다는 것을 의미한다. 즉, Java Compile Path이다.

 

 

output folder는 다음과 같다.

프로젝트를 빌드할 때 컴파일러를 통한 컴파일 과정을 마치고나서의 프로젝트 파일들의 저장 경로를 의미한다.

 

컴파일을 통해 .java 파일들을 컴퓨터 (기계) 가 읽을 수 있도록 .class 파일이 생성된다.

 

실제로 '프로젝트명'/target/classes 폴더를 확인하면 아래와 같이 되어 있다.

 

 

 

파일들을 확인해보면 .java 파일들이 모두 컴파일되어 .class 파일로 변환되어 있는 것을 볼 수 있다.

 

.class 파일뿐만아니라, 각종 설정 파일 및 .xml 파일 등도 위치해있는데,

이것은 자바 코드가 런타임 때 이러한 리소스들을 의존하고 있기 때문이다.

 

 

 

 

 

 

2. Deployment Assembly

 

프로젝트 우클릭 - Properties - Deployment Assembly는 프로젝트의 여러 파일들이 .WAR 파일 내에서 어떻게 배치될지를 정의하는 항목이다.

 

Maven 프로젝트이면 pom.xml 설정 파일의 내용을 참고해서 빌드를 수행한다.

 


위의 이미지와 같이 Deployment Assembly (Web Deployment Assembly) 를 확인할 수 있다.

 

여기서 Deploy Path를 볼 수 있는데,

이것이 바로 프로젝트 소스들이 .WAR 파일 내부에서 실제로 배치되는 경로를 의미한다.

 

그동안 프로젝트를 서버에 배포하면, /index.jsp를 URL에 입력했을 때 index.jsp가 실행됬던 이유도,

/src/main/webapp의 Deploy Path가 이 프로젝트의 Root 경로인 ' / ' 로 되어있었기 때문이다.

 

일반적으로 프로젝트 (웹 어플리케이션) 은 정적 리소스와 동적 리소스를 구분해서 관리된다.

 

Maven 프로젝트라면 마찬가지로 진행된다.

 

정리하자면 Maven 프로젝트는 Web Deployment Assembly 탭의 설정 + pom.xml 설정 파일을 통해 빌드가 수행된다.

 

일반적으로,

톰캣 서버 등과 같은 웹 서버가 웹 어플리케이션을 배포할 수 있도록 프로젝트 내부의 여러 파일들을 .WAR 파일로 패키징 한다.

 

 

 

 

 

- 추가 내용 -

 

일반적으로,

톰캣 서버 등과 같은 웹 서버가 웹 어플리케이션을 배포할 수 있도록 프로젝트 내부의 여러 파일들을 .WAR 파일로 패키징 한다.

 

 

하지만 위의 이미지와 같이 target 폴더에 웹 어플리케이션을 빌드해도 .WAR 파일이 보이지 않는 상황이다.

 

이것은 이클립스 또는 STS로 프로젝트를 생성할 때, Dynamic Web Project로 생성한 경우에 해당될 수 있다.

 

Dynamic Web Project가 Maven 프로젝트로 설정되어 있을 때,

Maven 프로젝트를 빌드하면 일반적으로는 .WAR (웹 애플리케이션 아카이브) 파일이 생성 된다.

 

하지만, Maven 프로젝트 빌드 이후,

생성된 WAR 파일을 저장하지 않고, 특정 (톰캣, .. 등등) 서버에 바로 배포하는 설정을 사용할 수 있다.

 

이클립스와 같은 IDE에서 Dynamic Web Project를 생성하고 Maven으로 빌드하면 Maven이 WAR 파일을 빌드하고 해당 프로젝트를 톰캣 서버와 연동해서 자동으로 배포하는 설정을 사용할 수 있다.

 

즉,

배포할 때 소스 코드 및 리소스를 특정 디렉터리에 직접적으로 복사해서 사용하기 때문에 WAR 파일이 생성되지 않는다.

 

 

이클립스는 자체적으로 톰캣을 쉽게 사용할 수 있도록하는 기능을 제공하기 때문에,

별도로 톰캣 서버를 구축하지않고 이클립스 위에 톰캣을 올린 상황이다.

 

Servers 탭에 설정한 톰캣 설정을 확인하면, Server Locations 탭에서 Server Path와 Deploy Path를 확인할 수 있다.

 

 

이렇게 확인 가능하고, 내부를 보면, 아래와 같다.

 

 

톰캣 서버에 배포했었던 웹 애플리케이션들의 소스 리소스가 담긴 디렉터리를 확인할 수 있다.

(.class 파일, .jar (라이브러리 파일), 모든 정적 리소스 및 동적 리소스, ..)

 

 

 

 

 

- 참고 사항 -

 

JSP (JavaServer Pages) 는 동적인 웹 페이지를 생성하기 위한 서버 측 기술이다.

 

JSP 파일 내부에는 자바 코드 및 HTML 태그 언어를 조합해서 코드를 작성할 수 있다.

 

JSP 파일은 클라이언트로부터 요청이 들어오면 서블릿으로 변환되서 실행된다.

(예전에 학습했던 내용.. 그래서 프로젝트에 쓰잘데기 없는 .jsp 파일이 많을수록 Not POJO이므로 무거워짐)

 

톰캣 등의 서블릿 컨테이너는 JSP 파일을 자바 소스 코드로 변환한 이후 컴파일을 진행한다.

이렇게 변환된 자바 소스 코드는 .java 파일로 저장되고, 컴파일된 .java 파일은 .class 파일이 된다.

최종적으로 .class 파일은 클래스 로더에 의해 로딩되고 실행된다.

 

일반적으로 톰캣에서는 JSP 파일의 컴파일된 결과를 work 디렉터리 내에 저장한다.

 

work 디렉터리는 톰캣이 웹 어플리케이션을 실행하기 위해 사용하는 작업 디렉터리이다.

 

이런식으로 동작하는 이유는 JSP는 필요할 때 동적으로 컴파일되는 식으로 동작하는 특징 때문이다.

 

정리하자면, 

1) JSP 파일이 .java 파일로 변환.

2) .java 파일은 컴파일되서 .class 파일로 변환.

 

초기에 굳이 .jsp 파일을 .class 파일로 미리 컴파일 해놓을 이유가 전혀 없다.

 

 

 

 

 

- 추가 학습해서 보충할 예정 -

반응형