✅ 학습 목표
- DTO(Data Transfer Object)
- DTO가 무엇인지 이해할 수 있다.
- DTO를 Controller 클래스에 적용할 수 있다.
- DTO Validation이 무엇인지 이해할 수 있다.
//DTO 예시
public class MemberPostDto {
private String email;
private String name;
private String phone;
public String getEmail() {
return email;
}
public String getName() {
return name;
}
public String getPhone() {
return phone;
}
}
DTO 정의
클라이언트에서 서버 쪽으로 전송하는 요청 데이터, 서버에서 클라이언트 쪽으로 전송하는 응답 데이터의 형식
DTO 필요성
-1. 코드의 간결성
요청 데이터가 많아지면 @RequestParam의 개수가 계속 늘어남
DTO 클래스가 바로 요청 데이터를 하나의 객체로 전달 받는 역할
- 2. 데이터 유효성(Validation) 검증의 단순화
유효성 검증: 서버 쪽에서 유효한 데이터를 전달 받기 위해 데이터를 검증하는 것
if (!email.matches("^[a-zA-Z0-9_!#$%&'\\*+/=?{|}~^.-]+@[a-zA-Z0-9.-]+$")) {
throw new InvalidParameterException();
}
핸들러 메서드 내에 유효성 검증 로직이 직접 포함된다면 유효성 검증 로직들이 많아지면서 코드의 복잡도↑
HTTP 요청을 전달 받는 핸들러 메서드는 요청을 전달 받는 것이 주 목적이기 때문에 최대한 간결하게 작성되는 것이 좋음
DTO 클래스를 사용하면 유효성 검증 로직을 DTO 클래스로 빼내어 핸들러 메서드의 간결함을 유지
- 3. 비용이 많이 드는 작업인 HTTP 요청 수 감소
DTO 객체로 변환하기 위해 쓰이는 애너테이션
1. @RequstBody 애너테이션
클라이언트에게 전달받은 JSON 형식의 Request Body를 Dto 클래스의 객체로 변환을 시켜주는 역할
2. @ResponseBody 애너테이션
JSON 형식의 Response Body를 클라이언트에게 전달하기 위해 DTO 클래스의 객체를 Response Body로 변환하는 역할
Spring MVC에서는 핸들러 메서드에 @ResponseBody 애너테이션이 붙거나 핸들러 메서드의 리턴 값이 ResponseEntity일 경우, 내부적으로 HttpMessageConverter가 동작하게 되어 응답 객체(여기서는 DTO 클래스의 객체)를 JSON 형식으로 바꿔줌
'부트캠프 기록 > Section3' 카테고리의 다른 글
[Spring MVC] JPA 연관관계 매핑 (0) | 2022.11.03 |
---|---|
[Spring MVC] JBDC 기반 데이터 엑세스 계층 (0) | 2022.10.30 |
[Spring MVC] API계층_Controller (0) | 2022.10.29 |
[Spring MVC] 예외처리 (0) | 2022.10.27 |
[Spring MVC] DTO 클래스와 Entity 클래스의 역할 분리 이유 (0) | 2022.10.24 |