db
2 posts
트랜잭션이란?

학습 동기 프로그램 내부에서 예외가 발생했을 때, 진행되고 있던 데이터 변경 사항들을 모두 성공시키거나 실패시켜야 할 필요성을 느꼈어요. 면담 예약 서비스로 예를 든다면 면담을 예약하기 위해서는 1) 멘토의 시간도 사용중으로 바꿔야하고, 2)면담 요청 내용도 저장해야하고, 3)면담 테이블에 면담도 생성해야하는 3가지 DB 변경 작업이 필요해요. 세가지 중 하나라도 정상적으로 실행이 안되면 진행된 내역을 전부 취소 시켜서 프로그램 오류를 막는것이 안전한 서비스겠죠? 트랜잭션 더이상 나눌 수 없는 작업 단위를 말합니다. 데이터의 정합성을 보장하기 위한 작업이기도 해요. 위에서 면담을 생성하기 위해서 해야하는 3가지는 반드시 필요한 작업이라 하나의 트랜잭션에 묶이듯이요! 이 트랜잭션을 통해서 지키고 싶은 특징이 4가지가 있어요. 각 영단어에 앞 글자를 따서 ACID 원칙이라고도 불려요 원자성(Atomicity) 작업이 하나의 쿼리로 실행되더라도, 해당 쿼리로 바뀌는 데이터가 1개…

InnoDB 언두 로그과 리드 로그

언두 로그란? myql 8.0 기준으로 DB 에서 트랜잭션과 격리 수준을 보장하기 위해서 InnoDB 스토리지 엔진을 사용하는 방법이 있어요. 트랜잭션과 격리 수준을 보장하기 위해서 DML(INSERT, UPDATE, DELETE) 로 변경 요청이 들어오면 변경전, 이전 버전의 데이터를 언두로그라는 공간에 백업해요. 트랜잭션 보장 트랜잭션이 롤백되면, 해야 하는데, 이때 언두 로그에 백업해둔 이전 버전의 데이터를 이용해 복구해요. 격리 수준 보장 특정 커넥션에서 에 에서 데이터를 조회하면 트랜잭션 격리 수준에 맞게 변경중인 레코드를 읽지 않고 하기도 합니다. (READ COMMITED 이상의 격리수준에서는 트랜잭션이 열려있는 데이터에 경우, 언두로그를 먼저 읽습니다. 언두로그 소멸 시점 그렇다면, 언두로그는 백업용 임시 공간이라는 소리인데, 언제까지 메모리에 남아있을까요? 언두로그는 롤백을 하거나, 트랜잭션과 격리할 때 사용하기 때문에 트랜잭션이 종료되면 더이상 필요 없어져서 …