-
Notifications
You must be signed in to change notification settings - Fork 3
오늘은 집가서 롤 해야지(할 수 있겠냐?) 회의 (2023‐08‐25)
Jiwon Choi edited this page Aug 30, 2023
·
1 revision
- select 및 insert Lock 관련 이슈
- 장바구니 추가 로직 동시성 이슈
- 주문 내역 조회 속도 이슈
- 상품을 주문하는 과정에서 그 상품 조회
- 하나가 죽으면 다 죽는다.
- 동기에서 비동기로 작업을 변경하면 해결할 수 있다.
- 작업마다 로그를 제대로 찍어서 어디서 이슈나는지 확인할 수 있게 만들어주자!
- 주문 시 결제 API 요청에 의해 병목이 너무 심함
- 상품 정보 및 상품 수량이 한 테이블에 있어 조회/수정이 한 테이블에 들어가게 되어 문제발생
결제 관련 처리, 상품 락도 처리가 필요함
단 한명을 위한 vip 서비스
결제 → 외부 api → 대처가 빡세야할 것 같다.
상품 조회 시나리오 제안
- 판매량 순 메인 노출 (인기 Best)
- 키워드 검색
성능 향상
- 상품 검색
- 판매량 순 정렬
- 주문내역 조회
- 상품 상세 조회
- 실시간 판매량으로 조회 (데이터 정합성 이슈)
- 일일 판매량으로 조회 (Stock 정합성 배치 돌릴 때 주문 상태를 바탕으로 기록 가능)
판매량 집계 방법에 대한 고민
배치 처리 할 때 판매량을 찾을 수 있다. → 그러나 판매량을 찾는 과정에서 예외가 터지면 트랜잭션이 롤백되어 배치 처리가 터져버리는 문제가 발생할 수 있다.
이에 대한 해결 방안을 찾아야하는데 현재 생각한 해결 방안은 다음과 같다.
-
비동기 처리 → 서버 성능 상 힘듦
-
트랜잭션 전파 (전파 속성 잘 걸어서 해결해보기)
-
로직 분리 (트랜잭션 서로 안섞이게 만들기) → try-catch 로 잡기
-
일일 판매량 순 조회는 기본이다.
insert into products(name , image_url , price, status , quantity ,created_at , updated_at ) values('test5' , 'test5' , 100000 , 'IN_STOCK' , 100, now(),now());
insert into product_sales(product_id , sale, sale_date , created_at , updated_at) values(4,50,'2023-08-24',now(),now())
insert into stocks(expiry_date , product_id , quantity, stock_type , created_at ,updated_at) values('2023-09-26',1,100,'NORMAL',now(),now())
select * from products p left join product_sales ps on p.id = ps.product_id
where p.id > 0
order by ps.sale desc;
product_sales에 product_id와 날짜에 유니크 걸어야된다. -> 중복 데이터 문제가 발생할 수 있음
- 스케줄러 비동기 처리
- 커서 기반 리팩토링
- 성능 측정하기
- 메모리 캐시 적용해보자!
- 상품 조회랑 쓰기 사이의 분리