목표
실제 사용자가 수신한 알림 수와 오픈율을 파악하여 정확한 알림 영향도를 측정한다.
향후 배포될 알림 관련건에 대한 정확한 지표 추적을 위해 개선하고자함
문제정의 & 가설
문제정의
알림 관련 지표 문제점 확인 - 알림 센터 데이터 지표 개선
1. Title/Body 내 변수 값 분리
•
예시: 알림 문구에 대한 정보가 분리(종목 또는 상승/하락 등 구체적인 정보)되어 있지 않아, 시세알림이 나갔을 때, 어떤 종목에 대한 영향이 갔는지 추적 불가.
2. 알림 ON/OFF 설정 로그 저장
•
유저가 설정한 알림 ON/OFF 변경 이력이 가장 최근에 설정한 상태만 저장되어, 발송 시점에 ON/OFF 여부를 알 수 없다.
3. 오픈 측정 방식 오류
•
EX) 2월 3일에 시세-구간 상승 알림에 대한 오픈율이 아니라, 2월 2일에 보낸 것 2월 3일에 보낸 것, 날짜/종목/등락율 별 구분없이 단순 시세구간 상승 알림에 대한 전체 오픈율을 보여준다. (해당 일자에 보낸 알림의 수에 대한 값이 아닌, 해당 구간의 전체 오픈율이다.)
4. 코인원 앱 시스템 알림설정 상태 확인 불가
•
코인원 앱 시스템 알림설정 상태를 확인할 수 없어, 실제 알림을 수신한 유저에 대한 파악이 어렵다.
가설
1. Title/Body 내 변수 값 분리 - 백엔드
•
Title/Body 내 변수 값을 분리하여 적재할 수 있다면, 시세 알림등 각 알림에 대한 세부 지표 측정(종목별/상승하락율 등)이 가능할 것이다.
2. 유저별 알림 설정 데이터 로그 적재 - 데이터셀
•
유저 별 알림 설정 데이터를 로그형식(이벤트 별 알림 설정 상태에 대한 기록)으로 적재할 수 있다면, 푸쉬가 발송된 시점의 오픈율을 명확히 추적할 수 있다.
3. 알림 오픈 유무 데이터 적재 - 데이터 & 앱
•
알림 오픈 유무에 대한 데이터를 적재할 수 있다면, 각 알림에 대한 오픈율을 정확히 측정할 수 있을 것이다.
4. 시스템 알림설정 상태 적재 - 백엔드&앱
•
유저의 시스템 알림설정 유무를 적재할 수 있다면, 실세 알림을 수신하는 유저에 대한 측정이 가능할 것이다.
프로젝트 성과 지표
Goal | Metric |
신뢰도 높은 알림 별 오픈율 파악 | 알림 유형별 푸시 오픈율 |
종목 별/변동 비율 별 영향도 측정 | 종목 별/변동 비율 별 영향도 측정<br>• 오픈율<br>• 주문 전환율 |
신뢰도 높은 알림 수신 유저 영향도 측정 | 오픈율/주문 전환율 등 알림 지표 측정 모수 시스템 알림 설정 OFF 유저 제외 |
일자별 알림 설정 OFF 유저 측정 | 일자별 알림 OFF 유저 |
주요 일정 (선택)
가설 내 작업 범위별 일정 산정:
•
가설 내 1번: [푸시 메세지 내 변수 값 분리] Backend 작업만 필요 Title/Body 내 변수 값 분리
•
가설 내 2번: [알림 ON/OFF 설정데이터 로그 적재] 데이터셀 작업만 필요
•
가설 내 3번: [알림 발송 데이터 오픈 유무 값 적재] 데이터셀 & 앱
•
가설 내 4번: [시스템 알림 설정 값 적재] 백엔드 & 앱
위 내용 토대로, 가능한 일정 산정
요구사항 목록
1. 알림 발송 데이터 테이블 푸시 메시지 변수값 분리 개선 (notification_sends 테이블)
기획상 중요도: MUST HAVE
담당: Backend Only(선행 작업)
요구 사항: 푸시 메시지 타이틀/본문 변수 값 분리 필요
상세 동작:
•
하단 notification_sends 테이블 notification(title/body) 정보 변수값 분리 정리 참고
•
notifiaction.title과 notifiaction.body 내 변수 데이터 분리 적재
예시:
notifiaction.title
{data.orderType} {orderSide} 체결 - {coinName}
notifiaction.body
{krwValue} KRW {quantity} {ticker}
notifiaction.data
{
"data.orderType": "지정가",
"data.orderSide": "매수",
"data.coinName": "비트코인",
"data.ticker": "BTC",
"data.quantity": "0.00370103",
"data.krwValue": "148270000"
}
Plain Text
복사
2. 알림 설정 상태 테이블 적재 개선
기획상 중요도: MUST HAVE
요구 사항: 알림 설정 변경 이벤트가 일어났을 때 로그 형식으로 적재 필요
상세 동작:
•
유저의 알림설정 변경 시, 별도의 행으로 로그 적재
•
log_stg_notification_settings 적재
3. 알림 발송 데이터 오픈 유무 값 적재
기획상 중요도: MUST HAVE
담당: 데이터/APP
요구 사항: 푸시 발송건별 오픈 유무 값 적재 필요
상세 동작:
•
유저가 앱푸시를 오픈한 시점에 해당 발송건에 대한 오픈 유무와 오픈 일시 적재(앱 로그)
예시:
•
유저 해당 알림 오픈 → 알림 오픈 특정 함수 호출 → 발송 메시지별 오픈 이벤트 저장
•
오픈 이벤트 별 message_id, 오픈 일시
참고: 오픈 유무 값 로그 적재 방식 논의 필요
4. 알림 설정 상태 테이블 개선
기획상 중요도: MUST HAVE
담당: Backend/APP
요구 사항: 코인원 앱 시스템 설정 알림 ON/OFF 값 적재 필요
상세 동작:
•
유저에 대한 코인원 앱 시스템 설정값(ON/OFF) 적재
예시:
•
system_notification 값 추가 - 기본값 초기 일괄 설정값 업데이트
•
시스템 앱 푸시 알림 설정 변경 이벤트 발생 → system_notification 값 변경값(true/false)으로 업데이트
알림 대분류별 상세 정보
알림 대분류 | 알림 하위분류 | 푸시 메시지 문구 포맷(title/body) | 오픈 경로 | 변수 |
BASIC (일반 알림) | FEE_COUPON_EXPIRY (얼리버드 만료 알림) | 수수료 얼리버드 구매 완료<br>매수/매도 주문 중 수수료 얼리버드 추가 구매가 완료되었습니다. (이용 중인 수수료 혜택 확인하기) | coinoneapp://my/feecoupon/history | |
수수료 얼리버드 만료 예정 안내<br>현재 이용 중인 수수료 얼리버드가 일주일 내 만료될 예정입니다. | coinoneapp://my/feecoupon/history | |||
수수료 얼리버드 소진 안내<br>이용 중이던 수수료 얼리버드가 모두 소진된 상태입니다 | coinoneapp://my/feecoupon/detail | |||
LOGIN (로그인 알림) | 새로운 로그인 발생<br>대한민국에서 로그인 (IP ******) | coinoneapp://my/security/login | ||
PLUS_REWARD (플러스 알림) | {종목명} {데일리/스테이킹} 리워드 지급 완료<br>{수량}{티커} 지급이 완료되었어요 | coinoneapp://plus/property | {종목명} {데일리/스테이킹} {건수} | |
{종목명} {데일리/스테이킹} 외 {건수}건 리워드 지급 완료<br>{수량}{티커} 외 {건수}건의 리워드가 지급됐어요 | coinoneapp://plus/property | |||
STOP_ORDER_TRIGGER (예약주문 알림) | [주문 실행] 예약가 {매수/매도} - {종목명}<br>감시가 도달 {김시가 금액} KRW / 주문 실행 {주문 금액} KRW {수량} {티커} | coinoneapp://trading?tradingpair={티커}-KRW&trade_panel=open | {매수/매도} {종목명} {감시가 금액} {주문 금액} {수량} {티커} | |
TRADE (체결 알림) | {지정가/시장가/예약가} {매수/매도} 체결 - {종목명}<br>{금액} KRW {수량} {티커} | coinoneapp://trading?tradingpair={티커}-KRW&trade_panel=open | {지정가/시장가/예약가} {매수/매도} {종목명} | |
TRANSACTION (입출금 알림) | 입금 완료<br>{종목명}({티커}) {수량} {티커/원} 입금 완료 | coinoneapp://dnw/detail?symbol={티커}&filter=deposit | {입금/출금} {종목명} {티커} {수량} {티커/원} | |
출금 완료<br>{종목명}({티커}) {수량} {티커/원} 출금 완료 | coinoneapp://dnw/detail?symbol={티커}&filter=withdraw | |||
QUOTES (시세 알림) | HELD_ASSETS_RANGE_CHANGE (보유자산 5% 구간 상승/하락) | 보유자산 알림<br>{종목명} ({티커}) 매수평균가 대비 {퍼센트}% {상승/하락}<br>현재가 {금액}원 | coinoneapp://trading?tradingpair={티커}-KRW | {종목명} {티커} {퍼센트} {상승/하락} {금액} |
LIMIT_PRICE (지정가) | 지정가 도달<br>{종목명} ({티커}) 목표가 도달<br>현재가 {금액}원 | coinoneapp://trading?tradingpair={티커}-KRW | {종목명} {티커} {금액} | |
PRICE_RANGE_DOWN (10% 구간 하락) | 구간 하락 알림<br>{종목명} ({티커}) {-퍼센트}% 하락<br>현재가 {금액}원 | coinoneapp://trading?tradingpair={티커}-KRW | {종목명} {티커} {퍼센트} {금액} | |
PRICE_RANGE_UP (10% 구간 상승) | 구간 상승 알림<br>{종목명} ({티커}) {퍼센트}% 상승<br>현재가 {금액}원 | coinoneapp://trading?tradingpair={티커}-KRW | {종목명} {티커} {퍼센트} {금액} | |
PRICE_RECENT_HIGH (최근 7일 신고가) | 신고가 알림<br>{종목명} ({티커}) 7일 신고가 갱신<br>현재가 {금액}원 | coinoneapp://trading?tradingpair={티커}-KRW | {종목명} {티커} {금액} | |
PRICE_RECENT_LOW (최근 7일 신저가) | 신저가 알림<br>{종목명} ({티커}) 7일 신저가 갱신<br>현재가 {금액}원 | coinoneapp://trading?tradingpair={티커}-KRW | {종목명} {티커} {금액} | |
TIME_INTERVAL (시간 설정) | 시간 알림<br>{종목명} ({티커}) {hh:mm} 기준<br>현재가 {금액}원 | coinoneapp://trading?tradingpair={티커}-KRW | {종목명} {티커} {hh:mm} {금액} | |
UP_DOWN_FROM_CLOSE (종가 대비 상승/하락) | 전일대비 알림<br>{종목명} ({티커}) 전일 종가 대비 {퍼센트}% {상승/하락}<br>현재가 {금액}원 | coinoneapp://trading?tradingpair={티커}-KRW | {종목명} {티커} {퍼센트} {상승/하락} {금액} | |
COMMUNITY (커뮤니티 알림) | MY_FOLLOWING_ACTIVITY (내가 팔로우 한 유저(팔로잉)의 활동 알림) | {닉네임}님의 새 글 알림<br>{종목명} 커뮤니티에 {내용} 글을 남겼어요. (코인원 커뮤니티) | coinoneapp://communityboard?id={id} | {닉네임} {종목명} {내용} |
MY_NEW_FOLLOWER (나를 팔로우하는 유저(팔로워)가 추가되었을 때 알림) | 새로운 팔로워 알림<br>{닉네임}님이 회원님을 팔로우하기 시작했어요. (코인원 커뮤니티) | coinoneapp://profile?id={id} | {닉네임} | |
MY_POST_COMMENT (내 게시글 댓글) | {종목명} 커뮤니티 새로운 댓글 알림<br>내 {내용}글에 {닉네임}님이 새로 댓글을 남겼어요. | coinoneapp://communityboard?id={id} | {종목명} {내용} {닉네임} | |
MY_POST_LIKE (내 게시글 좋아요) | 커뮤니티 새로운 좋아요 알림<br>내 {내용}글을 {닉네임}님이 좋아해요. | coinoneapp://communityboard?id={id} | {내용} {닉네임} |
notification_settings(알림센터 알림 설정 상태) 구조
basic (일반알림)
구분 | 설명 | 유형 | 기본 설정값 |
fee_coupon | 얼리버드 알림 | boolean | ON |
fee_coupon_expriry | 얼리버드 만료 | boolean | ON |
login | 로그인 알림 | boolean | ON |
plus_reward | 플러스 알림 | boolean | ON |
stop_order_trigger | 예약주문 알림 | boolean | ON |
trade | 체결 알림 | boolean | ON |
transaction | 입출금 알림 | boolean | ON |
quotes (시세알림)
1depth | 2depth | 3depth | 설명 | 유형 | 기본 설정값 |
held_assets_range_up_and_down (보유자산 알림) | subscribe | 보유자산 알림 | boolean | OFF | |
minium_market_value | 평가금액 5천원 이상인 알림 | boolean | |||
minimum_base_volume | 거래대금 기준 적용 | boolean | OFF | ||
price_range_up_and_down | 10% 상승/하락 알림 | boolean | OFF | ||
price_range_up_and_down_favorites | 관심 종목만 알림 받기 | boolean | OFF | ||
recent_price_high_and_low | 신고가/신저가 알림 | boolean | OFF |
silent_mode (야간모드)
구분 | 설명 | 유형 | 기본 설정값 |
enabled | 활성유무 | boolean | OFF |
end | 종료시간 | string | |
start | 시작시간 | string |
community (커뮤니티 알림)
구분 | 설명 | 유형 | 기본 설정값 |
my_following_activity | 내 팔로잉 활동 | boolean | OFF |
my_new_follower | 내 새로운 팔로워 | boolean | OFF |
my_post_comment | 내 포스트 | boolean | ON |
my_post_like | 내 포스트 좋아요 | boolean | ON |
popular_post_recommendation | 인기 포스트 추천 | boolean | OFF |
기타 필드
•
last_modified_at : 수정일자 (timestamp)
•
created_at : 생성일자 (timestamp)
알림 내역 정책
알림 설정 기본값이 ON인 기본알림의 경우에만 알림 ON/OFF와 무관하게 알림 내역에서는 조회 가능 → OFF 상태여도 notification_sends 기록됨
히스토리: 기본알림은 일반적인 활동내역으로 보아 OFF 상태에서도 알림내역에서 확인할 수 있도록 함
알림 설정 | 알림 내역 | 푸시 발신 |
기본 알림 ON(기본값) | 기록 O | O |
기본 알림 OFF | 기록 X | X |
선택 알림 ON | 기록 O | O |
선택 알림 OFF(기본값) | 기록 X | X |
UI & 디자인 초안
화면 수정 없음
확인해야 할 사항
질문 | 답변 / 결과 |
알림 내역 정책 바꾸지 않더라도 실 발송자 측정할 수 있을 지 확인 필요 (데이터 셀) | 실제 푸시 발송 DB 컬럼 추가로 논의 완료 |
오픈 유무 값 로그 적재 방식 논의 | firebase 이벤트 적재<br>기존 nofication_open 이벤트와 별개의 tracking plan으로 적재 |
