티스토리 뷰

이 과정을 거쳐야 하는 이유가 뭘까?

 

로직이 명확하다.

초기 구현 시간은 더 들지만 추후에 수정이 필요한 경우 오히려 수정시간이 짧아진다.

 

프론트엔드가 요구하는 정보가 변경되었다면, ResDTO 만 수정하면 된다.

프론트엔드에서 들어오는 정보가 변경되었다면 ReqDTO 만 수정하면 된다.

 

엔티티 field 와 controller 에서 다룰 data 가 100% 동일한 경우는 거의 없을 것이다. 필드명도, 주어지는 정보도 주어야 할 정보도 다르다.

 

그래서 유지보수 측면에서 Transfer 객체를 만들어주는 것이다. 

package com.ssafy.db.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

import lombok.*;

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Builder
public class Book {
   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private int id;
   
   @Column(name = "book_name")
   private String bookName;
   
   @Column(name = "book_author")
   private String bookAuthor;
   
   @Column(name = "book_contents")
   private String bookContents;
   
   @Column(name = "book_publisher")
   private String bookPublisher;
   
   @Column
   private String isbn;
   
   @Column(name = "book_pub_year")
   private int bookPubYear;
   
   @ManyToOne
   @JoinColumn(name = "GENRE_ID")
   private Genre genre;
   
   @Column(name = "book_thumbnail_url")
   private String bookThumbnailUrl;
   
   @Column(name = "loan_count")
   private int loanCount;
}
package com.ssafy.DTO;

import java.util.Date;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class BookDTO {
   private int id;
   private String bookName;
   private String bookAuthor;
   private String bookContents;
   private String bookPublisher;
   private String isbn;
   private int bookPubYear;
   private int loanCount;
   private int genreId;
   private String bookThumbnailUrl;
}
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class GetBookRes {
    private int id;
    private String name;
    private String author;
    private String contents;
    private String publisher;
    private String isbn;
    private int pubYear;
    private int loanCount;
    private int genreId;
    private String thumbnailUrl;

    public GetBookRes(BookDTO data) {
        setName(data.getBookName());
        setAuthor(data.getBookAuthor());
        setContents(data.getBookContents());
        setPublisher(data.getBookPublisher());
        setIsbn(data.getIsbn());
        setPubYear(data.getBookPubYear());
        setLoanCount(data.getLoanCount());
        setGenreId(data.getGenreId());
        setThumbnailUrl(data.getBookThumbnailUrl());
    }
}

'Spring' 카테고리의 다른 글

ResponseEntity 에 대해 알아봅시다  (0) 2022.02.02
RuntimeException 에 대해 알아봅시다  (0) 2022.02.02
Intellij Tip  (0) 2022.01.20
JpaRepository + PagingAndSortingRepository + CrudRepository  (0) 2022.01.20
SpringBoot(JPA) vs. Django  (0) 2022.01.20
댓글