(TIL) 데이터베이스

SooHyung Kim·2020년 5월 7일
0

Today I learned

목록 보기
21/25

데이터베이스란

  • Application에서는 데이터가 메모리 상에서 존재하여 해당 App이 종료되면 데이터는 다시 읽어들일 수 없어 이를 장기간 저장 및 보존하기 위해 데이터베이스를 사용
  • 일반적으로 관계형 데이터베이스와 비관계형 데이터베이스로 구분

관계형 데이터베이스(RDMBS)

  • 관계형 데이터란, 데이터간 서로 관련성을 가진 형태로 표현하는 것을 의미함

    • 모든 데이터는 2차원의 테이블로 표현

    • 각각의 테이블은 컬럼과 로우로 구분

      • 컬럼 : 테이블의 각 항목
      • 로우 : 컬럼의 실제 값
      • 각 로우는 자신만의 고유 키(Primary Key)가 있으며, 고유 키를 통해 해당 로우를 찾거나 인용하게 됨
    • 각각의 테이블은 관계에 따라 1:1, 1:N, N:N으로 구분됨

    • 대표적인 RDBMS에는 mysql, postgresql이 있음

1:1 관계

  • A 테이블의 로우와 B 테이블의 로우가 정확히 일대일 매칭이 되는 관계

    ** 한 명의 유저는 한 개의 프로필만을 가질 수 있는 1:1 관계

    1:N 관계

  • A 테이블의 로우가 B 테이블의 여러 로우와 연결 되는 관계

    ** 한 고객은 여러 제품을 구매하지만 구매된 제품은 한 고객밖에 없는 관계

    N:N 관계

  • A 테이블의 여러 로우가 B 테이블의 여러 로우와 연결되는 관계

    ** 책은 여러 작가에 의해 쓰이고 작가는 여러 책을 쓸 수 있음

    테이블 간의 연결

  • Foreign key(외래키) 개념을 사용

  • 위의 1:1 관계에서 user_profiles 테이블의 user_id 컬럼은 users에 걸려있는 외부 키

    • 데이터베이스에게 user_id 값은 users 테이블의 id 값을 의미함

    테이블을 따로 나누어 연결지어 데이터를 저장하는 이유

  • 하나의 테이블에 모든 정보를 다 넣어 데이터를 저장하게 된다면,

    • 동일한 정보가 불필요하게 중복 저장됨

    • 이에 더 많은 디스크를 사용하게 됨

    • 잘못된 데이터가 저장될 가능성이 높아짐

      • 만약, 고객의 아이디가 동일하나 이름이 틀린 로우가 있다면 어떤 데이터가 정확한가?
  • 여러 테이블에 나누어 저장한 후 테이블 간 연결하게 된다면,

    • 중복 데이터를 저장하지 않아 디스크를 효율적으로 사용하게 됨
    • 서로 같은 데이터지만 부분적으로 틀린 데이터가 생기는 문제가 사라짐
    • 이를 normalization이라고 함

    Transaction

  • 일련의 작업들이 하나의 작업처럼 취급되어 모두 다 성공하거나 모두 다 실패하는 것을 의미

    ACID

  • 원자성 : 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 것

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

  • 고립성 : 트랜잭션 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것

  • 지속성 : 성공적으로 수행된 트랜잭션은 시스템 문제, DB 일관성 체크 등을 하더라도 영원히 반영되어야 함

    NoSQL 데이터베이스

  • 비관계형 타입의 데이터를 저장할 때 주로 사용되는 데이터베이스 시스템

  • 관계형 데이터베이스와는 다르게 데이터들을 저장하기 전에 테이블 등을 정의할 필요가 없음

  • 대표적으로 MongoDB, Cassandra 등의 비관계형 데이터베이스가 있음

    관계형 vs 비관계형

    관계형

    • 장점

      1. 미리 저장하는 데이터들의 구조(테이블 스키마)를 정의하여 데이터의 완전성이 보장
      2. 데이터를 더 효율적으로, 체계적으로 저장하고 관리할 수 있음
      3. 트랜잭션
    • 단점

      1. 테이블을 미리 정의해야하기 때문에 구조 변화 등에 덜 유연함
      2. 이에 따라, 단순히 서버를 늘려 확장하는 것이 어려움

      비관계형

      • 장점
        1. 데이터 구조 변화에 유연함을 가짐
        2. 단순히 서버의 수를 늘리면 되기 때문에 확장하기가 비교적 쉬움
        3. 방대한 양의 데이터를 저장하는 데 유리함
      • 단점
        1. 데이터의 완전성이 비교적 덜 보장됨
        2. 트랜잭션이 안되거나 비교적 불완전
profile
Slow and steady win the race

0개의 댓글