본문 바로가기

전체 글26

인덱스와 버퍼 풀 인덱스에 관해서 정리하다보면 문득 인덱스도 결국 디스크상에 존재하는 것이고 브랜치 노드를 탐색하는 과정에서 계속 Disk I/O가 있으며 탐색 과정은 루트 노드에서 탐색 과정을 진행 할 때 마다 Disk I/O로 접근해서 다음 노드의 주소를 가져와야 하기 때문에 인덱스 스캔도 생각보다 비효율적일지 않을까?라는 의문에서 생각을 정리하고 이해한 내용을 바탕으로 정리했다. 개발에서 사용하게 될 인덱스는 거의 B-Tree (Balanced Tree) 구조이므로 물론 B+Tree 인덱스도 사용된다고 하지만 편의상 B-Tree 인덱스로 확인하려고 하며 데이터베이스는 MySQL기준으로 확인하였다. B-Tree 인덱스의 구조 (RealMySQL 8.0 그림 8.4) 그림에서 나오는 개념을 간략히 정리하면. 페이지란 디.. 2024. 1. 25.
False Sharing 설명 단어를 그대로 보면 '거짓 공유' 이다. 거짓을 공유한다는 것은 말이 웃기다. 컴퓨터에서 False는 논리 연산의 결과에 사용되며 조건이 맞지 않다는 의미로 사용된다. 그럼 어떤 조건에 맞는 것을 누구한테 공유하는 것일까를 생각해보면 해당 개념을 더 쉽게 이해할 수 있다. 우선 여기서 조건에 맞지 않음은 데이터가 조건에 맞지 않음을 의미하며, 공유의 대상은 주로 LLC (Last Level Cache)이다. 물론 L2, L3 까지 캐시를 사용하는 CPU이면 L2에서도 발생할 수 있다. 즉 마지막 대상 캐시만 발생하는 것은 아니다. 더 풀어서 데이터가 조건에 맞지 않음은 캐시 일관성이 맞지 않음을 의미한다. CPU는 메모리에서 데이터를 가져올 때 캐시라인 단위로 데이터를 가져온다. 캐시라인은 캐시 메.. 2024. 1. 22.
301 vs 302 redirect 요청에대한 응답으로 redirect를 시켜야 할 경우 301 혹은 302 status code를 사용하게 된다. 기존에 둘의 차이가 단지 301은 영구적 이동, 302는 임시적 이동 이라는 개념으로만 알고 있었고 실제로 redirect를 응답으로 주어야 하는 경우에 어떤 것을 주어야 할지 감이오지 않아서 정리하게 되었다. 하지만 결과적으로 리다이렉트 되는 것은 동일한데 둘은 어떤 차이가 있을까 궁금했다. 10.3.2 301 Moved Permanently The requested resource has been assigned a new permanent URI and any future references to this resource SHOULD use one of the returned URIs. .. 2022. 2. 19.
QueryDSL 도입기 필요성에 관해서 Spring Data JPA를 사용하다보면 테이블을 생성해주고, 쿼리도 자동으로 생성해주기 때문에 매우 편리하지만 유연하게 데이터를 가져오는 것이 힘듭니다. 예를들어 날짜별로 그룹핑 후에 해당 그룹의 로우의 갯수를 찾는 쿼리를 날리려고 할 때, GROUP BY라는 것이 존재하지 않기 때문에 Spring Data JPA 안에서 @Query 어노테이션을 사용해서 직접 쿼리를 만들어주고, 응답받는 데이터를 매핑 해주어야합니다.(혹은 GROUP BY를 사용하지 않고, 데이터를 불러와서, 자바 코드 내부에서 리스트를 가공해서 처리 해주는 경우도 있다고 합니다.) 또한, 입장한 사람들의 날짜를 가공해서, 월별로 조회를 해서 통계를 내고 싶은경우를 예를 들면 SELECT DATE(v.check_in,.. 2021. 11. 9.