0. Spring의 탄생

Ted_Moon99·2024년 9월 19일
0

Spring

목록 보기
2/2
post-custom-banner

스프링의 핵심원리-기본편

인프런의 김영한 강사님의 강의를 듣고있는데 강의 내용이 아주 깔끔하고 잘 정리되어 있어 매우 추천한다. 원래는 강의를 듣고 바로바로 Velog에 정리를 할까 싶었지만 하루에 듣는 강의 수가 생각보다 많았고 강의 내용을 이해는 했지만 블로그로 정리할만큼 정리가 안 되어있었기 때문에 한 달 정도 지나서야 정리를 시작하는 것 같다.

다른 얘기는 이정도로 하고..

오늘은 Spring의 탄생 배경에 대해서 적어볼 예정이다. 옛날 옛적.. 내가 아마 태어났을 때 즈음..? 즉, 1990년대 후반 ~ 2000년대 초반의 이야기이다.

그 당시에는 Java를 사용한 개발자들은 EJB(Enterprise Java Beans)라는 기술을 사용하여 개발을 하였다고 한다.

EJB

EJB의 탄생

Java Beans : 자바 Instance를 재사용 가능하도록(즉, 컴포넌트화시킬 수 있도록) 코딩방침을 정의한 것

=> EJB : 엔터프라이즈급 어플리케이션 개발을 편하게 하기위한 스펙

개발을 할 때에는 많은 객체를 생성하고 접근하게 되는데 이러한 객체들을 관리하는 컨테이너를 만들고 필요할 때마다 컨테이너에서 객체를 받는 식으로 관리하면 효율적이다는 취지에서 탄생했다고 한다.

EJB의 문제점

배보다 배꼽이 더 컸다..

취지는 좋았으나 문제는 Service가 구현하는 실제 비즈니스 로직보다 EJB 컨테이너를 사용하기 위한 부수적인 코드(상속 or 구현 클래스)가 너무 많다는 점이 문제였다.

또 다른 문제로는 EJB 컨테이너를 사용하기 위한 설정 과정이 너무도 많고 복잡했다는 점, 그리고 객체 간의 의존성을 줄이기 위해 등장한 EJB 컨테이너를 사용하였으나 비즈니스 로직에 특정 기술(EJB)이 종속된다는 문제점이 있었다. 그리고 프로젝트의 크기가 커질수록 종속성이 강화되었다.

객체지향언어인 Java를 들고서 SOLID 원칙도 지킬 수 없는 코드를 짜며 고통받던 개발자들은 결국 POJO(Plain Old Java Object)를 지향하기 시작하였고 순수한 자바코드로만 개발하는 개발자들도 있었다.

Spring의 시작

EJB 지옥에서 고통을 받고있던 개발자 중 한 명인 Rod Johnson과 Christian Bauer(feat. Gavin King)가 각각 책을 쓰게 되는데 이 두 책을 정리하여 추후에 스프링과 하이버네이트가 된다.

Rod Johnson의 Spring

2002년 로드 존슨이 책을 출간하면서 EJB의 문제점을 지적하며, EJB 없이도 충분히 고품질의 확장 가능한 애플리케이션을 개발할 수 있음을 보여주고, 30,000줄 이상의 기반 기술을 예제 코드로 정리한다. 여기에 지금의 스프링 핵심 개념과 기반 코드가 들어가 있다.

로드 존슨은 이 책에서 BeanFactory, ApplicationContext, POJO, 제어의 역전, 의존관계 주입을 다루게 된다.

스프링 컨테이너는 ApplicationContextBeanFactory을 의미하는데 대부분은 ApplicatioinContext를 지칭하는 용어이다

위의 그림은 EJB의 구조이다. 이 중에서 Spring은 EJB 컨테이너를 대체하면서 개발자들이 EJB의 지옥에서 벗어날 수 있게 된다. Spring은 단순함의 승리를 이끌어냈고 현재 사실상 표준 기술로 자리잡고 있다.

책 출간 직후 Juergen Hoeller, Yann Caroff가 로드 존슨에게 오픈소스 프로젝트를 제안하였고 스프링의 핵심코드의 상당수는 유겐 휠러가 지금도 개발중이라고 한다.

스프링이라는 이름은 전통적인 J2EE(EJB)라는 겨울을 넘어 새로운 시작이라는 뜻으로 지었다고 한다.

Christian Bauer(feat. Gavin King)의 Hibernate

바우어와 가빈 킹이 쓴 하이버네이트는 EJB Bean 기술을 대체하면서 JPA(Java Persistence API) 새로운 표준을 정의하게 된다.

여기서 JPA는 표준 기술로서 인터페이스(Interface)로만 구성되어 있기 때문에, 구현체는 상속을 받아서 따로 만들어줘야 한다

Spring 생태계

  1. 스프링 프레임워크
  2. 스프링 부트 : 스프링 프레임워크를 굉장히 편리하게 사용하도록 도와주는 기술
  3. 스프링 데이터 : DB의 기본적인 CRUD는 비슷하기 때문에 이런 것들을 편리하게 사용하도록 만들어주는 기술
  4. 스프링 세션 : 세션 기능을 편리하게 사용하도록 도와주는 기술
  5. 스프링 시큐리티 : 보안 관련 기술
  6. 스프링 Rest Docs : API 문서와 테스트를 편하게 엮어서 문서화를 편하게 해주는 기술
  7. 스프링 배치 : 실무에서 필요한 Batch 처리에 특화된 기술
  8. 스프링 클라우드 : 클라우드 기술에 특화된 기술

Spring Framework

  • 핵심 기술 : 스프링 DI 컨테이너, AOP, 이벤트, 기타
  • 웹 기술 : 스프링 MVC, 스프링 WebFlux
  • 데이터 접근 기술 : 트랜잭션, JDBC, ORM 지원, XML 지원
  • 기술 통합 : 캐시, 이메일, 원격접근, 스케줄링
  • 테스트 : 스프링 기반 테스트 지원
  • 언어 Kotlin, Groovy

Spring Boot

다음에 계속..

profile
서버 및 모바일 앱 개발자
post-custom-banner

0개의 댓글