콘텐츠로 이동

[WORKSOUT] 알림센터

Screen ID Screen Title Screen Path
NTF-01 알림센터 /notification

사용자에게 전달되는 시스템 메시지를 카테고리 탭 형태로 모아 보여주는 알림센터 화면. 고정 알림, 읽음/안읽음 상태 표시, 30일 자동 삭제 정책, 마케팅 수신 동의에 따른 노출 제어가 핵심이다. (구 화면 코드: HM_130_Alarm)


용어 설명
알림 사용자에게 전달되는 시스템 메시지. 푸시 알림 또는 앱 내 알림센터로 제공
알림센터 내 알림 유형별로 구분된 카테고리 영역
상단 고정 중요한 알림을 알림 목록 최상단에 고정하는 기능
읽음 처리 사용자가 알림을 확인한 상태로 표시하는 기능
알림 배지 읽지 않은 알림이 있음을 표시하는 아이콘 위 표시
Braze 마케팅 자동화 플랫폼. 앱에서 사용하는 푸시 알림 발송 서비스

항목 기준
설정 아이콘 로그인 사용자에게만 표시, 비로그인 시 숨김
설정 아이콘 클릭 알림 설정 화면으로 이동
기본 선택 탭 전체
탭 스크롤 가로 스크롤 형태
화면 재진입 마지막 선택 탭 상태 유지
탭명 notification_category_id 로그인 비로그인
전체 표시 숨김
브랜드 소식 1 표시 숨김
화보 2 표시 숨김
주문 3 표시 숨김
응모 4 표시 숨김
공지 5 표시 표시
  • 로그인 사용자는 전체/브랜드 소식/화보/주문/응모/공지 총 6개 탭을 볼 수 있다.
  • 비로그인 사용자는 ‘공지’ 카테고리 알림만 볼 수 있고 다른 카테고리는 접근할 수 없다.
  • 탭에 미읽음 알림이 있을 경우 해당 탭에 배지 표시 (news > 0).

노출 기본 조건: store = 'WORKSOUT'인 알림만 표시. 로그인 상태에 따른 카테고리 제한 적용.

고정 알림 규칙

항목 기준
사용 조건 어드민 알림센터 관리에서 추가된 컨텐츠만 상단 고정 기능 사용 가능
노출 범위 ‘전체’ 탭과 해당 컨텐츠 타입에 맞는 탭에서 고정되어 표시
위치 상단 고정 (일반 알림보다 위)
정렬 pinnedStartDate 내림차순 — 가장 최근 고정된 알림이 최상단
개수 제한 없음
표시 아이콘 핀 아이콘 (알림 왼쪽 상단)
읽음 처리 고정된 컨텐츠는 읽어도 읽음 처리되지 않는다

일반 알림 규칙

항목 기준
정렬 id 내림차순 (최신 생성 순)
위치 고정 알림 아래
분류 ‘안 읽은 컨텐츠’ / ’읽은 컨텐츠’로 구분
읽음/안읽음 표시 읽은 알림은 흐림 처리되고, 안 읽은 알림은 흐림 처리되지 않는다

삭제 정책

구분 삭제 기준 보관 방식
content 타입 알림 삭제 안 함 영구 보관
고정된 브랜드 소식 / 화보 / 응모 알림 삭제 안 함 영구 보관
기타 브랜드 소식 / 에디토리얼 / 응모 알림 displayStartDate 기준 30일 경과 시 자동 삭제 30일 보관
삭제 실행 주기 매일 자정 배치 처리

삭제 기준은 createdTs가 아니라 displayStartDate 기준이다. 어드민 > 컨텐츠 관리 > 알림센터 관리에서 생성된 알림 콘텐츠는 카테고리와 관계없이 자동 삭제에서 제외된다.

하단 안내 문구 (30일 삭제 정책 적용 탭에만 표시): 브랜드 소식, 화보, 응모 탭 — 최근 30일 동안 받은 {카테고리명} 알림입니다.

빈 상태 문구: 새로운 알림이 없습니다.

요소 데이터 필드
이미지 imageUrl
제목 title
내용 description
날짜 createdTsYYYY-MM-DD 형식으로 표시
고정 여부 pinnedStartDate not null 시 핀 아이콘 표시
읽음 여부 readTs null이면 미읽음 상태
클릭 시 linkUrl로 이동 + 해당 알림 읽음 처리
  • 제목과 내용은 길이 제한 없이 다음 줄로 계속 출력된다.
  • 알림 제목이 [카테고리]로 시작하면 Braze에서 발송한 알림임을 의미한다 (Braze 발송 판별 규칙).
항목 기준
개별 알림 클릭 해당 알림만 읽음 처리
전체 읽음 버튼 현재 선택된 탭의 모든 미읽음 알림을 일괄 읽음 처리
전체 탭 선택 시 categoryId 없이 요청 → 모든 미읽음 알림 일괄 처리
특정 탭 선택 시 해당 categoryId로 요청 → 해당 카테고리만 처리
푸시 알림 클릭 해당 알림은 알림센터 내에서도 읽음 처리됨
처리 후 UI 즉시 반영
실패 시 읽음 처리에 실패했습니다 토스트 메시지
  • 읽지 않은 알림이 있을 경우 알림 아이콘과 계정 아이콘에 노란색 알림 배지가 표시된다.
  • 알림 배지에는 숫자 카운트를 표시하지 않는다.
  • 알림센터는 당겨서 새로고침 방식으로 업데이트할 수 있다. 데이터는 무한 스크롤 방식으로 로드된다.
  • 알림 클릭 시 Braze 알림 또는 어드민에서 설정한 링크(linkUrl)로 이동한다.
  • 개별 알림에 대한 추가 액션 버튼은 없다. 알림 삭제 기능은 제공되지 않는다.
  • 읽은/안 읽은 알림만 필터링하여 보는 기능은 없다.

  • 엔드포인트: GET /v1/notification/categories
  • 호출 시점: 알림센터 화면 진입 시
  • 활용 필드: id(탭 카테고리 식별자, notification_category_id 매핑), name(탭 라벨), news(미읽음 수, 0 초과 시 탭 배지 표시)
  • 엔드포인트: GET /v1/notification?page=0&size={pageSize}&categoryId={categoryId}
  • 호출 시점: 알림센터 진입 시(전체 탭) / 카테고리 탭 선택 시 / 무한 스크롤 시
  • 요청 파라미터: page(0부터 시작), size(페이지당 알림 수), categoryId(전체 탭이면 생략)
  • 활용 필드: id, title, description, imageUrl, linkUrl, displayStartDate(30일 삭제 기준), readTs(null=미읽음), pinnedStartDate(not null=고정), categoryId, createdTs, pageable.last(마지막 페이지 여부)
  • 정렬 조건: 고정 알림 pinnedStartDate DESC > 일반 알림 id DESC
  • 엔드포인트: POST /v1/notification/read
  • 호출 시점: 알림 아이템 클릭 시
  • 요청 데이터: { "notificationId": {id} }
  • 성공 시 readTs 현재 시간으로 업데이트, UI 즉시 반영. 실패 시 에러 메시지 표시 + 상태 롤백.
  • 엔드포인트: POST /v1/notification/read/all
  • 호출 시점: 전체 읽음 버튼 클릭 시
  • 요청 데이터: 전체 탭 → {} (categoryId 생략) / 특정 카테고리 탭 → { "categoryId": {id} }
  • 성공 시 대상 알림 readTs 일괄 업데이트, UI 즉시 반영. 실패 시 읽음 처리에 실패했습니다 토스트.

증상 예상 원인 1차 조치
알림 목록 전체 미노출 알림 목록 API 실패 API 응답과 store 필터 확인
특정 탭만 비어 있음 카테고리 필터 오류 / 해당 알림 없음 categoryId 파라미터와 실제 데이터 확인
고정 알림이 상단에 없음 pinnedStartDate null / 정렬 오류 pinnedStartDate 값과 정렬 로직 확인
탭 배지가 안 보임 카테고리 조회 API 실패 / news = 0 카테고리 API 응답 확인
읽음 처리 후 상태 미반영 API 실패 / UI 롤백 readTs 업데이트 여부와 API 응답 확인
30일 지난 알림이 남아 있음 삭제 배치 미실행 배치 실행 로그 및 displayStartDate 기준 확인
무한 스크롤 추가 로딩 실패 페이지네이션 오류 pageable.last 값과 다음 페이지 요청 확인
데이터 로드 실패 / 빈 상태 API 실패 또는 알림 없음 새로운 알림이 없습니다 메시지 표시


항목 내용
알림 배지 표시 방식 정책 문서는 “숫자 카운트를 표시하지 않음”으로 일관 기술. 홈 화면 마스터 문서(API 연동 섹션)에는 “9 이상이면 9+ 표시” 규칙이 있어 상호 모순 — 홈 화면 문서 미결 사항과 동일 항목, 실제 UI 스펙 확인 필요