N + 1문제 문제 상황 문제가 발생하는 상품 목록 조회 API는 아래와 같은 상품들을 12개 씩 조회하는 API입니다. 문제점은 JPA 지연로딩으로 인해 상품에 걸려있는 입찰과 좋아요의 쿼리가 상품의 개수만큼 날아갑니다. 즉 상품이 12개라면 1( 상품들을 조회하기 위한 쿼리 ) + 12(상품 별 입찰 목록) + 12(상품 별 좋아요 목록) 총 25개의 쿼리가 날아가게 됩니다. 좋아요와 입찰 모두 1 대 N 관계이기 때문에 fetch join을 쓴다면 페이징 처리로 인해 OOM문제가 발생합니다. 해결책 1(Batch Size - in Query) Batch Size를 조정하여 조회한 상품 별로 입찰과 좋아요를 조회하는 것이 아닌 12개의 상품에 대한 좋아요와 입찰을 한 번에 가져옵니다. 즉, 1(상품 ..
문제 정의 1대1 채팅을 구현할 때 읽음 처리를 진행하기 위해서 고려해야 할 부분은 다음과 같습니다. 상대방이 채팅방에 들어왔을 때 -> 읽지 않은 메시지 읽음 처리 상대방이 채팅방에 접속중일 때 -> 보낸 메시지 즉각 읽음처리 상대방이 채팅방에 들어왔을 때 저는 웹소켓을 STOMP기반으로 사용하고 있어 Header의 COMMAND에서 CONNECT메시지 구분이 가능했습니다. 이를 이용해 CONNECT시 모든 채팅을 읽음 처리했으며, 화면 단의 변경을 위해 웹소켓으로 Update요청을 보내 처리했습니다. 상대방이 채팅방에 접속중일 때 기존 해결책 제가 처음에 선택했던 방식은 아래 흐름과 같습니다. 문제점 상대방이 접속해 있는것을 확인하기 위해서는 매번 리콜 처리해야 하며 이 때 DB Update또한 발생..
🍪문제 상황조회수 중복 증가 제어와 Refresh Token관리를 위해 쿠키를 도입했는데 쿠키가 서버로 전달이 안되는 문제를 접했습니다.처음에는 Local쪽에서 통신이 안되는 문제였으며 CORS와 withCredentials설정으로 인한 문제였습니다.다음으로는 서버로 배포 후 테스트 해봤는데 samesite에 의해 쿠키 전달이 안되는 문제였습니다.다들 쿠키를 손에 넣어봅시다.🍪CORS와 withCredentialsCORS저는 3000번 포트에 React 8080포트에 Spring을 띄워둔 상태였습니다. 포트가 다르기 때문에 CORS설정을 해주어야 했습니다.public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/..