💡 스프링 제대로 공부하는 방법
- 단순히 스프링 기능을 배우고 사용하는 것은 어렵지 않다
- 그러나 IoC, DI 등의 용어 및 SOLID 객체지향 설계 원칙도 이해해야 스프링의 진정한 핵심 가치를 알 수 있게 됨
📌 스프링과 객체지향 프로그래밍
1. Spring의 탄생
Enterprise Java Beans(EJB)
: Java 진영의 표준 기술 중 최고봉
- 당시에는 EJB가 보급도 잘 되고, 가장 잘 나갔었음
- Container 기술, 설정에 의한 Transaction 관리, 분산 기술 등이 특징
- 단, 매우 비쌌고, 매우 복잡하고 어렵다는 단점이 있었음
- 나중에는 옛날 자바 오브젝트로 돌아가자(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
- 데이터 접근 기술
- 기술 통합
- 테스트
- 언어
Spring Boot
: 스프링을 편리하게 사용할 수 있도록 지원
- 최근에는 기본으로 사용
- 단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성
- Tomcat 같은 웹 서버를 내장해서, 별도의 웹 서버를 설치하지 않아도 됨
- 손쉬운 빌드 구성을 위한 starter 종속성 제공
- 스프링과 3rd parth(외부) 라이브러리 자동 구성
- 메트릭, 상태 확인, 외부 구성 같은 프로덕션 준비 기능 제공
- 관례에 의한 간결한 설정
💡 Spring Boot는 Spring과 별개?
NO!!
Spring Boot는 Spring Framework를 꼭 사용하면서 사용이 편리하게 도와주는 기술임!
Spring이라는 단어
문맥에 따라 다르게 사용된다.
- Spring DI Container 기술
- Spring Framework
- Spring Boot, Spring Framework 등을 모두 포함한 스프링 생태계