Java 언어와 Servlet/JSP를 학습하면 Spring Framework에 대해 학습합니다.
그럼 스프링이란 무엇이고 왜 등장하게 되었는지 알아보겠습니다.
Spring | Home
Cloud Your code, any cloud—we’ve got you covered. Connect and scale your services, whatever your platform.
spring.io
1. Spring이란?
스프링을 한마디로 정의하기는 쉽지 않습니다. 간단하게 정의하기에는 핵심적인 특징이 있기 때문입니다. 또한 스프링에 대한 정의나 책을 본다고 해서 쉽게 이해되지 않습니다. 그렇다고 스프링을 얕게 공부하면 스프링의 본질적인 핵심과 기능을 놓치기 쉽습니다.
그래서 이번 기회에 Spring에 대해 정확한 이해와 가치를 알려드리겠습니다. 스프링에 대해 제대로 이해하고 스프링에서 제공하는 기능을 잘 사용하면 Java가 가진 객체지향의 특징을 강력하게 살릴 수 있습니다.
스프링에 대해 가장 널리 알려진 정의는 다음과 같습니다.
자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 프레임워크
이 정의에 모든 것이 함축되어 있지만 제대로 이해가 되지 않을 것입니다. 그래서 더 자세히 차근차근 알아보겠습니다.
2. Spring의 역사
스프링 프레임워크는 2004년 3월에 출시되었습니다. 스프링이 처음 나올 당시에는 Java로 엔터프라이즈 애플리케이션을 개발하는 가장 일반적인 방법은 EJB를 사용하는 것이었습니다.
하지만 EJB가 가진 비싼 비용, 개발의 복잡함, 속도가 느림 등 치명적인 문제 때문에 많은 개발자들이 고통스러워했습니다. 또한 EJB에 의존적으로 개발을 해야 했기 때문에 객체 지향의 특성을 살릴 수 없었습니다.
이를 해결하기 위해 로드 존슨(Rod Johnson) 이라는 개발자가 EJB를 사용하지 않고도 쉽고 간편하게 애플리케이션 개발을 할 수 있는 소프트웨어 모델에 관한 책을 출판했고, 그 책에 있는 내용이 스프링 프레임워크의 기반이 되었습니다.
3. Spring의 주요 특징
● POJO(Plain Old Java Object) 기반의 구성
스프링은 경량급 프레임워크이지만, 내부에는 객체 간의 관계를 구성할 때 별도의 API를 사용하지 않는 POJO 구성만으로 동작하게 되어있습니다. 쉽게 말해서 Java에서 배운 그대로 스프링에서 사용할 수 있는 큰 장점이 있는 것입니다.
POJO가 중요한 이유는 개발자가 특정한 라이브러리나 컨테이너 기술에 의존하지 않고 개발이 가능하다는 것입니다. 따라서 개발자는 생산성도 좋고, 코드에 대한 테스트 작업 또한 유연하게 할 수 있는 장점이 생깁니다.
● 의존성 주입(Dependency Injection)
의존성 주입 또는 DI란 하나의 객체가 다른 객체의 의존성을 제공하는 것입니다. '의존성'은 예를 들어 서비스로 사용할 수 있는 객체입니다. 클라이언트가 어떤 서비스를 사용할 것인지 지정하는 대신, 클라이언트에게 어떤 서비스를 사용할 것인지를 말해주는 것입니다. '주입은 의존성을 사용하려는 객체(클라이언트)로 전달하는 것을 의미합니다. 서비스는 클라이언트 상태의 일부입니다.
쉽게 말해서 의존성 주입은 '어떤 객체가 필요한 객체를 외부에서 주입한다'는 뜻입니다. 주입받는 입장에서는 어떤 객체인지 신경 쓸 필요가 없기 때문에 편리합니다. 따라서 생산성이 향상되고, 수정 비용이 절감됩니다.
● AOP(Aspect Oriented Programming)
좋은 개발 환경을 위해서는 개발자는 비즈니스 로직에만 집중해야 합니다. 가장 쉬운 방법으로는 반복적인 코드를 제거하는 것입니다. 스프링은 반복적인 코드를 줄이고 핵심 비즈니스 로직에만 집중할 수 있는 방법을 제공합니다.
AOP는 관점 지향 프로그래밍으로, OOP를 대신하는 개념이 아니라 OOP의 강점을 더 끌어올리게 해줍니다. 기능을 비즈니스 로직과 공통 모듈로 구분한 후에 개발자의 코드 밖에서 필요한 시점에 비즈니스 로직에 삽입하여 실행되도록 합니다. 따라서 OOP에서는 공통적인 기능을 각 객체의 횡단으로 입력했다면, AOP는 공통적인 기능을 종단간으로 삽입할 수 있습니다.
● IoC(Inversion of Control)
IoC는 제어의 역전으로 불리며 말 그대로 메서드나 객체의 호출 작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미합니다. 대부분의 프레임워크에서 사용하는 방법으로, 개발자는 필요한 부분을 개발해서 끼워 넣기의 형태로 개발하고 실행합니다. 프레임워크가 이러한 구조를 가지기 때문에, 개발자는 프레임워크에 필요한 부품을 개발하고, 조립하는 방식의 개발을 합니다.