개발 일기

[Spring Boot] Spring의 등장 배경 본문

Back-End/Spring

[Spring Boot] Spring의 등장 배경

개발 일기장 주인 2024. 3. 7. 00:47

내가 이제부터 백엔드 개발에 사용하고자 하는 Spring 프레임 워크가 어떻게 탄생하게 됐는지부터 알아봤다.

Spring 공식 문서를 참고했다.

Spring이 등장하기 이전에는?

Spring이 등장하기 이전 2000년대 초반 등장한 EJB (Enterprise Java Beans)가 있었다. EJB는 자바 표준 기술으로 지금으로 따지면 Spring과 JPA등을 모두 합쳐 놓은 종합 선물 세트 같은 것이였다고 한다.

컨테이너, 트랜잭션, 분산 처리 지원 그리고 보안 등 고급 기술들이 편하게 지원됐으며 또한 `Entity Bean`이라는 ORM 기술도 보유하고 있었다. 덕분에 개발자는 비즈니스 로직에만 집중할 수 있게 된다.

 

위와같이  이론적인 부분은 굉장히 좋았는데 왜 Spring이 등장하게 됐을까?

  1. 복잡한 인터페이스와 클래스 사용
    : EJB를 사용하려면 EJB가 정의한 특정 인터페이스와 클래스를 상속하고 구현해야 했다. 즉, EJB 인터페이스 및 클래스에 종속적이며 의존적이였으며 이로 인해 자바장점인 객체 지향적 특징을 충분히 활용하기 어려웠다.
  2. 비즈니스 로직의 비효율적 관리 그리고 무거움(느린 속도)
    : 개발자는 비즈니스 로직을 구현하는 데 초점을 맞출 수 있어야 하지만, EJB를 사용할 때는 EJB의 복잡한 생명 주기와 콜백 메서드들을 관리하는 데 많은 노력을 쏟아야 했다. 또한 EJB는 무거운 프레임워크였고, 그로 인해 애플리케이션의 성능이 저하될 수 있었으며, 서버와 개발 도구에 종속적이었다는 단점이 있었습니다
  3. 고비용: 특히 EJB는 실제로 사용 비용이 매우 컸다.

이와 같은 이유로 마틴 파울러는 EJB를 부정적으로 생각하여 "오래된 방식의 간단한 자바 오브젝트로 돌아가자"는 말을 했고, 이는 POJO(Plain Old Java Object)라는 용어의 기원.

EJB의 불편함을 통해 대표적으로 2가지의 Open Source가 등장한다.

  1. 로드 존슨의 J2EE Design and Development
    • EJB 컨테이너의 대체
    • 책의 코드들이 지금의 Spring이 됨
  2. 개빈 킹의 Hibernate ORM(Object Relation Mapping) 프레임워크의 등장
    • EJB의 Entity Bean 기술을 대체
    • 사람들이 모두 복잡하고 기술 수준이 낮은 Entity Bean을 쓰지않고 Hibernate를 써서 개빈 킹을 데리고와서 Hibernate를 기반으로 JAVA ORM 표준인 JPA(Java Persistence API)를 만들었다.이때, JPA와 같은 자바 표준 기술은 인터페이스만 있고 구현체는 따로 만들어야했다. 그래서 요즘은 JPA(자바 ORM 표준)에다가 Hibernate(구현체)를 쓴다고 한다.

이러한 흐름으로 스프링이 등장하게 됐다.

J2EE(Java 2 Enterprise Edition)와 EJB(Enterprise JavaBeans)는 어떤 관계인가?
J2EE는 엔터프라이즈 수준의 웹 애플리케이션을 개발하기 위한 자바 플랫폼이며, EJB는 그 안에서 사용되는 서버 측 컴포넌트 모델이다. EJB는 비즈니스 로직을 캡슐화하고, 그 로직이 J2EE 컨테이너 내에서 실행되도록 함으로써, 안전하고, 확장 가능하며, 트랜잭션 처리가 가능한 분산 애플리케이션을 구축할 수 있게 해준다.

비유를 들어 보자면 J2EE를 도시의 기반 시설로, EJB를 그 도시 내에서 운영되는 레스토랑으로 비유할 수 있다. J2EE는 도시가 제공하는 전기, 수도, 가스와 같은 여러 서비스와 규칙을 설정하며, 레스토랑(즉 EJB)은 이러한 J2EE가 제공하는 도시 기반 시설을 활용하여 손님들(클라이언트)에게 음식(비즈니스 서비스)을 제공하는 것이다.

Spring의 등장

Rod Johnson의 J2EE Design and Development 바로 이 책이 현재 대한민국 백엔드 시장을 씹어먹고있는 Spring의 시작이다.

아까 위에서 해당 책의 30,000줄의 프레임워크 코드가 지금의 Spring이 됐다고 했다.

또한 공식 홈페이지를 보면 저 책에서부터 Spring Framework의 기본 개념인 BeanFactory, ApplicationContext, Dependency Injection, Controller, HandlerMapping 그리고 Spring MVC의 초기 형태, 템플릿 개념, JdbcTemplate 및 기술에 구애받지 않는 데이터 액세스 예외 개념 등이 이미 다 기술되어 있었다고 한다.

이러한 책이 그대로 두지 않고 Jurgen Hoeller(위르겐 휠러)와 Yann Caroff(얀 카로프)가 로드 존슨에게 오픈 소스 프로젝트를 제안하여  공동 창립자가 되어 오픈 소스 프로젝트가 시작됐고 지금도 위르겐 휠러가 스프링 핵심 코드를 개발 중에 있다. 

 

왜 이름이 Spring인가?

 Yann이 Spring represented a fresh start after the “winter” of traditional J2EE라고 했다. 즉, Spring은 전통적인 J2EE의 '겨울'을 지나 새로운 시작이라는 뜻으로 볼 수 있다.


아까 언급한 로드 존슨의 책에 있던 저런 개념들을 아직 잘 못한다.

앞으로 하나 하나 학습해가야할 것들이다.

 

우선 다음 게시글에서는 현재까지 개발된 Spring의 생태계들에 대해 이해해야할 것 같다. 내 머릿속에 Spring, Spring Boot, Spring Framework등 뒤죽박죽이다. 차근차근 정리해나가보자