Spring & Springboot/올인원 스프링 프레임워크

스프링 프로젝트 생성하기

YJ_ma 2023. 9. 12. 02:01

메이븐 프로젝트

컴파일과 빌드의 차이

소프트웨어를 개발한다는 것은 필요한 라이브러리를 찾고 이를 이용해서 코딩한 후 마지막으로 빌드(build)까지 진행하는 일련의 과정이다.

컴파일 빌드
- 코딩한 코드 파일을 컴파일러가 바이트코드 파일로 변환하는 과정
- 바이트코드 파일은 JVM에 의해 기계어로 바뀌어 컴퓨터에서 실행된다.
- 컴파일보다 넓은 의미
- 라이브러리 다운로드 및 연결, 컴파일, 링크, 패키징 등 애플리케이션 제작에 필요한 전반적인 과정
링크 : 서로 다른 파일을 연결해서 메서드 호출 등의 업무가 가능하게 만드는 것
패키징 : 구현된 각각의 기능을 하나로 합쳐서 실행 파일을 만드는 것

 

빌드툴의 종류

Ant, Maven, Gradle이 있다.

 

메이븐 프로젝트 생성하기

New > Project > Maven > Maven Project 선택

Create a simple project 체크하고 <Next> 버튼 클릭한다.

Group Id : spring5

Artifact Id (프로젝트 이름) : ch03_pjt_01

다음처럼 선택하고 Finish버튼을 클릭한다.

메이븐 프로젝트 생성 결과

메이븐 프로젝트 실행하기

프로젝트 시나리오

- MainClass에서 이동수단(TransportationWalk) 객체를 생성한다.

- 생성된 이동수단(TransportationWalk) 객체의 move() 메서드를 호출한다.

- move() 메서드 호출 시 콘솔 창에 해당하는 이동수단(도보)를 출력한다.

 

▶ 프로젝트 구조

- MainClass는 TransportationWalk 클래스를 사용한다.

 

TransportationWalk 클래스 생성

src/main/java에 TransportationWalk 클래스를 생성하고 다음 코드를 입력한다.

package ch03_pjt_01;

public class TransportationWalk {
	public void move() {
		System.out.println("도보로 이동합니다.");
	}
}

 

MainClass 클래스 생성

package ch03_pjt_01;

public class MainClass {
	public static void main(String[] args) {
		TransportationWalk transportationWalk = new TransportationWalk();
		transportationWalk.move();
	}

}

MainClass 클래스를 실행하여 정상적으로 move() 메서드가 수행되는지 확인한다.

실행 결과

즉, MainClass 클래스는 TransportationWalk 클래스를 생성하고, move() 메서드를 호출한다.

MainClass에서 TransportationWalk 객체를 new 연산자를 이용해서 생성하고 이용하고 있는 것을 보아 'MainClass는 TransportationWalk에 의존한다'는 것을 확인할 수 있다.

 

스프링 프로젝트 생성하기

프로젝트 만들기

ch03_pjt_02 프로젝트 생성하기

ch03_pjt_01을 복사해서 ch03_pjt_02 프로젝트를 생성한다.

패키지 명도 ch03_pjt_01 → ch03_pjt_02로 변경한다.

pom.xml 작업하기

ch03_pjt_01에서는 main()에 TransportationWalk를 직접 생성했다.

ch03_pjt_02에서는 GenericXmlApplicationContext를 이용해서 스프링 IoC 컨테이너에서 Bean으로 생성하여 사용한다.

 GenericXmlApplicationContext를 사용하기 위해서는 메이븐(pom.xml)을 이용하여 spring-context-5.2.9.RELEASE.jar를 가져와야 한다.

pom.xml을 다음과 같이 추가해준다.

<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>spring5</groupId>
  <artifactId>ch03_pjt_01</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <!-- spring-context 모듈 -->
  <dependencies>
	  <dependency>
		  <groupId>org.springframework</groupId>
		  <artifactId>spring-context</artifactId>
		  <version>5.2.9.RELEASE</version>
	  </dependency>
  </dependencies>
  
  <!-- 빌드 설정 -->
  <build>
	  <plugins>
		  <plugin>
			  <artifactId>maven-compiler-plugin</artifactId>
			  <version>3.1</version>
			  <configuration>
				  <source>11</source>
				  <target>11</target>
				  <encoding>utf-8</encoding>
			  </configuration>
		  </plugin>
	  </plugins>
  </build>
  
</project>

 

프로젝트 업데이트하기

ch03_pjt_02 프로젝트에서 JRE 라이브러리를 1.5 → 11로 변경하기 위해 프로젝트를 업데이트 해주어야한다.

ch03_pjt_02 우클릭 > Maven > Update Project

업데이트 하기 업데이트 한
업데이트 전 모습
업데이트 후 모습

 

applicationContext.xml 생성하기

이제 IoC 컨테이너 역할을 하는 스프링 설정 파일 applicationContext.xml을 생성한다.

cho3_pjt_02 프로젝트 > src/main/resources 우클릭 > New > Other > XML > XML File 선택

[New XML File]창에서 File name을 applicationContext.xml로 하고 <Finish> 버튼 클릭한다.

이제 applicationContext.xml에 다음과 같이 입력한다.

만약 화면이 다음과 같으면 아래 Design > Source 버튼을 클릭하면 코드 화면으로 변경된다.

에러 : 해당 xsd파일을 찾을 수 없다는 경로 문제 발생

[해결방안]

http → https 로 변경하면 에러 해결

<?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 
    https://www.springframework.org/schema/beans/spring-beans.xsd">  

    <bean id="tWalk" class="ch03_pjt_02.TransportationWalk" />  

</beans>

 

MainClass.java도 다음과 같이 수정해준다.

package ch03_pjt_02;

import org.springframework.context.support.GenericXmlApplicationContext;

public class MainClass {
	public static void main(String[] args) {
		//		TransportationWalk transportationWalk = new TransportationWalk();
		//		transportationWalk.move();

		GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("classpath:applicationContext.xml");
		TransportationWalk transportationWalk = ctx.getBean("tWalk", TransportationWalk.class);
		transportationWalk.move();

		ctx.close();
	}

}

 

디렉터리와 pom.xml 파일의 이해

프로젝트의 디렉터리 및 메이븐 설정 파일의 역할에 대해 살펴본다.

디렉터리의 구성과 역할

디렉터리 역할
ch03_pjt_02 프로젝트 root
ch03_pjt_02/src/main/java .java 파일 관리
ch03_pjt_02/src/main/resources 자원 관리

디렉터리 구성

· java(ch03_pjt_02/src/main/java) 디렉터리 : 앞으로 만들어지는 자바 파일들이 관리되는 곳

· resources(ch03_pjt_02/src/main/resources) 디렉터리 : 자원을 관리하는 폴더, 스프링 설정파일(XML) 또는 property파일 등이 관리되는 곳

 

메이븐 설정 파일 : pom.xml

· 필요한 라이브러리를 연결해주고 빌드 설정을 담당한다.

· 필요한 모듈을 작성하면 해당 모듈의 라이브러리가 자동으로 컴퓨터에 다운로드 되고 IDE와 연결되어 사용 가능

· 스프링 프로젝트에 필요한 라이브러리와 빌드에 필요한 정보가 적혀있는 명세서

 

메인 리포지토리

아파치 재단 사이트(https://mvnrepository.com/)에서 pom.xml 파일을 이용해 모듈을 내려받을 수 있다.

- 이미 이전에 pom.xml에 spring context를 수기로 작성하여 별도로 추가하지 않아도 된다.

- spring context를 검색하여 최신버전을 확인할 수 있다.

- 이때, 무조건 최신버전 사용은 권장하지 않는다.

(RELEASE가 붙어있거나 Usages가 높은 버전을 사용하기를 권장 → 문제 발생 방지 및 호환성 고려)

1. spring context 검색 2. Spring Context 5.2.9.RELEASE의 Maven 복사

 

로컬 리포지토리

로컬 리포지토리 : 다운로드한 라이브러리(.jar)는 개발자 컴퓨터에 저장되고 이를 의미한다.

■ spring-context 모듈 설정

스프링은 모듈 하나를 artifact(아티팩트)라는 단위로 관리한다.

위의 코드는 org.springframework 그룹에 있는 spring-context라는 모듈의 5.2.9.RELEASE라는 버전을 프로젝트에서 사용(의존)한다는 의미이다.

이렇게 설정해놓으면, '메인 리포지터리'에서 'spring-context-5.2.9.RELEASE.jar' 파일이 다운로드되어 '로컬 리포지토리'에 저장된다.

 

· '로컬 리포지토리'의 저장 경로

C:\Users\사용자\.m2\repository\

 

· spring-context-5.2.9.RELEASE.jar 경로

C:\Users\사용자\.m2\repository\org\springframework\spring-context\5.2.9.RELEASE\spring-context-5.2.9.RELEASE.jar

 

다양한 모듈의 라이브러리

spring-context-5.2.9.RELEASE.jar 파일 외에도 또 다른 라이브러리 파일들을 확인할 수 있다.

pom.xml에 의해 spring-context-5.2.9.RELEASE.jar가 다운로드되고, 프로젝트에서 spring-context-5.2.9.RELEASE.jar 에 의존한다. 이때 spring-context-5.2.9.RELEASE.jar는 단독으로 실행하지 못하고 또 다른 의존 파일(라이브러리)에 의존하게 된다. 그래서 자동으로 spring-context 모듈이 의존하는 모든 모듈의 라이브러리가 내려받게 된다.

 

즉, 개발자는 spring-context-5.2.9.RELEASE.jar가 필요(의존해야 함)해서 다운로드하고, 나머지 폴더 안에 .jar 파일들은 spring-context-5.2.9.RELEASE.jar가 의존하고 있기 때문에 같이 다운로드된 것이다.