작성
·
538
2
영한님 안녕하세요.
오랜만에 질문을 남기고 갑니다. 수강한 강좌들이 많아 어느 강좌에 질문을 남겨야 할 지 잠시 고만했다는 우스개 소리를... ㅎㅎ
요즘은 영한님이 가르쳐 주신 JPA 를 MSA 와 함께 엮어가며 학습을 하고 있는데요. 갈수록 혼란스러워지네요..
영한님 강좌에서 기본으로 등장하는 Team 이라는 Entity 가 여러 개의 MSA 에서 공유될 필요가 있다는 가정하에 Team 의 Persistance 를 관리하는 MSA 에서 다른 MSA 들로 MQ 활용하여 공유되고 있다고 예를 들어 보겠습니다.
이 경우, Team 을 오로지 조회 용도로만 활용하는 MSA 에서는 Team 을 어떻게 관리하는 것이 올바른가요?
어찌됐든 연관관계 맵핑을 위해서는 다른 MSA 에서도 Team 을 Entity 로 만들고 사용해야 하는 지요 ??
JPA 를 활용하지 않게 되면 각 MSA 에서 DB JOIN 문만 작성하면 Team 의 정보들을 쉽게 이용할 수 있을텐데 MSA 에서 JPA 를 활용하게 되면 이렇게 중복된 Entity 를 어떻게 관리해야 할 지가 좀 막연하네요..도움될만한 어드바이스를 간략히라도 부탁드려볼께요.
요즘 건강에 주의하시구요~
답변 3
1
좋은 답변 정말 감사드립니다.
리뷰 시스템 내에서 주문 정보의 영속 상태를 관리할 일은 없더라도 주문 정보를 리뷰 시스템 입장에서는 엔티티로 관리하는 것이 일반적이고, 엔티티로 관리는 하더라도 연관관계 맵핑은 상황에 따라 설정하든, 하지않든 차이를 둘 수 있다는 의미로 받아들였는데 맞겠죠? ㅎㅎ
저는 영속 관리가 주문시스템에 의해 관리가 될테니 리뷰시스템에서 주문정보를 엔티티로 보는 게 맞는지에 대한 물음이 있었는데 제가 잘못 생각했나 봅니다. 답변 감사드립니다.
0
네 맞습니다^^
사실 엔티티로 관리하지 않아도 되지요. 그런데 또 엔티티로 관리하는게 아무래도 편하니까요.
저도 처음에 MSA를 설계할 때는, 같은 엔티티에 대해서 결국 복제가 일어나야 하는데, 엔티티 모양을 전체 MSA에서 똑같이 유지해야 하나? 이게 고민이었습니다. 그런데, 결국 Bounded Context 개념을 가지고, 각각의 MSA 도메인을 중심으로 설계를 풀어가니 이건 해당 도메인에 따라서 보는 관점이 달라지더라구요. 결국 똑같이 유지할 필요가 없고, 시스템의 경계를 넘어가면 해당 엔티티를 바라보는 관점 자체가 달라지므로 달라진 관점을 중심으로 새롭게 엔티티를 정의하면 됩니다^^
또 고민되고 궁금하신 내용은 언제든지 편하게 질문주세요^^
0
ㅎㅎㅎ 아주 좋은 질문입니다. 아리마님
회사 업무시간에 항상 저를 괴롭히는 주제이기도 하구요 ㅋㅋ
우선 이 부분은 MSA이기 때문에 시스템도 완전히 다른 시스템이고 데이터베이스도 완전히 다른 데이터베이스를 사용합니다.
(논란의 여지가 있을 수 있지만, 저는 MSA는 데이터베이스까지 완전히 분리된 시스템이어야 한다 생각합니다. 안그러면 DB 장애나면 다 죽어요 ㅠㅠ)
그리고 가장 중요한점이 A팀에서 생각하는 Team 엔티티와 B팀이 원하는 Team 엔티티는 완전히 다른 엔티티 입니다.
이게 이제 Bounded Context에 따라서 같은 단어도 다른 뜻으로 해석할 수 있는 것이지요.
예를 들어서 주문 시스템에서 생각하는 Order데이터는 정말 중요한 주문의 핵심 데이터 입니다. 만약 주문의 결과를 이벤트로 전파하게 되면 필요한 시스템에서 Order 데이터를 받을 수 있습니다. 그런데 예를 들어서 리뷰를 남길 때 주문 정보가 약간 필요해서 리뷰 시스템에서 주문 데이터를 저장한다면, 본인 시스템에 필요한 주문 데이터로 변환해서 (변환 계층) 완전히 다른 주문 데이터로 다루게 됩니다. 결국 주문 시스템의 주문 엔티티와 리뷰 시스템에서 받아서 사용하는 주문 엔티티는 완전히 다른 주문 엔티티 입니다.
따라서 MSA 입장에서 이건 중복이라기 보다는, 본인의 시스템에 맞는 도메인으로 변환된 것이지요. 리뷰 시스템 입장에서는 데이터는 외부에서 흘러들어오지만 본인의 도메인에 맞추어 정리된 엔티티이기 때문에, 필요하면 연관관계를 맺어서 사용해도 됩니다.(물론 연관관계를 안 맺는게 더 나은 경우도 있습니다. 이건 상황에 따라서 조금씩 달라집니다.)
감사합니다^^