Spring?

Java기반 웹 프레임워크

현대 Java기반 엔터프라이즈 어플리케이션을 위한 프로그래밍 및 Configuration Model 제공

 

 

Framework?

프레임워크는 어떤 목적을 쉽게 달성하기 위한 도구의 역할

자주 쓰일만한 기능을 모아놓은 유틸(클래스) 모음

기본 설계, 라이브러리는 프레임워크에서 제공하니, 개발자는 개발에 집중 가능

 

라이브러리 + 설계도 의 개념

 

 

Spring 특징

  • Java 객체와 라이브러리 관리
  • 경량 컨테이너로 Java 객체를 직접 관리 (Spring Container, Bean)
  • 객체의 생성, 소멸과 같은 생명주기를 관리
  • Inversion of Control (제어 반전)
 

Inversion of Control (제어 반전)

IoC? 객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀐다는 뜻 개발자 >> Spring 으로 역전 컴포넌트 의존관계 설정, 설정, 생명주기를 해결하기 위한 디자인 패턴 IoC Container Spring

rainover0824.tistory.com

 

Dependency Injection (의존성 주입)

Dependency (의존) ? A가 B에 의존하고 있는 상태일 때, B에 변화가 일어나면 그 변화가 A에도 영향을 미치는 것 class Chef { private Recipe recipe = new Recipe(); public Chef() { this.recipe.cook(); } } 흔히 드는 예시 중

rainover0824.tistory.com

 

 

Spring Boot 

Spring을 더 쉽게 사용하기 위한 도구

 

 

기존의 Spring에서는 개발자가 다양한 설정을 직접 해줘야 하는데, 이 점을 간소화

 

 

1. Dependency

Spring의 경우 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의 경우 Dependency를 보다 쉽게 설정 가능

버전 관리도 알아서 수행

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

 

!! 쉽게 한 줄로 Dependency 추가 및 자동 버전관리가 가능 !!

 

 

2. Configuration

 

Spring의 경우 Configuration 설정 복잡

 

Ex)

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 에서는 이렇게 긴 Configuration 클래스를 만들어야 하지만

Spring boot에서는 별도의 Configuration이 필요 없이

 

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

Dependency만을 추가하는 것으로 Thymeleaf 사용 가능

 

AutoConfiguration

추가한 jar파일에 따라 자동적으로 설정 수행

Ex)

HSQLDB가 클래스 패스에 존재하고 DB커넥션을 맺는 Bean을 수동으로 구성하지 않았다면, 자동으로 인메모리 DB로 구성

>> Spring Legacy였다면 Connection Error 리턴해서 어플리케이션 실행 자체가 불가

 

 

 

@SpringBootApplication 어노테이션을 사용해서 AutoConfiguration 사용 가능

아래 3가지의 기능 포함

 

  • @EnableAutoConfiguration

클래스패스에 있는 /resource/META-INF/spring.factories 중 EnableAutoConfiguration 부분에 정의된 Configuration들을 자동 등록

>> AutoConfiguration의 등록 조건을 만족하는 경우에만

 

  • @ComponentScan

base-package가 정의되지 않으면 해당 어노테이션이 붙은 클래스패스 하위의 @Component 어노테이션을 스캔하여 Bean으로 등록

 

  • @SpringConfiguration

@Configuration과 같은 기능

 

 

 

3. 편리한 배포

Spring Legacy의 경우 war파일을 Web Application Server에 담아 배포

Spring Boot의 경우 Tomcat, Jetty와 같은 내장 WAS를 가지고 있기 때문에 jar파일로 간편하게 배포 가능

 

'끄적 > BE' 카테고리의 다른 글

JPA vs MyBatis  (0) 2023.01.11
JPA N+1  (0) 2023.01.11
REST API  (0) 2023.01.09
HTTP  (0) 2023.01.09
MVC1 MVC2  (0) 2023.01.05

+ Recent posts