기업에서 운영하는 웹 서비스에는 비즈니스 로직이라는 것이 있습니다. 비즈니스 로직이란, 기업이 제공하는 서비스를 코드로 구현한 것으로, 사용자의 요구사항을 해결하기 위한 실질적인 코드들을 의미합니다. 스프링이 등장하기 이전에는 비즈니스 로직을 구현하기 위해 기술 자체에 대한 공부를 추가적으로 해야만 했습니다. 비즈니스 로직을 구현하는 기술 자체가 복잡하고 어려웠기 때문입니다.
그러나, 스프링은 이전 기술에 비해 사용 방법이 상대적으로 덜 복잡합니다. 따라서, 개발 초기에 기본적인 설정과 적용시킬 기술들만 잘 선택을 해준다면, 기술보다는 애플리케이션의 로직 자체에 더 집중하여 비즈니스 로직을 구현할 수 있습니다.
스프링은 모든 사용자에게 무료로 열려 있습니다. 즉, 어떤 개인 및 기업도 스프링을 사용하여 웹 애플리케이션을 개발을 할 수 있으며, 필요하다면 스프링의 코드를 일부 수정하여 사용하여도 무관합니다. 이처럼 오픈소스로 프로젝트를 공개해 놓으면 여러 사람이 프로젝트의 코드를 사용해봄으로써 다양한 검증 과정을 거칠 수 있다는 장점이 있습니다.
하지만, 뚜렷하게 정해진 인원이 프로젝트의 개발과 관리를 맡는 것이 아니기 때문에, 프로젝트의 개발과 개선이 안정적이지 못하다는 단점 또한 가질 수밖에 없습니다. 기업에서 사용하는 프레임워크는 반드시 안정적이어야 합니다. 프레임워크의 불안정성은 서비스 제공의 불안정성으로 이어지고, 결국 기업의 수익 감소로 이어질 수 있기 때문입니다.
그러나, 스프링은 오픈소스 프레임워크이지만, 안정적인 개발과 개선이 보장됩니다. 현재 스프링은 오픈소스로 배포되어 누구나 이용할 수 있지만, 스프링소스(SpringSource)라는 IT기업에서 관리하고 있으며, 스프링의 소스 코드를 수정하거나 개선하는 일에는 스프링소스의 한정적인 인원만 참여할 수 있습니다.
스프링은 수십개의 세부 모듈 및 수십만줄의 방대한 코드로 이루어진 프레임워크입니다. 그럼에도 불구하고 어떻게 스프링을 정의할 때에 경량급이라는 수식어를 사용할 수 있는 것일까요? 스프링을 정의함에 있어 경량급이라 함은 기존에 스프링 대신 사용하던 기술들과 비교하여, 스프링을 사용했을 때에 개발자가 작성해야 할 코드가 상대적으로 단순하다는 것을 표현하기 위함입니다.
스프링이 등장하기 이전에는 EJB(Enterprise Java Bean)라는 기술이 주로 사용되었습니다. EJB 또한 EJB 이전에 사용되던 기술의 단점을 보완하여 이전 기술을 대체하기 위해 등장했지만, 그럼에도 여전히 불필요하게 복잡한 코드를 작성해야만 했습니다. 이에 따라, 많이 개발자들이 불필요한 코드들을 어떻게 걷어낼지, 어떻게 코드의 복잡성을 줄일 수 있을지 고민했고, 그 결과 탄생한 것이 스프링입니다.
따라서, 스프링을 정의함에 있어 경량급 애플리케이션 프레임워크라 함은, 스프링을 사용함으로써 기존 기술을 사용할 때에 불가피하게 작성해야만 했던 불필요하게 복잡한 코드를 제거하여 코드의 복잡성을 낮출 수 있음을 의미합니다.
애플리케이션 프레임워크가 무엇인지 이해하기 위해서는 프레임워크에 대해서 알아야 합니다.
여러분이 자동차를 만든다고 가정해봅시다. 이 때, 처음부터 끝까지 자동차의 모든 것을 손수 만드는 것보다는, 자동차 회사에서 자동차의 차체를 사와서 차체에 각 부품을 만들어 붙이는 것이 훨씬 더 편리할 것입니다. 즉, 자동차 회사에서는 미리 자동차의 차체를 만들어뒀고, 여러분은 그것을 가져다가 사용하기만 하면 되는 것입니다. 여기에서 자동차의 차체에 해당되는 것이 바로 프레임워크입니다. 웹 개발에 있어 프레임워크란, 어떠한 목적을 쉽게 달성할 수 있도록 해당 목적과 관련된 코드의 뼈대를 미리 만들어둔 것을 의미합니다.
그렇다면 애플리케이션 프레임워크는 무슨 의미일까요? 일반적으로 프레임워크는 특정 업무 분야 혹은 하나의 기술에 집중합니다. 즉, 어떠한 특화된 목적을 편리하게 달성할 수 있게 하기 위해 만들어집니다. 반면, 애플리케이션 프레임워크는 특정 업무 분야 및 특정 기술이 아니라, 애플리케이션 개발에 필요한 모든 과정에 집중합니다. 다시 말해, 애플리케이션 프레임워크는 애플리케이션을 개발하는 데에 있어 필요한 모든 업무 분야 및 모든 기술과 관련된 코드들의 뼈대를 제공합니다.
그렇다면 스프링 프레임워크의 특징에 대해 살펴보도록 하겠습니다.
스프링의 가장 큰 특징은 POJO 프로그래밍을 지향한다는 것입니다. 여기에서 POJO란, Plain Old Java Object, 즉 순수 Java만을 통해서 생성한 객체를 의미합니다. POJO가 무엇인지 조금 더 깊게 이해하기 위해서는 POJO의 JO보다는 PO에 집중해야 합니다. 순수 Java 만을 통해서 객체를 만든다는 것이 어떤 의미를 가지는 것일까요?
순수 Java 만을 사용한다는 것은 Java 및 Java의 스펙에 정의된 기술만 사용한다는 의미입니다. 즉, 어떤 객체가 외부의 라이브러리나 외부의 모듈을 가져와서 사용하고 있다면, 그 객체는 POJO라고 할 수 없습니다. POJO는 말 그대로, 다른 기술을 사용하지 않는 순수한 Java만을 사용하여 만든 객체인 것입니다.