프로젝트에서 사용하는 기술 스택/라이브러리와, 선정 이유를 적어주세요.
이외에도 기술적인 방향을 잡기 위한 질문을 정리해오시면 가장 좋습니다!
<aside> 👉🏻 현재까지 진행 상황 : 단순 Index를 도입했을 때, 대분류와 소분류를 인덱싱했을 때는 검색 결과가 빨라지는 것을 확인 했으나, 필터링 없이 책 제목 만 인덱싱하고 검색 했을 때는 Like 검색을 했기 때문에 index를 타지 않아 빨라지지 않았다. 필터링 이용 시 시간을 줄이는 것도 중요하지만, 단순 검색시간도 빨라야 하기에 Match로 쿼리를 바꿔 풀텍스트 인덱싱을 시도하려고 한다.
필터는 다중 컬럼 인덱스를 고려하고 있다. 필터가 많고, 다중 컬럼 인덱스는 순서가 중요하기 때문에 다양한 케이스를 테스트 하면서 좀 더 고민해봐야 한다.
%Like, %Like% 가 인덱스를 타지 않는 이유 : 인덱스를 설정하면 값을 기준으로 정렬되어 저장되는데 %가 키워드 앞에 붙어있으면 정렬된 위치를 알 수 없기 때문에 인덱스를 타지 못한다. 같은 이유로 Like%는 인덱스를 탈 수 있다.
</aside>
<aside> 👉🏻 시나리오 : 현재 재고량 보다 순간적으로 많은 주문이 들어온 경우 주문 누락이나 과주문이 있어선 안된다.
재고가 한정적인 상황에서 동시에 재고보다 많은 사람들이 주문을 하는 경우, 주문 누락이나 과주문이 없도록 한다.
현재 단일 서버, mysql 사용
만약 분산 시스템을 고려 하게 된다면
중요 포인트: ElasticSearch 사용 시 분산 시스템으로 변해서 Redis 분산락을 사용해야한다고 생각을 했으나, 검색시에만 ElasticSearch를 사용하고 책 주문을 위해서 detail 페이지로 들어오면 분산되지않은 RDB로 바로 요청을 보내면 되기 떄문에 굳이 사용할 필요가 없는 것 같다. 따라서 아래 2-1만 적용해도 현재 프로젝트에서는 충분한 것 같다.
>공부가 더 필요한 것 같다.
2-1 : JPA에서 annotation으로 비관적/낙관적 락 사용하기
2-2 : Redis 분산락 적용해보기
</aside>
<aside> 👉🏻 목표 : 하루가 지날 때 마다 전날 판매량을 계산하여 top8개의 책을 선정한다.
1)사용 기술과 이유
**1-1 : Redis : (key:value = bookID:판매량) 으로 저장하여 그날 판매량이 올라갈 때 마다 빠르게 수정할 수 있는 장점을 활용한다.**
**1-2 : RDS : 주문 table을 생성하여 그날 주문들에 대한 정보를 분석하여 판매량 순위를 매긴다. 데이터 손실의 위험이 적다. 누적 데이터 관리가 쉽다.**
**1-3 : SpringBatch : 밤에 일괄적으로 그날의 주문 데이터를 저장하고, 주문량 top8 책을 선정하여, 랭킹을 따로 저장한다.**
목표 : 하루가 지날 때 마다 전날 판매량을 계산하여 top8개의 책을 선정한다.
1)사용 기술과 이유
**1-1 : Redis : (key:value = bookID:판매량) 으로 저장하여 그날 판매량이 올라갈 때 마다 빠르게 수정할 수 있는 장점을 활용한다.**
**1-2 : RDS : 주문 table을 생성하여 그날 주문들에 대한 정보를 분석하여 판매량 순위를 매긴다. 데이터 손실의 위험이 적다. 누적 데이터 관리가 쉽다.**
**1-3 : SpringBatch : 밤에 일괄적으로 그날의 주문 데이터를 저장하고, 주문량 top8 책을 선정하여, 랭킹을 따로 저장한다.**
</aside>