125. 스프링 IoC 컨테이너 사용 준비 (2)
2. Gradle 프로젝트 준비
지금까지는 '동적 웹 프로젝트(Dynamic Web Project)'를 생성하여 실습을 수행하였다. 이번절 부터는 Gradle을 이용하여 프로젝트를 관리할 것이다. 스프링 프레임워크를 사용하려면 그와 관련된 라이브러리 파일이 필요한데, '동적 웹 프로젝트'에서는 관련 사이트로부터 라이브러리 파일을 일일이 내려받아야 한다. 메이븐(Maven)이나 그래들(Gradle)과 같은 전문 프로젝트 빌드 도구를 사용하면 이런 번거로움을 피할 수 있다. 이 책에서는 최근 차세대 빌드 도구로 주목받는 Gradle을 사용하여 라이브러리 및 프로젝트 빌드를 관리한다.
1) 이클립스 메뉴에서 [File] → [New] → [Project...]을 선택한다(그림 1).
2) New Project 윈도우에서 Gradle 노드를 펼치고 Gradle Project를 선택한다. 그리고 <Next> 버튼을 클릭한다(그림 2).
바로 <Next> 버튼을 클릭한다(그림 3).
3) 프로젝트 이름으로 'web08'을 입력하고 <Finish> 버튼을 눌러 프로젝트를 생성한다(그림 4). (교재에 프로젝트 템플릿을 'Java Quickstart'를 선택하라고 나오지만 실제 만들 땐 나오지 않아 생략했다.)
생성된 web08 프로젝트의 폴더 구조를 보면 다음 그림과 같다(그림 5, 그림 6, 그림 7).
프로젝트와 함께 생성된 파일과 폴더는 다음의 용도로 사용한다.
파일 및 디렉토리 | 설명 |
.gradle | Gradle 빌드 도구와 관련된 파일을 두는 폴더 |
.settings | 이클립스와 관련된 설정 파일을 두는 폴더 |
bin | 컴파일된 자바 클래스 파일을 두는 폴더 |
build | Gradle 빌드의 실행 결과물이 놓이는 폴더 |
src/main/java | 자바 소스 파일을 두는 폴더 |
src/main/resources | 애플리케이션이 참조하는 파일을 두는 폴더 |
src/test/java | 단위 테스트 관련 자바 소스 파일을 두는 폴더 |
src/test/resources | 단위 테스트를 수행할 때 참조하는 파일을 두는 폴더 |
.classpath | 이클립스가 참조하는 클래스 경로 설정 파일 |
.project | 이클립스 프로젝트 설정 파일 |
build.gradle | Gradle 빌드 설정 파일 |
(build 폴더는 교재에는 설명되어 있으나 새로 만든 web08 프로젝트에는 보이지 않았다.)
3. Gradle 프로젝트를 웹 프로젝트로 만들기
이클립스는 갓 생성된 Gradle 프로젝트를 자바 프로젝트로 인식한다. 이 프로젝트를 이전에 실습한 웹 프로젝트처럼 톰캣 실행 서버에 등록하여 실행하고 싶다면 웹 프로젝트와 관련된 파일을 생성해야 한다. 이러한 작업도 Gradle을 이용하면 쉽게 처리할 수 있다.
Gradle 설정 파일 build.gradle을 다음과 같이 변경한다.
apply plugin: 'java'
apply plugin: 'eclipse-wtp'
apply plugin: 'war'
compileJava.options.encoding = 'UTF-8'
sourceCompatibility = 1.8
version = '1.0'
eclipse {
wtp {
facet {
facet name: 'jst.web', version: '3.0' // Servlet Spec Version 지정
facet name: 'jst.java', version: '1.8' // Java Version 지정, 1.8 ...
}
}
}
jar {
manifest {
attributes 'Implementation-Title': 'Gradle Quickstart',
'Implementation-Version': version
}
}
repositories {
mavenCentral()
}
dependencies {
compile 'org.springframework:spring-context:4.0.3.RELEASE'
compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
testCompile group: 'junit', name: 'junit', version: '4.+'
}
test {
systemProperties 'property': 'value'
}
uploadArchives {
repositories {
flatDir {
dirs 'repos'
}
}
}
- 웹 프로젝트 관련 Gradle 플러그인 추가하기
Gradle 프로젝트를 이클립스가 이해할 수 있는 웹 프로젝트로 인식하려면 이클립스의 WTP(Web Tools Platform) 플러그인과 관련된 파일을 생성하야 한다. 다음의 Gradle 플러그인을 추가하면 이와 관련된 빌드 명령을 사용할 수 있다. 다음과 같이 'eclipse' 플러그인을 'eclipse-wtp' 플러그인으로 대체하고, 'war' 플러그인을 추가한다.
apply plugin: 'eclipse-wtp'
apply plugin: 'war'
- 소스 파일의 인코딩 형식 지정하기
Gradle은 빌드를 수행할 때 소스 코드의 인코딩이 OS의 기본 인코딩과 같다고 간주하고 작업을 수행한다. 소스 코드에 한글을 포함하지 않는다면 문제가 없지만, 만약 한글을 포함한다면 빌드 오류가 발생할 것이다.
우리는 이 책 초반에서 이클립스를 설정할 때 파일의 기본 인코딩을 UTF-8로 설정하였다. 따라서 우리가 만드는 모든 소스 파일은 UTF-8로 인코딩 된다. 한글 윈도우즈는 문자의 기본 인코딩으로 MS949를 사용하기 때문에 이 경우 소스 파일의 인코딩과 OS의 인코딩이 달라서 빌드 오류가 발생할 수 있다. 이를 방지하기 위해 다음과 같이 소스 파일의 인코딩 형식을 UTF-8로 지정한다.
compileJava.options.encoding = 'UTF-8'
- 소스 코드의 자바 버전 지정하기
소스 코드의 자바 버전을 지정하면 빌드를 수행할 때 그 버전에 맞추어 자바 코드의 문법을 검사한다. 이 프로젝트는 1.8 버전의 자바 문법을 사용할 것이므로 소스 코드의 자바 버전을 1.8로 변경한다.
sourceCompatibility = 1.8
(cmd창에서 java -version을 통해 확인한다.)
- 웹 프로젝트의 서블릿 버전 및 자바 버전 지정하기
웹 프로젝트 관련 파일을 만드는 Gradle 작업을 수행하면 기본으로 서블릿 버전이 2.4로 지정된다. 이를 변경하기 위해 다음과 같이 속성 정보를 추가한다.
eclipse {
wtp {
facet {
facet name: 'jst.web', version: '3.0' // Servlet Spec Version 지정
facet name: 'jst.java', version: '1.8' // Java Version 지정, 1.8 ...
}
}
}
(서블릿 버전을 확인하기 위해 jsp 파일에서 <%= application.getMajorVersion() %>, <%= application.getMinorVersion() %>를 통해 확인한다.)
참고링크 : http://www.munsam.info/xe/jsp_lec/1589007
JSP Spring 강의자료 - 서버, jsp, 서블릿 버전 확인하기
서버정보 <%=application.getServerInfo() %> 서블릿정보 <%=application.getMajorVersion()%>.<%= application.getMinorVersion() %> JSP정보 <%= JspFactory.getDefaultFactory().getEngineInfo().getSpecificationVersion() %> 톰켓 기준으로 버전이
www.munsam.info
나머지 설정은 그대로 둔다. build.gradle 내용에 대한 자세한 설명은 별도로 진행한다.
(교재의 build.gradle로 설정하면 빌드 에러가 발생하여 초기 프로젝트를 생성할 때 build.gradle로 설정했다.
/*
* This file was generated by the Gradle 'init' task.
*
* This generated file contains a sample Java library project to get you started.
* For more details take a look at the 'Building Java & JVM projects' chapter in the Gradle
* User Manual available at https://docs.gradle.org/7.4.2/userguide/building_java_projects.html
*/
plugins {
// Apply the java-library plugin for API and implementation separation.
id 'java-library'
}
repositories {
// Use Maven Central for resolving dependencies.
mavenCentral()
}
dependencies {
// Use JUnit Jupiter for testing.
testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1'
// This dependency is exported to consumers, that is to say found on their compile classpath.
api 'org.apache.commons:commons-math3:3.6.1'
// This dependency is used internally, and not exposed to consumers on their own compile classpath.
implementation 'com.google.guava:guava:30.1.1-jre'
}
tasks.named('test') {
// Use JUnit Platform for unit tests.
useJUnitPlatform()
}
이렇게 하면 BUILD SUCCESSFUL이 콘솔창에 출력된다.)
참고도서 : https://freelec.co.kr/book/1674/
[열혈강의] 자바 웹 개발 워크북
[열혈강의] 자바 웹 개발 워크북
freelec.co.kr