Post

[Spring] Spring이란?

[Spring] Spring이란?

전세계적으로 Java의 Spring, Nodejs의 express, Python의 Django 등 수많은 웹 프레임워크가 존재한다. 이번 포스팅에선 현재 한국의 수많은 기업에서 사용중인 자바 웹 프레임워크 ‘Spring’에 대해 알아보고자 한다.


Spring 등장 배경

J2EE와 EJB

자바 언어가 등장한 이래로 자바 기술로 기업환경의 어플리케이션을 만들기 위한 노력은 지속되어왔고, 썬마이크로시스템즈(자바 개발사)는 이를 위한 스펙들을 모아놓은 스펙 집합 J2EE(Java to Enterprise Edition)를 만들었다. J2EE의 대표적인 기술은 JSP, SERVLET, EJB, JDBC, JNDI 등이 있으며, 이중 기업환경의 시스템을 구현하기 위한 서버 측 컴포넌트 모델이자 규약으로 자바를 사용하여 서버 앱을 만드는 EJB(Enterprise Java Beans)는 표준 스펙으로 자리매김했다.

EJB

EJB Structure

하지만 J2EE와 EJB는 여러가지 문제점이 존재했으며, 우선 비지니스 로직과 기술적인 복잡함을 제대로 분리해내지 못했다. 또한 컨테이너 안에서만 동작하는 객체 구조나, 특정 환경에 종속적인 코드들로 오히려 개발의 복잡함이 가중되었으며, 가장 치명적인 단점은 EJB 틀 안에서 자바코드 스타일을 강제함으로써 상속을 제한하거나 다형성 적용을 근본적으로 제한하는 등 자바 언어의 철학이자 핵심인 객체지향적인 프로그래밍을 퇴색시켰다.

Spring의 등장

EJB에 대한 반발로 자바 진형에서는 다양한 오픈소스가 쏟아져나왔고 2002년 로드존슨은 EJB의 문제점을 지적하며 EJB를 사용하지 않고도 고품질의 확장가능한 앱을 개발할 수 있음을 입증하는 책을 출판한다.

로드존슨의 J2EE 설계와 개발(expert one-on-one)

로드존슨의 J2EE 설계와 개발(expert one-on-one)

책에는 30,000라인의 예제 소스코드와 현재 스프링의 핵심 개념과 기반 코드인 BeanFactory, ApplicationContext, POJO, IoC, DI 등이 포함되어 있다. 로드존슨이 책을 출간한 직후 엄청난 반향을 일으켰고, 유겐 휠러와 얀 카로프가 로드존슨에게 책의 예제를 기반으로 오픈소스 프로젝트를 제안하여 마침내 2003년 스프링 프레임 워크 1.0이 오픈소스로 출시하게 되며 스프링이 등장하게된다.


스프링의 정의


Spring

Spring

일반적으로 라이브러리나 프레임워크는 특정 분야나 한가지 기술에 특화된 목표로 만들어진다. 그러나 스프링은 등장배경에서 확인한것처럼 J2EE와 EJB의 대안으로 등장하였으며 애플리케이션의 전영역을 관통하는 일관된 프로그래밍 모델과 핵심기술을 바탕으로 빠르고 효과적으로 애플리케이션을 개발할수 있는 ‘애플리케이션 프레임워크’라는 특징을 가진다. 즉, 스프링은 특정 계층이나 기술, 업무 분야에 국한되지 않고 애플리케이션의 전 영역을 포괄하는 범용적인 프레임워크이며, 또한 자바 기반의 프레임워크이기 때문에 좋은 객체 지향 애플리케이션을 개발할 수 있는 프레임워크이다.


Spring 특징


  • 경량 프레임워크

    스프링은 EJB에 비해 가볍다. EJB는 기술에대한 과도한 욕심으로 너무 무겁고 복잡했으며 고가의 느리고 무거운 WAS가 필요했다. 그에 반해 스프링은 가장 단순한 서버환경인 톰캣이나 제티에서도 완벽하게 동작하며, 서블릿 컨테이너만으로 EJB의 지원하는 대부분의 기능은 물론 다른 고급기능들도 세련된 방식으로 사용할 수 있다.

  • 오픈소스

    스프링은 오픈소스다. 오픈소스는 분명 단점이 존재하지만, 스프링은 자바진영의 절대적 지지를 받았고 오픈소스의 한계를 극복하기 위해 스프링을 개발 유지 보수하는 전문 기업 ‘스프링 소스’가 세워졌다. 이후 09년 세계적인 IT기업 VMWare에 합병되어 안정적인 오픈소스 스프링 개발을 이어가고있다.

  • POJO기반의 구성

    코드를 개발할 때, 개발자가 특정한 라이브러리나 컨테이너의 기술에 종속적이지 않음을 의미한다. 자바코드를 이용해 객체를 구성하는 방식 그대로 스프링을 사용할 수 있다. 때문에, 자유롭고 객체지향적 설계 구현이 가능하다.

  • 의존성 주입(DI)

    의존성 주입은 역전이 일어나는것을 전제로 스프링 내부의 객체들 간의 관계를 관리할 때 사용한다. 특정 개체에 필요한 객체를 외부에서 결정하여 연결시키는 것을 말하며, 자바에서는 인터페이스를 사용하여 의존적인 관계를 처리한다.

  • 관점지향 프로그래밍 지원(AOP)

    스프링은 AOP를 통해 반복적인 코드를 줄이고 개발자가 핵심 비즈니스 로직에만 집중할 수 있도록 지원한다.

  • 높은 확장성

    스프링 프레임워크에 통합하기 위해 간단하게 기존 라이브러리를 감싸는 정도로 스프링에서 사용이 가능하기 때문에 수많은 라이브러리가 이미 스프링에서 지원되고 있고 스프링에서 사용되는 라이브러리를 별도로 분리하기도 용이하다.


Spring 생태계


Spring은 Framework와 함께 다양한 도구와 솔루션을 제공하여 속도, 단순성, 생산성에 초점을 맞추는 프로그래밍을 돕는다. Spring Ecosystem

Spring Ecosystem


Spring의 목표


스프링에서 사용되는 수많은 기술들은 결국 근본적으로 기술적 코드와 비즈니스코드를 분리하고 좋은 객체지향 설계와 프로그래밍을 위함이다. 그리고 이 둘은 하나로 유기적으로 연결된다. 기술적 코드에 침범당하지 않는 비즈니스 로직은 객체지향 분석과 설계에서 나온 도메인 모델을 쉽게 적용할 수 있고, 상속과 다형성, 위임을 포함해서 많은 객체지향 디자인 패턴과 설계기법들이 잘 녹아들게 할 수 있다. 이 모든것들은 개발을 보다 쉽고 즐겁게 만들고, 유지보수에 강하며 확장이 유연한 어플리케이션을 개발 가능케 한다.


읽어주셔서 감사합니다. 😊

Reference
스프링의 등장 배경과 정의, 스프링이란 무엇인가? - Jinia’s LOG

This post is licensed under CC BY 4.0 by the author.