✔️What You Will Learn
데이터베이스란? 데이터를 저장하는 시스템
입니다.
데이터 베이스를 도대체 왜 사용할까요? 데이터를 저장하고, 연산, 보존하기 위해서!! 체계적으로 구조화해서 저장해 불러오기 위함입니다.
파일로 아닌 디비로 하는 이유 관리가 편해서, 이처럼 디비는 편집 보존 가공을 편리하게 해줌
종류는 큰 부분으로 RDBMS(SQL), NoSQL가 있고, 각각의 데이터베이스마다 또 종류가 나뉩니다. SQL은 MySQL,Oracle가 대표적이고, NoSQL은 MongoDB, Redis, Cassandra 등이 대표적인 데이터베이스입니다.
1)one to one,일대일
: 한명의 유저는 한명의 프로필 아이디만 가질수 있다.
2)one to many,일대다
: 하나의 정보를 여러개의 데이터가 연결관계를 지을 수 있는 것을 의미
해당 고객이 여러개의 주문을 할 수 있고, 그 주문에 대한 대상은 하나의 고객일뿐, 여러명이 아님
3)many to many,다대다
:하나의 책에 여러명의 저자가 존재, 하나의 A테이블이 B테이블을 참조하고, 또다른 c테이블이 B테이블을 참조하고 있는 것을 의미, 즉 b테이블은 각각 a테이블과 c테이블을 참조하고 있다.
어떻게 기록되나?author의 아이디와 책의 아이디가 여러번 기록이 가능합니다. 하나의 책 아이디에 여러명의 저자 아이디가 저장될 수 있습니다.
Foreign key(외부키)라는 개념을 사용하여 주로 연결
합니다.
앞서 본 one to one 예에서 user_profiles 테이블의 user_id 컬럼은 users 테이블에 걸려있는 외부 키라고 지정한다.
즉 데이터베이스에게 user_id의 값은 users 테이블의 id 값이며 그러므로 users 테이블의 id 컬럼에 존재하는 값만 생성될 수 있다.
만일! users 테이블에 없는 id 값이 user_id 에 지정되면 에러가 난다.
하나의 테이블에 모든 정보를 다 넣으면 동일한 정보들이 불필요하게 중복되어 저장될 가능성
이 있습니다. 데이터 무결성 원칙에 어긋나게 됩니다. 그래서 여러 테이블을 나눠서 저장하고 필요한 테이블끼리 연결시키면 중복된 데이터를 저장하지 않음으로 디스크를 더 효율적으로 쓰고, 또한 서로 같은 데이터이지만 부분적으로 틀린 데이터가 생기는 문제가 없어진다. 이것을 normalization(정규화)
이라고 한다.
트랜잭션
이란? 질의를 하나의 묶음 처리해서 만약 중간에 실행이 중단되면 처음부터 다시 수행 ROLLBACK
, 없으면 COMMIT
, all or nothing이라고 생각하면 된다.
트랜잭션은 작업수행의 논리적인 단위, DBMS성능은 초당 트랜잭션 실행수로 측정한다.이를 TPS
라 부릅니다.트랜잭션은 DB 서버에 여러 클라이언트가 동시에 접속하면서 응용프로그램이 갱신처리하면서 중단될 수 있는 경우에 데이터의 부정확함을 판단할 수 있을 때 사용합니다.
데이터베이스의 데이터를 안정적인 작업을 위해서 트랜잭션은 ACID라는 기능이 있다. 원자성, 일관성, 고립성, 지속성
- 원자성(Atomicity)
:트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력
이다. 예를 들어, 자금 이체는 성공할 수도 실패할 수도 있지만 보내는 쪽에서 돈을 빼 오는 작업만 성공하고 받는 쪽에 돈을 넣는 작업을 실패해서는 안된다. 원자성은 이와 같이 중간 단계까지 실행되고 실패하는 일이 없도록 하는 것이다.
올 오어 낫띵
- 일관성(Consistency)
:트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것
을 의미한다. 무결성 제약이 모든 계좌는 잔고가 있어야 한다면 이를 위반하는 트랜잭션은 중단된다.
여기서 일관성이란? 데이터 타입이나 상태가 중간과정에서 변질되지 않는것을 말함
3.고립성(Isolation)
:트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것
을 의미한다. 이것은 트랜잭션 밖에 있는 어떤 연산도 중간 단계의 데이터를 볼 수 없음을 의미한다. 은행 관리자는 이체 작업을 하는 도중에 쿼리를 실행하더라도 특정 계좌간 이체하는 양 쪽을 볼 수 없다. 공식적으로 고립성은 트랜잭션 실행내역은 연속적이어야 함을 의미한다. 성능관련 이유로 인해 이 특성은 가장 유연성 있는 제약 조건이다. 자세한 내용은 관련 문서를 참조해야 한다.
트랜잭션끼리는 서로 간섭할 수 없다.
- 지속성(Durability)
:성공적으로 수행된 트랜잭션은 영원히 반영되어야 함
을 의미한다. 시스템 문제, DB 일관성 체크 등을 하더라도 유지되어야 함을 의미한다. 전형적으로 모든 트랜잭션은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있다. 트랜잭션은 로그에 모든 것이 저장된 후에만 commit 상태로 간주될 수 있다.
비관계형 타입의 데이터를 저장할때 주로 사용되는 데이터베이스 시스템
관계형 데이터베이스와 다르게 비관계형 이기 때문에 데이터들을 저장하기 전에 정의 할 필요가 없다.
관계형 데이터베이스는 데이터들을 저장하기 전에 어디에 어떻게 저장할것인지를 정의 해야한다.
즉 테이블을 정의해야함 (테이블 이름, 테이블과 다른 테이블의 관계, 각 컬럼의 타입 등등)
MongoDB, Redis, Cassandra 등이 가장 대표적인 NoSQL 데이터 베이스이다.
빠른 속도로 저장하기 위해서 사용한다.
장점:
단점:
NoSQL
장점: