도움말
룸 열기
제품 이야기

조용히 달리는 댓글을 시끄럽게 만들기

스레드 알림을 다시 만들면서 한 선택들 — 읽음을 둘로 가른 이유, 그리고 알림이 늦던 진짜 원인을 적었어요.

안녕하세요? Eddy입니다. 이번에는 댓글 이야기를 하려고 해요.

채팅에는 묘한 사각지대가 하나 있어요. 본문 대화는 안 읽은 숫자가 크게 붙으니까 놓칠 수가 없죠. 그런데 어제 쓴 메시지에 오늘 달린 댓글은요? 본문 흐름은 이미 지나갔고, 방에 들어와도 화면은 최신 대화를 보여주고 있고, 댓글은 그 위 어딘가에서 조용히 달려 있어요. “확인 완료했습니다”라는 중요한 한 줄이 며칠 동안 발견되지 않는 일, 저희도 겪었습니다.

이번 버전에서 이 사각지대를 없앴어요. 만들면서 한 선택들을 적어볼게요.

읽음을 둘로 갈랐어요

처음엔 단순하게 갈 수도 있었어요. “방을 읽으면 댓글도 읽은 걸로 치자.” 구현은 쉽죠. 그런데 그건 거짓말이에요 — 방을 훑어봤다고 해서 접혀 있는 스레드 속 새 댓글을 본 게 아니니까요. 읽지 않은 것을 읽었다고 표시하는 순간, 알림은 신뢰를 잃어요.

그래서 본문 읽음과 댓글 읽음을 별도의 축으로 만들었어요. 방을 다 읽어도 새 댓글이 남아 있으면 그 메시지의 댓글 표시에 빨간 점과 new 배지가 남아요. 스레드를 열어 실제로 확인해야 지워져요. 방 목록에도 같은 원칙이 적용돼요 — 안 읽은 숫자가 0이어도 새 댓글이 남은 방에는 숫자 대신 빨간 점이 붙어요. 점 하나로 “본문은 끝났지만 볼 게 남았다”를 말하는 거예요.

새 댓글이 화면 밖에 있으면 위나 아래에 [새로운 스레드] 버튼이 떠요. 처음 만든 버전에는 배지에 빙글 도는 테두리 애니메이션도 있었는데, 하루 써 보고 뺐어요. 시선을 끄는 것과 시선을 괴롭히는 건 다르더라고요. 지금은 가만히 있는 배지가 할 일을 다 합니다.

누구에게 보여줄 것인가 — 여기는 정색하고요

알림 하나를 새로 만들 때마다 저희가 가장 오래 들여다보는 건 사실 “언제 보여줄까”가 아니라 **“누구에게 보여줄까”**예요.

전에는 스레드 알림이 부모 메시지 작성자와 그 스레드에 참여한 사람에게만 갔어요. 이번에 “그 방에서 그 댓글을 볼 수 있는 모든 멤버”로 넓혔는데, 넓히는 쪽이 항상 위험한 방향이에요. 그래서 수신자를 계산할 때 메시지 가시성 판정을 한 사람 한 사람에게 통과시켜요. 멘션·귓속말·내부대화처럼 대상이 정해진 대화의 댓글은 그 대상에게만 점이 붙어요. 볼 수 없는 대화의 알림이 새어 나가는 일은, 점 하나라도 없어야 하니까요.

알림이 “가끔만” 늦던 이유

배포 당일, 실제 사용 중에 이상한 제보를 받았어요. 새 댓글 버튼이 안 뜨다가 한참 뒤에야 뜬다는 거예요. 그런데 로그를 아무리 봐도 오류가 없어요. 알림은 만들어졌고, 저장도 됐고, 서버는 멀쩡했어요.

원인은 구조에 있었어요. 룸 서버는 얼마 전부터 두 개의 일꾼이 나란히 손님을 받아요(한쪽이 재시작해도 끊기지 않게 하려고요). 그런데 실시간 알림을 쏘는 코드가 “지금 접속한 사람들” 명단을 자기 일꾼의 명단에서만 찾고 있었어요. 상대가 다른 일꾼 쪽에 접속해 있으면 — 대략 절반의 확률로 — 알림이 그냥 허공으로 사라진 거죠. 오류가 아니라 유실이라 로그에 아무 흔적이 없었고, 나중에 방을 다시 열 때 저장된 알림을 읽어 오면서 “한참 뒤에” 나타난 거예요.

고치는 것 자체는 오래 걸리지 않았어요 — 명단을 자기 쪽이 아니라 전체에서 찾도록 바꾸면 돼요. 오래 걸린 건 확신이었어요. 같은 무늬의 코드가 더 있을 수 있어서, 지금 한 곳씩 훑으며 점검하고 있습니다. “가끔만 안 된다”는 버그가 제일 무서워요. 항상 안 되면 금방 찾는데, 가끔만 안 되면 다들 기분 탓인 줄 알거든요.

입력창 이야기도 잠깐

같은 버전에서 채팅 입력창을 한 박스로 정리했어요. 입력줄과 도구 모음이 따로 떠 있던 걸 위아래로 묶고, [전송]을 도구 모음 오른쪽 끝으로 옮겼어요. 기능은 하나도 빠지지 않았어요 — 자리만 정돈됐어요. 버튼 위치가 바뀌면 처음 며칠은 손이 헤매는 걸 알아요. 그래도 입력하는 곳과 꾸미는 곳이 한 덩어리로 보이는 쪽이, 새로 오신 분들에게 훨씬 덜 헷갈리더라고요.

아직 남은 것

솔직하게 적을게요. 댓글 점과 배지는 업데이트 이후에 달리는 댓글부터 세요. 과거의 안 읽은 댓글을 소급해서 표시하지는 않아요 — 옛 기록을 뒤져 “당신이 안 읽은 것”을 추정하는 건 틀릴 가능성이 커서, 틀린 알림을 만드느니 새 댓글부터 정확한 쪽을 골랐어요. 그리고 위에서 말한 “같은 무늬” 점검은 계속 진행 중이에요.

사용법은 댓글과 스레드로 대화 정리하기에 화면과 함께 정리해 뒀고, 이번 버전의 전체 변경은 업데이트 노트에 있어요.

다음에 누군가의 메시지에 답을 달 때, 그 답이 상대를 제때 찾아갈 거라는 걸 이제 조금 더 자신 있게 말할 수 있어요. 쓰시다가 이상한 점이 보이면 dev@finhive.kr로 알려 주세요 — “가끔만 이상해요”가 제일 반가운 제보입니다.