slack3분 읽기

큐레이션 요약

슬랙이 알림 기능을 어떻게 다시 만들었나 📣

원문 읽기(새 탭에서 열림)

Slack은 알림이 많아서가 아니라 사용자가 알림 설정을 이해하고 통제하기 어려워서 “소음”을 느낀다고 진단했다. 이에 데스크톱과 모바일의 서로 다른 설정 체계를 하나의 모델로 통합하고, 활동 알림과 푸시 알림을 분리했다. 레거시 호환성과 롤백 가능성을 고려한 읽기 시점 마이그레이션, 자동 저장, 클라이언트 간 상태 동기화를 통해 더 예측 가능하고 차분한 알림 경험을 구축했다.

알림 소음의 근본 원인

  • Slack에서 알림 과부하는 고객 불만의 주요 원인이며, 고객 경험 관련 문의의 상위 3개 요인에 포함됐다.
  • 참여한 채널 수가 많을수록 사용자는 알림 동작을 더 혼란스럽고 압도적으로 느꼈다.
  • 문제는 단순히 알림의 양이 아니라, 여러 해에 걸쳐 누적된 레거시 아키텍처에도 있었다.
  • 데스크톱과 모바일이 서로 다른 선호도 모델을 사용했다.
    • 모바일의 nothing과 데스크톱의 Off가 같은 의미가 아니었다.
    • 설정을 바꿔도 실제 결과를 예측하기 어려웠다.
  • 알림 대상과 전달 방식이 강하게 결합되어 있었다.
    • 푸시 알림을 줄이면 인앱 활동 확인까지 포기해야 했다.
  • 클라이언트 간 설정 동기화가 불안정해 데스크톱과 모바일에서 서로 다른 알림이 발생하거나 설정을 반복해야 했다.
  • 고급 기능이 여러 메뉴에 흩어져 있어 파워 유저도 전체 설정 구조를 파악하기 어려웠다.

하나의 알림 모델로 통합

Slack은 UI만 개편하지 않고 알림의 동작 방식 자체를 재설계했다.

  • 채널 알림을 세 가지 선택지로 단순화했다.
    • 모든 새 게시물
    • 멘션
    • 음소거
  • 데스크톱과 모바일의 푸시 알림을 독립적인 켜기/끄기 옵션으로 통합했다.
  • 모바일에도 “모든 읽지 않은 항목 배지 표시” 같은 고급 제어 기능을 제공했다.
  • 데스크톱과 모바일의 전역 설정 구조와 문구를 일관되게 정비했다.
  • 단순화된 선호도 로직을 사용해 여러 클라이언트에서 동일한 상태를 유지하도록 개선했다.

선호도 데이터 마이그레이션

기존에는 데스크톱과 모바일 설정이 각각 알림 대상과 푸시 전달을 함께 결정했다.

기존
desktop: everything | mentions | nothing
mobile:  everything | mentions | nothing

새 모델에서는 활동과 푸시를 분리했다.

변경 후
desktop:             everything | mentions
desktop_push_enabled: true | false
mobile:              everything | mentions | nothing
  • 데스크톱의 desktop_push_enabled를 새로 도입해 푸시 알림만 별도로 제어했다.
  • 기존 사용자의 데이터베이스 값을 일괄적으로 직접 변경하지 않았다.
    • 잘못된 마이그레이션이나 롤백 문제를 피하기 위한 선택이다.
    • 새 설정을 기존 값에 기반해 백필했다.
  • 읽기 시점에 레거시 Off를 새로운 의미의 Mentions + 푸시 비활성화로 해석했다.
  • 사용자는 기존과 동일한 경험을 유지하면서도 새로운 분리형 알림 구조를 사용할 수 있었다.
  • 결과적으로 인앱 배지와 활동 알림은 계속 확인할 수 있고, 실제 방해가 되는 푸시만 별도로 끌 수 있게 됐다.

자동 저장과 “무엇을 받을지”와 “어떻게 받을지”의 분리

기존 알림 모달은 변경할 때마다 사용자가 Save 버튼을 눌러야 했다.

  • 저장을 잊으면 설정이 적용되지 않아 사용자가 알림 시스템이 고장 났다고 오해할 수 있었다.
  • 새 모달은 자동 저장을 적용해 변경 즉시 설정이 반영된다.
  • 알림 설정을 다음 두 축으로 분리했다.
    • 어떤 활동을 받을 것인가
    • 어떤 방식으로 전달받을 것인가
  • 예를 들어 모든 활동을 인앱에서 확인하되, 푸시는 멘션에 대해서만 받는 구성이 가능해졌다.
  • 데스크톱과 모바일 UI에는 재사용 가능한 React 컴포넌트를 활용해 일관성을 높였다.
  • 기존 모바일 전용 레거시 UI 코드도 대체해 플랫폼별 동작 차이를 줄였다.

크로스플랫폼 일관성

  • 프로젝트는 수백 개의 댓글이 달린 기술 논의와 제품·디자인·프론트엔드·백엔드·모바일 팀 간 조율을 필요로 했다.
  • 핵심 목표는 단순히 같은 화면을 만드는 것이 아니라, 어떤 클라이언트에서 설정해도 동일한 상태와 의미를 갖게 하는 것이었다.
  • 이 구조를 통해 사용자는 데스크톱에서 바꾼 설정이 모바일에서 다르게 동작하는 문제를 덜 겪게 됐다.

Slack의 접근 방식은 알림을 무조건 줄이는 대신, 활동 알림과 푸시 알림을 분리하고 설정 의미를 명확히 하는 데 초점을 둔다. 비슷한 시스템을 설계할 때도 레거시 값을 즉시 덮어쓰기보다 읽기 시점 호환성, 점진적 백필, 독립적인 설정 축, 자동 저장을 활용하는 것이 안전하고 사용자 혼란도 줄일 수 있다.

큐레이션 요약을 이어서 읽어보세요.