1️⃣ 확장성
확장성은 데이터베이스를 고르는 데 아주 중요한 요소다. 데이터베이스마다 확장 방법이 다르다. 예를 들어 관계형 데이터베이스는 수평적 확장에 어려움을 겪을 수 있지만 NoSQL 데이터베이스는 수평적 확장에 뛰어나다. 데이터베이스를 선택할 때는 예상 성장률과 확장을 얼마나 잘 처리할 수 있는지를 고려해야 한다.
데이터베이스 확장을 잘하려면 단순히 서버를 더 추가하는 게 아니라 시스템의 설계와 아키엑쳐(schema 등등 포함)을 잘 이해해야 한다.
2️⃣ 성능
쿼리 효율성과 write 및 read 성능 간의 균형을 고려해야 한다. 읽기(read) 작업에 최적화된 데이터베이스도 있고 쓰기(write) 성능을 우선시하는 데이터베이스도 있다. NoSQL은 전반적으로 심플한 데이터 모델과 schema 덕분에 쓰기에 최적화되어 있고, 관계형 데이터베이스는 join과 aggregation 등 좀 더 복잡한 쿼리에 최적화되어 있다. 시계열 데이터베이스는 타임시리즈 데이터에 적합하다.
3️⃣ Consistency
데이터베이스의 정보가 정확하고 일관성 있어야 한다. 일관성을 달성하기 위해 데이터베이스는 종종 ACID 속성과 CAP Theorem에 의존한다. 데이터베이스에 따라 이러한 측면의 우선순위가 달라지므로 시스템을 설계할 때 요구사항을 정확하게 파악하고 그에 알맞는 데이터베이스를 선택해야 한다.
📌 시스템 설계 및 면접
면접 준비 중이라면 단순히 구성 요소 파악보다는 스토리지을 선택할 때 위 3가지 요구 사항을 처음에 먼저 파악합니다. 예를 들어, 데이터 일관성이 중요하고, 복잡한 쿼리를 지원해야 하고, write에 최적화된 데이터베이스가 필요한 시스템을 설계한다면 이에 알맞은 데이터베이스를 고르는 게 좋지만 무엇보다도 그 이유를 잘 설명하면서 절충점을 찾는 게 중요합니다.
아티클에는 언급되지 않았지만 추가적으로 비용, 자동 확장 기능 그리고 다양한 컨피규레이션을 통해 원하는 기능을 지원할 수 있는 세세한 디테일은 시스템 디자인 면접에서 디테일하게 언급할 필요는 없지만 실제 설계할 때 의논하면 도움 됩니다.
🔗 유익한 읽을거리라 원문 읽어보는 걸 추천합니다
🪴 함께 읽으면 좋은 글:
면접과 설계에 필요한 분산 시스템의 주요 특성
https://careerly.co.kr/comments/83900