[프로젝트] 댓글 조회시 N+1 문제 해결, 성능 비교
·
project
상품/ 레퍼런스 댓글 관련 기능을 구현하기 위해 Jpa 연관관계 설정과 조회 로직을 구성하였다.그러나 실제로 API를 호출해본 결과, 단순 조회임에도 불구하고 예상보다 많은 수의 쿼리가 발생하는 것을 확인할 수 있었으며,사용자의 데이터 양이 증가할수록 쿼리 수가 급격히 늘어나 성능 저하로 이어지는 구조임을 확인할 수 있었다. N+1 문제란?-> 연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 갯수 만큼 연관관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오는 현상 기존 코드 방식public List getComments(Long userId, CommentableType type, Long commentableId) { // 1. 부모 댓글 목록 조회 (쿼리 1회) L..
[프로젝트] 주식 체결 알림 기능 추가 - 2
·
project
SSE 구독 상태란?클라이언트가 서버에 요청을 보내고, 서버는 클라이언트와 지속적인 연결을 유지하는데 이 상태를 구독 상태라고 한다. 클라이언트는 HTTP 요청을 보내고, 서버는 그 요청을 통해 실시간으로 데이터를 푸시한다. 작동 방식1. 클라이언트가 SSE 엔드포인트에 요청을 보낸다.2. 서버는 요청에 대한 응답을 지속적으로 유지하면서 데이터를 스트리밍 한다.3. 데이터는 HTTP 의 Content-Type: text/event - stream 포맷으로 전송된다.4. 클라이언트는 연결이 유지된 상태에서 서버가 전송하는 데이터를 실시간으로 수신한다.  서버가 데이터를 푸시하기 위해서는 클라이언트와의 연결이 끊어지지 않아야 한다.   @Service@RequiredArgsConstructorpublic c..
[프로젝트] 주식 체결 알람 기능 추가 - 1
·
project
로그인 한 유저 기준account 로 넘어가기 전 order 상태의 매수 & 매도 주문이 후에 체결되었을 경우, 사용자에게 매도 & 매수 알람 전송알람 타입 enum 으로 관리웹소켓과 폴링만 알고있었는데,  찾아보니 SSE 방식을 통해 구현하는 것이 좋을 것 같았다. 찾아보면서 정리한 내용이다.    웹 소켓과 SSE 방식 차이 알아보기 SSE 방식이란? SSE (Server-Sent Events)SSE는 서버에서 클라이언트로 일방향 데이터를 지속적으로 전송하며, 클라이언트는 HTTP 요청을 통해 서버와 연결을 맺고, 연결되어있는 동안 단방향으로 클라이언트에게 데이터를 전송한다.    SSE는 서버쪽에서 클라이언트로 실시간으로 데이터를 보내준다.동작 방식이 웹 소켓에 비해 단순하다.1. 클라이언트가 서버..