CS

NoSQL이란 무엇인가?

킹갓홍 2023. 12. 14. 23:59

NoSQL이란?

NoSQL은 사람에 따라 No SQL, Not Only SQL, Non-Relational Operational Database SQL로 엇갈리는 의견들이 있지만, 현재 Not Only SQL로 풀어 설명하는 것이 다수를 차지하고 있다.

NoSQL은 비관계형 데이터베이스로, 관계형 데이터베이스 모델을 사용하지 않는 다양한 형태의 데이터베이스 시스템을  통칭하는 용어이다.

NoSQL은 전통적인 관계형 데이터베이스 시스템과 다르게 데이터를 저장하고 처리하는 다양한 방식을 제공하며, 주로 대규모 데이터나 분산환경에서 유용하게 사용된다.

 

NoSQL 특징

  • RDBMS에 비해 대용량 데이터를 저장한다.
  • 분산형 구조를 통해 여러대의 서버에 분산하여 저장하고 상호 복제하여 데이터 유실이나 서비스 중지에 대비한다.
  • RDBMS와 다르게 데이터간의 관계를 정의하지 않기 때문에(Schema-less) 테이블간 JOIN이 불가능하다.(RDBMS는 데이터관계를 외래키 등으로 정의하고 JOIN연산을 수행했었지만, NoSQL은 JOIN연산이 불가.)
  • 유동적인 스키마로 데이터를 저장하는 컬럼이 각기 다른 이름과 다른 데이터 타입을 갖는 것이 허용된다.

CAP이론

RDBMS는 DB의 트랜잭션이 안전하게 수행되는 것을 보장하기 위해 ACID(원자성, 일관성, 독립성, 영구성)특성을 따른다.

https://hsch19.tistory.com/13

 

@Transactional이란 무엇인가

개요 친구가 문제를 줬다. dao.saveMail(mailDto); 이후에 예외가 발생하면 어떻게 될까? - 첨부파일은 이미 저장되어 있는데 삭제되어야 할까? - DB에 보낸 메일정보를 저장은 삭제되어야 할까? 검색해

hsch19.tistory.com

하지만, NoSQL은 CAP 이론을 따른다.

CAP이론은 분산형 구조에는 일관성(Consistency), 가용성(Availability), 분산 허용(Partitioning Tolerance) 3가지의 특성이 있는데, 이 중 두가지만 만족할 수 있다는 이론이다.(3가지를 다 선택하는 것은 불가능하며, 전략적으로 2가지만 선택) NoSQL은 이 CAP이론에 따라 각자의 특성을 가지고 있으며, 사용자는 요구사항과 시스템의 목적에 따라 선택하게 된다.

일관성(Consistency)  :

분산된 노드중 어느 노드로 접근하더라도 데이터값이 같아야한다.

모든 사용자가 동일한 시간에 동일한 데이터를 읽거나 쓰는 경우를 보장한다.

 

가용성(Availability)  :

모든 데이터 요청에 대해 성공 또는 실패의 응답을 보장해야한다.

특정 노드에 장애가 발생해도 나머지 노드가 계속해서 서비스를 제공할 수 있어야한다.

 

분산 허용(Partitioning Tolerance)  :

네트워크 분할이 발생했을 때 시스템이 정상적으로 동작할 수 있는 능력을 나타낸다.

(가용성과의 차이점은 가용성은 특정 노드에 "장애"가 발생한 상황이고, 분할 허용은 노드의 상태는 정상이지만 네트워크 등의 문제로 서로간의 연결이 끊긴 상황에 대한 것)

 

CAP이론의 한계

CAP이론에 따르면 분산 시스템은 항상 CP 혹은 AP 형태여아만 한다.

( 데이터의 신뢰성 보다는 분산에 중점을 둔 방식이기에 약간의 데이터의 유실, 변형등이 발생할 수 있다. 빠르게 확장을 하여 대규모 데이터를 저장하고 핸들링 할 수 있는 구조를 갖출 수 있지만 기존의 RDBMS 형태에는 없는 특징을 가져가는 만큼 C나 A하나를 포기해야한다.)

 

완벽한 CP 시스템

완벽한 일관성을 갖는 분산 시스템에서는 하나의 트랜잭션이 다른 모든 노드에 복제된 후에 완료될 수 있다. 이는 가용성뿐만 아니라 성능(지연시간)의 희생을 필요로 한다.

 

완벽한 AP 시스템

완벽한 가용성을 가지는 시스템은 모든 노드가 어떤 상황에서라도 응답할 수 있어야 한다.

만약 하나의 노드가 네트워크 파티션으로 인해 고립되었다면 해당 데이터는 일관성이 깨지기 때문에 쓸모 없어지지만 응답한다면 어쨌든 완벽한 가용성을 갖게 된다. 하지만 해당 노드를 사용하는 사용자는 문제를 인지하지 못하고 계속 요청을 보낼 수 있습니다.

 

따라서 더 나은 CAP 이론의 해석은 ‘일관성과 가용성은 상충 관계에 있지만 둘 중에 반드시 하나만을 선택해야 하는 것은 아니다’ 이다

CP형태를 가지는 NoSQL은 MongoDB, Redis등이 있다.

AP 형태를 가지는 NoSQL은 DynamoDB, cassandra와 CouchDB가 있다

PACELC 이론

CAP 이론으로 부족한 부분을 보완하기 위해 네트워크 장애 상황과 정상 상황을 나누어서 설명하는 이론이다.

P(네트워크 파티션)상황에서 A(가용성)과 C(일관성)의 상충 관계와 E(else, 정상) 상황에서 L(지연시간)과 C(일관성)의 상충 관계를 설명한다.

Y축의 위쪽이 지연시간이라 헷갈릴 수 있지만, 위쪽에 위치할 수록 지연시간이 짧아지는 것을 의미한다. 정상상황에서 일관성에 치우친 시스템은 그만큼 지연시간이 길어진다는 의미이다.

 

RDBMS, NoSQL언제 사용해야할까?

RDBMS
변경될 여지가 없고, 명확한 스키마가 사용자와 데이터에게 중요한 경우

관계를 맺고 있는 데이터가 자주 변경 될 경우(NoSQL에서는 여러 컬렉션을 수정해야한다.)

NoSQL

정확한 데이터 구조를 알 수 없거나 데이터의 구조가 변경/확장 될 경우

데이터베이스를 수평으로 확장해야 하는 경우

 

일반적으로 서비스 구현은 한 가지 NoSQL만을 사용해서 모든 서비스를 제공하도록 하지 않는다.

서비스를 부분으로 나누어 별도의 NoSQL을 배치하고 주 저장소는 RDBMS를 사용하기도 하기 때문에 비즈니스에 적합한 솔루션을 찾아서 사용해야한다.

 

 

 


참고자료

http://happinessoncode.com/2017/07/29/cap-theorem-and-pacelc-theorem/

https://sujl95.tistory.com/81

https://hyewon-study-log.tistory.com/132

https://code-lab1.tistory.com/53