웹/Spring
Spring Boot 에서 Dto들 관리
두잇베스트
2021. 3. 25. 17:46
Spring Boot 에서 Dto 관리
프로젝트 하다보면 요청과 응답 Dto들이 무분별하게 만들어져서 , 매우 너저분할때가 있다 ㅠ. 무수하게 많은 Dto들을 관리하고 싶은 충동이 일어난다. 그래서 Dto 디자인에 관해 찾아보았고 , 이를 정리하고자 한다.
왜 해야 하는가?
- 화면별로 요구하는 데이터들 달라 Dto들이 많아지게 된다.
- 엔티티들을 화면 요구에 맞추다보면 , 엔티티 하나 코드량이 많아지게 온갖 요구들을 담게되는 잡동사니와 같은 결과를 낳게 된다.
이렇게 무수히 많은 Dto들을 손쉽게 관리하기 위해서
Dto를 Inner Class로 만들도록 하자.
package com.webservice.bookstore.web.dto;
import lombok.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
public class Email {
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SignUpRequest {
@NotBlank(message = "이메일을 입력해주세요")
@javax.validation.constraints.Email(message = "이메일 형식이 잘못되었습니다.")
private String email;
@Size(min = 1, max = 20, message = "닉네임을 입력해주세요.")
private String nickName;
@NotBlank(message = "비밀번호를 입력해주세요.")
private String password;
private String address;
private String phone;
private String certificated;
}
@Data
public static class EmailCerticatedDto {
private String email;
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class EmailCheckDto {
@NotBlank(message = "이메일을 입력해주세요")
@javax.validation.constraints.Email(message = "이메일 형식이 잘못되었습니다.")
private String Email;
}
@Getter
@Setter
public static class CeriticateCode {
private String certificated;
}
}
이렇게 하게 되면, 이메일 관련된 Dto들을 Email 클래스 묶어서 관리하게 된다.
무수히 난잡하게 널려있던 Dto들을 Email 관련 요청, 응답 Dto들을 -> Email
-- 컨트롤러 부분
@PostMapping
public ResponseEntity signup(@RequestBody Email.SignUpRequest signUpRequest, BindingResult bindingResult) {
if(bindingResult.hasErrors()) {
throw new ValidationException("회원가입 유효성 실패", bindingResult.getFieldErrors());
}
memberService.signup(signUpRequest);
return new ResponseEntity("Success", HttpStatus.OK);
}
이러한 방법을 쓰게 된다면, Dto와 관련된 클래스들을 좀 더 깔끔하게 구분지어 관리할 수 있게 된다. 이름 짓기도 수월해질 것이다.
자주 이용하도록 하자!.