[Spring4] 메이븐 프로젝트 생성과 임포트

[Spring4] 메이븐 프로젝트 생성과 임포트

스프링 개발 실습을 위하여 기본적인 형태의 메이븐 프로젝트를 생성해본다. 메이븐은 프로젝트의 라이브러리를 관리해주는 솔루션이다.

(참고서적 : 스프링4 프로그래밍 입문 / 최범균 / 가메출판사 / 챕터2 : p32 ~ p50)

1. 메이븐 프로젝트 생성

1-1. 폴더 구성

C:\spring4\sp4-chap02 폴더를 생성한다. 이어서 아래와 같은 구조가 되도록 폴더 생성한다.


C:

└ spring4
    └ sp4-chap02
        └ src
            └main
                └java
                └resources


1-2. pom.xml 생성

C:\spring4\sp4-chap02 폴더 내에 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>sp4</groupId>
 <artifactId>sp4-chap02</artifactId>
 <version>0.0.1-SNAPSHOT</version>

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

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

</project>

1-3. 메이븐 컴파일

cmd 로 들어가서
cd C:\spring4\sp4-chap02
mvn compile

이라고 입력한다. 아래와 같이 진행되면 정상이다.



※ 여기서 잠시, 메이븐을 쓰는 이유 간략정리.

메이븐은 중앙 리포지토리(repo.maven.apache.org)의 필요한 파일(아티팩트)을 로컬 리포지토리(C:\Users\[사용자명]\.m2\repository)에 복사(다운로드)한다.

아티팩트란 메이븐이 사용하는 단위로써, 모듈 1개를 의미한다. jar 파일명의 경우 “아티팩트이름-버전.jar” 라고 생각하면 된다.

메이븐은 한 번 로컬 리포지토리에 다운받으면 그 다음부터는 원격 리포지토리에서 다운받지 않는다. (다시 mvn compile을 실행하면 이미 받았던 아티팩트는 건너뛴다.)

특히, 다운받으려는 아티팩트가 의존하는 다른 아티팩트들도 함께 다운로드 해준다. 이게 메이븐의 특장점.


2. 메이븐 프로젝트 임포트

이클립스 기동 – [File] – [Import…] – [Maven] 폴더 – Existing Maven Projects – [Next] 버튼 – Root Directory 에 C:\Spring\sp4-chap02 입력 하면 프로젝트 임포트 된다.

3. 예제코드 작성


3-1. Greeter.java
이클립스 탐색기상의 /src/main/java 밑에 chap02 패키지 생성하고, 그 아래 Greeter.java 파일 생성한다.

내용은 다음과 같이 작성한다.

package chap02;

public class Greeter {
 
    private String format;
 
    public String greet(String guest) {
        return String.format(format, guest);
    }
 
    public void setFormat(String format) {
        this.format = format;
    }
}

3-2. applicationContext.xml
이클립스 탐색기상의 /src/main/resources 밑에 applicationContext.xml 파일 생성한다.
내용은 다음과 같이 작성한다.

<?xml version=”1.0″ encoding=”UTF-8″?>

<beans xmlns=”http://www.springframework.org/schema/beans
    xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance
    xsi:schemaLocation=”http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd“>

    <bean id=”greeter” class=”chap02.Greeter”>
        <property name=”format” value=”%s, 안녕하세요!” />
    </bean>

</beans>

3-3. Main.java
이클립스 탐색기상의 /src/main/java/chap02 패키지 밑에 Main.java 파일 생성한다. (생성시 public static void main(String[] args) 체크하여 만든다.)

내용은 다음과 같이 작성한다.

package chap02;

import org.springframework.context.support.GenericXmlApplicationContext;

public class Main {

    public static void main(String[] args) {
        GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(“classpath:applicationContext.xml”);
        Greeter g = ctx.getBean(“greeter”, Greeter.class);
        String msg = g.greet(“스프링”);
        System.out.println(msg);
        ctx.close();
    }

}

실행하면(Main.java 파일 우클릭 – Run As – Java Application 클릭) 아래와 같이 동작한다.

현재 new를 쓰지 않고 GenericXmlApplicationContext 클래스를 사용해 객체를 생성 및 초기화하고 있다. 책에 따르면, 스프링의 핵심 기능이 바로 객체의 생성 및 초기화라고 한다.

객체 정보를 가져오는 방법은 3가지가 있는데, (1) xml, (2) 자바 설정코드, (3) 그루비 설정코드 이다. xml을 사용시 GenericXmlApplicationContext 클래스를, 자바 어노테이션 사용시 AnnotationConfigApplicationContext 클래스를, 그루비 사용시 GenericGroovyApplicationContext 클래스를 사용하면 된다.

참고로 이렇게 만들어지는 객체들은 기본적으로 싱글톤이다. 실제로 getBean을 2번해도 3번해도 동일한 객체가 튀어나오게 된다. (등호 2개로 == 이렇게 비교해도 true가 나온다. 싱글톤이니 같은 주소값을 갖기 때문.) 싱글톤을 원하지 않는다면 프로토타입 범위로 설정하면 된다.