-
DB 분리 스키마 vs 테이블프로그래밍/MSA 2024. 11. 28. 16:53
MSA 환경에서 데이터베이스를 어떻게 할 지 고민
도커컴포즈로 mysql과 레디스를 묶어 사용하려 했다.
이 경우 레디스는 key-space를 도메인 별로 나누면 된다.
하지만 mysql은 각 도메인마다 독립적인 데이터베이스를 가져야하는데 어떻게 구현해야하나 고민이 되었다.
방식은 두가지가 있다.
1. 각 도메인이 다른 스키마를 사용
2. 같은 스키마를 공유하되, 도메인 별로 테이블을 분리
1. 각 도메인이 다른 스키마를 사용
Order는 order_db, Product는 product_db, Auth는 auth_db
로 스키마를 분리할 수 있다.
이 경우 각 도메인은 url이 분리되어 각자 독립적인 db를 보유한 것처럼 사용할 수 있다.
jdbc:mysql://mysql:3306/product_db jdbc:mysql://mysql:3306/order_db jdbc:mysql://mysql:3306/auth_db
장점으로는 각 도메인이 물리적으로 다른 공간을 사용하기 때문에 충돌 가능성이 없으며,
데이터베이스 수준의 독립성을 가질 수 있다.
또한 개별 스키마를 사용하므로 권한 제어 및 데이터 관리가 쉽다.
문제 발생 시 해당 스키마만 백업 또는 복구 할 수 있기 때문에 문제 해결이 쉽다.
마지막으로 MSA 확장 시 물리적으로 DB를 분리하기 쉽다.
2. 같은 스키마를 공유하되, 도메인 별로 테이블을 분리
msa_example 이라는 스키마 아래에
product, order, auth 테이블이 존재한다.
이 경우엔 같은 도메인을 쓰고 내부에서 테이블이 독립적이다.
테이블끼리 직접 의존하지 않고 http 통신을 통해 데이터가 교환되기 때문에 논리적 독립성을 유지한다.
또한 구성이 쉬우며, 설정이 간편하다.
결론
도커를 사용하는 기준에서는 스키마분리가 더 쉽다고 생각한다.
도커컴포즈 yml에서 각 스키마를 작성해야하므로 코드가 길어진다는 것이 단점인데
yml파일을 단 한번만 작성하면 되므로 큰 문제는 아니라고 생각한다.
'프로그래밍 > MSA' 카테고리의 다른 글
마이크로서비스 깃허브 관리방식 (0) 2024.11.28 Hystrix와 Resilience4j "제공"과 "실행"의 차이 (0) 2024.11.20