1. 작동원리
Spring은 자바 객체와 라이브러리들을 관리해주며, 톰캣과 같은 WAS가 내장되어 있어 자바 웹 어플리케이션을 구동할 수 있습니다.
Spring은 경량 컨테이너로 자바 객체를 직접 Spring 안에서 관리합니다.
객체의 생성 및 소멸과 같은 생명 주기(Life cycle)을 관리하며, Spring 컨테이너에서 필요한 객체를 가져와 사용합니다.
JSP와 같이 MVC2 패턴을 사용하기는 하지만,
JSP와 Spring의 차이는
JSP는 웹 페이지 영역에서 사용되고, Spring은 웹 서비스 전반적 환경을 구성합니다.
Spring이 나라라고 한다면, JSP는 도시 입니다. 스프링은 프로그램 전반적인 근본이 되는 환경을 구축하고있고, JSP는 그 환경의 일부분에 사용되는 언어입니다.
Spring의 가장 큰 특징으로 IOC와 DI가 많이 언급됩니다. IOC와 DI의 간단한 개념은 아래와 같습니다.
2. IOC, DI이란
개발자가 프레임워의 기능을 호출하는 형태가 아니라 프레임워크가 개발자의
코드를 호출하기 때문에, 개발자는 전체를 직접 구현하지 않고 자신의 코드를
부분적으로 "끼워넣기"하는 형태로 구현할 수 있다.
프레임워크가 객체의 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터
필요한 객체를 얻어올 수 있다.
객체간의 의존성이 존재할 경우 개발자가 직접 객체를 생성하거나 제어하는 것이 아니라,
제어반전에 의하여 특정 객체에 필요한 다른 객체를 프레임워크가 자동으로 연결시켜주는
것을 말한다.
개발자는 자신에게 필요한 객체를 직접 할당하지 않고, 인터페이스를 통해 선언한
객체에 스프링 프레임워크에 의해 주입받아 사용할 수 있기 때문에 비지니스 로직에만
집중할 수 있다.
개발자는 객체를 선언만 할 뿐, 할당은 프레임워크에서 자동으로 이루어진다.
3. Spring Container 란?
스프링 컨테이너는 자바 객체의 생명 주기를 관리하며, 생성된 자바 객체들에게
추가적인 기능을 제공하는 역할을 합니다. 여기서 말하는 자바 객체를 스프링에서는
빈(Bean)이라고 부릅니다.
개발자는 객체를 생성하고 소멸할 수 있는데, 스프링 컨테이너가 이 역할을 대신해 준다.
즉, 제어의 흐름을 외부에서 관리하는 것. 또한, 객체들 간의 의존관계를 스프링
컨테이너가 런타임 과정에서 알아서 만들어 준다.
스프링은 실행시 객체들을 담고있는 Container가 있다.
스프링은 스프링 컨테이너에 스프링 빈(객체)을 등록할 때, 기본으로 싱글톤으로 등록한다.
4. Spring Bean을 Spring IoC Container에 등록하는 방법?
JAVA에서 Annotation 이라는 기능이 있습니다. 사전상으로는 주석의 의미이지만 Java 에서는 주석 이상의 기능을 가지고 있습니다.
Annotation은 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종입니다. 소스코드에 추가하면 단순 주석의 기능을 하는 것이 아니라 특별한 기능을 사용할 수 있습니다.
실제 Spring 프로젝트에서 Controller를 등록할 때에는 아래와 같은 Annotation을 사용합니다. 아래의 예시에서 Controller 임을 Spring 에게 알려주기 위하여 @ControllerAnnotation을 사용했습니다.
@Configuration과 @Bean Annotation 을 이용하여 Bean을 등록할 수 있습니다.
@Configuration을 이용하면 Spring Project 에서의 Configuration 역할을 하는 Class를 지정할 수 있습니다.
해당 File 하위에 Bean 으로 등록하고자 하는 Class에 @Bean Annotation을 사용해주면 간단하게 Bean을 등록할 수 있습니다.
// Hello.java
@Configuration
public class HelloConfiguration {
@Bean
public HelloController sampleController() {
return new SampleController;
}
}