분류 전체보기30 커버링 인덱스를 이용한 최적화 이번에 사이드 프로젝트를 진행하며 쿼리 실행계획을 보며 쿼리 최적화를 진행하였다. 우선 테이블을 보자.create table account_book( id bigint auto_increment primary key, title varchar(255) not null, type varchar(255) not null, amount int not null, created_at datetime default CURRENT_TIMESTAMP null, updated_at d.. 2025. 4. 29. MySQL의 인덱스 (1) Real MySQL의 인덱스를 읽으며 정리를 해볼려고 한다. MySQL8.x 버전의 InnoDB를 기준으로 작성한다.디스크 읽기 방식인덱스는 MySQL이 데이터를 더 효율적으로 검색하도록 도와주는 구조로, 특히 데이터가 많을수록 그 효과가 두드러진다. MySql은 B+Tree 기반 인덱스를 사용하는데, 이 구조의 탐색 과정에서 디스크 접근 방식이 성능에 큰 영향을 주게된다. 그래서 인덱스에 대해 알아보기 전 디스크 접근 방식인 랜덤I/O와 순차I/O에 대해 간단히 알아보자.랜덤 I/O (Random I/O)랜덤 I/O는 디스크의 서로 떨어진 위치에서 데이터를 읽거나 쓸 때 발생하는 입출력 방식. 책에서 중간중간 필요한 페이지만 펴서 읽는 것처럼, 디스크 헤드가 여러 위치로 이동해야 해서 속도가 느림.디스.. 2025. 4. 11. InnoDB MVCC Real MySQL1을 읽어보다 재밌는 내용이 있어 포스팅해볼려고 한다. READ COMMITTED 이상의 격리 수준에서는 커밋되지 않은 데이터를 읽을 수 없다. 예를 들어, 트랜잭션 A가 pk = 1인 레코드를 UPDATE 중일 때, 트랜잭션 B가 같은 레코드를 조회하려고 하면 트랜잭션 A가 커밋되기 전까지는 해당 변경 내용을 볼 수 없다.이때 트랜잭션 B는 트랜잭션 A가 변경하기 전의, 즉 과거 버전의 데이터를 읽게 되는데, 이것이 바로 MVCC(Multi-Version Concurrency Control) 에 의해 제공되는 기능이다. MVCC에 대해 자세히 알아보기 전에 간단한 개념 정리를 해보자.ACIDACID는 데이터의 일관성과 신뢰성을 보장하기 위한 4가지 성질이다.항목설명Atomicity (.. 2025. 3. 30. Java Client를 이용한 Elasticsearch 쿼리 Spring boot 에서 Java Client를 이용하여 Elasticsearch 쿼리를 작성해볼려고 한다. GPT에 물어봤는데도 이상한 답을 줘서 혼자 이것저것 해봤는데 이게 맞는 방법인지 잘 모르겠다. Elasticsearch 클러스터 구성은 다른 포스트에서 작성했으니 이미 클러스터가 있다는 가정하에 작성해 보겠다. 우선 의존성을 추가하자.implementation 'co.elastic.clients:elasticsearch-java:8.14.3'버전은 사용하고 있는 elasticsearch 버전에 맞춰 변경해야한다. Elasticsearch 8.0 버전 이상 부터는 java clinet의 사용이 권장된다. High level rest client 는 7.15 버전부터 deprecated로 지정되었.. 2025. 3. 29. STOMP 구독 해제 – @EventListener vs Heartbeat 발생한 문제특정 roomId 를 기준으로 접속한 클라이언트들은 해당 roomId를 경로로하여 STOMP로 구독중인 상황이다. 예를 들어 /room/1 과 같은 URL에 접속한 클라이언트는 roomId인 1을 기준으로 구독하여 새로운 메시지가 발행된다면 메시지를 전달받고 있다. 하지만 여기서 클라이언트가 웹 브라우저를 닫아버릴 경우 서버에 구독 해제 요청을 하지 않아 추적이 불가능했고 구독 요청이 계속 남아 리소스 누수 및 방 정보를 보여주는 room list 페이지에 현재인원이 정확히 반영이 안되는 데이터 불일치 문제가 발생했다. 클라이언트가 직접 페이지를 벗어나거나 네트워크 문제로 인해 연결이 끊어질 경우 서버에서 이를 자동으로 감지하고 구독을 해제하는 기능이 필요했다. 해결 과정구독 해제 처리를 위해.. 2025. 3. 19. 중복 생성 이슈와 분산락 발생한 문제클라이언트에서 새로운 방 생성 요청은 POST 요청을 통해 이루어진다. 방 생성 버튼을 빠르게 눌러 요청이 서버로 여러번 요청될 경우 방이 중복으로 생성되었고 방 리스트 페이지에서 아무도 없는 빈방이 생기는 문제가 생겼다. 그래서 클라이언트의 중복 요청을 막는 기능을 구현해야 했다. 우선 scale out 전 단일 서버 상황에서 해결한 방법과 scale out 후 해결방법에 대해 작성해보겠다. 단일서버우선 클라이언트 요청의 중복검사가 필요했다. 중복방지를 위해 할 수 있는 방법으로 다음과 같은 방법이 있었다.데이터베이스 유니크 키 활용요청에 UUID와 같은 유일값을 이용해 중복방지위 방법 중 요청에 UUID를 넣어 요청하는 방법을 선택했다. DB를 이용할 경우 유니크키 값이 중복될 경우 Dup.. 2025. 3. 18. 이전 1 2 3 4 5 다음