가끔 소켓이 에러가 나는 경우가 있다

서버에 클라이언트가 보낸 데이터를 제대로 저장하지 못했을 때…도 있을 거고

클라이언트의 네트워크 문제 등으로 원치 않는 동작이 일어날 수도 있다

이럴 때 사용자에게 ui적으로 에러가 발생했음을 알려주면 좋을 것 같다는 생각이 들었다

그러니까 소켓 에러는 크게 두 종류로 나누어 볼 수 있다

  1. 연결에는 문제가 없지만 오가는 데이터 형식 등에 문제가 있어 요청을 정상적으로 처리할 수 없는 상황
  2. 연결 자체에 문제가 생겨 재연결이 필요한 상황

우리는 마인드맵의 노드를 조작할 때 소켓으로 정보를 보내도록 설정해 두었다

이때 에러가 날 경우 사용자의 액션 중 하나가 반영이 되지 않고, 그 경우 클라이언트 상태도 업데이트 되지 않게 만들어뒀기 때문에 사용자 입장에서는 당황스러울 수도 있다

하지만 그 이후 조작이 막히는 건 아니기 때문에, 이 경우는 캔버스 우측 상단에 작게 toast ui를 띄워 주기로 했다

에러가 발생했을 경우 서버에서는 어떻게 클라이언트에게 해당 사실을 알려주고 있을까?

→ error라는 이름의 이벤트를 부른다

이 error는 http error와는 달리 error라는 이름의 ‘이벤트’기 때문에 일반적인 try-catch로 잡아서 처리할 수는 없다

try-catch는 동기적으로 발생하는 예외를 처리하기 위해서 사용되는 것인데, error는 비동기적으로 들어오는 이벤트기 때문이다

즉 생성된 socket 객체에 error라는 이벤트에 대한 핸들러를 등록해 두고, 콜백으로 에러에 대한 처리를 해 주어야 한다는 것이다