[Spring] Spring의 등장

DYKO·2022년 8월 29일
0

Spring Framework

목록 보기
1/7
post-thumbnail

스프링은 자바를 통해 엔터프라이즈 시스템을 개발하는 데 좀 더 나은 방법과 전략을 찾으려고 고민하고 연구한 많은 개발자의 수고가 오랜 시간에 걸쳐서 집약된 결정체이다.
- 토비의 스프링 3.1

💡 Spring의 등장

스프링은 자바 엔터프라이즈 애플리케이션 개발에 사용되는 경량 애플리케이션 프레임워크이다. 프레임워크는 애플리케이션 개발을 빠르고 효율적으로 할 수 있도록 틀과 공통 프로그래밍 모델, 기술 API 등을 제공해준다.

복잡한 EJB를 탈피하기 위한 Java 진형의 반발

스프링 프레임워크가 등장하기 이전, 자바 엔터프라이즈 애플리케이션 개발을 위해 Sun Microsystems에서는 JSP, Servlet, EJB, JDBC 등이 포함되어 있는 J2EE(Java to Enterprise Edition)을 만들었다. 이중 서버측 컴포넌트 모델로 EJB(Enterprise Java Beans)를 사용했다.

EJB의 탄생은 '비즈니스 객체들을 관리하는 컨테이너를 만들어서 필요할 때마다 컨테이너로부터 객체를 받는 식으로 관리'하면 효율적이겠다는 좋은 취지에서 비롯됐으나, 서비스의 비즈니스 로직보다 프레임워크를 사용하기 위한 코드 작성이 많아지는 문제가 발생했다. 그 뿐만 아니라 EJB에 종속된 코드로 인해서 개발의 복잡성이 더 커졌고, 자바코드 스타일이 강제됨으로써 상속이나 다형성 적용이 제한되며 자바의 객체지향성이 퇴색했다. 그리고 이러한 EJB를 대체하기 위해 등장한 것이 Spring 이다. 즉, 스프링은 모든 개발자들의 꿈, 번거로운 작업 없이 개발에만 집중하고 싶다라는 소망의 산출물이다.

💡 Spring의 철학과 목표

  1. 기술적 코드와 비즈니스 코드의 분리함으로써 엔터프라이즈 개발의 복잡함을 해소
  2. POJO 프로그래밍, 자바의 기본인 객체지향적 프로그래밍을 극대화

Spring 홈페이지의 Why Spring? 메뉴에서 볼 수 있는 글귀

기술적 코드와 비즈니스 코드의 분리
엔터프라이즈 개발은 복잡할 수 밖에 없다. 엔터프라이즈 애플리케이션은 기본적으로 많은 사용자들의 요청을 동시에 처리해야하고 자원의 공유와 분배에 신경써야 한다. 더불어 보안, 안정성, 확장성 등을 위해 많은 기술력이 필요하다. 또한 기본 업무가 전산화되고 자동화되며 엔터프라이즈 애플리케이션에 요구되는 기능들도 많아지고 비즈니스 로직 또한 복잡해지고 있다. 이 모든 것을 충족하기 위해 핵심 비즈니스 코드 외에 기술적인 코드가 많이 필요하며 두 가지 코드가 혼재할수록 애플리케이션을 개발하고 유지보수하는 데 난이도가 높아진다.

EJB 역시 위와 같은 복잡성을 분리하는 것이 목표였다. 하지만 기술적 코드를 분리하기 위해 애플리케이션 로직이 EJB에 종속되는 코드를 강제함으로써 Java 언어의 장점을 사라지게 했으며 더 큰 복잡함을 초래했다. 이런 EJB의 실패 속에서 탄생한 것이 Spring이기 때문에 스프링은 그 무엇보다 객체지향에 집중했고 이를 위해 DI를 활용하였다. 객체지향과 DI를 바탕으로 서비스 추상화를 통해 환경으로부터 독립적인 코드를 작성할 수 있고, AOP를 적용하여 기술적 코드와 비즈니스 코드를 분리하여 별도의 모듈로 관리할 수 있도록 하였다.

POJO 프로그래밍
스프링의 핵심 개발자들이 함께 쓴 Professional Spring Framework라는 책에서, 그들은 "스프링의 정수는 엔터프라이즈 서비스 기능을 POJO에 제공하는 것"이라고 표현했다. 이를 달리 생각하면 엔터프라이즈 서비스 기술과 POJO라는 애플리케이션 로직을 담은 코드를 분리했다는 뜻이기도 하다. 즉, "분리됐지만 반드시 필요한 엔터프라이즈 서비스 기술을 POJO 방식으로 개발된 애플리케이션 핵심 로직을 담은 코드에 제공한다"는 것이 스프링의 가장 강력한 특징과 목표이다.

스프링의 핵심이 POJO 프로그램이라는 사실은, 스프링 소스의 CTO인 아드리안 콜리어가 스프링의 핵심 개념을 설명하기 위해 만든 스프링 삼각형을 통해서도 알 수 있다. 그리고 스프링의 핵심은 POJO 프로그래밍이며 이를 가능케 하기 위해 주요기술인 IoC/DI, AOP, PSA(Portable server abstractions)의 기능기술을 제공하고 있다.

스프링 핵심 기술을 설명하기 위한 스프링 삼각형

POJO(Plain Old Java Object)란, 직역하면 오래된 방식의 자바 오브젝트라는 말로 주로 "특정 자바 모델이나 기능, 프레임워크 등을 따르지 않는 자바 오브젝트" 로 즉 특정 기술에 종속되어 동작하는 것이 아닌 순수한 자바 객체를 지칭한다. 좀 더 명확하게 POJO 프로그래밍이라고 하기 위해선 아래 세 가지 조건을 충족해야 한다.

  • 특정 규약(Contract)에 종속되지 않는다
    EJB2와 같이 특정 규약을 따라 비즈니스 컴포넌트를 만들어야 하는 경우, POJO가 아니다. POJO는 자바 언어와 꼭 필요한 API 외에는 종속되지 않아야 한다.
  • 특정 환경에 종속되지 않는다
    WebLogic 서버나 EJB3의 JNDI와 같이 특정 환경에 종속된 클래스나 API를 직접 호출하도록 만들어진 오브젝트는 POJO가 아니다. 특정 환경에 종속된 오브젝트나 API에 의존하게 되면 독립적으로 테스트하거나 다른 환경에서의 확장하는데 어려움이 생긴다.
  • 자바의 기본인 객체지향적으로 설계되어야 한다
    아무리 특정 규약과 환경에 종속되지 않았더라도 강한 결합, 상속과 다형성이 무너진 코드 등 로직이 객체지향적으로 설계 및 프로그래밍되지 않았다면 POJO가 아니다. 자바 언어 문법을 사용했다고하여 자동으로 객체지향 프로그래밍이 적용되었다고 할 수 없다.

좀 더 자세한 등장배경 및 목적, 정의에 대한 지식을 얻고 싶다면, 12bme님이 정리한 글을 참고! 설명이 매우 자세하고 이해하기 쉽게 잘되어 있다.
>> [스프링] 스프링이란 무엇인가? - 12bme



참고 문헌 및 사이트

https://spring.io
위키백과-스프링 프레임워크
위키백과-Plain Old Java Object
스프링 등장 배경 - Jinia's Log
EJB와 스프링 개론 - Hoon93
[Spring]스프링이란? - 동코딩
[스프링] 스프링이란 무엇인가? - 12bme

profile
엔지니어가 되는 그 날 까지!

0개의 댓글