Spring/핵심 원리

[Spring] 객체지향 설계와 스프링(1) - 스프링 탄생 배경

lumana 2024. 7. 11. 13:49

스프링의 역사

  • 과거에 EJB라는 기술이 있었는데, 이 EJB를 대체하는 JPA라는 새로운 표준이 등장했다.
  • 로드 존슨이라는 사람이 EJB의 문제점 지적하면서
  • EJB 없이도 충분히 고품질의 확장 가능한 애플리케이션을 개발할 수 있음을 보여주고, 30,000라인 이상의 기반 기술을 예제 코드로 선보임
  • 여기에 지금의 스프링 핵심 개념과 기반 코드가 들어가 있음
  • BeanFactory, ApplicationContext, POJO, 제어의 역전, 의존관계 주입
  • 책 출간 직후 Juergen Hoeller(유겐 휠러), Yann Caroff(얀 카로프)가 로드 존슨에게 오픈소스 프로젝트를 제안
  • 스프링의 핵심 코드의 상당수는 유겐 휠러가 지금도 개발
  • 스프링 이름은 전통적인 J2EE(EJB)라는 겨울을 넘어 새로운 시작이라는 뜻으로 지음

스프링이란?

스프링 생태계

스프링 프레임 워크

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

스프링 부트

과거에 application 빌드부터 톰켓 서버 설치, 서버 띄우는 과거에 어려움을 겪었지만 스프링 부트는 매우 간편하게 만들어줌

  • 스프링을 편리하게 사용할 수 있도록 지원, 최근에는 기본으로 사용
  • 단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성
  • Tomcat 같은 웹 서버를 내장해서 별도의 웹 서버를 설치하지 않아도 됨
  • 손쉬운 빌드 구성을 위한 starter 종속성 제공
    • 라이브러리를 쓸 때 원래 여러개를 묶어서 import 해야 했었는데, 하나만 import하면 starter가 나머지 라이브러리까지 같이 import하도록 해뒀다.
  • 스프링과 3rd party(외부) 라이브러리 자동 구성
    • 스프링 부트 5.1에서는 외부라이브러리 어떤 버전을 써야하는지 알아서 챙겨준다. 외부라이브러리 버전에 대해서 고민하지 않아도 됨
  • 메트릭, 상태 확인, 외부 구성 같은 프로덕션 준비 기능 제공
    • 운영환경 모니터링 등을 기본적으로 어느정도 제공해준다
  • 관례에 의한 간결한 설정
    • 웬만하면 디폴트 설정이 있고 메뉴얼이 존재한다. 필요한 부분만 조금 변경해서 사용하면 된다

스프링 단어?

  • 스프링이라는 단어는 문맥에 따라 다르게 사용된다.
    • 스프링 DI 컨테이너 기술(스프링 빈 관리 등을 포함)
    • 스프링 프레임워크
    • 스프링 부트, 스프링 프레임워크 등을 모두 포함한 스프링 생태계

스프링을 왜 만들었는가?

스프링의 진짜 핵심

  • 스프링은 자바 언어 기반의 프레임워크
  • 자바 언어의 가장 큰 특징 - 객체 지향 언어
  • 스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크
    • EJB를 사용하면 EJB를 상속받으면서 의존적으로 개발하다 보니 객체지향의 장점을 다 잃어버렸다. EJB 스타일로 개발할 수 밖에 없었다.
  • 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크

참조) 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강좌 (인프런 김영한)