Introduction to Spring Framework

호수·2023년 3월 8일
0

Spring

목록 보기
1/5
post-thumbnail

요약: 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)

특징
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-contextBeanFactory를 상속하는 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
: 최종 결과를 응답

profile
Back-End개발자 입문 과정 블로그🚀

2개의 댓글

comment-user-thumbnail
2023년 4월 24일
답글 달기