[Spring] DTO

이동엽·2023년 3월 8일
0

처음엔 ResponseEntity까지 적용한 MemberController코드있는데

@RestController
@RequestMapping("/v1/members")
public class MemberController {
    @PostMapping
    public ResponseEntity postMember(@RequestParam("email") String email,
                                     @RequestParam("name") String name,
                                     @RequestParam("phone") String phone) {
        Map<String, String> map = new HashMap<>();
        map.put("email", email);
        map.put("name", name);
        map.put("phone", phone);

        return new ResponseEntity<Map>(map, HttpStatus.CREATED);
    }

		...
		...
}

불편한 점은 postMember()
에 파라미터로 추가되는 @RequestParam
의 개수는 계속 늘어날 수 밖에 없습니다.

여기서 DTO 클래스가 바로 요청 데이터를 하나의 객체로 전달 받는 역할을 해준다.

이걸 코드를 간결하게 만들기 위해 DTO 클래스를 만들어서 한번에 보낸다

@RestController
@RequestMapping("/v1/members")
public class MemberController {
    @PostMapping
    public ResponseEntity postMember(MemberDto memberDto) {
        return new ResponseEntity<MemberDto>(memberDto, HttpStatus.CREATED);
    }

		...
		...
}

코드 3-26을 보면 postMember()에서 @RequestParam을 사용하는 부분이 사라지고 MemberDto memberDto 가 추가되었습니다.

그리고 아직 비즈니스 로직이 없긴하지만 어쨌든 @RequestParam을 통해 전달 받은 요청 데이터들을 Map에 추가하는 로직이 사라지고, MemberDto 객체를 ResponseEntity 클래스의 생성자 파라미터로 전달하도록 변경되었습니다.

결과적으로 DTO 클래스를 사용하니 코드 자체가 매우 간결해진 것을 알 수 있습니다.

DTO 클래스

public class MemberDto {
    @Email
    private String email;
    private String name;
    private String phone;

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }
}

MemberDto 클래스에서 이메일에 대한 유효성 검증을 진행

@RestController
@RequestMapping("/v1/members")
public class MemberController {
    @PostMapping
    public ResponseEntity postMember(@Valid MemberDto memberDto) {
        return new ResponseEntity<MemberDto>(memberDto, HttpStatus.CREATED);
    }

		...
		...
}


출처 : https://gmlwjd9405.github.io/2018/12/25/difference-dao-dto-entity.html

profile
씨앗

0개의 댓글