MSA(Clound)에서 DB의 정확한 저장 위치 및 JPA에서의 연관 관계 정의는?

윤태호·2023년 3월 2일
0

TechTalk

목록 보기
2/8

1. MSA에서 DB Storage?

DB는 유일성과 보안이 매우 중요하므로 기업들은 DB를 매우 중요히 여긴다. 그러면 과연 MSA로 넘어가는 프로젝트들은 DB를 어디에 보관하고 있는가?

  1. Kubernetes Pod
    우리는 Pod안의 컨테이너에 DB를 띄울 수 있으며 하지만 Pod는 언제든 죽을 수가 있으며, 그 때 만약 중요한 정보의 데이터를 잃어버리면 데이터의 무결성과 일관성을 잃기 쉬워진다. 그렇기에 우리는 Pod를 설정한 후에 PV,PVC를 설정하여 Pod가 꺼졌을 때도 꺼지긴 전의 데이터를 다시 켜진 Pod에 잘 마운트 할 수 있도록 설정해야한다.
  2. Amazon EC2 on DB or RDS
    Amazon EC2를 띄우거나 RDS에 DataBase를 띄워서 DB서버로 활용할 수 도 있다. 하지만 EC2의 DB를 사용하기 위해서 결국 외부 포트를 허용하고 사용해야하는데 보안에 취약하다는 단점이 있다.
  3. Amazon EC2 on DB or RDS in Kubernetes
    기존 Kubernetes의 PV보다 보안을 높이기 위해 설정을 하는 방법이라고 생각하면 편하다. 즉 Kubernetes에서 Pod로 띄우는 것이 아니라, EC2와 RDS가 하나의 노드로 설정하는 것이며, Kubernetes와 분리를 통해 보안과 무결점을 높이기 위한 방법이다.(돈은 두배^^)

2. MSA에서 JPA 설정

MSA에서 각 서비스마다 DB를 구축하고자 하는 것을 익히 알고 있다. 그렇다면 oneToMany or ManytoMany 등의 관계를 어떻게 정의해야 할까에 대한 의문이 든다.

  1. Adapter Entity 생성
    서로 참조해야할 필요가 있는 데이터들을 따로 sub Entity로 만들어준다.
  2. 전역 고유 식별자 참조(추론 객체 참조)
    고유 ID를 가진 ID를 불러오는 명령을 API 넣어 참조할 수 있게 만들어준다.
  3. MSA에서 꼭 DB는 겹치면 안된다???
    DB를 다른 서비스에 같게 만들어줘도 된다, 그것이 성능과 속도 측면에서 더 우위를 점할 수 있다면.(MSA 책 내용)
  • 단점 : JPA를 짜는 것이 기존 모놀리식보다 복잡해지며 서로 다른 DB이게 CUD가 일어날 때 Transaction 설정을 잘해줘야한다.(즉 개발자들의 머리만 아파진다.)

위의 의문점들을 정리해 놓았고 추후 프로젝트에서 활용해보면서 코드를 남겨보도록 하겠습니당.(링크 달러 올께요)

참조 사이트
https://medium.com/@SlackBeck/id%EB%A1%9C-%EB%8B%A4%EB%A5%B8-%EC%95%A0%EA%B7%B8%EB%A6%AC%EA%B2%8C%EC%9E%87%EC%9D%84-%EC%B0%B8%EC%A1%B0%ED%95%98%EB%9D%BC-4d64f1591e60

https://www.popit.kr/jpa-%EC%97%B0%EA%B4%80-%EA%B4%80%EA%B3%84-%EC%A1%B0%ED%9A%8C-%EA%B7%B8%EB%A6%AC%EA%B3%A0-msa/

https://prod.velog.io/@dasd412/JPA-%EA%B4%80%EA%B3%84%EB%A5%BC-MSA%EC%97%90-%EC%A0%81%EC%9A%A9%ED%95%B4%EB%B3%B4%EA%B8%B0

profile
성장하는것을 제일 즐깁니다.

0개의 댓글