인프런
의 김영한 강사님의 강의를 듣고있는데 강의 내용이 아주 깔끔하고 잘 정리되어 있어 매우 추천한다. 원래는 강의를 듣고 바로바로 Velog
에 정리를 할까 싶었지만 하루에 듣는 강의 수가 생각보다 많았고 강의 내용을 이해는 했지만 블로그로 정리할만큼 정리가 안 되어있었기 때문에 한 달 정도 지나서야 정리를 시작하는 것 같다.
다른 얘기는 이정도로 하고..
오늘은 Spring의 탄생 배경에 대해서 적어볼 예정이다. 옛날 옛적.. 내가 아마 태어났을 때 즈음..? 즉, 1990년대 후반 ~ 2000년대 초반의 이야기이다.
그 당시에는 Java를 사용한 개발자들은 EJB(Enterprise Java Beans)라는 기술을 사용하여 개발을 하였다고 한다.
Java Beans : 자바 Instance를
재사용
가능하도록(즉, 컴포넌트화시킬 수 있도록) 코딩방침을 정의한 것
=> EJB : 엔터프라이즈급 어플리케이션 개발을 편하게 하기위한 스펙
개발을 할 때에는 많은 객체를 생성하고 접근하게 되는데 이러한 객체들을 관리하는 컨테이너
를 만들고 필요할 때마다 컨테이너에서 객체를 받는 식으로 관리하면 효율적이다는 취지에서 탄생했다고 한다.
배보다 배꼽이 더 컸다..
취지는 좋았으나 문제는 Service가 구현하는 실제 비즈니스 로직보다 EJB 컨테이너를 사용하기 위한 부수적인 코드(상속 or 구현 클래스)가 너무 많다는 점이 문제였다.
또 다른 문제로는 EJB 컨테이너를 사용하기 위한 설정 과정이 너무도 많고 복잡했다는 점, 그리고 객체 간의 의존성을 줄이기 위해 등장한 EJB 컨테이너를 사용하였으나 비즈니스 로직에 특정 기술(EJB)이 종속된다는 문제점이 있었다. 그리고 프로젝트의 크기가 커질수록 종속성이 강화되었다.
객체지향언어인 Java를 들고서 SOLID 원칙도 지킬 수 없는 코드를 짜며 고통받던 개발자들은 결국 POJO(Plain Old Java Object)를 지향하기 시작하였고 순수한 자바코드로만 개발하는 개발자들도 있었다.
EJB 지옥에서 고통을 받고있던 개발자 중 한 명인 Rod Johnson과 Christian Bauer(feat. Gavin King)가 각각 책을 쓰게 되는데 이 두 책을 정리하여 추후에 스프링과 하이버네이트가 된다.
2002년 로드 존슨이 책을 출간하면서 EJB의 문제점을 지적하며, EJB 없이도 충분히 고품질의 확장 가능한 애플리케이션을 개발할 수 있음을 보여주고, 30,000줄 이상의 기반 기술을 예제 코드로 정리한다. 여기에 지금의 스프링 핵심 개념과 기반 코드가 들어가 있다.
로드 존슨은 이 책에서 BeanFactory
, ApplicationContext
, POJO
, 제어의 역전
, 의존관계 주입
을 다루게 된다.
스프링 컨테이너는
ApplicationContext
와BeanFactory
을 의미하는데 대부분은ApplicatioinContext
를 지칭하는 용어이다
위의 그림은 EJB의 구조이다. 이 중에서 Spring은 EJB 컨테이너를 대체하면서 개발자들이 EJB의 지옥에서 벗어날 수 있게 된다. Spring은 단순함의 승리를 이끌어냈고 현재 사실상 표준 기술로 자리잡고 있다.
책 출간 직후 Juergen Hoeller, Yann Caroff가 로드 존슨에게 오픈소스 프로젝트를 제안하였고 스프링의 핵심코드의 상당수는 유겐 휠러가 지금도 개발중이라고 한다.
스프링이라는 이름은 전통적인 J2EE(EJB)라는 겨울을 넘어 새로운 시작이라는 뜻으로 지었다고 한다.
바우어와 가빈 킹이 쓴 하이버네이트는 EJB Bean 기술을 대체하면서 JPA(Java Persistence API) 새로운 표준을 정의하게 된다.
여기서 JPA는 표준 기술로서 인터페이스(Interface)로만 구성되어 있기 때문에, 구현체는 상속을 받아서 따로 만들어줘야 한다
스프링 프레임워크
를 굉장히 편리하게 사용하도록 도와주는 기술다음에 계속..