<aside>
💡 스프링은 자바 기반의 웹 어플리케이션을 만들 수 있는 프레임워크이며 스프링(Spring)을 더 쉽게 이용하기 위한 도구
</aside>
<aside>
❓ 사전지식
</aside>
스프링(Spring), 스프링 부트(Spring Boot)란? 개념 정리 - Easy is Perfect
스프링의 특징(IOC,DI)
- 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의 의존성이 줄어듭니다.
스프링 부트(Spring Boot)
스프링(Spring)을 더 쉽게 이용하기 위한 도구라고 볼 수 있습니다. 스프링 이용하여 개발을 할 때, 이것저것 세팅을 해야 될 요소들이 많습니다. 여러가지를 세팅해야되는 진입 장벽이 존재하여 Spring 을 처음 배우려는 사람들은 중도에 그만두는 경우가 많다고 합니다. Spring Boot는 매우 간단하게 프로젝트를 설정할 수 있게 하여, Spring 개발을 조금 더 쉽게 만들어주는 역할을 하고 있습니다.

- 위의 구조에서 나온 것과 같이 User는 스프링을 사용하기 위해서 이것저것 다양한 설정을 직접 해줘야된다는 문제점이 있습니다.
- 개발자가 실행환경이나 의존성 관리 등의 인프라 관련 등에 쓰는 에너지가 소요됩니다.
- 프로그래밍을 하는 데 있어 매우 중요한 비즈니스를 만들기 위한 프로그래밍에 조금 더 에너지를 투입할 수 있게 Spring의 많은 부분을 자동화하였고, 많은 개발자들이 현재 Spring Boot을 이용하여 개발을 진행하고 있습니다.
- 간단한 설정과 편리한 의존성 관리 & 자동 권장 버전 관리에 용이합니다.
- 서버 구동 시간이 절반 가까이 단축되었습니다.