커리큘럼
home
React
home

매칭 상대 조회 시 시간이 오래 걸리는 문제 (1)

문제 발생
매칭 상대를 조건에 맞게 필터링해서 가져올 때 시간이 10초 이상으로 오래 걸리는 문제가 발생
원인
매칭 필터링 조건 중 상대와 나의 거리 조건( ~ km 이내)이 있습니다. 이때 DB에 저장된 유저 수에 비례해서 거리 계산을 해야하는데 이 부분에서 유저의 위치정보를 불러와서 함수로 일일이 계산하다보니 오래 걸렸던 것이었습니다.
거리계산 함수
각 매칭 후보자의 거리 계산
매칭 상대 조회 시 걸린 시간 (11.8 초)
해결 방법
SQL 쿼리 내에서 두 좌표 간의 거리 계산을 해주는 쿼리문이 있다는 걸 알게 되었고 적용
조회를 하면서 동시에 거리계산을 하니까 필터링이 된 채로 조회가 되어 속도가 상당히 빨라짐
조회한 후 거리 계산:
[서버에서 DB로 조회 요청 → DB에서 데이터 조회 후 반환 → 거리 계산] : 이 과정을 N번 반복
SQL 쿼리로 계산을 한 결과에 따라 조회:
[서버에서 DB로 조회 요청 → DB에서 병렬로 거리 계산 후 조건에 맞는 결과만 조회/반환]
빨라진 이유 요약
서버에서 DB로의 요청 회수 N회에서 1회로 감소 ⇒ 서버와 DB 간의 데이터 전송 회수 감소
DB에서 필터링이 되어 필요한 데이터만 서버로 전송 ⇒ 서버와 DB 간의 데이터 전송량 감소
병렬 처리 ⇒ SQL 쿼리를 통해 거리 계산을 수행하면, DB 엔진이 이를 내부적으로 병렬로 처리
메모리 최적화 ⇒ DB는 자체 메모리 관리와 캐싱 메커니즘을 통해 동일한 계산이나 쿼리 요청이 반복될 경우 우수한 성능
전용 함수의 최적화 ⇒ DB에서 제공하는 함수(예: ST_Distance, Haversine 공식을 이용한 함수 등)는 해당 연산에 대해 최적화된 알고리즘을 사용하므로, 일반적인 프로그램 코드에서 구현하는 것보다 훨씬 빠르고 정확하게 계산을 수행가능
매칭 상대 조회 시 걸린 시간 (0.551 초)