스프링이 왜 탄생했는지 시대적 배경에 대한 설명이기에 편하게 지나가도 되는 파트.

스프링 이전 배경

2000 년대 초반에는 자바의 표준 기술 중 최고로 EJB (Enterprise Java Beans) 가 있었다. 지금으로 따지면 spring 과 jpa 를 합쳐놓은 종합 선물 세트와 같은 개념이었고, 어찌 됐든 자바 표준 기술 중 최고이기에 금융권이나 아키텍쳐 같은 부분에서 많이 사용되고 있었다.

당시 컨테이너 기술이나 설정에 의한 Transaction 관리, 계층 서버 등의 분산 기술이 지원이 잘 되어있었다. 이론적인 부분이 좋았고, JPA는 ORM 기술로 쿼리 없이 자바 객체를 DB에 편하게 저장 및 추출 가능한 기술인데, EJB는 당시 Entity Bean 이라는 ORM 기술도 가지고 있었다.

다만 당시에는 제대로 구상하려면 비용이 심하게 많이 들었다.

하지만 문제가 있었다. EJB 는 어렵고 복잡하고 느렸다. EJB 가 제공하는 인터페이스를 다 구현 후 EJB에 의존적으로 개발해야 하기에 코드도 지저분하고 라이프 사이클 파악이 어려웠다. 또한 분산 기술이라 네트워크 통신도 필요해 컨테이너 띄우는 것에도 문제가 많았다.

이러한 문제로 인해 순수하게 옛날 자바로 들어가자는 의미인 POJO (Play Of Java Object) 라는 용어도 탄생했다. 그 중 특히 당시에 ORM 표준이라 할 수 있는 EJB 가 제공하는 Entity Bean 은 기술 수준 자체가 낮았다.

하이버네이트와 스프링 시초

그렇게 해서 탄생한 오픈소스가 스프링의 시초와 하이버네이트이다. 자바 표준 논의 단체에서 하이버네이트를 유사하게 차용해 자바 표준인 JPA 를 만든다. JPA 와 같은 표준 기술은 구현체만 있고 따로 만들어야 한다.

지금은 JPA 라는 표준 인터페이스가 있고 구현체로 하이버네이트. EclipseLink 나 다른 Vendor 들이 만든 기술이 있다. 대부분 JPA 표준 하이버네이트를 사용한다. 지금 자바 진영의 ORM 은 거의 JPA가, 구현체는 80% 이상이 하이버네이트가 차지하고 있다. 다만 오픈 소스의 단점으로 용어 등이 특화되고 정제되지 않는 것이 많은데 하이버네이트를 가지고 JPA 라는 표준을 만들어 냈기에 실제 개발자가 사용하는 기술에 정제가 되었다. 실용성과 안정성이 합쳐져 JPA가 나오게 된 것.

스프링의 역사

지금 시대에 자바 진영의 기술을 쓸 때 가장 중요한 건 스프링과 JPA 둘다 이다.

로드 존슨 책 출간