서로 다른 계층 간 데이터 전송 용도로 데이터를 담고있는 객체
요청 데이터를 하나의 객체로 전달받는 역할

🛎 여기서 말하는 서로 다른 계층은 무슨 계층을 의미하는거지?
웹 애플리케이션의 3단계 계층!
- 프레젠테이션 계층
- 애플리케이션 계층
- 데이터 엑세스 계층

Controller 에서 정보를 받고 넣으니 코드가 간결하지 않다.
데이터를 받고 넣는 MemberDto 클래스를 만들어 대신하게 하자!

(* ⌘N 을 통해 Getter/Setter 쉽게 생성)
controller 클래스의 코드가 간결해졌다!

@RequestBody : JSON 형식의 Request Body를 MemberPostDto 클래스의 객체로 변환을 시켜주는 역할@ResponseBody : DTO 클래스의 객체를 Response Body로 변환하는 역할클라이언트의 요청 데이터가 서버가 기대하는 형식에 부합하는지 검증하는 것
핸들러 메서드가 HTTP 요청을 전달받는것에 집중할 수 있도록,
데이터 유효성 검사 로직도 DTO 클래스를 사용

다른 입력값에 대한 유효성 검증도 추가된다면, 핸들러 메서드 내 코드의 복잡도가 증가하겠지?
HTTP 요청을 전달받는 핸들러 메서드는 요청을 전달받는 것이 주목적!
최대한 간결하게 작성하자!
(1) 유효성 검증을 위한 의존 라이브러리 추가
build.gradle 파일 > dependencies 항목 > Spring Boot에서 지원하는 Starter 추가

(2)
🛎 HTTP 요청이 뭘까?
- 네트워크를 통해 클라이언트와 서버 간 데이터를 전송하는 작업
🛎 HTTP 요청은 왜 비용이 많이 들까?
- 네트워크 비용 : HTTP 요청은 데이터 전송을 위해 네트워크 대역폭을 사용하는데, 많은 요청이 동시에 발생하면 제한 자원인 대역폭 부족
- 시간 비용 : 네트워크의 물리적 거리, 혼잡도 등에 따른 응답 시간 소요
- 서버 자원 비용 : 서버는 HTTP 요청 처리를 위해 하드웨어 자원을 사용하기에 많은 요청 시 서버 부하
🛎 그럼, DTO 를 쓰면 왜 HTTP 요청 수가 줄어?
- DTO를 사용하면 데이터 일괄 한번에 전송 가능
- DTO 객체에 필요한 데이터 필드만 포함시켜, 불필요한 데이터 전송 방지
역직렬화 : 클라이언트가 준 JSON 데이터를 DTO 같은 JAVA 객체로 변환
직렬화 : JAVA 객체를 응답을 위해 JSON 형식으로 변환