스프링 입문강의와 수준별수업과 구글링에서 배운 내가 이해한 것들을 내 언어로 정리!
서버 - 클라이언트 통신을 위한 규격.
대부분의 언어에서 핸들링하는 라이브러리를 제공(그 중 하나가 Jackson-spring.starter 안에 포함)
통일된 언어(양쪽 통번역 가능)
data transfer object
데이터 이동 객체, 계층간의 데이터 이동(3 Layer의 계층)
동기(Synchronous) - Spring MVC. 작업이 순차적으로 진행되는 것. 요청 들어오면 끝날때까지 기다렸다가 처리.
비동기(Asynchronous) - Spring webFlux. 작업이 독립적으로 실행되며, 작업의 완료 여부를 기다리지 않고 다른 작업을 실행할 수 있는 방식을 의미.

우리가 배우고 있는 것(스프링 생태계에서 우리는 한 부분을 배운다)
Spring: 자바 어플리케이션 개발을 도와주는 프레임워크.
회사에서 많이 쓰는 spring 무언가 : Spring MVC(전통적인 동기식 웹 애플리케이션 개발을 위한 프레임워크.), Spring webFlux(비동기식, 논블로킹 웹 애플리케이션 개발을 위한 프레임워크), Sping Bath(대규모의 데이터 처리 작업을 배치로 실행하기 위한 프레임워크)...
개념 분리, 파일 분리 (디자인패턴과 유사)
클라이언트와 서버간의 구조 관점에서 접근한 개념.
코드의 재사용성과 유지보수성을 높이고, 개발자들 간의 협업을 용이하게 함.
Model View Controller
1. Model (모델)
2. View (뷰)
3. Controller (컨트롤러)
✔️ 옛날에 MVC 패턴이 생겨날 당시에는 스프링에서 데이터도 만들어주고 화면도 보여주는 방식이 일반적인 방식이였다. 그러나 점점 기술이 발전되면서 데이터를 만들어서 보여주는 서버와 사용자에게 화면을 보여주는 클라이언트 부분의 역할이 커지면서 복잡해지기 시작하여 이를 분리시켰다.
서버와 클라이언트 간의 데이터를 주고 받는 RESTful API 가 주류로 자리 잡았다
이전에는 View를 통해서 직접 화면을 그려서 보여줬다면 요즘은 Json 형식으로 프론트에 데이터를 전달해주고 프론트에서 이를 받아서 사용자에게 보여준다.
결론 : 방식이 변경 되었어도 개념은 동일하기 때문에 여전히 MVC 패턴임
(우리가 하는 responseDto가 view. 요즘 버전의 view는 Json 데이터를 전달하는 것)
전체 흐름 ( RESTful API 버전 )
1. Todo 스케쥴 작성을 위해서 Postman 을 통해서 일정 생성 api를 호출.
2. 컨트롤러가 이 요청을 받아, 모델에게 Todo 스케줄을 생성하도록 지시.
3. 모델이 스케줄을 생성하고 결과를 컨트롤러에게 전달.
4. 컨트롤러는 그 결과를 뷰에 전달하여 Postman에 전달하기 위한 Json 형식을 만든다.
5. 최종적으로 뷰는 Json을 Postman에 전달.

서버 개발 관점에서 각 계층별로 역할을 분리하는 개념. 역할별로 구별.
사용 이유? 책임의 분리, 유지보수성, 재사용성, 테스트 용이성, 확장성, 보안성 등
Controller은 사용자의 입력값
Servise에서 데이터가 있는지 없는지 실질적인 로직에서 검사
Data Access Layer(Repository, Entity)는 데이터 접근 레이어
1. Presentation Layer (프레젠테이션 레이어) Controller
@Controller 또는 @RestController2. Service Layer (서비스 레이어) Service
@Service 어노테이션으로 표시된 클래스3. Data Access Layer (데이터 접근 레이어) Repository
@Repository 어노테이션으로 표시된 클래스들이 여기에 속하며, JPA, Hibernate, MyBatis 등과 같은 ORM(Object-Relational Mapping) 프레임워크를 사용해 데이터베이스와 상호작용.
MVC - 클라이언트와 서버 간의 구조 관점. 웹 전체!
Spring 3 Layer - 서버 개발 관점 내 각 계층별로 역할 분리. 서버 내!
Spring MVC
주된 관심사 : 사용자 요청 처리와 응답 생성
- Spring MVC의 주요 목적은 클라이언트(사용자)와 서버 간의 상호작용을 관리하는 것이다. 이를 통해 웹 애플리케이션이 사용자의 요청을 받아 처리하고, 그 결과를 사용자에게 적절한 형식으로 반환하는 과정을 쉽게 구현할 수 있다.
Spring 3 Layer
주된 관심사 : 애플리케이션의 구조화 및 계층화
- Spring 3 Layer 는 애플리케이션을 세 개의 주요 계층으로 나누어 각 계층이 독립적으로 동작할 수 있도록 구조화하는 데 초점을 맞춘다. 이를 통해 애플리케이션의 유지보수성과 확장성을 향상시킬 수 있다.