java, spring

스프링 프로젝트에 Lombok 적용과 의존성 주입(DI) 확인하기

isaac.kim 2021. 5. 5. 18:13
728x90
반응형

스프링 프로젝트에 Lombok 적용과 의존성 주입(DI) 확인하기

 

 

이전 글

2021.05.05 - [Java & Spring/Spring] - 스프링 프레임워크 Lombok 라이브러리 설치

 

스프링 프레임워크 Lombok 라이브러리 설치

스프링 프레임워크 Lombok 라이브러리 설치 지난 글 lifere.tistory.com/98 스프링 프레임워크 웹 프로젝트 시작하기 Spring Framework Web Project Start 스프링 프레임워크 웹 프로젝트 시작하기 Spring Framework Web

lifere.tistory.com

먼저 지난 글에서 Lombok을 설치했다는 가정하에 코드를 작성했습니다. 아직 Lombok을 설치하지 않으셨으면 이전 글을 참고해주세요.

 

반응형

 

1. 스프링 프로젝트에 lombok 추가

프로젝트의 pom.xml 파일에 <dependency>를 추가합니다.

		<!-- lombok -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.0</version>
			<scope>provided</scope>
		</dependency>

 

 

 

2. 테스트를 위한 <dependency>도 '추가' 혹은 '수정'합니다. 

- spring test

- lombok

- log4j version 변경 (기존의 것 삭제 혹은 주석처리) 

- junit

		<!-- spring-test -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		
		<!-- lombok -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.0</version>
			<scope>provided</scope>
		</dependency>
		
		<!--  log4j -->
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>
        
   		<!-- Test -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.7</version>
			<scope>test</scope>
		</dependency>     

 

 

 

 

3. 예제 클래스 생성 | 스프링의 의존성 주입 확인을 위한 Annotation 설정

테스트를 하기 위한 클래스 2개를 생성합니다.  Chef, Restaurant 

 

■ Chef 클래스를 다음과 같이 작성합니다. 

@Data 어노테이션은 lombok 라이브러리의 Data 어노테이션을 설정해준 것입니다.

이클립스의 Outline 영역을 보면, 직접 만들지 않은 함수들이 존재하는 것을 확인할 수 있습니다. (실제 컴파일 시에 생성됨) lombok 라이브러리는 Java 클래스에서 공통으로 많이 사용되는 메서드들을 자동으로 생성해주는 라이브러리라고 한 바 있습니다.

 

 

■ Restaurant 클래스는 Chef를 주입받도록 설계합니다. (스프링의 의존성 주입 개념)

@Setter 어노테이션을 사용하여 setChef가 자동으로 생성되었습니다. (실제 컴파일 시에 생성됨)

@Autowired는 스프링이 관리하는 객체들을 엮어주는 기능이라고 볼 수 있습니다.

 

스프링이 관리하는 객체를 bean이라 표현하는데, @Component 어노테이션이 선언된 객체 즉, bean을 스프링이 관리하고, 관리하는 bean들을 엮어 주는 기능을 어노테이션 @Autowired를 사용해서 처리합니다.

 

이처럼 클래스들을 어디선가 new 키워드를 사용해 직접 사용자가 선언 & 호출하여 사용하지 않고, 스프링의 기능에 맡겨져서 외부에서 객체에 대한 정보를 제공하는 방식을 의존성 주입이라 할 수 있습니다. (스프링이 어노테이션 정보를 읽고, 객체-bean을 관리하고 주입하는 방식)

 

 └▶ 제가 이해한 내용을 바탕으로 작성한 부분이기 때문에 내용이 틀릴 수 있습니다. 틀렸다면 말씀해주세요.^^

 

 

 

 

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

프로젝트의 src 폴더 내에 '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="com.project.sample">
	</context:component-scan>
	
</beans>

xml 파일을 저장한 뒤 'Beans Graph' 탭을 눌러 확인합니다.

 

 

 

@Component 어노테이션이 세팅되어 스프링이 관리하는 restaurant, chef 두 빈(bean)을 확인할 수 있습니다.

Restaurant 클래스에 @Component 어노테이션을 주석처리를 하니, 'root-context.xml'의 Spring Beans에서는 Restaurant 빈(bean)이 확인되지 않는 것을 볼 수 있습니다.

 

 

 

5. Java를 이용하는 의존성 주입 설정

Java 설정을 이용하는 경우에 'root-context.xml'을 대신하는 것은 RootConfig 클래스를 이용합니다.

XML로 설정된 내용은 RootConfig에서 @ComponentScan 어노테이션을 이용해서 처리할 수 있습니다.

package com.project.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan(basePackages = {"com.project.sample"})
public class RootConfig {
	
}

 

 


다음 글에서는 스프링이 동작하는 과정에서 어떻게 빈들을 관리해 나가는지 살펴보겠습니다.

도움이 되셨다면 광고 클릭 한 번 해주시면 감사하겠습니다.^^

728x90
반응형