2000년대 초반의 상황
- EJB(Enterprise Java Beans) ==> 자바진영의 표준기술 거의 종합선물세트
- 당시에 보급이 잘되고, 기술영업이 잘되었음.
- 컨테이너 기술, 설정에 의한 트랜잭션 관리, 분산 처리 기술 등 고급기술에 대한 지원이 잘되었음.
- 당시에 entity bean(orm기술==> 쿼리를 쓰지않고 자바객체를 db에 넣는 기술)도 가지고 있었음.
- but 엄청 비쌌음. 한대의 서버를 구성하려면 수천만원이 들었음(지금은 spring, tomcat등으로 무료로 구성가능)
EJB지옥
- 엄청 어렵고, 복잡하고, 느림.(이론적으로는 최고 but, 개발자들에게는 엄청난 고통)
- interface를 모두 구현해야했고, EJB에 의존적으로 개발해야했음. 이로인해 코드도 지저분해지고 life cycle관리도 어려워짐.
- POJO라는 용어까지 탄생할 정도 였다.
- POJO( Plain Old Java Object ) ==> 옛날 자바로 돌아가자.
- 오래된 방식의 간단한 자바 오브젝트라는 말로서 Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 "무거운" 객체를 만들게 된 것에 반발해서 사용되게 된 용어
Rod Johnson(지금의 spring Framework를 만든사람)과 gavin king(Hibernate를 만든 사람) 두사람이 오픈소스를 만들기 시작.
스프링
EJB컨테이너 대체, 단순함의 승리, 현재 사실상 표준 기술
하이버네이트
EJB 엔티티빈 기술을 대체, JPA(Java Persistence API) 새로운 표준 정의
EJB 엔티티빈 --> 하이버네이트 --> JPA(자바표준)
하이버네이트 -->(정제) JPA
==> 실무개발자들이 사용하던 하이버네이트(실용성)가 정제되어 자바표준인 JPA가 탄생하며 안정감까지 더해짐.
스프링 역사
- 2002년 로드 존슨 책 출간
- EJB의 문제점 지적
- EJB 없이도 충분히 고품질의 확장 가능한 애플리케이션을 개발할 수 있음을 보여주고, 30,000라인 이상의 기반 기술을 예제 코드로 선보임
- 여기에 지금의 스프링 핵심 개념과 기반 코드가 들어가 있음.
- BeanFactory, ApplicationContext, POJO, 제어의 역전, 의존관계주입
- 책 출간 직후 Juergen Hoeller(유겐 휠러), Yann Caroff(얀 카로프)가 로드 존슨에게 오픈소스 프로젝트를 제안
- 스프링의 핵심 코드의 상당수는 유겐 휠러가 지금도 개발
- 스프링 이름은 전통적인 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 출시 - 리엑티브 프로그래밍 지원
스프링
- 필수
- 스프링 프레임워크
- 스프링 부트
- 선택
- 스프링 데이터
- 기본적인 데이터베이스의 CRUD를 도와주는 기술
- 스프링 JPA
- 스프링 세션
- 세션기능을 편리하게 사용하게 도와줌
- 스프링 시큐리티
- 보안 관련
- 스프링 Rest Docs
- API 문서를 편리하게 도와줌
- 스프링 배치
- 배치 처리(데이터 저장 관련)에 특화된 기술
- 스프링 클라우드
- 클라우드 기술
- 등등 굉장히 많은 기술들이 있다.
- 스프링 데이터
위 공식 문서를 참조하면 spring의 수많은 기술들을 확인할 수 있다.
핵심은 spring Framework이고 이 모든 기술들을 편리하게 사용할 수 있도록 도와주는 것이 Spring boot이다.
스프링 프레임워크
- 핵심 기술 : 스프링 DI 컨테이너, AOP, 이벤트 등
- 웹 기술: 스프링 MVC, 스프링 WebFlux
- 데이터 접근 기술: 트랜잭션, JDBC, ORM 지원, XML 지원
- 기술 통합: 캐시, 이메일, 원격접근, 스케줄링
- 테스트: 스프링 기반 테스트 지원
- 언어: Kotlin, Groovy 지원
- 최근에는 스프링 부트를 통해서 스프링 프레임워크의 기술들을 편리하게 사용
스프링 부트
- 스프링을 편리하게 사용할 수 있도록 지원, 최근에는 기본으로 사용
- 단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성
- Tomcat 같은 웹 서버를 내장해서 별도의 웹 서버를 설치하지 않아도 됨
- 손쉬운 빌드 구성을 위한 starter 종속성 제공
- 스프링과 3rd parth(외부) 라이브러리 자동 구성
- 외부 라이브러리 버전에 대해 고민하지 않아도 됨. 스프링이 알아서 테스트를 하고 알려줌.
- 메트릭, 상태 확인, 외부 구성 같은 프로덕션 준비 기능 제공
- 운영 환경에서 모니터링에 대한 것들을 기본적으로 제공해줌.
- 관례에 의한 간결한 설정
- 웬만한 것들은 default로 다 설정이 되어있고 메뉴얼로 다 제공이 됨, 필요한 것들만 custom으로 설정
기본적으로 스프링부트는 스프링 프레임워크와 별도 사용할 수 있는 것이 아니다.
스프링 단어?
- 스프링이라는 단어는 문맥에 따라 다르게 사용된다.
- 스프링 DI 컨테이너 기술
- 스프링 프레임워크
- 스프링 부트, 스프링 프레임워크 등을 모두 포함한 스프링 생태계
스프링은 왜 만들었는가?
- 이 기술을 왜 만들었는가?
- 이 기술의 핵심 컨셉은?
- 3만줄에서 시작한 코드의 핵심 컨셉에 열광하여 수많은 기술이 붙고, 증식하여 지금의 스프링 생태계를 이루게 됨.
- 즉, 개발자들이 "왜" 열광했을까? 핵심 컨셉이 무엇일까가 중요함
- 이를 이해하지 못하면 단순 api사용법만 아는 것임
스프링의 핵심 개념, 컨셉?
- 웹 애플리케이션 만들고, DB 접근 편리하게 해주는 기술?
- 전자정부 프레임워크?
- 웹 서버도 자동으로 띄워주고?
- 클라우드, 마이크로서비스?
스프링의 진짜 핵심
- 스프링은 자바 언어 기반의 프레임워크
- 자바 언어의 가장 큰 특징 --> 객체 지향 언어
- 스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크
- 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크
- 당시 EJB를 통한 개발은 EJB에 너무 의존적으로 개발을 해야했기에 코드가 지저분해지고 객체지향이 가진 장점을 모두 잃어버림.
그럼 좋은 객체 지향이란 무엇일까?? 이것이 우리가 스프링 생태계로 뛰어드는 출발점이다.
더보기
김영한님의 강의를 들으며 작성된 글입니다.
반응형
'Spring > Spring Core' 카테고리의 다른 글
회원 도메인 설계와 개발 (0) | 2021.03.02 |
---|---|
비지니스 요구사항과 설계 (0) | 2021.03.02 |
들어가며 (0) | 2021.03.02 |
객체 지향 설계와 스프링 (0) | 2021.03.01 |
좋은 객체 지향 프로그래밍이란? (0) | 2021.03.01 |