Index 4

[쇼핑몰 프로젝트 - 리팩토링] Spring Batch를 활용한 생일 쿠폰 발급 성능 약 94% 개선

0. 개요쇼핑몰 프로젝트 당시 구현하지 못했던 생일 쿠폰 발급 요구사항을 Spring Batch로 구현했지만,개발 후 회원 규모를 확장해 가며 테스트한 결과 처리 속도가 매우 느렸다. 요구 사항은 다음과 같다. 이 글은 Spring Batch 기반 생일 쿠폰 발급 배치의 속도 개선 과정을 정리한 글이다.1. 문제 발생(1) 문제 발견회원 더미 데이터를 점차 늘려가며 배치 테스트를 하던 중, 처리 시간이 급격히 늘고 SQL 쿼리문이 굉장히 많이 발생하는 문제가 발생했다. 테스트 조건은 아래와 같다.전체 회원: 120만 명이번 달 생일자: 10만 명Chunk Size: 1000 * 더미 데이터 생성더보기(1) 프로시저DELIMITER $$DROP PROCEDURE IF EXISTS seed_members_b..

[쇼핑몰 프로젝트 - 리팩토링] 상품 목록 조회 최적화: N+1 해결 & 인덱스로 31% 개선

0. 개요기존 쇼핑몰 프로젝트의 카테고리별 도서 조회에서 N+1 문제와 조회 속도가 느리다는 문제점이 있었다.리팩토링을 통해 N+1 문제를 해결하고, 인덱스를 통해 조회 속도를 개선했다.이 글은 그 과정을 정리한 글이다.1. 기존 구조의 문제점먼저 프론트를 보면, 해당 페이지에서 필요한 데이터는 bookId, title, price, salePrice, amount 5개다. 하지만 백엔드는 아래 메서드로 엔티티(Page) 자체를 반환했다. 이러한 문제 때문에 N+1 문제가 발생했다.한 번의 리스트 쿼리로 books_categories를 가져온 뒤, 행마다 Book을 개별 조회했다.Book.publisher가 EAGER라 출판사까지 매번 조인됐다.20개의 책을 가져오는데, 결과적으로 요청 1번에 쿼리 23..

[Relational database] 06. SQL ***

Chapter 1: SQL 개요SQL 개요SQL 구성Chapter 2: DDL - Data Definition LanguageDDL: Data Definition LanguageSQL에서 DDL 구문테이블 생성, 수정, 삭제 DDL문실습: 테이블 생성 (MYSQL)Chapter 3: DML - Data Manipulation Language, SQL 질의 기본 구조SQL 질의 형식SELECT 절SELECT 명령 내의 수식과 문자열FROM절WHERE절Chapter 4: 집합 연산UNIONINTERSECTEXCEPTChapter 5: 서브 쿼리서브 쿼리 개요포함된 서브쿼리(Nested subquery)인라인 뷰(Inline view)스칼라 서브쿼리(Scalar subquery)상호 연관 서브쿼리(Correl..

DB 2024.10.04

[Relational database] 04. 파일 조직과 인덱스

Chapter 1: 비용 모델과 파일 조직법비용 모델 개요파일 조직법 비교 기준 연산힙 파일정렬 파일해시 파일파일 조직 선택Chapter 2: 인덱스인덱스 개요클러스터드 인덱스(Clustered Index)넌 클러스터드 인덱스(Non-Clustered Index)밀집 인덱스(Dense Index)와 희소 인덱스(Sparse Index)기본 인덱스(Primary Index)와 보조 인덱스(Secondary Index)복합 키 인덱스실습: 인덱스 생성(MySQL)Chapter 1: 비용 모델과 파일 조직법 DB는 Query가 요청될 때 여러 실행 계획을 세우고 비교하여 최적화된 방법으로 query를 실행한다.(Query Optimizer) 그 중 가장 많이 쓰이는 방법이 Cost Model이고, 파일 조직은..

DB 2024.10.03