본문 바로가기
개발/Spring

[Spring] Spring과 Spring Boot 차이점

by tempus 2022. 11. 19.
반응형

1. Spring이란?

1.1 Spring의 개념

스프링 로고
스프링은 자바 기반의 웹 애플리케이션을 만들 수 있는 프레임워크입니다.

spring.io 사이트에서 확인하면 '스프링 프레임워크는 현대 자바 기반의 엔터프라이즈 애플리케이션을 위한 프로그래밍 및 Configuration Model 제공한다.'라고 언급하고 있습니다.

 

Spring 은 수많은 국내 기업과 해외 기업에서 매우 많은 서비스를 만들 때 사용되고 있습니다. 자바 백엔드 개발자는 웹 애플리케이션을 개발할 때, 대부분 스프링을 사용한다고 합니다.

 

스프링은 약 20개의 모듈로 구성된 기능으로 구성됩니다. 이러한 모듈은 아래 그림과 같이 Core Contiainer, Dtata Access/Integration, Web, AOP(Aspect Oriented Programming), 계측 및 테스트로 그룹화됩니다.

스프링 모듈

1.2. 스프링의 특징

Spring은 자바 객체와 라이브러리들을 관리해주며, 톰캣과 같은 WAS 가 내장되어 있어 자바 웹 애플리케이션을 구동할 수 있습니다. Spring은 경량 컨테이너로 자바 객체를 직접 Spring 안에서 관리합니다. 객체의 생성 및 소멸과 같은 생명 주기(Life cycle)을 관리하며, Spring 컨테이너에서 필요한 객체를 가져와 사용합니다.

스프링의 큰 특징이라고 하면 아래 3가지를 들 수 있습니다.

AOP(Aspect Oriented Programming)

AOP는 핵심기능을 제외한 부수적인 기능을 프레임워크가 제공하는 특징입니다. 예를 들어 Spring 프로젝트에 security를 적용하거나, logging 등을 추가하고 싶을 때 기존 비즈니스 로직을 건들지 않고 AOP로 추가할 수 있습니다.

IoC(Invesion of Control)

IoC는 제어의 역전이라는 뜻인데 쉽게 말해 기존에 개발자들이 객체를 생성해주고 조작하는 작업을 직접 했다면 Spring에서는 객체의 생성을 개발자가 아닌, 객체의 생명주기를 컨트롤하는 관리 위임 주체에게 맡깁니다. 요약하면 다음과 같습니다.

  • 기존 방식 : 클래스 내부의 객체 생성 → 의존성 객체의 매소드 호출
  • Spring Framework : Spring에게 제어를 위임하여 스프링이 만든 객체를 주입 → 의존성 객체의 메소드 호출

만들어진 객체는 Spring Container에서 관리하고 이 객체를 Spring Bean이라고 합니다.

DI(Dependency Injection)

각각의 객체들 간에 의존성이 존재할 경우 스프링에서 이를 연결시켜 줍니다. 이는 앞서 말한 IoC를 통해서 스프링에서 객체를 자동적으로 생성하면서 필요한 객체들을 주입해줍니다. 스프링이 객체를 직접 생성하고 관리해주기 때문에 객체 간의 의존성이 줄어들고 이는 코드의 재사용성이 증가하고, 단위 테스트가 용이해집니다.

스프링을 이용하여 자바 웹 어플리케이션을 만들 때 많은 것들을 세팅해야 하는데 이는 스프링을 처음 접하는 사람들에게는 어려운 일입니다. 이를 해결하기 위해 조금 더 스프링을 사용해 쉽게 만들 수 있게 하기 위해 나온 것인 Spring boot입니다.

 

2. Spring Boot란?

스프링 부트 로고

스프링 부트(Spring Boot)스프링(Spring)을 더 쉽게 이용하기 위한 도구라고 볼 수 있습니다. Spring Boot는 매우 간단하게 프로젝트를 설정할 수 있게 하여, Spring 개발을 조금 더 쉽게 만들어주는 역할을 하고 있습니다.

2.1. Spring Boot 구조

 위의 구조에서 나온 것과 같이 User는 스프링을 사용하기 위해서 이것저것 다양한 설정을 직접 해줘야 된다는 문제점이 있습니다.

 

개발자가 실행환경이나 의존성 관리 등의 인프라 관련 등에 쓰는 에너지가 소요됩니다. 프로그래밍을 하는 데 있어 매우 중요한 비즈니스를 만들기 위한 프로그래밍에 조금 더 에너지를 투입할 수 있게 Spring의 많은 부분을 자동화하였고, 많은 개발자들이 현재 Spring Boot을 이용하여 개발을 진행하고 있습니다.

2.2.Spring Boot와 Spring의 차이점

Spring Boot와 Spring의 차이점은 크게 3가지로 볼 수 있습니다.

✅ Dependency 설정

기존에는 스프링을 사용할 때 버전까지 명시하고 버전에 맞는 설정을 하였지만, 스프링 부트는 버전 관리를 스프링 부트에 의해서 관리됩니다.

빌드 툴로 Maven이나 Gradle을 설정할 수 있는데 Gradle로 설정하면 아래와 같이 dependency를 관리할 수 있습니다.

plugins {
	id 'org.springframework.boot' version '2.5.3'
	id 'io.spring.dependency-management' version '1.0.11.RELEASE'
	id 'java'
}

group = 'com.hunmo'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

test {
	useJUnitPlatform()
}

✅ Embed Tomcat

스프링 부트는 내장형 톰캣을 가지고 있기 때문에 별도의 톰캣을 설정할 필요가 없어졌으며, 그렇기 때문에 독립적으로 실행 가능한 jar로 손쉽게 배포가 가능해졌습니다.

✅AutoConfigurator

공통적으로 필요한 DispatcherServlet같은 설정을 어노테이션을 이용하여 대신할 수 있도록 해줍니다. 다른 말로 프로젝트 클래스 path에 위치한 의존 관계에 있는 jar들의 기본 설정과 빈 생성을 자동으로 도와줍니다.

 

스프링 부트의 main 메서드에 @SpringBootApplication 어노테이션을 설정해주면 auto configurator가 설정됩니다.

 

반응형

댓글


loading