BASE vs ACID

Hayoung LEE·2023년 4월 3일
0
post-thumbnail

RDBMS

“관계형” 데이터베이스 매니지먼트 시스템

보통 데이터베이스에 + 관리 시스템 (crud 기능)을 포함한 것을 뜻한다.

보통 관리(crud)하는 방식으로 sql을 많이 쓴다.

SQL

구조화 질의 언어 (structured query language)

sql은 프로그래밍 언어가 아님 ㅎ html 같은 특수한 용도로 쓰이는 도메인 특화 언어임

Sql vs NoSql

mySql 특징

  • sql 방식
  • schema 있음.
  • 관계형 데이터베이스.
  • 강력한 데이터 관리 기능 제공
  • 관리 API 로 sql 제공
  • BASE transaction

mongoDB 특징

  • NoSql 방식
  • 도큐먼트 데이터베이스 (폴더에 하나하나 txt파일을 만드는 방식)
  • json 형태로 필드 관리
  • 확장성이 좋음
  • schema-less 구조. 스키마 선언 없이 필드의 추가와 삭제가 자유로움.
  • schema 가 없어서 데이터들의 규격이 다 다르기 때문에 데이터의 정합성이 매우 떨어짐
  • 비관계형 데이터베이스. join 도 없음.
  • 관리 api 로 자바스크립트 객체 기반의 데이터 조작어 (Data Manipulation Language) 제공
  • ACID transaction

구조 차이 비교:

BASE vs ACID

BASE 모델과 ACID 모델의 차이

BASE

Basically Available: 기본적으로 언제든 사용할 수 있다(가용성)

Soft state: 외부 개입이 없어도 문제가 발생하면 내부적으로 데이터를 자동으로 수정할 수 있다.

Eventually consistent: 위의 soft state와 연결되는 개념. 장애가 발생해 일관적이지 않은 상태(데이터 부정합)가 되면 자동으로 데이터를 수정해 결과적으로 데이터의 일관성을 유지한다.

즉, 일관성을 어느정도 포기하는 한이 있어도 언제든 쉽게 갖다쓸 수 있는 가용성을 중시하는 DB model.

BASE 모델을 쓰는 곳: sns회사, 그리고 SNS에 광고를 태우는 마케팅 회사들에서는 마켓을 분석할때 유연하게 대응할 수 있는 base 모델을 선호한다. SNS feed는 잘 짜여진 구조를 가지고 있지는 않지만 방대한 양의 데이터를 가지고 있다.

ACID

Atomic: transaction 을 하다가 문제가 생기면 트랜잭션을 중단하고 데이터베이스를 트랜잭션 시작하기 전으로 되돌림. 이를 통해 데이터베이스에 있는 모든 데이터들은 유효한 상태(데이터 정합성)라는 걸 보증할 수 있음. 즉, All or Nothing.

Consistent: 언제나 일관적인 DB 상태를 유지함. 실행된 트랜잭션은 절대!!!! 데이터베이스의 구조적 무결성을 해치지 않음. 완.전.무.결. (여기서 말하는 일관성이란 데이터 타입의 일관성을 뜻한다. 즉, 갑자기 데이터타입이 string에서 number로 바뀌지 않는다는 뜻.)

(무결성도 결과적으로 일관성과 같은 뜻이라고 보면 된다. 무결성 = 일관성.)

Isolated: transaction 들은 모두 고립되어 있음. transaction들이 병렬로 수행될 때 서로에게 끼어들지 않음. 절대 서로에게 상호적 영향을 주거나 간섭하지 않음. 이를 통해 데이터의 무결성을 보장할 수 있음.

Durable: 트랜잭션이 성공해 데이터가 변하면 변한 데이터가 계속 유지된다는 뜻. 바뀐 상태를 영원히 보장한다.

즉, 아주 안정적인 데이터 상태(데이터 정합성)를 중시하는 DB Model.

ACID 모델을 쓰는 곳: 금융권에서는 거의 무조건 acid 모델을 쓴다. 고객의 돈이 걸려있는 문제이기 때문에 신중하게 갈 수밖에 없음.

CAP theorem

CAP 이론은 2000년에 에릭 브류어가 최초로 소개한 이론이며 어떤 분산 시스템이더라도 Consistency(일관성), Availability(가용성), Partition tolerance(분할 내성)를 모두 만족할 수 없다는 이론 이다. 이 세 가지의 머리 글자를 따서 CAP 이론이라고 부른다.

셋의 교집합은…현실세계에는 없는 환상의 동물…즉 있을 수 없음…

Consistency

어디서 데이터를 읽던간에 다 같은 데이터를 받아보는 것. 이게 데이터의 일관성임. 예를 들어 A 사용자가 데이터를 업데이트 했는데 B 사용자의 화면에서는 업데이트 되기 전의 예전 데이터를 보여준다면 이는 데이터에 일관성이 없는 것임.

즉 데이터가 업데이트된 후 다른 노드에 동기화되어 모든 사용자가 최신 데이터를 본다면 일관성이 있는 시스템이다. 이를 위해선 동기화가 되는 동안 유저는 대기해야한다. 대기 시간이 길어질 경우 가용성이 떨어지는 시스템이다.

Availability

모든 요청은 에러 없이 응답을 받아볼 수 있다. (실패 응답이든, 성공 응답이든 어쨌든 요청을 하면 뭔가 응답이 와야 한다.)

Partition Tolerance

통신에 실패해도 시스템은 계속 동작해야 한다. 노드가 망가진 것이 아닌 노드를 연결시켜주는 네트워크가 고장나는 경우를 의미한다. 둘 사이 통신이 망가져서 동기화가 불가능해진다면 일관성이 떨어진다. 만약 통신이 복구되고 동기화되는 것을 기다린다면 가용성이 떨어진다. 결국 둘 다 만족할 수 없다.

결국 둘 다 만족시킬 수는 없으니 둘 중에 하나를 선택하렴~!

그래서 일관성을 택한 db model (ACID), 가용성을 택한 db model(BASE) 가 나오게 된 것이다…

  • ACID 모델은 높은 일관성을 제공한다.
  • BASE 모델은 높은 가용성을 제공한다.
profile
디발자

0개의 댓글