개요
1. 스프링 사용 환경 설정
2. 애플리케이션 컨텍스트 작성
3. 스프링 이해
본문
1. 스프링 사용 환경 설정
이제 본격적으로 스프링을 사용해볼 차례다. 이를 위해서는 프로젝트에 라이브러리를 추가해주어야 한다. 라이브러리는 https://mvnrepository.com/
에서 구할 수 있다. 구글링을 해보면 토비의 스프링 관련 라이브러리를 묶어서 올려놓는 블로그들도 발견할 수 있으니 일일이 검색해서 구하기 귀찮다면 그곳에서 묶음 파일을 받아서 적용해도 된다. 단 이 경우 해당 블로그에서 믿을 수 있는 라이브러리를 올려줬는지 알 수 없기에 불안한 면이 있다. 비단 바이러스를 올렸을 최악의 경우가 아니더라도 버전이 이 달라서 생기는 문제등이 있을 수도 있다. 필자도 어느 블로그에서 다운 받고 그대로 빌드 패스를 했다가 겹치는 라이브러리가 생겨서 한 라이브러리를 삭제해야하는 문제가 있었고, 필요할 때마다 라이브러리를 추가해야하는 문제가 있었다. 라이브러리를 일일이 관리하면서 느끼는 건데, 스프링 팀프로젝트 할 때 아무렇지 않게 따라 쓰던 Maven이 얼마나 소중했는지 알 수 있었다. 일단 필자가 현재 쓰고 있는 라이브러리를 업로드 하겠다.

2. 애플리케이션 컨텍스트 작성
스프링 라이브러리가 추가되었으니 이제 스프링 문법에 맞게 DaoFactory를 수정할 필요가 있다. 스프링에서는 스프링이 제어권을 가지고 직접 관계를 부여하는 오브젝트를 빈이라고 부른다. 이 빈을 생성과 관계설정을 하는 오브젝트를 빈 팩토리라고 부른다. 이 빈팩토리를 확장 시켜서 애플리케이션 컨텍스트라고 부르며 빈 팩토리보다 자주 쓰인다. 그러면 기존의 DaoFactory을 스프링에서 사용 가능하도록 하여 애플리케이션 컨텍스트로 수정해보자
package springbook.user.ex8.dao;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
//애플리케이션 컨텍스트 또는 빈 팩토리가 사용할 설정 정보라는 표시
@Configuration
public class DaoFactory {
@Bean //오브젝트 생성을 담당하는 IoC용 메소드라는 표시
public UserDao userDao() {
UserDao userDao = new UserDao(connectionMaker());
return userDao;
}
@Bean
public ConnectionMaker connectionMaker() {
return new DConnectionMaker();
}
}
스프링에서 사용할 수 있는 클래스로 만드는 법은 간단하다. @Configuration, Bean이라는 애노테이션을 추가해주는 것만으로 된다. 이러면 DaoFactory는 애플리케이션 컨텍스트로 스프링의 설정 정보로서 사용된다. 이를 UserDaoTest에서 사용할 수 있도록 코드를 수정하면 아래와 같다.
import java.sql.SQLException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import springbook.user.domain.User;
//애플리케이션 컨텍스트를 적용한 UserDaoTest
public class UserDaoTest {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//애플리케이션 컨텍스트를 적용
ApplicationContext context =
new AnnotationConfigApplicationContext(DaoFactory.class);
UserDao dao = context.getBean("userDao", UserDao.class);
...
}
}
ApplicationContext 타입의 오브젝트로 DaoFactory.class를 읽어들이고 그 context의 getBean()메소드를 활용해서 "userdao"라는 @Bean이 붙은 메소드의 값을 가져와서 UserDao객체를 리턴받는다. 이로써 처음으로 스프링 애플리케이션을 성공적으로 만들었다고 할 수 있다.
3. 스프링 이해
이제 애플리케이션 컨텍스트의 동작방식을 알아보면서 기존의 DaoFactory를 직접 사용하던 것과 어떤 차이가 있는지 나아가서 스프링에 어떤 기능이 있는지를 확이해보겠다. 기존의 DaoFactory는 오브젝트를 생성하고 관계를 맺어주는 제한적인 역할을 하는 데 반해, 애플리케이션 컨텍스트는 애플리케이션에서 IoC를 적용해서 관리할 모든 오브젝트에 대한 생성과 관계 설정을 담당한다. 애플리케이션 컨텍스트는 이와 달리 직접 오브젝트를 생성하고 관계를 맺어주는 코드가 없고 그런 생성정보와 연관관계 정보를 별도의 설정 정보를 통해 얻는다. @Configuration이 붙은 DaoFactory가 그 설정 정보 목록역할을 한다. @Bean이 붙은 메소드는 DaoFactory라는 설정 정보 목록에 들어있는 설정 정보이다. getBean()메소드를 신청하면 이와 같은 이름을 한 메소드가 있는지 찾아서 이를 호출하여 오브젝트를 생성시킨다. 이 설정정보 형식은 보다 범용적이고 유연한 방법으로 IoC기능 확장을 가능하게 한다. 우선적으로 확인가능한 장점은 다음과 같다.
-클라이언트는 구체적인 팩토리 클래스를 알 필요가 없다.
-애플리케이션 컨텍스트는 종합 IoC 서비스를 제공해준다.
-애플리케이션 컨텍스트는 빈을 검색하는 다양한 방법을 제공해준다.
정리
1. 스프링을 쓰려면 라이브러리가 필요하다. 이외에도 지속적으로 새로운 기능을 위해서 라이브러리를 추가하게 되고 이를 위해서 라이브러리 관리 프로그램의 필요성을 느낀다.
2. 애플리케이션 컨텍스트로 클래스를 만들어서 스프링 설정 정보로 활용하려면 @Configuration, @Bean등의 문법을 쓰면 된다. 스프링 관련 문법은 대게 @으로 이루어진다
3. 스프링을 사용하면 보다 범용적이고 유연한 IoC기능 확장을 가능하게 한다.
소스 깃허브
https://github.com/cholongbul/Tobyspring
cholongbul/Tobyspring
토비의 스프링 연습. Contribute to cholongbul/Tobyspring development by creating an account on GitHub.
github.com
'스프링' 카테고리의 다른 글
토비의 스프링 - 1.7 의존관계 주입(DI) (0) | 2021.05.23 |
---|---|
토비의 스프링 - 1.6 싱글톤 레지스트리와 오브젝트 스코프 (0) | 2021.05.20 |
토비의 스프링 - 1.4 제어의 역전 (0) | 2021.05.20 |
토비의 스프링 - 1.3 DAO의 확장 (0) | 2021.05.19 |
토비의 스프링 - 1.2 DAO의 분리 (0) | 2021.05.19 |