본문 바로가기

전체 글

(390)
지오해시(GeoHash)란? 지오해시(GeoHash)지오해시는 위도(Latitude)와 경도(Longitude)라는 2차원의 좌표 데이터를 1차원의 문자열(또는 숫자)로 변환하는 기술입니다.전 세계 지도를 격자(Grid)로 나눕니다. 그리고 그 격자에 고유한 이름을 붙이는 방식입니다. 특징문자열의 길이가 길수록 더 좁은 범위를 나타냅니다(더 정밀함).앞부분이 같은 문자열로 시작하면, 지리적으로 서로 가까운 위치에 있을 확률이 높습니다.DB 인덱스 스캔에 최적화된 이유입니다.🤔 그렇다면 지오해시는 어떻게 만들어질까요?지오해시는 Z-Order Curve(Morton Order) 알고리즘을 기반으로 합니다. 과정을 설명하면 다음과 같습니다. 1. 범위 나누기 경도(-180° ~ 180°)를 절반으로 나눕니다. 위치가 왼쪽(-180° ~..
[DB] 인덱스 느린 검색의 원인 - 풀 테이블 스캔 (Full Table Scan)인덱스가 없는 테이블에서 특정 데이터를 찾는 과정은, 비유하자면 100만 페이지짜리 거대한 책에서 특정 단어 하나를 찾기 위해, 책의 첫 페이지부터 마지막 페이지까지 한 장 한 장 넘겨보는 것과 같습니다. 예를 들어, 인프런의 데이터베이스에는 '강의 목록 ' 컬럼이 존재하고 이 컬럼에 '김영한의 실전 데이터베이스 강의 ' 이라는 값이 어디에 있는지 알 수 있는 아무런 힌트가 없습니다. 그래서 데이터베이스는 가장 무식하고 정직한 방법을 선택한다고 합니다. 그것은 바로 테이블 전체를 디스크에서 메모리로 읽어들인 후, 첫 번째 행부터 마지막 100만 번째 행까지 하나씩 차례대로 '강의 목록 ' 컬럼의 값을 비교하는 것 입니다. 이러한 작업..
[프로젝트 이슈] API 호출량 제한 들어가기 전이번 프로젝트에서는 사용자의 위치를 기반으로 주변 스터디룸을 탐색하는 기능을 제공했습니다. 처음에는 사용자가 조회할 때마다 외부 API를 호출하여 실시간 데이터를 가져오는 방식으로 구현했지만, 곧 예상되는 문제가 존재했습니다. 사용자가 늘어날수록 API 호출 횟수가 기하급수적으로 증가하면서 비용이 커질 것이고, 특히 카카오 API의 호출 제한 때문에 안정적으로 데이터를 가져오기 어려운 상황도 발생할 수 있다고 생각했습니다. 이를 해결하기 위해 지난 번 지오해시(GeoHash)를 활용한 캐싱 전략을 도입했었습니다. 각 스터디룸 데이터에 지오해시 값을 포함해 저장하고, 사용자가 특정 위치를 조회할 때는 해당 지점이 속한 격자와 인근 8개 격자를 함께 조회하도록 설계했습니다. 이후, 매번 외부 AP..