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파일로 간편하게 배포 가능