Entity, DTO

김태훈·2024년 1월 4일
0

Spring

목록 보기
10/16

Entity

Entity 클래스는 실제 DB 테이블과 매핑 되는 클래스로, 실제 테이블의 존재하는 컬럼들로 필드를 가지는 객체입니다.
즉 DB테이블의 컬럼과 Entity클래스의 필드와 1:1로 매핑됩니다.

Entity는 DB의 영속성의 목적으로 사용되는 객체이며, 때문에 Response와 Request의 값을 전달하는 클래스로 사용하는 것은 좋지 않습니다.

Entity 클래스에서는 setter의 사용을 지양해야 합니다

setter로의 접근으로 인한 객체의 일관성, 안정성을 보장하기 힘들어지기 때문에 Entity에서는 setter 대신 생성자 혹은 빌더를 사용하게 됩니다.

@Builder
@Getter
@Entity
@NoArgsConstructor
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long idx;
    private String name;
    private String gender;
 
    public User(Long idx, String name, String email) {
        this.idx = idx;
        this.name = name;
        this.gender = gender;
    }
}

// builder pattern 사용 방법
User user = User.builder()
        .name("Hoon")
        .gender("male")
        .build();

생성자를 사용하여 초기화하는 경우 불변 객체로 사용이 가능하고, 이를 이용하여 데이터가 전달되는 과정에서 값이 변하지 않음을 보장할 수 있습니다.

빌더 패턴을 이용하는 경우 멤버 변수가 많아지더라도 어떤 값을 필드에 넣는지 코드를 통해 확인하기 쉽고, 필요한 값만 넣을 수 있다는 장점이 있습니다.

DTO, Data Transfer Object

DTO는 계층간 데이터 교환이 이루어질 수 있도록 하는 객체입니다.

Controller처럼 클라이언트 단과 직접 마주하는 계층에서 Entity 대신 DTO를 사용하여 데이터를 전달하며, DB 처리 로직을 보이지 않고 활용합니다.
DTO는 getter, setter를 포함하고 이 외의 비즈니스 로직은 포함하지 않습니다.

Entity와 DTO를 분리하는 이유

  • Entity는 단순히 데이터를 담은 객체가 아닌 실제 DB와 연관된 중요한 역할을 합니다.

  • DTO는 테이블에 매핑되는 정보와 실제 View에 전달해야하는 정보가 다를 경우 필요에 맞춰 데이터를 가공해야 합니다. 만약 Entity를 그대로 View에 전달하게 된다면 원하지 않는 데이터도 전달하게 될 수 있습니다.
    이를 방지하기 위해 DTO를 사용하여 로직을 구현해서 방지할 수 있습니다.

0개의 댓글