본문 바로가기

Coding, Testing, Challenge/토스 미니앱

로고가 콘솔과 똑같은데도 계속 반려됐습니다

다섯 번째 만에 통과

앱인토스 검수에서 이 문구를 네 번 받았습니다.

공통 내비게이션 바에 브랜드 로고가 표시되지 않거나 콘솔 앱 정보와 상이해요. 내비게이션 바에 콘솔 앱 정보와 동일한 앱 로고를 표시해 주세요.

로고는 콘솔에 올린 것과 같은 파일이었습니다. 그런데도 계속 반려됐습니다.

우리 서버가 주던 로고와 콘솔에 올린 로고
우리 서버가 주던 로고와 콘솔에 올린 로고

어떻게 되어 있었나

미니앱 설정에 브랜드 로고 주소를 적습니다.

brand: {
  displayName: '원리금 상환표',
  icon: 'https://우리도메인/assets/loan/icon.png',
}

저희는 로고를 우리 서버에서 서빙하고 있었습니다. 콘솔에도 같은 이미지를 올렸고요.

네 번의 헛수고

1차 — 이미지를 완전히 똑같이 맞췄다

혹시 아이콘이 다른가 싶어 확인했습니다. 앱 이름을 바꾸던 때 콘솔에만 새 아이콘을 올리고 서버 쪽은 옛것 그대로였습니다.

그런데 파일을 비교하는 게 간단하지 않았습니다. 토스 CDN이 이미지를 다시 인코딩해서 같은 그림이어도 바이트가 다릅니다. 통과한 앱들도 전부 달랐습니다.

그래서 그림으로 비교했습니다. 64×64로 줄여서 픽셀 평균차를 재니 깨끗하게 갈렸습니다.

평균차
이름을 바꾼 7개56 ~ 113 (다른 그림)
나머지 43개0.0 (완전 일치)

서버 쪽 로고를 콘솔 것으로 갈아 끼웠습니다. 다시 재니 0.00. 그리고 반려됐습니다.

2차 — 캐시를 의심했다

로고에 하루짜리 캐시가 걸려 있었습니다. 심사자가 옛 이미지를 받아 본 게 아닐까 싶어 5분으로 줄였습니다.

반려됐습니다.

3차 — 주소에 버전을 붙였다

캐시가 이미 잡혔다면 주소를 바꾸면 됩니다. icon.png?v=2 로 캐시 키를 통째로 갈았습니다.

200으로 잘 내려오는 것도, 새 이미지인 것도 확인했습니다. 반려됐습니다.

4차 — HEAD 요청이 막혀 있었다

서버 코드를 보다가 진짜 결함을 하나 찾았습니다.

if (request.method !== 'GET') return fail(405, ...);

정적 파일 경로가 GET만 허용하고 있었습니다. 이미지 로더가 선행 HEAD 를 보내면 405를 받습니다. "로고가 표시되지 않는다"는 문구와 맞아떨어져 보였습니다.

고치고, 배포하고, 확인했더니 여전히 405였습니다. 405 응답이 CDN에 캐시돼 있었던 겁니다. 주소에 쿼리를 붙여 다시 재니 200이었습니다.

그리고 반려됐습니다.

다섯 번째 시도에서 7분 만에 승인
다섯 번째 시도에서 7분 만에 승인

사본을 쓰는 걸 그만뒀습니다. 콘솔에 아이콘을 올리면 static.toss.im 주소를 돌려주는데, 그 주소를 설정에 그대로 넣었습니다.

brand: {
  displayName: '원리금 상환표',
  icon: 'https://static.toss.im/appsintoss/{워크스페이스}/{uuid}.png',
}

제출 7분 만에 승인됐습니다.

무엇을 보는 검사였나

이미지가 같은지가 아니라 어디서 오는지를 봅니다.

픽셀이 완전히 같아도, 캐시가 짧아도, 주소가 새것이어도 소용없었습니다. 우리 도메인에서 서빙하는 한 통과하지 못했습니다.

생각해 보면 당연합니다. 심사 쪽에서 "콘솔에 등록된 것과 같은가"를 확인하려면 주소가 같은지 보는 게 가장 확실합니다. 이미지를 내려받아 비교하는 것보다요.

가져갈 것

  • 미니앱 로고는 콘솔이 돌려준 static.toss.im 주소를 그대로 쓰세요. 사본을 만들지 마세요.
  • 아이콘이 같은지는 바이트로 못 봅니다. CDN이 재인코딩합니다. 줄여서 그림으로 비교하세요.
  • 이름을 바꾸면 아이콘도 세 벌(콘솔·로컬·서버)이 다 같아야 합니다.

그리고 하나 더

2차와 4차에서 고친 것들 — 캐시 시간, HEAD 405 — 은 그 자체로는 진짜 결함이었습니다. 그래서 되돌리지 않았습니다.

다만 반려 사유는 아니었습니다.

원인을 못 찾을 때 주변에서 결함을 발견하면 "이게 원인이겠지" 하고 넘어가기 쉽습니다. 저는 두 번 그랬고 두 번 다 틀렸습니다. 고친 뒤에 결과가 바뀌었는지를 봐야 원인인지 알 수 있습니다.


만든 것들