Spring의 탄생 배경

Jerry·2025년 7월 26일

Spring의 탄생 배경

  • Rod Johnson이 2002년 저서 Expert One‑on‑One J2EE Design and Development를 저술하면서 Spring의 초기 코드를 공개했고, 이후 컨설턴트 경력을 통해 J2EE(당시 Java EE)의 복잡성과 XML/디플로이먼트 번거로움을 줄이기 위해 Spring을 개발하게 되었습니다.
  • 2003년 2월 소스포지에 프로젝트가 등록되었고, 2004년 3월 정식 버전 1.0이 출시되었습니다.
  • EJB 기반 J2EE는 무겁고, 개발자가 로컬 개발 환경에서 실행하거나 디버깅하기 어려웠으며, XML 설정과 디플로이 번거로움이 많았습니다.
  • Spring은 POJO 기반, IoC/DI, AOP, 테스트 친화적 구조를 도입함으로써 경량화되고 편의성 높은 개발 경험을 제공하며 빠르게 인기를 얻었습니다.

EJB의 한계

무거운 컨테이너와 개발 생산성 저하

  • EJB 서버(예: WebLogic, WebSphere 등)는 스타트업이 느리고 설정이 복잡했습니다. 개발자들이 로컬에서 쉽게 실행하고 테스트할 수 없었고, 공유 서버에 배포해야 하는 번거로움이 있었습니다.

지나치게 복잡하고 보일러플레이트가 많음

  • 초기 EJB는 인터페이스 정의, 홈 객체, 배포 설명자(XML), RMI 등 복잡한 구조를 요구했습니다. 전형적인 EJB 기능 구현에 많은 코드와 설정이 필요했습니다.

성능 문제

  • EJB 2.x 이전 버전의 Entity Bean은 각 엔티티마다 RMI 스텁과 연결이 필요했고, 대량의 Entity를 다룰 때 포트 및 연결 제한 문제가 발생했습니다.
  • 원격 호출이 기본이었기 때문에, 실제 대부분의 비즈니스 로직이 비분산 구조임에도 불필요한 분산 호출과 성능 저하가 있었습니다. 이후 EJB 2.0에서 로컬 인터페이스가 추가되었습니다.

유연성과 확장성 부족

  • EJB 3.0부터는 POJO 기반 DI와 어노테이션이 도입되었으나, 현재까지도 표준(EJB 명세)에 묶여 있는 제약이 존재하였고, Spring만큼 유연한 DI 구성이나 AOP 기능, POJO 간 자유로운 DI를 제공하진 못했습니다.

커뮤니티와 오픈소스 생태계 부족

  • Spring은 오픈소스 기반 프레임워크로, 다양한 확장 프로젝트(Spring Boot, Spring Data, Spring Security 등)와 함께 성장했습니다. 반면 EJB는 표준 중심이었고, 커뮤니티 확장과 생태계 발전에서는 상대적으로 뒤처졌습니다

비교 요약

항목EJB (초기 Java EE)Spring
실행 환경무거운 서버 필요, 로컬 실행 불편경량 컨테이너, 로컬에서 쉽게 실행 가능
설정과 코드 복잡도인터페이스·홈 객체·XML 등 설정이 복잡POJO 기반, 어노테이션 중심, XML 최소화
성능 및 오버헤드원격 호출 중심, Entity Bean 문제 존재로컬 호출 중심, Hibernate/JPA 중심 경량화 설계
유연성과 확장성표준 중심, DI/AOP 기능 제한유연한 DI/AOP, 다양한 커스터마이징 및 확장 에코시스템
커뮤니티벤더 중심, 제한된 생태계오픈소스 중심, 활발한 확장 생태계 (Boot, Data 등)

Spring 탄생 맥락: EJB 한계를 해결하기 위해

  • EJB가 제공하던 트랜잭션, 보안, 클러스터링 등 기능은 그대로 유지하면서도, 개발 생산성, 테스트 용이성, 경량 실행 환경을 제공하는 대안이 필요했습니다.
  • Spring은 이러한 요구에 부응한 경량 IoC 컨테이너와 AOP 프레임워크로 탄생했으며, 결국 실질적인 생산성과 유연성 쪽에서 승산이 있었습니다.
  • 이후 EJB 3.0부터도 어노테이션 기반 POJO 중심 설계로 진화했지만, Spring이 먼저 제시한 개발 모델과 커뮤니티 영향력은 이미 시장에서 강력한 힘을 갖게 되었습니다.

Reference

profile
Backend engineer

0개의 댓글