본문에서는 파비콘에 시각적 뱃지를 추가하는 update_favicon 커스텀 Turbo Stream 액션의 구현 과정을 단계별로 설명합니다.
-
뷰 및 레이아웃 설정: 뷰에서는
content_for :favicon을 사용하여 메시지 수에 따라 읽지 않은 상태(icon-unread.svg) 또는 기본(icon.svg) 파비콘 경로를 조건부로 지정합니다. 레이아웃은yield(:favicon)을 통해 이 동적 경로를<link rel="icon">태그의href속성에 바인딩하여, 브라우저가 현재 상태에 맞는 파비콘을 표시하도록 합니다. -
Turbo Stream 응답 및 Ruby 헬퍼: 서버에서 메시지가 생성되거나 삭제될 때,
turbo_stream.update_favicon @count를 호출합니다. 이 호출은TurboStreamActionsHelper모듈에 정의된update_favicon헬퍼 메서드를 통해action="update_favicon" count="[숫자]"속성을 가진<turbo-stream>HTML 태그를 생성하여 클라이언트에 전송합니다. -
JavaScript 액션 구현 및 등록: 클라이언트 측에서는
app/javascript/turbo_stream_actions/update_favicon.js파일에update_faviconJavaScript 함수를 정의합니다. 이 함수는 수신된<turbo-stream>태그의count속성 값을 읽어와, 문서 내 파비콘link엘리먼트의href속성을 조건부로 업데이트합니다. 마지막으로, 이 커스텀 함수를Turbo.StreamActions.update_favicon = update_favicon코드를 통해 Turbo 프레임워크에 등록하여, 해당 액션 태그 수신 시 자동으로 실행되도록 합니다.