프로젝트(3)
-
예약 동시성 제어 과정
문제 상황이 글은 프로젝트에서 진행했던 예약 동시성 제어 과정에 대한 글이다. 문제 상황은 다음과 같다. 한 트레이너는 특정 시간에 하나의 예약만 받을 수 있다. 그러나 여러 회원이 동시에 요청을 보낼 때 2개 이상의 예약이 완료되는 문제가 발생했다. 즉, 동시성 제어가 필요한 상황이다. 예약 로직은 다음과 같다.트레이너 이메일과 예약 시간을 기준으로 예약 내역을 조회한다. (SELECT)조회된 예약이 없으면 새로운 예약을 생성하여 저장한다. (INSERT)해결 방법 1. 자바의 synchronized 키워드예약 로직 메서드에 synchronized 키워드를 붙이는 방법이다.@Service@Transactional@RequiredArgsConstructorpublic class ScheduleServic..
2024.08.20 -
반정규화를 통한 성능 향상
개요이 글은 프로젝트에서 진행했던 게시글 페이징 조회시 성능 향상 과정에 대한 글이다.문제 상황게시글 페이징 조회 시 게시글 데이터 뿐만 아니라 게시글의 좋아요, 댓글, 북마크 수까지 함께 반환해야 한다. 따라서 게시글과 연관된 좋아요, 댓글, 북마크 엔티티까지 함께 조회하면서 N+1 문제가 발생했다. 10만 건의 데이터 중 좋아요 수가 많은 100 건을 페이징 조회하는 테스트를 진행했다. 테스트 결과는 다음과 같다.6.7 TPSN+1 문제 발생좋아요 순 조회 시 게시글 테이블을 풀스캔해결 과정1. 페치 조인가장 대표적인 N+1 문제 해결 방안으로 페치 조인이 있다. 그러나 컬렉션 페치 조인은 주의할 점이 있다. 바로 페이징 처리가 offset, limit 등의 키워드를 통해 DB에서 이뤄지지 않고, ..
2024.05.21 -
프로젝트 중 SpringSecurity 필터 체인에서 발생한 예외를 처리한 방법
JwtException 예외 처리 방법SpringSecurity 필터 체인에 JWT를 검증하는 JwtAuthenticationFilter를 두었다. 그리고 JWT가 유효하지 않을 경우, JwtException이 발생한다.방법 1. JwtExceptionFilterJwtAuthenticationFilter 앞단에 JwtException을 처리하는 JwtExceptionFilter를 두었다. 따라서 JwtAuthenticationFilter에서 JwtException가 발생하면 예외가 JwtExceptionFilter로 넘어와서 이 곳에서 예외 응답을 한다.문제점그런데 이 방법에서 의도치 않은 문제가 발생했다. 인증이 필요하지 않은, 즉 JWT가 필요하지 않은 URL 요청의 경우 SpringSecurity의..
2024.01.23