스프링 프레임워크의 가장 잘 알려진 정의는 '자바 엔터프라이즈 개발을 편리하게 해주는 오픈소스 경량급 애플리케이션 프레임워크'이다.
이 정의를 외우지 말고 이해해보도록 하자.
애플리케이션 프레임워크
프레임워크는 애플리케이션의 특정 계층에서 주로 동작하는 한 가지 기술 분야에 집중된다. 하지만 스프링 프레임워크는 이와 다르게 '애플리케이션 프레임워크'라는 특징을 가지고 있다.
애플리케이션 프레임워크란 특정 계층이나 기술, 업무 분야에 국한되지 않고 애플리케이션의 전 영역을 포괄하는 범용적인 프레임워크를 말한다. 애플리케이션 개발의 전 과정을 빠르고 편리하며 효율적으로 진행하는 데 일차적인 목표를 두는 프레임워크다.
단지 여러 계층의 다양한 기술을 그저 한데 모아뒀기 때문에 애플리케이션 프레임워크라고 불리는 건 아니다. 애플리케이션의 전 영역을 관통하는 일관된 프로그래밍 모델과 핵심 기술을 바탕으로 해서 각 분야의 특성에 맞는 필요를 채워주고 있기 때문에 애플리케이션을 빠르고 효과적으로 개발할 수 있다.
스프링의 탄생 배경
스프링이 자바 엔터프라이즈 개발의 전 영역을 포괄하는 애플리케이션 프레임워크가 된 데는 스프링의 탄생 배경과 밀접한 관련이 있다. 스프링은 처음부터 독자적인 프레임워크로 개발된 것이 아니다.
스프링 등장 이전에는 자바 진영의 표준 기술인 EJB(Enterprise Java Beans)가 있었다. 하지만 비용이 비쌌고, 어렵고 복잡하고 느렸다. 또한 EJB에 의존적으로 개발하게 되는 치명적인 문제가 있었다.
이때문에 순수한 자바로 돌아가자는 말들이 나오기 시작했고, POJO(Plain Old Java Object)가 나오게 된다.
스프링을 처음 만든 사람은 EJB에 불만이 있던 로드 존슨(Rod Johnson)이라는 개발자다.
로드 존슨은 2003년에 'Expert One-on-One J2EE Design and Development'라는 책을 출간했는데, 책에서는 개발 전략과 기존 기술에 대한 대안을 설명으로만 그치지 않고, 그 개념을 증명할 수 있도록 3만 라인 가량의 샘플 애플리케이션 형태로 제공했다. 이 예제 코드들이 바로 지금의 스프링 프레임워크의 기원이다.
경량급
스프링이 경량급이라는 건 스프링 자체가 아주 가볍다거나 작은 규모의 코드로 이루어졌다는 뜻이 아니다. 오히려 스프링은 20여 개의 모듈로 세분화되고 수십만 라인에 달하는 코드를 가진 매우 복잡하고 방대한 규모의 프레임워크다.
그렇다면 왜 스프링 프레임워크를 경량급 프레임워크라고 표현하는 걸까?
그렇게 표현하는 이유는 불필요하게 무겁지 않다는 의미다. 이는 예전의 EJB 같은 과도한 엔지니어링이 적용된 기술과 스프링을 대비시켜 설명하려고 사용됐던 표현이다. 당시 EJB는 기술에 대한 과도한 욕심으로 인해 개발환경과 운용서버, 개발과 빌드, 테스트 과정, 작성된 코드 모두를 매우 무겁고 복잡하게 만들었다. EJB가 동작하려면 고가의 느리고 무거운 자바 서버(WAS)가 필요했다.
그에 반해 스프링은 단순한 서버 환경인 톰캣(Tomcat) 등에서도 완벽하게 동작한다. 서블릿 컨테이너만으로 충분하기 때문에 굳이 EJB 컨테이너를 비롯해 복잡한 기능이 잔뜩 포함된 고급 WAS를 사용하지 않아도 되고, 그만큼 개발 과정도 단순해진다.
결과적으로 스프링은 EJB를 대표로 하는 기존의 많은 기술이 불필요하게 무겁고 복잡했음을 증명한 셈이고, 그런 면에서 군더더기 없이 깔끔한 기술을 가진 '경량급' 프레임워크라고 불리는 것이다. 스프링의 이런 특징은 개발환경과 서버에만 국한된 게 아니다. 경량급이라는 의미는 스프링을 기반으로 제작되는 코드가 기존 EJB나 여타 프레임워크에서 동작하기 위해 만들어진 코드에 비해 상대적으로 작고 단순하다는 뜻이기도 하다. 같은 기능을 수행하는 코드인데도 스프링 기반의 코드가 가벼운 이유는 코드에 불필요하게 등장하던 프레임워크와 서버환경에 의존적인 부분을 제거해주기 때문이다.
EJB와 WAS 같은 기술과 환경을 지원하기 위해 군더더기처럼 우겨넣어야 했던 반복되던 코드가 제거되고 나니 가장 단순하고 가벼운 코드만 남게 됐다.
자바 엔터프라이즈 개발을 편하게
스프링은 근본적인 부분에서 엔터프라이즈 개발의 복잡함을 제거해내고 진정으로 개발을 편하게 해주는 해결책을 제시한다. 편리한 애플리케이션 개발이란 개발자가 복잡하고 실수하기 쉬운 로우레벨 기술에 많은 신경을 쓰지 않으면서도 애플리케이션의 핵심인 사용자의 요구사항, 즉 비즈니스 로직을 빠르고 효과적으로 구현하는 것을 말한다.
EJB의 비전과 목표도 바로 이것이었다. 하지만 많은 기술이 불필요하고 무겁게 들어가서 복잡해지는 실수를 저질렀고, 이러한 EJB의 잘못된 접근 방법에 대한 대안을 모색하던 중에 스프링이 등장한 것이다.
따라서 스프링은 EJB가 궁극적으로 이루고자 했던 이 목적을 제대로 실현하게 해주는 프레임워크다.
오픈소스
오픈소스란 말 그대로 소스가 모두에게 공개되고, 특별한 라이선스를 취득할 필요 없이 얼마든지 가져다 자유롭게 이용해도 된다는 뜻이다. 소스를 자유롭게 열람하고 자신의 목적에 맞게 사용할 수 있을 뿐만 아니라, 필요하면 마음대로 수정할 수 있고, 수정된 제품과 소스를 다시 공개적으로 배포하는 자유도 허용된다.
스프링은 오픈소스 프로젝트 방식으로 개발되어왔다. 지금도 여전히 오픈소스 개발 모델과 오픈소스 라이선스를 가지고 개발되는 중이다. 스프링에 적용된 오픈소스 라이선스는 오픈소스 라이선스 중에서도 비교적 제약이 적고 사용이 매우 자유로운 편인 아파치 라이선스 버전 2.0이다. 아파치 라이선스에 따르면 스프링을 상업적인 목적의 제품에 포함시키거나 비공개 프로젝트에 자유롭게 이용해도 된다. 다만 스프링을 사용한다는 점과 원 저작자를 밝히고 제품을 패키징할 때 라이선스 정보를 포함시키는 등의 기본적인 의무사항을 따르면 된다.
오픈소스는 공개된 커뮤니티의 공간 안에서 투명한 방식으로 다양한 참여를 통해 개발되기 때문에 매우 빠르고 유연한 개발이 가능하다는 장점이 있다. 또한 오픈소스 제품을 사용하는 기업이나 사용자 입장에서 보자면 라이선스 비용에 대한 부담이 없다는 것도 큰 장점으로 꼽을 수 있다.
하지만 오픈소스 개발 방식의 가장 큰 취약점은 지속적이고 안정적인 개발이 계속될지가 불확실하다는 것이다. 스프링 같은 프레임워크는 기업의 가장 중요한 핵심 업무를 관장하는 엔터프라이즈 시스템의 개발에 사용된다. 그런데 기반이 되는 프레임워크가 버그가 있는 채로 방치된다거나, 지속적으로 안정적인 개발이 진행되지 못한다는 건 심각한 문제다.
스프링 개발자는 이런 오픈소스의 문제점과 한계를 잘 알고 있었다. 그래서 오픈소스 개발이라는 방법을 선택하기는 했지만 프레임워크 사용자에게 지속적인 신뢰를 줄 수 있도록 개발을 책임지고 진행할 수 있는 전문 기업을 만들었다. 이를 통해 스프링 핵심 개발자는 정규 업무시간에 오픈소스 개발에 전념할 수 있었고, 덕분에 안정적이고 전문화된 개발과 품질관리가 가능해졌다. 스프링을 개발하고 있는 '스프링소스'는 스프링의 창시자인 유겐 휠러(Juergen Hoeller)와 자바 엔터프라이즈 세계에서 손꼽히는 최상급 개발자들이 주축이 돼서 만든 회사다.
스프링은 오픈소스의 장점을 충분히 취하면서 동시에 오픈소스 제품의 단점과 한계를 잘 극복하고 있는 전문적이고 성공적인 오픈소스 소프트웨어라고 할 수 있다.
[Reference]