새소식

반응형
Java/Spring

Spring Boot 에서 classpath 의 의미와 경로

  • -
반응형

classpath 란?

classpath 는 어플리케이션이 실행될 때 참조하는 리소스 및 클래스 파일의 경로를 의미한다.

Spring 에서 application.properties, application.yml, 템플릿 데이터, 정적 자원 등을 찾아야 할 때 사용하는

기준 경로이다.

 

Gradle 프로젝트의 경우

build/
 └── classes/
      └── java/
           └── main/
                └── com/example/...

 

 

 

Maven 프로젝트의 경우

target/
 └── classes/
      └── com/example/...

 

Spring 빌드 시 src/main/java 의 컴파일된 .class 파일 뿐만이 아니라 src/main/resources/ 에 위치한 파일들도

자동으로 classes 디렉토리에 포함된다.

 

Maven 빌드 시 프로젝트 폴더 내 target/ 이라는 폴더가 생긴다. (본인은 Spring Boot 3, Java17 이다)

 

target 하위에 classes 내용안에 src/main/java 내의 컴파일된 .class 파일과

src/main/resources 내 정적파일 등 classpath 에 추가된걸 확인할 수 있다.

 

WAR 파일 확인

빌드된 WAR 파일의 압축을 풀게되면 아래와 같이 폴더 구조이다.

 

WAR 파일/WEB-INF/classes/ 경로에 위 /target/classes 처럼 .class 파일 및 정적파일이 생성되어 있다.

 

 

classpath 설정 방법

보통은 빌드 도구(Gradle/Maven) 에 의해 자동 설정되지만, 수동으로도 classpath 를 설정할 수 있다.

 

Gradle 일 경우

sourceSets {
    main {
        resources {
            srcDirs = ['src/main/resources', 'src/main/extra-resources']
        }
    }
}

 

 

Maven 일 경우

pom.xml 폴더 내 <resources></resources> 태그를 사용하여 설정할 수 있다.

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
        <resource>
            <directory>src/main/extra-resources</directory>
        </resource>
    </resources>
</build>



 

Spring Boot Thymeleaf 설정

Spring 에서 설정파일을 보면 classpath:/templates/ 처럼 classpath: 를 경로에 사용하는걸 볼 수 있다.

 

 

위 예시는 application.yml 파일이고 Spring Boot 에서 thymeleaf 를 설정하는 소스이다.

prefix 인 .html 파일의 경로를 설정하는데 classpath 를 사용했다.

 

pom.xml 파일 내 resources 설정

 

위처럼 src/main/resources 와 환경마다 resources 경로를 다르게 분리할 maven profile 설정(src/main/resource-profile명)

그리고 임의로 src/main/test-resources 를 생성했다.

 

 

이렇게 경로를 설정할때 사용하는 classpath 의 경로위치는 어디에서 확인할 수 있는지 보자

 

프로젝트 > 마우스 오른쪽 클릭 > Build Path > Configure Build Path > Java Build Path > Source 탭 클릭

 

아래 이미지처럼 Source filders on build path: 에 나오는 폴더들이 classpath 경로 위치에 해당한다.

Spring 빌드 시 아래의 소스폴더들은 classpath 에 빌드된다.

 

thymeleaf 의 설정에서 classpath:/templates 를 prefix 로 설정하게 되면 /src/main/resources 하위에 있는

templates 폴더에 html 파일들을 넣어놓으면 된다.

 

반응형
Contents