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