[Spring 핵심 원리 - 기본편] 1) Spring의 등장배경과 Spring이란?

JoonYoung Maeng·2020년 12월 7일
1
post-thumbnail

들어가기 전에..

해당 글은 Inflearn(https://www.inflearn.com/)에서 제공하는 김영한 개발자 님의 스프링 핵심 원리 - 기본편(https://www.inflearn.com/course/스프링-핵심-원리-기본편/dashboard)를 듣고 제가 학습한 내용을 정리한 내용입니다. 학습 내용의 모든 출처는 해당 강의에 있습니다.


Spring의 등장 배경


SpringSpring boot
ejbspring2

Spring이 등장하기 이전 EJB (Enterprise JavaBeans)는 애플리케이션의 업무 로직을 담당하는 자바 표준 기술이었다.

EJB의 등장으로 개발자는 비즈니스 로직에 집중 할 수 있는 환경을 갖추었지만, 하나의 기능을 구현하기 위해 클래스 간 상속, 인터페이스의 구현 등 각 클래스 간의 의존도가 커짐으로 배보다 배꼽이 더 큰 상황에 부딪혔다.

이로 인해, 마틴 파울러는 EJB에 반발해 오래된 방식의 "간단한 자바 오브젝트로 돌아가자"는 말을 했고, 이는 POJO(Plain Old Java Object)라는 용어의 기원이 되었다.

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

  1. 로드 존슨의 J2EE Design and Development의 예제 코드들이 지금의 Spring 기본 코드가 됨.
    • EJB 컨테이너의 대체
  2. 개빈 킹의 하이버네이트 ORM(Object Relation Mapping) 프레임워크의 등장
    • EJB 엔티티 빈 기술을 대체하고, JPA(Java Persistence API)의 새로운 표준 정의
    • JPA는 표준 인터페이스, 하이버네이트는 JPA의 구현체

Spring의 등장


2002년 로드 존슨이 EJB의 문제점을 지적하면서 고품질의 확장 가능한 애플리케이션을 개발할 수 있음을 보여주고, 30,000 라인 이상의 기반 기술 예제 코드를 선보이면서 시작되었다.

30,000라인의 예제 코드에는 현재 스프링의 핵심 개념과 기반 코드인 BeanFactory, ApplicationContext, POJO, IoC(제어의 역전) , DI(의존성 주입)등 이 포함되었다.

로드 존슨의 책 출간 직후 유겐 휠러(Juergen Hoeller)Yann Caroff(얀 카로프)가 오픈소스 프로젝트를 제안하고 이후 지금까지도 스프링의 핵심 코드는 유겐 휠러가 개발하고 있다.

2003년 스프링 프레임워크 1.0의 출시, 2014년 스프링 부트 1.0 출시, 2020년 현재 스프링 프레임워크 5.2.x, 스프링 부트 2.3.x


Spring이란?

[Spring의 생태계]

스프링 프레임워크, 스프링 부트와 함께 스프링 데이터, 스프링 세션, 스프링 시큐리티, 스프링 RestDocs, 스프링 배치, 스프링 클라우드 등과 함께 사용된다.

SpringSpring boot
spring2springboot

[Spring Framework와 Spring Boot]

스프링 프레임워크의 핵심 개념은 DI 컨테이너, AOP등 이며, 스프링 MVC와 같은 웹기술을 제공하고 JDBC, ORM 프레임워크의 지원, Mybatis와 같은 XML기반 데이터 접근 기술을 지원한다. 또한, 스프링 기반 테스트를 지원한다.

스프링 프레임워크의 장기간에 걸친 환경설정과 어려움을 해결하기 위해 스프링 부트가 등장했다.

  • 스프링 부트의 장점
    1. Tomcat같은 웹 서버를 내장함으로써 스프링 프레임워크와 달리 웹 서버를 설치하지 않아도 됨
    2. 단독으로 실행하도록 스프링 애플리케이션을 쉽게 생성해줌
    3. 간단한 빌드 구성을 위한 starter 종속성 제공
      • Starter가 프로젝트를 구성하는 필요한 라이브러리를 자동으로 구성함으로써 편의성을 증대시킴
    4. 스프링과 써드 파티 라이브러리의 자동 구성
      • 스프링 프레임워크의 버전을 확인하고 해당 버전과 호환성이 좋은 외부 라이브러리를 자동으로 구성하므로 개발자가 다양한 라이브러리의 버전을 확인할 필요성을 없앰

[Spring의 핵심 개념]

스프링의 핵심 개념은 무엇일까? 웹 애플리케이션을 만들고 DB 접근을 편리하게 해주는 기술? 아니다. 차례 대로 파악해보자.

스프링은 Java 언어 기반의 프레임 워크이다. 그렇다면 Java의 가장 큰 특징은?

Java는 객체 지향 언어이다. 그렇다면 스프링 프레임워크는 객체 지향 언어의 강력한 특징을 살려내 줄 수 있는 프레임워크이다. 이는 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크라는 것이다.

Spring Framework -> Java 언어 -> 객체 지향 언어
Spring Framework는 객체 지향 애플리케이션 개발 프레임워크


정리

강의를 들으면서, 해당 기술을 코드로만 아는 것은 중요하지 않다는 것을 깨달았다. 해당 기술의 기원이 무엇이고, 과거에 사용한 기술이 어떤 한계를 느끼고 해당 기술이 등장했는지 알면 추후에 코드를 구현할 때 이유를 모르고 코드를 구현하는 것이 아닌 정확한 의도를 파악하고 코드를 구현할 수 있을 것이라 생각한다.


[Reference]

Inflearn 김영한 님의 스프링 핵심 원리 - 기본편 : https://www.inflearn.com/course/스프링-핵심-원리-기본편/dashboard

위키피디아 EJB : https://ko.wikipedia.org/wiki/엔터프라이즈_자바빈즈

위키피디아 POJO : https://ko.wikipedia.org/wiki/Plain_Old_Java_Object

profile
백엔드 개발자 지망생입니다!

0개의 댓글