개발, 공부, 일상 블로그

[Spring] 스프링 프레임워크의 주요 모듈들을 알아보자

|

☘️ 스프링 프레임워크의 주요 모듈들

📚 시리즈 - 스프링 5.0

  1. 왜 스프링 프레임워크를 사용할까? (Spring vs EJB, JavaEE)
  2. 스프링 프레임워크의 주요 모듈들
  3. DI(Dependency Injection, 의존성 주입)와 IoC(Inversion of Control, 제어 반전)

⚽︎ 목표

스프링 프레임워크의 주요 모듈들을 살펴보자

🤔 스프링 모듈?

지난 번 포스트 에서 공부했듯이 스프링 프레임워크의 모듈성은 스프링이 인기있는 이유 중 하나다.
이번에는 스프링 프레임워크의 주요 모듈들에 대해 살펴보도록 하겠다.


모듈

  1. 스프링 코어 컨테이너 (Spring Core Container)
  2. 횡단 관심 (Crosscutting Concerns)
  3. 웹 (WEB)
  4. 비즈니스 (Business)
  5. 데이터 (Data)

하나씩 살펴보자.

1. 스프링 코어 컨테이너 (Spring Core Container)

스프링 코어 컨테이너는

  • DI (Dependency Injection, 의존성 주입)
  • IoC (Inversion of Control, 제어 역전) 컨테이너
  • Application Context (애플리케이션 컨텍스트)

의 핵심 기능을 제공한다.

💉 DI (Dependency Injection, 의존성 주입)

의존성을 외부에서(주로 IoC 컨테이너가) 지정해 주는 것

⏳ IoC (Inversion of Control, 제어 역전)

프로그래머가 작성한 프로그램이 프레임워크의 제어를 받게 되는 소프트웨어 디자인 패턴

🏭 IoC 컨테이너

객체의 생성, 의존성을 관리하는 컨테이너

🐣 빈 (Bean)

Spring IoC Container가 관리하는 자바 객체
스프링이 제어권을 가지고 직접 생성하며 관계를 부여하는 오브젝트

🐔 빈 팩토리 (Bean Factory)

빈을 생성하고 관계를 설정하는등의 제어를 담당하는 IoC 오브젝트

🐓 애플리케이션 컨텍스트 (Application Context)

애플리케이션 전반에 걸쳐 모든 구성요소의 제어 작업을 담당하는 IoC 엔진, 일종의 빈 팩토리라고 볼 수 있다.
ApplicationContext 인터페이스는 BeanFactory 인터페이스를 상속한다.

  모듈/아티팩트 사용
Core spring-core 다른 스프링 모듈이 사용하는 유틸리티
Beans spring-beans 스프링 빈 지원, 의존성 주입을 제공한다. 빈 팩토리(BeanFactory)의 구현을 포함한다.
Context spring-context 빈 팩토리를 상속하는 애플리케이션 컨텍스트를 구현하고 리소스 로드 및 국제화 지원을 제공한다.
SpEL spring-expression EL(Expression Language, 표현 언어)을 확장하고 빈 속성 및 접근, 처리를 위한 언어를 제공한다.

2. 횡단 관심 (Crosscutting Concerns)

횡단 관심
AOP(Aspect Oriented Programming, 관점지향 프로그래밍) 에서
핵심적인 기능 (Core Concerns) 외에 중간중간 삽입되어야 할 기능들을 횡단 관심 (Crosscutting Concerns) 이라고 한다.

Crosscutting Concerns
예를 들어서, 로깅, 보안, 예외처리, 모니터링 등이 대표적인 횡단 관심이다.

횡단 관심은 로깅 및 보안과 같은 모든 애플리케이션 레이어에 적용할 수 있다.
AOP는 일반적으로 횡단 관심을 구현하는 데 사용된다.
단위 테스트와 통합 테스트는 모든 레이어에 적용될 수 있으므로 횡단 관심 카테고리에 적합하다.

  모듈/아티팩트 사용
AOP spring-aop AOP(Aspect Oriented Programming, 관점지향 프로그래밍)에 대한 기본적인 기능을 제공한다.
Aspect spring-aspects 인기있는 AOP 프레임워크인 AspectJ와의 통합을 제공한다.
Instrument spring-instrument 기본적인 instrumentation을 제공한다.
(Byte Code Instrumentation: 런타임이나 로딩 때 클래스의 바이트코드를 변경하는 것)
Test spring-test 단위 및 통합 테스트에 대한 기본적인 기능을 제공한다.

3. 웹 (WEB)

스프링은 다른 대중적인 웹 프레임워크들(ex. Apache Struts)과의 훌륭한 통합을 제공하는 것 외에도 자체 MVC 프레임워크인 Spring MVC를 제공한다.

  모듈/아티팩트 사용
Web spring-web 멀티파트 파일 업로드와 같은 기본 웹 기능을 제공한다. 다른 웹 프레임워크와의 통합을 제공한다.
Servlet spring-webmvc 자체 MVC 프레임워크를 제공한다. Spring MVC, REST 웹 서비스를 구현을 포함한다.
WebSocket spring-websocket 웹 소켓을 지원한다.
Portlet spring-webmvc-portlet 포틀릿 환경에서 사용할 MVC 구현을 제공한다.

4. 비즈니스 (Business)

비즈니스 레이어는 애플리케이션의 비즈니스 로직을 실행하는 데 초점을 맞춘다.
스프링에서는 비즈니스 로직을 POJO (Plain Old Java Object)로 구현한다.

🤔 POJO..?

순수한 자바 객체를 의미한다.
다시 말해, 어떤 클래스를 확장(extends)하거나, 인터페이스를 구현(implements)하거나, 어노테이션(Annotation)을 포함할 필요가 없는 객체이다..

  모듈/아티팩트 사용
Transaction spring-tx 선언적 트랜잭션 관리를 제공한다.

5. 데이터 (Data)

데이터 레이어는 일반적으로 데이터베이스 및 외부 인터페이스와 상호작용한다.

  모듈/아티팩트 사용
JDBC (Java Database Connectivity) spring-jdbc JDBC 추상화를 제공한다. 이 모듈의 이점에 대해서는 이전 포스트에서 잠깐 언급했다.
ORM (Object Relational Mapping) spring-orm JPA (Java Persistence API), JDO (Java Data Objects), Hibernate와 같은
ORM API를 위한 통합레이어를 제공한다.
OXM (Object XML Mapping) spring-oxm JAXB, Castor, XMLBeans, JiBX, XStream과 같은
Object/XML 매핑을 지원한다.
Messaging spring-messaging 메시지 기반 애플리케이션을 작성할 수 있는 기능을 제공한다.
JMS (Java Message Service) spring-jms 메시지 생산(Producing)과 소비(Consuming)를 위한 기능을 제공한다.
Spring Framework 4.1 부터는 spring-messaging과의 통합을 제공한다.

📕 마무리

책에서 설명이 부실한 부분은 직접 찾아가면서 내용을 채웠다.
스프링의 주요 모듈들이 어떤 기능들을 제공하는지 짚고 다음 단계로 넘어가면 될 것 같다.

크게 코어, 횡단 관심, , 비즈니스, 데이터 계층으로 나뉘고, 각각의 역할을 간단히 정리해보자

  • 코어 : DI, IoC에 대한 핵심 기능 제공 (Bean, Bean Factory, Application Context)
  • 횡단 관심 : AOP에서 핵심기능 외에 중간중간 삽입되어야 할 기능들
  • 웹 : 웹 서비스를 위한 기능들
  • 비즈니스 : 비즈니스 로직을 실행, 선언적 트랜잭션 관리
  • 데이터 : 데이터베이스 및 외부 인터페이스와의 상호작용

다음에는 스프링의 핵심 기능 중 하나인 DI (Dependency Injection, 의존성 주입) 에 대해 자세하게 알아보자.


🚀 참고