๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
TIL

Spring JPA | Entity์™€ Dto ๋ถ„๋ฆฌ

by bamDal 2025. 2. 17.

 

Spring JPA๋ฅผ ํ™œ์šฉํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ๋œ ์ ์ด ์žˆ์–ด ์ •๋ฆฌํ•˜๊ณ ์ž ํ•œ๋‹ค.

Entity๋ฅผ ์ •์˜ํ•ด์„œ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ด์ „ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์„œ๋น„์Šค๋‹จ์—์„œ Entity์™€ Dto๋ฅผ ๋นŒ๋” ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๊ณค ํ–ˆ์—ˆ๋Š”๋ฐ, ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” Entity์— toResponseDto() ๋ฉ”์„œ๋“œ์™€ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ์—ˆ๋‹ค.

์ด์— ๋Œ€ํ•ด Entity๋ฅผ ๋ณดํ˜ธํ•˜๋ผ! ๋ผ๋Š” ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•˜๊ณ , ๊ณ ์น˜๋Š” ๋ฐฉ๋ฒ•๋„ ์ „๋‹ฌ๋ฐ›์•˜๊ธฐ์— ๊ธฐ๋กํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

 

 

๐Ÿง Entity๋ฅผ ๋ณดํ˜ธํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

Entity๋Š” ์ค‘์š”ํ•œ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด์ด๋ฏ€๋กœ ์ตœ๋Œ€ํ•œ ์ˆœ์ˆ˜ํ•œ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด๋กœ ์œ ์ง€ํ•˜๊ณ , DTO์™€์˜ ์˜์กด์„ฑ์„ ์—†์• ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
Entity๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ 1:1 ๋งคํ•‘๋˜๋Š” ๊ฐ์ฒด์ธ๋ฐ, DTO์™€์˜ ๋ณ€ํ™˜ ๋กœ์ง์ด ๋“ค์–ด๊ฐ€๋ฉด ์—ญํ• ์ด ์• ๋งคํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ, ๋ณ€ํ™˜์ด ํ•„์š”ํ•˜๋‹ค๋ฉด DTO์— ๋ณ€ํ™˜ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์˜ณ๋‹ค!

 

์ด์ „์— ์ž‘์„ฑํ•œ Entity ์ฝ”๋“œ

@Entity
@Table(name = "p_restaurant_menu")
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@Builder
public class Menu extends BaseEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.UUID)
    private UUID rmId;
    @Column(length = 100, nullable = false)
    private String rmName;
    @ColumnDefault("true")
    private Boolean isPublic;

    public Menu(CreateMenuRequestDto requestDto) {
        this.rmName = requestDto.getRmName();
        this.isPublic = requestDto.getIsPublic();
    }

    public MenuResponseDto toResponseDto() {
        return MenuResponseDto
                .builder()
                .rmId(this.rmId)
                .rmName(this.rmName)
                .isPublic(this.isPublic)
                .build();
    }

์ƒ์„ฑ์ž์™€ toResponseDto ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ๊ฐ RequestDto์™€ ResponseDto๋กœ ์˜ฎ๊ฒจ์„œ ์ž‘์„ฑํ•ด์ฃผ์—ˆ๋‹ค.

 

RequestDto 

@Builder
@Getter
@AllArgsConstructor
public class CreateMenuRequestDto {

    @NotNull
    private UUID resId;
    @Length(max = 100)
    @NotNull
    private String rmName;
    private Boolean isPublic;
    @NotNull
    private UUID resId;
    private Boolean isPublic;

    public Menu toEntity(CreateMenuRequestDto requestDto) {
        return Menu
            .builder()
            .rmName(requestDto.getRmName())
            .isPublic(requestDto.getIsPublic())
            .build();
    }
}

 

ResponseDto

@Getter
@Builder
@AllArgsConstructor
public class MenuResponseDto {
    private UUID rmId;
    private String rmName;
    private Boolean isPublic;
}
    private UUID rmId;
    private String rmName;
    private Boolean isPublic;

    public static MenuResponseDto fromEntity(Menu menu) {
        return MenuResponseDto
            .builder()
            .rmId(menu.getRmId())
            .rmName(menu.getRmName())
            .isPublic(menu.getIsPublic())
            .build();
    }
}