DB는 유일성과 보안이 매우 중요하므로 기업들은 DB를 매우 중요히 여긴다. 그러면 과연 MSA로 넘어가는 프로젝트들은 DB를 어디에 보관하고 있는가?
- Kubernetes Pod
우리는 Pod안의 컨테이너에 DB를 띄울 수 있으며 하지만 Pod는 언제든 죽을 수가 있으며, 그 때 만약 중요한 정보의 데이터를 잃어버리면 데이터의 무결성과 일관성을 잃기 쉬워진다. 그렇기에 우리는 Pod를 설정한 후에 PV,PVC를 설정하여 Pod가 꺼졌을 때도 꺼지긴 전의 데이터를 다시 켜진 Pod에 잘 마운트 할 수 있도록 설정해야한다.- Amazon EC2 on DB or RDS
Amazon EC2를 띄우거나 RDS에 DataBase를 띄워서 DB서버로 활용할 수 도 있다. 하지만 EC2의 DB를 사용하기 위해서 결국 외부 포트를 허용하고 사용해야하는데 보안에 취약하다는 단점이 있다.- Amazon EC2 on DB or RDS in Kubernetes
기존 Kubernetes의 PV보다 보안을 높이기 위해 설정을 하는 방법이라고 생각하면 편하다. 즉 Kubernetes에서 Pod로 띄우는 것이 아니라, EC2와 RDS가 하나의 노드로 설정하는 것이며, Kubernetes와 분리를 통해 보안과 무결점을 높이기 위한 방법이다.(돈은 두배^^)
MSA에서 각 서비스마다 DB를 구축하고자 하는 것을 익히 알고 있다. 그렇다면 oneToMany or ManytoMany 등의 관계를 어떻게 정의해야 할까에 대한 의문이 든다.
- Adapter Entity 생성
서로 참조해야할 필요가 있는 데이터들을 따로 sub Entity로 만들어준다.- 전역 고유 식별자 참조(추론 객체 참조)
고유 ID를 가진 ID를 불러오는 명령을 API 넣어 참조할 수 있게 만들어준다.- MSA에서 꼭 DB는 겹치면 안된다???
DB를 다른 서비스에 같게 만들어줘도 된다, 그것이 성능과 속도 측면에서 더 우위를 점할 수 있다면.(MSA 책 내용)
- 단점 : JPA를 짜는 것이 기존 모놀리식보다 복잡해지며 서로 다른 DB이게 CUD가 일어날 때 Transaction 설정을 잘해줘야한다.(즉 개발자들의 머리만 아파진다.)