스프링에서 워낙 다양한 기능을 제공하다 보니 우리가 자주 사용하는 spring과 spring mvc, spring boot에 대해서 헷갈리는 경우가 많다. (먼저 나부터 헷갈린다)
따라서 이번 포스팅에서는 Spring, Spring MVC, Spring Boot의 차이에 대해서 큰 틀에서 짚고 넘어가보자.

Spring Framework(Core)
- Dependency Injection을 지원한다.
- @Component, @Autowired, Component Scan 등
단순히 스프링 컨테너를 통한 DI를 제공한다.
Spring MVC(Spring Module단위)
- 웹 어플리케이션과 Rest API 구축을 간편하게 만들어준다.
- @Controller, @RestController, @RequestMapping등
웹 어플리케이션을 구축과 관련된 기능을 제공한다.
Spring Boot(Spring Project단위)
- 프로덕션 환경에서의 어플리케이션을 빠르게 구축할 수 있게 지원한다.
- Starter Projects
- 필요한 기능과 관련된 의존성을 포함하고 있어 다양한 어플리케이션을 쉽게 구축할 수 있다.
- Auto configuration
- Spring, Spring MVC, 다른 프레임워크 사용을 위한 설정을 자동으로 해준다.
- 비기능적 요구사항의 구현 (Enable non functional requirements (NFRs))
- Actuator
어플리케이션 모니터링 기능을 제공
- Embedded Server
JAR파일에 서버가 내장되어 있음
- Logging and Error Handling
로그와 에러 처리를 기본적으로 제공한다.
- Profile과 ConfigurationProperties
프로필을 이용해 개발 환경에 따라 별도의 설정을 적용할 수 있다.