Spring Framework

이재연·2021년 5월 16일

Spring이란?

자바 애플리케이션 개발을 위한 오픈 소스 프레임워크이다. J2EE의 보완을 목표로 시작하여 엔터프라이즈 개발을 위한 다양한 기능을 제공한다.

Spring 모듈

스프링은 모듈화되어있다. 그렇기 때문에 개발에 필요한 모듈만을 선택하여 사용할 수 있다.
크게 Core,Testing, Data Access, Web Servlet, Web Reactive, Integration으로 나눌수 있다.

  • Core
    스프링의 기본 기능을 제공한다. 스프링의 모든 다른 모듈과 직/간접적인 종속성을 갖는 스프링의 필수 모듈이다.
    ->IoC Container, Events, Resources, i18n, Validation, Data Binding, Type Conversion, SpEL, AOP.

  • Testing
    테스트 관련 기능을 제공한다.
    ->Mock Objects, TestContext Framework, Spring MVC Test, WebTestClient.

  • Data Access
    데이터 처리 관련 기능을 제공한다.
    ->Transactions, DAO Support, JDBC, R2DBC, O/R Mapping, XML Marshalling.

  • Web Servlet
    웹 관련 기능을 제공한다.
    ->Spring MVC, WebSocket, SockJS, STOMP Messaging.

  • Web Reactive
    반응형 웹을 위한 기능을 제공한다.
    ->Spring WebFlux, WebClient, WebSocket, RSocket.

  • Integration
    EJB, JMS 등 다른 기술들과의 연동 기능을 제공한다.
    ->Remoting, JMS, JCA, JMX, Email, Tasks, Scheduling, Caching.

Spring 특징

스프링은 엔터프라이즈 서비스를 POJO(Plain Old Java Object)에 제공한다. POJO를 사용함으로써 프레임워크에 종속적인 개발을 하지 않아도 되며, 객제지향적인 설계를 할 수 있다.

스프링은 AOP, IoC, PSA을 통해 POJO 프로그래밍을 지원한다.

AOP

AOP
AOP(Aspect Oriented Programming)는 관점 지향 프로그래밍이라는 의미이다. 기능을 핵심 기능과 공통 기능으로 구분하고 공통 기능은 필요한 시점에 적용하는 프로그래밍 패러다임이다. 때문에 객체에 불필요한 기능을 제거하고, 프레임워크에 독립적인 객체를 만들 수 있다. AOP를 사용함으로 인해 사용자는 트랜잭션 같은 로우 레벨의 API를 신경쓰지 않고 비즈니스 로직에 집중할 수 있게 되는 것이다.

스프링에서는 기본적으로 다이나믹 프록시를 사용하여 AOP를 구현한다.

IoC

IoC/DI
IoC(Inversion of Control)는 제어의 역전이라는 의미이다. 프레임워크가 객체의 흐름을 관리한다. 스프링에서는 DI(Dependency Injection) 방식을 사용하여 IoC를 구현한다. IoC 컨테이너라는 곳에서 객체의 생성과 구성, 사용 등의 객체의 생명주기를 관리한다.관리되는 객체는 Spring Beans라고 한다.

의존성을 역전시킴으로 인해 결합도를 줄이고 유연한 구조를 갖는다. 그 결과 객체지향적인 설계가 가능하고, 확장이 쉬워진다. 의존 관계가 역전되어 있기 때문에 프레임워크에 사용하려는 서비스를 추상화하여 적용하는 것이 가능하며, 프레임워크에서 필요한 메타 데이터 등을 객체 내부에 구현할 필요가 없는 것이다.

PSA

PSA
PSA(Portable Service Abstraction)은 휴대용 서비스 추상화라는 의미이다. 환경이나 기술의 변화에 관계없이 일관된 방식으로 사용하도록 돕는 기술이다. 스프링은 개발에 사용되는 다양한 기술의 추상화 기능을 제공한다. 스프링이 제공하는 추상화를 사용함으로 기술을 직접 구현할 필요가 없고, 변화에 유연하게 대처할 수 있다.

예를 들면 선언적 트랜잭션인 @Transactional을 사용할 때 퍼시스턴스 프레임워크가 바뀌어도 동일하게 작동하는 것, 서블릿 사용하면서도 직접 구현하지 않아도 되는 것 등이 PSA이다.

참조

https://ko.wikipedia.org/wiki/%EC%8A%A4%ED%94%84%EB%A7%81_%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC
https://docs.spring.io/spring-framework/docs/5.3.x/reference/html/
https://www.amitph.com/spring-framework-architecture/
https://12bme.tistory.com/157
https://12bme.tistory.com/158?category=682904
https://m.blog.naver.com/PostView.nhn?blogId=lsc401&logNo=221342289202&proxyReferer=https:%2F%2Fwww.google.com%2F

0개의 댓글