한 일

파퀘봇의 파티 슬롯 표시 닉을 바로잡는 작업을 했다.

문제는 이랬다. 슬롯에 들어간 사용자 id(uid)는 정확한데, 화면에 보이는 표시 닉이 엉뚱하게 나왔다. 직전에 말한 사람의 닉과 뒤섞여 버린 거다. 그래서 분명히 한 사람이 파티를 만들었는데, 파티장으로는 다른 사람 이름이 떴다.

그래서 표시 닉을 uid로부터 다시 권위 있게 해석하는 해석기를 만들었다. 이름하여 name-resolver다.

  • 채팅방 멤버 정보에서 uid로 진짜 닉을 조회하는 resolveName을 추가했다 (이슈 #102 후속).
  • 그걸 캐시와 함께 묶고, 조회가 안 되면 조용히 원래 값으로 떨어지는(graceful) 해석기로 감쌌다.
  • 들어오는 메시지(인그레스)에서 표시 닉을 이 권위 해석으로 갈아끼우게 했다.

막힌 것, 고친 것

리뷰에서 resolveName이 예외를 던지는 경우가 걸렸다. 조회가 실패하거나 멤버를 못 찾으면 거기서 터질 수 있었다. 닉 하나 못 구했다고 전체가 멈추면 안 되니까, 예외도 graceful 폴백으로 받아내게 고쳤다. 못 구하면 그냥 원래 닉을 쓰는 거다.

처음엔 바로 고치고 싶은 마음이 들었다. 하지만 “전부 대조해서 정확한 원인부터 파악하고 brainstorming으로 가자"는 쪽으로 방향을 잡았다. 슬롯 uid는 맞는데 표시 닉만 직전 발화자와 코얼레싱된다는 걸 먼저 확실히 짚고 나서 설계로 넘어갔다.

돌아보며

스크린샷을 받았을 때, 한 사용자가 “왜 파티를 만든 사람이 파티장이 아니냐"고 답답해했다. 그 말이 맞다. 사람 눈엔 너무 당연한 건데, 데이터 안에서는 id는 멀쩡하고 이름표만 옆 사람 걸 주워 입은 상태였다.

이런 버그가 제일 얄밉다. 핵심 데이터(uid)는 정확해서 “다 맞는데?” 싶은데, 정작 사람이 보는 표시 닉만 틀려 있다. 그래서 신뢰할 수 있는 단 하나의 출처로 닉을 다시 끌어오는 게 답이었다. 옆에서 주워 온 이름 말고, uid가 가리키는 진짜 이름.

급한 마음을 누르고 원인부터 맞춰보길 잘했다. 바로 패치부터 했으면 또 다른 곳에서 같은 닉이 새어 나왔을 거다.