Entity
Entity는 실제 DB 테이블과 매핑되는 핵심 클래스
데이터베이스의 테이블에 존재하는 컬럼들을 필드로 가지는 객체
(1:1로 테이블과 매핑되며, 테이블이 가지지 않는 컬럼을 필드로 못가짐)
Entity → persistent의 목적, 즉 Request or Response 값을 전달하는 클래스로 사용하는 것은 안좋음
setter 사용 지양
- 변경되지 않는 인스턴스에 대해서도 setter로 접근이 가능해져서 객체의 일관성, 안전성을 보장하기 힘들어짐.
Builder
setter 대신 초기화 하는 기능으로 멤버 변수가 많아져도 내가 필요한 값만을 넣을수 있음.
예로 프로젝트 때 member 다 선언하고 밑에서 내가 필요한것만 따로
//Entity @Builder @Getter @Entity @NoArgsConstructor public class Member { @Id @GeneratedBalue(strategy = GenerationTye.IDENTITY) private Long idx; private String name; private Double phone; public Member(Long idx, String name, double phone) { this.idx = idx; this.name = name; this.phone = phone; } } // HOW USE Member member = Member.builder() .name('KIM') .phone(010-5039-7151) .build();
DTO (Data Transfer Object)
- DTO는 계층 간 데이터 교환 해주는 객체로 JSON serailization 직렬화에 사용되는 객체
- Controller 클라이언트 단과 직접 마주할 때 entity 대신 DTO를 사용해서 데이터를 교환
- View 와 Controller 사이에서 데이터를 주고 받을 때 활용성이 높다.
public class MemberDTO{
public MemberDTO() {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
위와 같이 하면 setter를 통해 데이터를 넣을수 있어서 DTO를 view→ controller 에 사용할 때 무지하게 편하다.
결론? 왜 둘을 분리할까?
- DTO는 각 계층(Controller, View)끼리 주고받는 상자 개념
- Entity처럼 데이터를 담고 있지만 목적 자체가 전달이므로 읽고 쓰는것이 모두 가능하고 일회성이 강하다.
- DB에서 필요한 정보만 쓰고 싶을 때 Entity를 직접 넘기기보단 DTO를 만들어서 DTO로 불필요한 정보 유출을 막는다.
- 결론
- Entity
- 실제 DB 테이블과 1대1 매핑
- 핵심이기 떄문에 정보가 수정되면 안되기 때문에 request, response 클래스로 사용 x
- DTO
- 계층 간 데이터 교환을 위한 객체
- getter/setter 메소드를 갖을수 있는 객체
- response, request용 객체
- 앞으로 DB를 설계할 때 entity // DB 데이터를 이용할 땐 DTO를 쓰자.
- Entity