카테고리 없음

Spring Framework란 무엇인가

lakedata 2025. 2. 13. 21:51
요약: DispatchServlet / MVC / Module

Spring Framework

open source application framework for Java platform

Java 기반의 웹, 엔터프라이즈 애플리케이션 개발을 단순화하여 효율성과 생산성을 높일 수 있게 도와주는 container와 library들의 집합이다.

– DependencyInjection(DI)을지원하는 container
▪ Inversion of Control(IoC)

Spring을 이용한 애플리케이션 개발의 장점

▪ Plain Old Java Objects(POJOs)를 이용한 쉬운 개발 (lightweight development)
▪ Dependency injection과 interface를 활용한 객체들 간의 느슨한 결합 (loose coupling)
▪ Aspects와 common conventions, annotation을 통한 선언적 프로그래밍 (declarative programming)
▪ Aspects와 templates을 이용한 단순 반복 코드 제거 (boilerplate reduction)

Spring Framework 특징

  1. 컨테이너 제공: Light-weight container & framework
    ▪ 크기가 작고 성능이 우수함
    ▪ Java 객체의 life-cycle 관리
    ▪ Enterprise application 개발을 위한 다양한 시스템 서비스 제공
  2. Dependency Injection 지원
    ▪ XML, Annotation, Java code 기반 설정을 통해 객체들 간의 의존 관계 설정
  3. Aspect-Oriented Programming(AOP) 지원
    ▪ 핵심 business logic과 system services 사이의 독립성 보장
  4. 효율적인 Web application 개발 지원
    ▪ Servlet-based Spring MVC web framework ▪ Spring WebFlux reactive web framework
    ▪ RESTful web service framework
  5. JDBC, JPA, 선언적 transaction 처리 등 데이터베이스 연동 지원
  6. 다양한 기술들과의 연동 지원
    ▪ EJB (for JavaEE)
    ▪ Struts, WebWork, Tapestry, JSF (for web)
    ▪ JDBC, Hibernate, JPA, MyBatis, JDO, NoSQL DB (for persistence)
    ▪ JSP, Tiles, Velocity, FreeMarker, Mustache, Thymeleaf (for presentation)
    ▪ JMS (for messaging)
    (1)컨테이너 제공, (2)AOP 지원, (3)서비스 추상화

구성요소(modules)

주요 module의 기능

Container핵심모듈
웹모듈
데이터베이스 모듈

주요 module간 의존관계
A------>B:A가 B를 필요로 한다.

스프링 프레임워크는 크게 아래와 같이 5개의 모듈로 구분할 수 있음.

스프링 코어 컨테이너
횡단관심

비지니스
데이터

Spring core container

  • 스프링 프레임워크 의존성 주입
  • IoC(Inversion of Control) 컨테이너 및 애플리케이션 콘텍스트의 핵심 기능을 제공함.
모듈/아티팩트 설명
spring-core 스프링모듈이 사용하는 유틸리티를 말함

|pring-beans|- spring bean 지원
- spring core 와 함께 스프링 프레임워크의 핵심 기능인 의존성 주입을 제공함.
- BeanFactory의 구현을 포함함
|spring-context|BeanFactory를 상속하는 Application context 를 구현- 리소스 로드 및 국제화 지원을 제공함|
|spring-expression|- EL을 확장하고 Bean 속성(배열 및 컬렉션포함) 및 접근처리를 위한 언어를 제공함.* EL이란?- Expression language의 약자- JSP 2.0 스펙에 추가된 개념|

Crosscutting concerns

  • 로깅및 보안과 같은 모든 Application Layer에 적용할 수 있음.
  • AOP는 일반적으로 횡단 관심을 구현하는 데 사용함.
  • 단위테스트와 통합 테스트는 모든 Layer 에 적용할 수 있으므로 해당 카테고리에 적합함.
모듈/아티팩트 설명
spring-aop - 메소드 Interceptor와 point cut을 사용해 관점지향 프로그래밍에 대한 기본적인 지원을 제공함
spring-aspects - 가장 인기있는 AOP 프레임워크인 AspectJ와의 통합을 제공함
spring-instrument - 기본적인 Instrumentation 을 제공함
spring-test - 단위 및 통합 테스팅에 대한 기본 지원 제공

Web

  • 스프링은 스트럿츠와 같은 대중적인 웹 프레임워크와 훌륭한 통합을 제공하는 것 외에도 자체 MVC 프레임워크인 스프링 MVC 를 제공함.
모듈/아티팩트 설명
spring-web - 멀티파트 file upload와 같은 기본 웹 기능을 제공함- 스트럿츠와 같은 다른 웹 프레임워크와의 통합을 지원함
spring-webmvc - 모든 기능을 갖춘 웹 MVC 프레임워크를 제공함- 참고로, 스프링 MVC 에는 REST 서비스를 구현하는 기능도 포함되어 있음

Bussiness
- 애플리케이션의 비즈니스 로직을 싱행하는 데 초점을 맞춤.
- 스프링에서는 일반적으로 비즈니스 로직이 POJO(Plain Old Java Object) 로 구현됨.

모듈/아티팩트 설명
spring-tx - POJO 및 다른 클래스에 대한 선언적 트랜잭션 관리를 제공함
Data  
- 일반적으로 데이터베이스 및 외부 인터페이스와 통신함.  
모듈/아티팩트 설명
spring-jdbc - 상용구 코드를 방지하기 위해 JDBC 를 추상화함
spring-orm - ORM 프레임워크 및 스펙(JPA, 하이버네이트등등)과의 통합을 제공함
spring-oxm - XML 매핑 통합 객체를 제공함- JAXB, Castor등과 같은 프레임워크를 지원함
spring-jms - 상용구 코드를 방지하기 위해 JMS를 추상화함

Spring Framework Web MVC

DispatchServlet은 "Frint Controller"

MVC(모델-뷰-컨트롤러) 패턴

Controller : 모든 요청(Request)을 받고 요청 URL과 매핑된 Controller로 연결시켜 처리하고 결과를 Model(모델)에 담아 View(뷰)에 전달하고 생성된 HTML를 응답(Response) 합니다. - Servlet
Model : Controller(컨트롤)에서 처리된 결과를 관리합니다. - Java Beans
View : Model(모델)을 Rendering 하여 HTML 생성하여 Controller(컨트롤)에 전달합니다. - JSP

DispatcherServlet의 프로세스로 MVC를 설명하겠습니다.

Client -> Dispatcher Servlet

url로 접근하여 정보를 요청

 

Dispatcher Servlet -> Handler Mappings

해당 요청을 매핑한 컨트롤러가 있는지 탐색
해당 컨트롤러가 있다면 Dispatcher Servlet에게 반환
( 실제적으로는 Controller을 반환하지 않고 HandlerExcutionChain을 반환)

Dispatcher Servlet -> Controller

요청에 해당 하는 method 실행
요청을 처리하고 결과를 반환 ( ModelAndView or ResponseEntity )

 

Dispatcher Servlet -> View Resolver ( 위에서 받은 결과가 View인 경우 )

위에서 받은 컨트롤러의 응답에 해당하는 View 탐색 및 반환

Dispatcher Servlet -> View's ( 위에서 받은 결과가 View인 경우 )

위에서 받은 View와 Controller의 응답으로 받은 Model을 조합한 View를 제작 및 반환

 

Dispatcher Servlet -> Client

최종 결과를 응답