1. 비관적 락 select ~ for update 구문을 사용한다. 한 Row의 Lock을 획득하기 하기 위해, 무한정 기다리는 이슈가 발생할 수 있고, 서비스 장애를 야기할 수 있다. (Timeout 설정이 없음) REPEATABLE READ 격리 수준을 사용하고 있다면, 갱신 분실의 문제(Lost Update)가 발생할 수도 있다. RDMBS에서 제공하는 Lock 기능을 사용한다. 언두 영역(InnoDB 스토리지 엔진에 내부에 있는) 레코드에 잠금을 걸 수 없고, 테이블 레코드에 잠금을 건다. 2. JPA에서 지원하는 @Version @Version을 명시하여, 수정이 일어나는 시점에 Version이 일치하지 않으면, 예외를 발생시킨다. REPEATABLE READ 격리 수준에서도 갱신 분실의 문제..
사내에서 진행되는 서비스를 개편하게 되면서, RabbitMQ를 사용하게 되었습니다. RabbitMQ을 사용하고, 운영하면서 Connection과 Channel에 대한 개념이 잡히지 않아서 정리하게 되었습니다. Connection 일반적인 특징 RabbitMQ에서 지원하는 모든 프로토콜은 TCP 기반이다. 효율성을 위해 긴 연결을 가정한다. (프로토콜 작업당 새 연결이 열리지 않음.) 하나의 클라이언트 연결은 단일 TCP 연결을 사용한다. 클라이언트가 연결을 성공하려면, RabbitMQ 대상 노드는 특정 프로토콜에 대한 연결을 허용해야 한다. 연결은 오래 지속되어야 하기 때문에 일반적으로 구독을 등록하고, 폴링 대신에 메시지를 전달하여 소비한다. 연결이 더 이상 필요하지 않은 경우, 리소스 절약을 위해 연..
개발자와 DBA를 위한 Real MySQL을 읽고 정리한 내용입니다. 그중에서 현재 사용하고 있는 InnoDB 스토리지 엔진에 대해 알아보고자 공부하고, 정리하게 되었습니다. 우선 InnoDB 스토리지 엔진의 가장 큰 특징은 다음과 같습니다. 레코드 기반의 잠금 제공 레코드 기반의 잠금 덕분에 높은 동시성 처리 가능 안정적이며, 성능이 뛰어남 InnoDB 스토리지 엔진의 특성 프라이머리 키에 의한 클러스터링 프라이머리 키 값의 순서대로 디스크에 저장된다. 프라이머리 키에 의한 Range Scan은 상당히 빨리 처리될 수 있다. 쿼리의 실행 계획에서 프라이머리 키는 기본적으로 보조 인덱스에 비해 비중이 높게 설정되어 있다. 잠금이 필요 없는 일관된 읽기 MVCC(Multi Version Concurrenc..