스프링 프레임워크(Spring Framework)
스프링 프레임워크
스프링 프레임워크는 자바 개발을 편리하게 해주는 경량급 오픈소스 애플리케이션 프레임워크로, 개발에 필요한 기능들을 포괄적으로 제공한다.
스프링은 몇 가지 핵심 특징을 갖는다. POJO(Plain Old Java Object) 프레임워크라서 특정 라이브러리에 종속되지 않아 개발이 쉽고, AOP(Aspect Oriented Programming), 즉 관점지향 프로그래밍을 지원하며, DI(Dependency Inject) 의존성 주입도 지원한다. 무엇보다 IoC(Inversion of Control), 즉 제어의 역전을 지원해 제어권이 개발자가 아니라 프레임워크에 있다. 객체의 생성부터 생명주기까지를 프레임워크가 관리하고 제어하며, 이렇게 제어권이 스프링으로 넘어오기 때문에 DI나 AOP 같은 기능들이 가능해진다.
스프링 부트
스프링 부트는 스프링 프레임워크를 사용하는 프로젝트를 간편하게 설정할 수 있는 서브 프로젝트다. 내장 톰캣을 쓸 수 있어 번거로운 개발 환경 세팅이 필요 없다.
구조
스프링 프로젝트는 Maven(POM)이나 Gradle(build.gradle)로 빌드하며, 몇 가지 핵심 구성 요소로 이루어진다. Controller는 클라이언트 요청을 비즈니스 로직으로 분기 처리하는 디스패처 역할을 하고, Servlet은 동적 웹 프로젝트에서 사용자의 요청과 응답을 처리한다. ModelAndView는 컨트롤러가 처리한 결과와, 그 결과를 보여줄 View에 관한 정보를 함께 담은 객체이고, ViewResolver는 이 View 관련 정보를 바탕으로 실제 View를 찾아주며, View는 컨트롤러의 처리 결과를 실제로 보여주는 화면을 생성한다.
DispatcherServlet
DispatcherServlet은 리퀘스트를 받는 관문으로, 실제로 처리할 컨트롤러에게 요청을 전달한다. 컨트롤러가 처리한 결과값을 받아 View에 넘겨주면서, 응답이 만들어지기까지 전체 흐름을 제어한다.
HandlerMapping
HandlerMapping은 요청 URL과 그 요청을 처리할 컨트롤러를 서로 연결해주는 역할을 한다.
Spring Container
스프링 컨테이너는 객체의 생명주기를 관리하며, 생성된 인스턴스에 추가적인 기능을 제공한다. BeanFactory와 ApplicationContext가 대표적인 구현체다.

