Spring Framework는 자바 기반의 웹 애플리케이션과 엔터프라이즈 애플리케이션을 개발하기 위한 오픈 소스 프레임워크다.
경량컨테이너: Spring은 자체 컨테이너를 제공하며, 이 컨테이너는 자바 객체의 생명주기를 관리하고 의존성 주입(Dependency Injection)을 지원한다. 이로써 객체 간의 결합도를 낮추고 유연한 애플리케이션을 개발할 수 있다.
AOP 지원: Spring은 관점 지향 프로그래밍(Aspect-Oriented Programming, AOP)을 지원하여, 비즈니스 로직과 관점(로깅, 트랜잭션, 보안 등)을 분리하고 관리할 수 있게 한다.
모듈화: Spring은 여러 모듈로 구성되어 있으며, 필요한 모듈만 선택적으로 사용할 수 있다. 예를 들어, Spring JDBC, Spring MVC, Spring Security 등 각각의 모듈을 피룡에 따라 포함시킬 수 있다.
트랜잭션 관리: Spring은 트랜잭션 관리를 위한 추상화 계층을 제공하며, 선언적인 트랜잭션 설정을 지원한다.
데이터 엑세스 추상화: Spring은 JDBC, Hibernate, JPA 등 다양한 데이터베이스 엑세스 기술을 추상화하여 일관된 방식으로 데이터베이스를 다룰 수 있도록 한다.
웹 개발 지원: Spring은 웹 애플리케이션 개발을 위한 Spring MVC를 제공하며, RESTful 웹 서비스 개발을 쉽게 할 수 있도록 돕는다.
보안: Spring Security 모듈을 사용하여 애플리케이션의 보안을 관리할 수 있다.
AOP란
관점 지향 프로그래밍
스프링의 구조는 너무 크기 때문에 당장 필요한 부분만 알아보기로 했다.
Client로 부터 HTTP요청을 받아 서블릿 로직을 처리할 수 있는 구성요소다.
Servlet이란
javax.servlet 패키지에 정의된 인터페이스로, 자바 class 파일로 된 서버로직이라고 볼 수 있다.
ServletContainer의 대표적인 예로는 Tomcat이 있다.
Spring Framework의 영역이다.
Spring framework에서 front controller 역할을 수행한다.
실제 동작하기 위한 로직요청에 대해 처리할 수 있도록해준다. dispatch의 뜻은 보내다라는 뜻으로, 이곳에 요청이 오면 실제로 로직을 수행할 컴포넌트로 요청을 보내주고, 반환을 받는 역할을 한다.
Spring framework에 작성된 여러 Controller 중에서 로직을 수행할 controller를 확인 해주는 컴포넌트다.
개발자가 직접 개발하는 컴포넌트로, http request를 개발자가 처리할 수 있도록 개발하는 컴포넌트다.
개발자가 직접 개발하는 컴포넌트로, 비즈니스 로직을 수행하는 컴포넌트다.
개발자가 직접 개발하는 컴포넌트로, Database에 직접적으로 접근하는 객체다.
보통 mybatis와 같은 persistence framework를 많이 활용한다.
ViewName을 기반으로 어떤 View 파일을 사용할 것인지 확인해주는 컴포넌트다.
개발자가 직접 개발하는 컴포넌트로, 보통 UI 화면을 의미한다.
시퀀스 다이어그램은 어떤 순서로 어떤 객체들과 어떻게 상호작용했는지를 표현하는 다이어그램이다.
HTTP 요청을 client에서 보내면 servlet container에서 이를 처리하도록 한다.
servlet container에서는 spring이 처리해야 한다는 것을 인지하고, dispatcherServlet이 처리하도록 http requset 정보를 전달한다. servlet container에서 spring이 처리해야한다는 내용은 web.xml파일에 작성되어 있다.
dispatcherServlet은 http requset 중 url과 메서드 등을 확인하여 @RequestMapping으로 매핑되어 있는 controller를 찾는다.
앞 단계에서 찾아진 controller가 할당이 되어 로직을 처리하게 된다.
controller 처리는 service의 조합으로 처리가 된다.
service는 DAO를 호출하여 비즈니스 로직을 수행하게 된다.
DAO는 DB에 직접 접근하여 쿼리를 수행하게 되고, 리턴 결과를 자바 객체로 받게 된다.
DAO -> Service -> Controller로 결과를 리턴받게 되고, Controller는 ViewName과 Model을 리턴한다.
ViewName을 리턴받은 DispatcherServlet은 ViewResolver로 어떤 View 파일을 활용할지 ViewName을 통해 확인한다.
확인된 View 파일과 Model을 이용하여 사용자에게 최종적으로 보여질 UI 화면을 http response에 실어서 client에게 리턴해준다.
clent에서는 http response를 받아서 결과를 파싱하는 등의 처리를 진행해서 최종적으로 사용자에게 화면을 표시해준다.
참고
[Spring] Spring Framework 기본동작 순서 및 구조, 스프링 프레임워크 동작 및 구조, 스프링 프레임워크 구성요소