2. 스프링 시작하기 #1 메이븐 프로젝트 생성

2021. 7. 1. 11:36JAVA/Spring

본 글은 최범균 저자의 초보 웹 개발자를 위한 스프링5 프로그래밍 입문 도서의 복습을 위한 내용입니다.

1. 스프링 프로젝트 시작하기

1.1 프로젝트 폴더 생성

프로젝트를 생성할 기준 폴더는 spring5fs 폴더라고 가정하고 진행한다.

 

step1  프로젝트 폴더를 다음과 같이 생성

  • spring5fs/sp5-chap02/src/main/java

1.2 메이븐 프로젝트 생성

step1 pom.xml 파일 생성 및 작성

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
		http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>sp5</groupId>
	<artifactId>sp5-chap02</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>5.0.2.RELEASE</version>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.7.0</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>utf-8</encoding>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>
  • 08행 : 프로젝트의 식별자 지정. 여기서는 프로젝트 폴더와 동일한 이름인 sp5-chap02를 사용
  • 12~16행 : 5.0.2 RELEASE 버전의 spring-context 모듈을 사용
  • 21~29행 : 1.8 버전 기준으로 자바 소스 컴파일 후 결과 클래스를 생성한다. 자바 컴파일러가 소스 코드를 읽을 때 사용할 인코딩은 UTF-8로 설정

pom.xml 파일이란 무엇인가?

모든 메이븐 프로젝트는 프로젝트의 루트 폴더에 pom.xml 파일을 갖는다. pom.xml은 메이븐 프로젝트에 대한 설정 정보를 관리하는 파일로서 프로젝트에서 필요로 하는 의존 모듈이나 플러그인 등에 대한 설정을 담는다.

 

1.2.1 메이븐 의존 설정

pom.xml 파일에 의존과 플러그인의 두 가지 정보를 설정하였다. 여기서 의존 설정은 다음과 같다.

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>5.0.2.RELEASE</version>
</dependency>

메이븐은 한 개의 모듈을 아티팩트라는 단위로 관리한다. 위 설정은 spring-context라는 식별자를 가진 5.0.2 RELEASE 버전의 아티팩트에 대한 의존(dependency)을 추가한 것이다. 여기서 의존을 추가한다는 것은 일반적인 자바 어플리케이션에서 클래스 패스에 spring-context 모듈을 추가한다는 것을 뜻한다. 각 아티팩트의 완전한 일므은 "아티팩트이름-버전.jar"이므로, 위 설정은 메이븐 프로젝트의 소스 코드를 컴파일하고 실행할 때 사용할 클래스 패스에 spring-context-5.0.2.RELEASE.jar 파일을 추가한다는 것을 의미한다.

 

1.2.2 메이븐 리포지토리

pom.xml 파일에 의존 설정을 추가했지만 아직 spring-context-5.0.2.RELEASE.jar 파일을 어디서도 다운로드하지 않았다. 클래스 ㅍ해스에 jar 파일을 추가하려면 파일 시스템 어딘가에 이 파일이 존재해야 한다. 파일을 구하는 방법은 원격 리포지토리와 로컬 리포지토리에 존재한다.

메이븐은 코드를 컴파일하거나 실행할 때 <dependency>로 설정한 아티팩트 파일을 사용한다. 아티팩트 파일은 다음 과정을 거쳐 구한다.

  • 메이븐 로컬 리포지토리에서 [그룹ID]\[아티팩트ID]\[버전] 폴더에 아티팩트ID-버전.jar 형식의 이름을 갖는 파일이 있는지 검사한다. 파일이 존재하면 이 파일을 사용한다.
  • 로컬 리포지토리에 파일이 없으면 메이븐 원격 중앙 리포지토리로부터 해당 파일을 다운로드하여 로컬 리포지토리에 복사한 뒤 그 파일을 사용한다.

아티팩트 파일 저장경로

더보기

[사용자홈폴더]/.m2/repository/org/springframework/spring-context/5.0.2.RELEASE

 

원격 리포지토리로부터 아티팩트 파일 다운로드

더보기

sp5-chap02$ mvn compile

 

아티팩트 파일 다운로드 확인

아티팩트 파일 저장경로로 이동하면 spring-context-5.0.2.RELEASE.jar 파일이 다운로드 된 것을 확인할 수 있다.

 

1.2.3 의존 전이(Transitive Dependencies)

"mvn compile"을 실행하면 spring-context-5.0.2.RELEASE.jar 파일 외에 다양한 아티팩트 파일이 다운로드하는 것을 확인 할 수 있다. 이 파일에는 컴파일을 수행하는데 필요한 메이븐 컴파일러 플러그인과 같이 메이븐과 관련된 파일이 포함된다. 추가로 의존(<dependency>)에서 설정한 아티팩트가 다시 의존하는 파일도 포함된다.

 

5.0.2.RELEASE 버전의 spring-context 아티팩트는 1.8.13 버전의 aspect.jweaver, 5.0.2.RELEASE 버전의 spring-aop, spring-beans, spring-core 아티팩트에 의존한다. 즉 spring-context를 사용하려면 spring-aop, spring-beans 등의 다른 아티팩트도 추가로 필요하다. 즉, 메이븐은 의존하는 대상뿐만 아니라 의존 대상이 다시 의존하는 대상도 함께 다운로드한다.

 

따라서 의존 대상이 다시 의존하는 대상까지도 의존 대상에 포함하기 때문에 이를 의존 전이(Transitive Dependencies)라고 한다.

 

1.2.4 메이븐 기본 폴더 구조

더보기

sp5-chapXX

|---pom.xml

|---src

     |---main

           |---java

           |---resources

           |---webapp

                  |---WEB-INF

                  |---web.xml                     

  • java : 자바 소스 코드가 위치
  • resources : 자바 소스 이외의 다른 자원 파일
  • webapp : 웹 어플리케이션 개발 파일, JSP 소스 코드나 WEB-INF/web.xml 파일 등을 작성해서 저장한다.

1.2.5 메이븐 프로젝트 임포트

step1 이클립스에서 File->Import 메뉴 사용

step2 Maven/Existing Maven Projects 선택

step3 Root Directory 경로로 sp5-chap02 설정

step4 임포트 결과 확인

References

초보 웹 개발자를 위한 스프링5 프로그래밍 입문, 최범균 저