스프링부트란?
스프링이란?
Spring이 무엇일까? 스프링은 자바 기반의 웹 어플리케이션을 만들 수 있는 프레임워크이다.
spring.io 사이트에서 확인하면 스프링 프레임워크는 현대 자바 기반의 엔터프라이즈 어플리케이션을 위한 프로그래밍 및 Configuration Model을 제공한다고 한다.
Python을 이용한 Django, Ruby를 이용한 Ruby on Rails, Javascript를 이용한 Node.js 기반의 웹 서버 개발과 같이 Java 개발자들은 Spring을 사용하여 웹 서비스를 만들 수 있다.
Spring 은 수많은 국내 기업과 해외 기업에서 매우 많은 서비스를 만들 때 사용되고 있는데,
자바 백엔드 개발자는 웹 애플리케이션을 개발할 때, 대부분 스프링을 사용하는만큼 유명하다.
스프링의 구조는 아래와 같은 구조로 이루어져있다.
스프링의 특징
Spring의 특징들은 아래와 같다.
- 자바 객체와 라이브러리들을 관리해주며, 톰캣과 같은 WAS 가 내장되어 있어 자바 웹 어플리케이션을 구동할 수 있다.
- 경량 컨테이너로 자바 객체를 직접 Spring 안에서 관리한다. 객체의 생성 및 소멸과 같은 생명 주기(Life cycle)을 관리하며, Spring 컨테이너에서 필요한 객체를 가져와 사용한다.
이때, 큰 특징으로 IOC와 DI가 있는데, IOC와 DI의 간단한 개념은 아래와 같다.
-
제어의 역전 (IOC, Inversion Of Control)
일반적으로 자바 프로그램에서는 각 객체들이 프로그램의 흐름을 결정하고 각 객체를 직접 생성하고 조작하는 작업(객체를 직접 생성하여 메소드 호출)을 했다.
즉, 모든 작업을 사용자가 제어하는 구조였다. 예를 들어 A 객체에서 B 객체에 있는 메소드를 사용하고 싶으면, B 객체를 직접 A 객체 내에서 생성하고 메소드를 호출하였다.
하지만 IOC가 적용된 경우, 객체의 생성을 특별한 관리 위임 주체에게 맡기는데, 사용자는 객체를 직접 생성하지 않고, 객체의 생명주기를 컨트롤하는 주체는 다른 주체가 된다.
즉, 사용자의 제어권을 다른 주체에게 넘기는 것을 IOC(제어의 역전) 라고 한다.
요약 : Spring의 Ioc란 클래스 내부의 객체 생성 -> 의존성 객체의 메소드 호출이 아닌, 스프링에게 제어를 위임하여 스프링이 만든 객체를 주입 -> 의존성 객체의 메소드 호출
스프링에서는 모든 의존성 객체를 스프링이 실행될때 만들어주고 필요한 곳에 주입해준다는 것이다.
-
의존성 주입 (DI, Dependency Injection)
어떤 객체(B)를 사용하는 주체(A)가 객체(B)를 직접 생성하는게 아니라 객체를 외부(Spring)에서 생성해서 사용하려는 주체 객체(A)에 주입시켜주는 방식이다.
사용하는 주체(A)가 사용하려는 객체(B)를 직접 생성하는 경우 의존성(변경사항이 있는 경우 서로에게 영향을 많이 준다)이 높아진다.
하지만, 외부(Spring)에서 직접 생성하여 관리하는 경우에는 A와 B의 의존성이 줄어든다.
스프링부트란?
스프링 부트(Spring Boot)는 스프링(Spring)을 더 쉽게 이용하기 위한 도구이다.
스프링 이용하여 개발을 할 때, 이것저것 세팅을 해야 될 요소들이 많은데, 과거에는 여러가지를 세팅해야되는 진입 장벽이 존재하여 초기 세팅도 매우 번거로웠다.
Spring Boot는 매우 간단하게 프로젝트를 설정할 수 있게 하여, Spring 개발을 조금 더 쉽게 만들어준다.
스프링부트 구조는 다음과 같다.
위의 구조에서 나온 것과 같이 User는 스프링을 사용하기 위해서 이것저것 다양한 설정을 직접 해줘야된다는 문제점이 있다.
개발자가 실행환경이나 의존성 관리 등의 인프라 관련 등에 쓰는 에너지가 소요된다.
스프링부트는 이러한 번거로움을 제거하고 중요한 부분에 조금 더 에너지를 투입할 수 있게 Spring의 많은 부분을 자동화하였고,
많은 개발자들이 현재 Spring Boot을 이용하여 개발을 진행하고 있다.
Comments