[Spring] 스프링이란?

DEINGVELOP·2023년 4월 10일
0

💡 스프링 제대로 공부하는 방법

  • 단순히 스프링 기능을 배우고 사용하는 것은 어렵지 않다
  • 그러나 IoC, DI 등의 용어 및 SOLID 객체지향 설계 원칙도 이해해야 스프링의 진정한 핵심 가치를 알 수 있게 됨

📌 스프링과 객체지향 프로그래밍

  • 스프링 컨테이너가 왜 필요할까?

1. Spring의 탄생

Enterprise Java Beans(EJB)

: Java 진영의 표준 기술 중 최고봉

  • 당시에는 EJB가 보급도 잘 되고, 가장 잘 나갔었음
  • Container 기술, 설정에 의한 Transaction 관리, 분산 기술 등이 특징
    • Entity Bean(ORM 기술)도 있었음
  • 단, 매우 비쌌고, 매우 복잡하고 어렵다는 단점이 있었음
    • 나중에는 옛날 자바 오브젝트로 돌아가자(POJO, Plain Old Java Object)라는 말까지 나왔음

💡 ORM (Object Relational Mapping, 객체-관계-매핑)
: Java 객체를 쿼리를 사용하지 않고 DB에 편하게 CRUD할 수 있는 기술!


Spring

  • Rod Johnson이 제안
  • EJB 컨테이너 대체 기술
  • 단순함의 승리
  • 현재 사실상 표준 기술

Hibernate

  • Gavin King이 제안
  • EJB Entity Bean 기술 대체
  • JPA 표준에서, JPA (Java Persistence API)를 새로운 표준으로 정의

JPA와 구현체

  • JPA : 표준 인터페이스
  • Hibernate, EclipseLink ... : JPA 구현체들

2. Spring의 역사

탄생

| 2002년 : Rod Johnson이 책 출간

  • EJB의 문제점 지적
  • EJB 없이도 충분히 고품질의 확장 가능한 애플리케이션을 개발할 수 있음을 보여주고, 30,000라인 이상의 기반 기술을 예제 코드로 선보임 (지금의 스프링 핵심 개념과 기반 코드)
  • 들어있는 개념들
    • BeanFactory
    • ApplicationContext
    • POJO
    • 제어의 역전
    • 의존관계 주입

| 책 출간 직후 오픈소스로 개발

  • Juergen Hoeller (유겐 휠러), Yahn Caroff(얀 카로프)가 로드 존슨에게 오픈소스 프로젝트를 제안
  • Spring의 핵심 코드의 상당수는 유겐 휠러가 지금도 개발 중
  • Spring : 전통적인 J2EE(EJB)라는 겨울을 넘어, 새로운 시작이라는 뜻

Release

  • 2003 : Spring Framework 1.0 - XML
  • 2006 : Spring Framework 2.0 - XML 편의 기능 지원
  • 2009 : Spring Framework 3.0 - 자바 코드로 설정
  • 2013 : Spring Framework 4.0 - 자바 8
  • 2014 : Spring Boot 1.0
  • 2017 : Spring Framework 5.0, Spring Boot 2.0 - Reactive Programming 지원
  • 2023 현재 : Spring 6.1.x, Spring Boot 3.1.x

3. Spring이란?

Spring 생태계

  • Spring Framework : 이 모든 것들 중 핵심
  • Spring Boot : 아래의 모든 기술들을 사용하기 편리하도록 도와주는 것
  • Spring Data : DBMS에서 CRUD를 편리하게 할 수 있도록 도와주는 기술. 가장 많이 쓰는 건 Spring Data JPA
  • Spring Session : 세션 기술을 편리하게 사용하도록 도와줌
  • Spring Security : 보안과 관련된 것
  • Spring Rest Docs : API 문서화를 편리하게 해주는 것
  • Spring Batch : 데이터를 대량으로 처리하기 위해, 단위를 나눠 배치처리를 하는 데에 특화된 기술
  • Spring Cloud : 클라우드 기술에 특화된 기술

Spring Framework

  • 핵심 기술
    • Spring DI container
    • AOP
    • 이벤트
    • etc

  • 웹 기술
    • Spring MVC
    • Spring WebFlux

  • 데이터 접근 기술
    • 트랜잭션
    • JDBC
    • ORM 지원
    • XML 지원

  • 기술 통합
    • 캐시
    • 이메일
    • 원격 접근
    • 스케줄링

  • 테스트
    • 스프링 기반 테스트 지원

  • 언어
    • Kotlin
    • Groovy

Spring Boot

: 스프링을 편리하게 사용할 수 있도록 지원

  • 최근에는 기본으로 사용
  • 단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성
    • Tomcat 같은 웹 서버를 내장해서, 별도의 웹 서버를 설치하지 않아도 됨
    • 손쉬운 빌드 구성을 위한 starter 종속성 제공
    • 스프링과 3rd parth(외부) 라이브러리 자동 구성
    • 메트릭, 상태 확인, 외부 구성 같은 프로덕션 준비 기능 제공
  • 관례에 의한 간결한 설정

💡 Spring Boot는 Spring과 별개?
NO!!
Spring Boot는 Spring Framework를 꼭 사용하면서 사용이 편리하게 도와주는 기술임!


Spring이라는 단어

문맥에 따라 다르게 사용된다.

  • Spring DI Container 기술
  • Spring Framework
  • Spring Boot, Spring Framework 등을 모두 포함한 스프링 생태계

0개의 댓글