반응형
DB 쪽에서 꽤 자주 등장하는 질문으로는 트랜잭션의 4가지 특징일 것이다.
그전에 트랜잭션이 무엇이냐?
트랜잭션은 SQL(질의)를 통해 데이터베이스에 변화가 일어나는 작업, 또는 그런 작업의 연속적인 단위를 말한다.
너무 교과서적인 말을 한거 같은데, 이 블로그를 예시로 들어보겠다.
나는 지금 이 글을 쓰기 위해,
1) Database 카테고리를 선택
2) 글 작성 중
3) 포스팅
이렇게 3단계의 작업을 걸쳤는데, 이 3단계를 통해 "글이 하나 등록" 되었으면 이게 트랜잭션 하나가 수행된 것이라고 보면 된다. 꼭, 저 3단계 작업을 진행했으니 트랜잭션이 3번 일어났구나! 라고 말하진 않는다. 가끔 트랜잭션의 정의에 "최소" 라는 말이 들어가있어서 그런가 잘게잘게 쪼개서 생각하곤 하는데 아니다.
다시 말하자면 트랜잭션은 "데이터베이스에 변화" 라고 했다. 내가 이 글을 작성하여 등록을 해야지만, 내 블로그의 DB상에서 이 글 정보가 저장이 되는 것이다. CRUD기능이라 생각하자. 나는 이 글을 처음쓴다면 CREATE가 되겠지? 수정한다면 UPDATE고.. 삭제한다면 DELETE를 통해 DB에 변화를 준다. READ는 이 글을 읽기 위해 "검색" 을 하는 것이라 보면 된다.
좋다. 그러면 트랜잭션이 데이터베이스의 유의미한 변화를 일으키는 단일 작업 단위, 혹은 그러한 연속적인 작업 단위임을 알았다. 그렇다면 추가로, 면접에서 가끔 트랜잭션의 4가지 특징 혹은 트랜잭션의 ACID를 설명해봐라. 라고 한다면?
- Atomicity (원자성) : 트랜잭션은 수행이 되었거나, 수행되지 않았거나여야 한다.
- 어떤 예시가 있을까? 방금도 말했지만 트랜잭션은 연속적일 수도 있다. 송금 시스템을 예시로 든다면, 송금자가 100만원을 이체하였다치자. 받는사람이 근데 하필 타이밍 나쁘게 은행 점검으로 인해 이체를 받지 못한 상황이다. 그러면 "송금받기" 이라는 작업이 실패했으므로 트랜잭션은 수행되지 않아야 한다. 이처럼 원자성은 100개의 작업 중 단 한번의 작업이라도 실패하면 모든 작업은 롤백된다.
- Consistency (일관성) : 트랜잭션이 수행된 후에도 DB는 기존에 정의한 규칙을 위배하지 않고 똑같아야 한다.
- 이게 뭔말이냐하면... 입사를 예시로 들겠습니다. 우리에겐 사번(노예등록번호)이란게 있어요. 기존 임직원들은 이 사번을 다 갖고 있는데 신규입사자의 경우는 아직 사번이 부여가 되지 않은 상태입니다. 인재 DB에 등록하기 위해선 "모든 임직원은 사번을 갖고 있어야 한다" 라는 규칙을 위배하지 않기 위해서 입사자들에게도 사번이 모두 부여가 됩니다. 그게 설령 정규직이 아닌 계약직, 인턴에게도 사번 (혹은 비슷한 것)이 부여되는 이유입니다.
- Isolation (독립성) : 트랜잭션이 수행되는 중간에 다른 트랜잭션이 개입될 수는 없다.
- Durability (지속성) : 완료된 트랜잭션은 삭제하지 않는 한 DB상에 영구히 보존된다.
반응형