# 스프링과 스프링 부트의 차이는 무엇인가요?

* 스프링은 기존 기술의 복잡성을 크게 줄인 프레임워크지만, 개발자가 너무 많은 설정을 직접 해줘야 했다.
  * 톰캣 같은 `WAS`를 설치하고, `war`로 빌드하고, `war` 파일을 `WAS`에 전달해서 `WAS`를 실행해야 한다.
  * 개발을 한 번 시작하기 위해서 필요한 모든 라이브러리들과 버전을 직접 명시해 주어야 한다.
  * 또한, 다양한 `config`를 개발자가 직접 만들어야 했다.

**스프링 부트는 기존의 복잡한 설정을 대신 해준다. 즉, 스프링 부트는 스프링으로 애플리케이션을 만들 때 필요한 설정을 간편하게 처리해주는 별도의 프레임워크다.**

**스프링 부트 특징**

* **내장 서버**
  * 웹 서버를 내장하고 있기 때문에 별도의 웹 서버를 설치하지 않아도 된다.
  * `war`가 아닌 `jar` 파일이 실행되어 `main()` 메서드로 바로 실행 가능하다.
* **라이브러리 관리**
  * `starter` 기본 라이브러리 묶음을 제공하여 의존성 고민을 줄일 수 있다.
  * 스프링 부트는 부트 버전에 맞춘 최적화된 라이브러리 버전을 관리해준다.
* **자동 구성**
  * 스프링 부트는 일반적으로 자주 사용하는 빈들을 자동으로 등록해준다.
    * `DataSource`, `TransactionManager`, `JdbcTemplate` 등
  * 개발자는 `.properties`나 `.yml` 파일을 이용해 필요한 정보들을 입력만 해주면 스프링 부트가 빈 등록을 해준다.

이 외에도 여러가지 모니터링 툴을 제공하여 안정적인 애플리케이션을 유지하도록 지원한다.

\\

### 참고

* [참고 동영상](https://www.youtube.com/watch?v=6h9qmKWK6Io)
* [참고 동영상](https://www.youtube.com/watch?v=YdE4krx0dsM)
* [참고 사이트](https://www.codestates.com/blog/content/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8)
