Spring

이클립스 Java Build Path와 Deployment Assembly 그리고 target

천방지축 개발노트 2023. 5. 24. 23:28

프로젝트의 Properties 창을 보면 여러 설정들이 있는데,
target이란 디렉토리를 알아보던 중 Java Build Path와 Deployment Assembly 에 대해 정리해 봤다.

 


 

Java Build Path

Properties의 Java Build Path
Java Build Path항목의 Source탭

1) Source 탭은 컴파일 및 빌드 과정에서 소스 파일들을 이용할 수 있도록 프로젝트 내의 Java 파일 등의 경로를 지정하는 곳이다.

2) 이클립스에서 'Build'는 주로 컴파일을 의미하기에, Java Compile Path라고 생각하면 된다.

3) 'Output folder'의 경로는 java가 소스파일들을 컴파일하여 실행 가능한 .class 파일을 생성하는 경로를 나타낸다.

실제로 '프로젝트명/target/classes' 폴더를 열어보면 각종 설정 파일 및 xml 파일 또한 위치해있는데, 그 이유는 Java코드가 런타임에 이러한 리소스들을 의존하고 있기 때문이다.

 

 

Deployment Assembly

Properties의 Deployment Assembly
Web Deployment Assembly 설정

Properties의 "(Web) Deployment Assembly"는 Spring 프로젝트에서 웹 애플리케이션의 소스들이 WAR파일 내에서 어떻게 배치되는지를 정의하는 항목이다. Maven은 해당 설정 및 pom.xml의 내용을 참고하여 빌드를 수행한다.

 

Source Deploy Path
Source Path들은 프로젝트 내의 소스 경로를 나타냄. Spring 프로젝트의 소스들이
WAR파일 내에서 실제로 배치될 경로를 나타냄.

(위 사진과 같이 WAR파일 내의 폴더 구조를 기준으로 지정된다)

또한 일반적으로 웹 애플리케이션의 root 경로 '/' 가
프로젝트 소스의 '/src/main/webapp'으로 알고 있는데,
이 또한 Deploy Path에서 확인이 가능하다.


이렇게 때문에 WAR파일 폴더구조(웹 애플리케이션의 구조)가 webapp 하위 경로에서부터 시작하는 것이며, 그래서 URL에
'/index.jsp'를 치면 webapp/index.jsp파일이 실행되는 것.

 

일반적으로 웹 애플리케이션은 정적인 리소스와 동적인 리소스를 구분하여 관리되며, Maven도 이 구조와 마찬가지로 리소스들을 관리한다. 다음은 이클립스에서 Maven Build 진행 시의 핵심 과정이다.

 

pom.xml의 build태그target 폴더 하위의 각종 파일들
pom.xml과 target 폴더

1) 컴파일 진행하여 'target/classes' 폴더에 클래스 파일들을 위치시킴.

2) 정적인 리소스 파일들(HTML, CSS, JavaScript, 이미지 파일 등)을 관리하는 폴더도 생성함.

  → pom.xml에 적혀있는 위치(target/${project.name})에 정적 리소스들을 복사.

  → 'target/${project.name}' 폴더로 자동 생성되는 것은 Maven의 기본 동작.

3) 궁극적으로 Maven은 1번 및 2번 동작으로 미리 만들어둔 파일들과 이외 각종 결과물들을 활용해 WAR파일을 생성함.

 

 

정리

1) '프로젝트명/target' 폴더는 컴파일 및 빌드 시 생성되는 파일들이 위치하는 곳이다.

2) Maven은 빌드 시에 리소스를 컴파일하고 정적인 파일들을 위치시키며, 이를 패키징해서 실행 가능한 아티팩트인 WAR파일 생성하는데, 이때 프로젝트의 구조와 설정을 기반으로 진행한다.

즉, Maven은 "Web Deployment Assembly"탭의 설정과 pom.xml의 정의된 내용을 참고하여 빌드를 수행한다.

추가적으로 WAR 뿐만 아니라 다른 리소스들 또한 pom.xml에 작성된 경로(일반적으로 ${project.basedir}/target)에 모두 위치한다.