애플리케이션 개발 시 필요한 기본 구조와 뼈대를 제공하는 틀
(주방)
자주 사용되는 기능을 모아두는 코드의 집합
(도구함)
API를 통해서 서로 다른 프로그램들이 데이터를 주고받거나 기능을 호출하여 통신 할 수 있음
Spring MVC : 전자정부 프레임워크 (수동)
Spring Boot : (자동)
SpringFramework -> Projects -> Spring tools -> 4.29.WINDOWS X86_64 다운받기 -> tools에 넣고 알아서 풀기
| 구분 | 설명 |
|---|---|
| IoC (Inversion of Control) | 제어의 주체가 개발자가 아니라 프레임워크(Spring Container)에게 있음. 객체 생성, 생명주기 관리 등을 프레임워크가 담당. 개발자는 객체를 직접 생성하거나 호출하지 않고, 필요한 객체를 Container로부터 주입받아 사용. 클래스 간 결합도를 낮추고 유지보수성을 향상시킬 수 있음. |
| DI (Dependency Injection) | 설정 파일(XML)이나 어노테이션을 통해 객체 간 의존관계를 설정. 개발자가 직접 객체를 만들지 않고, Spring이 생성한 객체를 필요한 위치에 주입. 객체 간 의존을 쉽게 관리하고, 코드의 유연성과 테스트 용이성을 높임. |
| POJO (Plain Old Java Object) | 특별한 기술(J2EE, EJB 등)을 상속받지 않는 순수한 Java 객체를 의미. Spring은 POJO 기반 개발을 지원하여 복잡한 프레임워크 의존성을 줄임. 이를 통해 개발자는 학습 곡선을 완화하고, 코드의 가독성과 유지보수성을 높일 수 있음. |
| AOP (Aspect Oriented Programming) | 로깅, 보안, 트랜잭션 관리 등 공통 관심사를 핵심 로직과 분리함. 코드 중복을 줄이고 유지보수성을 높이는 프로그래밍 기법. Spring은 AOP를 지원하여 모듈화를 극대화함. |
| Spring MVC | MVC(Model-View-Controller) 패턴을 기반으로 웹 애플리케이션을 개발할 수 있도록 지원. 어노테이션 기반으로 구조화하며, IoC/DI를 활용해 객체 의존관계를 관리함. 개발자가 아닌 서버가 객체를 제어하여 깔끔한 웹 애플리케이션을 구축할 수 있음. |
| PSA (Portable Service Abstraction) | 다양한 외부 라이브러리나 기술(API 등)을 사용할 때, Spring이 제공하는 추상화 레이어를 통해 기술 종속성을 줄임. 다양한 기술 스택을 쉽게 연동할 수 있도록 인터페이스나 추상 클래스를 제공함. |

Core Container을 자세하게 봐야함.
| 분류 | 이름 | 설명 |
|---|---|---|
| 계층 | Data 접근 계층 | JDBC나 DB에 연결하는 모듈 Data 트랜잭션 기능을 담당 영속성 프레임워크(MyBatis, JPA 등)와 연결 |
| 계층 | Web 계층 (MVC / Remoting) | Spring MVC 기반으로 웹 구현 기술과 연결 RMI, Hessian, Burlap, JAX-WS, HTTP, REST API 등 리모팅 기술 제공 |
| 계층 | AOP 계층 | 흐름 간 공통된 코드를 분리하여 재사용 Proxy를 통해 필요 시점에 코드 삽입 결합도 낮추고 유연성 향상 |
| 계층 | Core Container | Spring의 핵심 기능 담당 IoC 기능 지원 BeanFactory 기반으로 Bean 제어 가능 |
| ----- | --------------------------------- | ----------------------------------------------------------------------------- |
| 모듈 | spring-beans | 스프링 컨테이너를 이용한 객체 생성 기능 제공 |
| 모듈 | spring-context | 객체 생성, 라이프사이클 처리, 스키마 확장 기능 제공 |
| 모듈 | spring-aop | AOP(관점 지향 프로그래밍) 기능 제공 |
| 모듈 | spring-web | REST 클라이언트, 서블릿 필터, 파일 업로드 등 웹 개발 기반 기능 제공 |
| 모듈 | spring-webmvc | Spring 기반 MVC 프레임워크 컨트롤러, 뷰 구현 제공 |
| 모듈 | spring-websocket | 웹 소켓 연동 기능 (Spring MVC 기반) |
| 모듈 | spring-oxm | XML과 자바 객체 간 매핑 처리 API 제공 |
| 모듈 | spring-tx | 트랜잭션 처리를 위한 추상화 레이어 제공 |
| 모듈 | spring-jdbc | JDBC 프로그래밍을 쉽게 할 수 있는 템플릿 제공 |
| 모듈 | spring-orm | Hibernate, JPA, MyBatis 등 ORM 연동 지원 |
| 모듈 | spring-jms | JMS 메시지를 주고받기 위한 템플릿 제공 |
| 모듈 | spring-context-support | 스케줄링, 메일발송, 캐시연동, 벨로시티 등 부가 기능 제공 |
Spring Framework 에서는 클라이언트의 화면을 표현하기 위한 View와 서비스를 수행하기 위한 개발 로직 부분을 나누는 MVC2 패턴을 지원함.

Dispatcher Servlet : 요청을 받아 알맞은 Controller 로 전달
| 구성 요소 | 설명 |
|---|---|
| DispatcherServlet | 클라이언트의 요청(Request)을 전달받고, 요청에 맞는 컨트롤러가 리턴한 결과 값을 View에 전달하여 알맞은 응답(Response)을 생성 |
| HandlerMapping | 클라이언트의 요청 URL을 어떤 컨트롤러가 처리할지 결정 |
| Controller | 클라이언트의 요청을 처리한 뒤, 결과를 DispatcherServlet에 리턴 |
| ModelAndView | 컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 담음 |
| ViewResolver | 컨트롤러의 처리 결과를 생성할 View를 결정 |
| View | 컨트롤러의 처리 결과 화면을 생성
JSP나 Velocity 템플릿 파일 등을 View로 사용 |