Spring - 02

하승·2022년 7월 11일
0

웹 개발반 - Spring

목록 보기
2/8
post-thumbnail

프로젝트 기본 구성 요소

src/main/java		작성되는 코드의 경로
src/main/resource	실행할 때 참고하는 기본 경로(설정 파일)
src/test/java		테스트 코드를 넣는 경로
src/test/resource	테스트 관련 설정 파일 보관 경로

웹과 관련된 스프링 설정 파일

src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml

bean 관리용 스프링 설정 파일

src/main/webapp/WEB-INF/spring/root-context.xml

Tomcat의 web.xml파일

WEB_INF/web.xml

템플릿 프로젝트의 jsp 파일 경로

src/main/webapp/WEB_INF/views

Maven이 사용하는 pom.xml

ex00/pom.xml
ex00은 프로젝트 이름이다.

의존성 주입 테스트

호텔, 레스토랑 안에 셰프 객체를 주입하는 예제
생성자, setter 메소드를 이용한 주입으로 의존성 주입 구현
설정 방식은 XML이나 어노테이션을 이용해서 처리.

Chef 클래스를 하나 먼저 만들어준다.

package com.koreait.sample;
//스프링에게 해당 클래스가 스프링에서 관리해야 하는 대상임을 표시
@Component
//Lombok의 setter, getter, 생성자, toString() 등을 자동으로 생성해주는 어노테이션
@Data
public class Chef {
}	

그 이후엔 Hotel 클래스와 Restaurant 클래스를 만들어준뒤에
생성자, setter 메소드를 이용한 주입으로 의존성 주입을 구현한다.

package com.koreait.sample;
	//인스턴스 변수로 선언된 모든 것을 파라미터로 받는 생성자를 작성한다.
//@AllArgsConstructor	
//특정 변수에 대해서만 생성자를 작성할 때 사용한다. @NonNull 이나 final이 붙은 인스턴스 변수에 대한 생성자를 만들어 낸다.
@RequiredArgsConstructor	
@Component
@Setter
@Getter
@ToString
public class Hotel {
	@NonNull
	Chef chef;
    int data;
}
package com.koreait.sample;
//인스턴스 변수로 선언된 모든 것을 파라미터로 받는 생성자를 작성한다.
@AllArgsConstructor
@Component
@Setter
@Getter
public class Restaurant {
	@Setter(onMethod_ = @Autowired)
	Chef chef;
}

스프링 프레임워크 동작시 생기는 일

스프링 프레임워크가 시작되면서 먼저 스프링이 사용하는 메모리 영역을 만든다.
스프링 내부적으로 ApplicationContext라는 이름의 객체가 만들어진다.
스프링은 자신이 생성하고 관리해야 하는 객체들에 대한 설정을 알아야 하고
이 설정파일은 root-context.xml 이라는 파일로 만들어져 있다.
root-context.xml에 설정되어 있는 <context:component-scan>
태그의 내용을 통해서 com.koreait.sample 패키지를 스캔하기 시작한다.
해당 패키지에 있는 클래스들 중에서 스프링이 사용하는 @Component라는
어노테이션이 존재하는 클래스의 인스턴스를 생성한다. Restaurant 객체는 
Chef 객체가 필요하다는 어노테이션(@Autowired) 설정이 있으므로
Chef 객체의 레퍼런스를 Restaurant 객체에 주입한다.

테스트 환경(JUnit)

자바 프로그래밍 언어용 유닛 테스트 프레임워크
가장 많이 사용되는 테스트 환경
테스트 성공시 JUnit GUI 창에 녹색으로 표시 / 실패시 적색으로 표시
하나하나의 케이스별로(단위로 나누어서) 테스트를 하는 단위 테스트 도구

테스트 환경 구축하기

1. 테스트 클래스 위쪽에 어노테이션 추가
	@RunWith(SpringJUnit4ClassRunner.class)
2. 내부에 테스트용 메소드 선언
	내용은 우리가 테스트 해볼 로직으로 구현
3. 테스트용 메소드 위에 어노테이션 추가
	@Test
package com.koreait.sample;
/*
 	spring-test 모듈을 이용해서 간단하게 스프링을 가동시키고 스프링  동작을 활성화한다.
 	반드시 JUnit 4.10 이상 버전을 사용
*/
@RunWith(SpringJUnit4ClassRunner.class)
//지정된 클래스나 문자열을 이용해서 필요한 객체들을 스프링 내에 객체로 등록
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class HotelTests {
	@Setter(onMethod_ = @Autowired)
	private Hotel hotel;
	
	//JUnit에서 테스트 대상임을 표시
	@Test
	public void testExist() {
		//hotel 객체가 null이 아니어야만 테스트를 통과
		assertNotNull(hotel);
		

		log.info(hotel);
		log.info(hotel.getChef());
	}
	//1. 테스트 코드가 실행되기 위해서 스프링 프레임워크가 동작
	//2. 동작되는 과정에서 필요한 객체들이 스프링에 등록
	//3. 의존성 주입이 필요한 객체는 자동으로 주입이 이루어짐
}

테스트 결과

profile
화이팅!

0개의 댓글