새소식

Java

Spring 과 SpringBoot 의 차이점

  • -
728x90
Spring 과 SpringBoot 는 무엇이 다른 걸까

Intro

SpringSpring Boot는 모두 스프링 프레임워크를 기반으로 한 자바 웹 개발 프레임워크이다. 둘 간에는 몇 가지 차이점이 있다.

 

Spring 이란 ? 

Spring은 Java 기반의 오픈소스 Back-end 프레임워크이다. Spring에서는 개발자가 직접 설정 파일을 작성하여 스프링 컨테이너를 구성하고, 필요한 빈 객체를 등록하고, 빈 객체 간의 의존성을 설정해야 한다. Spring은 특정한 구성을 위해 추가적인 라이브러리와 설정이 필요하다. Spring 프레임워크의 대표적인 특징은 다음과 같다.

 

DI(Dependency Injection)

DI란 개발자가 Spring 프레임워크에 의존성을 주입하면서 객체 간 결합을 느슨하게 하는 것이다. 객체  간 결합이 느슨하면 코드의 재사용성이 증가하고, 단위 테스트가 용이해진다.

 

IoC(Invesion of Control)

Ioc는 컨트롤의 제어권이 개발자에게 있는 것이 아닌 프레임워크가 대신해서 해주는 것을 말한다. Servlet이나 Bean 같은 코드를 개발자가 직접 작성하지 않고, 프레임워크가 대신 수행한다. 제어의 역전이라는 말이 어려울 수 있지만, 기존 자바 코드를 작성할 때 객체의 생성, 의존관계 설정 등을 개발자가 해줘야 했지만 프레임워크가 대신해준다는 의미이다.

 

AOP(Aspect Oriented Programming)

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

 

다른 프레임워크와의 통합

JUnit, Mockito 와 같은 유닛 테스트 프레임워크와의 통합이 간단하다. 이를 통해 프로그램의 품질이 향상된다.

 

SpringBoot 란 ? 

반면, Spring Boot는 스프링 프레임워크를 보다 쉽게 사용할 수 있도록 만든 프레임워크이다. Spring Boot에서는 개발자가 설정 파일을 작성할 필요 없이, 프로젝트의 설정과 라이브러리 의존성을 자동으로 처리해주는 기능을 제공한다. 또한, Spring Boot는 실행 가능한 JAR 파일을 만들 수 있다.

Spring Boot는 Spring에서 제공하는 여러 기능들을 자동으로 설정하여 개발자가 보다 쉽게 사용할 수 있도록 해준다. 예를 들어, Spring Boot는 스프링 MVC, 스프링 Data JPA, 스프링 Security 등의 기능을 자동으로 설정하며, 개발자가 별도로 설정 파일을 작성하지 않아도 사용할 수 있다. 또한, Spring Boot는 Actuator라는 모니터링과 관리를 위한 기능을 제공하여, 애플리케이션의 상태를 모니터링하고, 필요한 조치를 취할 수 있도록 해준다.

 

어떠한 용도로 Spring 과 SpringBoot를 사용해야 할까 ? 

Spring은 개발자가 직접 설정 파일을 작성하고, 빈 객체를 등록하고, 빈 객체 간의 의존성을 설정하는 것을 요구한다. 반면, Spring Boot는 개발자가 보다 쉽게 스프링을 사용할 수 있도록 설정과 의존성 처리 등을 자동으로 처리한다.

 

즉, Spring은 스프링 프레임워크를 보다 세밀하게 제어하고자 하는 경우에, Spring Boot는 빠르고 간단하게 스프링 애플리케이션을 개발하고자 하는 경우에 사용된다.

 

Spring 과 SpringBoot 의 차이점 

스프링 부트는 단독적이고 상용화 수준의, 스프링 기반 애플리케이션을 단지 실행할 수 있을 정도로 쉽게 만들 수 있다.

 

1. Dependency

Spring Framework의 경우 dependency를 설정해줄 때 설정 파일이 매우 길고, 모든 dependency에 대해 버전 관리도 하나하나 해줘야 합니다. 다음 예시는 Spring Framework에서 web에 대한 dependency를 추가하는 코드이다.

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.3.5</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.5</version>
</dependency>

Spring Boot Framework의 경우 dependency를 Spring Framework보다 쉽게 설정해 줄 수 있습니다. 버전 관리도 자동으로 해줍니다. 다음 예시는 Spring Boot Framework에서 web에 대한 dependency를 추가하는 코드이다.

implementation 'org.springframework.boot:spring-boot-starter-web'

 

빌드 툴을 Gradle을 사용하는 경우, 위와 같이 build.gradle파일에 dependency를 추가해주면 Spring Boot로 웹 개발을 할 때 필요한 모든 dependency를 자동으로 추가하고 관리해준다.

 

또 다른 예시로는 Spring Framework의 경우 test프레임워크를 사용하고자 하는 경우 Spring Test, JUnit, Hamcrest, Mockito 등 모든 라이브러리를 추가해줘야 하지만, Spring Boot에서는 spring-boot-starter-test 만 추가해주면 된다.

 

2. Configuration

Spring Framework의 경우 configuration설정을 할 때도 매우 길고, 모든 어노테이션 및 빈 등록 등을 설정해 줘야 한다. Spring Boot Framework는 application.properties파일이나 application.yml파일에 설정하면 된다. 예를 들어, Spring Framework에서 Thymeleaf 템플릿을 사용하려면 다음과 같은 코드를 작성해야 한다.

@Configuration
@EnableWebMvc
public class MvcWebConfig implements WebMvcConfigurer {

    @Autowired
    private ApplicationContext applicationContext;

    @Bean
    public SpringResourceTemplateResolver templateResolver() {
        SpringResourceTemplateResolver templateResolver = 
          new SpringResourceTemplateResolver();
        templateResolver.setApplicationContext(applicationContext);
        templateResolver.setPrefix("/WEB-INF/views/");
        templateResolver.setSuffix(".html");
        return templateResolver;
    }

    @Bean
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver());
        templateEngine.setEnableSpringELCompiler(true);
        return templateEngine;
    }

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        ThymeleafViewResolver resolver = new ThymeleafViewResolver();
        resolver.setTemplateEngine(templateEngine());
        registry.viewResolver(resolver);
    }
}

Spring Boot Framework에서 Thymeleaft을 사용하려면 다음과 같은 코드를 작성해야 한다.

 

implementation 'org.springframework.boot:spring-boot-starter-thymeleaf

눈으로 보기만 해도 확연한 차이를 확인할 수 있다.

 

Spring Boot의 강력한 AutoConfiguration ? 

Spring Frame와 달리 Spring Boot에는 AutoConfiguration이라는 것이 있다. Spring Boot로 실행할 수 있는 애플리케이션을 만들기 시작하면 클래스에 @SpringBootApplication이라는 어노테이션을 확인할 수 있다.

 

여기서 Annotaion이란, 사전적 의미로는 주석이라는 뜻이다. 자바에서 Annotation은 코드 사잉에 주석처럼 쓰이며 특별한 의미, 기능을 수행하도록 하는 기술이다. (컴파일러가 어노테이션을 읽으면 알맞은 처리를 진행) 즉, 프로그램에게 추가적인 정보를 제공하는 메타데이터이다.

 

이 어노테이션을 제거하고 프로그램을 실행하면, 일반적인 자바 프로그램과 동일하게 실행됩니다. 해당 어노테이션 덕분에 많은 외부 라이브러리, 내장 톰캣 서버 등이 실행될 수 있다.

 

3. 편리한 배포

Spring Framework로 개발한 애플리케이션의 경우, war파일을 Web Application Server에 담아 배포했다. Spring Boot Framework의 경우, Tomcat 이나 Jetty 같은 내장 WAS를 가지고 있기 때문에 jar 파일로 간편하게 배포할 수 있다. Spring Framework로 WAS를 정하고, 모든 설정을 마쳐 배포를 하는 것보다 훨씬 간단한 배포 방법이다.

 

✅ 글을 마치며

간단히 요약하자면 스프링(Spring)은 프레임워크이며, 스프링 부트(Spring Boot)는 스프링 프레임워크를 기반으로 한 도구이다. 스프링은 설정 파일을 작성해야 하지만, 스프링 부트는 자동 설정을 제공하여 간편하게 개발할 수 있다. 또한, 스프링 부트는 내장 서버를 제공하여 쉽게 웹 애플리케이션을 실행할 수 있다. Spring은 스프링 프레임워크를 보다 세밀하게 제어하고자 하는 경우에, Spring Boot는 빠르고 간단하게 스프링 애플리케이션을 개발하고자 하는 경우에 사용된다.

 

[참고]https://programforlife.tistory.com/68

728x90

'Java' 카테고리의 다른 글

[JAVA] 스프링과 객체지향  (0) 2023.10.15
커넥션 풀(Connection Pool)이란  (0) 2023.07.31
HashMap  (0) 2022.10.20
오버로딩(Overloading) & 오버라이딩(Overriding)  (0) 2022.09.11
[JAVA] 입력 방법  (0) 2022.07.25
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.