Open Mingadinga opened 8 months ago
RDS와 NoSQL의 차이점에 대해서 설명하세요.
RDS는 스키마가 존재하고, NoSQL은 스키마가 없습니다. 따라서 RDS는 주어진 스키마에 따라서 데이터를 저장하고 관리하며, 테이블 설계 시 데이터 중복을 줄이는 정규화 작업을 합니다. 필요한 경우 스키마끼리 관계 연산을 하여 필요한 데이터를 조합해 제공합니다. 하지만 NoSQL은 스키마가 없고 그에 따른 관계도 없기 때문에 조인 연산 없이 저장된 데이터를 조회만 해서 제공합니다. 조회만 하더라도 관계 있는 데이터들이 함께 조회되어야 하므로 반정규화 작업을 합니다.
RDS와 NoSQL가 그러한 차이점을 가지게 된 배경적 요인을 설명하세요.
RDS는 오래 전에 나온 기술이라 분산형 시스템을 고려하여 설계하지 않았습니다. 성능을 높이려면 스케일 아웃 방식밖에 선택지가 없으므로 한계가 있고, 스케일 아웃 환경에는 적용하기 어렵습니다.
또한 RDS가 나올 당시에는 CPU보다 메모리가 더 비싸던 시절입니다. 그래서 메모리 사용량을 줄이고자 데이터 중복을 줄이는 정규화 작업을 하고, 응답 시간이 늘어나더라도 CPU를 이용한 조인 연산으로 필요한 데이터를 조합했습니다. 하지만 이제는 메모리 값이 많이 저렴해졌기 때문에, 메모리 사용량을 아끼기 보다는 더 빠른 연산을 지원하기 위해 데이터를 반정규화하고 조인 연산 없이 빠른 조회 기능을 제공합니다.
스타트업 같이 요구사항이 자주 변경되는 기업들은 둘 중 어느 DB로 시작하는 것이 좋다고 생각합니까?
NoSQL, 특히 Key Value 스토어의 경우 키 설계를 하기 위해서는 사용자의 데이터 액세스 패턴을 알고 그에 따라 데이터를 구성해야 합니다. 스타트업은 초기에 데이터 액세스 패턴이 자주 변경되므로 RDBMS를 선택해 우선 조인 연산으로 다양한 데이터를 구성하여 제공하는 것으로 하고, 서비스가 확장되어 한대의 서버로 관리가 어려워지면 그때 데이터베이스를 확장하는 것이 좋습니다.
데이터의 규모가 커지면 한대의 RDS로 더이상 처리가 불가능해지는 시점이 옵니다. 어떤 선택지가 있습니까?