[꼼꼼한 개발자] 꼼코더
06. 코드로 배우는 스프링 웹 프로젝트 - [스프링의 특징과 의존성 주입] - 의존성 주입 테스트 본문
06. 코드로 배우는 스프링 웹 프로젝트 - [스프링의 특징과 의존성 주입] - 의존성 주입 테스트
꼼코더 2022. 12. 25. 03:26💉 의존성 주입 테스트
작성된 프로젝트를 이용해서 간단하게 의존성에 대한 기능을 작성하고 테스트해보자.
예제의 내용은 레스토랑(Restaurant) 객체를 만들고 레스토랑에서 일하는 셰프(Chef) 객체를 주입하는 예재를 작성하려고 한다.
스프링에서는 ‘생성자를 이용한 주입’과 ‘setter 메서드를 이용한 주입’으로 의존성 주입을 구현한다.
구현시 설정방법 은 주로 XML이나 어노테이션을 이용해서 처리한다.
예제는 'Lombok' 라이브러리를 이용하여 setter 메서드를 자동으로 구현하고
spring-test 라이브러리인 'Log4j'를 이용하여 스프링의 동작을 테스트 한다.
따라서 pom.xml에서 Lombok 라이브러리와 Log4j 라이브러리를 추가후 진행 해보자.
👨🏻💻 실습 준비 (라이브러리 추가)
- pom.xml에 라이브러리를 추가하도록 한다.
- 기존 Log4j 라이브러리는 삭제하거나 주석처리 해준다.
👨🏻💻 실습 준비(클래스 생성)
- ex00 프로젝트 → org.zerock.sample 패키지 생성 → Restaurant.java, Chef.java 생성
작성된 코드의 의미는 Restaurant 객체는 Chef 타입의 객체를 필요로 한다는 상황이다.
일반적으로 스프링에서 의존성 주입은 Chef를 클래스가 아닌 인터페이스로 설계하는 것이 좋다.
하지만 지금은 최소한의 코드만을 이용하여 의존성 주입을 테스트해보기 위한 것이므로 클래스로 설계한다.
Restaurant 클래스는 Chef 주입받도록 설계한다.
이때 Lombok의 setter를 생성하는 기능과 생성자, toString() 등을 자동으로 생성하도록 @Data 어노테이션을 사용한다.
@Component : 스프링에게 “이 클래스는 스프링에서 관리해야 하는 대상입니다.”를 안내
@Setter : 컴파일시 자동으로 setChef()를 생성.
onMethod : “생성되는 setChef()에 @Autowired 어노테이션을 추가하도록!”.
🏷 XML을 이용하는 의존성 주입 설정
스프링은 클래스에서 객체를 생성하고 객체들의 의존성에 대한 처리 작업까지 내부(ApplicationContext)에서 모든 것이 처리된다.
스프링 ApplicationContext 에서 관리되는 객체를 흔히 ‘빈(Bean)’이라고 하고, 이에 대한 설정은 XML과 Java를 이용해서 처리.
기존의 시스템은 아직까지 XML 방식을 선호하지만, 최근 몇 년 동안 Java 설정방식도 증가하는 추세이다.
STS의 ‘Spring Legacy Project’의 경우 기본적으로 XML을 이용해서 스프링에서 관리해야 하는 객체들을 처리한다.
프로젝트의 src 폴더 속 → ‘root-context.xml’ 파일은 스프링 프레임워크에서 관리해야 하는 객체를 설정하는 설정 파일이다.
이러한 객체를 스프링에서는 빈(Bean)이라고 표현한다.
👨🏻💻 XML 의존성 주입 실습
- root-context.xml 파일 선택 → 하단에 [Namespace] 탭 → ✅ context
- [source] 탭 으로 복귀 하여 코드 작성
- 변경된 XML 저장 후 [Bean Graph] 탭 선택 후 객체가 설정된 것을 확인할 수 있다.
만일 스프링 설정을 XML이 아닌 Java를 이용하고 싶은 경우 전혀 다른 방법이기 때문에
프로젝트 초기에 어떤 방식으로 사용할 것인지 확실하게 결정해야 한다.
☕️ Java 의존성 주입 실습
자바 설정은 ‘root-context.xml’대신 RootConfig 클래스를 이용한다.
XML로 설정된 내용은 RootConfig에서 @ComponentScan 어노테이션을 이용해서 처리할 수 있다.
- jex00 프로젝트 → org.zerock.config > RootConfig 클래스 코드 작성
💬 다음 글에서는 스프링이 동작하면 생기는 일과, 테스트 코드 확인을 다뤄보도록 하겠다.
🧹최종정리
- 스프링에서는 ‘생성자를 이용한 주입’과 ‘setter 메서드를 이용한 주입’으로 의존성 주입을 구현한다
- 구현시 설정방법은 주로 XML이나 어노테이션을 이용해서 처리한다.
- 스프링은 클래스에서 객체를 생성하고 객체들의 의존성에 대한 처리 작업까지 내부(ApplicationContext)에서 모든 것이 처리된다.
- 스프링에서 의존성 주입은 클래스가 아닌 인터페이스로 설계하는 것이 좋다.
- 자바 설정은 ‘root-context.xml’대신 RootConfig 클래스를 이용
- ‘root-context.xml’ 파일은 스프링 프레임워크에서 관리해야 하는 객체를 설정하는 설정 파일
'Spring > 코드로 배우는 스프링 웹 프로젝트' 카테고리의 다른 글
08. 코드로 배우는 스프링 웹 프로젝트 - [스프링의 특징과 의존성 주입] - 스프링이 동작하면서 생기는 일 (0) | 2022.12.26 |
---|---|
07. 코드로 배우는 스프링 웹 프로젝트 - [스프링의 특징과 의존성 주입] - 스프링이 동작하면서 생기는 일 (0) | 2022.12.26 |
05. 코드로 배우는 스프링 웹 프로젝트 - [스프링의 특징과 의존성 주입] -스프링의 주요 특징 5가지 (2) | 2022.12.25 |
04. 코드로 배우는 스프링 웹 프로젝트 - [스프링의 특징과 의존성 주입] - 스프링 프레임워크의 뚜렷한 차별성 (0) | 2022.12.25 |
03. 코드로 배우는 스프링 웹 프로젝트 - [스프링의 특징과 의존성 주입] - 스프링 프레임워크의 간략한 역사 (0) | 2022.12.25 |