ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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파일을 단 한번만 작성하면 되므로 큰 문제는 아니라고 생각한다.

     

     

     

Designed by Tistory.