echo1241 / echo

0 stars 0 forks source link

[TroubleShooting] 채팅 핸들러 내 기능 통합으로 인한 Side Effect #104

Closed Berithx closed 1 month ago

Berithx commented 1 month ago

1. 첫 번째 Side Effect

Berithx commented 1 month ago

문제 원인

  1. DM 기능 개발 간 DM은 Text 도메인에 종속적인 기능으로 판단하여 같은 핸들러를 공유하고 DM과 채팅 구분하는 기준을 채널 ID로 한 상태에서 DM이 연결되었을 때 채널ID가 null로 들어오는 이슈가 있어 url 파싱에 오류가 있었기에 해당 값이 없으면 null로 처리하게끔 적용
  2. 이후 채널의 입장인원을 증감시키고 추가 입장을 막는 코드를 1. 에서 사용하는 핸들러에서 호출하고, 다른 동작보다 선행되도록 적용
  3. 이후 DM 기능으로 접근할 때 1. 에서 적용된 코드와 2. 의 코드가 만났을 때 채널 ID가 null로 전달되어 다음 동작에서 예외가 발생하는 것으로 DM을 위한 Socket이 연결되지 않음
    1. 의 문제를 해결하기 위해 2. 에서 적용된 채널 입장인원을 증감시키는 코드의 체인을 분리함
  4. 그 결과 입장 인원을 증가시키는 코드는 소켓 연결 시 동작, 감소시키는 코드는 doFinally에 의해 무조건 동작으로 수행됨
  5. 여기서 추가 문제, 채널의 정원이 찼을 때 추가 입장을 시도하면 소켓 연결이 안됐기에 증가 코드는 미동작, 하지만 doFinally는 동작하여 채널에 입장하지 못한 상태로 해당 채널의 현재 인원을 감소시키는 문제가 발생 image
Berithx commented 1 month ago

image

Berithx commented 1 month ago

image