Spring Framework란?

Spring의 역사

Spring Framework이 등장하기 전에는 EJB라는 기술을 통해 웹 애플리케이션을 개발하였다. 이 기술은 여러가지 복잡성으로 인해 사용하기 까다로웠고, 이러한 단점들을 보안하기 위한 기술들이 연구되었다. 그 과정에서 가장 호평을 받은 기술이 Spring Framework이다.

물론 Spring Framework가 처음부터 바로 나온것은 아니다. 2002년 로드 존슨은 자신이 출판한 저서(Expert One-on-One J2EE Design and Development)에 스프링의 핵심 개념과 기반 코드들을 소개하였다.

책 출간 직후 유겐 휠러와 얀 카로프가 로드 존슨에게 오픈 소스 프로젝트를 제안하였고, 전통적인 EJB라는 겨울을 넘어 새로운 시작이라는 뜻으로 Spring이라고 명칭을 짓게 되었다.

Framework란?

Spring은 항상 Fraemwork와 결합되어 Spring Framework라 불린다. 여기에서 사용된 Framework란 무엇일까?? Framework의 개념에 대해 설명할 떄 항상 Library와 비교되곤 한다. 두 개념이 유사한 점이 많아서일 것이다. 여기선 두 개념에 대한 공통점과 차이점에 대해 알아보고자 한다.

Framework는 뼈대나 기반 구조를 뜻하고, 제어의 역전(IoC) 개념이 적용된 대표적인 기술이다. 소프트웨어에서의 프레임워크는 소프트웨어의 특정 문제를 해결하기 위해서 상호 협력하는 클래스와 인터페이스의 집합이라 할 수 있다.
Library는 개발에 필요한 것들을 미리 구현해놓은 대상, 도구들의 집합을 말한다. 즉, 개발자가 만든 클래스에서 호출하여 사용하는 방식을 취하고 있다.

Framework와 Library 모두 애플리케이션을 개발하는데 있어 쉽고 빠른 생산성을 위해 사용한다는 공통점을 가지고 있다. 이 둘의 가장 큰 차이는 바로 제어역전이다

관건은 애플리케이션의 흐름을 누가 쥐고 있느냐이다. Framework는 전체적인 흐름을 스스로 쥐고 있으면서 사용자는 그 안에서 필요한 코드를 짜 넣지만, Library는 사용자가 전체적인 흐름을 만들며 라이브러리를 가져다 쓴다.

Spring Framework

Spring Framework를 한 문장으로 표현한다면 ‘자바 엔터프라이즈 개발을 편하게 해주는 오픈 소스 경량급 애플리케이션 프레임워크’ 라고 할 수 있다. 즉, 애플리케이션 전 영역을 포괄하는 범용적인 프레임워크로써의 기능을 경량화하여(보다 쉽게 사용할 수 있게) 개발자에게 제공된흔 오픈소스 솔루션이라는 것이다.

이러한 스프링 프레임워크의 특징들을 하나씩 살펴보도록 하자.

  • 경량 컨테이너
    경량 컨테이너로서 자바 객체를 직접 관리한다. 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다.

  • POJO 기반의 구성
    POJO는 Plain Old Java Object의 약자로, 번역하면 평범한 오래된 자바 객체를 말한다. 마틴 파울러가 200년에 컨퍼런스 발표를 준비하다 만들어낸 용어인데, 중량 프레임워크들을 사용하게되면서 점점 무거운 객체를 만들게 된 것에 반발해서 사용되게 된 용어이다.

    그 의미가 모호하고 와닿지 않을 수도 있다. 나 역시 의미가 잘 이해가 되지 않기에 추후에 POJO와 Spring에 대해 더욱 자세히 다뤄보도록 하겠다. 다만 토비의 스프링에서는 진정한 POJO란 객체지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고 필요에 따라 재활용 될 수 있는 방식으로 설계된 오브젝트라고 설명하였다.

    이러한 Spring의 핵심적인 내용인 POJO에 대해서는 다음 포스팅에서 다뤄보도록 하겠다.

  • IOC와 DI 지원
    컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출한다. 이것을 제어의 역행(IoC)라고 한다.
    의존성 주입(DI)는 제어의 역행이 일어나는 것을 전제로 하여 스프링 내부의 객체들간의 관계를 만들어 줄 떄 사용된다. 말 그대로 특정 개체가 필요로 하는 객체를 외부에서 결정하여 연결시키는 것을 말한다.

    이 또한 Spring의 핵심특징중 하나로 자세하게 다루기엔 길어지므로 다음 포스팅에서 다뤄보도록 하겠다.

  • AOP 지원
    AOP(Asepect Oriented Programming)는 관점 지향 프로그래밍을 뜻한다. 대부분의 시스템에서 비즈니스 로직은 아니지만 보안, 로그, 트랜잭션과 같이 반드시 처리가 필요한 부분을 횡단 관리 심사라고 한다. 스프링에서는 이러한 관심사를 비즈니스 로직과 분리하여 중복된 코드를 줄이고 개발자가 비즈니스 로직에 집중하도록 만들어준다.

    이 또한 방대한 내용이므로 따로 포스팅하도록 하겠다.

  • WAS에 독립적인 개발환경
    과거의 EJB가 동작하려면 고가의 느리고 무거운 자바 서버(WAS)가 필요했다. 그에 반해 스프링은 가장 단순한 서버환경인 톰캣(Tomcat)이나 제티(Jetty)에서도 완벽하게 동작한다. 더군다나 Spring Boot에서는 자체 내장된 WAS를 사용하여 별도의 tomcat등을 설치할 필요도 없게 되었다.

    이에관해 Spring Boot의 내장 WAS의 성능에 대해서 다뤄보는 포스팅을 추후세 작성하도록 하겠다.

마치며

여기까지의 내용은 스프링의 맛만 보았다고 할 수 있다. 위에서 언급된 내용들을 좀 더 구체적이고 심화된 내용으로 다뤄보는 시간을 가지도록 하겠다.

Author

SeoYoonho

Posted on

2022-04-19

Updated on

2022-04-22

Licensed under

Comments