본문 바로가기

분류 전체보기26

[JPA] JPA의 N+1 의 문제 원인과 해결 방안 그리고 테스트 1.  JPA에서 N+1 문제란?JPA를 사용하다보면 @OneToMany 또는 @ManyToMany 관계가 설명 되어 있는 경우가 있다.이때 관계의 Fetch 전략을 LAZY로 설정 하는 경우에 부모 엔티티를 조회할 때 자식 엔티티는 즉시 로드되지 않으며, 자식 엔티티 접근 시 추가 쿼리가 실행되는 문제가 발생한다. 즉, 특정 엔티티(1)를 조회할때 관련된 엔티티(N)를 추가 조회하는 비효율적인 쿼리가 실행되는 문제를 의미한다.예를 들어, N+1에서 "N"은 부모 엔티티의 개수를 의미한다 라고 생각하면 된다.부모 엔티티의 ID가 [1,2,3,4,5] 5개 가 있고 각각 자식들이 있을때findAll() 메서드를 실행하면 부모 엔티티 5개를 가져오는 쿼리를 1회 실행하고이후 각각 부모들의 ID를 가지고 자식.. 2025. 1. 7.
[데이터베이스] MySql InnoDB의 버퍼 풀(Buffer Pool)과 언두로그(Undo log) MySQL의 InnoDB는 내부 구조와 프로세스가 매우 복잡해 우선 MVCC를 이해하기 위해 버퍼 풀과 언두로그에 대한 간단한 정리이다.  버퍼 풀(Buffer Pool)버퍼 풀은 MySQL InnoDB 스토리지 엔진에서 성능을 최적화하기 위해 사용하는 메모리 영역으로. 디스크 I/O를 최소화하고, 데이터와 인덱스에 빠르게 접근할 수 있도록 설계되어 InnoDB 스토리지 엔진의 가장 핵심적인 부분이다. 이런 특징 때문에 데이터베이스에서 자주 읽고 쓰는 데이터를 메모리에 캐싱하여 디스크 접근 시간을 줄이고 성능을 향상시킬 수 있다.  * 주요 기능데이터 및 인덱스 캐싱:자주 사용되는 데이터 페이지와 인덱스를 메모리에 저장해 디스크 I/O를 줄이고 빠른 데이터 접근을 가능하게 한다.쓰기 지연(Write Bu.. 2024. 12. 20.
[데이터베이스] MySql 스토리지 엔진 InnoDB의 MVCC란? 스토리지 엔진은 MySQL이 데이터를 물리적으로 저장하고, 읽고, 관리하는 방식을 결정하는 모듈로데이터 저장, 트랜잭션 지원, 잠금(Lock), 인덱스관리 등을 지원하는 역할을 한다. InnoDBInnoDB는 MySQL에서 기본으로 제공되는 스토리지 엔진으로, MySQL 5.5부터 기본 스토리지 엔진으로 설정되었고, MySQL 8.0에서도 이를 유지하고 있다. MySql 8.0에서 InnoDB의 주요 특징으로는 트랜잭션 지원, MVCC(Multi-Version Concurrency Control), 외래 키(Foreign Key) 지원, 클러스터링된 인덱스 등 여러가지가 있지만, 이 중 MVCC에 대해 알아본다. InnoDB의 주요 구성요소InnoDB의 주요 구성요소에는테이블스페이스(Tablespace).. 2024. 12. 10.
[데이터베이스] DBMS 를 활용한 동시성제어 - DBMS 락 1. DBMS 락(Lock) 이란?"트랜잭션 간의 데이터 접근을 제어해 데이터 무결성과 일관성을 보장하는 동시성 제어 메커니즘" - 핵심 역할여러 트랜잭션 간의 충돌 방지.트랜잭션 간에 발생할 수 있는 Dirty Read, Non-Repeatable Read, Phantom Read와 같은 문제 방지.Deadlock(교착 상태) 관리: DBMS는 교착 상태 발생 시 특정 트랜잭션을 강제로 롤백하여 문제를 해결.- ACIDDBMS 락의 기본 목적은 동시성 제어뿐 아니라 ACID 속성을 보장하기 위해 사용된다.Atomicity (원자성): 트랜잭션이 완전히 수행되거나 전혀 수행되지 않아야 함.Consistency (일관성): 트랜잭션이 성공적으로 완료되면 데이터가 일관된 상태를 유지해야 함.Isolation.. 2024. 12. 9.
Spring Batch Quartz(쿼츠) 로 배치 스케줄링 하기 - Spring Quartz(쿼츠)란?스프링 배치 쿼츠는 스프링 배치와 쿼츠(Quartz)를 결합하여 스케줄링된 작업을 관리하고 실행하는 방식이다.스프링 배치는 데이터 처리 및 대용량 작업을 처리하기 위한 프레임워크이고, 쿼츠는 자바 기반의 스케줄링 프레임워크이다.이 두 가지를 결합하면 특정 시간에 스프링 배치 작업(Job)을 실행하도록 스케줄링할 수 있다. 스프링 배치 자체는 데이터 처리의 배치 작업을 담당하지만, 작업 실행 시점을 정하는 기능은 기본 제공하지 않는데이를 보완하기 위해, 쿼츠를 사용하여 특정 시간에 배치 작업을 실행할 수 있다. - 쿼츠와 스케줄링의 차이쿼츠와 스케줄링은 유사한 개념으로 보이지만, 세부적으로는 다음과 같은 차이가 있다.쿼츠(Quartz):자바에서 사용할 수 있는 강력한 .. 2024. 10. 7.