본문 바로가기
Web/Spring

3. spring 으로 첫 프로젝트를 만들어보자

by jungwon3004 2022. 2. 1.
728x90
반응형

0. 프로젝트 생성

maven project로 새 프로젝트를 생성한 뒤, pom.xml 파일을 수정해준다.

 

project tag 안에 2가지를 추가해줄 것이다.

<dependencies>를 통해서 module을 추가해주고, <build>를 통해 plugin을 해줄 것이다.

 

우선 spring-context module(library) 하나만 추가해주자.

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

다음으로 build를 해준다.

build tag 안에는 실제로 내 project가 build될 때 필요한 명령들을 적어둔다.

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

이렇게 마무리하고나면 아래와 같은 코드가 완성된다.

반응형

 

 

1. spring project 1단계

 

한 번 java file을 만들어서 실행해보자.

일반 java project와는 달리 maven project에는 많은 폴드들이 있다.

우리는 이 중에서 src\main\java java file을 생성하면 된다.

아주 간단한 2개의 file을 만들어보자.

이렇게 하면 console window에 

도보로 이동합니다.

라는 String이 출력될 것이다.

 

 

그러면 일반 java project와 해당 spring project와의 차이점은 무엇일까?

- 일반 java project : 순수 java를 통해 project 제작

- spring project : main repository에 있는 수많은 modules (libraries)을 필요에 따라 pom.xml 을 통해 추가해서 개발을 진행할 수 있다.

 

 

그렇다면 우리가 위에서 작성한 코드는 java project인가? maven project인가?

당연히 maven project이다.

다만, pom.xml을 통해 가져온 module을 전혀 사용하지 않고 순수 java만으로 만들었을 뿐이다.

728x90

 

 

2. spring project 2단계

이렇게만 만들면 module을 다운로드 받은 의미가 없다.

이제 spring의 구조를 이용해서 코드를 짜보자.

 

spring의 경우, xml 파일에 명시되어 있는 파일을 자동으로 다운로드 받고 그 객체를 container에 생성해둔다.

그리고 우리는 필요할 때 container에 있는 object를 get해서 사용하면 된다.

 

이 구조를 이해하고 코드를 짜보자.

 

(1) 우선 applicationContext.xmlsrc\main\resources에 생성하자

src\main\java 폴더가 실제로 구현되는 java 파일을 저장하는 곳이라면, src\main\resources는 src\main\java의 파일들이 실행되기 위해 필요한 자원들을 담고 있는 곳이라고 할 수 있다.

<?xml version="1.0" encoding="UTF-8"?>

<!-- applicationContext.xml file에서 아래 부분은 거의 똑같아서 대부분 복붙함 -->
<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="tWalk" class="testPjt02.TranspotationWalk" />

</beans>

applicationContext.xml 파일을 src\main\resources에 생성을 하고 다음과 같은 코드를 넣어준다.

참고로

<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 tagcontainer에 생성할 객체를 명시하는 곳이다.

<bean id="tWalk" class="testPjt02.TranspotationWalk" />

만들 instance object의 id를 지정한다.

또 어떤 class의 instance인지도 적어줘야 한다.

중요한 점은 class에는 "package이름.class이름" 순서대로 들어가야 한다는 점이다.

 

앞으로 java 파일에서 container에 접근해서 해당 instance를 불러올 땐 tWalk 라는 이름으로 호출하면 될 것이다.

 

앞선 코드에서는 java파일 내에서 new TranspotaionWalk() 라는 constructor로 instance object를 생성했지만,

이 방법을 이용하면 container에 bean object를 생성하고 필요할 떄 호출만 할 수 있다.

 

(참고로, tag 사용에서 원래 <bean ...></bean> 순서로 작성하는 것이 맞지만, <bean ... /> 이렇게 하나로 줄일 수도 있다.

 

(2) MainClass를 수정하자

package testPjt02;

import org.springframework.context.support.GenericXmlApplicationContext;

public class MainClass {
	public static void main(String[] args) {
		
        //TranspotationWalk tw = new TranspotationWalk();
        
		GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("classpath: applicationContext.xml");

		TranspotationWalk tw = ctx.getBean("tWalk", TranspotationWalk.class);
		
		tw.move();
		
		ctx.close();
	}
}

결론부터 보여주고 시작하자.

 

가장 먼저 TranspotationWalk tw = new TranspotationWalk(); 는 삭제해버린다.

더 이상 이 코드는 필요없다.

java 파일에서 constructor로 object를 직접 생성하는 것이 아니라, container에 이미 생성되어있는 bean 을 가져만 오면 되기 때문이다.

 

이제 기본 java file과는 달리 container에 접근할 수 있는 object를 생성해야 한다.

GenericXmlApplicationContext 라는 class가 이걸 도와준다.

GenericXmlApplicationContext 의 객체를 constructor를 통해서 만들어준다.

여기서 중요한 건 constructor 안에 "classpath: xml 파일 이름"을 적어줘야 한다는 점이다.

 

GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("classpath: applicationContext.xml");

이제 이 ctx instance를 통해서 bean을 가져올 수 있다.

ctx.getBean() 이라는 method를 통해 가져오면 된다.

getBean("id이름", class이름.class)

의 형태로 코드를 작성하면 된다.

TranspotationWalk tw = ctx.getBean("tWalk", TranspotationWalk.class);

 

이렇게 받아온 tw를 이제 사용하면 된다,

 

이게 spring project와 일반 java project의 가장 큰 차이라고 할 수 있다.

 

사실 요즘엔 이렇게 xml을 통해서 bean을 생성하는 것보다 annotaion을 이용해서 bean 생성을 하는 경우가 많긴하다.

그건 다음 번에 다뤄보도록 하겠다,

728x90
반응형