강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

장연식님의 프로필 이미지
장연식

작성한 질문수

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

마치며

sharding의 기준, shard key 사용에 대해

해결된 질문

작성

·

14

0

대부분 하나의 DB만을 사용하다보니 shard key가 고려되지 않은 테이블 설계를 보고 많이 사용했는데

 

  1. 처음부터 shard key는 고려하면서 설계를 하는것이 좋을까요?

  2. 저같은 경우처럼 shard key가 고려되지 않은 테이블에서 샤딩을 하기위해서 shard key를 추가하는 작업은 어느정도의 난이도가 있을까요?

  3. 강사님이 생각하시는 데이터베이스 샤딩을 위한 기준같은게 있으신지 궁금합니다.

답변 2

0

쿠케님의 프로필 이미지
쿠케
지식공유자

연식님, 안녕하세요!

 

  1. 단일 DB에서는 처음부터 shard key를 고려할 필요는 없지만, 분산 DB에서는 처음 설계부터 shard key를 잘 고려하시는게 좋습니다. 보통 단일 샤드에서 지원하는 트랜잭션이 빠르기도 하고(분산 트랜잭션을 지원 안할 수도 있고), 이후에 shard key를 변경하려면 물리적으로 다른 데이터에 있는 것들을 모두 옮겨야하므로, 아주 크고 복잡한 작업이 됩니다.

  2. 현재 처하고 계신 구체적인 상황을 모르다보니 난이도를 말씀드리긴 애매한 부분 일 것 같습니다. 다만, DB 추가로 띄우고, 데이터 옮기고, 샤드 키 설정하고, 애플리케이션 코드도 바꿔야 할 수도 있고 등.. 샤딩 환경이 익숙하지 않고 심지어 실시간 무중단 작업이라면 아주 어려운 작업이 될 수 있습니다.

  3. 정확한 기준은 없고, 실제 운영하면서 경험적인 측면이 큰 것 같습니다. 이러한 부분에 대해 세세하게 여기에서 언급 드리긴 쉽지 않네요.. 간단하게 말씀 드려보면, 단순하게 단일 장비에서 감당하기 어려운 상황에 샤딩을 고려할 수도 있겠지만, 분산 환경을 하면 비용(돈 뿐만 아니라 개발 난이도)에 대한 고려가 필요할 수도 있고, 트랜잭션 관리의 어려움이 더욱 생길 수 있고, 성능에 대한 지연(분산 DB간 조인 및 네트워크 통신 비용)이 생길 수도 있고, 기존 DB의 부하만 살짝 줄여줘도 충분한 상황이면 부하 분산 관점에서 캐시 등으로 고려해볼 수도 있고.. 단일한 지표만 고려하는게 아닌 여러 개의 지표들을 복합적으로 고려해봐야할 것 같습니다.

 

추가로 다른 강의 살짝 언급드리면(절대 구매하시라는 강요는 아닙니다!),

제가 분산 데이터 모델링 강의를 만든게 있는데, 분산(샤딩) 환경에서 데이터 모델링 하는 방법에 대해 관련하여 다루는 강의라서, 여유되신다면 한 번 수강해 보시는 것도 추천 드립니다!

어떠한 부분들을 고려하면서 샤드 키를 설정하고 샤딩을 해야할지 인사이트를 얻으실 수 있을 것 같습니다.

1시간의 짧은 강의이지만 직접 고민 또는 경험하는 과정도 필요하고 난이도도 상당히 높기 때문에.. 샤딩 관련해서 더욱 깊게 고민해 보고 싶고, 정말 궁금하시면 들어보시는 것도 추천 드립니다!

0

안녕하세요, 인프런 AI 인턴입니다. 장연식님.

데이터베이스 샤딩은 대규모 시스템 설계에서 중요한 컴포넌트입니다. 샤딩은 데이터베이스의 성능과 확장성을 높이는 데 큰 기여를 하는데요, 장연식님의 질문에 답변을 드리겠습니다.

1. 처음부터 Shard Key를 고려하면서 설계하는 것이 좋을까요?

네, 처음부터 샤드 키를 고려하는 설계는 장기적으로 시스템의 성능과 관리에 큰 도움이 됩니다. 초기 설계 단계에서 각 테이블이 어떻게 쿼리되는지를 분석하고, 가장 자주 쿼리되는 컬럼을 샤드 키로 고려하는 것이 좋습니다. 이것은 데이터의 분산 및 독립적인 스케일링을 가능하게 해주며, 추후 성능 문제 발생 시 조정의 난이도를 낮춰줍니다.

2. 샤드 키가 고려되지 않은 테이블에서 샤딩을 하기 위한 난이도는 어느 정도일까요?

기존 테이블에 샤드 키를 추가하고 샤딩을 적용하는 작업은 꽤 복잡할 수 있습니다. 이 과정에서는 두 가지 주요 작업이 필요합니다:
- 데이터 재분배: 기존의 데이터를 새로운 샤드 구조에 따라 이동하는 과정이 필요합니다.
- 코드 변경: 응용 프로그램 코드를 변경하여 새로운 샤드 구조에 맞게 데이터베이스 접근 로직을 수정해야 합니다.

전체 시스템 아키텍처와 데이터 흐름에 대한 깊은 이해가 필요하며, 테스트 및 점진적 전환 전략을 통해 안전한 마이그레이션을 수행해야 합니다.

3. 데이터베이스 샤딩을 위한 기준이 있으신가요?

강사님이나 많은 전문가들은 보통 다음과 같은 기준을 샤딩에서 고려합니다:
- 데이터 볼륨: 데이터 양이 특정 임계점을 넘어설 때.
- 쿼리 패턴: 특정 컬럼에 대한 쿼리가 빈번하고 그 성능이 중요할 때.
- 트랜잭션 및 일관성: 데이터 일관성이 매우 중요하지 않을 때, 즉 각 분산된 부분이 독립적으로 운영될 수 있을 때.
- 확장성 요구: 빠르게 성장하는 데이터 및 사용자 트래픽에 대한 적응 필요성.

다음 링크에서 유사한 질문의 답변을 참고하실 수 있습니다:
- 샤딩 및 설계 관련 질문 (게시글 제목)

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

장연식님의 프로필 이미지
장연식

작성한 질문수

질문하기