<Presentation 계층>
<Domain(Business or Service) 계층>
<Data Access(Persistence) 계층>
[각각의 계층과 스프링에서의 해당 어노테이션 흐름]
클라이언트 -> Controller -> Service -> Repository(DB)
-> 요청 받은 데이터를 찾아 Repository는 -> Service -> Controller -> 클라이언트
New Data -> Controller
Service Logic -> Service
Old Data -> Repository
Spring Framework와 Spring Boot의 가장 큰 차이점은 Auto Configuration의 차이인 것 같습니다. Spring은 프로젝트 초기에 다양한 환경설정을 해야 하지만, Spring Boot는 버전 관리를 비롯한 설정의 많은 부분을 자동화하여 사용자가 편하게 스프링을 활용할 수 있도록 돕습니다. 간단하게 spring boot starter dependency만 추가하면 설정은 끝나고, Spring Boot는 tomcat이 내장되어 있어 서버를 바로 실행할 수 있습니다.
설정 측면
SpringFramework의 설정은 spring-web, spring-webmvc 외에도 수많은 의존성을 하나 하나 설정해줘야하며 설정시 하나씩 모든 어노테이션을 작성 빈을 등록 해줘야합니다. 즉, Spring으로 웹 어플리케이션 개발 시 의존성들을 일일이 찾고, 호환되는 버전에 맞춰 의존성을 추가하는 번거로움이 존재합니다.
SpringBoot는 이런 번거로움을 줄이기 위해 Easy Dependency Management라고 불리는 Springboot Starter 의존성을 도입했습니다.
스프링 프레임워크에서 하나씩 설정해줘야 했던 설정 의존성을 해당 스프링에 버전에 맞춰 한번에 주입해주는 편리함을 제공합니다.
그리고 SpringBootApplication 애노테이션을 붙이기만하면 EnableAutoConfiguration 애노테이션에 의해 spring.factories 안에 들어있는 수 많은 자동 설정들이 조건에 따라 적용이 되어 수 많은 Bean이 생성되며 스프링 부트 애플리케이션이 실행될 수 있습니다.
배포 측면
SpringFramework는
프로젝트가 단독 실행이 불가능한 war 파일로 압축되며 단독 실행이 불가능하기 때문에 배포시에 Web Application Server에 담아 배포합니다.
WAS에 의해 실행되어야 하므로 배포 스크립터 파일(web.xml) 을 작성해줘야하며 별도의 WAS를 설정해주는 과정이 필요합니다.
반면에 SpringBoot는
Embedded Servlet Container Support, Tomcat 같은 내장 Web Application Server를 가지고 있기 때문에 웹 애플리케이션을 jar 파일로 압축 후 실행하는 것 만으로도 간편하게 배포할 수 있습니다.