-
Notifications
You must be signed in to change notification settings - Fork 2
3주차 릴리즈 노트
fru1tworld edited this page Jan 22, 2025
·
9 revisions
- Load-Balancer 서버를 구현하였습니다.
- 2 주차에 WebSocket 서버와 API서버를 분리한 것에 이어서
- 3 주차에는 WebSocket 서버를 Redis로 연결 상태를 관리하고 Load-Balancer 서버를 도입해서 최적의 서버를 찾을 수 있게 구현하였습니다.
다음과 같은 로직에 의해 수행됩니다.
- WebSocket 서버는 10초 간격으로 서버의 CPU 자원을 Redis에 업데이트 합니다. (ZSet)
- Load-Balacner 서버는 연결된 커넥션을 Redis에서 조회를 해보고 연결된 커넥션이 없다면 CPU 사용량이 가장 낮은 서버의 주소를 반환합니다.
- WebSocket서버는 커넥션이 연결되면 Redis에 연결 상태를 업데이트합니다.
- 이후 동일한 방에 접속하려는 사용자는 해당 WebSocket 서버로 접속합니다.
- 상위 Tree에서 하위 Tree를 삭제하려는 경우 각 노드는 웹소켓 커넥션으로 연결된 클라이언트가 있을 수 있습니다.
- 이때 웹소켓 연결이 모두 종료거나 새로운 노드를 생성하려고 했을 때 노드가 생성/저장되는 오류가 있었는데 이 부분은 WebSocket 서버의 로직을 수정하여 해결하였습니다.
- 수정 사항: 저장하기 전에 데이터가 존재하는지 확인합니다.
만약 API 서버에서 하위 트리를 삭제하려고 했을 때 커넥션이 연결된 경우 삭제를 방지하거나 연결을 끊는 로직을 고민하고 있습니다. 이 부분은 정책에 따라 결정될 수 있습니다.
기존에 CollaborativeService는 SpaceService와 NoteService를 의존하고 있었습니다.
이는 기존에 API 서버와 WebSocket 서버가 하나로 운영되고 있엇을 때 발생했던 문제인데요.
CollaborativeService에서 Space모듈과 Note모듈의 의존을 끊어내고
CollaborativeService를 CollaborativeSpaceService, CollaborativeNoteService로 분리하였습니다.
모듈 간 의존도를 낮추고 코드 로직을 간결화했습니다.