클래스패스(=classpath)에 대한 정리

1. 개요

클래스패스란 정확하게 뭔지 설명할 수도 없고, 이해도 가지 않았다.
스프링 프로젝트의 환경설정에서 클래스패스를 기준으로 경로가 지정되있는걸 많이 보았는데 
정확하게 클래스패스란 어떤건지 내 기준으로 이해하기 위하여 이 글을 작성하게 되었다.

 

2. 클래스패스를 확인하는 방법

방법1. Build Path를 이용

프로젝트를 우클릭한다 -> Build Path -> Configure Build Path.. -> Source탭을 클릭 -> 하단의 Default Output folder

 

방법2. classPath파일을 참고

ctrl + shift + r -> .classpath파일을 연다.

PS.단, 위 내용에서 클래스패스가 변경될 경우 동기화가 되지 않기 때문에
두 군대 모두 바꿔줘야하지만 왠만해서 변경할 일이 없다.

 

3. 스프링에서의 클래스패스란

클래스패스란 여러개를 의미하는건지 이때까지는 몰랐었다. 쉽게 생각하면 클래스 파일이 생성되는 경로이다.
스프링의 경우 메이븐을 이용하여 빌드가 될때 컴파일이 필요없는 파일부터 필요한 파일까지도 /target/ 경로에 새로 빌드된 파일이 생성된다. 때문에 메이븐 환경에서는 src/java, src/resource, src/webapp등에 있는 파일들을 클래스패스로 인식하여 접근할 수 있고, /target/경로가 모든 소스가 빌드가 되어 클래스패스가 된다. 

때문에 환경설정에서 파일의 경로를 지정할 때 classpath:를 사용하지 않아도 상관없다.

하지만, 메이븐이 아닌 일반적인 Java EE의 경우에는 별도로 빌드하여 target이라는 폴더에 재생성되는 것이 아니기 때문에 상단의 클래스패스를 확인하는 방법을 참고하여 실제로 클래스파일이 생성되는 경로만을 클래스패스로 사용할 수 있다.

 

4. 정리하자면

스프링 환경에서는 메이븐을 이용하여 빌드를 할때 target폴더에 한번에 재생성하기 때문에 모든 경로를 사용할 수 있어서 생략이 가능하다.

일반적인 Java EE 환경에서는 클래스는 빌드 자동화 툴이 없다. 컴파일된 클래스파일이 생성되는 위치가 정해져 있을 수 있기 때문에 클래스패스는 특정 경로이며, classpath:의 명시는 반필수이다.