때는 2000년대 초반, 스프링(Spring)이 등장하기 전에는 자바 기반의 기업 애플리케이션을 개발할 때 주로 EJB(Enterprise JavaBeans)가 사용되었다. EJB는 자바 기술의 일부로서, 기업 환경에서 확장 가능하고 분산형 애플리케이션을 개발하기 위한 목적으로 만들어졌다.
EJB의 탄생
EJB 이전의 자바 애플레키에션 개발에서는 주로 서블릿(Servlet)과 자바 서버 페이지(JSP)를 활용하여 웹 애플리케이션을 구축했다. 이러한 기술들은 간단하고 빠르게 웹 페이지를 생성하는 데에는 용이했지만, 분산 환경에서의 기능적인 요구사항을 다루기 어려웠다. 서블릿과 JSP는 주로 프레젠테이션 레이어에 중점을 두고 있었기 때문에, 엔터프라이즈 수준의 기능들을 갖춘 복잡한 비즈니스 로직을 다루기엔 한계가 있었다.
EJB는 이러한 한계를 극복하기 위해 분산 컴포넌트 아키텍처를 제공하여 자바 기반의 엔터프라이즈 애플리케이션을 효과적으로 개발할 수 있게 했다. EJB는 분산된 환경에서 트랜잭션 관리, 보안, 분산 객체 호출 등의 기능을 내장하고 있어서, 개발자들은 더 복잡하고 안정적인 시스템을 구축할 수 있었다. 또한, EJB의 컴포넌트 지향 아키텍처는 재사용성을 높여 개발 생산성을 향상했다. 이로써 EJB는 초기에는 기업 애플리케이션 개발에 적합한 설루션으로 주목받았다.
EJB의 단점
그러나 EJB에게도 단점은 있었으니, 그것이 바로 사용이 복잡하고 무겁다는 것이었다. EJB 2.x 에서는 코드가 복잡하며, 선언적 트랜잭션 관리에서 제약이 있었고, 분산 컴포넌트 간의 통신 비용이 높았다. 또한, 특정 애플리케이션 서버에 종속되어 이식성이 낮았으며, 테스트도 어려웠다.
(개인적인 생각으론 선배 개발자님들이 당시 EJB를 사용했을 때를 상상해 보면 아마 지옥이었을 것 같다.)
두 명의 개발자
당시 개발자들은 EJB의 단점으로 인해 불만이 많았었고, 그중 EJB보다 더 나은 오픈소스를 만들겠다는 2명의 개발자가 있었다. 한 명은 하이버네이트를 만든 개빈킹, 그리고 지금의 스프링 프레임을 만든 로드 존슨이다.
특히, 로드 존슨은 EJB를 사용하면서 느꼈던 불편했던 점들에 대해 EJB를 비판하는 책까지 집필했다고 한다. 그리고 그 책에 EJB보다 훨씬 더 단순하면서 더 좋은 방법으로 개발할 수 있다는 내용을 담고 실제로 코드로도 이를 구현하는데 이 코드가 미래의 스프링이 된다.
마찬가지로 개빈킹도 EJB에 많이 불편함을 느꼈으며, 자신이 오픈소스를 직접 만들어야겠다는 생각으로 매일 저녁마다 퇴근하고 와서 만든 것이 지금의 하이버네이트(Hibernate)가 된다. 그래서 EJB에서 제공하는 Entity Bean이라는 기술을 사람들이 점차 쓰지 않기 시작했고 ORM 기술을 쓰면 대부분의 개발자들이 하이버네이트를 쓰기 시작하였다. 자연스럽게 EJB는 사람들에게 점차 잊히기 시작했고 이에 따라, 자바의 표준을 논의하는 곳에서 EJB를 버리고 하이버네이트를 만든 개빈킹을 섭외해 하이버네이트를 거의 복사하다시피 해서 만든 자바 표준인 JPA를 만들게 되었다.
하지만 JPA는 인터페이스만 있고 구현체는 따로 만들어야 한다. 아래의 그림을 보면서 좀 더 자세히 살펴보자.
위의 그림에서 확인할 수 있듯이 JPA라는 표준 인터페이스를 만들고 그 구현체로 Hibernate, Eclipse Link와 같은 기술들이 있다. 그래서 결과적으로 현재 자바 분야에서 ORM 시장은 JAP가 장악하고 있다고 생각하면 된다. 그리고 구현체로는 80% 이상 Hibernate가 장악하고 있다.
스프링의 역사
스프링의 시작은 2002년, 로드 존슨이라는 개발자가 EJB의 문제점에 대해 지적한 내용을 담고 있는 책(J2EE Design and Development)을 출간하면서 시작된다. 로드 존슨은 EJB의 문제점들에 대해 지적을 하면서 EJB가 없어도 충분히 고품질의 확장 가능한 애플리케이션을 개발할 수 있다는 것을 약 3만 라인정도의 예제 코드로 보여줬다. 현재 스프링의 핵심 개념과 기반 코드가 저 3만 라인의 예제 코드 안에 대부분 들어있다.
스프링을 사용해 본 사용자라면 한 번쯤 들어봤을 법한 빈 팩토리, 애플리케이션 콘텍스트, 포조(POJO), 제어의 역저의 의존성의 주입과 같은 용어들을 들어보았을 것이다. 이 모든 개념들이 3만 라인의 예제 코드에 전부 들어있었다. 그리고 책이 출간되자 유겐 휠러, 얀 카로프라는 개발자가 로드존슨에게 오픈소스 프로젝트를 같이 하자고 제안하였다(지금도 스프링의 핵심 코드는 유겐 휠러가 대부분을 개발하고 있다.).
TMI지만 스프링이라는 이름은 전통적인 J2EE(EJB)라는 겨울울 넘어 새로운 시작이라는 뜻으로 지었다고 한다.