๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Spring๐Ÿ€/๊ฐ„๋‹จํ•œ ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ

[JPA] ๊ฐ„๋‹จํ•œ ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ - user (UserSignupResponse DTO)

by @ENFJ 2023. 2. 11.

์ด์ „ ์‹œ๊ฐ„ UserSignUpDTO (ํšŒ์›๊ฐ€์ž… ์š”์ฒญ DTO) ์— ๋Œ€ํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ–ˆ๋‹ค.

 

์ด์ œ ํšŒ์›๊ฐ€์ž… ์š”์ฒญ์„ ํ–ˆ์œผ๋ฉด ์‘๋‹ต์ด ์žˆ์–ด์•ผ๋˜๋‹ˆ๊นŒ  ๊ทธ ๋ถ€๋ถ„์— ๋Œ€ํ•ด DTO๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

 

์ผ๋‹จ ๋‹ค์‹œ ํ•œ๋ฒˆ MVC ํ๋ฆ„์— ๋Œ€ํ•ด ๋ณด๊ณ  ์‹œ์ž‘ํ•˜์ž

UserSignUpResponseDTO ๋ฅผ ๋งŒ๋“ค๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‘๋‹ต๋ฐฉํ–ฅ์ด๋‹ค! (์žŠ์ง€๋งˆ)
๊ทธ๋Ÿฌ๋ฉด ์ง€๋‚œ๋ฒˆ ํšŒ์›๊ฐ€์ž… ์š”์ฒญ DTO์™€๋Š” ๋‹ค๋ฅด๊ฒŒ Entity ์—์„œ DTO๋กœ ๊ฐ€์•ผ๋˜๋Š” ํ๋ฆ„์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.(์œ„ ์‚ฌ์ง„ ์ฐธ๊ณ )
 

UserSignUpResponseDTO  ์ „์ฒด ์ฝ”๋“œ

package com.example.projectpicker.user.dto;


import com.example.projectpicker.user.entity.UserEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.*;

import java.time.LocalDateTime;

// ํšŒ์›๊ฐ€์ž… ์™„๋ฃŒ ํ›„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ตํ•  ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š” ๊ฐ์ฒด ( ํด๋ผ์ด์–ธํŠธ <---- DB )

@Getter @Setter @ToString
@NoArgsConstructor
@AllArgsConstructor
@Builder
@EqualsAndHashCode(of = "email") // email ๋งŒ ๋น„๊ตํ•ด๋ผ. ๊ตณ์ด ๋น„๋ฒˆ,์ด๋ฆ„๊นŒ์ง€ ๋น„๊ตํ•  ํ•„์š”x
public class UserSignUpResponseDTO {
    private String email;

    private String userName;

    @JsonFormat(pattern = "yyyy-MM-dd HH:ss")
    private LocalDateTime joinDate;

    //์—”ํ‹ฐํ‹ฐ๋ฅผ DTO๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ์ƒ์„ฑ์ž

    public UserSignUpResponseDTO(UserEntity userEntity) {
        this.email = userEntity.getUserEmail();
        this.userName = userEntity.getUserName();
        this.joinDate = userEntity.getJoinDate();
    }
}


/**
 * DTO๋Š” ๋‹จ์ˆœํžˆ ๊ณ„์ธต๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ๊ทธ๊ฒƒ์ด ํ•„์ˆ˜๋Š” ์•„๋‹™๋‹ˆ๋‹ค.
 *
 * ๋ฌผ๋ก  ๋ ˆ์ด์–ด๊ฐ„ ๋ฐ์ดํ„ฐ ์ด๋™์ด ํ•„์š”ํ•˜๋ฉด DTO๋ฅผ ์ด๋™ํ•ด๋„ ๋˜์ง€๋งŒ, Entity๋ฅผ ์ด์šฉํ•˜์…”๋„ ๋˜๊ณ , ๋‹จ์ˆœํžˆ String, Map๋“ฑ์„ ์ด์šฉํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค.
 */

 

์ฝ”๋“œ๋ฅผ ๋ณด์ž.

์ผ๋‹จ ์‘๋‹ต์ด๊ธฐ ๋•Œ๋ฌธ์—.. ํšŒ์› ๊ฐ€์ž…์„ ํ•˜๊ณ  ๋‚˜๋ฉด ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ์˜ฌ์ง€์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด๋ณด์ž.

์Œ.. ๋‚˜๋Š” ์ด๋ฉ”์ผ(email)์ด ์žˆ์—ˆ์œผ๋ฉด ์ข‹๊ฒ ๊ณ ,, ํšŒ์› ์ด๋ฆ„!(userName)์ด ์žˆ์—ˆ์œผ๋ฉด ์ข‹๊ฒ ์–ด! ๋˜,,๊ฐ€์ž…๋‚ ์งœ(JoinDate)๊นŒ์ง€.

private String email;
private String userName;
@JsonFormat(pattern = "yyyy-MM-dd HH:ss")
private LocalDateTime joinDate;

๊ทธ๋ž˜์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งŒ๋“ค์–ด ์ฃผ์—ˆ๋‹ค.

 

์–ด,, ๊ทธ๋Ÿฐ๋ฐ ์ €๋ฒˆ์‹œ๊ฐ„์— ๋งŒ๋“ค์—ˆ๋˜ UserSignUpDTO ์™€ ๋‹ค๋ฅด๊ฒŒ ์ด๋ฒˆ์—๋Š” ์—”ํ‹ฐํ‹ฐ๋ฅผ DTO๋กœ ๋ณ€๊ฒฝํ•˜๋Š”  ์ƒ์„ฑ์ž๊ฐ€ ์žˆ๋‹ค!

๋‹น์—ฐ! ์œ„์—์„œ ๋ถ€ํ„ฐ ๊ฒŒ์† ๊ฐ•์กฐํ–ˆ์ง€๋งŒ response๋Š” ์—”ํ‹ฐํ‹ฐ์—์„œ DTO๋กœ! ๊ฐ€์•ผ๋˜๊ธฐ ๋•Œ๋ฌธ์— 

์š”์ฒญ์€ dto ์—์„œ entity๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ์ƒ์„ฑ์ž๊ฐ€ ์žˆ์—ˆ๋”ฐ๋ฉด ์‘๋‹ต์€ ๊ทธ ๋ฐ˜๋Œ€๊ฒ ์ง€~!!

 

//์—”ํ‹ฐํ‹ฐ๋ฅผ DTO๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ์ƒ์„ฑ์ž

public UserSignUpResponseDTO(UserEntity userEntity) {
    this.email = userEntity.getUserEmail();
    this.userName = userEntity.getUserName();
    this.joinDate = userEntity.getJoinDate();
}

 ๊ทธ๋ฆผ์œผ๋กœ ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

email ์œ„์ฃผ๋กœ ๋นจ๊ฐ„ ์„ ์œผ๋กœ ๊ทธ๋ ธ๋Š”๋ฐ, username, joindate ๋ชจ๋‘  ๊ฐ™์€ ํ๋ฆ„์ด๋‹ค.

 


 

+ DTO ์ถ”๊ฐ€ ์ƒ์‹? ใ…‡ใ…‡..


 DTO๋Š” ๋‹จ์ˆœํžˆ ๊ณ„์ธต๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ๊ทธ๊ฒƒ์ด ํ•„์ˆ˜๋Š” ์•„๋‹™๋‹ˆ๋‹ค.
 
  ๋ฌผ๋ก  ๋ ˆ์ด์–ด๊ฐ„ ๋ฐ์ดํ„ฐ ์ด๋™์ด ํ•„์š”ํ•˜๋ฉด DTO๋ฅผ ์ด๋™ํ•ด๋„ ๋˜์ง€๋งŒ, Entity๋ฅผ ์ด์šฉํ•˜์…”๋„ ๋˜๊ณ , ๋‹จ์ˆœํžˆ String, Map๋“ฑ์„ ์ด์šฉํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค.