우선 좋은 강의 너무 감사합니다!
msa 분산 환경을 해당 강의로 처음 접하는데요! 공부할 때 항상 모놀로식 방식으로 테이블을 설계했는데, 분산환경에서 테이블 설계는 모놀로식 방식과 상당히 다르다는 느낌을 받았습니다. 혹시 이런 분산환경에서의 테이블 설계 방식은 어떤식으로 공부하면 좋을까요?
우선 좋은 강의 너무 감사합니다!
msa 분산 환경을 해당 강의로 처음 접하는데요! 공부할 때 항상 모놀로식 방식으로 테이블을 설계했는데, 분산환경에서 테이블 설계는 모놀로식 방식과 상당히 다르다는 느낌을 받았습니다. 혹시 이런 분산환경에서의 테이블 설계 방식은 어떤식으로 공부하면 좋을까요?
민수님, 안녕하세요!
먼저 개별 테이블의 단순 데이터 모델링 관점에서는 모놀리틱 방식과 큰 차이는 없을 것 같습니다.
하지만 물리적인 분산에 대해서는 여러 방법론 또는 성능, 비용 측면에서 설계 방식이 달라지게 됩니다.
그래서 특정한 정답이 있는 주제는 아니고,
MSA, DDD, 데이터베이스 이론, 시스템 특성, 저장소 분리 이점, 성능 등 다양한 요소가 고려됩니다.
개인적으로는 주로 아래와 같은 요인들을 고려하면서 설계하고 있습니다.
도메인 별 책임 분리(도메인이란 용어가 아직 낯설다면, 마이크로서비스 별 책임 분리 정도로 인지하셔도 됩니다.)
도메인 별로 데이터베이스를 구성한다면, 이 데이터가 현재 구성하고 있는 도메인에 속한 개념일지 고려해 봅니다.
좋아요 강의에서, 좋아요 수 테이블의 설계를 고민하는 과정이 이러한 내용이라고 봐주시면 됩니다. (예시가 조금 간단하긴 하지만요..!)
쿼리 패턴
예시로 샤딩 또는 도메인별 책임 분리를 고려해야할 때, 쿼리에 필요한 데이터들이 물리적으로 여러 DB 또는 테이블에 분산되어 있을 수 있습니다.
따라서 요구사항을 만족하기 위한 쿼리를 수행하려면 여러 DB 또는 테이블로 데이터를 질의하여 조합하는 비용이 필요한데요, 이를 위한 질의 비용이 증가될 수 있습니다.
이러한 비용을 줄이려면 분산하고자 하는 데이터를 단일 DB에서 관리해야할 수도, 중복으로 관리해야할 수도, 비정규화가 필요할 수도 있습니다.
또는 도메인 간에 순환 참조 문제를 해결해야할 때도 있습니다.
이러한 내용들은 인기글, 게시글 조회 최적화 강의에서도 일부 살펴봅니다.
트랜잭션 관리
분산 환경에서의 트랜잭션 관리 비용 및 어려움은 인기글 요구사항을 진행하면서 살펴보게 되는데요, 이러한 부분도 고려가 필요합니다.
데이터의 중복
위에 언급드린 쿼리 패턴과 연관된 부분이기도 한데요, 성능/책임 분리를 위해 원본 데이터를 복제하여 타 DB에서도 동일한 데이터를 중복 관리할 필요성이 생기기도 합니다. 이 경우 타 DB에서도 동일한 데이터를 관리하기 위한 모델이 필요할 수도 있습니다.
일단 당장 생각나는대로 정리해보았는데, 외에도 여러 개념 또는 요구사항을 바탕으로 다양한 요소들을 고려하게 됩니다.
시스템을 운영하면서 지속적으로 고민 및 학습하고 리팩토링하고 직접 경험하다보면 어느정도 그림이 그려지게 되던 것 같습니다.
시스템이 점점 복잡해질수록 초기 구상했던 방향과 달라질 수도 있는 것이고요.
결국 분산 시스템에서 발생할 수 있는 문제를 이해하고 해결할 수 있는 방안을 찾는 과정이 필요하네요.
명확하게 정의내릴 수 있는 내용이 아니라, 제 답변이 다소 추상적으로 다가오실 수 있을 것 같네요.
강의를 계속 진행하면서, 그리고 앞으로 계속 고민하고 경험하면서 점차 궁금증이 해소되실 수 있을 것 같습니다.
만족스러운 답변이 되었을지는 모르겠지만..! 혹시 더 궁금한 점 있으시면 편히 문의주세요!
답글
강민수
2025.01.05정성스러운 답글 정말 감사합니다! 열심히 공부하겠습니다
쿠케
2025.01.05네 감사합니다! 화이팅입니다!