[Database] Database 기초 이해

황인용·2020년 1월 23일
0

Database

목록 보기
1/16
post-thumbnail

Database

  • 데이터를 저장 및 보존하는 시스템

  • Application에서는 데이터가 메모리 상에서 존재한다. 메모리상에 존재하는 데이터는 보존이 되지않는다(휘발성)

  • 데이터를 장기 기간동안 저장 및 보존 하기 위해서 데이터 베이스를 사용하는 것이다

  • 일반적으로 database에는 크게 관계형 데이터베이스(RDBMS)와 NoSQL로 명칭되는 비관계형 데이터베이스(Non-relational database)가 있다.

관계형 데이터베이스(RDBMS, Relational DataBase Manaement System)

  • 이름 그대로, 관계형 데이터 모델에 기초를 둔 데이터베이스 시스템

  • 관계형 데이터란 데이터를 서로 상호관련성을 가진 형태로 표현한 데이터를 말함
    - 모든 데이터들은 2차원 table(테이블)로 표현

    • 각각의 테이블은 column(컬럼)과 row(로우)로 구성
    • 각 row는 자신만의 Primary Key(고유키)가 있다. 이 Primary Key를 통해 row를 찾거나 reference(인용)하게 된다.
  • 각각의 table들은 서로 상호관련성을 가지고 서로 연결될 수 있다.
    - one to one

    • one to many
    • many to many
  • 대표적인 관계형 데이터베이스는 MySQL과 PostgreSQL(Postgres)가 있다.

One To One

image.png

  • Table A의 row와 Table B의 row가 정확히 일대일 매칭이 되는 관계를 One to One라 함
  • 1 대 1

One To Many

image.png

  • Table A의 row가 Table B의 여러 row와 연결이 되는 관계를 One To Many라 함
  • 1 대 다

Many To Many

image.png

  • Table A의 여러 row가 Table B의 여러 row와 연결이 되는 관계를 Many To Many라 함

어떻게 table과 table을 연결하는가

  • Foreign Key(외부키)라는 개념을 사용하여 주로 연결
  • one to one 예시 에서 user_profiles table의 user_id column은 users table에 걸려있는 foreign key라고 지정한다.
  • 즉, 데이터베이스에게 user_id의 값은 users table의 id값이며 그러므로 uesrs table의 id column에 존재하는 값만 생성될 수 있다.
    - 만약 users table에 없는 id 값이 user_id에 지정되면 에러.

정규화

  • 하나의 table에 모든 정보들을 다 넣으면 동일한 정보들이 불필요하게 중복되어 저장한다
  • 더 많은 디스크를 사용하게되고, 잘못된 데이터가 저장 될 가능성이 높아진다.
  • 여러 table에 나누어서 저장한후 필요한 table끼리 연결시키면
    - 중복된 데이터를 저장하지 않음으로 디스크를 더 효율적으로 사용가능.
    • 서로 같은 데이터이지만 부분적으로 틀린 데이터가 생기는 문제가 없어짐
    • normalization 이라함

ACID(Atomicity, Consistency, Isolation, Durability)

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

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

  • Isolation(고립성)
    : 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미. 이는 트랜잭션 밖에 있는 어떠한 연산도 트랜잭션 내 중간 단계의 데이터를 볼 수 없음을 의미한다.

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

Transaction(트랜잭션)

  • ACID를 제공함으로서 트랜잭션(일련의 작업들을 한번에 하나의 unit으로 실행하는 것) 기능을 제공한다
    - 트랜잭션은 일련의 작업들이 마치 하나의 작업처럼 취급되어서 모두 다 성공하거나 아니면 모두 다 실패한다
    • Commit or Rollback

NoSQL 데이터베이스

  • 비관계형 타입의 데이터를 저장할때 주로 사용되는 데이터베이스 시스템
  • 관계형 데이터베이스와 다르게 비관계형 이기 때문에 데이터들을 저장하기 전에 정의 할 필요가 없다.
  • MongoDB, Redis, Cassandra 등이 대표적인 NoSQL 데이터베이스.
  • 시스템log등이나 정규화되지 않은 데이터를 받을 때 사용

SQL(RDBMS) vs NoSQL

SQL

장점

  • 관계형 데이터베이스는 데이터를 더 효율적으로 그리고 체계적으로 저장할 수 있고 관리할 수 있다.
  • 미리 저장하는 데이터들의 구조(테이블 스키마)를 정의 함으로 데이터의 완전성이 보장된다.
  • 트랜잭션(Transaction)

단점

  • 테이블을 미리 정의해야 함으로 테이블 구조 변화 등에 덜 유연하다
  • 확장성이 쉽지 않다.
    - 테이블 구조가 미리 정의 되어 있다보니 단순히 서버를 늘리는 것 만으로 확장하기 쉽지 않고 서버의 성능 자체도 높여야 한다.
    • 서버를 늘려서 분산 저장하는것도 쉽지 않다.
    • Scale Up (서버의 성능을 높이는 것)으로 확장성이 된다.
  • 정형화된 데이터들 그리고 데이터의 완전성이 중요한 데이터들을 저장하는데 유리하다
    ex. 전자상거래 정보, 은행계좌정보, 거래정보 등등

NoSQL

장점

  • 데이터 구조를 미리 정의하지 않아도 된다.
  • 저장하는 데이터의 구조 변화에 유연하다
  • 확장하기가 비교적 쉽다.(서버 수를 늘리면 됨 Scale Out)
  • 확장하기가 쉽고 데이터의 구조도 유연하다 보니 방대한 양의 데이터를 저장하는데 유리하다.

단점

  • 데이터의 완전성이 덜 보장된다
  • 트랜잭션이 안되거나 비교적 불안정하다
  • 주로 비정형화 데이터 그리고 완전성이 상대적으로 덜 유리한 데이터를 저장하는데 유리하다
    ex. 시스템로그데이터
profile
dev_pang의 pang.log

0개의 댓글