본문 바로가기
백엔드

sping 과 springBoot의 차이점

by 소프트웨어 학부생의 개발 도전기 2024. 9. 5.

Java는 1991년도에 개발되었음에도 현재 거의 30년 이상 지난 지금까지 대표적인 프로그래밍 언어로 사용되고 있다.

하지만 개발 연도가 오래된 만큼 다른 프로그래밍 언어들보다 속도가 느리고 코드 작성이 어렵다는 단점을 가지고 있다.

 

위와같은 단점을 보완하기 위해 여러 프레임워크(Framework)가 개발되었다.

 

오늘날 이르러 Java의 대표적인 백엔드 개발 프레임워크(Framework)로 사용하는 Spring과 Spring boot에 대해 차이점을 작성해보겠다. 둘 다 자바 기반의 프레임워크이지만, 목적과 사용 용도가 다르다.

 

1. Spring 이란?

스프링은 자바 애플리케이션 개발에 필요한 여러 핵심 기능(*의존성 주입, *AOP, *트랜잭션 관리) 등 을 제공하는 포괄적인 프레임워크이다. 웹 애플리케이션, 비즈니스 로직, 데이터 액세스 계층 등을 포함한 다양한 계층의 애플리케이션을 개발할 수 있다. 

Spring 에서는 개발자가 직접 설정 파일을 작성하여 스프링 컨테이너를 구성하고, 필요한 빈 객체를 등록하고, 빈 객체 간의 의존성을 설정해야 한다. Spring은 특정한 구성을 위해 추가적인 라이브러리와 설정이 필요하다.

 

스프링에는 대표적인 4가지 특징이 있다.

 

  • 제어 역전 
    스프링은 객체의 생명 주기 및 의존성 관리를 담당하는 IoC 컨테이너를 제공한다. 개발자는 객체의 생성과 관계 설정을 스프링에 위임할 수 있으며, 스프링 컨테이너가 객체의 생명 주기를 관리하고 필요한 의존성을 주입한다.
  • 의존성 주입
    스프링은 의존성 주입을 통해 객체 간의 관계를 설정한다. 의존성 주입은 애플리케이션의 결합도를 낮추고 유연성과 테스트 용이성을 향상시킨다.
  • AOP지원
    스프링은 AOP를 지원하여 애플리케이션의 핵심 비즈니스 로직과 부가적인 기능(로깅, 트랜잭션 관리)을 분리하여 모듈화할 수 있다.
  • 웹 개발 지원
    스프링은 웹 애플리케이션 개발을 위한 다양한 기능과 웹 프레젠테이션 계층을 제공한다. 스프링 MVC는 유연하고 확장 가능한 웹 애플리케이션을 개발할 수 있는 MVC(Model-View-Controller) 아키텍처를 지원한다.

하지만 이러한 장점 외에도 단점이 있다. 스프링은 강력한 기능을 제공하기 위해 많은 설정과 구성이 필요하다. 이는 초기 설정의 복잡성을 증가시킬 수 있고, 초보자에게는 어렵게 느껴질 수 있다. 또한 의존성 관리 문제로 여러 의존성과 그들의 버전을 관리하는 것이 복잡할 수 있다. 

스프링 레거시에서는 의존성 주입(Dependency Injection)을 구현하기 위해 XML설정 파일에 많은 수의(Bean)을 등록해야 한다. 이는 코드의 가독성을 떨어뜨리고, 의존성 관리가 어려워질 수 있다.

 

이와 같은 스프링의 문제점을 해결해 주기 위해 스프링의 프레임워크들이 개발되었다. 스프링 프레임워크 중 대표적인 Spring Boot에 대해 알아보자.

 

 

2. Spring Boot

스프링 부트는 스프링 프레임워크의 하위 프로젝트로, 스프링 애플리케이션을 더 쉽고 빠르게 개발할 수 있도록 돕는다. 기본적으로 스프링 설정을 자동화해주고, 여러 가지 편의 기능을 제공한다. 스프링 부트는 기업용 애플리케이션 개발을 더 쉽고 빠르게 하도록 도와주며, 모니터링, 건강 상태 확인, 로깅, 설정관리 등 운영에 필요한 필수 기능을 내장하고 있는 프레임워크로 어떤 특징을 갖고 있는지 함께 살펴보겠다.

 

스프링 부트는 기본적인 설정과 보일러 플레이트 코드(여러 곳에서 재사용되는 코드) 작성을 최소화하고, 자동 설정과 컨벤션을 통해 개발자들이 빠르게 애플리케이션을 개발할 수 있도록 지원하는 스프링 프레임워크이다.

 

스프링 부트를 사용하면 내장형 서버를 사용하여 별도의 웹 애플리케이션 서버(Web Application Server)를 설치할 필요 없이 애플리케이션을 실행할 수 있으며, 다양한 스프링 프레임워크 기능과 라이브러리, *서드파티 라이브러리 와의 통합을 간편하게 구성할 수 있다. 간단하게 스프링 부트의 특징에 대해 살펴보면 아래와 같다.

 

  • 간결한 설정
    스프링 부트는 번거로운 XML 설정이 필요 없으며, 최소한의 설정으로 Spring을 사용할 수 있고, 기본적인 설정을 자동으로 처리하므로 개발자가 많은 설정 작업을 하지 않아도 된다. 설정으로 인한 불편사항을 해소하여 개발자는 애플리케이션 개발에 집중할 수 있다.
  • 의존성 관리 최소화
    스프링 부트는 여러 3rd praty 라이브러리를 사용할 때, 발생하는 라이브러리 버전 충돌로 인한 문제를 해결하기 위해서, 이미 테스트된 여러 라이브러리들의 묶음 패키지를 제공한다.

    3rd party 의존성 관리를 용이하게 하기 위한 'starter'의존성 통합 모듈을 제공하여 Maven/Gradle 설정 시 버전 관리가 간편하다. 스프링 부트에서 제공하는 의존성 세트를 통해 개발자는 버전 충돌이나 복잡한 의존성 설정에 대해 걱정하지 않고 필요한 의존성을 쉽게 지정할 수 있다.
  • 운영 편의성
    스프링 부트는 애플리케이션의 상태 모니터링, 로깅, 보안 설정 등 운영에 필요한 기능들을 제공한다. 이를 통해 애플리케이션의 운영과 관리가 편리해지고 안정성이 향상된다.

이렇듯 스프링 부트는 개발자들의 개발 생산성을 높이고, 애플리케이션의 유연성, 확장성을 제공할 뿐만 아니라, 스프링 프레임워크들과 강력하게 호환되고, 생태계와의 통합을 가능하게 한다.

 

 

위의 내용들을 요약해주면...

스프링 : 유연하지만 설정이 복잡하고 많은 작업이 필요.

스프링 부트 : 스프링을 기반으로 설정을 자동화하고 빠르게 애플리케이션을 개발할 수 있도록 지원.

 

결론 : 스프링부트는 스프링 프레임워크의 장점은 그대로 유지하면서 복잡한 설정 작업을 줄여주고, 빠르게 애플리케이션을 개발 및 배포할 수 있게 해주는 도구이다.

 

 

 

*의존성 주입(Dependency Injection) : 객체 간의 의존 관계를 외부에서 주입하는 설계 패턴이다. 이를 통해 객체가 자신이 사용할 다른 객체를 직접 생성하거나 관리하지 않고, 외부에서 필요한 객체를 주입받아 사용할 수 있다. 쉽게 말해서 필요한 물건을 직접 만들지 않고, 누군가가 대신 가져다주는 방식이라고 생각하면 된다. 

의존성 주입을 활용하면 필요한 객체를 직접 준비하지 않아도 되니 더 간편하고, 나중에 다른 재료를 사용해야 할 때도 쉽게 바꿀 수 있다.

 

*AOP(Aspect-Oriented Programming) 은 프로그래밍의 핵심 기능과 부가 기능을 분리하여, 코드를 더욱 효율적으로 관리할 수 있도록 돕는  프로그래밍 패러다임이다. 쉽게 말해 AOP는 반복되는 부가적인 작업(로깅, 트랜잭션 관리, 보안 검사)등을 문리하여, 여러 곳에 중복 없이 적용할 수 있게 해준다.

 

*트랜잭션 관리 : 데이터베이스와 같은 시스템에서 여러 작업이 모두 성공하거나 모두 실패하는 것을 보장하는 기법이다. 이를 통해 데이터의 무결성과 일관성을 유지할 수 있다. 트랜잭션은 보통 하나의 작업 단위로 처리되며, 여러 데이터베이스 작업이 하나의 트랜잭션 내에서이루어질 때, 이 작업들이 모두 성공해야만 최종적으로 데이터베이스에 반영된다. 

 

*서드파티 라이브러리(Third-party libary) : 애플리케이션 개발 시 외부에서 제공받아 사용하는 라이브러리나 프레임워크를 말한다. 즉, 개발자가 직접 만든 것이 아니라, 다른 개발자나 조직이 만들어 제공하는 라이브러리를 의미한다. 이런 서드파티 라이브러리는 개발자들이 반복적으로 필요로 하는 기능들을 쉽게 구현할 수 있도록 돕는다. 

'백엔드' 카테고리의 다른 글

소셜로그인 어떻게 도입할까?  (1) 2024.09.22
ERD 설계? 어떻게 진행할까?  (0) 2024.09.18
관계형 데이터베이스  (1) 2024.09.10
SSR? CSR? 렌더링 방식의 차이와 이해  (2) 2024.09.06
웹 브라우저의 호출과정  (1) 2024.09.05