출처: 링크텍스트
스프링 vs 스프링 부트
스프링(Spring)이란?
'스프링 프레임워크(Spring Framework)'
- 자바에서 가장 많이 사용되는 프레임워크
- 의존성 주입(DI, Dependency Injection)과 제어역전(IOC, Inversion of Control), 관점 지향 프로그래밍(AOP)이 가장 중요
- 위 요소들을 통해 느슨한 결합(Loose Coupling)을 달성할 수 있음
- 느슨한 결합으로 개발한 어플리케이션은 단위 테스트를 수행하기 용이
의존성 주입(DI, Dependency Injection)


관점 지향 프로그래밍(AOP, Aspect Oriented Programming)

스프링 부트

Hibernate 관련 spring 설정
:하이버네이트(Hibernate)는 JPA 표준을 구현한 대표적인 ORM 프레임워크

스프링 부트가 제공하는 기능
자동설정(AutoConfiguration)을 이용
- 어플리케이션 개발에 필요한 모든 디펜던시(Dependency)를 프레임워크에서 관리
- jar파일이 클래스 패스에 있는 경우 스프링 부트는 Dispatcher Servlet으로 자동 구성됨
- 스프링 부트는 미리 설정되어 있는 Starter 프로젝트를 제공
- xml 설정 없이 자바 코드를 통해 설정할 수 있음
어플리케이션을 개발하면서 사용되는 디펜던시들은 호환되는 버전으로 관리해줘야 함
-이런 복잡도를 줄이기 위해 스프링 부트는 SpringBoot-Starter를 제공하여 자동으로 호환되는 버전을 관리
MVC 패턴

컨트롤러(Controller)
모델(Model)과 뷰(View) 사이에서 브릿지 역할을 수행
- 앱의 사용자로부터 입력에 대한 응답으로 모델 및 뷰를 업데이트 하는 로직을 포함
- 사용자의 요청은 모두 컨트롤러를 통해 진행되어야 함
- 컨트롤러로 들어온 요청은 어떻게 처리할지 결정하여 모델로 요청을 전달함
예) 쇼핑몰에서 상품을 검색하면 그 키워드를 컨트롤러가 받아 모델과 뷰에 적절하게 입력을 처리하여 전달
모델(Model)
데이터를 처리하는 영역
- 데이터베이스와 연동을 위한 DAO(Data Access Object)와 데이터의 구조를 표현하는 DO(Data Object)로 구성
예) 검색을 위한 키워드가 넘어오면 데이터베이스에서 관련된 상품의 데이터를 받아 뷰에 전달
뷰(View)
데이터를 보여주는 화면 자체의 영역
- 사용자 인터페이스(UI)요소들이 여기에 포함되며, 데이터를 각 요소에 배치
- 뷰에서는 별도의 데이터를 보관하지 않음
예) 검색 결과를 보여주기 위해 모델에서 결과 상품 리스트 데이터를 받음
REST API
API(Application Programming Interface)
응용 프로그램에서 사용할 수 있도록 다른 응용 프로그램을 제어할 수 있게 만든 인터페이스
- API를 사용하면 내부 구현 로직을 몰라도 정의되어 있는 기능을 쉽게 사용할 수 있음
- 인터페이스란 어떤 장치간 정보를 교환하기 위한 수단이나 방법을 의미
REST(Representational State Transfer)
자원의 이름으로 구분하여 해당 자원의 상태를 교환하는 것
- 서버와 클라이언트의 통신 방식 중 하나
- HTTP URI(Uniform Resource Identifier)를 통해 자원을 명시하고 HTTP Method를 통해 자원을 교환
HTTP Method: Create, Read, Update, Delete
REST 특징
- Server-Client 구조
- 자원이 있는 쪽이 Server, 요청하는 쪽이 Client
- 클라이언트와 서버가 독립적으로 분리되어 있어야 함
- Stateless
- 요청 간에 클라이언트 정보가 서버에 저장되지 않음
- 서버는 각각의 요청을 완전히 별개의 것으로 인식하고 처리
- Cacheable
- HTTP 프로토콜을 그대로 사용하기 때문에 HTTP의 특징인 캐싱 기능을 적용
- 대량의 요청을 효율적으로 처리하기 위해 캐시를 사용