Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[#4]대기열 시스템 성능 및 구조 개선 #4

Open
wants to merge 5 commits into
base: main
Choose a base branch
from

Conversation

chanakoh
Copy link
Collaborator

@chanakoh chanakoh commented Nov 7, 2024

대기열 시스템 리팩토링 검토 사항

이번 리팩토링에서는 현재 대기열 서비스의 성능 및 구조 개선을 위해 다음 항목에 대한 검토를 진행하였습니다. 기존 구조에 대한 재검토를 통해, 필요에 따라 더 간결하고 효율적인 시스템으로 변경하고자 합니다.

1. ZSet 자료구조 사용 유지 검토

  • 배경: ZSet은 현재 대기열에서 순위 기반의 처리를 위해 사용 중이나, 현재 하나의 키에 모든 사용자의 밸류값이 들어가 있습니다. 또한, ZSet의 특성상 데이터량이 많아질수록 정렬 오버헤드가 발생하여 성능 저하의 가능성이 존재합니다.
  • 검토 내용: ZSet을 계속 사용할지, 아니면 단순 FIFO 방식의 List 구조로 변경하여 성능을 최적화할지를 검토 및 개선할 예정입니다.

2. SSE 사용 필요성 검토

  • 배경: 현재 대기열 상태 업데이트를 실시간으로 전송하기 위해 SSE(Server-Sent Events)를 사용 중입니다. 그러나 접속하는 사용자별로 연결을 유지해야 하므로, 다수의 서버와의 연결 상태 유지로 인해 성능 문제를 초래할 수 있습니다.
  • 검토 내용: SSE를 계속 유지할지, 아니면 다른 통신 방식(예: 폴링)으로 전환하여 리소스 사용을 최적화할지 검토 및 개선할 예정입니다.

3. 스케줄러 사용 위험성 검토

  • 배경: 현재 스케줄러에 대한 별도 설정이 없어, 추후 다중 서버 환경으로 변경 시 ScheduledExecutorService가 중복 실행되며, 동일한 작업이 여러 서버에서 중복 처리되는 문제와 Redis 호출 부담이 우려됩니다.
  • 검토 내용: 현재 스케줄러 구현이 멀티 서버 환경에서 중복 작업을 방지하도록 보완할 수 있는지, 혹은 다른 방식으로 대체할 수 있는지를 검토 및 개선할 예정입니다.

이번 PR에서는 위의 검토 사항을 바탕으로 대기열 시스템의 핵심 기능을 간소화하고, 리소스 사용을 최소화하는 방향으로 리팩토링을 진행하고자 합니다.


// 사용자 대기열 진입 처리
public String handleUserEntry(String userToken) {
if (userToken == null || userToken.isEmpty()) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

isEmpty?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants