dev_dbdb1114

Spring 버전별 특징 본문

프로그래밍/SPRING

Spring 버전별 특징

dbdb1114 2023. 9. 5. 23:05

Overview

Spring이 뭘까?

  1. Spring Framework는 Java Web Framework이다.
  2. 개발 생산성을 위해 지원하는 강력한 기능들에 비하여 경량 Framework이고 다른 복잡한 부분들을 Framework단에서 처리해주어 개발자들이 business login에만 신경쓸 수 있도록 지원하다.

Spring의 특징

  1. IOC ( Inversion of Control 제어의 반전 )
    1. java를 이용한 프로그래밍에서는 new 연산자, 인터페이스 호출, 데이터 클래스 호출 방식으로 객체를 생성하고 소멸시킨다.
    2. IoC는 객체의 생성부터 소멸까지 개발자가 아닌 SpringContainer가 대신 해주는 것이다.
    3. 제어권이 개발자가 아닌 IOC에 있으며, IoC가 개발자의 코드를 호출해 객체를 생성, 소멸하여 생명주기를 관리한다.
  2. DI ( Dependency Injection, 의존성 주입 )
    1. 프로그램에서 구성 요소의 의존관계가 소스코드 내부가 아닌 외부의 설정 파일을 통해 정의되는 방식이다.
    2. 코드간의 재사용성을 높이고, 소스코드를 다양한 곳에 사용하며 모듈간의 결합도를 낮출 수 있다.
    3. 대표적으로 라이브러리나 API,프레임워크를 연동할 때 연결하는 소스코드를 직접 작성하는게 아닌 외부 파일을 연결해 불러오는 방식이다.
  3. AOP (Aspect Object Programing, 관점 지향 프로그래밍 )
    1. logging, transaction, security 등 여러 모듈에서 공통적으로 사용하는 기능을 분리하여 관리할 수 있다.
    2. 여러 객체에 공통으로 적용할 수 있는 기능을 구분함으로써 재사용성을 높여주는 프로그래밍 기법
  4. 경량 ( Light-wighted )
    1. 크기와 부하 측면에서 독립된 몇 개의 jar 파일로 구성되어 있기 때문에 설치가 용이하며 POJO를 사용한다.
      1. POJO( Plain Old Java Object ) POJO는 JAVA EE를 사용하면서 해당 플랫폼에 종속되어 있는 무거운 객체들을 만드는 것에 반발하여 나타난 용어이다. 별도의 프레임워크 없이 JavaEE 를 사용할 때에 비해 인터페이스를 직접 구현하거나 상속받을 필요가 없어 기존 라이브러리르 지원하기 용이하고, 객체가 가볍다.
  5. Transaction 관리
    1. Java Objec에 대한 transaction을 지원하지만 J2EE와 같은 환경에 얽매이지 않는다.
  6. Container
    1. Application 객체의 Life Cycle과 객체들 간 의존 관계를 container 형태로 관리한다. Servlet Container와 Spring Container의 차이점은 특정 WAS, 벤더에 종속적이지 않으며 자유로운 확장이 가능하다는 것이다.

Spring 3.2.x ( ~ 2016.12.31 )

  • Java 5의 지원되면서 Generic이나 가변인자 등과 같은 개선 사항이 추가되었다.
    • ⇒ BeanFactory 등 핵심 API의 업데이트
  • 전체 프레임워크를 하나의 Spring.jar 파일로 제공하던 부분을 여러개의 jar 파일로 나누어 제공한다
    • spring-core, spring-web
  • SPEL (Spring Expression Language)가 도입되었다.
    • XML및 Annotation 기반 Bean 정의에서 사용할 수 있게 되었고, 외부 프로퍼티 파일이나 환경 변수에서 값을 가져오기 쉬워졌다.
  • Rest API에 대한 지원이 추가되었다.
    • 서버로서는 기존 MVC Framework레벨에서 Annotation 기반 확장이 추가되었다.
    • 클라이언트로서는 RestTemplate을 추가해 지원한다.
  • OXM ( Object XML Mapping ) 기능이 추가되어 XML 형태로 할 수 있게 지원한다 .
  • @Configuration, @Bean 등의 Java Annotation을 이용해서 직접 메타 데이터를 설정하고, DI 지원이 가능해졌다.
  • HSQL, H2, Derby 같은 내장 자바 데이터베이스 엔진을 편리하게 지원한다.
  • @Async 주석을 통하여 비동기 메서드 호출을 지원했다.

Spring 4.1

  • Java Config로 설정할 수 있는 부분이 증가했다.
  • @JmsListener annotation으로 listener를 추가할 수 있게 했다.
  • Spring Messaging abstraction이 JMS를 지원하기 시작했다.
  • Caching 기능 향상
    • CasheResolver를 사용해 캐시를 런타임에 결정하는 것이 가능해졌다.
    • @CacheConfig 어노테이션을 이용한 어노테이션 레벨에서의 공통 세팅을 활성화 했다.
    • cache resolver, cache manager, key generator 등의 커스터 마이징이 가능
  • Web
    • @RequestParam, @RequestHeader, @MatrixVariable에 Optrional 사용 가능
    • ResourceResolver, ResourceTransformer, ResourceUrlProvider 사용 가능
    • ResponseEntity가 빌더 형식의 api를 제공한다. ( ex: ResponseEntity.ok() )

Spring 4.2

  • @Bean이 default method 감지
  • @Import로 @Configuration class나 @Component class 임포트 가능.
  • @Order 로 @Configuration 클래스가 로딩되는 순서 설정 가능
  • annotation attribute를 위한 @AliasFor를 제공한다.

Spring 4.3

  • Java 8 기능을 완전히 지원하기 시작함.
  • Starter Pack이 생겨서 POM 설정을 도와준다.
  • Groovy를 통한 Bean 설정이 가능하다.
  • core
    • 생성자 주입시 @Autowired 키워드 생략 가능
    • @Configuration에서 생성자 주입 지원
    • @Scheduled, @Schedules를 meta-annotation으로 사용 가능
  • caching
    • @Cacheable의 sync 속성을 통한 동시성 지원
  • WEB
    • @RequestMapping의 다양한 형태 @GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @PatchMapping 추가
    • class level에서 @ResponseStatus 지원
    • @PathVariable Optional 사용 가능
    • MvcExceptionHandler에 지속적인 혹은 커스텀 에러 처리 가능
    • @RestControllerAdivce 추가

Spring 5.0

  • Java 8 버전이 기본으로 설정됨 ( Java EE 7 API 이상 사용 가능 )
  • CoreFramework
    • Java8이 기본이 되면서 코어 스프링 인터페이스들이 디폴트 메서드 기반의 선택적 정의를 제공함
    • @Nullable, @NotNull annotation을 사용해서 명시적으로 nullable 인자를 표시하고 값을 얻어올 수 있다. 이것은 컴파일 타임에 null값을 다룰 수 있게 됨을 뜻함.
    • spring-jcl이라는 공통 로깅 브릿지 모듈 추가
  • Core Container
    • 후보 컴포넌트 인덱스 기능 추가 (classpath 기반의 Component 스캔을 대체할 수 있다.
  • non-blocking과 함수형 프로그래밍, reactive stream의 구현을 할 수 있는 Spring WebFlux를 지원한다. ( Spring MVC도 가능 )
    • Spring Framework5로 업그레이드하면 Spring WebFlux를 사용하기 위해 애플리케이션을 다시 작성할 필요가 없다.
  • Kotlin을 사용한 함수형 프로그래밍
  • Testing
    • Junit 5의 Jupiter 지원

 

참고

https://velog.io/@jmjmjmz732002/Spring-Spring-버전별-특징#spring-4x

https://hirlawldo.tistory.com/204

https://good-or-bad.tistory.com/54

https://m.blog.naver.com/whdgml1996/222001483936

'프로그래밍 > SPRING' 카테고리의 다른 글

빌드와 빌드도구 ( Maven과 Gradle )  (2) 2023.09.03
SpringWebFlux  (0) 2023.09.01
Comments