Spring Framwork란?
자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로서 간단히 스프링(Spring)이라고도 불린다. 동적인 웹사이트를 개발하기 위한 여러 가지 서비스를 제공하고 있으며 대한민국 공공기간의 웹서비스 개발 시 사용을 권장하고 있는 전자정부 표준 프레임워크의 기반 기술로서 쓰이고 있다.
Spring의 특징
1. DI (Dependency Injection / 의존성 주입)
설정 파일이나 어노테이션을 통해 객체간 의존 관계를 설정하여 개발자가 직접 의존하는 객체를 생성할 필요가 없다.
2. Spring AOP (관점 지향 프로그래밍)
데이터베이스의 트랜잭션처리나 로깅처리와 같이 여러 모듈에서 공통으로 필요로 하는 기능의 경우 해당 기능을 분리하여 관리한다.
3. Spring JDBC
Mybatis나 Hibernate 등의 데이터베이스를 처리하는 영속성 프레임워크와 연결할 수 있는 인터페이스를 제공한다.
4. Spring MVC
MVC 디자인 패턴을 통해 웹 애플리케이션의 Model, View, Controller 사이의 의존 관계를 DI 컨테이너에서 관리하여 개발자가 아닌 서버가 객체들을 관리하는 웹 애플리케이션을 구축할 수 있다.
Spring MVC
Spring Framework에서는 클라이언트의 화면을 표현하기 위한 View와 서비스를 수행하기 위한 개발 로직 부분(Model)을 나누는 MVC2 패턴을 지원한다. 또한 Model, View, Controller 사이의 의존 관계를 DI 컨테이너에서 관리하여 유연한 웹 애플리케이션을 쉽게 구현 및 개발할 수 있다.
Spring MVC 요청 처리 과정

Spring MVC 구성 요소

Spring IoC
IoC (제어의 역행)
IoC(Inversion of Control)란, 프로그램을 구동하는데 필요한 객체에 대한 생성, 변경 등의 관리를 프로그램을 개발하는 사람이 아닌 프로그램을 구동하는 컨테이너에서 직접 관리하는 것을 말한다. 스프링은 IoC 구조를 통해 구동 시 필요한 객체의 생성부터 생명주기까지 해당 객체에 대한 관리를 직접 수행한다.

IoC 컨테이너
스프링에서는 관리하는 객체를 'Bean(빈)'이라고 하고, 해당 빈들을 관리한다는 의미로 컨테이너를 'Bean Factory'라고 한다.

IoC 컨테이너의 역할
1. 객체의 생명주기와 의존성을 관리한다.
2. VO(DTO/POJO) 객체의 생성, 초기화, 소멸 등의 처리를 담당한다.
3. 개발자가 직접 객체를 생성할 수 있지만 해당 권한을 컨테이너에 맡김으로써 소스 코드 구현의 시간을 단축할 수 있다.
IoC 컨테이너와 Bean 객체
빈(Bean)
- 스프링이 IoC 방식으로 관리하는 Class
- 스프링이 직접 생성과 제어를 담당하는 객체
빈 팩토리 (Bean Factory)
- 스프링의 IoC를 담당하는 핵심 컨테이너
- Bean 을 등록, 생성, 조회, 반환하는 기능을 담당
애플리케이션 컨텍스트 (Application Context)
- BeanFactory 를 확장한 IoC 컨테이너
- Bean을 등록하고 관리하는 기능은 BeanFactory 와 동일하지만 스프링이 제공하는 각종 부가 서비스를 추가로 제공함
- ApplicationContext 또는 BeanFactory가 IoC를 적용하기 위해 사용하는 설정 정보
- 설정 메타정보는 IoC컨테이너에 의해 관리하는 Bean 객체를 생성하고 구성할 때 사용됨
주요 컨테이너 종류
BeanFactory
- 자바 빈 객체를 등록하고 이를 관리한다.
- getbean() 메소드가 정의되어 있다.
Application Context
- BeanFactory의 확장 개념이다.
- Spring의 각종 부가 서비스를 제공한다.
- 일반적인 IoC 컨테이너를 말한다.
GenericXmlApplicationContext
- ApplicationContext를 구현한 클래스
- 일반적인 XML 형태의 문서를 읽어 컨테이너 역할을 수행한다.
본 포스팅은 멀티캠퍼스의 멀티잇 백엔드 개발(Java)의 교육을 수강하고 작성되었습니다.