본문 바로가기

Web Programming/SPRING

[SPRING] 2-1. DI를 이용한 객체 생성 (2)

Spring IOC를 이용한 방법을 살펴보겠습니다. 기존의 방법은 객체 생성을 분리할 수는 있지만, 객체 생성을 맡는 객체에 대한 의존성이 생깁니다. 우리는 객체 생성을 개발자가 담당하기 때문에 발생하는 문제를 해결하고 싶습니다. 즉, 필요한 속성이 모두 설정된 객체를 갖고 싶습니다. 그러기 위해서는 객체를 생성하는 설명서와 함께 제어권을 다른 무엇인가에게 위임을 하여야 합니다. 그것을 바로 객체를 관리하는 컨테이너인 Spring IOC 컨테이너라고 합니다.

Spring IOC를 적용하기 위해서는 몇가지 환경설정이 필요합니다. maven repository 홈페이지에서 spring을 검색한 후 1~7번째 까지 복사하여 pom.xml에 dependency 추가를 해줍니다. properties로 등록하여 버전을 하나로 간편하게 등록하여 관리할 수 있습니다.

core, beans dependency를 추가하였습니다.

web, webmvc dependency를 추가하였습니다.

test, aop dependency를 추가하였습니다.

log에 대해서 잠시 설정하겠습니다. MAVEN Dependencies를 보게되면 commons logging이 추가가 되어있습니다. 이는 spring core 라이브러리가 commoms logging에 의존하기 때문에 동시에 따라오기 때문입니다. 

하지만 우리는 logback을 사용할 것이기 때문에 강제로 commons-logging을 제거해 주겠습니다.

또한 logback으로 대체 하기 위해서 라이브러리를 추가하겠습니다.

현재 사용중인 이클립스가 상위 버전이기 때문에 spring boot를 겨냥한 것입니다. 마켓을 통하여 sts를 설치해 주겠습니다.

이제 Spring IOC를 위한 설명서를 만들어 보겠습니다. application-context.xml을 생성하겠습니다. 이것은 스프링 컨테이너에게 건네줄 객체 생성 설명서입니다. 스프링 컨테이너에서 관리된 bean을 선언합니다. id와 class가 있습니다. property는 스프링 컨테이너가 해당 필드의 setter메서드를 이용하여 스프링 빈을 주입하는 것을 말합니다. 

boardDao라는 이름으로 BoardDao 클래스를 이용하여 스프링 빈을 생성합니다. boardService라는 이름으로 BoardService 클래스를 이용하여 스프링 빈을 생성합니다 boardService의 boardDao속성으로 이전에 생성한 스프링 빈을 setter 메소드를 통해 주입합니다.

스프링에서의 bean은 스프링 컨테이너를 관리합니다. 우리가 알고 있는 객체라고 생각하면 됩니다. new가 필요없으며 상단에는 문법에 맞는지 확인하는 스키마가 있습니다. xml은 태그 요소를 마음대로 구성하는 것이 가능합니다.

스프링 빈 사용설명서를 사용하여 스프링 컨테이너를 생성하는 예시입니다. 

apllicationContext 객체의 의존성이 생깁니다. 위의 예제는 spring IOC 컨테이너를 직접 생성하는 것을 보여주기 위한 예제입니다. 웹 어플리케이션에서는 우리가 구현한 로직을 main을 통해서 실행하지 않습니다. 서버 기동시 설정 파일을 읽어 빈을 구성합니다(listener) controller, service, dao에 대한 설명서만 스프링에게 제공하면 됩니다. was-framework가 url mapping 설정을 통해 controller를 호출, 우리가 직접 main을 제어할 일은 없습니다.

annotation을 이용한 빈 주입 예시입니다. 주로 사용하는 방법입니다. 

용어를 정리해 보겠습니다 DI는 컨테이너가 빈 설정 정보를 바탕으로 의존성을 고려하여 객체(bean)를 주입하는 것입니다. DL은 컨테이너에 설정된 빈을 참조하는 것입니다.