Database의 기초

Taeha Kim·2020년 8월 9일
2

Database

목록 보기
1/8
post-thumbnail
post-custom-banner

1. Database 기초 이해

데이터 베이스(Database, DB)는 공유되어 사용될 목적으로 통합하여 관리되는 데이터의 집합을 말하고, DB는 크게 관계형 데이터베이스(RDBMS)와 비 관계형 데이터베이스(Non-relational database)가 있습니다.

1.1 DB를 왜 사용할까?

에플리케이션(Application)에서의 데이터는 램(RAM)에서 존재하는데, 램은 휘발성 메모리라서 애플리케이션 종류시 메모리에 존재했던 데이터를 다시 읽어 들일 수 없습니다.
따라서 데이터를 장기적으로 보관하기 위해서 별도의 데이터베이스를 만들어 사용합니다.

2. 관계형 데이터베이스 관리 시스템(RDBMS, Relational DataBase Management System)

관계형 데이터베이스는 관계형 데이터 모델에 기초를 둔 데이터베이스 시스템을 말하는데,
관계형 데이터란 데이터를 서로 상호관련성을 가진 형태로 표현한 데이터를 말합니다.

SQL(Structured Query Language)로 관계형 데이터베이스(RDBMS)의 데이터를 관리합니다.

2.1 관계형 데이터베이스의 특징

  • 모든 데이터들은 2차원 테이블(table)들로 표현합니다.

  • 각각의 테이블은 row(행, 로우)와 column(열, 컬럼)로 구성되며,
    row는 각 항목들의 실제 값들이고, column은 테이블의 각 항목을 말합니다.

  • 각각의 row는 저만의 고유 키(Primary Key)가 있으며, 주로 이 primary key를 통해서 해당 row를 찾거나 인용(reference)하게 됩니다.

  • 각각의 테이블들은 서로 상호관련성을 가지고 서로 연결될 수 있습니다.

2.2 테이블을 나누자.

테이블끼리의 연결에는 크게 3가지 종류가 있습니다.

  • One To One : 테이블 A의 로우와 테이블 B의 로우가 정확히 일대일 매칭이 되는 관계를 one to one 관계라고 합니다.
  • One To Many : 테이블 A의 로우가 테이블 B의 여러 로우와 연결이 되는 관계를 one to many 관계라고 합니다.

  • Many To Many : 테이블 A의 여러 로우가 테이블 B의 여러 로우와 연결이 되는 관계를 many to many 라고 합니다.

2.3 왜 테이블을 나누고 연결하지?

주로 테이블들은 Foreign key(외부키)라는 개념을 사용하여 연결하게 되는데 왜 테이블을 나누고 연결 할까요? 그냥 one to many처럼 하나의 테이블에 고객정보와 구입한 제품 정보 모두를 담으면 안될까요?

하나의 테이블에 모든 정보를 다 넣으면 동일한 정보들이 중복되어 저장될수 있습니다.
이는 하나의 테이블에 저장되는 데이터가 많아져서 테이블 하나에 부하를 크게 주게되고
고객이 개명을 해서 아이디는 동일한데 이름이 다른 로우가 있을경우, 어떤 이름이 정확한지 구별하기 힘들게 됩니다.

따라서 테이블을 나누어 저장하고 필요한 테이블끼리 연결하면 중복된 데이터도 없고, 서로 같은 데이터이지만 부분적으로 다른 데이터가 생기는 문제를 해결할 수 있습니다.(normalization)

2.4 트랜잭션(Transaction)이란?

  • 데이터베이스의 쿼리(데이터베이스에 정보를 요청하는 것)를 가장 작은 단위의 업무로 쪼갠 것을 트랜잭션(Transaction)이라고 합니다.

  • ACID를 제공함으로 트랜잭션(일련의 작업들을 한번에 하나의 unit으로 실행하는것)이 안전하게 수행된다는것을 보장합니다.

  • 트랜잭션은 일련의 작업들이 마치 하나의 작업처럼 취급되어서 모두 다 성공하거나 아니면 모두 다 실패하게 됩니다. (Commit & rollback)

2.5 ACID(Atomicity, Consistency, Isolation, Durability)

ACID는 트랜잭션의 4가지 속성을 말하며 Atomicity, Consistency, Isolation, Durability의 앞글자를 따서 ACID로 표현합니다.

  • 원자성(Atomicity)
    : 원자성은 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 다는것을 보장하는 능력을 말합니다.
    예를 들어, 자금 이체는 성공할 수도 실패할 수도 있지만 보내는 쪽에서 돈을 빼 오는 작업만 성공하고 받는 쪽에 돈을 넣는 작업을 실패해서는 안됩니다.

  • 일관성(Consistency)
    : 일관성은 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것을 의미합니다.

  • 고립성(Isolation)
    : 고립성은 트랜잭션 수행 시 다른 트랜잭션의 연산 작업에 끼어들지 못하도록 보장하는 것을 의미합니다.
    이는 고립성이 트랜잭션 밖에 있는 어떠한 연산도 중간 단계의 데이터를 볼 수 없음을 의미하며 트랜잭션 실행 내역은 연속적이어야 함을 의미합니다.
    (성능관련 이유로 인해 이 특성은 가장 유연성 있는 제약 조건입니다.)

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

3. 비관계형 데이터베이스(Non-Relational DataBase)

  • 비관계형 데이터베이스는 NoSQL로 명칭되며, 주로 비관계형 타입의 데이터를 저장할때 사용됩니다.

  • 비관계형 이기 때문에 데이터들을 저장하기 전에 테이블을 정의 할 필요가 없습니다.

  • MongoDB, Redis, Cassandra 등이 가장 대표적인 NoSQL 데이터 베이스입니다.

4. SQL(RDBMS)과 NoSQL 비교

SQL NoSQL
장점 1. 관계형 데이터베이스는 데이터를 더 효율적이고
체계적으로 저장할 수 있고 관리할 수 있다.
2. 미리 저장하는 데이터들의 구조(테이블 스키마)를
정의함으로 데이터의 완전성이 보장된다.
3. 트랜잭션(transaction)
1. 데이터 구조를 미리 정의하지 않아도 됨으로 저장하는 데이터의 구조 변화에 유연하다.
2. 확장하기가 비교적 쉽다. 그냥 서버 수를 늘리면 된다.(scale out)
3. 확장하기가 쉽고 데이터의 구조도 유연하다 보니
방대한 양의 데이터를 저장하는데 유리하다.
단점 1. 테이블을 미리 정의해야 함으로 테이블 구조 변화에 덜 유연한다.
2. 확장성이 쉽지 않다.(테이블 구조가 미리 정의 되어 있다보니 단순히 서버를 늘리는것 만으로 확장하기가 쉽지 않고 서버의 성능 자체도 높여야 한다)
1. 데이터의 완전성이 덜 보장된다.
2. 트랜잭션이 안되거나 비교적 불안정하다.
어디에 사용하면 좋을까? 정형화된 데이터들 그리고 데이터의 완전성이 중요한 데이터들을 저장하는데 유리하다.
예) 은행 계좌 정보
주로 비정형화 데이터 그리고 완전성이 상대적으로 덜 유리한 데이터를 저장하는데 유리하다.
예) 로그 데이터
profile
함께 성장하는 개발자가 되고 싶습니다.
post-custom-banner

0개의 댓글