Spring의 핵심 모듈들
1. Spring의 핵심 모듈들

1) Core Container
Spring의 핵심 기능인 IOC, DI등을 를 제공하는 핵심 모듈의 집합.
의존성들을 관리하는 IOC Container(Bean Factory)가 존재한다.
내부적으로 다음 4개의 모듈로 구성되어 있다.(Beans, Core, Context, SpEL)
1) Spring Core
전체 프레임워크의 기반이 되는 핵심 모듈로 전체 Spring Container의 관리자의 역할을 한다.
모든 스프링 모듈들이 의존하는 클래스들을 포함하고 있으며, SpringCore가 없으면 기타 모듈 사용이 불가능하다.
2) Spring Beans
DI구현의 핵심 모듈.
Bean(스프링 의존성)정의 설정 , 생성 및 의존성 주입 처리를 당당하는 기능을 포함하고 있다.
3) Spring Context
Application Context를 제공하여 Bean들을 관리할 수 있는 기능을 제공한다.
IOC Container구현체이며 다양한 의존성들을 생성 및 보관하는 역할을 한다.
@ComponentScan, @Bean, @Configuration, classpath: 등
Bean관리 범위를 유연하게 확장해주는 기능을 제공한다.
4) Spring Expression(SPEL)
xml이나 Annotation에 동적인 값을 주입할 수 있게 해주는 모듈
jsp의 el표현식을 XML과 Annotation에 작성할 수 있다,
@Value("#{1+2}")
private int value; // 3
2) Spring AOP
Spring AOP와 관련된 기능들을 제공하는 모듈
핵심 로직과 공통 로직을 분리하여 유지보수성과 재사용성을 높이는게 AOP이며, Spring은 프록시(Proxy)를 기반으로 AOP를 지원한다.
실제 실행할 메서드가 담긴 객체의 앞단에 요청을 가로챌 객체(프록시)를 두고, 프록시를 통해 공통 로직 호출 후, 가로챈 요청을 다시 실행할 메서드가 담긴 객체에게 넘기는 방식
일반적인 요청 흐름
Client의 요청 -> 실행할 메서드가 담긴 객체로 요청내용 전달 -> 메서드 실행
Proxy가 포함된 요청흐름
Client의 요청 -> 프록시가 요청내용 가로챈 후, 공통로직실행 -> 실행할 메서드가 담긴 객체로 요청내용 전달 -> 메서드 실행
@Aspect, @Pointcut, @After @Before 등의 기능을 제공
3_1) Spring Web
웹(Web) 어플리케이션을 만들기 위한 기본 기능을 제공하는 모듈
http요청/응답, 파일업로드, 교차출처등의 기능을 지원한다.
DispatcherServlet, RestTemplate등의 클래스가 포함된다.
3_2) Spring Web MVC
Spring Web 모듈위에 MVC 아키텍쳐 기능을 추가하여 기능을 확장한 모듈로, Web모듈에 의존한다.
Spring Web모듈이 http와 통신을 하기 위한 기능만 제공한다면, WebMvc는 통신한 결과를 바탕으로 응답결과를 클라이언트에게 제공해야하는 경우 사용한다.
응답결과를 돌려주기 위한 다양항 기능을 제공한다
View Resolver, HandlerMapping, Model& view 등
4) Spring Data
Spring Data는 다양한 모듈이 모인 집합으로, 일관된 방식으로 Database에 접근하고, 데이터베이스와 관련된 다양한 편의성 기능을 제공하여 생산성을 향상 시키는게 주 목적인 모듈이다.
대표적으로 spring data jdbc, spring data jpa 등이 존재한다.
5) Spring Test
Spring 어플리케이션을 테스트할 수 있는 기능을 제공하는 모듈.
DI와 , ApplicationContext, Mock데이터등을 사용하여 실제환경과 유사한 구조의 Spring 어플리케이션을 구축한 후 테스트할 수 있다.
하나의 기능 단위 테스트인 단위테스트와 , 여러 기능을 결합한 시스템의 흐름을 검증하는 통합 테스트를 지원한다.
6) Spring Security
Spring 어플리케이션의 인증(Authentication)과 인가(Authorization)를 담당하는 보안과 관련된 기능을 제공하는 모듈.
인증(Authentication)
사이트를 이용할 수 있는 회원인지 인증하는 과정
대표적으로 로그인을 통하여 인증작업을 수행한다.
인가(Authorization)
사용자가 요청한 서비스를 이용할 권한이 있는지를 체크하는 과정
관리자사이트같이 일반사용자가 이용할 수 없는 페이지는 인증과 함께 인가여부도 확인한다.
그 밖에 데이터 암호화, CORS정책과 관련된 보안설정 또한 가능하다.
현재는 모듈이 아닌 보안에 특화된 독립된 프레임워크로써 사용되기 때문에 모듈이 아닌 프레임워크로 구분하는 것이 옳다.
7) Aspects & Instrumentation
AOP기능을 복잡하게 사용하고자 할때 추가하는 모듈.
8) Messaging
메시징 기반 아키텍처를 위한 API로 WebSocket, Stomp등 실시간 서비스를 만들때 사용하는 모듈
9) Spring Batch
대용량 데이터를 일괄(batch)처리 하기 위한 모듈로 db백업 , 로그분석 , 정산 등 반복적이며 자동화된 대용량 데이터 작업 처리시 사용된다.
10) Spring Boot
빠른 스프링프레임워크 개발을 위해 여러 스프링 모듈들을 모아주는 통합 도구 및 플랫폼의 역할을 한다.
Spring Boot에서 통합한 모듈에는 기본적인 설정들이 자동으로 포함되어 있어 쉽고 빠르게 모듈을 사용할 수 있다.
Spring Boot Starter Web, Spring Boot Starter Data Jpa 등 다양한 결합형 모듈을 제공한다.
ex)Spring Boot Starter Web -> Spring MVC + 내장형 Tomcat + Jackson LIB 등
Last updated