개인 프로젝트를 진행하다가 문득 궁금한 점이 생겼다.
@Entity
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String name;
@Embedded
private Address address;
}
대충 이런 엔티티가 있다고 가정할 때 우리는 멤버의 등록이나 업데이트를 위해 각각 DTO를 만들어준다.
근데 이러한 경우에 임베디드가 걸려있는 address 를 어떻게 해주어야 하는지 고민이 되었다.
내가 생각해낸 방법은 2가지이다.
1. 전부 풀어서 생성
public class addMemberForm {
public long id;
//address 였던 것
public String city;
public String street;
}
임베디드 타입의 장점들(재사용성, 높은 응집도 등)을 포기하는 방법이다.
하지만 비즈니스에 맞춰서 적용할 수 있다.
2. 임베디드 필드 그대로 적용
public class addMemberForm {
public long id;
public Address address;
}
임베디드 타입의 장점을 살리는 방법이다.
해결
해당 임베디드 필드가 비즈니스에 너무 의존적이다 -> 별도의 DTO로 풀어냄
그렇게 의존적이지 않다 -> 그대로 사용
거의 변하지 않는 것을 임베디드 필드로 설계하는 것이 좋다. ex) 주소, 좌표 등
따라서 Address 같은 것도 거의 변하지 않는다고 보고 그대로 사용해도 무방하다.
'JPA' 카테고리의 다른 글
@Transactional(readOnly = true) 를 왜 써야할까? (0) | 2024.07.02 |
---|