Java를 이용한 웹 서비스를 개발하기 위해서는 Spring 이라는 용어와 Spring Boot라는 용어를 많이 듣게 됩니다.
Spring과 Spring Boot이 각각의 개념과 차이점은 무엇일까요?
1. 스프링(Spring) 이란?
Spring아란 자바를 기반으로한 웹 어플리케이션을 만들수 있는 프레임워크입니다. spring.io 사이트에서 확인하면 스프링 프레임워크는 현대 자바 기반의 엔터프라이즈 어플리케이션을 위한 프로그래밍 및 Configuration Modal을 제공한다 라고 언급하고 있습니다.
Python(파이썬)을 이용해 Django(장고), Ruby(루비)를 이용한 Ruby on Rails, Javascript를 이용한 Node.js 기반의 웹 서버 개발과 같이 Java 개발자들은 Spring을 사용해 웹 서비스를 개발하고 제공할 수 있습니다.
Spring은 현재 수 많은 국내 기업과 해외 기업에서 매우 많은 서비스를 만들 때 사용되고 있고, 자바 백엔드 개발자들은 웹 애플리케이션을 개발할 때, 대부분 스프링을 사용하고 있다고 보시면 될 것 같습니다.
Spring의 특징은 아래와 같습니다.
- Spring은 자바 객체와 라이브러리를 동시에 관리해주면서, 톰캣과 같은 WAS 가 내장되어 있어 자바 웹 어플리케이션을 구동할 수 있습니다.
- Spring은 경량 컨테이너로써 자바 객체를 직접 Spring 안에서 관리합니다. 객체의 생성 및 소멸과 같은
생명 주기(Life Cycle)을 관리하고, Spring 컨테이너에서 필요한 객체를 가져와서 사용합니다. - 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의 의존성이 줄어듭니다.
- 제어의 역전(IOC, Inversion Of Control)
2. Spring Boot 란?
스프링 부트(Spring Boot)은 스프링(Spring)을 좀더 쉽게 이용하기 위한 도구라고 볼 수 있습니다.
스프링을 이용해서 개발을 진행할때, 이것 저것 세팅해야될 요소들이 많은데
여러가지를 세팅해야되서 약간의 진입 장벽이 존재하기에 Spring을 처음 배우는 사람들은 세팅 도중에
그만두는 사람도 있을 정도로 상당한 진입 장벽을 이루고 있습니다.
Spring Boot를 이용한다면 손쉽게 프로젝트를 설정할 수 있게 되면서 Spring 개발을 조금 더 쉽게
만들어주는 역할을 하고 있습니다.
위 구조에서 나온 것과 같이 User는 스프링을 사용하기 위해 이것저것 다양한 설정들을 직접 해줘야한다는
문제점이 발생하는데, 개발자가 실행 환경이나 의존성 관리 등의 인프라 관련 등에 쓰는 에너지가 상당히
소모됩니다.
프로그래밍에서 있어 매우 중요한 것은 비즈니스를 만들기 위한 프로그래밍에 조금 더 에너지를
투입할 수 있도록 하게 만든 것이 Spring에서는 많을 부분을 자동화하였고, 많은 개발자들이
현재에 Spring Boot를 이용해 개발을 진행하고 있습니다.
참고자료