본문 바로가기

database

(3)
MYSQL 트랜잭션 어떻게 구현되어 있는가 데이터베이스에서 트랜잭션은 ACID(원자성, 일관성, 고립성, 지속성) 특성을 보장하는 중요한 기능이다.MySQL의 InnoDB 스토리지 엔진을 예로 들어 트랜잭션이 내부적으로 어떻게 구현되어 있는지 분석해보자. 메모리와 디스크의 이중 구조데이터베이스는 성능과 안정성을 모두 확보하기 위해 데이터를 다루는 방식이 특별하다.기본적으로 모든 데이터 변경사항은 우선 메모리에 저장되고, 나중에 디스크에 기록한다.이는 디스크 접근이 메모리 접근보다 수천 배 느리기 때문이다.사용자가 데이터를 변경하면 빠르게 응답을 받을 수 있도록 메모리에서 먼저 처리하고, 안전하게 보관하기 위해 적절한 시점에 디스크에 저장하는 방식이다. 용어 정리- 버퍼 풀(Buffer Pool)데이터베이스 테이블과 인덱스의 실제 데이터 페이지를 ..
인덱스 검색은 왜 더 빠른가? 인덱스란?인덱스는 데이터베이스에서 특정 데이터를 빠르게 찾기 위해 사용하는 자료구조다.책의 목차처럼 원하는 내용을 빨리 찾을 수 있도록 돕는다. 인덱스 검색이 빠른 이유근본적으로 인덱스 검색이 빠른 이유는 정렬이 되어 있기 때문이다.예를 들어, 1~100 사이의 학번을 가진 학생들이 학번 순으로 한 줄로 서 있다고 가정해보자.91번 학생을 찾으려면 뒤에서 10명을 세는 방법이 있다.더 쉽게 찾으려면 줄을 세울 때 10명 단위로 간격을 벌려 놓으면 된다.그러면 마지막 10명 단위 그룹의 첫 번째 학생이 91번일 것이다.반면, 학생들이 학번과 상관없이 랜덤으로 서 있다면 91번 학생을 찾기가 어려워진다.물론 “91번 학생!” 하고 부르면 쉽게 찾을 수 있겠지만, 데이터는 자아가 없으므로 이런 방법은 사용할 ..
MongoDB watch를 이용한 실시간 채팅 실시간 채팅카카오톡과 같은 채팅 프로그램은 단순 소켓 통신으로 온라인 유져에게만 채팅을 보내는 것이 아니라,오프라인 유져에게도 푸시 알림과 함께 메시지를 보낸다.여기서 메시지를 보낸다는 의미는 오프라인 유져의 클라이언트 프로그램을 실행시키는 것이 아니라,서버측에서 메시지를 저장하고 있다가 클라이언트를 실행시켰을 때 동기화가 되는 것이다.또한 유져가 온라인 상태인 경우에 새로고침을 하지 않아도 메시지는 실시간으로 렌더돼야 한다.비록 새로고침을 하지 않았다고 하더라도 말이다. MongoDB Watch컬렉션의 데이터 변경사항(CRUD)을 감지하여 이벤트를 발생시켜 클라이언트가 그에 따른 동작을 기술할 수 있도록 하는것이다.예를 들어, 채팅방 컬렉션에 채팅이 추가되면 Kafka 같은 이벤트 브로커 없이도 각 유..