hgbong / blogsearch

blog search sample project
0 stars 0 forks source link

todo list #4

Open hgbong opened 1 year ago

hgbong commented 1 year ago

major

동시 검색 시 query insert / update ( thread safety ) 조회 시 query DB 작업 성능 고려 ( + 키워드 저장 실패해도 조회 지장 없도록. ) webClient block -> subscribe readme 작성 Executable jar 정렬 validation 이벤트 / AOP 처리 고려 (블로그 검색과 검색어저장 연관성 고민)

minor

Naver API 연동 에러코드 기반 에러처리 swagger 설정 sample 데이터 설정 API ( 추가 구현할 경우 readme 에 추가 )

hgbong commented 1 year ago

done


동시 검색 시 query insert / update ( thread safety ) 조회 시 query DB 작업 성능 고려 ( + 키워드 저장 실패해도 조회 지장 없도록. ) readme 작성 Executable jar 정렬 validation swagger 설정

hgbong commented 1 year ago

fixme list


  1. 검색어 저장 실패 시 검색횟수 날아가는 이슈

    • 원인 : 검색어 DB 저장 작업이 비동기로 이루어질 때, 해당 검색어 삭제 로직은 메인 쓰레드(스케줄러 쓰레드) 에서 실행됨
    • 해결 방안 : exceptionally -> handle() 변경 후, 성공했을 때만 위의 remove 호출 (실패한 경우에는 retry 필요)
    • 수정 위치 : queryCountMap.remove(entry.getKey())
  2. 검색어 횟수 저장 동시성 이슈

    • 원인 : 멀티 쓰레드에서 JPA findById, save 등을 동시에 호출하면서 동시성 이슈 발생
    • e.g. th1에서 findById 결과 Optional.empty 반환받았으나, 검색어 DB 저장 전에 동일한 검색어로 th2에서 커밋한 경우
    • 해결 방안 : JPA lock 적용하기 (중요도가 낮고 / 롤백이 쉬움 / 연계서비스 없음 -> optimistic lock 적합)
    • 수정 위치 : QueryService.addQueryCount
  3. 블로그 검색 API 호출 시 블로킹 부분 수정

    • 원인 : webClient block() 메소드 호출로 인한 sync blocking 대기
    • 해결 방안 : block() 메소드 호출 X , Mono으로 리턴 / 그에 따른 메소드 시그니처, 예외 타입 등 변경
    • 수정 위치 : webClient. ... .block()
hgbong commented 1 year ago

1번 수정사항 PR : https://github.com/hgbong/blogsearch/pull/12