[출결 앱 개발 로그 04] 출석을 계속하고 싶게 만드는 리워드 #스트릭 #히든칭호
출석 횟수만 보여주면 기록은 남지만 다음 수련을 기대하게 만들기는 어렵다. TEAM PASSION 앱에는 꾸준함을 보여주는 주간 스트릭, 월간 배지, 예상하지 못한 패턴을 발견하는 히든 칭호를 추가했다.
목표는 게임 화면을 만드는 것이 아니었다. 평소에는 담백하게 출석을 끝내고, 정말 새로운 기록을 만들었을 때만 특별한 반응을 주는 것이었다.
주간 스트릭은 같은 날 여러 수업을 한 번으로 센다
한 주는 월요일부터 일요일까지다. 서로 다른 날짜에 3일 이상 출석하면 그 주를 성공으로 처리한다. 같은 날 세 타임을 모두 들어도 스트릭에서는 하루다.
회원 화면은 이번 주 진행도, 현재 연속 주, 최고 기록을 보여준다. 한때 진행도를 0/5로 표시하면서 실제 달성 기준은 3일로 유지했기 때문에, “서로 다른 날짜 3회 이상 수련하면 이번 주 스트릭 완성”이라는 설명을 함께 넣었다.
특별 연출은 매주 반복하지 않는다. 4주, 12주, 26주, 52주처럼 의미 있는 지점에서만 보여준다.
월간 배지는 컬렉션으로 남긴다
한 달에 서로 다른 날짜로 12일 이상 수련하면 해당 연·월 배지를 한 번 획득한다. 같은 날 여러 타임을 들어도 하루로 계산한다.
회원은 얻은 배지를 월별 컬렉션으로 보고, 관리자는 어떤 회원이 언제 배지를 얻었는지 확인한다. 이미지 경로를 연·월 데이터와 분리해 나중에 월별 디자인을 교체할 수 있게 했다.
히든 칭호를 조건문 100개로 만들지 않았다
다중 수련, 시간대, Open Mat, 요일 루틴, 장기 미출석 뒤 복귀, 누적 기록 등 칭호가 100개 이상으로 늘었다. 이를 화면이나 출석 처리 함수에 if로 하나씩 넣으면 새 칭호를 추가할 때마다 핵심 코드를 건드려야 한다.
그래서 칭호를 데이터로 정의했다.
- 칭호명과 설명
- 분류
- 조건 유형과 기준값
- 필요한 세부 설정
- 아이콘과 애니메이션 키
단순 누적 조건은 공통 평가기가 처리하고, 연속 요일이나 복귀처럼 복잡한 조건만 별도 평가 전략으로 나눴다.
여러 보상이 한 번에 열릴 때
한 번의 출석으로 주간 목표, 월간 배지, 히든 칭호를 동시에 얻을 수 있다. 세 팝업을 한꺼번에 겹치면 무엇을 얻었는지 읽을 수 없다.
출석 저장 뒤 새 보상을 목록으로 받아 순서대로 보여주는 Reward Queue를 만들었다. 기본 출석 애니메이션 뒤 새 보상이 있을 때만 하나씩 보여주고, 다음 회원의 출석을 막지 않도록 빠르게 넘길 수 있게 했다.
오지급된 칭호에서 배운 것
첫 출석 회원에게 연말정산, 새해 첫 롤, 매일 보이시는데요 같은 칭호가 열린 적이 있었다. 데이터에 수업이 한 건뿐이면 그 수업이 동시에 첫 수업이자 마지막 수업처럼 보였고, “실제로 개최된 일정”과 “현재 데이터에 존재하는 일정”을 구분하지 못한 것이 원인이었다.
판정 기준을 실제 세션과 서로 다른 날짜 중심으로 고치고 전체 회원의 보상을 다시 계산했다. 조건을 만족하지 않는 출석 기반 칭호는 회수하고, 프로필 작성처럼 출석과 무관한 보상은 유지했다.
두 개의 특별 칭호
내가 블랙벨트가 되기까지의 이야기는 회원이 생년월일, 연락처, 주짓수 시작일 또는 모름을 입력하고 처음 저장할 때 얻는다. 단순히 빈 프로필을 저장하는 것만으로는 열리지 않는다.
이정필의 버터플라이 세미나는 2026년 10월 2일 20:00 특별 세션에 참석한 회원에게 지급한다. 특정 행사를 수업 데이터와 연결해 만든 첫 이벤트 칭호다.
현재 결론
리워드는 출석 데이터보다 앞서면 안 된다. 먼저 실제 수업과 출석이 정확히 기록되고, 보상은 그 기록을 해석해야 한다. 그래야 잘못된 출석을 수정했을 때 보상도 다시 계산할 수 있고, 새로운 칭호를 추가해도 기존 출석 흐름이 흔들리지 않는다.