본문 바로가기

Spring Introduction/스프링 핵심 원리 - 기본

01. 객체 지향 설계와 스프링 - (1) 자바 진영의 추운 겨울과 스프링의 탄생 (이야기)

💡 본 게시글은 김영한님의 인프런(Inflearn) 강의 스프링 핵심 원리 - 기본편에 대해 공부하고, 정리한 내용입니다.

 


1) 자바 생태계의 한겨울 2000년대 초기

 자바 표준 모델로서의 EJB(Enterprise Java Bean)가 자바 개발 세계를 통치하던 시절이었습니다. 이 시대의 자바 개발자들은 복잡하고 어려운 EJB로 인해 수많은 난관에 부딪혔습니다. EJB가 자바 생태계를 독점하는 동안, 개발자들은 끊임없이 이어지는 야근을 감당해야 했고, 그들에게 허락된 위안은 커피 한 잔뿐이었습니다. 이렇게 자바 생태계는 EJB라는 거대한 독재자가 남긴 그림자 속에서 추운 겨울을 견디어 나가고 있었습니다.

 

 

 EJB(Enterprise Java Bean)스프링, JPA 등 다양한 기능들을 모두 포함한 '자바 종합 선물 세트'라고 볼 수 있습니다.

이는 자바 표준 기술이었기에 널리 퍼질 수 있었고, 인스턴스 풀링, 설정에 의한 트랜잭션 처리 등 고급 기술들을 지원하여 금융권 등에서 많이 사용되었습니다. 그러나 이 프레임워크는 복잡하고 난해했을 뿐만 아니라, 무겁고 느린 단점 또한 가지고 있었습니다. 이로 인해 시간이 흐르면서 많은 개발자들이 EJB를 멀리하기 시작했습니다.

 

 2000년대 초반, 각종 자바 컨퍼런스에서 자주 논의된 주제 중 하나는 "왜 자바 엔터프라이즈 프로젝트는 실패하는가?"였습니다. 이에 대한 여러 원인이 제시되었지만, 가장 대표적인 원인은 "엔터프라이즈 시스템 개발이 너무 복잡해져서"였습니다. 이러한 복잡함은 비즈니스 자체의 복잡함과 기술적 복잡함이 결합된 결과였습니다. 비즈니스 자체의 복잡함은 구현해야 할 로직이므로 제거 대상이 아니었으며, 기술적 복잡함을 비즈니스 로직으로부터 분리하는 것이 필요했습니다.


2) 봄이 찾아오다

(1) POJO의 등장

 자바 생태계에 변화의 바람이 불기 시작한 것은 2000년 9월로, 이는 마틴 파울러(Martin Fowler)가 그의 동료들과 함께 컨퍼런스를 준비하면서 탄생한 POJO(Plain Old Java Object)라는 개념 덕분이었습니다. 이 용어는 '순수하고 오래된 자바 오브젝트'를 추구한다는 의미를 내포하고 있었는데, 이는 당시 자바 생태계를 지배하던 EJB에 대한 반항의 메시지를 담고 있었습니다. 이 메시지는 자바가 특정 프레임워크에 의존하는 패턴을 극복하고, 순수한 본래 형태로 돌아가야 한다는 개혁적인 주장이었습니다. 이렇게 자바의 표준 모델인 EJB의 강력한 영향 아래서도, POJO는 서서히 개발자들의 공감을 이끌어내며 확산되기 시작했습니다.

1. POJO

- 특정 환경이나 기술에 종속적이지 않은 자바 객체

- 테스트 용이, 객체지향 설계를 자유롭게 적용 가능.

 

2. PSA 

- 환경과 세부 기술의 변경과 관계 없이 일관된 방식으로 기술에 접근 할 수 있게 해주는 설계 원칙.

- 기술적인 복잡합은 추상화를 통해 분리. 

 

3. loC/DI

- 유연하게 확장 가능한 객체들을 만들어 두고 객체 간의 의존관계는 외부에서 다이나믹하게 설정

 

4. AOP

- 관심사의 분리를 통해서 소프트웨어의 모듈성 향상.

- 공통 모듈을 여러 코드에 쉽게 적용 가능.

 

 그 결과, 자바 생태계에 새로운 봄을 알리는 두 가지 변화가 일어났는데, 그것은 바로 하이버네이트의 등장과 로드 존슨의 코드, 즉 후에 스프링이라는 이름으로 알려질 프레임워크의 탄생이었습니다.

 

(1) 하이버네이트 → JPA의 발전

 당시 레드햇에서 프로그래밍 모델, 프레임워크, 플랫폼 구축 등을 이끌고 있던 게빈 킹(Gavin King)은 EJB에서 제공하는 Entity Bean에 많은 문제점이 있다고 판단했습니다. 이에 그는 하이버네이트(Hibernate)라는 새로운 기술을 개발하게 되었고, 이는 EJB의 Entity Bean을 대체할 수 있는 기술로 자리매김하게 되었습니다. 당시 EJB Entity Bean의 문제점에 고민하던 많은 개발자들이 하이버네이트를 받아들이게 되면서, 그 기술은 점차 자바 표준의 일부가 되어 JPA(Java Persistence API)라는 기능으로 발전하게 되었습니다.

 

(2) 스프링 프레임워크의 탄생

 한편, 2002년에 로드 존슨(Rod Johnson)"J2EE Design and Development"라는 책을 통해 EJB의 문제점을 지적하며, 순수한 자바만을 사용해도 우수한 객체지향 애플리케이션을 개발할 수 있다고 주장했습니다. 이를 증명하기 위해 약 3만 줄에 달하는 코드를 선보였고, 이 코드는 후에 스프링의 핵심 기능을 형성하게 되었습니다. 이 책을 읽은 개발자 유겐 휠러(Uergen Hoeller)와 얀 카로프(Yann Caroff)가 로드 존슨에게 이 코드를 기반으로 한 오픈 소스 프로젝트를 제안하였고, 이로써 2004년에 스프링 프레임워크가 탄생하게 되었습니다. 스프링이라는 이름은 EJB에 종속되던 겨울이 끝나고 봄이 왔다는 의미에서 붙여진 것입니다. 이렇게 스프링 프레임워크의 탄생은 엔터프라이즈 시스템 개발의 복잡함을 해결하는 새로운 방향을 제시하게 되었습니다.

(3) 스프링의 역사 릴리즈

  • 2003년 : 스프링 프레임워크 1.0 공개
  • 2006년 : 스프링 프레임워크 2.0 공개 - XML 편의 기능을 지원
  • 2009년 : 스프링 프레임워크 3.0 공개 - 자바 코드를 통한 설정 지원
  • 2013년 : 스프링 4.0 - Java8
  • 2014년 : 스프링 부트 1.0 공개
  • 2017년 : 스프링 프레임워크 5.0, 스프링 부트 2.0 공개-리엑티브 프로그래밍 지원
  • 2020년 : 스프링 프레임워크 5.2.x, 스프링 부트 2.3.x 공개