GeehDev

[Spring boot] 스프링 vs 스프링 부트 본문

Study/Spring boot

[Spring boot] 스프링 vs 스프링 부트

geehyun 2025. 1. 12. 19:20
반응형

[spring boot] 스프링 vs 스프링 부트


Spring 이란

Spring의 핵심 가치
"애플리케이션 개발에 필요한 기반을 제공해서 개발자가 비스니스 로직 구현에만 집중할 수 있게끔 하는 것"

 

Spring은 Java 기반 애플리케이션 개발을 위한 프레임워크입니다.

📌 프레임워크? 라이브러리?
프레임워크란 소프트웨어 개발에 필요한 기본적인 코드와 설계 패턴을 제공하여, 개발에 필요한 기능 및 규칙 등의 뼈대를 제공하여 더 효율적이고 체계적인 개발을 도와주는 도구 입니다.
라이브러리는 개발에 필요한 특정 기능을 제공해주는 도구로 개발자의 필요에 의해 라이브러리를 호출하여 사용할 수 있습니다.

프레임워크와 라이브러리의 가장 큰 차이점제어권이 누구에게 있냐가 있습니다.
- 라이브러리의 경우 개발자가 직접 해당 라이브러리를 호출하여 사용하는 반면
- 스프링에서는 객체를 개발자가 직접 생성하지 않고 객체의 생명주기를 스프링 컨테이너에 위임합니다.
즉, 제어의 역전(IoC: Inversion of Control)을 통해 프레임워크가 개발자의 코드를 호출하고 객체의 생명 주기를 관리합니다.

 

Spring은 다음과 같은 특징을 갖습니다.

  • 경량화
    필요한 기능만 선택적으로 사용할 수 있슴니다.
    (필요한 모듈만 선택적으로 dependency에 추가하거나 XML, Java Congit 기반으로 설정 가능)
  • 의존성 주입 (DI)
    객체 생성을 직접하지 않고 스프링 컨테이너가 관리합니다.
    이를 통해 코드 간 결합도를 낮추고 유연성과 재사용성을 높일 수 있습니다.
    public class MyClass {
    	public MyClass() {}
    }
    
    
    // 기존 방식
    public class MyController {
    	private MyClass myClass = new MyClass();
    }
    
    // 의존성 주입 방식 1 : 생성자를 통한 주입
    @Controller
    public class MyController {
    	private MyClass myClass;
        @Autowired
        public MyController(MyClass myClass) {
            this.myClass = myClass;
        }
    }
    
    // 의존성 주입 방식 2 : 각각 필드 선언을 통한 의존성 주입
    @Controller
    public class MyController {
        @Autowired
        private MyClass myClass;
    }
    
    // 의존성 주입 방식 3 : @RequiredArgsContstructor을 통한 final 필드에 대한 자동 의존성 주입
    @Controller
    @RequiredArgsContstructor
    public class MyController {
        private MyClass myClass;
    }
    
    // 의존성 주입 방식 4 : setter메서드를 이용한 방식
    @Controller
    public class MyController {
        private MyClass myClass;
        @Autowired
        public setMyClass(MyClass myClass) {
            this.myClass = myClass;
        }
    }
  • 관점 지향 프로그래밍 (AOP)
    로직을 핵심기능 : 비즈니스 로직부가기능 : 로깅, 보안, 트랜잭션 등 공통 기능 의 관점으로 구분하여
    코드 중복을 줄이고 유지보수에 용이합니다.

AOP 로직 예시

  • 다양한 모듈 제공
    Spring MVC, Spring Data, Spring Security, Spring Batch, Spring Web 등의 다양한 기능을 모듈로 제공하고 있습니다.
    스프링 프레임워크의 모듈 예시 이미지

Spring Boot 란

Spring boot 공식 사이트 문구
"스프링 부트를 이용하면 단독으로 실행 가능한 사용 수준의 스프링 기반 애플리케이션을 손쉽게 만들 수 있습니다."

 

Spring Boot는 이러한 Spring 프레임워크를 기반으로

  1. 설정 간소화(Auto-Configuration)
  2. 내장 tomcat 제공
  3. 단독 실행 가능한 JAR 파일 생성

으로 기존 Spring 의 단점을 보완한 프레임워크 입니다.

 

Spring 과 Spring Boot의 차이점 정리

1. 설정 방식의 차이

Spring의 경우 XML 기반 설정방식으로 초기 설정이 다소 복잡할 수 있습니다.

<!-- spring-config.xml -->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- Bean 설정 -->
    <bean id="myService" class="com.example.MyService">
        <property name="repository" ref="myRepository"/>
    </bean>

    <bean id="myRepository" class="com.example.MyRepository"/>
</beans>

 

Spring Boot의 경우 자동설정(Auto-Configuration)을 지원하여 프레임워크 자체에서 필요한 의존성을 자동으로 관리합니다.

// Spring Boot의 자동 설정
@SpringBootApplication
public class SpringBootApplication {
	public static void main(Stirng[] args) {
    	SpringBootApplication.run(SpringBootApplication.class, args);
    }
}

 

2. 의존성 관리

Spring에서는 개발에 필요한 각 모듈 별 의존성을 개발자가 직접 설정해야 합니다.

<!-- pom.xml -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.6</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.6</version>
</dependency>

 

반면, Spring Boot 에서는  spring-boot-starter 를 사용하여 의존성을 한번에 관리할 수 있습니다. 

<!-- pom.xml -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

 

3. 서버 의존성

Spring으로 웹 애플리케이션 개발을 하는 경우 tomcat 과 같은 외부 WAS(Web Applicaiton Server)가 필요하며, war파일로 빌드하여 배포합니다.

Spring Boot 의 웹 애플리케이션 개발을 할 때 내장 WAS를 포함합니다. 예를들어 spring-boot-starter-web 의존성 내에는 tomcat이 포함됩니다.

내장 tomcat

 

차이점 정리

구분 Spring Spring Boot
설정방식 XML/Java Config 파일을 통한 다소 복잡한 설정 방식 자동설정(Auto-Configuration) 제공
서버 외부 WAS 필요 내장 WAS 제공
실행 파일 WAR JAR
장/단점 장점
- 다양한 애플리케이션 아키턱처 지원
- 세밀한 설정 제어로 복잡한 비즈니스 로직 구현에 용이
- 커스터 마이징이 용이하고, 대규모 앤터프라이즈 프로젝트에 적합

단점
- 초기 설정이 복잡하고 시간이 많이 소요됨
- 학습 곡선이 가파름
장점
- 자동설정을 통해 빠른 개발 돌입 가능
- 내장 서버와 독립 적으로 실행가능한 JAR 파일을 이용하여 쉽게 배포 가능
- 학습 곡선이 비교적 완만함

단점
- 커스터 마이징 설정이 다소 복잡함
- 기존 Spring 프로젝트 보다 유연성일 떨어짐

참고

스프링 부트 핵심 가이드 - 스프링 부트를 활용한 애플리케이션 개발 실무  - 정지우 지음

위 책을 공부하며 작성합니다.

728x90