[ 첫 번째 대안 - SSE ]

- 장점:
- 비동기 처리: 문제 풀이가 끝난 직후 바로 사용자에게 응답을 반환할 수 있어, 점수 계산이 완료되길 기다리지 않아도 됩니다.
- 확장성: User Server와 Problem Server가 명확히 분리되어 있고, Kafka를 통해 다른 서비스도 이 이벤트에 반응할 수 있습니다
- 프론트엔드에서 GET 요청만 하기에 그에 알맞음.
- 단점:
- 실시간 피드백 지연: 점수 업데이트와 레벨업 피드백이 비동기로 처리되기 때문에, 사용자에게 결과가 지연될 수 있습니다.
[ 두 번째 대안 - WebSocket ]
.png)
- 장점:
- 비동기 처리: 문제 풀이가 끝난 직후 바로 사용자에게 응답을 반환할 수 있어, 점수 계산이 완료되길 기다리지 않아도 됩니다.
- 확장성: User Server와 Problem Server가 명확히 분리되어 있고, Kafka를 통해 다른 서비스도 이 이벤트에 반응할 수 있습니다.
- 단점:
- 실시간 피드백 지연: 점수 업데이트와 레벨업 피드백이 비동기로 처리되기 때문에, 사용자에게 결과가 지연될 수 있습니다.
[ 세 번째 대안 ]
.png)
- 장점:
- 간단한 로직: 문제 풀이와 점수 계산이 한 번에 처리되므로 복잡도가 낮습니다.
- 실시간 성장 여부 판단: 문제 풀이 결과로 캐릭터가 성장했는 지를 알 수 있습니다.
- 단점:
- 성능 이슈: User Server가 문제 풀이 때마다 호출되므로, 만약 User Server의 부하가 증가하거나 응답 시간이 길어지면 전체적인 성능이 떨어질 수 있습니다.
- 서비스 결합도 증가: Problem Server가 User Server에 의존하게 되어, 두 서비스 간 결합도가 높아집니다.