쉱이
article thumbnail
728x90
반응형

해당 프로젝트는 "코드로 배우는 스프링 웹 프로젝트(개정판)" 을 보며 하겠습니다!

 

코드로 배우는 스프링 웹 프로젝트 - YES24

이 책은 Spring Framework(이하 스프링)를 사용해서 말 그대로 ‘웹 프로젝트’를 어떻게 진행하는지를 설명하는 책이다. 웹 프로젝트라고 거창하게 표현하지만, 좀 더 구체적으로는 스프링으로 웹

www.yes24.com

 


- 스프링 프레임워크를 이용하여 '의존성 주입'에 대한 이해와 테스트

- 스프링에서 XML를 이용하는 객체 관리 방법

- 스프링의 테스트 구축 환경


프레임워크

뼈대나 근간을 이루는 코드들의 묶음이라 하며, 코드의 결과물을 의미합니다.

그래서 프레임워크를 이용한다는 것은 프로그램의 기본 흐름이나 구조를 정하고, 모든 팀원이 이 구조에 자신의 코드를 추가한다는 의미를 가지고 있습니다.

 

스프링의 주요 특징

1) POJO 기반의 구성

-  다른 프레임워크들과 달리 이 관계를 구성할 때 별도의 API를 사용하지 않는 POJO의 구성만으로 가능-
- 코드를 개발할 때 개발자가 특정한 라이브러리나 컨테이너의 기술에 종속적이지 않다

 

2) 의존성 주입(DI)과 스프링

- 의존성(Dependency) : 하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없다는 것
- 주입(Injection) : 말 그대로 외부에서 밀어 넣는 것을 의미

 ----> 어떤 객체가 필요한 객체를 외부에서 밀어넣는다.

 

3) AOP(Aspect-Oriented0Programming) 지원

- 횡단 관심사를 모듈로 분리하는 프로그래밍의 패러다임
- 횡단 관심사를 분리해서 제작하는 것이 가능

횡단 관심사(Cross-concern)
 - 대부분의 시스템이 공통으로 가지고 있는 보안이나 로그, 트랜잭션 과 같이 비즈니스 로직은 아니지만, 반드시 처리가 필요한 부분

4) 편리한 MVC 구조
5) WAS의 종속적이지 않은 개발환경

 


의존성 주입 테스트

간단하기 레스토랑 객체를 만들고 레스토랑에서 일하는 셰프 객체를 주입하는 예제를 작성합니다.

스프링 의존성 주입 방법 

1_ 생성자를 이용한 주입
2_ setter 메세드를 이용한 주입

 

pom.xml 추가 및 수정

생성된 프로젝트의 Log4j 라이브러리는 1.2.15로 설정되어 있으며 1.2.17로 추가하고 기존 1.2.15부분은 삭제하거나 주석처리 합니다.

기존 pom.xml 일부분

변경한 pom.xml

 

예제 클래스 생성

이 상태에서 Restaurant 클래스와 Chef 클래스를 생성합니다.

일반적으로 스프링에서 의존성 주입은 Chef를 클래스가 아닌 인터페이스로 설계하는 것이 좋지만 지금은 최소한의 코드만을 이용하여 의존성 주입을 하기 때문에 클래스로 설계하는 것입니다

먼저 org.zerock.sample 패키지 생성 후class 생성입니다.

org.zerock.sample 우클릭 -> New -> Class 

Name에 Chef와 Restaurant를 작성하여 총 2개의 Class를 만듭니다.

Chef.java

더보기

package org.zerock.sample;

import org.springframework.stereotype.Component;
import lombok.Data;

@Component
@Data
public class Chef {

}

 

Restaurant.java

더보기

package org.zerock.sample;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import lombok.Data; import lombok.Setter;


@Component
// 스프링에게 해당 클래스가 스프링에서 관리해야하는 대상임을 표시하는 어노테이션
@Data  // 기본 함수들을 사용
public class Restaurant {
//Restaurant 객체는 Chef 객체를 필요함을 의미함.
@Setter
(onMethod_ = @Autowired)
private Chef chef;
/* * @Setter : 자동으로 setChef()를 컴파일시 생성하도록 하는 어노테이션
* onMethod 속성은 생성되는 setChef()에 @Autowired 어노테이션을 추가하도록 함. */

}

 

 


XML 이용하는 의존성 주입 설정

src -> main -> WEB-INF -> spring -> root-context.xml(스프링 프레임워크 관리하는 객체)

root-context.xml 파일을 선택합니다

하단의 Namespaces를 클릭하고, context선택을 합니다.

Source를 선택하고, 코드를 추가합니다.

더보기

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

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<
!-- Root Context: defines shared resources visible to all other web components -->
<context:component-scan base-package="org.zerock.sample">
</context:component-scan> </beans>

 

Java 설정을 이용하는 의존성 주입

RootConfig.java는 java 설정을 이용하는 경우에 'root-context.xml'을 대신합니다.

더보기

package org.zerock.config;


import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages =
{
"org.zerock.sample"})
public class RootConfig {

 

}

코드를 주입합니다.

 

테스트 코드를 통한 확인

'src/test/java'폴더 내에 'org.zerock.sample.SampleTest'클래스를 생성합니다.

package org.zerock.sample;

import static org.junit.Assert.assertNotNull;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import lombok.Setter;
import lombok.extern.log4j.Log4j;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class SampleTests {
	
	@Setter(onMethod_ = {@Autowired})
	private Restaurant restaurant;
	
	@Test
	public void testExist() {
		assertNotNull(restaurant);
		
		log.info(restaurant);
		log.info("---------------------------------");
		log.info(restaurant.getChef());
	}
}

실행결과

Run As > Junit Test 실행

ok누르면 됩니다.

이 방법을 src/test.java에 똑같이 패키지를 만들고, Class를 만들어도 실행이 됩니다!

728x90
반응형
profile

쉱이

@ILV_쉱이

감사합니다:)