
출처: 인프런 고승조님의 블로그
스프링(Spring)은 프레임워크이며, 스프링 부트(Spring Boot)는 스프링 프레임워크를 기반으로 한 도구입니다. 스프링은 설정 파일을 작성해야 하지만, 스프링 부트는 자동 설정을 제공하여 간편하게 개발할 수 있습니다. 또한, 스프링 부트는 내장 서버를 제공하여 쉽게 웹 애플리케이션을 실행할 수 있습니다. Spring은 스프링 프레임워크를 보다 세밀하게 제어하고자 하는 경우에, Spring Boot는 빠르고 간단하게 스프링 애플리케이션을 개발하고자 하는 경우에 사용됩니다.
스프링, 스프링 부트의 차이는 이렇다.
Spring은 개발자에게 자유도가 굉장히 높다. 이런 Spring을 보다 빠르고 쉽게 시작할 수 있도록 제공하는 프레임워크가 바로 Spring Boot이다.
그렇다면 왜? 우리나라에서는 왜 Backend Framework으로 Spring을 가장 선호할까?

출처: 요즘 IT
취업 시장 트렌드를 보았을 때, Java 언어의 Spring 프레임워크를 사용하는 기업이 매우 많다.
이유를 먼저 알아보자.
Spring의 유연한 라이브러리는 전 세계 개발자들의 신뢰를 받고 있습니다.
Spring은 스트리밍 TV, 온라인 쇼핑 또는 수많은 혁신적인 솔루션 등 매일 수백만 명의 최종 사용자에게 즐거운 경험을 제공합니다.
또한, Spring은 Alibaba, Amazon, Google, Microsoft 등을 포함하여 모든 기술 분야의 널리 알려진 기업에서도 사용합니다.
Spring의 유연하고 포괄적인 확장 및 타사 라이브러리 세트를 통해 개발자는 상상할 수 있는 거의 모든 애플리케이션을 구축할 수 있습니다.
Spring Framework의 Inversion of Control (IoC) 및 Dependency Injection (DI) 기능은 광범위한 기능과 기능을 위한 기초를 제공합니다.
웹을 위한 안전하고 반응성이 높은 클라우드 기반 마이크로서비스를 구축하든, 기업을 위한 복잡한 스트리밍 데이터 흐름을 구축하든, Spring은 도움이 될 수 있는 도구를 갖추고 있습니다.
쉽게 말하면, 개발자가 직접 제어하던 흐름을 프레임워크(Spring)에게 넘기는 것입니다.
software engineering에서 inversion of control (IoC)은 컴퓨터 프로그램의 custom 부분이 외부 소스(예: 프레임워크, 여기에서는 Spring)로부터 제어 흐름을 받는 설계 원리입니다.
"inversion"이라는 용어는 역사적인 개념으로, 이러한 설계를 가진 소프트웨어 아키텍처는 절차적 프로그래밍과 비교하여 제어를 "inversion"합니다.
- 전통적인 procedural programming(절차적 프로그래밍)에서는 개발자가 프로그램의 커스텀 코드를 만들고 재사용 가능한 라이브러리를 호출하여 일반적인 작업을 처리하지만,
- IoC 방식은 외부 코드 또는 프레임워크가 대신 세부적인 작업을 처리합니다. 개발자는 단지 필요하다고 표현하는 것입니다. 복잡한 객체를 생성하거나, 이 객체의 생명주기를 관리하는 것을 Spirng이 처리해주기 때문에 개발자는 비즈니스 로직에 집중할 수 있습니다.
이벤트 기반 프로그래밍은 종종 IoC를 사용하여 구현되므로 사용자 지정 코드는 이벤트 처리에만 신경 쓰면 되고, 이벤트 루프와 이벤트/메시지 디스패치는 프레임워크나 런타임 환경에서 처리됩니다. 웹 서버 애플리케이션 프레임워크에서 디스패치는 일반적으로 라우팅이라고 하며, 핸들러는 엔드포인트라고 할 수 있습니다.
쉽게 말하면, 필요한 객체를 개발자가 직접 만들지 않고, 프레임워크(Spring)이 넣어주는 것입니다.
software engineering에서 dependency injection은 객체나 함수가 내부적으로 생성하는 것이 아니라 필요한 다른 객체나 함수를 수신하는 프로그래밍 기법입니다.
이는 객체를 구성하고 이를 사용하는 문제를 분리하여 느슨하게 결합된 프로그램을 만드는 것을 목표로 합니다.느슨한 결합은 객체간 의존성을 줄여 코드 변경이 유연해질 수 있습니다.
또한 객체 생성 로직과 사용 로직을 분리하여 유지보수에 용이합니다.패턴은 주어진 서비스를 사용하고자 하는 객체나 함수가 이러한 서비스를 구성하는 방법을 알 필요가 없도록 합니다. 대신, 수신된 "클라이언트"(object or function)는 외부 코드(injection)에 의해 종속성을 제공받지만, 이를 인식하지 못합니다.
DI는 암묵적인 의존성을 명확히 하며 다음 문제를 해결하는 데 도움이 됩니다.
- How can a class be independent from the creation of the objects it depends on?
- How can an application, and the objects it uses support different configurations?
Spring Boot는 Java 프로그래밍 작업에 접근하는 방식을 혁신하여 경험을 획기적으로 간소화합니다. Spring Boot는 애플리케이션 컨텍스트와 자동으로 구성된 임베디드 웹 서버와 같은 필수 요소를 결합하여 마이크로서비스 개발을 더욱 빠르게 만듭니다.
저희 엔지니어들은 성능에 깊은 관심을 가지고 있습니다. Spring을 사용하면 기본적으로 빠른 시작, 빠른 종료, 최적화된 실행을 확인할 수 있습니다. 점점 더 많은 Spring 프로젝트가 반응형(비차단) 프로그래밍 모델을 지원하여 효율성을 더욱 높이고 있습니다. 개발자 생산성은 Spring의 강점입니다.
Spring Boot는 개발자가 다른 경쟁 패러다임에 비해 훨씬 적은 노력과 쉬운 작업으로 애플리케이션을 구축할 수 있도록 도와줍니다. 임베디드 웹 서버, 자동 구성, 'fat jars'을 통해 빠르게 시작할 수 있으며, LiveReLoad in Spring DevTools와 같은 혁신을 통해 개발자는 그 어느 때보다 빠르게 실행할 수 있습니다. Spring Initializr를 사용하면 몇 초 만에 새로운 Spring 프로젝트를 시작할 수도 있습니다.
Spring은 보안 문제를 신속하고 책임감 있게 처리한 입증된 실적을 보유하고 있습니다. Spring 커미터는 보안 전문가와 협력하여 보고된 취약점을 패치하고 테스트합니다.
스프링 커뮤니티는 거대하고 전 세계적이며 다양하며 완전한 초보자부터 노련한 전문가까지 모든 연령대와 역량을 아우르는 커뮤니티입니다.
스프링에서 공식적으로 말하는 스프링의 강점이다.
스프링을 써야만 하는 이유
강력한 커뮤니티, 확장성, 보안 측면이 가장 크지 않을까 추측해본다.