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

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

by @ENFJ 2023. 2. 11.

ํšŒ์›๊ฐ€์ž… DTO๋ฅผ ๋ชจ๋‘ ๋งŒ๋“ค์–ด๋ณด์•˜๋‹ค.

 

์ด์ œ ํšŒ์›๊ฐ€์ž… DTO๋ฅผ ๋งŒ๋“ค์—ˆ์œผ๋‹ˆ,, ๋กœ๊ทธ์ธ! DTO ๋„ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ค์–ด๋ณด์ž.

 

 

๋‹ค์‹œ ํ•œ๋ฒˆ ์ƒ๊ธฐ ์‹œํ‚ฌ๊ฒธ MVC ํ๋ฆ„์„ ํ•œ๋ฒˆ ๋ณด๊ณ  ์ง„ํ–‰ํ•˜๊ฒ ๋‹ค.

 

๋จผ์ € ๋กœ๊ทธ์ธ ์š”์ฒญ DTO (LoginRequestDTO) ๋ถ€ํ„ฐ ๋งŒ๋“ค๊ฒ ๋‹ค.

 

 

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

package com.example.projectpicker.user.dto;

import lombok.*;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;

// ํด๋ผ์ด์–ธํŠธ ----> ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋กœ ์š”๊ตฌ!!๊ณผ์ •์—์„œ ์‚ฌ์šฉ๋˜๋Š” DTO (๋กœ๊ทธ์ธ ๋ฒ„ํŠผ ํด๋ฆญ์‹œ)
@Setter @Getter @ToString
@NoArgsConstructor
@AllArgsConstructor
@Builder
@EqualsAndHashCode
public class LoginRequestDTO {

    @Email
    @NotBlank
    private String email;

    @NotBlank
    @Size(min = 8, max = 20)
    private String password;
}

๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด DB๋กœ ๋‚ ๋ผ๊ฐ€๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž.

 

์œ„ ์‚ฌ์ง„ ์ฒ˜๋Ÿผ ์ด๋ฉ”์ผ, ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฐ€ ํ•„์š”ํ•œ ๋กœ๊ทธ์ธํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๊ฒ ๋‹ค ํ•œ๋‹ค๋ฉด, 

 

private String email;
private String password;

์ด๋ ‡๊ฒŒ ๋‘๊ฐœ๋งŒ ํ•„์š”ํ•  ๊ฒƒ์ด๋‹ค. 

 


๊ทธ๋Ÿผ ์ด์ œ  ์‘๋‹ตํ•ด์ฃผ๋Š” LoginResponseDTO ๋„ ๋งŒ๋“ค์–ด๋ณด์ž.

 

package com.example.projectpicker.user.dto;


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

import java.time.LocalDate;

// ๋กœ๊ทธ์ธ์‹œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ตํ•ด์ฃผ๋Š” ๊ฐ์ฒด ( ํด๋ผ์ด์–ธํŠธ <---- DB)
@Setter @Getter @ToString
@NoArgsConstructor
@AllArgsConstructor
@Builder
@EqualsAndHashCode
public class LoginResponseDTO {
    private String email; // ์ด๋ฉ”์ผ
    private String userName; // ํšŒ์› ์ด๋ฆ„

    @JsonFormat(pattern = "yyyy๋…„ MM์›” dd์ผ")
    private LocalDate joinDate; // ๊ฐ€์ž… ๋‚ ์งœ

    private String token; // ์ธ์ฆ ํ† ํฐ

    private String message; // ์‘๋‹ต ๋ฉ”์‹œ์ง€

    // ์—”ํ‹ฐํ‹ฐ๋ฅผ DTO๋กœ ๋ณ€๊ฒฝ
    public LoginResponseDTO(UserEntity userEntity, String token){
        this.email = userEntity.getUserEmail(); // ์ด๋ฉ”์ผ  -- DB ์ด๋ฉ”์ผ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€์„œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ต ์ „๋‹ฌํ•˜๋Š” dto์— ๋„ฃ์–ด์ค€๋‹ค.
        this.userName = userEntity.getUserName(); // ํšŒ์› ์ด๋ฆ„
        this.joinDate = LocalDate.from(userEntity.getJoinDate()); // ๊ฐ€์ž… ๋‚ ์งœ
        this.token = token; // ํ† ํฐ
    }
}
๋กœ๊ทธ์ธ ํ›„ ์‘๋‹ต ๋ฐ›๊ณ  ์‹ถ์€ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด๋ณด์ž.
 ํšŒ์› ์ด๋ฉ”์ผ์„ ๋ฐ›๊ณ  ์‹ถ๊ณ , ํšŒ์› ์ด๋ฆ„, ๊ฐ€์ž…๋‚ ์งœ , ์ธ์ฆ ํ† ํฐ, ์‘๋‹ต ๋ฉ”์‹œ์ง€ ๋ฅผ ๋ฐ›๊ณ ์‹ถ์–ด!
private String email; // ์ด๋ฉ”์ผ
private String userName; // ํšŒ์› ์ด๋ฆ„
private LocalDate joinDate; // ๊ฐ€์ž… ๋‚ ์งœ
private String token; // ์ธ์ฆ ํ† ํฐ
private String message; // ์‘๋‹ต ๋ฉ”์‹œ์ง€

 

์ด์ œ ์‘๋‹ต์ด๊ธฐ ๋•Œ๋ฌธ์— ํšŒ์›์—”ํ‹ฐํ‹ฐ์—์„œ DTO๋กœ ํ๋ฆ„์ด๋‹ˆ๊นŒ

 

public LoginResponseDTO(UserEntity userEntity, String token){
    this.email = userEntity.getUserEmail(); // ์ด๋ฉ”์ผ  -- DB ์ด๋ฉ”์ผ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€์„œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ต ์ „๋‹ฌํ•˜๋Š” dto์— ๋„ฃ์–ด์ค€๋‹ค.
    this.userName = userEntity.getUserName(); // ํšŒ์› ์ด๋ฆ„
    this.joinDate = LocalDate.from(userEntity.getJoinDate()); // ๊ฐ€์ž… ๋‚ ์งœ
    this.token = token; // ํ† ํฐ
}

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค.

 


 

Entity, Dto ๊ตฌ๋ถ„ํ•˜๋Š” ์ด์œ ?

๋งŒ์•ฝ์— Dto๊ฐ€ ์—†์ด Entity๋งŒ ์กด์žฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด DB์™€ ์ง์ ‘์ ์œผ๋กœ ๋งคํ•‘๋˜์–ด์žˆ๋Š” Entity๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์—ฌ๋Ÿฌ ํด๋ž˜์Šค์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ฒŒ ๋ ๊ฒƒ์ด๋‹ค.
ํ•˜์ง€๋งŒ Dto๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ Entity๊ฐ€ ์•„๋‹Œ View์™€ ํ†ต์‹ ํ•˜๋Š” Dto์—์„œ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋งˆ์ง€๋ง‰ commit๋‹จ๊ณ„๋งŒ Entity์—์„œ ์ฒ˜๋ฆฌ๋˜๋„๋ก ํ•œ๋‹ค๋ฉด ํด๋ž˜์Šค์— ์˜ํ–ฅ์ด ๋œ ๋ฏธ์น ๊ฒƒ์ด๋‹ค.

 

์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ค ๊ฒŒ์‹œ๋ฌผ์˜ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด๋ฉด ๋จผ์ € ํ•ด๋‹น ๊ฒŒ์‹œ๋ฌผ์˜ id๋ฅผ ๊ฐ€์ง€๊ณ  Repository๋ฅผ ํ†ตํ•ด ํ•ด๋‹น๊ฒŒ์‹œ๋ฌผ์˜ DB์ •๋ณด๋ฅผ ์ฐพ๋Š”๋‹ค.

์ด๋•Œ Repository๋Š” Entityํ˜•์‹์œผ๋กœ ๋ฆฌํ„ดํ•œ๋‹ค. ์ดํ›„ ํ•ด๋‹น Entity๋ฅผ toDto๋ฅผ ์ด์šฉํ•˜์—ฌ Dto๋กœ ๋ณ€ํ™˜ ํ›„ ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ์„ ๋ฐ˜์˜ํ•˜์—ฌ Dto์— ์ €์žฅํ•œ๋‹ค. ์ดํ›„ toEntity๋ฅผ ํ†ตํ•ด Entityํ™” ์‹œํ‚จ ํ›„ save๋ฅผ ํ•œ๋‹ค.

[ref : https://velog.io/@alstn_dev/Entity%EC%99%80-Dto-%EC%99%9C-%EB%82%98%EB%88%84%EC%96%B4%EC%95%BC-%ED%95%A0%EA%B9%8C]