-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
Description
✒ Description
1. 현 문제점
KEY WORD: 요양 보호사가 어르신 추천을 받을 때 마다, 모든 요양보호사와 모든 어르신 간의 점수 계산으로 매칭 리스트를 산출
위의 로직은 다음과 같은 이유로 불필요 합니다.
-
- 추천 리스트는 DB 값 변동이 없는 한 정적인 데이터인데, 매번 새로 계산하여 불필요한 자원 낭비가 심합니다.
-
- 리스트 출력에 불필요한 시간이 가중되어 소모됩니다.
2. 부하테스트 테스트
다음은 현재 요양보호사의 추천 어르신 리스트 조회 API에 대한 부하 테스트 결과 입니다.
테스트는 다음과 같이 진행하였습니다.
동접자 500명, 부하 3분 지속
요양 보호사: 1000명, '어르신': 1000명, 각 회원의 구인 혹은 구직 조건 동일
보시다시피, 8초 대에 에러가 50초 이상으로 치달으면서 연산이 API 응답 반환에 실패하고 있음을 볼 수 있습니다.
3. 해결 방안
- 1️⃣ 이벤트 드리븐 아키텍처 반영

위와 같이, 요양보호사의 구직 조건 변경 내역이 생길 때만 새롭게 모든 어르신에 대해 매칭 점수 계산이 이루어지도록 구현하겠습니다.
위와 같이 update 와 점수 계산, db 저장을 이벤트로 나누어 구현하여, 트랜잭션 롤백에 따른 보상 트랜잭션 구현, 트랜잭션 최적화 등으로 서비스의 관심사 분리 및 가독성 향상 또한 목표하겠습니다.
위와 같이 구현하면 사용자가 자신의 추천 어르신 리스트를 조회 하는 것은 밑의 사진과 같이 단순 SELECT 문임으로, 속도 향상에 더 도움이 되리라 생각됩니다.
- 2️⃣ 비동기 스케줄러 도입
위의 과정들을 전부 동기 스케줄러로 구현할 경우, 매칭 점수 계산 시간마다, 모든 API의 RPT에 영향을 줄 것입니다. 따라서, 비동기 스케줄러로 위의 과정 모두 백그라운드 스케줄러를 활용해 계산할 수 있도록 하겠습니다.
✅ Todo
- Score Domain 생성
- Score Scheduler 구현
- RC,JC 변경시 Score upsert 로직 구현
- Score upsert 시 soft-delete 안되는 Bug 수정
- ScoreCalculateService 메서드 분할 및 주석달기 리팩토링
📚 Etc
Reactions are currently unavailable



