강의

멘토링

로드맵

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

하양이님의 프로필 이미지
하양이

작성한 질문수

분산 데이터 모델링

분산 환경을 고민해야 하는 시점

해결된 질문

작성

·

12

0

안녕하세요!

시스템 개발 및 설계 과정에서 '대규모 시스템', '분산 환경', '분산 데이터 모델링'과 같은 개념들을 본격적으로 고려하고 도입해야 하는 시점은 언제일까요?

실무에서 경험해보지 못해서 '대규모' 라는 말이 막연해서 실무에서 어떤 것을 기준으로 고려하는지 혹은 지표 같은 것을 측정하는 방법이 있는지 궁금해서 질문 드립니다!

답변 2

0

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

하양이님, 안녕하세요!

 

아무래도 '대규모'라는 것의 정의부터 모호할 수 있다보니, 구체적인 기준과 시점을 말씀 드리기엔 어려움이 있을 것 같습니다. 각 DB 장비의 스펙도, 다루는 데이터의 수나 크기도, 쿼리 패턴(실시간/배치성인지, 읽기/쓰기 비율은 어떤지, 쿼리는 얼마나 복잡한지 등)도 모두 다를 수 있는 것이고요.

대규모라는 단어는 사실 저에게도 막연하게 다가옵니다.

개발하는 사람도, 시스템의 특성도 모두 다른데, 구체적인 기준을 찾는게 의미가 있는지 싶기도 하고요.

 

이미 시스템을 운영하고 있다면, 현재 병목이 큰 지점 또는 개선이 필요한 지점을 확인하고 분산을 고려할 수 있습니다.

이때 볼 수 있는 지표들은 DB의 cpu, memory, 커넥션 수, 지금까지 쌓인 데이터를 기반으로 앞으로 쌓이게 될 데이터 등.. 이런 것들이 있겠네요.

아직 운영하기 전이라면, 예상하는 또는 기대하는 트래픽과 데이터 수, 데이터 크기를 미리 계산하고,

각 장비가 얼마나 감당할 수 있을지 고려해서 어느 정도 유추는 해볼 수 있을 것 같습니다.

 

물론, 이러한 것도 이상적인 내용이고요. 위처럼 단순하게 접근할 수도 없습니다.

분산이 들어가는 순간 고려할 부분이 엄청나게 많아지기 때문입니다.

강의에서도 언급되지만, 트랜잭션 관리도 복잡해지고, 질의 비용이 올라갈 수 있고, 애플리케이션 코드도 변경이 필요할 수도 있고, 개발 난이도도 증가하며, 시스템 자체의 운영 비용(돈, 모니터링)도 올라가고, 샤드 키를 어떻게 관리할지에 대한 이해도 필요할 수 있습니다.

데이터가 많고 부하가 크다고 해서 처음부터 반드시 분산 DB를 해결책으로 삼기보단,

불필요한 데이터는 제거 또는 별도 cold storage로 옮거나, 부하 분산 관점에서 접근하여 앞단에 캐시를 붙이거나 등.. 다른 해결책을 먼저 고민해 보는 것이 좋을 수 있습니다.

이러한 방법들로도 현재 시스템에서 발생하고 있는 문제 해결이 어려울 때, 그때 분산 DB를 고려하게 되는 것 같네요.

메인 DB를 분산으로 관리하는건 쉽지 않다보니, 단일한 지표 또는 단편적인 지표(CPU/메모리/데이터 수나 크기)만 보는게 아닌 여러개의 지표(돈, 개발 난이도, 팀 상황, 학습 수준 등)들을 복합적으로 고려해보게 되는 것 같습니다.

DB까지 분산해야 할 정도의 시스템이 아니라면, 다른 방법으로도 충분한 해결책이 있다면, 일단 다른 방법 먼저 시도해 볼 수 있는 것이고요.

결국 실제 운영 및 모니터링 해보면서, 경험적인 측면이 가장 주요하게 작용하는 것 같네요.

 

명확하게 말씀 드리기 어려운 내용이라 만족스러운 답변이 되셨을지는 모르겠네요, 혹시 더 궁금한 점 있으시면 편히 남겨주세요!

0

안녕하세요, 인프런 AI 인턴입니다. 하양이님.

시스템 개발 및 설계 중 ‘대규모 시스템’, ‘분산 환경’, ‘분산 데이터 모델링’ 같은 개념들이 중요해지는 시점은 일반적으로 서비스의 규모가 커지고 복잡성이 증가하면서부터입니다. 이와 관련된 몇 가지 기준과 지표들을 소개해 드릴게요.

분산 환경 도입을 고려해야 하는 시점

  1. 트래픽 증가:

    • 사용자가 많아져서 시스템의 요청 처리 능력이 한계를 느낄 때, 분산 환경을 통해 부하를 분산시키고 성능을 향상시킬 필요가 있습니다.
  2. 성능 문제:

    • 현재 시스템이 자주 느려지거나 장애가 발생하는 경우, 분산 아키텍처를 통해 특정 기능을 분리하고 최적화할 수 있습니다.
  3. 유지보수 복잡성:

    • 시스템이 복잡해져 코드 변경 시 전체 시스템에 미치는 영향이 크다면, 모듈화된 분산 환경을 통해 각 모듈을 독립적으로 관리할 수 있습니다.
  4. 수평 확장 필요성:

    • 데이터가 증가하고 저장소의 크기가 커져서 기존 구조로 감당하기 어려울 경우, 분산 데이터베이스를 통해 확장 가능합니다.
  5. 비즈니스 요구사항 변화:

    • 기능 추가 및 수정 요구가 빈번할 경우, 마이크로서비스 아키텍처를 통해 빠르게 대응할 수 있습니다.

지표 및 측정 방법

  • 응답 시간: 시스템의 응답 속도가 일정 수준 이하로 떨어지지 않도록 모니터링.
  • 서버 로드: CPU, 메모리 사용률을 측정하여 서버의 현재 상태를 파악.
  • 장애 빈도: 시스템의 가용성을 평가하고 반복되는 문제를 분산 환경으로 해결할 수 있는지 분석.
  • 데이터 용량 증가: 저장소의 증가 속도를 파악해 미래의 용량 요구 예측.

위 기준들을 바탕으로 시스템의 규모와 요구사항에 맞춰 적절한 시점에 분산 환경을 도입하는 것이 중요합니다.

이 외에도, 유사한 질문에 대한 보다 자세한 내용은 아래 링크를 통해 참고하시면 도움이 될 것입니다:
- 분산 시스템 도입 기준 및 사례

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

하양이님의 프로필 이미지
하양이

작성한 질문수

질문하기