스프링 VS 스프링 부트

김나우·2022년 5월 24일
0

스프링(Spring)의 특징

제어의 역전(IoC)

의존성 주입(DI)

관점 지향 프로그래밍(AOP)


DI(Dependency Injection)

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

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


IoC(Invesion of Control)

IoC는 컨트롤의 제어권이 개발자에게 있는 것이 아닌 프레임워크가 대신해서 해주는 것을 말한다.

Servlet이나 Bean 같은 코드를 개발자가 직접 작성하지 않고, 프레임워크가 대신 수행한다.

제어의 역전이란 말이 어려울 수 있는데 자바 코드를 작성할 때 객체의 생성, 의존관계 설정 등을 개발자가 해주지 않고, 프레임워크가 대신해준다는 의미이다.

제어의 역전 패턴이 인기를 끄는 이유는 프로그램의 생명주기에 대한 제어권

웹 애플리케이션 컨테이너에 있기 때문이다.

즉, 사용자가 직접 new 연산자를 통해 인스턴스를 생성하고 메서드를 호출하는

일련의 생명주기에 대한 작업들스프링에 위임할 수 있게 되는 것이다.

의존성이란?

간단히 생각하면 스마트폰을 사용하기 위해서는 배터리가 필요하다.

배터리가 없으면 스마트폰을 사용할 수 없다. 즉 스마트폰은 배터리에 의존한다

만약 그 배터리가 스마트폰과 일체형으로 되어있다면

배터리 교체를 하기 위해선 분리형과 비교해서 가볍게 바꿀수 없다.

이러한 의존성에 대해서 느슨한 결합이 필요하고 의존성을 주입받아 사용받을 필요성이

있게 되는 것이다.

스프링 컨테이너에 빈(Bean)을 등록하고 설정하는 방법은 두 가지가 있다.
1. XML 설정을 통한 DI
2. 어노테이션을 이용한 DI


AOP(Aspect Oriented Programming)

AOP는 핵심기능을 제외한 부수적인 기능을 프레임워크가 제공하는 특징이다. 예를 들어

Spring 프로젝트에 security를 적용하거나, logging 등을 추가하고 싶을 때 기존 비즈니스

로직을 건들지 않고 AOP로 추가할 수 있다.


Spring vs SpringBoot

Dependency

Spring Framework의 경우 dependency를 설정해줄 때 설정 파일이 매우 길고, 모든

dependency에 대해 버전 관리도 하나하나 해줘야 합니다.

Spring Framework

출처 : https://spring.io/projects/spring-boot

Spring Boot Framework의 경우 dependency를 Spring Framework보다 쉽게 설정할 수 있다.

버전 관리도 자동으로 해준다.

Spring Boot Framework

빌드 툴을 Gradle을 사용하는 경우 위와 같이 build.gradle파일에 dependency를 추가해주면

Spring Boot로 웹 개발을 할 때 필요한 모든 dependency를 자동으로 추가하고 관리해준다.


Configuration

Spring Framework의 경우 configuration을 설정할 때 매우 길고, 모든 어노테이션 및 빈 등록 등을 설정을 해줘야 한다.

Spring Boot Framework는 application.properties파일이나 application.yml파일에 설정하면 된다.

예를 들어 Spring Framework에서 Thymeleaf 템플릿을 사용하려면 다음과 같은 코드를 작성해야 한다.

Spring Framework

@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에서 Thymeleaf를 사용하려면 다음과 같은 코드를 작성해야 한다.


Spring Boot의 강력한 AutoCOnfiguration

Spring Frame와 달리 Spring Boot에는 AutoConfiguration이라는 것이 있다

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

이 어노테이션을 제거하고 프로그램을 실행하면, 일반적인 자바 프로그램과 동일하게 실행된다.

해당 어노테이션 덕분에 많은 외부 라이브러리, 내장 톰캣 서버등이 실행될 수 있다.

어노테이션 : 주석, 추후 특정 어노테이션을 처리하는 컴파일러가 어노테이션을 읽으면 알맞은 처리를 진행.

기능이 포함된 건 아니고, 프로그램 곳곳에 분산된 기능을 한 곳에 모아서 처리하고 싶을 때 사용하기도 함.

@SpringBootApplication을 자세히 들여다보면 다음과 같은 코드를 확인할 수 있다.

@ComponentScan

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

EnableAutoConfiguration

@ComponentScan 이후 사전에 정의한 라이브러리들을 Bean에 등록해준다.

사전에 정의한 라이브러리들은 다음 경로에서 확인할 수 있다.

하지만 사전에 정의한 라이브러리라고 전부 Bean에 등록되진 않습니다.


편리한 배포

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

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

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


결론

Spring Framework는 기존에 EJB를 대신해 자바 애플리케이션을 더 쉽게 만들 수 있게 해주고

SPring Boot Framework는 Spring Framework보다 개발자가 더더욱 개발에만 집중할 수 있도록 도와주는 프레임워크다.

profile
안녕하세요

0개의 댓글