새소식

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 의 차이점 

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

 

▪️ 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 만 추가해주면 된다.

 

▪️ 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은 코드 사잉에 주석처럼 쓰이며 특별한 의미, 기능을 수행하도록 하는 기술이다. (컴파일러가 어노테이션을 읽으면 알맞은 처리를 진행) 즉, 프로그램에게 추가적인 정보를 제공하는 메타데이터이다.

 

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

 

▪️ 편리한 배포

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

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

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