본문 바로가기
IT/Spring

[Spring][전문가를 위한 스프링 5] CH1. 스프링 소개

by 강천구 2022. 7. 23.

전문가를 위한 스프링 5(Pro Spring 5) - Ch 1. 스프링 소개

1.1 스프링이란?

  • Spring은 Java Application 개발을 위한 경량 Framework이다.
  • Apache Struts와 같은 단순 Web App 개발뿐만 아니라 다양한 형태의 Java Application 개발이 가능하다.
  • 기존 App 코드에 최소한의 영향을 준다.(경량)

1.1.1 스프링 프레임워크의 발전 과정

  • Spring 0.9 버전
    • Bean, AOP, JDBC, 추상 Transaction 지원
  • Spring 1.X 버전
    • Spring Core, Context, Dao, ORM, AOP, WEB, WEB MVC

Spring 1.X

  • Spring 2.X 버전
    • DTD 아닌 XML 스키마 구성지원
    • @Transactional, @AspectJ 등 annotation 지원
    • @Component, @Repository, @Service, @Controller 지원
    • Spring Context는 Core 모듈에 포함, WEB 관련 모듈은 하나로 표시

Spring 2.X

  • Spring 3.X 버전
    • @RequestHeaders, @async, @Profile 등 annotation 기능 지원
    • SpEL 도입 및 Hiberante 4, RestTemplate 지원
    • MVC namespace와 Java Config 이용하여 URL 패턴 제외하는 기능
    • Gradle 기반 빌드 시스템 도입

Spring 3.X

  • Spring 4.X 버전
    • OpenJDK 8 지원
    • Groovy 구문을 통한 빈 정의 DSL
    • WebSocket, SockJS 및 STOMP 메세징 지원

Spring 4.X

  • Spring 5.X 버전
  • Java 8 기반 개발 / Java 11 지원(공식) / LTS Java 17 릴리스 지원
  • 웹 및 코어 모듈을 반응형 프로그래밍 모델에 맞게 개선

1.1.2 제어 역전과 의존성 주입

  • IoC(Inversion of Control) : 제어 역전 (흐름 변경)/ 컴포넌트 간의 의존성 생성과 관리를 외부에서 수행
  • DI(Dependency Injection) : 의존성 주입 / 객체 직접 생성이 아닌 외부에서 생성 후 제공
  • Foo 클래스가 Bar 클래스를 사용하는 경우
    • 전통적 방식 : Foo 클래스 내부에서 new Bar() 하거나 팩토리 클래스로 인스턴스 생성
    • DI 방식 : Runtime에 외부 프로세스(Spring)가 Foo에게 Bar 인스턴스를 제공(의존성 주입)
  • Crosscuttiong concerns에 대해 AOP와 같은 기능 사용 가능
  • DI와 관련해 Spring은 인스턴스 컨테이너 역할 

1.1.3 의존성 주입의 발전 과정

  • 접착 코드 감소 
    • 의존 관계를 줄여 코드 양을 줄일 수 있다.
    • 자동 JNDI 룩업과 원격 리소스의 자동 프록시 기능을 이해 단순화 가능
  • App 구성 단순화 
  • 단일 저장소에서 공통 의존성을 관리
  • 테스트 편의성 향상
    • 기존엔 DAO를 Mock으로 변경이 어려워 테스트 난이도 있음
    • DI를 통해 테스트용 DAO Mock 구현체를 만들어 사용 가능
    • 좋은 App 설계를 도출

1.1.4 기타 제공 기능

  • 자바 9
  • AspectJ
  • SpEL
  • Validation 
  • Data Access(표준 JDBC)
  • OXM(Object/XML 매핑)
  • Transaction Mgmt.
  • JEE 단순화 및 연동
  • 웹 티어의 MVC (JSP, JSTL, Thymeleaf 등)
  • WebSocket
  • Remoting
  • Mail
  • Job 스케줄링
  • 동적 스크립트 언어 지원(Groovy, BeanShell 등)
  • 단순 예외 처리
반응형

1.2 스프링 프로젝트

  • J2EE Design and Development에서 시작됨
  • 스프링 커뮤니티 활성화
  • Spring IDE(Spring Tool Suite) 젝공
  • Spring Securiy System
  • Spring Boot (스타터 패키지를 이용한 손쉬운 환경 구성)
  • Spring Batch, Integration

 

1.3 스프링의 대안

  • JBoss Seam Framework
  • Google Guice
  • PicoContainer
  • JEE 7 Container

 

반응형

댓글