프로그래밍/개발

[개발] SQL vs NoSQL

riroan 2024. 7. 12. 21:58
SQL과 NoSQL의 차이가 무엇인가요?

 

누군가가 위와 같은 질문을 한다면 무엇이라고 답하나요? 질문한 사람은 면접관, 친구 또는 동료가 될 수 있습니다.

  • 관계형 DB vs 비관계형 DB
  • 스키마가 정적임 vs 동적임
  • MySQL, PostgreSQL이 있음 vs MongoDB, DynamoDB가 있음

등등.. 각자 자신만의 방식으로 답변을 할 것 같습니다. 

 

최근에 저는 이러한 질문을 받으면 그 히스토리에서 답을 찾는 방법에 감동을 받아서 해당 내용으로 답변해보고자 합니다.

SQL

데이터베이스는 언제부터 필요했을까요? 아마 컴퓨터가 사용되기 시작하고 데이터가 많아짐에 따라 관리되기 시작했을겁니다. 더 이상 파일만으로 관리하기 힘들고 복잡한 join연산과 집계를 위해 데이터베이스에 대한 수요가 나타나기 시작했습니다. 그렇다면 다음 데이터를 함께 보죠.

이런 테이블이 있습니다. 데이터베이스 기초 책에도 심심찮게 등장하는 형태인데요. 대부분의 사람들은 불편한 것을 바로 찾습니다. 바로 수강과목 항목의 중복이 많이 발생한다는 점입니다. 다음과 같은 데이터 형태면 정말 좋을 것 같지 않나요?

이렇게 했을 때 장점은 중복이 줄어든다는 점입니다. 지금은 데이터가 적어서 큰 차이가 보이지 않지만 데이터가 많아질수록 그 효과는 더 커질것입니다. 이러한 작업을 SQL에서 사용하는 정규화라고 널리 알려져있습니다. 여기서 SQL의 등장 이유가 나타납니다. 데이터베이스가 등장하기 시작한 1960년대에는 가장 큰 문제점이 하나 있었습니다. 바로 저장장치의 가격이 너무 비싸다는 것입니다. 알려진 바로는 GB당 $1000에 육박하는 가격이었다고 합니다. 그래서 그 시절 개발자들은 최대한 메모리를 아끼고 저장용량을 줄이는 데 많은 노력을 기울였습니다.

물론 데이터베이스 만들 때도 마찬가지죠. 저장 용량을 줄이기 위해서 정규화의 필요성이 생겼고 이는 SQL으로 이어졌습니다. 

따라서 SQL의 특징으로는 저장공간을 아낄 수 있다라는 점이 있습니다.

 

NoSQL

하지만 요즘은 트렌드가 많이 바꼈습니다. 무어의 법칙에 따라 저장장치는 계속 성장하고 있고 가격도 많이 내려왔습니다. 

2024년 7월 기준으로 SSD가 GB당 100원 좀 더 나가네요. 이제 저장공간은 부자가 된 것 같습니다. 물론 그만큼 저장해야할 데이터도 많아졌지만요. 그럼 이제 사람들의 관심은 용량을 아끼는 것이 아니라 쿼리 속도를 높이는 것으로 쏠리기 시작했습니다. 

NoSQL로 알려진 Redis만 봐도 메모리를 데이터베이스로 씀으로써 성능을 대폭 향상했습니다. 메모리가 GB단위로 되었기 때문에 저장공간을 포기하더라도 속도를 얻은 것입니다.

DynamoDB는 AWS에서 제공하는 NoSQL입니다. 이 데이터베이스도 파티션 키와 인덱스를 적절히 사용하면 빠른 속도로 데이터를 불러올 수 있게 됩니다. 하지만 그 이면에는 데이터를 키 개수의 배수만큼 저장한다는 점이 있습니다.

 

위에서 본 것처럼 NoSQL은 저장공간을 조금 포기하더라도 속도향상에 집중했다라는 특징이 있습니다.

 


 

요즘은 이렇게 어떤 개념을 접할 때 정의도 좋지만 어떤 문제가 있었고 이 개념을 통해 해당 문제를 어떻게 해결했는 지 아는 것이 더 재밌고 잘 와닿는 것 같습니다.