Spring Framework와 Spring Boot의 차이

BOSEUL KIM·2022년 10월 24일
0

기술면접

목록 보기
1/4
post-thumbnail

Spring Framework

Spring은 Java 기반의 오픈소스 프레임워크.

Spring Framework의 특징

DI(Dependency Injection)

  • DI란 개발자가 Spring 프레임워크에 의존성을 주입하면서 객체 간 결합을 느슨하게 하는 것입니다.

  • 객체 간 결합이 느슨하면 코드의 재사용성이 증가하고, 단위 테스트가 용이해집니다.

IoC(Invesion of Control)

  • IoC(제어의 역전) 는 컨트롤의 제어권이 개발자에게 있는 것이 아닌 프레임워크가 대신해서 해주는 것을 말합니다. Servlet이나 Bean 같은 코드를 개발자가 직접 작성하지 않고, 프레임워크가 대신 수행합니다.

  • 기존에는 자바 코드를 작성할 때 객체의 생성, 의존관계 설정 등을 개발자가 해줘야 했지만, 프레임워크가 대신해준다는 의미입니다.

AOP(Aspect Oriented Programming)

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

중복 코드 제거

  • JDBC 같은 템플릿을 사용할 때 중복되는 코드도 많고 복잡합니다. 이를 모두 제거합니다.

다른 프레임워크와의 통합

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

Spring Boot Framework와 Spring Framework의 차이점

첫 번째 차이점, 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이라는 어노테이션을 확인할 수 있습니다.
    이 어노테이션을 제거하고 프로그램을 실행하면, 일반적인 자바 프로그램과 동일하게 실행됩니다.
    해당 어노테이션 덕분에 많은 외부 라이브러리, 내장 톰캣 서버 등이 실행될 수 있습니다.

어노테이션: 주석, 추후 특정 어노테이션을 처리하는 컴파일러가 어노테이션을 읽으면 알맞은 처리를 진행.
기능이 포함된 건 아니고, 프로그램 곳곳에 분산된 기능을 한 곳에 모아서 처리하고 싶을 때 사용하기도 함.

@ComponentScan
@Component, @Controller, @Repository, @Service라는 어노테이션이 붙어있는 객체들을 스캔해 자동으로 Bean에 등록해줍니다.

@EnableAutoConfiguration
@ComponentScan 이후 사전에 정의한 라이브러리들을 Bean에 등록해줍니다.
사전에 정의한 라이브러리들은 다음 경로에서 확인할 수 있습니다.
하지만 사전에 정의한 라이브러리라고 전부 Bean에 등록되진 않습니다.

External Libraries -> spring-boot-autoconfigure -> META_INF -> spring.factories

spring.factories파일을 보면 다음을 확인할 수 있습니다.

EnableAutoConfiguration을 키로 하는 외부 의존성들을 확인할 수 있습니다. 이 의존성들을 모드 스캔하며 조건에 따라 의존성을 주입해 줍니다.

세 번째 차이점, 편리한 배포

  • Spring Framework로 개발한 애플리케이션의 경우, war파일을 Web Application Server에 담아 배포했습니다.

  • Spring Boot Framework의 경우, Tomcat 이나 Jetty 같은 내장 WAS를 가지고 있기 때문에 jar 파일로 간편하게 배포할 수 있습니다.

  • Spring Framework로 WAS를 정하고, 모든 설정을 마쳐 배포를 하는 것보다 훨씬 간단한 배포 방법입니다.

결론

Spring Framework는 기존에 EJB(Enterprise Java Bean) 을 대신해 자바 애플리케이션을 더 쉽게 만들 수 있게 해 주고, Spring Boot Framework는 Spring Framework보다 개발자가 더더욱 개발에만 집중할 수 있도록 도와주는 프레임워크입니다.

출처: https://programforlife.tistory.com/68#:~:text=%EA%B2%B0%EB%A1%A0%20%EC%A0%81%EC%9C%BC%EB%A1%9C%20Spring%20Framework,%EB%8F%84%EC%99%80%EC%A3%BC%EB%8A%94%20%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC%EC%9E%85%EB%8B%88%EB%8B%A4.

0개의 댓글