TIL - Database

Heechul Yoon·2020년 2월 25일
0

LOG

목록 보기
18/62

데이터베이스

데이터베이스는 문자그대로 데이터를 저장하는 곳이다.
데이터는 하드웨어에 저장된다. 그리고 사용될 때는 메모리로 올라와서 cpu에 의해서 처리된다.
하드웨어에 저장되어도 된다면 왜 파일에 저장시키지 않고 데이터베이스에 저장시킬까?

정답읜 관리의 편리성 때문이다. 데이터는 저장뿐만 아니라 사용되어야 하기 때문에 데이터 찾기, 데이터 관계짓기, 데이터의 관리의 필요성이 생긴다. 이러한 이유로 데이터베이스가 등장한다.

데이터베이스의 종류

관계형 데이터베이스

관계형 데이터베이스는 모든 데이터들은 유동적인 관계가 있다고 간주하고 데이터를 표현할 때 관계형으로 표현한다. 데이터를 기본적으로 컬럼과 로우를 통해 테이블 형태로 저장시킨다. 각각의 테이블은 3가지 형태의 관계를 가질 수 있다.

  • one to one
    정확하게 1대1 대칭의 관계를 말한다. 한명의 유저는 하나의 프로필을 가질 수 있고, 하나의 프로필도 하나의 유저에게만 속한다.
  • one to many
    하나가 여러개의 캐이스를 가지는 경우이다. 한명의 사람은 여러개의 집을 가질 수 있다. 하지만 하나의 집은 여러명의 사람에게 소유될 수 없다.
  • many to many
    대상이 서로 여러가지의 캐이스를 가지는 경우이다. 한명의 유저는 여러개의 배송지를 가질 수 있다. 그리고 하나의 배송지는 여러명의 유저에 속할 수 있다.

#데이터베이스 확장하는 경우
데이터베이스안에 관계가 전부 정의되어 있기 때문에 쉽게 확장할 수 없다. 결국 데이터베이스의 성능을 scale up해야한다. scale up하기 위해서 서버를 복제시켜 일시적으로 가동시키고, scale up이후 다시 원 서버로 돌아와 scale up 기간동안 업데이트 된 데이터를 보강해준다. -> 데이터베이스 확장이 힘들다.

비관계형 데이터베이스

관계형데이터베이스는 하나의 테이블에 컬럼이 있어 스키마에 맞는 데이터만 저장 할 수 있다. 하지만 비관계형 데이터베이스는 스키마가 없이 어떤 형태라도 JSON형태로 저장 할 수 있다. 따라서 초기의 개발속도가 빠르고 나중에 스키마가 바뀌어도 상관이 없다.

#데이터베이스 확장하는 경우
그리고 확작성이 좋다. 동시접속자가 늘어나서 데이터베이스를 확장해야 할 경우 데이터베이스를 데이터의 관계를 따지지 않고 하나 더 추가할 수 있다.

SQL(Structured Query Language)

sql은 관계형 데이터베이스를 사용할 수 있도록 하는 언어이다. 백앤드 시스템과 데이터베이스는 서로 서버가 나뉘어 져 있다. 클라이언트와 서버가 데이터를 주고받을 때 http를 사용한다면 백앤드 서버와 데이터베이스가 통신할 때는 이 sql을 사용한다. 대부분 Create(데이터생성), Read(데이터 읽기), Update(데이터수정), Delete(데이터삭제)의 통신을 주고받는다.

Transaction

Transaction은 DB의 상태를 변환시키는 한단위의 논리적인 작업이라고 할 수 있다.
예를들어, 계좌이체를 한다고 가정해보자. 계좌이체의 과정은 다음과 같을 것이다

  1. A계좌의 잔액 확인
  2. A계좌에서 돈 빼고 저장
  3. B계좌의 잔액 확인
  4. B계좌에 돈을 넣고 저장

1~4의 과정을 한 단위의 Traction이라 하고 이 과정은 반드시 완료(commit)가 되거나, 완료가 되지 못했다면 처음으로 돌아가야 한다(roll back). 즉, 일부만 완료(partially done)되었다는 것은 있을 수 없다.

Transaction의 성질
  • Atomicity(원자성)
    Transaction은 모든 과정을 통틀어 수행되어 완료되거나(commit), 완료되지 못했다면 수행되지 않은 상태로 돌아가야 한다.(rollback)

  • Consistency(일관성)
    Transaction이 완료 된 후에 데이터베이스는 항상 일관성 있는 상태가 유지되어야 한다.

  • Isolation(독립성)
    데이터이스에는 여러개의 Transaction이 있을 수 있는데, 각각은 독립적이어야 한다. 즉, 하나의 Transaction의 실행 도중에는 다른 Transaction이 관여할 수 없다.
  • Durability(지속성)
    수행된 Transaction은 데이터베이스에 지속적으로(영원히)반영된다.
profile
Quit talking, Begin doing

0개의 댓글