Skip to content

3주차 릴리즈 노트

fru1tworld edited this page Jan 22, 2025 · 9 revisions

BE

Load-Balancer 서버 구현

  • Load-Balancer 서버를 구현하였습니다.
  • 2 주차에 WebSocket 서버와 API서버를 분리한 것에 이어서
  • 3 주차에는 WebSocket 서버를 Redis로 연결 상태를 관리하고 Load-Balancer 서버를 도입해서 최적의 서버를 찾을 수 있게 구현하였습니다.

다음과 같은 로직에 의해 수행됩니다.

  1. WebSocket 서버는 10초 간격으로 서버의 CPU 자원을 Redis에 업데이트 합니다. (ZSet)
  2. Load-Balacner 서버는 연결된 커넥션을 Redis에서 조회를 해보고 연결된 커넥션이 없다면 CPU 사용량이 가장 낮은 서버의 주소를 반환합니다.
  3. WebSocket서버는 커넥션이 연결되면 Redis에 연결 상태를 업데이트합니다.
  4. 이후 동일한 방에 접속하려는 사용자는 해당 WebSocket 서버로 접속합니다.

그 외 사소한 버그가 해결되었습니다.

  • 상위 Tree에서 하위 Tree를 삭제하려는 경우 각 노드는 웹소켓 커넥션으로 연결된 클라이언트가 있을 수 있습니다.
  • 이때 웹소켓 연결이 모두 종료거나 새로운 노드를 생성하려고 했을 때 노드가 생성/저장되는 오류가 있었는데 이 부분은 WebSocket 서버의 로직을 수정하여 해결하였습니다.
  • 수정 사항: 저장하기 전에 데이터가 존재하는지 확인합니다.

만약 API 서버에서 하위 트리를 삭제하려고 했을 때 커넥션이 연결된 경우 삭제를 방지하거나 연결을 끊는 로직을 고민하고 있습니다. 이 부분은 정책에 따라 결정될 수 있습니다.

WebSocket 서버 구조 변경

기존에 CollaborativeService는 SpaceService와 NoteService를 의존하고 있었습니다.

이는 기존에 API 서버와 WebSocket 서버가 하나로 운영되고 있엇을 때 발생했던 문제인데요.

CollaborativeService에서 Space모듈과 Note모듈의 의존을 끊어내고

CollaborativeService를 CollaborativeSpaceService, CollaborativeNoteService로 분리하였습니다.

모듈 간 의존도를 낮추고 코드 로직을 간결화했습니다.

Clone this wiki locally