들어가는 말
오전에 미용실에 다녀왔다. 피부과까지 다녀왔어야 했는데 충동적으로 사무실까지 바로 오는 버스를 타는 바람에 그냥 출근해 버렸다. 피부과가 수요일마다 휴원이라 목요일에 가는 걸로..
토스 미니앱 개발
토스 미니앱 - 독서 잔디밭

새로운 프로모션을 추가로 등록했다. 매일 1회 독서 기록을 하면 10원을 주는 프로모션이 이미 있는데 5n 일 마다 추가로 최대 1,000원을 주는 프로모션이다. 단, 5n 일이 중단 없이 연속돼야 한다. 중단이 깨지면 리워드 광고를 보고 복구할 수 있게 하려고 한다. 일단 프로모션부터 구현을 시작했다. 아래는 Cladue Code에 전달한 프롬프트다.
I’m trying to implement a new promotion feature. This app is a non-gaming mini-app. It would be helpful to refer to the existing promotion implementation logic already in place in this app. The details are as follows.
- If a user logs reading for 5n consecutive days, they receive a reward corresponding to the value of the variable TOSS_CONTINUOUS_READING_PROMOTION_MAX_AMOUNT, which is set in the railway backend API.
- TOSS_CONTINUOUS_READING_PROMOTION_MAX_AMOUNT is the maximum value.
- The reward amount is calculated as 5n × 20. For example, if a user logs 15 consecutive days, they receive a reward of 300 (20 times the base amount). If they log 50 consecutive days, they receive the specified maximum reward of 1,000, and the reward amount does not increase beyond that.
- The promotion code is the value of the variable TOSS_CONTINUOUS_READING_PROMOTION_CODE, which is configured in the railway backend API.
UI/UX
- A reward is granted when the user explicitly taps the “n consecutive days” text on the home screen. If the user does not meet the reward criteria, a pop-up notification appears indicating how many more days they need to maintain the streak to receive the reward.
- If the conditions for receiving a reward are met but the user has not yet claimed it, apply an effect to the “n consecutive days” text to draw the user’s attention.
- Include a simple notice explaining that rewards are granted for consecutive days, along with the reward calculation formula, in user-friendly language within the existing “Usage Guide” view.
Reference Documents
- https://developers-apps-in-toss.toss.im/guide/marketing/intro-2
- https://developers-apps-in-toss.toss.im/documentation/common/growth/promotion
Ask me a question.이 프롬프트를 던지고 이른 저녁을 먹고 들어오니 구현이 끝나 있었다. 터미널에 정확히 21분 52초가 걸렸다고 표시된 것을 확인했다. 이후 실기기에서 테스트하는 데에 시간이 더 걸렸지만.. 어쨌든 오늘 심사 넣는 것까지 끝냈다.

이 앱에만 벌써 세 번째 프로모션을 넣었는데 여전히 헷갈리는 게 있다.

앱이 심사에 통과돼서 배포되기 전에 이렇게 프로모션을 시작해 버리면, 해당 프로모션이 토스 앱의 '혜택탭'에 노출이 된다. 하지만 기존 유저가 타고 들어왔을 때 당연히 프로모션 혜택을 받을 수가 없다. 그렇다고 프로모션을 시작하지 않고 대기 상태로 놔두면 심사 담당자가 프로모션 보상을 테스트할 수가 없어서 심사에 떨어질 위험이 있다. 무엇보다 심사 넣기 전에 내가 테스트를 할 수 없는 답답함이 있다. 토스 개발 가이드에도 이에 대한 명확한 지침이 없고, 개발자 커뮤니티에 올려서 물어보기엔 너무 귀찮다. 이 글을 보고 계시는 다른 분들은 어떻게 하시는지?
OpenClaw 관리
Codex 인증 갱신 프로세스 점검
얼마 전에 Codex OAuth 인증이 만료돼서 OpenClaw 기본 모델로 설정한 GPT 5.5가 사용 불가 상태가 됐던 일이 있었다. 다행히 fallback이 잘 동작해서 kimi k2.6(읔, 이것도 버전 올려야지..)이 붙어서 에이전트가 동작을 멈추는 일을 벌어지지 않았다. 사실 Codex 인증은 이미 refresh token을 기반으로 자동 갱신되도록 구성해 두었고, 30분 간격으로 토큰 상태를 확인하는 launchd 작업이 동작하고 있다. 이게 작동하지 않았단 얘기라서 오늘은 이 부분을 점검했다.
최근 '카카오 선물하기'로 구매한 GPT Pro 이용권 기간이 끝났다. 그래서 OpenClaw 연동 계정을 ChatGPT for Kakao 계정에서 기존에 쓰던 gmail.com 계정으로 돌려놓았다. 이때 기존 refresh token이 무효화되며 인증 오류가 발생한 것이 원인인 듯하다. 더 파보진 않았다. OpenClaw의 세 에이전트(main/Ruth/Dani) 인증 저장소와 Codex auth 경로가 모두 gmail.com 기준으로 정리되어 있는 것을 확인했다. Codex OAuth 인증 만료 당시에 kimi가 작업을 제대로 해 놓은 것이다. 이어서 모델 probe와 Codex smoke test도 진행했는데 정상 통과했다. 추가로 자동 갱신 작업이 launchd PATH 문제로 node를 찾지 못하던 부분을 아래와 같이 수정해 재실행 성공까지 확인했다.
/usr/libexec/PlistBuddy -c 'Delete :EnvironmentVariables' "$HOME/Library/LaunchAgents/dev.garibong.codex-token-refresh.plist" 2>/dev/null || true
/usr/libexec/PlistBuddy -c 'Add :EnvironmentVariables dict' "$HOME/Library/LaunchAgents/dev.garibong.codex-token-refresh.plist"
/usr/libexec/PlistBuddy -c 'Add :EnvironmentVariables:PATH string /opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin' "$HOME/Library/LaunchAgents/dev.garibong.codex-token-refresh.plist"
마무리
항상 마무리에 뭘 써야 하나 고민이었는데 내일 할 일을 쓰면 딱이겠다는 생각이 지금 들었다. 그렇다고 소제목을 아예 "내일 할 일"로 바꾸면 압박감이 드니까 그냥 놔둔다. 내일은 "Upstage Solar Agent Partner Stage 1"을 시작 및 거의 마무리까지 해야 한다. 기간이 2026년 7월 17일(금) ~ 7월 31일(금), 약 2주였는데 아직 시작도 못했다. 목/금은 졸업논문 weekly 실험에 시간을 거의 다 써야 하기 때문에 내일 꼭 해야 한다. 남들이 보면 백수라고 하겠지만 나름 바쁘다.
'개발 일지 > 오늘의 작업 기록' 카테고리의 다른 글
| 1인 개발자의 일일 개발 노트 - 2026.07.27(월) (1) | 2026.07.27 |
|---|---|
| 1인 개발자의 일일 개발 노트 - 2026.07.26(일) (1) | 2026.07.26 |
| 1인 개발자의 일일 개발 노트 - 2026.07.25(토) (0) | 2026.07.25 |
| 1인 개발자의 일일 개발 노트 - 2026.07.23(목) (0) | 2026.07.24 |
| 1인 개발자의 일일 개발 노트 - 2026.07.22(수) (1) | 2026.07.22 |