Spring Architecture

sycho·2023년 11월 15일
0

Spring-tips

목록 보기
2/2

Spring에는 여러 모듈이 존재하며, 이들은 각각 다른 기능을 제공한다. 모든 모듈을 사용할 필요는 없고 골라서 사용하는게 가능하다.

흔히 spring architecture 소개를 한다는 것은 이 모듈들이 뭐가 있는지를 설명하는 것이라고 생각하면 된다.

크게 Core Container, Data Access / Integration, Web, Misc.와 같이 4개로 나누는게 가능하다.

Core Container

이전 글에서 간략히 설명했던 것과 관련된 모듈들의 모음이다.

Core

  • 프레임웍의 핵심 기능들을 제공하는 모듈

  • DI, IoC 관련 기능들도 여기에 포함된다.

Bean

  • BeanFactory를 제공해주는 모듈

  • Spring에서 활용하는 design pattern으로 factory design pattern이라는게 있다. 이 pattern은 굳이 Spring이 아니더라도 적용이 가능한 pattern이지만, 직접 구현하는 피곤함을 최소화하기 위해 Spring에서 나름 최적화된 factory design pattern 관련 class를 제공하는데 그게 바로 BeanFactory다. 이 링크에서 간단하게 잘 설명이 되어 있다.

Context

  • CoreBean module을 기반으로 하는 module이다.

  • 정의된 object들을 접근하는 매개체가 되어준다.

  • 여기에 속하는 중요한 녀석 중 하나로 ApplicationContext라는 interface가 있다.

SpEL

  • runtime때 object graph를 조작하거나 접근할 때 쓸 수 있는 강력한 expression language를 제공하는 모듈이다.

  • Spring Expression Language의 약자다.

Data Acess / Integration

JDBC

  • 원래는 Java에서 database에 접근할 때 사용할 수 있는 API들의 모음을 의미한다.

  • 이 JDBC와 관련된 귀찮은 코드들을 한층 더 감싸서 모듈 형태로 제공하는 것이 Spring의 JDBC다.

  • JDBC 관련 추상화 layer을 제공하는 것이라고 생각하면 된다.

ORM

  • Object Relational Mapping의 약자다. 이게 뭔지는 위키 참고

  • 위키를 보면 알겠지만 이를 직접 구현하는건 지옥일거고, 실제로 여러 ORM 관련 api들이 이미 존재한다. JPA, JDO, Hibernate, iBatis가 대표적.

  • 이 api들을 위한 integration layer을 제공하는 module이 바로 Spring의 ORM module이다.

OXM

  • Object XML Mapping의 약자다.

  • Spring 고유의 module이며, 말 그대로 Java Object와 XML 간의 mapping을 관리하는데 사용할 수 있는 module이다.

  • 이를 활용하는 것들로 JAXB, Castor, XMLBeans, JiBX, XStream이 있다.

JMS

  • Java Messagiing Service의 약자다.

  • message를 만들거나 소모하는 것과 관련된 기능을 제공하는 모듈이다.

Transaction

  • 특별한 interface를 구현한 class들이나 모든 POJO (Plain Old Java Objct)들을 위한 programmatic / declarative transactino 관리를 지원해주는 모듈이다.

Web

Web

  • 기본적인 웹 지향 통합 기능들을 제공한다.

  • 대표적으로 하나의 파일을 여러개의 part로 나눠서 업로드하는 multipart file upload, servlet lisetner과 웹지항 application context를 기반으로 한 IoC container 생성 등이 있다.

Web-MVC

Web-Socket

  • WebSocket을 기반으로 웹 애플리케이션의 server와 client 사이의 쌍방향 통신을 지원해주는 모듈이다.

Web-Portlet

  • portlet 환경에서 사용될 MVC pattern 구현 model을 제공한다.

  • Java의 Web-Servlet을 구현한 module과 매우 유사한 기능을 제공한다. Web Servlet에 대한 설명은 다음 링크 참고

Misc.

AOP

  • AOP paradigm을 원할하게 수행할 수 있도록 도와주는 module이다.

  • method-interceptor과 pointcut들을 프로그래머가 정의할 수 있도록 해서, 분리되어야 하는 기능들을 구현하는 코드들이 서로 연관이 없을 수 있도록 하는걸 도와준다.

Aspects

  • AspectJ라고 AOP와 관련된 또다른 강력한 프레임웍이 있는데, 이를 사용하는데 도와주는 module이다.

Instrumentation

Messaging

  • STOMP(Simple Text Oriented Message Protocol)라는 녀석을 지원해주는 module이다. 이를 application에서 WebSocket sub-protocol 용도로 사용할 수 있도록 제공해준다.

  • 그러면 WebSocket들이 서로 이 STOMP를 활용해서 message를 송수신을 할텐데, 이 message들을 전달하는 과정 및 처리에 사용되는 annotation programming model도 여기서 제공해준다.

Test

  • JUnit이나 TestNG 프레임웍을 활용하는 테스팅을 지원해주는 module.

참고링크
Tutorialspoint - Spring Framework - Architecture

profile
안 흔하고 싶은 개발자. 관심 분야 : 임베디드/컴퓨터 시스템 및 아키텍처/웹/AI

0개의 댓글