본문 바로가기

Backend/Spring & SpringBoot

[Spring Framework] 01. Spring과 maven의 이해

728x90

1.1 스프링 프레임워크 개요
- 프레임워크 : 기본뼈대. 방향성을 제시하고 원하는 기능을 빠르게 만들 수 있음. 
- 스프링 프레임워크는 DI, AOP, MVC, JDBC등을 제공한다. 
- 모듈 : 라이브러리, 프레임워크안에 미리 만들어져 있는 기능n 

1.2 스프링 프레임워크 특징
1) POJO(Plain Old Java Object) 기반의 프레임워크
 자바 객체의 라이프사이클을 스프링 컨테이너가 직접 관리하며, 
 스프링 컨테이너로부터 필요한 객체를 얻어올 수 있다. 

2) DI(Dependency Injection) 을 지원
 각 계층이나 서비스 들 사이 또는 객체들 사이에 의존성이 존재할 경우
 스프링 프레임워크가 서로를 연결시켜준다.
 -> 클래스들 사이에 약한 결합을 가능하게 해줌.

3) AOP(Aspect Oriented Programming)를 지원
 트랜잭션, 로깅 보안 등 여러 모듈에서 공통적으로 지원하는 기능을 분리하여 사용가능
 - 관점 지향 프로그래밍 
 - 전지적 작가시점으로 위에서 바라보며, 특정 부분에 필터를 넣어줄수 있다고 보면된다. 


4) 확장성이 높다. 
 스프링 프레임워크의 소스는 모두 라이브러리로 분리시켜 놓음으로써 
 필요한 라이브러리만 가져다 쓸 수 있다. 
 많은 외부 라이브러리가 이미 스프링 프레임워크와 연동된다. 
-> Model2 방식의 MVC Framework를 지원. 

 

1.3 스프링프레임워크의 런타임

Spring framework 런타임

Core Container에서 Beans, Core, Context, SpEL이 있다는 점. 

 

<스프링 모듈의 기능>

spring-core : 스프링의 핵심기능 DI와 IoC를 제공

spring-aop : AOP구현 기능 제공

spring-jdbc : 데이터베이스를 쉽게(적은양의 코드) 다룰 수 있는 기능 제공

spring-tx : 스프링에서 제공하는 트랜잭션 관련 기능 제공

spring-webmvc : 스프링에서 제공하는 MVC를 이용하여 구현기능 제공

 

* 스프링 프레임워크에서 제공하는 모듈(라이브러리)를 사용하려면, 

모듈에 대한 의존설정을 개발프로젝트에 XML 파일 등을 이용해서 개발자가 직접 작성하면 된다. 

 

1.4 스프링 컨테이너(IoC)

- 스프링에서 객체를 생성하고 조립하는 컨테이너로, 컨테이너를 통해 생성된 객체를 빈이라고 한다

 

스프링 컨테이너에서 객체 생성 

 

 

* IoC : Inversion of Control

- 제어의 역전

- 객체를 필요할 때 생성해서 사용하는 것이 아니라 미리 생성해 놓고 꺼내어 사용하는 방식.

 

1.5 Maven 프로젝트 만들어보기 

src/main/java : class파일들이 들어가는 곳

src/main/resources : 설정파일들이 들어감

src/test/java

src/test/resources :  test용 

pom.xml : 라이브러리 모듈이 들어감

=> 필요한 라이브러리를 특정 문서(pom.xml)에 정의해 놓으면 네트워크를 통해서 라이브러리들을 자동으로 다운 받아 줍니다.

 

 

* 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>SpringTest</groupId>
  <artifactId>basic</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <dependencies>
  
  	<!-- Spring-Context 모듈 -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-context</artifactId>
	    <version>5.1.5.RELEASE</version>
	</dependency>

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

<dependencies> 

~

</dependencies> 내부에는 모듈을 넣는다. 

<build>

~

</bulid> 컴파일러 설정을 한다. 

 

* 반드시 설정변경 후에 Alt+F5를 눌러 Maven 프로젝트를 update 해준다.

 

* 내부 파일 

1. java 폴더(/src/main/java)의 경우 특별한 것은 없고, 앞으로 만들어지는 자바 파일들이 관리되는 폴더이다.

2. resources 폴더(/src/main/resources)의 경우 자원을 관리하는 폴더로 스프링 설정 파일(XML) 또는 프로퍼티 파일들이 관리된다.

3. java, resources 폴더는 스프링 프레임워크의 기본 구조를 이루는 폴더로 개발자는 이대로 폴더를 구성해야 한다.

 

4. pom.xml 파일은 메이븐 설정파일로 메이븐은 라이브러리를 연결해주고, 빌드를 위한 플랫폼이라고 보면된다. 

=> 메이븐을 이용하면 라이브러리를 태그만 써서 바로 사용할 수 있다는 점!

<객체주입후 부르기 >

-기존의 Jsp 프로그래밍이나 java프로그래밍을 할때와 다른 모습을 볼 수 있다. 

 

* SpringTest.java

package basic;

public class SpringTest {
	public void hello() {
		System.out.println("스프링 객체 주입 테스트");
	}
}

 

*HelloSpring.java

package basic;

import org.springframework.context.support.GenericXmlApplicationContext;

public class HelloSpring {

	public static void main(String[] args) {
		/*
		 원래 이렇게 해야됐음! 
		 
		 SpringTest st = new SpringTest();
		 st.hello();
		 */
         //GenericXmlApplicationContext 객체를 이용해 받는다.
		GenericXmlApplicationContext ct 
		= new GenericXmlApplicationContext("classpath:test-config.xml");
		SpringTest st =ct.getBean("test", SpringTest.class);
		st.hello();
		
		ct.close();	//ct 객체 닫아준다.
	}
}

* test-config.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="test" class="basic.SpringTest" />

</beans>

 

<실행결과>

728x90