TIL 118 - 간단한 DB 용어 정리와 Transaction

김영현·2025년 1월 15일
0

TIL

목록 보기
128/129

용어정리

  • 가용성(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에서 사용될때는 의미가 조금 달라진다.

알기 쉽게 은행을 예로 들어보자.

  1. AB에게 100만원을 송금한다.
  2. A의 통장에서 100만원이 빠져나가고, 해당 정보가 DB에 저장되었다.
  3. 오 이런! 예상치 못한 오류가 발생해서 B에게 100만원송금이 실패하였다.
  4. 여기서 100만원의 행방은?

실제로 이런일은 일어나지 않는다. 트랜잭션이 적용되었기 때문이다.

트랜잭션은 컴퓨터과학에서 논리적 작업단위(더이상 분할이 불가능한 단위)다.
DB에서는 쉽게말해 여러쿼리의 묶음이다.

다시 송금을 예로 들어보자. 이번엔 DB의 관점에서 살펴보겠다.

  1. A의 계좌에서 100만원을 삭감한다.
  2. B의 계좌에 100만원을 더한다.

위 작업은 무조건 하나의 묶음으로 이루어져야 한다. 예외는 없다. 만약 1번 작업이 실패하면, 2번도 실패해야한다.
따라서 트랜잭션은 단위 내 모든 쿼리가 성공하지 않을 시 해당 단위작업 이전으로 롤백하는 기능을 제공한다.

ACID

트랜잭션은 4가지 성질을 가지며, 이 덕분에 해당 작업이 안전하게 수행되는 것을 보장받는다.

  • Atomicity(원자성) : 트랜잭션이 모두 데이터베이스에 반영되어야한다. 실패했다면, 반영되지 않아야 한다. 즉 최소한의 작업단위라는 것을 원자성이라고 표현한다.
  • Consistency(일관성) : 트랜잭션처리결과가 항상 일관성 있어야한다. 트랜잭션 진행 중 타 작업으로인하여 DB가 변경되더라도, 트랜잭션 실행 당시 DB를 참조해야한다.
  • Isolation(독립성) : 트랜잭션간 연산은 서로 끼어들 수 없다. 하나의 트랜잭션이 완료되어야 해당 트랜잭션의 결과를 참조할 수 있다.
  • Durability(영구성) : 트랜잭션 성공 시 결과가 영구적으로 반영되어야 한다. 시스템문제로 DB일관성 체크를 하더라도, 이미 수행된 트랜잭션은 유지되어야 한다.

출처 : https://ko.wikipedia.org/wiki/ACID

profile
모르는 것을 모른다고 하기

0개의 댓글