JPA

· JPA
0. 이 글을 쓰게 된 이유 팀 프로젝트에서 "모임"과 관련된 기능들을 구현하는 역할을 맡아서 개발을 진행 중이었다. 구현해 둔 로직들을 다시 살펴보다가 생각지도 못했던 동시성 문제가 숨어있었다. 동시성 문제를 해결하면서 공부한 내용들과 과정을 포스팅해보고자 한다. 1. 요구사항과 해결방법 1-1. "모임 가입 요청"의 요구사항 모임이 존재하고, 모임은 제한된 인원만 참여할 수 있다. 이미 다 찬 모임에 가입하려는 경우 사용자에게 가입할 수 없음을 알린다. 이미 가입되어 있는 경우 가입 요청을 거부한다. 남은 자리에 여러 명이 동시에 가입 요청하는 경우, 가능한 요청만큼만 받아들일 수 있어야 한다. 1-2. 문제점 현재 로직으로는 동시에 여러 가입 요청이 오는 경우에 동시성 이슈가 발생한다. 1-3. 원..
· JPA
N + 1 문제가 어떻게 발생하고 이를 해결하기 위해서 JOIN이 아닌 Fetch JOIN을 사용하는 이유를 코드 레벨에서 살펴보자. JOIN 먼저 모든 테스트를 수행하기 전에 Member와 Team이 N : 1 양방향 관계를 맺고 Member가 두 명씩 들어가 있는 팀을 3개 만들 것이다. // 모든 테스트 수행 전에 단 한 번만 수행한다. @Transactional @BeforeAll void beforeAll() { for(int i = 0; i < 3; i++) { Member member1 = Member.builder().name("tester" + i).grade(Grade.VIP).build(); Member member2 = Member.builder().name("tester" + (i..
@xftg77g
'JPA' 카테고리의 글 목록 (2 Page)