교재 실습/자바 웹 개발 워크북

125. 스프링 IoC 컨테이너 사용 준비 (2)

Jint 2022. 10. 3. 22:40

2. Gradle 프로젝트 준비

지금까지는 '동적 웹 프로젝트(Dynamic Web Project)'를 생성하여 실습을 수행하였다. 이번절 부터는 Gradle을 이용하여 프로젝트를 관리할 것이다. 스프링 프레임워크를 사용하려면 그와 관련된 라이브러리 파일이 필요한데, '동적 웹 프로젝트'에서는 관련 사이트로부터 라이브러리 파일을 일일이 내려받아야 한다. 메이븐(Maven)이나 그래들(Gradle)과 같은 전문 프로젝트 빌드 도구를 사용하면 이런 번거로움을 피할 수 있다. 이 책에서는 최근 차세대 빌드 도구로 주목받는 Gradle을 사용하여 라이브러리 및 프로젝트 빌드를 관리한다.

1) 이클립스 메뉴에서 [File] → [New] → [Project...]을 선택한다(그림 1).

그림 1 (File - New - Project... 선택)

2) New Project 윈도우에서 Gradle 노드를 펼치고 Gradle Project를 선택한다. 그리고 <Next> 버튼을 클릭한다(그림 2).

그림 2 (Gradle 프로젝트 생성)

바로 <Next> 버튼을 클릭한다(그림 3).

그림 3 (Next 선택)

3) 프로젝트 이름으로 'web08'을 입력하고 <Finish> 버튼을 눌러 프로젝트를 생성한다(그림 4). (교재에 프로젝트 템플릿을 'Java Quickstart'를 선택하라고 나오지만 실제 만들 땐 나오지 않아 생략했다.)

그림 4 (Gradle 프로젝트 정보 입력창)

생성된 web08 프로젝트의 폴더 구조를 보면 다음 그림과 같다(그림 5, 그림 6, 그림 7).

그림 5 (web08 프로젝트 폴더 구조1)
그림 6 (web08 프로젝트 폴더 구조2)
그림 7 (web08 프로젝트의 lib 폴더 구조)

프로젝트와 함께 생성된 파일과 폴더는 다음의 용도로 사용한다.

파일 및 디렉토리 설명
.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