SQL 튜닝을 통한 API 성능 최적화 (2편)
·
프로젝트
SQL 튜닝을 통한 API 성능 최적화 (1편)현재 댕글 데이터베이스에는 데이터가 약 1,000개 이하로 적은 양이기 때문에 비효율적으로 작성된 쿼리로도 원하는 데이터를 빠른 속도로 가져올 수 있습니다. 하지만 서비스가 성장하면서 데hyodeng.tistory.com 대기 진료 견적서 상세 조회 (GET)테스트 환경 : Local MySQL 8.0 / Local 애플리케이션 서버 / 100만 개 데이터 기준문제 상황사용자가 진료 견적서에 대한 상세 데이터를 조회하기 위해서는 care_estimates 테이블에 들어있는 vet_id, pet_id 등의 id 를 통해 각 vets, pets 에 해당하는 다른 테이블의 정보를 가져와야 했습니다. 기존 구현에서는 세 개의 개별 쿼리를 순차적으로 실행하여 데이터를..
미용사 및 병원 검색 API의 N+1 문제 해결
·
트러블슈팅
댕글 서비스에서는 사용자가 미용사와 병원을 검색할 수 있는 API를 제공하고 있습니다. 이 API는 세 가지 주요 검색 조건을 지원합니다.주소 address 기반 검색미용사/병원 이름 name 기반 검색뱃지 badge (#대형견, #중형견, #노견 등) 기반 검색데이터베이스 구조문제를 이해하기 위해 먼저 관련 테이블의 구조를 살펴보겠습니다. 미용사 테이블 groomers 은 뱃지 테이블 grooming_badges 과 자격증 테이블 groomer_business_licenses 과 1:N 관계를 가지고 있습니다.@Entity@Table(name = "groomers")public class GroomerJpaEntity { // ... 기본 필드 생략 ... @ElementCollection ..
SQL 튜닝을 통한 API 성능 최적화 (1편)
·
프로젝트
현재 댕글 데이터베이스에는 데이터가 약 1,000개 이하로 적은 양이기 때문에 비효율적으로 작성된 쿼리로도 원하는 데이터를 빠른 속도로 가져올 수 있습니다. 하지만 서비스가 성장하면서 데이터 양이 100만 개 혹은 그 이상으로 늘어난다면, 초기에 예상했던 것보다 현저히 느린 조회 속도로 사용자 경험을 저하시키게 되고, 이는 사용자 이탈까지 이어질 수 있습니다. 이러한 문제를 미연에 방지하기 위해, 인프라 확장이나 캐싱 시스템 도입과 같은 복잡한 해결책을 적용하기 전에, 가장 기본적이면서도 효과적인 방법인 SQL 튜닝을 시도해보았습니다. 성능 개선 효과를 검증하기 위해 100만 개의 더미 데이터를 데이터베이스에 삽입한 후, 서비스의 주요 기능 중 하나인 “일반 진료 대기 견적서 반려동물 정보 반환 API”..
정규화 (Normalization)
·
데이터베이스
데이터베이스 내의 데이터 구조를 조직화하고 최적화하는 과정으로 정규화를 하는 목적은 데이터 중복을 제거하고, 효율성을 향상시키며, 데이터 무결성을 보장하기 위함이다.즉, 테이블 간에 중복된 데이터를 허용하지 않게 함으로써 무결성(Integrity)을 유지할 수 있으며, 데이터베이스의 저장 용량 역시 줄일 수 있다.정규화 목적데이터의 중복을 없애면서 불필요한 데이터를 최소화시킨다.무결성을 지키고, 이상 현상을 방지한다.테이블 구성을 논리적이고 직관적으로 할 수 있다.데이터베이스 구조 확장에 용이해진다.정규화 장점데이터베이스 변경 시 이상 현상(Anomaly)을 제거할 수 있다.정규화된 데이터베이스 구조에서는 새로운 데이터 형의 추가로 인한 확장 시, 그 구조를 변경하지 않아도되거나 일부만 변경해도 된다.데..
트랜잭션 (Transaction)
·
MySQL
데이터를 저장할 때 단순히 파일에 저장해도 되지만, 데이터베이스에 저장하는 이유는 무엇일까 ? 가장 대표적인 이유는 데이터베이스는 트랜잭션이라는 개념을 지원하기 때문이다.트랜잭션을 이름 그대로 번역하면 거래이다. 즉, 트랜잭션은 하나의 거래를 안전하게 처리하도록 보장해주는 것을 뜻한다. 즉, 데이터베이스의 상태를 바꾸기 위해 수행되는 작업의 최소 단위를 의미한다. 모든 작업이 성공해서 데이터베이스에 정상 반영하는 것을 커밋(Commit)이라 하고, 작업 중 하나라도 실패해서 거래 이전으로 되돌리는 것을 롤백(Rollback)이라 한다.트랜잭션 ACID트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질원자성 (Atomic)트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공 하거나 모두..