: 애플리케이션의 모든 기반을 자동으로 구성해주고, 이 것을 통해 개발자는 애플리케이션의 비즈니스 로직에만 집중할 수 있다.
용어
- 컨테이너 (스프링 애플리케이션 컨텍스트) : 빈 객체를 관리한다. 빈 생성, 관리를 하고, 필요한 곳에 (생성자와 같은 방법을 통해) 주입(연결)시켜준다.
- 컴포넌트: 빈 객체. 다른 애플리케이션 구성요소와 협력해 작업을 처리한다. 각 빈 객체는 의존성 주입 패턴을 기반으로 수행된다.
스프링
기존에는 XML 파일을 통해 bean을 관리하고 상호 연결하도록 스프링 애플리케이션 컨텍스트에 알려주었다.
1 2
<bean id="userService" class="com.example.UserService" />
최신 버전에서는 자바기반의 구성을 통해 빈 객체를 컨텍스트에 제공한다.
```java @Configuration public class ServiceConfiguration { @Bean public UserService userService() { return new UserService(); } }
스프링 부트
: 스프링을 한번 더 추상화한 프레임워크.
큰 차이점
- 위의 빈 객체 구성, XML 등을 자동 구성하도록 도와준다.
- starter를 통해 쉽게 시작 환경을 구성 할 수 있다.
자동 구성: Auto configure
: 자동 연결(autowiring)과 컴포넌트 검색(component scanning)이라는 스프링 기법을 기반으로 한다.
@SpringBootApplication
을 통해 위의 과정 가능. 빈(컴포넌트)들이 컨테이너에 등록되고 관리된다.@SpringBootConfiguration
,@ComponentScan
,@EnableAutoConfiguration
세가지 어노테이션을 합친 것이라고 보면 된다. JAR 실행 실 호출되어 실행되는main
메서드에 달아놓는다.main
메서드는SpringApplication
의run()
메서드를 호출한다.
```java // @SpringBootApplication 내부
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) }) public @interface SpringBootApplication { // … }
@SpringBootConfiguration
: 현재 클래스(UserApplication
)를 구성 클래스로 지정한다.@Configuration
의 특화된 형태이다.Configuration
으로 등록한 것을 찾아 bean으로 등록해준다.@ComponentScan
: 컴포넌트(빈) 검색을 활성화한다. @Repositoriy, @Service, @Controller, @Bean 등의 객체를 메모리에 올린다.- 스테레오타입 어노테이션: 역할을 구분하기 위한 목적의
@Repository
,@Controller
등 어노테이션
- 스테레오타입 어노테이션: 역할을 구분하기 위한 목적의
@EnableAutoConfiguration
: 스프링 부트 자동-구성을 활성화한다.나머지 어노테이션 내부를 살펴보기
특징
- 스프링부트 표준 상 WAR(Web Application ARchive)가 아닌 JAR(Java ARchive)로 패키징하는 것을 권장한다.
- 기존의 자바 웹 어플리케이션은 WAR 파일로 패키징한다. 웹 관련 자원을 포함한다. 기존의 자바 애플리케이션 서버에 애플리케이션을 배포할 때 적합하다.
- 스프링부트에서는 기본적으로 클라우드를 염두해 JAR로 패키징한다. 클래스, 라이브러리 파일만을 포함한다.
- Tomcat이 스프링부트 애플리케이션의 일부이다.
- 장점: 일단 initializer로 초기 설정을 하면 모든 필요한 틀(의존성, 기본 어노테이션 등)이 작성된다. 개발자는 애플리케이션 로직 작성에만 집중하면 된다.
핵심 스프링 프레임워크
- 스프링 부트
- 자동 구성: 자동적으로 컨테이너에 빈을 등록해준다. 꼭 필요하지 않다면 별도 config를 작성하지 않아도 된다.
- Actuator: 모니터링 시스템. runtime에 스레드 덤프, 애플리케이션 상태, metric을 살펴 볼 수 있다.
- 스프링 데이터: 간단한 자바 interface로 데이터 레포지토리 정의 가능(JPA 인터페이스)
- 스프링 시큐리티: 인증, 허가, API 보안 등. 애플리케이션 보안을 위한 필수요소
- 스프링 통합과 배치: 애플리케이션 통합과 Batch.
- 스프링 클라우드: 모놀리식 -> MSA