TIL no.68 - BackEnd - Database란?

박준규·2019년 10월 31일
0

Database란 데이터를 저장 및 보존하는 시스템입니다.

데이터베이스를 사용하는 이유는
Application에서는 데이터가 메모리(RAM)상에서 존재합니다.
그리고 메모리(RAM)에 존재하는 데이터는 보존이 되지 않습니다.

그러므로 데이터를 장기간 저장하고 효과적으로 관리하기 위해
데이터베이스를 사용합니다.

일반적으로 Database는 크게 둘로 나뉩니다.
1. 관계형 데이터베이스
2. 비관계형 데이터베이스

1. 관계형 데이터베이스

RDBMS(Relational DataBase Management System)

TIL no.65 - Django - Relationships에서 모델의 관계에 대해 알아봤는데
이처럼 관계형 데이터 모델에 기초를 둔 데이터베이스 시스템을 RDBMS라고 합니다.

정보를 여러 테이블에 나누어 저장하고 관계를 설정하는 이유

하나의 테이블에 모든 정보를 넣으면 동일한 정보들이 불필요하게 중복되어 저장됩니다.
그러므로, 더 많은 디스크를 사용하게 되고 잘못된 데이터가 저장 될 가능성이 높아집니다.

대표적인 관계형 데이터베이스에는 MySQL과 PostgreSQL이 있습니다.

2. 비관계형 데이터베이스

RDBMS에서 데이터를 저장하기 위해서, column을 정해주었는데 비관계형 데이터베이스는 데이터를 저장하기 전에 정의할 필요가 없습니다.

대표적인 NoSQL로는 MongoDB, Redis, Cassandra가 있습니다.

3. SQL(RDBMS) Vs NoSQL

3-1. SQL

  • 장점
  • 데이터를 더 효율적으로, 체계적으로 저장 및 관리
  • 미리 저장할 데이터의 구조(table scheme)를 정의함으로써 데이터의 완전성이 보장
  • 정형화된 데이터 혹은 완전성이 중요한 데이터들을 저장하는데 유리(예를 들어, 전자상거래 정보, 은행 계좌 정보 등등)
  • 일련의 작업들을 하나의 unit으로 실행하는 것이 가능.(이를 Transaction이라고 함)
  • 단점
  • table scheme를 미리 정의하기 때문에 유연성 떨어짐.
  • 확장이 어려움.
    • 단순히 서버를 늘리는 것으로 확장할 수 없고 서버의 성능 자체도 높여야 함.(이를 Scale Up이라고 합니다.)
    • 서버를 늘려서 분산 저장하기 어려움.

3-2. NoSQL

  • 장점
  • 데이터 구조를 미리 정의하지 않아도 되어 데이터 구조 변화에 유연함.
  • 확장하기가 비교적 쉬움. 그냥 서버 수를 늘리면 됨.(이를 Scale out이라고 합니다.)
  • 방대한 양의 데이터를 저장하는데 유리함.
  • 비정형화 데이터를 저장하는데 유리함.(예를 들어, 로그 데이터)
  • 단점
  • 데이터의 완전성이 덜 보장됨.
  • Transaction이 안되거나 비교적 불안정함.

4. Transaction

트랜잭션이란 질의(query)를 하나로 묶음 처리해서 만약 중간에 실행이 중단됐을 경우, 처음부터 다시 실행하는 Rollback을 수행하고, 오류없이 실행을 마치면 commit을 하는 실행 단위를 의미합니다.

즉, 한 번 질의가 실행되면 질의가 모두 수행되거나 모두 수행되지 않는 작업수행의 논리적 단위입니다.

쉽게 설명하면 중간에 작업이 실패하면 다시 돌아가는 것입니다.

5. ACID

Atomicity, Consistency, Isolation, Durability의 약어입니다.

데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 뜻합니다.

  • Atomicity(원자성)
    작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 성질.
    예를 들어, 자금 이체의 경우 송금자의 통장에서 돈을 차감하는 것은 성공했지만 입금되는 통장의 돈을 증가시키는 작업이 실패할 수 있는데 이처럼 중간단계까지만 성공하는 일이 없게끔 하는 것입니다.
    분자가 아니라 쪼갤 수 없는 원자(Atom)를 떠올리면 됩니다.

  • Consistency(일관성)
    Transaction이 실행을 성공적으로 완료하면 언제나 일관성있는 데이터베이스 상태로 유지하는 것을 의미합니다.
    작업을 수행하면서 데이터 베이스의 조건을 위배하면 안됩니다.
    이 조건을 설정함으로써 일관성을 유지할 수 있습니다.

  • Isolation(고립성)
    트랜잭션 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미합니다.

  • Durability(지속성)
    성공적으로 수행된 트랜잭션은 영원히 반영되어야 함을 의미합니다. 시스템 문제, DB 일관성 체크 등을 하더라도 유지되어야 함을 의미합니다. 모든 트랜잭션은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있습니다. 트랜잭션은 로그에 모든 것이 저장된 후에만 commit 상태로 간주될 수 있습니다.

    6. Log Data

말 그대로 모든 걸 기록하는 데이터라고 생각하면 됩니다.

굉장히 광범위한 개념입니다.

예를 들어, 인스타그램을 하는 유저가 A광고가 있는 화면에서 20초간 스크롤하지 않았다던가 하는 정보들입니다.

profile
devzunky@gmail.com

0개의 댓글