Entity, DTO, VO에 대해서 알아보기
- Entity, DTO, VO에 대해서 알아본다.
- 각 개념에 대해서 공부하고 이해한 예시 코드에 대해서도 알아본다.
1) Entity
- Entity는 데이터베이스의 테이블과 직접적으로 매핑되는 자바 클래스이다.
- 데이터베이스의 테이블에 해당하는 컬럼들을 필드로 가지고 있는 클래스이다.
- 데이터베이스의 테이블과 1:1로 대응되어야 한다.
- 테이블에 없는 필드를 가지면 안된다.
- 순수한 데이터 객체로 유지되는 것이 좋다.
- Entity 객체는 보통
@Entity
어노테이션으로 표시되고 해당 객체의 인스턴스 하나가 데이터베이스의 한 행(row)에 해당한다.
- 이를 통해 데이터베이스의 CRUD 작업을 수행한다.
@Entity
@Table(name = “users”)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = “username”)
private String username;
…
}
- 해당 Entity는 데이터베이스의
users
테이블에 매핑된다.
- 각 인스턴스가 테이블의 한 행을 나타낸다.
2) VO (Value Object)
- VO는 값 자체를 표현할 때 사용되는 객체로, 값의 변경이 필요 없는 불변 객체를 의미한다.
- VO는 주로 도메인 모델에서 비즈니스 키를 나타내는데 사용된다. 중요한 값을 나타내는 데 중점을 둔다.
public class Address {
private final String street;
private final String city;
private final String zipcode;
public Address(String street, String city, String zipcode) {
this.street = street;
this.city = city;
this.zipcode = zipcode;
}
…
}
- VO는 사용자 주소를 나타내고 불변성을 가지므로 Setter가 없다.
3) DTO (Data Transfer Object)
- DTO (데이터 전송 객체)는 계층 간 데이터 교환을 위해 사용되는 객체이다.
- 주로 데이터베이스에서 데이터를 가져온 후, 다른 계층으로 전달할 때 사용된다.
- 로직을 포함하지 않는 순수한 데이터 객체이다.
- 시스템 간 통신 시 중요 정보를 노출하지 않고 데이터를 안전하게 전달할 때 활용된다.
- 프레젠테이션 (view, controller), 비즈니스 (service), 퍼시스턴스 (DAO, repository) 계층에서 데이터 전달 시 사용된다.
- 데이터베이스에서 추출한 데이터를 저장한 Entity를 controller 계층에 전달 시, DTO를 통해 감싸서 전달하는 방식으로 사용된다.
- 비즈니스 로직이 아닌 데이터만 저장해야 한다.
- 용량 적으며 한 가지 작업만 수행해야한다.
- 데이터베이스에서 꺼낸 값을 DTO에서 임의로 조작할 필요가 없으므로 Setter가 필요없는 경우가 많다.
- 변경 가능성이 있는 DTO를 만들 때 setter를 사용하는데, 변경 필요성 여부는 각 어플리케이션의 요구사항과 설계에 따라 다르다.
- 생성자에서 값을 할당하거나 Builder 패턴을 통해 값을 할당한다.
- 프레젠테이션 계층에서 수신한 데이터를 DTO로 변환해서 비즈니스 계층에 전달하고, 비즈니스 계층에서 처리한 데이터를 DTO로 재포장해서 프레젠테이션 계층으로 반환한다.
public class UserDTO {
private String username;
private String email;
public UserDTO(String username, String email) {
this.username = username;
this.email = email;
}
…
}
- DTO는 로직을 포함하지 않는다.
- 데이터 전송 목적으로만 사용한다.
2023/11/08 글 작성
2023/11/16 내용 추가