Home Spring 기본 특성
Post
Cancel

Spring 기본 특성

Spring이란?

스프링이란 자바 기반의 웹 어플리케이션을 구현하기 위해 필요한 기술들을 지원하는 프레임워크이다.

그리고 스프링부트는 스프링 내에서 개발자가 프로젝트의 성격에 맞게 구성해야 할 부분을 자동화해주면서 편리함을 제공하는 서비스라고 할 수 있다.

  • 스프링 : 프레임워크, 구조물의 개념
  • 스프링부트 : 구조물을 구축하는데 필요한 재료를 편리하게 가져올 수 있도록 추가적인 기능을 수행
    ex) 내장서버, 라이브러리 종속성 제공, 자동 구성 등

스프링이 생겨난 배경

순수 자바를 통해서는 OCP와 DIP를 지키기 힘들다. 지키는 구조를 갖추더라도 배보다 배꼽이 커지는 모양을 가지게 된다. 이 두 원칙을 지키기 위한 구조를 작성하다보면 결국 스프링을 만들게 된다.

즉, 스프링은 OCPDIP를 보장하여 완벽한 OOP을 구현하기 위한 기능을 지원하는 프레임워크라고 할 수 있다.

스프링의 특징

IOC(제어의 역전)

  • 객체를 사용자가 직접 생성하여 관리하는 것이 아닌 스프링이 생성하는 객체를 호출하여 선언된 메소드나 필드를 사용하는 구조

DI(의존성 주입)

  • A 객체에서 B객체를 생성하는 것이 아닌 외부에서 생성된 B객체를 A객체 생성시 호출하여 주입시키는 것을 의미
  • 주입되어지는 객체를 빈(bean)이라 부르며 IOC되어 스프링에 의해 관리되어지는 객체들을 의미한다.
1
2
3
4
5
6
7
8
9
public class OrderServiceImpl implements OrderService {
                
    // DI 미적용 시 -> 인터페이스는 물론, 생성자로 인해 구현체도 함께 의존하는 구조
    private final OrderRepository  orderRepository = new OrderRepositoryImpl();
                
    // DI 적용 시 -> 인터페이스의 존재만 인지, 해당 구현체의 객체는 스프링에서 생성및 관리하며 주입시켜준다.
    private final OrderRepository orderRepository;

}

클래스 파일에서 구현체와 관련된 코드를 모두 제거하고 객체 생성 및 구성에 대한 관리를 담당하는 클래스를 따로 둔다(Configuration 객체). 이렇게 생성된 객체들은 스프링 컨테이너에 빈 객체로 등록이 되고 스프링에서 자동으로 라이프사이클을 관리해준다. 그리고 객체간의 의존관계는 클래스 파일들에서 선언된 의존관계를 기준으로 엮어준다.(이 과정이 DI라고 할 수 있다.)

이렇게 두 가지 기능을 스프링이 제공해주면서 각각의 클래스 파일 내에 객체 생성에 대한 코드를 제거할 수 있고 각각의 객체들은 자신들이 주입받은 객체에 대한 존재는 모르고 단순히 인터페이스 타입만을 즉, 역할에 대한 정보만 아는 채로 메세지를 주고 받게 된다. 그렇기 때문에 인터페이스를 구현한 구현체, 클래스의 존재를 모르더라도 정상적으로 동작할 수 있고, 클래스를 교체하더라도 동작하는데 있어 문제가 생기지 않는다.

또한 클래스 코드와는 별개로 객체를 생성하고 관계성만 주입을 하기 때문에 각각의 객체들도 정해진 관계성에 맞게 동작하는 것에만 집중 할 수 있다.

즉 클래스 선언부와 객체 생성 및 관리부를 분리함으로써 각각의 역할과 책임을 분리할 수 있게 되었다.

  • 클래스 파일 → 설계도, 클래스들 간의 관계 및 구현 방법에 대한 명시
  • 빈 객체 → 설계도에 명시된 관계에 맞게 동작만 수행

이렇게 스프링에서 제공해주는 기능을 가지고 개발을 하면 기존에 위배되었던 OCP, DIP를 지키면서 작업을 할 수 있게 된다.

This post is licensed under CC BY 4.0 by the author.

SOLID 원칙

[soldout] 서버 확장에 따른 session 구성 방법에 대한 고민