개요JPA를 사용한 프로젝트를 진행하다보면, DB 조회 시 연관 관계에 있는 하위 엔티티들을 한꺼번에 가져오지 않고, 각각의 하위 엔티티를 개별적으로 조회하면서 불필요한 추가 쿼리가 발생하는 문제인 N+1 문제가 자주 발생합니다. 이러한 N + 1 문제를 해결하는 방법에는 @EntityGraph, @BatchSize , Fetch Join등 여러가지가 있습니다. 그런데 왜 많은 개발자들이 여러가지 방법 중 Fetch Join을 사용하는지에 대해서 정리하고자 합니다. 왜 Fetch Join인가❓1. 즉시 로딩과 명시적 제어Fetch Join은 JPQL 쿼리에서 명시적으로 사용되기 때문에, 어떤 연관 데이터를 즉시 로딩할지 명확하게 정의할 수 있습니다. 이는 @EntityGraph나 @BatchSize와 ..
TIL,일일 회고
수열이란❓먼저 수열을 하나 살펴보겠습니다. 1, 2, 3, @, 5, ...가 있다고 해보겠습니다. 여기서 @에 들어갈 숫자는 4라는 것을 유추할 수 있습니다. 숫자만 나열 되어있을 뿐인데, 어떻게 @가 4라는 것을 알 수 있을까요?1,2,3,4,5는 "다음 숫자가 1씩 늘어난다." 라는 특정한 규칙을 가지고 있기 때문입니다. 이처럼 특정한 규칙을 가진 "수"의 나"열"을 수열이하고 하는 것입니다. 등차 수열이란❓등차수열은 인접한 수의 차이가 같은 수의 나열입니다. 이때 두 항의 차이는 이 수열의 모든 항에 대해서 공통적으로 나타나는 차이이므로 공차(common difference)라고 부릅니다. 첫항이 1이고, 공차가 2인 등차수열첫항이 4이고 공차가 3인 등차수열 등차 수열의 공식등차수열(Ari..
개요 [트러블 슈팅] 게시판 좋아요 동시성 문제 해결문제 상황게시판의 좋아요 기능 구현을 하고 있었습니다. 게시판 좋아요 기능의 로직은 다음과 같습니다.@Transactional public LikeResponseDto toggleLike(UUID postId, Long userId) { Post post = postService.getPostById(pospixx.tistory.com 프로젝트는 종료되었지만, 해당 포스팅에서 다룬 좋아요 동시성 문제를 다시 테스트하려고 합니다. 이전 시나리오에서는 100명의 사용자가 동시에 좋아요 요청을 보냈지만, 이번에는 더 높은 트래픽 상황을 가정하고 테스트를 진행하려고 합니다. 테스트 코드 수정@SpringBootTest(classes = PostApplicati..
개요다양한 경험을 통해 실력을 높이고 싶은 인턴 디자이너들과 저렴한 가격으로 디자인을 받고 싶은 고객들을 연결해주는 예약 사이트인 GlowGrow 프로젝트에서 결제 후 정산 시스템을 도입했습니다. GlowGrow 프로젝트에서는 프로모션을 통해 다양한 할인 혜택을 제공합니다. 서비스 제공자인 디자이너가 자신의 서비스에 대해 쿠폰을 발급할 수 있을 뿐만 아니라, GlowGrow 운영 측에서도 직접 쿠폰을 발행하여 고객에게 제공할 수 있습니다. 고민 사항프로모션 서비스의 쿠폰에는 2가지 종류가 있는데, 운영 측(Glowgrow)에서 제공하는 쿠폰과 서비스 제공자(PROVIDER)가 제공하는 쿠폰이 있습니다. 이에 따라 쿠폰의 종류에 따라 정산 방식도 달라져야 한다고 판단했습니다. 운영 측에서 제공한 쿠폰을 사..