안녕하세요. 오늘 주제는 데이터를 다루는 2가지 큰 축, [ SQL vs. NoSQL 차이점 ]입니다.

“어떤 상황에서 SQL을 쓰고, NoSQL을 쓰는지?”
알아보겠습니다.
SQL을 설명할 때 대표적인 특성으로 ACID라는 개념을 들 수 있습니다.
‘ACID’란 1) Atomicity(원자성), 2) Consistency(일관성), 3) Isolation(독립성), 4) Durability(지속성)의 앞글자를 딴 약자입니다.
하나씩 살펴보겠습니다.
1) 먼저, Atomicity(원자성)는 데이터베이스를 사용할 때 발생하는 1개의 어떤 명령 — ‘트랜잭션(transaction)’으로 표현됩니다. — 에 대해서 ‘안정성’을 보장하는 개념으로 1개의 트랜잭션은 모두 실패하거나 모두 성공해야 합니다. ‘은행 계좌이체 거래’를 대표적인 예시로 들 수 있습니다.
아래의 A, B계좌 간의 은행거래 트랜잭션에 대해 양쪽 모두 성공하지 않고 부분적으로 성공(ex. A계좌에서 100만원 빠지는 것은 성공했으나, B계좌로 100만원 입금하는 것이 실패하면 문제 발생) 한다면, 문제가 발생합니다.
— A계좌에서 100만원 빼기
— B계좌로 100만원 넣기
따라서, Atomicity 개념은 이러한 1개의 트랜잭션에 대해서 모두 실패하거나, 모두 성공해야 한다는 DB안정성을 보장하는 개념입니다.
2) 두번째 특성인 Consistency(일관성)은 데이터베이스의 상태를 일관된 상태로 유지해야 한다는 개념입니다. 예를 들어, 신용카드 거래 내역 데이터베이스의 규칙 중 ‘결제 카드사 정보가 반드시 있어야 한다’ 는 규칙이 있다면 아래의 트랜잭션은 실행되지 않습니다.
이는 데이터베이스 내의 데이터들을 일관되게 관리할 수 있다는 장점을 제공합니다.
3) 세번째 특성인 Isolation(독립성)은 1개의 트랜잭션 수행시 다른 트랜잭션이 끼어들 수 없음을 보장하는 개념입니다. 예를 들어, 은행 거래 시 20만원 잔고가 있는 A계좌에서 B계좌로 15만원 이체를 한다는 트랜색션 1번이 발생했고, 그 다음 C계좌로 10만원의 이체를 한다는 트랜잭션 2번이 발생했을때 2번 트랜잭션 관리자는 1번 트랜잭션의 정보를 알 수 없으며 반드시 1번 트랜잭션이 실행된 후 2번 트랜잭션이 실행될 수 있습니다. 이 경우는 잔고가 부족하기 때문에 2번 트랜잭션은 실패로 뜹니다. 이는 여러개의 트랜잭션이 발생했을 때, 트랜잭션 간의 간섭이 일어날 수 없도록 함으로써 거래의 신뢰를 보장합니다.
4) 네번째 특성인 Durability(지속성)은 1개의 트랜잭션이 성공하면 그 후 런타임 에러나 데이터베이스의 어떤 오류가 나더라도 성공한 트랜잭션의 기록이 영구적으로 보장되어야 한다는 개념입니다. 예를 들어, 카드 결제에 성공해서 계좌에서 금액이 빠져나갔는데 그 후 은행 전산 오류가 뜨더라도 해당 트랜잭션은 사라지지 않고 반영되어야 합니다. 이와 같이 거래의 안정성을 보장하는 개념이 Durability(지속성)입니다.
이러한 SQL의 ACID 특성은 ‘언제/왜?’ 사용하는 것일까요? 위 예시에서 눈치채셨겠지만, 데이터의 안정성과 신뢰성이 매우 중요한 금융기관 거래 데이터, 쇼핑 결제 데이터, 택배 물류 데이터 등과 같은 데이터관리에서 중요한 개념으로 사용됩니다.
그럼, NoSQL은 특성은 무엇이고 언제/왜 쓰는 것인지 알아보겠습니다.
이름에서 아실 수 있듯 ‘NoSQL’은 ‘SQL이 아니라는(No) 특성’을 가집니다. ‘not only SQL’ 혹은 ‘non SQL’ 의 의미로도 갈린다고 하는데, 어쨌든 SQL과 다르게(not SQL) 작동합니다. 무엇이 다른지 알아보겠습니다.
SQL의 특성 중 ACID 개념이 있다면, NoSQL에는 BASE 개념이 있습니다.
BASE는 1)Basically Available, 2)Soft state, 3)Eventual consistency 의 앞글자를 딴 약자입니다.
하나씩 살펴보겠습니다.
1) Basically Available 개념은 ‘가용성을 보장한다’는 것입니다. 보통 NoSQL은 여러 서버에 복사본을 저장하여 사용하게 되며, 이러한 특성은 주서버에서 에러가 발생해도 백업서버는 작동하게 함으로써 가용성을 보장한다는 장점이 있습니다.
2) Soft state 개념은 데이터베이스의 상태가 계속 바뀔 수 있다는 개념으로 최신데이터로 덮어씌여진다는 의미입니다. 이는 SQL의 Consistency(일관성) 과 대치되는 개념으로도 볼 수 있습니다. 예를 들어, SQL 쿼리문에서 어떤 데이터를 저장할 때, 필드명이 ‘person’인데 ‘parson’으로 쿼리문을 요청하면 저장이 되지 않습니다. 그런데 NoSQL은 저장이 됩니다. 따라서, 실시간으로 빠르게 데이터를 관리하는 방식에 적합할 수 있습니다.
3) 마지막으로 Eventual consistency(결과적 일관성) 개념은 일시적으로는 비일관적인 특성을 지니더라도 결과적으로는 일관성이 있는 데이터 상태가 된다는 의미입니다. 예를 들어, 어떤 고객이 A상품의 주문을 1개로 넣었다가 2개로 수정주문을 넣었다고 할 때 데이터는 일시적으로 불균형 상태가 됩니다. 하지만, 결과적으로는 업데이트된 주문량 2개를 반환함으로써 일관성을 유지합니다. 즉, NoSQL은 최신데이터의 반영을 통해 일시적 비일관성을 허용하여 빠른 데이터의 수정이 가능하게 하고, 동시에 업데이트된 최신 데이터를 결과적으로 ‘유지’하여 관리함으로써 일관성또한 보장한다는 장점을 가집니다.
정리하자면 NoSQL의 경우, SQL보다 빠르고 유연하게 데이터를 수정, 저장, 관리할 수 있다는 장점이 있기 때문에 스타트업 비즈니스에 적합한 특성이 있습니다.
이상으로 SQL 과 NoSQL의 차이점에 대해 간략하게 알아봤습니다.
이외에도 SQL 과 NoSQL의 차이점에 대한 정보들이 많이 있습니다.
아래 참고자료를 추가합니다.

SQL과 NoSQL 차이점 비교표 (출처: https://phoenixnap.com/kb/sql-vs-nosql)
