티스토리 뷰
Spring이란?
스프링(Spring)은 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크
- SpringBoot
- 스프링 부트는 웹 프로그램을 쉽고 빠르게 만들 수 있도록 도와주는 웹 프레임워크 - Spring Cloud
- 분산/버전 관리, 서비스 등록 및 검색 가능, 라우팅, 서비스 간 호출, 부하분산, 회로차단기, 분산 메시지 등의 기능을 사용할 수 있는 도구 - Spring Batch
- 엔터프라이즈 시스템의 일상적인 운영에 필수적인 강력한 배치 애플리케이션을 개발할 수 있도록 설계된 가볍고 포괄적인 배치 프레임워크
Spring 특징
- 컨테이너 역할
Spring 컨테이너는 Java 객체의 LifeCycle을 관리하며, Spring 컨테이너로부터 필요한 객체를 가져와
사용할 수 있습니다. - DI(Dependency Injection) 지원
Spring은 설정 파일이나 어노테이션을 통해서 객체 간의 의존관계를 설정할 수 있도록 하고 있습니다. - AOP(Aspect Oriented Programming) 지원
Spring은 트랜젝션이나 로깅, 보안과 같이 공통적으로 필요로 하는 모듈들을 실제 핵심 모듈에서 분리해서
적용할 수 있습니다. - POJO(Plain Old Java Object) 지원
Spring 컨테이너에 저장되는 Java객체는 특정한 인터페이스를 구현하거나, 특정 클래스를 상속받지 않아도 됩니다. - 트랜젝션 처리를 위한 일관된 방법을 지원
JDBC, JTA 등 어떤 트랜젝션을 사용하던 설정을 통해 정보를 관리하므로 트랜젝션 구현에 상관없이 동일한 코드 사용 가능합니다. - 영속성과 관련된 다양한 API 지원
Spring은 Mybatis, Hibernate 등 데이터베이스 처리를 위한 ORM(Object Relational Mapping)
프레임워크들과의 연동 지원합니다.
Spring 기능 요소
Core Container
- 스프링 프레임 워크의 핵심은 Bean의 생명 주기와 설정 그리고 처리방법을 관리하는 코어 컨테이너
- 모든 스프링 모듈의 기반
- Core 및 Beans
- IOC/DI기능을 지원하는 담당
- BeanFactory를 기반으로 Bean 클래스들을 제어할 수 있는 기능을 지원
- Core는 스프링에서 사용하는 핵심모듈이며 주요 어노테이션, 컨버터, 상수, 유틸리티 클래스 등을 제공
- Beans는 스프링 DI기능의 핵심인 bean Factory와 DI기능을 제공하는 모듈 - Context
- Bean들을 포함하여 여러 기능을 가진 공간
- Beans모듈에 더하여 국제화, 애플리케이션 생명주기, 이벤트, 유효성 검증, 투명한 Context 생성 등을 제공
- Java EE 기술(JNDI, Mail, JMS, EJB 등)과의 연동을 위한 Adapter들을 제공
AOP (Aspect Oriented Programming)
- 관점 지향 프로그래밍을 풍부하게 지원하고 객체 간의 결합력을 낮추게 도와줄 수 있습니다.
- 트랜젝션이나 로깅, 보안과 같이 공통적으로 필요로 하는 모듈들을 실제 핵심 모듈에서 분리해서
적용할 수 있습니다.
Instrumentation
- JVM에 에이전트를 추가하는 기능을 제공, 정확히는 톰캣용 위빙 에이전트(weaving agent)를 제공
- 톰캣은 클래스 로더 되는 클래스 파일을 변환
Data Access / Integration
- JDBC, ORM, 트랜잭션 등 서비스 추상화를 이용해 쉽게 데이터에 접근하는 방법을 제공
- JDBC
- 일관된 방법으로 개발하는 것이 가능하도록 추상화된 레이어를 제공 - ORM (Object Relation Mapping)
- 프레임워크인 Hibernate, iBatis, JDO, JPA와의 통합을 지원 - OXM (Object/XML Mapping)
- Object와 XML 간의 변환을 위한 추상 계층을 제공
- JAXB, Castor, XMLBeans, JiBX, XStream - JMS (Java Message Service)
- 메시징 처리를 위한 모듈을 제공 - Transaction
- 스프링의 데이터에 직접적인 트랜잭션 관리
- 선언적인 트랜잭션 관리에 있어 일관된 추상화를 제공하고 DataAcssessException 예외 계층 구조와 트랜잭션 동기화 저장소 JCA기능을 제공하거나 포함
Web
- 다양한 MVC프레임워크와 같이 사용 가능하지만 자체적으로도 Spring 모듈이 만들어져 있고 HTTP호출자나 REST API 모듈을 제공
- Web
- 기본적인 웹 기반을 위한 공통적 기능을 제공 및 정의한 모듈, Multipart Request 등의 다양한 기능을 지원
- 다중 FileUpload처리, 리스너와 웹 기반으로 하는 application context를 위한 IOC컨테이너의 초기화를 제공 - Servlet
- 웹 어플리 케이션 구현을 위한 Spring MVC를 제공 전통적인 MVC와 @MVC기능을 모두 포함
- Struts, JSF, WebSocket과 같은 프레임 워크의 통합을 지원 - WebSocket
- JSR-356 스펙에 따라 구현된 WebSocket프로그래밍을 지원하는 모듈 - Portlet
- 포털 기반의 MVC 구현을 위한 모듈을 제공
Spring 구조 및 동작
Client 요청(Request) -> DispatcherServlet -> HandlerMapping -> Controller -> Service -> DAO -> DB -> DAO -> Service -> Controller -> DispatcherServlet -> ViewResolver -> View -> 응답(Response)
참고
https://docs.spring.io/spring-framework/docs/4.0.x/spring-framework-reference/html/overview.html
http://server-engineer.tistory.com/253
'IT > Spring' 카테고리의 다른 글
[Spring] SpringBoot + JUnit5 단위테스트 (0) | 2022.09.05 |
---|---|
[Spring] SpringBoot + MariaDB JPA (0) | 2022.08.26 |
[Spring] SpringBoot + MariaDB JDBC && MyBatis with Docker (0) | 2022.08.24 |
[Spring] SpringBoot + 공공데이터 with lombok & jackson (0) | 2022.08.23 |
[Spring] Spring Boot + Java SE 17 설정 with IntelliJ (0) | 2022.08.10 |