[데이터 베이스] 트랜잭션 시리즈 #1 : 서론
어플리케이션을 개발하는 개발자라면 필연적으로 데이터베이스를 사용하게 된다. 백엔드라는 분야 자체가 데이터베이스를 어떻게 다루는지에 대한 것이라고 봐도 과언이 아닐 정도로 백엔드 개발자에게 있어서 데이터베이스에 대한 이해는 필수적이다. 데이터베이스와 관련해서 정말 많은 내용을 공부해야 하지만 그중 가장 핵심적이고 중요한 개념 하나를 꼽자면 필자는 트랜잭션
이라고 생각한다. 사실 트랜잭션
에 대한 공부는 데이터베이스를 사용하기 위한 SQL구문 공부, 설치법 등과 같이 실용적인 성격의 내용과는 살짝 다르고 복잡하다. 초심자 혹은 규모가 작은 서비스만 운영해야 하는 경우에는 데이터베이스를 사용할 때 트랜잭션
에 대한 깊은 이해없이 데이터베이스에서 알아서 설정해주는 기본 설정만으로도 충분히 장애 없이 데이터베이스를 사용할 수 있다. 혹은 읽기만 할 때는 REPEATABLE READ
, 삽입, 수정, 삭제 작업 등에는 SERIALIZABLE
로 isolation level을 지정해 사용해도 충분한 경우가 대부분이다. (방금 한말은 이해 못해도 괜찮다. 필자가 뒤에서 다룰 예정이니까.) 필자도 이 때문에 학생때 들었던 데이터베이스 수업정도의 지식만으로 실무에서 데이터베이스를 설계하고 다른 사람들이 사용하는 패턴을 그대로 따라해왔다. 하지만 이렇게 잘 이해하지 못한채로 사용하다보니 항상 불안하고 뭔가 부족하다고 느꼈다.
따라서 이참에 트랜잭션
에 대해 한번 정리해보려고 한다. 트랜잭션
이 무엇인지 정의하고, 트랜잭션
이 가지는 특성, 그리고 데이터베이스가 트랜잭션
을 다루기 위해 사용하는 여러가지 기법들에 대해 같이 공부해보자. 필자가 모든 범위를 다 다루지는 못하겠지만 최대한 개괄적으로 트랜잭션이 무엇인지 이해하고, 실무에서 장애를 미연에 방지하거나, 장애를 겪을 때 원인을 분석 할 수 있을 정도의 지식은 갖출 수 있도록 최대한 많은 내용을 여러 글에 걸쳐 다뤄보려고 한다. 일단 생각 하고 있는 목차는 아래와 같다.
(1) 트랜잭션 개념 : Transaction이란? ACID란?
(2) Serializability and Recoverability
(3) Isolation Level
(4) Concurrency Control : Lock based & MVCC
(5) NoSQL에서의 트랜잭션
(6) Deadlock
각 항목 별로 글을 하나씩 다룰 예정이다. 글을 쓰게되면 각 항목마다 링크를 추가하도록 하겠다.
글 내용 중 지적할만한 내용이 있다면 환영이다. 공감과 응원은 더욱 힘이 된다.