| 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 |
| 날짜 |
createdTs — YYYY-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 스펙 확인 필요 |