[개념 콕] Spring과 Spring Boot의 차이

내일배움캠프 수료생이 개발에 꼭 필요한 핵심 개념만 콕 집어 드립니다.
May 31, 2024
[개념 콕] Spring과 Spring Boot의 차이
✍🏼
개발을 시작하시는 여러분, 정보가 너무 많고 배워야 할 것도 산더미라 어디서부터 시작해야 할지 막막하신가요? 내일배움캠프 수료생들이 4개월 동안 배운 엄선된 핵심 개념을 직접 정리해서 알려 드립니다. 공부하다 막히거나 헷갈리는 개념이 있다면 개념 콕으로 정리해보세요.
 
백엔드를 공부하다 보면 스프링(Spring)과 스프링 부트(Spring Boot)라는 용어를 자주 접하게 됩니다. 그러나 이 둘의 닮은 이름만큼 이 둘을 헷갈려하시는 분들이 있는데요. 이번 아티클에서는 스프링과 스프링 부트의 차이를 이해해봅시다.
 

스프링(Spring)이란?

Spring makes programming Java quicker, easier, and safer for everybody. Spring’s focus on speed, simplicity, and productivity has made it the world's most popular Java framework. Spring은 자바 프로그래밍을 모든 사람들에게 더 빠르고, 더 쉽고, 더 안전하게 만들어줍니다. Spring 속도, 단순성, 그리고 생산성에 집중한 자바를 세계에서 가장 인기 있는 프레임워크로 만들었습니다. 출처: Spring 공식 홈페이지
 
Spring은 어떤 특정한 프레임워크가 아니라 여러가지 기술들의 모음입니다. 아래 그림과 같이 Spring framework, 여러 Spring 기술(프로젝트)들을 편리하게 사용할 수 있도록 도와주는 Spring boot를 포함한 다양한 기술들이 스프링 안에 존재합니다. 그러면 이 스프링을 왜 만들어졌고, 우리는 왜 배워야 할까요
notion image
 

스프링(Spring)이 만들어진 이유

스프링을 한 문장으로 정리하면 ‘보다 나은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크’ 입니다. 스프링은 객체 지향 언어인 자바 언어 기반의 프레임워크이고, 객체 지향 언어의 특징을 잘 살려주는 프레임워크라는 것이 스프링의 핵심입니다. 스프링은 엔터프라이즈 자바빈즈(Enterprise JavaBeans, EJB)* 개발의 복잡성을 해결하기 위해서 탄생한 프레임워크라는 것이죠.
스프링이 등장하기 전에는 애플리케이션의 업무 로직을 담당하는 EJB가 Java의 표준 기술이었습니다. 엔터프라이즈 자바빈즈(Enterprise JavaBeans, EJB)란 기업환경의 시스템을 구현하기 위한 서버측 컴포넌트 모델로 애플리케이션의 업무 로직을 가지고 있는 서버 애플리케이션입니다. EJB 사양은 Java EE의 자바 API 중 하나로, 주로 웹 시스템에서 JSP는 화면 로직을 처리하고, EJB는 업무 로직을 처리하는 역할을 합니다. 그러나 EJB는 복잡한 아키텍처, 많은 기술들의 조합, 그리고 긴 개발 주기 등의 문제로 인해 개발과 유지보수가 어려웠습니다. 또한 EJB를 사용하게 되면 EJB를 상속받아 의존적으로 개발하게 되면서 Java의 객체 지향적 특성을 지킬 수 없게 되는 문제가 발생했죠. 따라서 EJB의 문제점을 해결하면서 객체 지향적 특성을 보존하는 Spring이 탄생한 것입니다.
그렇다면 스프링이 어떻게 객체 지향적인 특징을 지켜줄 수 있는 걸까요?
 
notion image
 
 

스프링(Spring)과 객체 지향 메커니즘

스프링은 DI와 DI 컨테이너를 통해 객체 지향 프로그래밍의 핵심 원칙을 지켜주고, 개발자가 보다 객체 지향적인 웹 애플리케이션을 개발할 수 있도록 도와줍니다.

DI(Dependency Injection)

DI(Dependecy Injection)는 자바 객체 간의 의존관계를 형성하고 의존성을 주입하는 것을 말합니다. 이를 통해 객체 간의 결합도를 낮추고 유연성을 높일 수 있습니다. 하지만 DI를 구현하기 위해서는 객체 간의 의존관계를 관리하고 주입해주는 역할이 필요한데, 이것이 바로 DI 컨테이너의 역할입니다.

DI 컨테이너

DI를 구현하기 위해서는 객체 간의 의존관계를 관리하고 주입해주는 역할이 필요한데, 이것이 바로 DI 컨테이너의 역할입니다. 즉, 우리가 작성한 소스코드 내부가 아닌 외부의 설정 파일을 통해 정의되는 방식이라고 할 수 있습니다. 덕분에 클라이언트 코드 변경없이 기능을 확장하고 쉽게 부품을 교체하듯이 개발할 수 있게 된 것이죠.
 
 

Spring Boot란?

Spring Boot는 Spring 어플리케이션을 간편하고 빠르게 만들 수 있도록 도와주는 프레임워크입니다. Spring의 불편 사항들을 보완하면서 Spring의 다양한 프로젝트와 긴밀히 통합되어 있어, Spring 생태계를 효과적으로 활용할 수 있습니다.
 

Spring Boot의 장점

1. 간결한 설정

기존에 Spring Framework를 사용하여 서버를 개발할 때는 XML 파일을 통해 다양한 설정(데이터베이스 연결, 뷰 리졸버, 로깅 등)을 해야 했습니다. 이로 인해 설정 파일이 복잡해지고 길어지는 문제가 있었습니다. 하지만 Spring Boot에서는 application.properties 또는 YAML 파일을 사용하여 간결하고 직관적인 설정이 가능합니다. 실제로 Spring Boot를 사용하면 설정 코드의 양이 크게 줄어들어 개발자의 부담을 덜어주며 개발 생산성 향상에 큰 도움이 됩니다.
 

2. 내장 서버 탑재

Spring Boot는 Tomcat, Jetty, Undertow와 같은 웹 서버를 내장하고 있어, 별도의 서버 설치와 설정 없이도 애플리케이션을 실행할 수 있습니다. 이는 개발과 테스트 과정을 단순화하고 빠르게 만들어 줍니다. 또한, Spring Boot 애플리케이션은 실행 가능한 JAR 파일로 패키징되어 모든 의존성 라이브러리를 포함하고 있기 때문에, 외부 서버 없이도 독립적으로 실행될 수 있습니다. 이러한 특징은 애플리케이션 배포와 관리를 매우 간편하게 만들어 줍니다.
 

3. 의존성 관리

서버 개발 과정에서는 다양한 서드 파티 라이브러리(Spring이나 Java에서 기본적으로 제공하지 않는 외부 라이브러리)를 사용하게 됩니다. 이때 라이브러리의 수가 많아지고 버전 호환성 문제로 인해 라이브러리 간 충돌이 발생하는 경우가 많았습니다. Spring Boot는 이러한 문제를 해결하기 위해 의존성 관리 기능을 제공합니다. Spring Boot의 스타터 의존성(Starter Dependencies)은 관련된 라이브러리들을 함께 묶어 버전 호환성을 보장하고, 개발자가 필요한 의존성을 쉽게 추가할 수 있도록 도와줍니다. 이를 통해 개발자는 의존성 관리에 소요되는 시간과 노력을 크게 줄일 수 있습니다.
 
 
결론적으로 스프링 부트(Spring boot)는 스프링 프레임워크를 기반으로 만들어진 도구이므로, 엄밀히 말하면 스프링과 별개의 개념이 아닙니다. 스프링 부트는 스프링 프레임워크를 더욱 쉽고 편리하게 사용할 수 있도록 도와주는 역할을 합니다.
 
 
 

내일배움캠프는 개발에 필요한 핵심만 배웁니다

지금까지 꼭 필요한 개발 지식에 대해 알아보았습니다. 내일배움캠프에서는 전문가들이 선별한 핵심 개발 지식으로 개발 공부도, 취업도 보다 효율적으로 할 수 있는데요. 국내 유수의 IT기업 출신 튜터님들과 실습 위주의 독보적인 커리큘럼으로 개발자 취업을 체계적으로 준비해보세요. 내일배움캠프 4개월, 여러분 인생의 가장 큰 터닝 포인트입니다.
 
 
참고문헌
 
 
CREDIT
글 | 장동하 내일배움캠프 수료생, 손창현 내일배움캠프 수료생 편집 | 정효재 팀스파르타 에디터
 
 

취업 준비, 어디서부터 시작해야 할지 모르겠다면?

 
🧐비전공자인데 IT 업계 취업할 수 있을까?
😟프로젝트 경험이 부족한데, 어떻게 준비해야 할까?
🥺IT 기업으로 이직하고 싶은데 뭐부터 시작해야 할까?
 
이런 고민을 하고 있다면, 내일배움캠프의 IT 취업 컨설팅을 받아보세요.
취업 코칭 전문가들이 여러분의 고민을 해결해 드립니다.
 
다음 링크에 이메일을 입력하시면 메일로 1:1 커리어 상담권과 취준 자료집을 보내드릴게요.
 
 
 
Share article
Subscribe to our newsletter

내일배움캠프 블로그