데이터베이스는 왜 필요한가?
영속성(persistence) : 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성
데이터베이스 : 애플리케이션에서 사용할 데이터를 체계적으로 디스크에 담도록 만들어진 데이터 저장 전용 프로그램
1. In-memory
ㄱ. JavaScript에서 데이터를 다룰 때 프로그램이 실행될 때에만 존재하는 데이터가 있습니다.
ㄴ.변수를 만들어 저장할 경우, 프로그램이 종료될 때 해당 프로그램이 사용하던 데이터도 사라집니다.
(변수 등에 저장한 데이터가 프로그램의 실행에 의존합니다.)
예기치 못한 상황으로부터 데이터를 보호할 수 없고, 프로그램이 종료된 상태라면 데이터를 받아올 수 없으며,
데이터의 수명이 프로그램의 수명에 의존하게 됩니다.
2. File I/O
ㄱ. 파일을 읽는 방식으로 작동하는 형태입니다.
-엑셀 시트나 CSV 같은 파일의 형태는 In-Memory에 비해 데이터를 저장하는 방식으로 적절해 보이지만
한계가 존재합니다.
ㄴ. 데이터가 필요할 때마다 전체 파일을 매번 읽어야한다.
-파일의 크기가 커질수록 버거워지고 비효율적이라 File I/O 방식의 큰 단점입니다.
ㄷ. 파일이 손상되거나 여러개의 파일들을 동시에 다뤄야 하거나 하는 등 복잡하고 데이터량이 많아질수록
데이터를 불러들이는 작업이 힘들어진다.
SQL(Structured Query Language)
구조화된 Query 언어, 데이터 베이스용 프로그래밍 언어 query를 보내 원하는 데이터를 뽑아올 수 있습니다.
SQL GUI Support Tool(MySQL, Oracle, SQLite, PostgreSQL) 등을 활용하여 SQL구문을 사용합니다.
Query
검색창에 적는 검색어도 Query의 일종
저장되어있는 정보를 필터하기 위한 질의문입니다.
트랜잭션
트랜잭션이란 여러 개의 작업을 하나로 묶는 실행 유닛입니다.
각 트랜잭션은 하나의 특정 작업으로 시작을 해 묶여 있는 모든 작업들을 완료해야 정상적으로 종료합니다.
성공 또는 실패라는 두 개의 결과만 존재하여 미완료된 작업 없이 모든 작업을 성공해야 합니다.
데이터베이스 트랜잭션은 ACID라는 특성을가지고 있습니다.
ACID
ACID는 데이터베이스 내에서 일어나는 하나의 트랜잭션의 안전성을 보장하기 위해 필요한 성질입니다.
1.원자성(Atomicity)
-하나의 트랜잭션에 속해있는 모든 작업이 전부 성공 / 전부 실패해서 결과를 예측할 수 있어야하는 성질
-둘 중 하나의 작업이라도 실패한다면 하나의 단위로 묶여있는 모든 작업이 실패하게 만듭니다.
(기존 데이터 보호, 때때로 충돌 요인에 대해 선택지를 제공함)
-묶여있는 여러 작업이 부분 실행되는 경우 데이터가 오염될 수 있음
(업데이트를 누가 했는지 모름 / 업데이트 날짜 누락 등)
2.일관성(Consistency)
-데이터베이스의 상태가 일관되어야 한다는 성질
(데이터베이스의 상태는 이전과 같이 유효해야함)
ex) 모든 고객은 반드시 이름을 가지고 있어야 한다는 데이터베이스의 제약이 있다는 가정 하에
이름 없는 새로운 고객을 추가하는 쿼리/ 기존 고객의 이름을 삭제하는 쿼리 등의
트랜잭션은 일관성을 위반하는 경우이다
3.격리성,고립성(Isolation)
-모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야 한다
ex) 계좌이체의 경우 A가 B계좌로 1만원을 C계좌로 1만원을 보내는 것은 각각 다른 트랜잭션이다.
(동시 / 연속으로 일어나도 계좌에서 돈이 빠져나간다는 상태는 동일해야한다)
4.지속성(Durability)
-트랜잭션이 성공적으로 수행되었을 때 해당 트랜잭션에 대한 로그가 남아야하며,
영구적이어야 한다(런타임 / 시스템 오류가 발생할지라도)
ex) 은행에서 계좌이체를 성공적으로 실행한 뒤에, 해당 은행 데이터베이스에 오류가 발생해 종료되더라도
계좌 이체 내역은 기록으로 남아야함.
마찬가지로 계좌이체를 로그로 기록하기 전에 시스템 오류 등에 의해 종료가 된다면, 해당 이체 내역은 실패로 돌아가고
각 계좌들은 계좌이체 이전 상태들로 돌아가게 됨
'Today I Learned > Database' 카테고리의 다른 글
[DataBase] MVC, ORM이란? (0) | 2022.04.13 |
---|---|
[Database] 인스타그램 스키마 디자인 (2) | 2022.04.08 |