웹/Spring

Spring Boot 에서 Dto들 관리

두잇베스트 2021. 3. 25. 17:46

Spring Boot 에서 Dto 관리

프로젝트 하다보면 요청과 응답 Dto들이 무분별하게 만들어져서 , 매우 너저분할때가 있다 ㅠ. 무수하게 많은 Dto들을 관리하고 싶은 충동이 일어난다. 그래서 Dto 디자인에 관해 찾아보았고 , 이를 정리하고자 한다.

왜 해야 하는가?

  • 화면별로 요구하는 데이터들 달라 Dto들이 많아지게 된다.
  • 엔티티들을 화면 요구에 맞추다보면 , 엔티티 하나 코드량이 많아지게 온갖 요구들을 담게되는 잡동사니와 같은 결과를 낳게 된다.

2021-03-25_17-36-32

 

이렇게 무수히 많은 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와 관련된 클래스들을 좀 더 깔끔하게 구분지어 관리할 수 있게 된다. 이름 짓기도 수월해질 것이다.

자주 이용하도록 하자!.