Spring ? Spring boot ?

devJune·2023년 5월 21일
0

Spring

목록 보기
1/1
post-thumbnail

Spring과 Spring boot의 차이를 알아보고 개발할 때 어떤 것들이 달라 졌는지 알아보자


Spring

Spring은 잘 알다시피 Java 기반의 오픈 소스 프레임워크이다.

Spring 공식 문서의 일부분으로 왜 Spring 이라고 불리는지 설명하고 있다.

Whatever happened next, the framework needed a name. In the book it was referred to as the “Interface21 framework” (at that point it used com.interface21 package names), but that was not a name to inspire a community. Fortunately Yann stepped up with a suggestion: “Spring”. His reasoning was association with nature (having noticed that I'd trekked to Everest Base Camp in 2000); and the fact that Spring represented a fresh start after the “winter” of traditional J2EE. We recognized the simplicity and elegance of this name, and quickly agreed on it.

개발자에게 겨울이 끝나고 봄이왔다 라는 내용이다.

Spring 의 특징

DI

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

IOC

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

AOP

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

중복 코드 제거

예를 들어 JDBC 같은 템플릿을 사용할 때 중복되는 코드도 많고 복잡하다. 이를 모두 제거한다.

다른 프레임 워크와의 통합

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

Spring boot ?

Spring boot 의 공식 문서는 이와 같이 설명한다.

Spring Boot makes it easy 쉽게 만든다.
to create stand-alone, 단독 적인
production-grade 상용화 수준의
Spring based Applications 스프링 기반의
that you can "just run". 그냥 하면 된다

Spring 과 Spring boot의 차이점

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의 경우 dependenct를 spring 보다는 쉽게 설정해 줄 수 있다. 버전관리를 자동으로 해주기 때문이다.

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

빌드 툴을 Gradle을 사용할 경우 이렇게 의존성을 추가해 주면 spring boot 웹 개발을 할때 필요한 모든 의존성을 자동으로 추가하고 관리해 준다.

Configuration

Spring 의 경우 Configuration설정 또한 매우 길고 , 모든 어노테이션 및 Bean등록을 해줘야하는 번거러움이 있다.
Spring boot는 properties에 설정을 해주면된다

예를 들어 spring 에서 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에서는

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

이것만 추가해 주면 간편하게 사용할 수 있다.

Spring BOOT의 AutoConfiguration

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

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

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

@SpringBootApplication
public class ExampleApplication {

	public static void main(String[] args) {
		SpringApplication.run(ExampleApplication.class, args);
	}

}

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

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

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

편리한 배포

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

결론

Spring 프레임워크는 기존 EJB를 대신해 자바 애플리케이션을 더 쉽게 만들게 도와주고 Spring boot프레임워크는 Spring보다 개발자가 더더욱 개발에만 집중할 수 있도록 도와주는 프레임 워크다.

참고

[Spring] Spring VS Spring Boot 차이점
[10분 테코톡] 🦊닉의 Spring vs Spring Boot

profile
지식 저장소

0개의 댓글