CRUD 작업(Create, Read, Update, Delete)은 일반적으로 데이터베이스 시스템에서 트랜잭션 내에서 수행됩니다. 이러한 작업들은 먼저 메모리 상에서 이루어지며, 트랜잭션이 커밋될 때 비로소 데이터베이스의 영구 저장 장치(디스크)에 반영됩니다. 이제 커밋하는 순간에 무슨 일이 일어나는지 자세히 설명하겠습니다.
CRUD 작업의 메모리 상에서의 수행
- Create (생성):
- 새로운 데이터가 테이블에 삽입됩니다. 이 데이터는 먼저 메모리의 버퍼나 캐시에서 처리됩니다.
- Read (읽기):
- 데이터베이스에서 데이터를 조회하는 작업입니다. 조회된 데이터는 메모리에서 캐시되거나, 필요한 경우 디스크에서 읽어옵니다.
- Update (수정):
- 기존 데이터를 수정하는 작업입니다. 이 변경 사항도 처음에는 메모리의 버퍼나 캐시에 적용됩니다.
- Delete (삭제):
- 데이터를 삭제하는 작업입니다. 이 작업 역시 메모리 상에서 처리됩니다.
커밋하는 순간 일어나는 일
- 트랜잭션 로그에 기록 (Write-Ahead Logging, WAL):
- 트랜잭션의 변경 사항은 먼저 디스크에 있는 로그 파일에 기록됩니다. 이 로그는 나중에 시스템 장애가 발생했을 때 복구하는 데 사용됩니다.
- 이 작업은 데이터베이스의 일관성을 보장하는 데 중요하며, 로그에 기록된 내용이 실제 데이터 파일에 반영되기 전에 장애가 발생하더라도, 로그를 이용해 복구할 수 있습니다.
- 변경된 데이터를 디스크에 플러시 (Flush):
- 커밋이 이루어지면, 메모리의 버퍼에 있던 변경 사항이 디스크의 실제 데이터 파일에 기록됩니다. 이 과정에서 데이터베이스의 데이터 페이지가 업데이트됩니다.
- 데이터베이스는 변경된 메모리 페이지(더티 페이지)를 디스크에 기록하여 영구적으로 저장합니다.
- 락 해제:
- 트랜잭션이 커밋되면, 해당 트랜잭션에서 잠겨 있던 자원(예: 테이블, 행)에 대한 잠금이 해제됩니다. 이를 통해 다른 트랜잭션이 이 자원에 접근할 수 있게 됩니다.
- 트랜잭션 종료:
- 트랜잭션이 성공적으로 커밋되면, 트랜잭션은 종료 상태가 됩니다. 이 시점에서 트랜잭션 내의 모든 작업은 데이터베이스에 영구적으로 반영됩니다.
- 데이터베이스 시스템은 이제 해당 트랜잭션의 로그를 더 이상 복구에 사용하지 않으므로 필요에 따라 로그를 삭제하거나 보관합니다.
- 시스템 안정성 보장:
- 커밋이 완료된 시점부터, 트랜잭션의 결과는 시스템 장애가 발생해도 유실되지 않습니다. 디스크에 기록된 변경 사항은 영구적으로 유지됩니다.
요약
- 메모리에서의 작업: CRUD 작업은 먼저 메모리(버퍼나 캐시)에서 처리됩니다.
- 커밋 시점의 처리: 커밋 시점에 메모리의 변경 사항이 디스크에 영구적으로 기록됩니다. 로그 파일에 트랜잭션 기록이 저장되고, 변경된 데이터는 디스크의 실제 데이터 파일에 플러시됩니다.
- 결과: 커밋이 완료되면, 트랜잭션 내의 모든 변경 사항이 영구적으로 데이터베이스에 반영되며, 시스템 장애가 발생해도 안전하게 보존됩니다.
따라서, 커밋은 메모리 상에서 일어난 작업을 디스크에 확정적으로 기록하여 데이터베이스의 무결성과 일관성을 유지하는 중요한 절차입니다.