mysql

개요경매 글 목록을 불러오는 api의 구조를 개선하여 목표하는 성능까지 올려보는 과정을 기록하고자 해당 시리즈를 작성하기로 하였습니다. 본론에 앞서서 해당 프로젝트의 더미 데이터로 유저 약 100만, 기프티콘 개수 약 2천만, 경매 글 개수 약 100만 개를 생성해놓은 상태입니다. 문제 인식부하 테스트를 하기 전, postman으로 먼저 간단하게 응답 시간이 얼마나 걸리는지 테스트 해봤습니다. 응답 시간이 매우 느립니다.. 네 이건 뭐 부하테스트를 할 필요도 없이 먼저 해당 API의 문제를 살펴보는 것이 좋을 것 같다는 판단을 했습니다. 전체적인 로직을 파악해본 결과 문제는 아래 부분 정도로 정의했습니다. 1. 페이지네이션 오프셋 성능 저하 문제2. N + 1 문제3. queryDSL 에서 cross j..
· Dev/DB
(모든 설명은 MySQL 8.0 기준 입니다.) 트랜잭션이란? 트랜잭션은 하나의 논리적인 기능을 수행하기 위해 여러 개의 작업 셋을 하나로 묶은 작업의 단위다. 트랜잭션은 원자성, 일관성, 격리성, 지속성 4가지의 특징을 갖는다. (ACID) ACID 원자성 (Atomicity) 트랜잭션을 구성하는 작업 전체가 성공하거나 아니면 전체가 실패하는 것 둘 중 하나만을 보장한다는 특징이다. 트랜잭션을 구성하는 여러 쿼리 중 일부분만 성공하거나 일부분만 실패하면 데이터의 정합성에 문제가 생기게 된다. 예시를 보면서 이해해보자. 기능 : 은행 시스템의 송금 송금 기능의 순서 1. 계좌 잔액 테이블에서 송금자 A의 잔액을 차감한다. 2. 계좌 잔액 테이블에서 돈을 받는 B의 잔액을 추가한다. 3. 거래 내역 테이블..
· Dev/DB
이상현상이란? DB에서 이상현상이란 테이블 설계를 적절하게 하지 못한 경우 야기할 수 있는 문제들을 의미합니다. 관계형 데이터베이스는 릴레이션 간 관계를 설정함으로써 데이터의 무결성을 지키고 중복된 데이터들이 나오지 않도록 합니다. 하지만 어떤 서비스를 만들기 위해서 DB 설계 도중 잘못된 설계를 하여 이러한 부분이 깨지게 될 경우 3가지 정도 부분에서 문제가 일어나게 됩니다. 1. 데이터 삽입 시 문제가 발생하는 삽입 이상 (Insertion Anomaly) 2. 데이터 수정 시 문제가 발생하는 갱신 이상 (Update Anomaly) 3. 데이터 삭제 시 문제가 발생하는 삭제 이상 (Deletion Anomaly) 이제 차례대로 해당 이상현상들에 대해서 살펴보겠습니다. 우선, 이해를 빠르게 하기 위하..
· Dev/Test
문제 상황 재고가 감소되는 비즈니스 로직에 대해서 트랜잭션 처리를 해주고 비관적 락을 사용해 동시성 처리를 해주도록 해서 동시성을 제어하려고 로직을 짰다. 그리고 테스트를 통해 스레드풀을 생성해서 여러 스레드가 한번에 해당 트랜잭션에 접근하는 환경을 만들어 테스트를 하였다. 분명 Pessimistic Lock을 걸어서 해당 트랜잭션에 순차적으로 접근하도록 했다. 100개의 요청이 순차적으로 처리된다면 값은 0이 되어야 하는데 아래와 같이 순차적으로 처리가 되지 않았다. 어디선가 DB에 락이 제대로 걸리지 않았던가 트랜잭션 처리가 되지 않았거나 둘 중 하나의 문제인 것 같아서 어디가 문제인지 찾아보기로 했다. Pessimistic Lock 설정 위와 같이 쿼리와 함께 락 설정을 해주었다. 아래는 비즈니스 ..
풋데브
'mysql' 태그의 글 목록