Spring을 왜 사용하는가?

프레임 워크란??
단어 그대로 뼈대나 근간을 이루는 코드들의 묶음입니다. 의역하자면, 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것이다.
스프링 프레임 워크
- 스프링은 엔터프라이즈 비지니스 컴포넌트를 개발할 수 있는 자바 프레임워크입니다.
스프링이 등장하기 전까지 자바 기반의 엔터프라이즈 애플리케이션은 EJB(Enterprise Java Beans)로 개발되었습니다.
이 EBJ 기술은 많은 기능과 장점에도 불구하고 복잡한 스펙, 개발 및 유지보수의 불편함, 높은 난이도 등 여러 단점 때문에
스프링의 등장 이후로는 거의 사용되지 않는 기술이 되어버렸습니다.
스프링 프레임 워크 특징
스프링의 대표되는 특징 => 제어의 역행(IOP) + 관점 지향 프로그래밍(AOP) = 경량의 컨테이너 프레임워크
📌 관점 지향 프로그래밍
좋은 개발환견의 중요원칙은 개발자가 비지니스 로직에만 집중할 수 있게 하는 것입니다. 그 중 하나는 반복되는 코드의 제거입니다. 대부분의 시스템이 공통으로 가지고 있는 보안이나 로그, 트랜잭션과 같이 비지니스 로직은 아니지만, 반드시 처리가 필요한 부분을 스프링에서는 횡단 관심사라고 합니다. AOP는 이러한 횡단 관심사를 모듈로 분리하는 프로그래밍 패러다임입니다. 스프링은 AOP를 AspectJ의 문법을 통해 작성할 수 있는데, 이를 통해 개발자는 핵심 비즈니스 로직에만 집중해서 코드를 개발할 수 있게 되었고, 프로젝트마다 다른 관심사를 적용할 때 코드의 수정을 최소화시킬 수 있었으며, 유지보수가 수월한 코드를 구성할 수 있습니다.
📌 트랜잭션
데이터베이스를 이용할 때 트랜잭션 처리에 대해 신경이 많이 쓰이곤 합니다. 스프링은 이런 트랜잭션 관리를 어노테이션 등으로 설정할 수 있기 때문에 상황에 맞는 코드를 작성할 필요가 없도록 설계되었습니다.
📌 의존성 주입
의존성이란 하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없음을 의미합니다. 주입은 말 그대로 외부에서 밀어넣는 것을 의미합니다. 합쳐서, 한 객체가 필요한 객체를 외부에서 밀어 넣는 것을 의존성 주입이라고 합니다.
📌 제어의 역행 (Inversion of Control, IoC)
기존에는 객체의 의존관계를 개발자가 직접 처리해주곤 했습니다.
이는 객체와 객체 간 높은 결합도를 지닌 상태가 되도록 하는 주된 요인이었습니다.
하지만 스프링에서는 객체 생성과 의존 관계를 자바 코드로 직접 처리하는 것이 아니라 컨테이너가 대신 처리하기 때문에
소스에 의존관계가 명시되지 않아 낮은 결합도를 유지해 유지보수가 용이해집니다.
📌 경량
우선 스프링은 가볍습니다.
하나 이상의 JAR 파일로 구성된 모듈이 모여 구성된 스프링은 몇 개의 JAR 파일만 있으면
개발과 실행이 모두 가능하기 때문에 애플리케이션의 배포 역시 빠르고 쉽게 할 수 있습니다.
또한 스프링은 클래스를 구현하는 데 특별한 규칙이 없는 단순하고 가벼운 객체인
POJO(Plain Old Java Object) 형태의 객체를 관리하기 때문에 가볍다고 할 수 있습니다.