[스프링 핵심 원리 - 기본편]객체지향 설계와 스프링 - 스프링의 태동

Hyeonjun·2022년 8월 18일
0
post-thumbnail

이야기 - 자바 진영의 추운 겨울과 스프링의 탄생

옛날 옛적에…

  • 자바 표준 기술로 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
    • API 문서화
  • 스프링 배치
    • 배치 처리에 특화된 기술
  • 스프링 클라우드
    • 클라우드에 특화된 기술

Spring.io > Overview에서 스프링의 다양한 프로젝트들을 확인할 수 있다.

스프링 프레임워크

  • 핵심기술
    • 스프링 DI 컨테이너
    • AOP
    • 이벤트
    • 기타
  • 웹 기술
    • 스프링 MVC, 스프링 WebFlux
  • 데이터 접근 기술
    • 트랜잭션
    • JDBC
    • ORM 지원
    • XML 지원
  • 기술 통합
    • 캐시
    • 이메일
    • 원격접근
    • 스케줄링
  • 테스트
    • 스프링 기반 테스트 지원
  • 언어
    • 코틀린, 그루비
  • 최근에는 스프링 부트를 통해서 스프링 프레임워크의 기술들을 편리하게 사용

스프링 부트

  • 스프링을 편리하게 사용할 수 있도록 지원, 최근에는 기본으로 사용
  • 단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성
  • Tomcat같은 웹 서버를 내장해서 별도의 웹 서버를 설치하지 않아도 됨
    • 예전에는 직접 웹 서버도 띄워서 빌드 파일을 올려줬어야 했음.
  • 손쉬운 빌드 구성을 위한 starter 종속성 제공
    • 예전에는 라이브러리를 가져오는데 어려움이 있었음.
  • 스프링과 3rd party(외부) 라이브러리 자동 구성
    • 외부 라이브러리와 맞는지 확인하는 과정이 필수였음.
    • 스프링 부트에서는 알아서 테스트하고 버전도 지정해서 받을 수 있음.
    • 외부 라이브러리 버전에 대해 걱정하지 않아도 됨.
  • 메트릭, 상태 확인, 외부 구성 같은 프로덕션 준비 기능 제공
    • 운영 환경에서의 모니터링을 기본적으로 제공해줌.
  • 관례에 의한 간결한 설정
    • 웬만하면 Default 설정이 있음.
  • 스프링 여러 기능들을 편리하게 사용할 수 있도록 하는 기능임.

스프링 단어?

스프링이라는 단어는 문맥에 따라 다르게 사용된다.

  • 스프링 DI 컨테이너 기술
  • 스프링 프레임워크
  • 스프링 부트, 스프링 프레임워크 등을 모두 포함한 스프링 생태계

스프링의 핵심

  • 스프링은 자바 언어 기반의 프레임워크
  • 자바 언어의 가장 큰 특징 - 객체 지향 언어
  • 스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크
  • 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있도록 도와주는 프레임워크
profile
더 나은 성취

0개의 댓글