Scope : 해당 의존성을 언제 어떻게 Class Path에 넣어서 사용할 것인가를 정의하는 값이다.

 

Scope Type 

1. Compile : 
 - Compile 시점에 필요하다.
 - 기본값(=Default)이다.
 - 프로젝트의 모든 Class Path에 추가된다.
 - 기본값이기 때문에 만일 scope 설정을 안하면 compile이 기본입니다
 
2. Runtime : 
 - Runtime 시점에 필요하다.
 - Compile 시점에는 필요가 없지만 실행 시점에는 필요하다.
 - Runtime, 테스트 시 Class Path에 추가 되지만 Compile시에는 추가 되지 않는다.
 - ex) JDBC 드라이버
 
3. Provided :
 - Compile 시점에 필요하지만 배포시점에는 불필요한 라이브러리로 JDK, servlet API, Java EE API 등이 해당된다.
 - provided 스코프는 최종 Build Artifact 에 포함되지 않을 때 사용한다. 
 - 예를 들면 프로젝트가 servlet api를 의존하고 있는데, tomcat에서는 기본적으로 servlet api을 제공하고 있을 경우 artifact 에 포함시킬 필요가 없다.
 - Scope 값을 provided로 설정한 의존성에 대해서는 Runtime 시점에 JDK 혹은 컨테이너가 제공한다.
 - 간략 요약하면 Wep Application 개발 시 Servlet API or Java EE API들은 provided Scope으로 지정해야한다. 왜냐하면 톰캣과 같은 컨테이너가 제공해주기 때문이다.
 - 만약 운영환경에서 servlet-api.jar 중복으로 인한 문제가 발생한다면 꼭 provided로 바꿔주셔야 합니다.
 - ex) Servlet API
 
4. Test
 - Compile 시점에 필요하다.
 - 배포때는 제외된다.
 - ex) JUnit
 
5. system
 - system은 provided와 유사하지만 JAR 파일을 직접 사용합니다.
 - 이 때는 JAR 파일의 위치를 지정하는 systemPath 엘리먼트가 따라와야 해요.

+ Recent posts