이야기 - 자바 진영의 추운 겨울과 스프링의 탄생
옛날 옛적에…
- 자바 표준 기술로 EJB(Enterprise Java Beans)가 있었다.
- 기술 영업을 할 때 EJB 표준으로 서버를 판매했었음.
- 트랜잭션 관리, 분산 기술 등 고급기술도 편하게 할 수 있었음.
- Entity Bean이라는 ORM 기술도 있었음.
- 한 대당 수천만원씩 하는 어마어마하게 비싼 가격
- 이론도 좋고 비용은 비싼데…
- EJB 인터페이스에 의존적으로 개발해야 했음.
- 순수하게 자바로 가자 → POJO(Plain Old Java Object) 가 나오기도.
- 당시 Entiry Bean은 기술 수준이 낮았음.
- 지옥불에 불타던 두 명의 개발자가 구원의 손길을 내미는데…
내가 해도 EJB보단 낫겠네
스프링 (로드 존슨)
- EJB는 쓰레기다!
- EJB 컨테이너 대체
- 단순함의 승리
- 현재 사실상 표준 기술
Hibernate (게빈 킹)
- EJB 엔티티빈 기술을 대체
- JPA(Java Persistence API) 새로운 표준 정의
결과적으로 JPA를 표준 인터페이스로, Hibernate가 구현체로 많이 사용됨.
스프링의 역사
전설의 시작
- 2002년 로드 존슨 책 출간
- EJB의 문제점 지적
- EJB 없이도 충분히 고품질의 확장 가능한 애플리케이션을 개발할 수 있음으로 보여주고, 30000라인 이상의 기반 기술을 예제 코드로 선보임
- BeanFactory, ApplicationContext, POJO, 제어의 역전, 의존관계 주입 등
- 그야말로 전설이다…
- 책 출간 직후 유겐 휠러와 얀 카로프가 오픈소스 프로젝트를 제안하게 됨.
- 스프링의 핵심 코드의 상당수는 유겐 휠러가 지금도 개발하고 있음.
- 스프링 이름은 전통적인 J2EE(EJB)라는 겨울을 넘어 새로운 시작(봄)이라는 뜻으로 지음
스프링 릴리즈
- 2003년 스프링 프레임워크 1.0 출시 - XML
- 2006년 스프링 프레임워크 2.0 출시 - XML 편의 기능 지원
- 2009년 스프링 프레임워크 3.0 출시 - 자바 코드로 설정
- 2013년 스프링 프레임워크 4.0 출시 - 자바8
- 2014년
스프링 부트
1.0 출시
- 스프링의 설정이 너무 어려움.
- 배포 세팅도 너무 어려웠음.
- 스프링도 다른 프레임워크처럼 쉽게 배포할 수 있도록 하자!
- 2017년 스프링 프레임워크 5.0, 스프링 부트 2.0 출시 - 리엑티브 프로그래밍 지원
- 2020년 9월 현재 스프링 프레임워크 5.2.x, 스프링 부트 2.3.x
옛날에는 스프링 설정이 절반이다… 라고 하기도.
스프링이란?
스프링 생태계
- 스프링 데이터
- 데이터 CRUD를 사용하기 쉽게.
- Spring Data JPA를 가장 많이 사용.
- 스프링 세션
- 스프링 시큐리티
- 스프링 Rest Docs
- 스프링 배치
- 스프링 클라우드
Spring.io > Overview에서 스프링의 다양한 프로젝트들을 확인할 수 있다.
스프링 프레임워크
- 핵심기술
- 웹 기술
- 데이터 접근 기술
- 기술 통합
- 테스트
- 언어
- 최근에는 스프링 부트를 통해서 스프링 프레임워크의 기술들을 편리하게 사용
스프링 부트
- 스프링을 편리하게 사용할 수 있도록 지원, 최근에는 기본으로 사용
- 단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성
- Tomcat같은 웹 서버를 내장해서 별도의 웹 서버를 설치하지 않아도 됨
- 예전에는 직접 웹 서버도 띄워서 빌드 파일을 올려줬어야 했음.
- 손쉬운 빌드 구성을 위한 starter 종속성 제공
- 예전에는 라이브러리를 가져오는데 어려움이 있었음.
- 스프링과 3rd party(외부) 라이브러리 자동 구성
- 외부 라이브러리와 맞는지 확인하는 과정이 필수였음.
- 스프링 부트에서는 알아서 테스트하고 버전도 지정해서 받을 수 있음.
- 외부 라이브러리 버전에 대해 걱정하지 않아도 됨.
- 메트릭, 상태 확인, 외부 구성 같은 프로덕션 준비 기능 제공
- 운영 환경에서의 모니터링을 기본적으로 제공해줌.
- 관례에 의한 간결한 설정
- 스프링 여러 기능들을 편리하게 사용할 수 있도록 하는 기능임.
스프링 단어?
스프링이라는 단어는 문맥에 따라 다르게 사용된다.
- 스프링 DI 컨테이너 기술
- 스프링 프레임워크
- 스프링 부트, 스프링 프레임워크 등을 모두 포함한 스프링 생태계
스프링의 핵심
- 스프링은 자바 언어 기반의 프레임워크
- 자바 언어의 가장 큰 특징 - 객체 지향 언어
- 스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크
- 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있도록 도와주는 프레임워크