-
[Spring] Spring의 역사에 대해서 알아보자Back-end/Spring 2022. 3. 2. 12:21
안녕하세요! 오랜만에 포스팅을 하는데 그동안 인터넷 강의를 수강하고, 취업준비를 하느라 포스팅이 늦었습니다.
이번 포스팅은 Spring이 탄생한 배경과 역사에 대해서 알아보겠습니다!!
추운 겨울 EJB(Enterprise Java Beans)의 시기
Spring framework 1.0은 2004년 3월에 release 됐습니다. 스프링이 세상에 처음 나올 당시, 자바로 애플리케이션은 개발하는 가장 일반적인 방법은 EJB(Enterprise Java Beans)를 사용하는 것이었습니다.
EJB는 엔터프라이즈급 애플리케이션 개발을 단순화하기 위해서 발표되었고 당시 대부분의 기업은 EJB를 사용했습니다. 많은 기업들이 사용했다면은 확실한 장점이 있었겠죠? 하지만 장점보다는 단점이 더 큰 스펙입니다.
개발을 하다 보면 수십개에서 부터 수백 개의 객체를 생성하게 되는데 이러한 비즈니스 객체들을 관리하는 컨테이너를 만들어서 필요할 때마다 컨테이너로부터 객체를 받는 식으로 관리하면 효율적이라는 것에서 탄생하게 됩니다.
하지만!!
취지는 아주 좋았지만 EJB 컨테이너를 사용하기 위해서는 상투적인 코드들이 많다는 불편함이 있었습니다. 개발을 하기전에 엄청나게 많은 인터페이스들을 implements 해야 했고 그에 따른 시간적 비효율성이 생겼습니다. 또한, EJB에서 제공하는 인터페이스들을 사용해야 했기 때문에 EJB에 종속적인 개발을 할 수밖에 없었습니다.
그렇다면 당연히 확장성과 유연성은 떨어지게 되겠죠.
또 엄청나게 느렸습니다. 앞서 말한 것과 같이 개발을 위해 갖춰야 할 수많은 인터페이스들 때문에 프로젝트가 무거워서 굉장히 느렸다고 합니다.
저도 개발을 처음 배울 때 중급 프로젝트를 하던 중, 매번 DAO와 Interface를 구현한 구현체를 싱글톤으로 만들기 위해서 기본적으로 작성해줘야 하는 몇 줄의 코드들이 반복되는 것을 보고
'이것 말고 더 좋은 방법이나 학원에서 알려주지 않은 방법이 있지 않을까?'라는 생각을 했었는데, 알고 보니까 그때는 스프링을 배우기 전이었고 스프링을 사용하게되면 스프링 컨테이너가 기본적으로 객체들을 싱글톤으로 관리 해주기 때문에 상투적인 코드들을 쓸 필요가 없었습니다.
이 처럼 당시에 개발자들도 EJB에 대해 의문을 갖기 시작했습니다.
그 때 한 명의 개발자가 내가 만들어도 이거보단 잘 만들겠다!!(농담)해서 직접 프레임워크를 개발하게 됩니다.
추운 겨울(Winter)을 지나 전설 스프링(Spring)의 시작
2002년 로드 존슨이 책을 출간합니다.
책의 핵심 내용은 다음과 같습니다.
- EJB의 문제점 지적
- EJB 없이도 충분히 고품질의 확장 가능한 애플리케이션을 개발할 수 있음을 보여주고 30,000 라인 이상의 기반 기술을 예제 코드로 선보임
- 여기에 지금의 스프링 핵심 개념과 기반 코드가 들어가 있음
- BeanFactory, ApplicationContext, POJO(Plain Old Java Object), 제어의 역전, 의존관계 주입
- 책이 유명해지고 개발자들이 책의 예제 코드를 프로젝트에서 사용
POJO란 Plain Old Java Object의 줄임말로 EJB의 불편함을 겪은 개발 자들이 본래의 순수한 자바 객체를 이용해서 개발을 하자고 말을 하면서 POJO 즉, 평범하고 오래된 자바 객체가 주목을 받게 됩니다.
책 출간 직후 유겐 휠러와 얀 카로프가 로드 존슨에게 스프링 오픈소스 프로젝트를 제안하게 됩니다.
스프링의 핵심 코드의 상당수는 여전히 유겐 휠러가 지금도 개발하고 있다고 합니다.
또한 스프링 이름은 전통적인 EJB라는 겨울을 넘어 새로운 시작이라는 뜻으로 지었다고 합니다
스프링 릴리즈(Release)
스프링 부트(Spring Boot)
스프링 부트는 스프링을 편리하게 사용할 수 있도록 지원합니다. 최근에는 스프링 부트를 기본적으로 사용하고 있습니다.
단독으로 실행할 수 있는 스프링 애플리케이션을 쉽게 생성할 수 있는데, 예를 들어서 Tomcat 같은 웹 서버를 내장해서 별도의 웹 서버를 설치하지 않아도 됩니다.
저는 개발원에서 스프링을 처음 배울 때 아파치 톰캣 공식 홈페이지에 들어가서 맞는 버전을 찾은 후 다운로드하고 톰캣을 따로 설치하고 그랬던 기억이 있는데요 정말 번거롭긴 했습니다.
하지만! 스프링 부트는 이런 과정이 필요가 없어서 굉장히 편리합니다.
또한 손쉬운 빌드 구성을 위해서 starter 종속성을 제공합니다.
위의 링크로 들어가게 되면 spring initializer를 통해서 스프링 프로젝트도 간편하게 생성할 수 있습니다.
다양한 외부 라이브러리도 Dependencies의 Add Dependencies를 사용해서 아주 간편하게 추가할 수 있습니다.
스프링 부트를 사용하지 않을 때는 매번 Mvn Repository에 들어가서 maven혹은 gradle을 복사 붙여 넣기 했던 기억이 나네요..
다음 포스팅은 스프링의 핵심 개념과 객체 지향 프로그래밍에 대해서 알아보겠습니다
'Back-end > Spring' 카테고리의 다른 글
[Spring]IoC, DI, 컨테이너 그리고 AppConfig 스프링으로 변환하기, 스프링 빈 조회하기 (0) 2022.03.04 [Spring] DI 컨테이너를 예제 만들기 ( 2 ) (0) 2022.03.04 [Spring] DI 컨테이너 예제 만들기 ( 1 ), JUnit 사용하기 (0) 2022.03.03 [Spring] 좋은 객체 지향 설계의 5가지 원칙(SOLID) (0) 2022.03.02 [Spring] Spring의 핵심과 객체 지향 프로그래밍 (0) 2022.03.02