TIL #16 - Database

Sarang Lee·2021년 1월 19일
0

Session

목록 보기
2/7
post-thumbnail

Database란 컴퓨터 시스템에 저장된 정보 또는 데이터의 집합을 의미한다. 이러한 정보들은 보통 데이터베이스 관리 시스템 (DBMS)으로 관리, 제어된다. 데이터와 DBMS는 연관된 애플리케이션들과 함께 데이터베이스 시스템으로 일컬어지며, 짧게 데이터베이스라고 통칭하기도 한다.

이러한 데이터베이스가 쓰이는 이유는 무엇일까?

사실 애플리케이션에서도 메모리에 데이터를 가지고 있다. 하지만 메모리에 보존하는 데이터는 영구적으로 보존할 수 없기 때문에 애플리케이션이 종료되면 메모리에 있던 데이터들을 다시 읽어 들일 수 없다. 그러므로 데이터를 오랜 기간 저장 및 보존하여 관리하기 위해 데이터베이스를 사용한다.


일반적으로 데이터베이스는 크게 두 가지로 나뉜다.

  • 관계형 데이터베이스 (RDBMS, Relational DataBase Management System)
  • 비 관계형 데이터베이스 (Non-relational database, 보통 NoSQL로 명칭)

1. SQL(RDBMS)

데이터끼리 상호관련성을 가진 형태로 표현된 데이터를 의미한다. 모든 데이터를 2차원 테이블로 표현하여 테이블의 고유한 키(Primary Key)로 다른 테이블에 연결한다. 이때 테이블의 PK는 다른 테이블에 외부 키(Foreign Key)로써 존재한다.

ex) MySQL, Postgres, Oracle DB


관계형 테이블을 연결하는 방식은 크게 세 가지가 있다.

  • one to one (1:1) - 각 테이블의 로우가 일대일 매칭되는 관계
  • one to many (1:n) - 한 테이블 로우 한 줄이 다른 테이블 여러 로우와 연결된 관계
  • many to many (n:n) - 각 테이블의 여러 로우들이 연결되는 관계 (테이블 하나를 더 생성하여 데이터를 연결)

관계형 데이터베이스는 왜 테이블을 나누어 관리할까?

만약 한 테이블에 다양한 정보들을 모두 입력하게 되면 동일한 정보들이 불필요하게 중복되게 된다. 이럴 경우 데이터 사용 효율이 낮아지고 수기로 입력하여 잘못된 데이터가 저장될 가능성이 커진다.

테이블을 나누어 데이터를 연결할 경우 해당 문제들을 해결할 수 있다. 중복 데이터를 제거하여 사용되는 디스크 용량을 줄이고, 같지만 부분적으로 다른 데이터들이 생기지 않게 된다.

이렇게 데이터를 분류하고 정리하는 것을 정규화(normalization)라고 한다.


ACID

Atomicity, Consistency, Isolation, Durability

미국의 컴퓨터 과학자인 짐 그레이는 1970년대 말에 신뢰할 수 있는 트랜잭션 시스템의 특성들을 정의하였으며 자동으로 이들을 수행하는 기술을 개발해 냈다.

이후 1983년 안드레아스 로이테르(Andreas Reuter)와 테오 해르데르(Theo Härder)는 ACID라는 용어를 만들면서 이를 기술했다.

  • 원자성(Atomicity) - 트랜잭션과 관련된 작업들이 부분적으로 실행되다 중단되는 경우 실행된 일부를 다시 처음으로 돌려 중간 과정이 끊기지 않도록 하는 성질

  • 일관성(Consistency) - 트랜잭션 실행이 성공적으로 완료되면 언제나 일관성 있는 데이터베이스 상태를 유지하는 성질. 무결성 제약의 경우 이를 위반하는 트랜잭션은 중단된다.

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

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


관계형 데이터 (SQL, RDBMS) 장단점

정형화된 데이터들 그리고 데이터의 완전성이 중요한 데이터들을 저장하는 데 유리하다.
ex) 전자상거래 정보. 은행 계좌 정보, 거래 정보 등

장점

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

단점

  • 테이블을 미리 정의해야 하므로 테이블 구조 변화 등에 덜 유연하다.
  • 확장성이 쉽지 않다.
  • 역시 테이블 구조가 미리 정의되어 있다 보니 단순히 서버를 늘리는 것 만으로 확장하기가 쉽지 않고 서버의 성능 자체도 높여야 한다. (Scale up (서버의 성능을 높이는 것))
  • 서버를 늘려서 분산 저장 하는 것도 쉽지 않다.



2. NoSQL

관계형의 경우 데이터를 저장하기 전 어디에 어떻게 데이터를 저장할 것인지 정의(테이블 정의)한다. 그러나 비 관계형은 데이터들을 저장하기 전에 정의할 필요가 없다.

ex) MongoDB, Redis, Cassandra

비 관계형 데이터 (NoSQL) 장단점

주로 비정형화 데이터 그리고 완전성이 상대적으로 덜 유리한 데이터를 저장하는 데 유리하다.
ex) 로그 데이터

장점

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

단점

  • 데이터의 완전성이 덜 보장된다.
  • 트랜잭션이 안되거나 비교적 불안정하다.
profile
UX에 관심 많은 개발 초보 Front-end Developer

0개의 댓글