프로모션 테스트 4109 에러 — TEST 코드 호출이 콘솔에 반영 안 됨 (techchat #3628 케이스 추정)

이 글의 성격은 무엇인가요?

질문 / 문제 해결

내용을 설명해주세요

이 글의 성격은 무엇인가요?

질문 / 문제 해결

내용을 설명해주세요

안녕하세요, 비게임 미니앱 프로모션 테스트 통과 관련 문의드립니다.

채널톡으로 먼저 문의드렸으나 개발자 커뮤니티로 안내받아 이곳에 다시 작성합니다.
techchat #3628 “검토 프로세스 일시 오류” 공지 케이스로 추정되는 상황이며,
techchat #2739, #3387, #2697과 동일한 4109 무한 루프 증상입니다.


앱 정보

  • 미니앱 이름: 돈버는 행운번호
  • appName: wocs-money-lucky
  • 워크스페이스: 33549
  • 카테고리: 비게임 미니앱
  • 연동 방식: 서버 없이 SDK 방식 (grantPromotionReward)

프로모션 정보

  • 프로모션 코드: 01KQBEVS6H4RY83JBR2X6E5NSD
  • 테스트 코드: TEST_01KQBEVS6H4RY83JBR2X6E5NSD
  • 미션 이름: 행운번호 받고 5냥받기
  • 지급 금액: 5원
  • 전체 예산: 30,000원 (비즈월렛 잔액 210,000원, 충분함)
  • 혜택탭 노출: 노출
  • 승인일: 2026-05-03
  • 콘솔 상태: “테스트 이후 프로모션을 시작할 수 있어요” 툴팁 표시,
    “시작하기” 버튼 비활성

빌드 정보

  • 가장 최신 검토 필요 버전: 20260506 (deploymentId 019df8f2-4ff9-7b09-bab0-b7fb3287062d)
  • @apps-in-toss/web-framework: 2.4.7
  • @apps-in-toss/cli: 2.4.7
  • 토스앱: 5.257.1 (Android phone)
  • 라이브 출시 버전: 20260427-6 (이 버전엔 SDK 호출 코드 없음)

파트너사 측 점검 완료 (이슈 0건)

다음 모든 항목을 빌드 산출물 grep + git history + tsc로 검증했습니다:

  • TEST 프로모션 코드 31자리 정확히 inject 확인 (웹 번들 standalone=1)
  • 운영 코드 단독 누출 0건 (TEST_ prefix 없는 단독 매칭 = 0)
  • grantPromotionReward 함수 정상 호출 시그니처:
    { params: { promotionCode, amount: 5 } }
  • Result 페이지 useEffect 마운트 시 1회 호출 (의존성 배열 )
  • localStorage 가드 검증을 위해 STORAGE_KEY를 v1→v2로 갱신
    (가드 가설은 우회 빌드로 부정됨)
  • 디버그 잔재 0건 (DebugOverlay/logBoth/VITE_DEBUG/BUILD_TIME 모두 부재)
  • TypeScript 컴파일 0 에러
  • localStorage 영구 가드 + inFlightRef in-flight 락 정상 동작

진단 로그 (이전 디버그 빌드, 2026-05-05 23:09:27 KST 캡처)

화면 디버그 오버레이로 토스앱에서 직접 캡처한 로그입니다:

@candlejs 님 안녕하세요
테스트 프로모션 코드로 호출해보셨을까요?

@seonjeong 님 안녕하세요, 답변 감사합니다.

네, 테스트 프로모션 코드(TEST_01KQBEVS6H4RY83JBR2X6E5NSD)로 호출하였습니다.
실제 호출/응답 로그를 첨부합니다:

[2026-05-05 23:09:27 KST 디버그 빌드 화면 오버레이 캡처]

[CALLING]
promotionCode: TEST_01KQBEVS6H4RY83JBR2X6E5NSD (총 31자, TEST_ 접두사 정확)
amount: 5

[RESULT]
{
errorCode: “4109”,
message: “프로모션이 실행중이 아니에요”
}

호출 후 응답까지 0.001초 소요로 토스 서버 도달은 정상이며,
TEST_ 접두사가 정확히 포함된 31자리 테스트 코드로 호출했음에도 4109가 반환됩니다.

추가로 다음을 빌드 산출물에서 직접 검증했습니다:

  • 빌드 산출물 grep으로 TEST_01KQBEVS6H4RY83JBR2X6E5NSD 1건 inject 확인
  • 운영 코드(TEST_ 접두사 없는 26자리) 단독 누출 0건 확인
  • localStorage 가드 우회 빌드로도 동일 4109 반환 (호출 자체는 정상 발화)

가장 최근 시도한 빌드 6개(20260505-9 ~ 20260506-14) 모두 동일하게 4109 반환되었습니다.

혹시 콘솔 내부에서 프로모션 코드 01KQBEVS6H4RY83JBR2X6E5NSD의 상태나
TEST 호출 누적 차감액 상태를 직접 확인 가능하실까요?

확인 부탁드립니다. 감사합니다.

TEST 코드에 대해서는 모두 열어뒀는데 확인해볼게요
우선 로그 상으로는 이미 중지된 프로모션으로부터 지급시도가 발생하고 있습니다 에러가 발생하고 있어서 확인해보고 말씀드릴게요

@seonjeong 님 안녕하세요, 답변 감사합니다.

네, 테스트 프로모션 코드(TEST_01KQBEVS6H4RY83JBR2X6E5NSD, 31자)로 호출했습니다.
호출/응답 로그 첨부합니다:

[2026-05-05 23:09:27 KST 디버그 빌드 화면 오버레이 캡처]

[CALLING]
promotionCode: TEST_01KQBEVS6H4RY83JBR2X6E5NSD
amount: 5

[RESULT]
{ errorCode: “4109”, message: “프로모션이 실행중이 아니에요” }

호출 후 응답까지 0.001초로 토스 서버 도달은 정상이며,
TEST_ 접두사가 정확히 포함된 31자리 테스트 코드로 호출했음에도 4109가 반환됩니다.

추가 검증 사항:

  • 빌드 산출물 grep으로 TEST_01KQBEVS6H4RY83JBR2X6E5NSD 1건 inject 확인
  • 운영 코드(TEST_ 접두사 없는 26자리) 단독 누출 0건 확인
  • localStorage 가드 우회 빌드로도 동일 4109 반환 (호출 자체는 정상 발화)
  • 가장 최근 시도한 빌드 6개(20260505-9 ~ 20260506-14) 모두 동일하게 4109 반환

토스 비게임 프로모션 공식 문서에서 명시된
"테스트 호출을 통해 프로모션이 정상적으로 등록 및 승인 상태로 전환된다"는 부분이
저희 케이스에서는 작동하지 않는 상황입니다.

채널톡 답변(2026-05-06)에 따라 운영 빌드도 별도로 준비하여 콘솔에 검토 요청 진행 중입니다
(20260506-15, deploymentId 019dfc6f-8784-7979-bd9e-e64e0d200267).

확인 가능하시면 다음 사항 부탁드립니다:

  1. 프로모션 코드 01KQBEVS6H4RY83JBR2X6E5NSD가 콘솔 내부에서 어떤 상태인지
    (등록되었지만 승인 전환 대기 중인지, 아니면 다른 비정상 상태인지)

  2. TEST 호출이 실제로 토스 서버에 SUCCESS로 처리되지 않는 원인
    (가상 차감 누적, 콘솔 처리 지연 등)

  3. 운영팀 측에서 콘솔 내부에서 수동으로 “등록 및 승인 상태” 전환이 가능한지

  4. 운영 빌드(20260506-15) 라이브 전환 후 시작하기 버튼이 자동 활성화되는지,
    아니면 라이브 전환과 별개로 TEST 호출 SUCCESS가 반드시 필요한지

확인 부탁드립니다. 감사합니다.

@candlejs 님 확인해본 결과 안내드려요

콘솔에 버그가 확인되었어요.
프로모션 생성 이후 종료일을 수정하더라도 테스트 프로모션 코드의 종료일은 업데이트되지 않는 이슈로, 최소 생성 시점의 시작/종료일이 그대로 유지되어 발생한 문제입니다. 해당 건은 내부적으로 수정 예정이에요.

현재 테스트가 불가한 상황이며, 내부 데이터 변경도 어려운 점 양해 부탁드립니다.

번거로우시겠지만, 아래 절차로 진행해 주시면 감사하겠습니다.

  1. 프로모션 검토 요청을 해주시면 우선적으로 승인 처리해 드리겠습니다.
    단, 동일한 프로모션으로 검토 요청 주셔야 합니다.
  2. 승인 후 기존과 동일하게 테스트 프로모션 코드로 SDK 함수를 호출해 주세요.
  3. SUCCESS 응답을 확인하신 후, 콘솔에서 실제 프로모션 코드로 변경된 AIT 파일을 업로드해 주세요.
  4. 이후 [프로모션 시작하기] 버튼을 눌러 프로모션을 시작하시면 됩니다.

불편을 드려 죄송합니다. 검토 요청 주시고 말씀해주시면 보다 빠르게 처리해드리겠습니다.

@seonjeong 님 답변 감사합니다. 콘솔 버그 안내 확인했습니다.

말씀해주신 절차대로 진행하기 위해 운영 코드 반영한 빌드를 이미 검토 요청해두었습니다.

[검토 요청한 빌드 정보]

  • 버전: 20260506-15
  • deploymentId: 019dfc6f-8784-7979-bd9e-e64e0d200267
  • 메모: v1.0.5 — 프로모션 SDK 통합 (운영 빌드)
  • 상태: 현재 “검토 중” (영업일 3일 내 결과 안내 메시지 표시 중)
  • 빌드 검증: TEST 코드 0건, 운영 코드 단독 inject 1건, 디버그 잔재 0건

우선 처리 부탁드립니다.

추가 확인 사항이 있는데, 안내해주신 절차상

3번 “승인 후 기존과 동일하게 테스트 프로모션 코드로 SDK 함수를 호출”

부분이 이해가 어렵습니다.

저희가 검토 요청한 20260506-15는 운영 코드(TEST_ 접두사 없는 26자리)만 박혀있는 빌드입니다.
이 빌드가 승인된 후 어떤 방식으로 테스트 프로모션 코드를 호출하는 것이 맞는지 안내 부탁드립니다.

(예: 승인 직후 콘솔에서 다시 테스트 코드용 빌드를 따로 만들어 호출해야 하는지,
아니면 승인된 운영 빌드 내부에서 다른 방식으로 호출하는지 등)

확인 부탁드립니다. 감사합니다.

@seonjeong 님 빠른 검토 처리 감사합니다.
20260506-15 빌드가 “출시 준비됨” 상태로 변경되어 “출시하기” 버튼이 활성화된 것 확인했습니다.

다만 안내해주신 절차에서 한 가지 막혀 진행 전 확인 부탁드립니다.

[검토 통과된 빌드 정보]

  • 버전: 20260506-15
  • 빌드 모드: production (운영 코드만 박힘, TEST 코드 inject 0건)
  • import.meta.env.MODE === ‘production’ 분기로 운영 코드만 호출

[안내 절차 2단계 관련 질문]
“승인 후 기존과 동일하게 테스트 프로모션 코드로 SDK 함수를 호출”

20260506-15 빌드는 운영 코드(26자리)만 박혀있어서,
이 빌드의 “테스트” QR로 진입해도 호출되는 코드는 운영 코드입니다.
TEST 코드(31자리)는 이 빌드에 inject되지 않았습니다.

이 경우 절차 2단계의 "테스트 프로모션 코드로 SDK 함수를 호출"은 어떻게 진행해야 하나요?

다음 중 어느 방향이 맞을까요?

(A) 20260506-15는 출시(라이브 전환)하지 말고,
별도로 TEST 코드 박힌 빌드를 콘솔에 등록 후 “테스트” QR로 호출 → SUCCESS 확인
그 후 20260506-15를 출시하고 시작하기 클릭

(B) 20260506-15를 먼저 출시(라이브 전환)한 후,
“테스트” QR로 진입하면 TEST 코드가 별도로 호출되는 방식
(이 경우 라이브 전환 후 어떻게 TEST 호출이 가능한지 안내 부탁)

(C) 그 외 다른 방식

빌드 추가가 필요하면 즉시 산출 가능합니다. 정확한 절차 안내 부탁드립니다.

감사합니다.

@candlejs 님 프로모션을 신규로 신청해주셔야 합니다
프로모션 신규 신청 후에 말씀주시면 바로 승인해드리려고 했어요

승인 처리가 되면 프로모션 코드를 확인하실 수 있는데,
그 때 노출되는 테스트 프로모션 코드 기반으로 빌드를 올려주시면 됩니다

@seonjeong 님 새 프로모션 등록 완료했습니다. 우선 승인 부탁드립니다.

[새 프로모션 정보]

  • 미니앱: 돈버는 행운번호 (wocs-money-lucky)
  • 워크스페이스: 33549
  • 프로모션 이름: 행운번호 확인하고 5냥 받기
  • 미션 이름: 행운번호 확인하기
  • 지급 방식: 고정 금액 5원
  • 전체 예산: 35,000원
  • 종료일: 2026-07-31
  • 혜택탭 노출: 노출
  • 이동 URL: intoss://wocs-money-lucky
  • 등록일: 2026-05-06
  • 현재 상태: 검토 중

승인되어 새 프로모션 코드 확인하면, 안내해주신 절차대로

  1. 새 테스트 프로모션 코드 박힌 빌드 만들어서 콘솔 업로드
  2. 테스트 QR로 SUCCESS 확인
  3. 운영 코드 박힌 빌드 업로드 후 시작하기 클릭

진행하겠습니다.

추가 문의:

  1. 기존 프로모션(01KQBEVS6H4RY83JBR2X6E5NSD, “행운번호 확인하고 5냥받기”)은
    어떻게 처리하면 될까요?
    (종료 처리, 방치, 또는 다른 처리 방법)

  2. 기존에 검토 통과된 빌드(20260506-15)는 어떻게 처리하면 좋을까요?
    해당 빌드는 기존 프로모션 코드(01KQBE…)가 박힌 운영 빌드라
    출시하면 새 프로모션과 충돌할 것 같아 출시 보류 중입니다.

    • 그대로 방치해도 되는지
    • 검토 요청 취소하는 게 나은지
    • 또는 별도 조치가 필요한지

확인 부탁드립니다. 감사합니다.

안녕하세요 :slight_smile:
새로운 프로모션 코드를 발급받아 새로운 빌드로 진행하시는거라면,
기존 프로모션은 종료 처리 해주시면 됩니다.

구버전 프로모션 코드가 삽입되어있는 구 빌드도 출시하시지 말고, 새로운 빌드 검수 요청 부탁드립니다.

네, 기존의 프로모션은 취소했습니다. 새로 신청한 프로모션 바로 승인 부탁드립니다.

@seonjeong 님 안내대로 새 프로모션 코드로 운영 빌드 재산출했습니다.
검수 요청 전에 한 가지 확인 부탁드립니다.

[현재 산출한 빌드 정보]

  • 빌드 번호: 20260506-16
  • deploymentId: 019dfd2f-554d-7292-8278-c59e34ee33ee
  • 빌드 모드: production
  • 운영 코드(01KQYGR0WKWE8VZ50B6KRWZRZK) 단독 inject 1건
  • TEST 코드(TEST_01KQYGR0…) inject 0건 (production DCE로 제거)
  • 구 코드(01KQBE…) inject 0건

[확인 부탁드리는 부분]
이전에 "테스트 프로모션 코드 기반으로 빌드를 올려주시면 됩니다"라고 안내해주셨는데,
저희가 만든 빌드는 production 모드로 빌드되어 운영 코드만 박혀있고 TEST 코드는 inject되지 않았습니다.

다음 두 가지 중 어떤 빌드가 맞는지 안내 부탁드립니다.

(A) 현재 빌드 그대로 검수 요청 → 통과 후 출시 → 출시된 빌드의 “테스트” QR로 호출 시
토스 시스템이 자동으로 TEST 코드를 처리해주는 방식

(B) TEST 코드(TEST_01KQYGR0…)가 박힌 빌드를 별도로 산출해서 검수 요청 →
통과 후 출시 → “테스트” QR → SUCCESS 확인 → 그 후 운영 빌드 다시 검수/출시

(C) 운영 코드 + TEST 코드 둘 다 박힌 빌드 (환경 분기 없이) 산출 →
이 빌드 한 개로 검수/출시/테스트 모두 진행

검수 요청 전에 정확한 절차 확인 부탁드립니다.

20260506-16 빌드는 검수 요청 전 대기 상태로 두겠습니다.

감사합니다.

@seonjeong 님 TEST 호출 SUCCESS 확인 완료했습니다!

[TEST 빌드 검증 결과]

  • 새 프로모션(01KQYGR0WKWE8VZ50B6KRWZRZK)으로 TEST 호출
  • TEST 빌드 deploymentId: 019dfd3e-1f6b-7099-88f5-3a7bb926a697
  • 토스앱 진입 → Result 페이지 도달
  • 콘솔 → “행운번호 확인하고 5냥 받기” → 시작하기 버튼 활성화 확인 :white_check_mark:

기존 프로모션과 다르게 새 프로모션은 정상적으로 TEST 호출이 처리되었습니다.

[운영 빌드 검수 요청]

  • 버전: 20260506-16
  • deploymentId: 019dfd2f-554d-7292-8278-c59e34ee33ee
  • 메모: 새 프로모션으로 재등록
  • 빌드 검증: 새 운영 코드 단독 inject 1건, TEST/구 코드 0건
  • 방금 “검토 요청” 클릭 완료

[검수 통과 후 진행 예정]

  1. 운영 빌드 출시 (라이브 전환)
  2. 콘솔 → 프로모션 → “시작하기” 클릭 → 프로모션 활성화

운영 빌드의 우선 검수 부탁드립니다. 정말 감사드립니다.

뭔가 잘못 이해하신 부분이 있으신 것 같아요 :man_bowing:
번들을 업로드 한다고 해서, 꼭 검수 요청 및 출시를 해야하는 것은 아닙니다.
테스트 프로모션 코드를 삽입한 번들을 업로드하셔서 QR 테스트로 프로모션 기능을 한번만 호출해주시면 됩니다.
테스트 프로모션 코드가 호출되어야 ‘시작하기’ 버튼이 활성화 될거에요.

(B) 에서 ‘검수 요청’ 및 ‘통과 후 출시’ 과정이 필요하지 않아요.

@seonjeong 님 절차 명확히 이해했습니다. 안내 감사드립니다.

[처리 완료]

  1. TEST 빌드(20260506-17)는 검수/출시 없이 테스트 QR로만 호출 → SUCCESS 확인 완료
  2. 운영 빌드(20260506-16)는 방금 검수 요청 클릭 완료
    • deploymentId: 019dfd2f-554d-7292-8278-c59e34ee33ee
    • 출시 노트: v1.0.6 — 새 프로모션 코드 적용 (운영 빌드)
    • 빌드 검증: 새 운영 코드 단독 inject 1건, TEST/구 코드 0건
    • 행운번호 1셋트 → 3셋트 UI 업그레이드 포함

[검수 통과 후 진행 예정]

  1. 운영 빌드 출시 → 라이브 전환
  2. 콘솔 → 프로모션 → “시작하기” 클릭 → 프로모션 활성화

운영 빌드의 우선 검수 부탁드립니다. 정말 감사드립니다.

@candlejs 님 안녕하세요
운영 빌드는 순차적으로 검수가 진행될 예정입니다
긴급 검수가 필요하실 경우 채널톡으로 문의 부탁드립니다 :folded_hands:

네 알겠습니다. 감사합니다.^^