![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/y7ww2/btsF3ngd8VQ/CDLPGKLo40bo5ZHfheScr1/img.png)
문제 상황 & 접근매우 느린 Github API를 사용해야 했으며 바로 데이터를 response 해야 함Github Repository의 기여자들의 기여도(커밋, addition, deletion)와 기여자 정보를 가져오는 API Github Repository -> Insights -> Contributors 탭에 브라우저를 통해 들어가면 매번 분석을 위해 어느정도 Delay 이후 정보를 확인할 수 있다. 사용하고자 하는 Github API가 해당 정보들을 가져오기 때문에 느린 것으로 예상된다. 문제가 생긴 Github API 의 특징맨 처음 호출시 202 상태코드 response 및 계산 시작계산이 끝나면 그 다음 호출시 데이터 반환하며 비동기 호출 방법을 제공하지 않음평균 7초 이상 소요되며 최대 ..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bbWo2U/btsF2GHimVy/6VmcEC2RnGQGZMIXlzxoM1/img.png)
문제 상황 & 접근DB 정렬 및 페이징 쿼리 기반으로 랭킹을 조회하는데 있어 성능이 좋지 못했다.가장 많이 호출되는 핵심 API 이자 호출 빈도 수가 가장 높은 중요한 기능이다.커서 페이징 방식으로 바꾸는 방법을 우선 고려했지만, 정렬 기준은 랭킹에 사용되는 포인트 값이었고 이 값을 통해 페이징을 수행해야 했다. 포인트 값은 계속해서 변화하기 때문에 적합하지 않을 것이라 판단했다.페이지 마다 랭킹들을 보여주면 되었기에 다음과 같은 경우가 있었다.[오프셋 기반 페이징 시 발생 가능한 상황] 이전 페이지에 있던 회원이 이후 페이지에 보여진다면 에러 상황이 아니다. 포인트가 바뀌어 랭킹이 바뀐 상황일 뿐이다.[커서 기반 페이징 시 발생 가능한 상황] 실제 그룹의 전체 회원의 수와 다른 수의 회원이 랭킹에 보여..
요구 사항 그룹 랭킹과 그룹 별 회원 랭킹을 보여줘야 한다. 회원 랭킹은 각 회원의 GitHub 기여도(커밋, 이슈, pr, 코드리뷰) 개수를 모두 더한 값을 포인트로 하여 랭킹을 매긴다. 각 기여도는 각 다른 GitHub API를 통해 조회하여 저장한다. 그룹 랭킹은 그룹 내에 속한 회원들의 포인트(GitHub 기여도)를 모두 더한 총합을 토대로 랭킹을 매긴다 문제 상황 동시에 여러 번 호출할 경우 DB 데이터가 중복 저장되는 현상 빈번히 발생 특히, 그룹의 포인트 갱신 시 동시성 이슈 발생 한 번의 요청에 종류가 다른 4가지 멤버의 기여도를 가져와 하나의 같은 테이블을 업데이트, 다른 한 테이블에는 insert DB Lock 적용DB Lock을 통해 데이터..