Spring의 탄생

김성훈·2021년 11월 4일
2

SPRING

목록 보기
4/12
post-thumbnail

시대는 거슬러 거슬러 JAVA Spring이 등장하기 이전 EJB (Enterprise JavaBeans) 란게 있었다.

EJB 란 비즈니스 객체들을 관리하는 컨테이너를 만들어서 필요할 때 마다 컨테이너로부터 객체를 받는 식으로 관리하면 좋겠다 라고 생각해 만들어지게 되었다
.
하지만 서비스가 구현해야 하는 실제 비즈니스 로직보다 EJB 컨테이너를 사용하기 위한 상투적인 코드들이 많다는 문제가 발생하기 시작했습니다(비즈니스 로직에 특정 기술이 종속되어 있음 <기술침투>.

  • 객체 지향적이지 않다..
  • 프로그래밍 모델이 복잡하다.
  • 특정 환경, 기술에 코드가 종속적이다.
  • 컨테이너 환경 안에서만 동작할 수 있는 객체 구조를 지녔다.
  • 자동화된 테스트가 매우 어렵거나 불가능하다.
  • 개발 생산성과 이동성이 부족한다.

이로인해 마틴 파울러(미국 소프트웨어 개발자) 형님께서는 EJB에 반발해 "간단한 자바 오브젝트로 돌아가자" 라는 말을 하셨고 , 이는 POJO(Plain Old Java Object)라는 용어의 기원이 되었다.


그러던 중 2002년 <<로드 존슨(컴퓨터 과학자)>> 형님께서 EJB의 문제점을 지적하시면서 EJB에 의존하지 않은 효율적인 코드 30000줄 이상을 적은 책을 하나 내셨는데 이 코드를 읽은 개발자 <<유겐 휠러>>와 <<얀 카로프>>는 로드 존슨에게 해당 코드를 이용한 오픈 소스 프로젝트를 제안하였습니다. 이렇게 2002년 로드 존슨의 책에서 시작되어 2004년에 탄생한 것이 Spring Framework이다. Spring은 EJB에 의존적이었던 겨울이 끝나고 봄(Spring)이 왔다는 의미에서 붙여졌습니다.


💲스프링의 역사💲

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 공개


❇️스프링이란?❇️

웹사이트 개발을 위한 백엔드 프레임워크.

백엔드 (Back-end):
웹 개발 프로세스를 프론트(Front-end), 백엔드(Back-end)로 구분하는데, 일반적으로 서버단에서 동작하는 프로그램(DB, API서버 ..)을 다루는 프로세스를 백엔드 라고 한다.

프레임워크 (Framework):
프로그램 설계에 있어 미리 구축되어있는 뼈대 라고 이해하면 쉽다.

백엔드 프로세스를 구축하는데 있어 기본적인 뼈대를 제공해주어 높은 품질의 프로그램을 빠르게 개발할 수 있게된다.


✅ 왜 필요한가?✅

1. 무거운 기존 프레임워크

수많은 웹서비스 기반 기업들이 등장하면서 안정된 품질, 그리고 빠른 개발속도를 가진 프로그램이 필요하게된다.

그러나 그동안의 프레임워크는 너무 무겁고 내용이 방대했다. 무거운 프레임워크에서 벗어나 가볍고 강력한 프레임워크를 필요로 하게된다.

이러한 기업의 니즈에 맞춰 수많은 프레임워크들이 등장하게 되었고, 이때 경량 프레임워크인 스프링이 등장하게된다.

2. 전체 구조를 다루는 프레임워크

기존의 프레임워크는 특정 부분에 한정해 기능을 제공하고, 전체적인 로직은 개발자에게 맡기는 방식이였다.

하지만 스프링은 특정 부분에 한정되지 않고, 백엔드 프로세스 구축 전 단계를 지원한다.

(일반적으로 웹 개발에 사용되지만, 기본적으로 구조를 다루는 프레임워크이다.)

3. 다양한 프레임워크와의 호환성

스프링은 다른 프레임워크(ex. 데이터베이스 프레임워크 MyBatis)와의 호환성이 높아 기본 스프링 프레임워크를 유지하면서, 다른 프레임워크를 혼용하여 사용할 수 있다. 다양한 방식으로 프로세스 개발이 가능해진다.


💹스프링의 특징 💹

1. 의존성 주입 (DI: Dependency Injection):

프로그램 구성요소간의 의존 구조를 외부 파일에서 정의해준다. 각 요소 또는 서비스 사이에 의존성이 존재하는 경우 스프링에서 의존 관계를 정의, 외부파일을 통해 설정해준다. 설정파일을 분리하기 때문에 유지보수가 쉬워지며 각 구성요소간 결합성이 낮아지게 된다.(각 개체가 독립적으로 존재, 연결 자체는 스프링에서 지원한다)

2. POJO 방식:

Plain Old Java Object 의 약자, 말그대로 기존의 일반적인 java 코드를 이용해서 프로그래밍이 가능하다. 기존의 프레임워크(Java EE)의 방식에선 미리 설계되어있는 인터페이스나 클래스를 상속받아 무거운 객체들을 만들어야만 했는데, 그럴 필요가 없이 일반적인 java코드로만으로도 객체를 구성할 수 있게된다. 따라서 더 유연한 프로그래밍이 가능해지며 가볍고 생산성이 높아진다.

3. 관점지향 프로그래밍(AOP):

관점에 따라 각각의 기능을 분리하여 프로그래밍 하는것이 가능해진다. 비즈니스 로직, {로깅, 트랜잭션, 보안} 등을 다른 모듈로 분리하여 따로 관리할 수 있다. 스프링에서는 서로다른 관점을 조합하는 기능또한 제공한다. 이러한 방식은 유지보수가 수월하며 각각의 관점에 최적화된 프로그래밍이 가능해진다는 장점이 있다.

4. 제어의 반전 (IoC: Inversion of Control):

기존의 프로그래밍 방식에선 라이브러리를 호출하여 코드에 포함시켜 프로그램을 실행시켰다. 하지만 스프링에서는 지원하는 형식에 맞게 프로그램을 작성하면 프레임워크에서 사용자가 작성한 코드를 호출해서 사용하는 방식으로 제어의 권한이 역전된 모습을 보여준다.


특정 기술에 종속되지 않고( 기술 비침투적 ) 객체를 관리할 수 있는 컨테이너를 제공하는 것이 스프링의 기본 철학이다.

<출처>

애가 [Spring] 스프링(Spring) 이란?
길은 가면,뒤에 있다 [스프링] 스프링이란 무엇인가?
[Spring] 스프링 스프링 부트 차이
애강 [Spring] 스프링(Spring) 이란?

profile
"한 명이 걷는 천 걸음 보다 천 명이 함께 걷는 한 걸음이 성공의 시작이고 완성이다"

0개의 댓글