개발 이야기/Spring

[Spring] 스프링 프레임워크(Spring Framework)란?

제이온 (Jayon) 2021. 6. 14.

안녕하세요? 제이온입니다.

 

이번 시간에는 스프링 프레임워크가 무엇인지 가볍게 알아보겠습니다.

 

 

스프링(Spring)의 어원

스프링 프레임워크(이하 스프링)을 짧게 정의하기란 쉽지 않습니다. 프레임워크 자체는 기존의 잘 정의된 용어지만, 스프링은 누군가에게 설명하기 참 난감합니다. 우선 스프링 자체를 정의하기보다는 가볍게 어원을 알아 봅시다.

 

스프링 프레임워크가 등장하기 전에는 EJB라는 기술을 통해 웹 애플리케이션을 개발하였습니다. 하지만, 개발자들에게 있어서 이 기술은 여러 가지 복잡성으로 인해 사용하기 꽤나 까다로웠습니다. 당연히 이러한 단점을 보완하기 위한 기술을 개발자들이 만들어내기 시작했고, 그 과정에서 가장 호평을 받은 기술이 바로 스프링입니다. 물론, 처음부터 스프링이라는 기술이 바로 나온 것은 아닙니다.

 

 

 

 

2002년 로드 존슨이 위의 책을 출간하였는데, EJB 없이도 고품질의 확장 가능한 애플리케이션을 개발할 수 있음을 보여주고, 해당 기술을 예제 코드로 선보였습니다. 여기에 스프링 핵심 개념과 기반 코드(BeanFactory, ApplicationContext, POJO, IoC, DI 등등)이 들어가 있으며, 개발자들이 책의 예제 코드를 프로젝트에 사용하기 시작했습니다.

 

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

 

 

프레임워크(Framework)란? (Feat. 프레임워크 vs 라이브러리)

스프링의 어원 자체는 알게 되었습니다. 그런데, 사람들은 단순히 스프링이라고 하기 보다는 스프링 프레임워크라고 부릅니다. 스프링 프레임워크 자체를 정의내리기 전에 프레임워크의 뜻부터 알고 넘어가면 좋을 듯합니다. 더불어, 라이브러리와의 차이점을 함께 알아 보겠습니다.

 

먼저, 프레임워크는 뼈대나 기반 구조를 뜻하고, 제어의 역전(IoC) 개념이 적용된 대표적인 기술입니다. 소프트웨어에서의 프레임워크는 '소프트웨어의 특정 문제를 해결하기 위해서 상호 협력하는 클래스와 인터페이스의 집합' 이라 할 수 있으며, 완성된 어플리케이션이 아닌 프로그래머가 완성시키는 작업을 해야합니다.

 

라이브러리는 단순 활용가능한 도구들의 집합을 말합니다. 즉, 개발자가 만든 클래스에서 호출하여 사용, 클래스들의 나열로 필요한 클래스를 불러서 사용하는 방식을 취하고 있습니다.

 

라이브러리는 특정 정의된 클래스를 호출하여 사용한다는 것은 이해가 가지만, 프레임워크는 제어의 역전 개념을 모르고 있다면 이해하기가 쉽지 않습니다. 순전히 뼈대나 기반 구조라고 생각하면 더더욱 이게 무엇인가 싶죠. 제어의 역전은 추후 설명할테니 일단 아래 사진을 봅시다.

 

 

 

 

프레임워크와 라이브러리의 차이는 위 사진으로 설명할 수 있습니다. 관건은 애플리케이션의 흐름을 누가 쥐고 있느냐입니다. 프레임워크는 전체적인 흐름을 스스로가 쥐고 있으며 사용자는 그 안에서 필요한 코드를 짜 넣지만, 라이브러리는 사용자가 전체적인 흐름을 만들며 라이브러리를 가져다 쓰는 것이라고 할 수 있습니다. 다시 말해, 라이브러리는 라이브러리를 가져다가 사용하고 호출하는 측에 전적으로 주도성이 있으며 프레임워크는 그 틀안에 이미 제어 흐름에 대한 주도성이 있다는 것입니다.

 

 

스프링 프레임워크(Spring Framework)란?

이제, 스프링 프레임워크가 무엇인지 알아 봅시다. 스프링 프레임워크를 가장 잘 정의한 표현은 다음과 같다고 생각합니다.

 

 

자바 엔터프라이즈 개발을 편하게 해주는 오픈 소스 경량급 애플리케이션 프레임워크

 

 

리는 여기서 프레임워크가 무엇인지 위에서 다루었습니다. 다만, 그냥 프레임워크가 아니고 애플리케이션 프레임워크가 무엇인지는 알 수가 없습니다. 이 부분도 짚고 넘어가겠습니다.

 

 

(1) 애플리케이션 프레임워크

일반적으로 라이브러리나 프레임워크는 특정 업무 분야나 한 가지 기술에 특화된 목표를 가지고 만들어집니다. 예를 들면 웹 계층을 MVC 구조로 손쉽게 만들 수 있게 한다거나, 포맷과 출력장치를 유연하게 변경할 수 있는 애플리케이션 로그 기능을 제공하는 것이 있죠. 그래서 프레임워크는 애플리케이션의 특정 계층에서 주로 동작하는 한가지 기술 분야에 집중됩니다.



이와 달리, 애플리케이션 프레임워크는 특정 계층이나, 기술, 업무 분야에 국한되지 않고 애츨리케이션의 전 영역을 포괄하는 범용적인 프레임워크를 말합니다. 즉, 애플리케이션 프레임워크는 애플리케이션 개발의 전 과정을 빠르고 편리하며 효율적으로 진행하는데 일차적인 목표를 두는 프레임워크입니다.

 

 

(2) 오픈소스 경량급

여기서 경량급은 기존의 EJB처럼 툴의 도움 없이는 다루기 힘든 난해한 설정파일 구조와 까다로운 패키징, 불편한 서버 배치 등으로 인한 부담을 없애고, 쉽게 해당 기능들을 사용할 수 있게 되었음을 의미합니다. 오픈 소스는 다들 잘 아시다시피 소스가 공개되어 있어서, 언제든 수정이 가능하고, 이슈를 제기하여 해결할 수 있는 소스를 말합니다.

 

 

스프링 프레임워크의 특징

앞서 스프링 설명을 하면서 2가지 단어를 꺼냈었습니다. 전자는 복잡함이고, 후자는 경량급이죠. 스프링은 이 두 가지 특성을 굉장히 잘 살렸는데, 5가지 특징을 살펴보면서 이해해 봅시다.

 

 

(1) 경량 컨테이너

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

 

(2) POJO 기반의 구성

POJO는 Plain Old Java Object로, 평범한 자바 객체를 말합니다. 이 단어는 마틴 파울러가 2000년에 컨퍼런스 발표를 준비하다가 만들어낸 용어인데, 단순히 발표 중의 "간단한 자바 오브젝트를 사용하는데요~"라고 하는 것보다 "POJO 방식의 기술을 사용하는데요~"라고 하면 왠지 세련되고 첨단 기술을 쓰는 것처럼 느껴진다는 심리를 이용하여 만들어진 것이라고 합니다. 그래서 우리가 자바에서 개발하는 지극히 평범한 객체를 POJO라고 합니다.

 

다만, POJO는 특정 규약과 특정 환경에 종속되어서는 안 되고 객체지향 설계를 잘 지켜야한다는 조건이 있습니다. 이 부분을 자세히 설명하면 과도하게 포스팅이 길어지므로 추후 하나의 포스팅으로 작성하겠습니다.

 

 

(3) DI를 통한 객체 간의 관계 구성

스프링은 그 자체가 구조를 설계할 수 있어서 개발자가 부품을 만들어 조립하는 형태의 개발이 가능합니다. 이렇게 조립된 코드의 최종 호출은 개발자가 결정하는 것이 아니라 스프링 프레임워크 내부에서 이루어지는데, 이것을 제어의 역행(IoC)라고 합니다.

 

의존성 주입(DI)은 제어의 역행이 일어나는 것을 전제로 하여 스프링 내부의 객체들간의 관계를 만들어줄 때 사용합니다. 의존성 주입은 말 그대로 특정 객체가 필요로 하는 객체를 외부에서 결정하여 연결시키는 것을 말합니다.

 

IoC와 DI도 여기서 다 설명하면 길어지므로 추후 포스팅으로 작성하겠습니다.

 

 

(4) AOP 지원

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

 

마찬가지로 AOP 자체도 내용이 방대하므로 따로 포스팅하겠습니다.

 

 

(5) WAS에 독립적인 개발 환경

과거의 EJB가 동작하려면 고가의 느리고 무거운 자바 서버(WAS)가 필요했습니다. 그에 반해 스프링은 가장 단순한 서버환경인 톰캣(Tomcat)이나 제티(Jetty)에서도 완벽하게 동작합니다. 단순한 개발툴과 기본적인 개발환경으로도 엔터프라이즈 개발에서 필요로 하는 주요한 기능을 갖춘 애플리케이션을 개발하기에 충분한 것이죠.

 

이 외에도 트랜잭션 관리, API와의 영속성을 지원(JDBC, JPA, ...) 등을 한다는 특징이 있습니다.

 

 

정리

지금까지 스프링이 무엇인지 겉핥기로 알아 보았습니다. 다음 시간에는 IoC와 DI에 대해서 다뤄보겠습니다.

 

 

출처

 

스프링 프레임워크(Spring Framework)에 대한 간단한 소개

 스프링 프레임워크(Spring Framework)에 대한 간단한 소개 이번 포스팅에서는 스프링 프레임워크가 현재와 같이 많은 인기를 얻게 된 이유와 중요한 특징들에 대해 간단하게 알아보겠습니다. 1. 스

freestrokes.tistory.com

 

 

 

[스프링] 스프링이란 무엇인가?

스프링은 기본적으로 IoC와 DI를 위한 컨테이너로서 동작하지만 그렇다고 "스프링은 단지 IoC/DI 프레임워크다"라고는 말할 수 없습니다. 스프링은 단순히 IoC/DI를 편하게 적용하도록 돕는 단계를

12bme.tistory.com

 

 

 

[Spring] 스프링(Spring) 정의 및 특징 정리

[Spring] 스프링(Spring) 정의 및 특징 정리 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ 스프링(Spring) 정의, 스프링 특징 ] 입니다. : ) 스프링프레임워크(Spring Framework)  - 자바 플랫폼을 위한 오..

goddaehee.tistory.com

 

댓글

추천 글