1. 문제 상황 파악프로젝트에 STOMP를 통해 1:1 채팅 기능을 구현함페이지네이션 적용해 무한 스크롤까지 구현된 상황 채팅 전송위의 그림과 같은 순서를 가지며 매번 채팅을 전송할 때마다 DB에 접근함채팅 조회⇒ 다수의 사람이 채팅을 전송 및 조회할 때 모든 요청이 DB에 접근하게 된다면 과부하가 발생하거나 성능이 저하될 것이라고 판단해 성능 개선하려고 함 2. 해결 방법 및 현재 상황에 적용일반적인 방법 혹은 채팅 아키텍처가 아니지만 프로젝트 진행 도중 조금이라도 성능 개선할 수 없을까하는 생각에 도입함 2-1. 캐싱(caching)자주 사용되는 데이터를 임시 저장소 ( = 캐시, cache)에 저장해 동일한 요청이 들어왔을 때 더 빠른 응답이 가능하게 하는 기술캐시일반적으로 메모리에 위치함 (대표적..
Trouble Shooting
1. 문제 상황 파악프론트엔드에서 무한 스크롤 기능을 추가함에 따라 백엔드에서 채팅 조회 시 페이지네이션을 적용함약 1000~2000개의 채팅 추가 후 확인 시 조금씩 느려짐을 확인함 데이터가 많아지면 느려지는 문제를 확인해보기 위해 아래의 과정대로 1,000,000개의 데이터를 삽입하고 테스트를 진행함1. 채팅 메시지 테이블에 1,000,000개의 샘플 데이터를 삽입2. 가장 마지막 20개의 채팅 조회⇒ 백만개의 데이터 (생성일 기준 내림차순) 중 가장 마지막에 해당하는 20개를 조회할 때 2.08초가 소요됨3. 그렇다면 데이터가 1억, 10억개 ... 등 더 많이 존재한다면 조회 시간이 기하급수적으로 늘어날 것이라고 판단해 성능 개선하려고 함 2. 문제 원인 파악2-1. 기존의 페이지네이션 기법off..
1. 문제 상황 파악쿠폰 보유 회원 목록 조회 시 CouponMember 테이블에서 특정 쿠폰 id에 해당하는 객체를 가져오는 메서드 호출함// CouponAdminService.java 의 findCouponMembers() 메서드 내부Page couponMembers = couponMemberRepository.findByCouponId(pageRequest, couponId);// CouponMemberRepository.javaPage findByCouponId(Pageable pageable, Long couponId);의도한 바는 쿠폰id를 비교해서 가져오는 쿼리 한 번 발생하는 것임⇒ 그러나 의도한 쿼리 이외에 쿼리가 3개 더 생성되었음! 추가적으로 발생한 3개의 쿼리는 쿠폰을 보유한 회원을..
1. 문제 상황 파악컨트롤러 단위 테스트 코드 작성 (@WebMvcTest 사용)시 아래와 같은 에러 발생// 에러가 발생한 테스트 코드@WebMvcTest(CartController.class)@AutoConfigureMockMvc(addFilters = false) // 필터 제외 (JWT 검증 제외)@TestMethodOrder(MethodOrderer.OrderAnnotation.class)@DisplayName("장바구니 컨트롤러 단위 테스트")class CartControllerTest { @Autowired private MockMvc mockMvc; @MockBean private CartService cartService; @Autowired private..