용어정리
- 가용성(availability): 정보 시스템(서버, 네트워크 프로그램 등)이 정상적으로 사용 가능한 정도를 말한다.
전체사용시간/정상적인사용시간
으로 나눈 값을 의미한다.
- 고가용성(HA, High Availability): 가용성이 높은 것을 고가용성이라한다. 거의고장나지 않음을 의미한다.
- 클러스터(Cluster): 여러대의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하는 컴퓨터들의 집합. 여러DB를 묶어 사용할때 Cluster라고 표현하기도 한다.

출처 : https://hahahoho5915.tistory.com/66
- 복제(Replication): 말 그대로 DB의 복제본을 의미한다. Cluster가 단순히 DB서버를 확장했따면, Replication은 데이터베이스 서버 + 스토리지 모두를 확장하게된다. 동기화문제때문에 일관적인 데이터를 얻지 못하나, Cluster에 비해 성능향상을 가져갈수 있다.

출처 : https://hahahoho5915.tistory.com/66
- Sharding: 복제된 데이터베이스에 데이터 자체가 매우 많을 시, 원하는 데이터를 찾는데 많은 시간이 소요될 수 있다. 따라서 데이터를 잘 분산시키는 방법에 대한개념이 Sharding이다. 테이블을 특정 기준으로 나눠서 저장,검색 하는 것을 뜻한다. 어떻게 잘 분산시켜 저장할지에 대한 기준이 Shard Key다. 대표적인 방식은 아래와 같이 샤드 수만큼 Hash함수를 사용해 나온 결과에따라 DB서버에 저장하는 Hash Sharding이다.

출처 : https://jordy-torvalds.tistory.com/entry/Clustering-vs-Replication-vs-Sharding
Transaction
거래
를 의미하는 Transaction은 가끔 미드나 영화를 보다보면 심심찮게 등장한다.
주로 은행 송금과 관련된 일에서 유독 많이 쓰이는 것 같기도?
해당 용어가 DB에서 사용될때는 의미가 조금 달라진다.
알기 쉽게 은행을 예로 들어보자.
A
가 B
에게 100만원
을 송금한다.
A
의 통장에서 100만원
이 빠져나가고, 해당 정보가 DB에 저장되었다.
- 오 이런! 예상치 못한 오류가 발생해서
B
에게 100만원
송금이 실패하였다.
- 여기서
100만원
의 행방은?
실제로 이런일은 일어나지 않는다. 트랜잭션이 적용되었기 때문이다.
트랜잭션은 컴퓨터과학에서 논리적 작업단위(더이상 분할이 불가능한 단위)다.
DB에서는 쉽게말해 여러쿼리의 묶음이다.
다시 송금을 예로 들어보자. 이번엔 DB의 관점에서 살펴보겠다.
A
의 계좌에서 100만원
을 삭감한다.
B
의 계좌에 100만원
을 더한다.
위 작업은 무조건 하나의 묶음으로 이루어져야 한다. 예외는 없다. 만약 1번 작업이 실패하면, 2번도 실패해야한다.
따라서 트랜잭션은 단위 내 모든 쿼리가 성공하지 않을 시 해당 단위작업 이전으로 롤백하는 기능을 제공한다.
ACID
트랜잭션은 4가지 성질을 가지며, 이 덕분에 해당 작업이 안전하게 수행되는 것을 보장받는다.
- Atomicity(원자성) : 트랜잭션이 모두 데이터베이스에 반영되어야한다. 실패했다면, 반영되지 않아야 한다. 즉 최소한의 작업단위라는 것을 원자성이라고 표현한다.
- Consistency(일관성) : 트랜잭션처리결과가 항상 일관성 있어야한다. 트랜잭션 진행 중 타 작업으로인하여 DB가 변경되더라도, 트랜잭션 실행 당시 DB를 참조해야한다.
- Isolation(독립성) : 트랜잭션간 연산은 서로 끼어들 수 없다. 하나의 트랜잭션이 완료되어야 해당 트랜잭션의 결과를 참조할 수 있다.
- Durability(영구성) : 트랜잭션 성공 시 결과가 영구적으로 반영되어야 한다. 시스템문제로 DB일관성 체크를 하더라도, 이미 수행된 트랜잭션은 유지되어야 한다.
출처 : https://ko.wikipedia.org/wiki/ACID