메인 콘텐츠로 건너뛰기

에러 코드 목록

코드상수메시지설명
0OKOK성공
4000ERROR_CODE_INVALID_UNITInvalid unit유효하지 않은 광고 유닛 ID
4001ERROR_CODE_AD_INACTIVEAd inactive활성화된 광고 캠페인 없음
4002ERROR_CODE_AD_NO_FILLNo fill기준에 맞는 광고 없음
4003ERROR_CODE_INVALID_PARAMSInvalid params유효하지 않은 파라미터

에러별 상세 설명

ERROR_CODE_INVALID_UNIT (4000)

원인: 존재하지 않거나 비활성화된 광고 유닛 ID로 요청했습니다. 해결 방법:
  • 콘솔에서 광고 유닛 ID가 정확한지 확인
  • 광고 유닛이 활성화 상태인지 확인
  • 복사/붙여넣기 시 공백이나 특수문자가 포함되지 않았는지 확인
{
    "code": 4000,
    "msg": "Invalid unit",
    "result": null
}

ERROR_CODE_AD_INACTIVE (4001)

원인: 해당 광고 유닛에 활성화된 광고 캠페인이 없습니다. 해결 방법:
  • 콘솔에서 캠페인이 실행 중인지 확인
  • 캠페인 일정(시작일/종료일)을 확인
  • 캠페인 예산이 소진되지 않았는지 확인
{
    "code": 4001,
    "msg": "Ad inactive",
    "result": null
}

ERROR_CODE_AD_NO_FILL (4002)

원인: 타겟팅 조건에 맞는 광고를 찾을 수 없습니다. 해결 방법:
  • 타겟팅 설정이 너무 제한적이지 않은지 확인
  • 재시도 로직 구현 (지수 백오프 권장)
  • 대체 콘텐츠(폴백) 준비
{
    "code": 4002,
    "msg": "No fill",
    "result": null
}
재시도 구현 예시:
async function requestAdWithRetry(params, maxRetries = 3) {
    for (let i = 0; i < maxRetries; i++) {
        try {
            const response = await axios.get('https://api-v2.adrop.io/request', {
                params,
                headers: { 'Authorization': 'YOUR_APP_KEY' }
            });

            if (response.data.code === 0) {
                return response.data.result;
            }

            if (response.data.code === 4002) {
                // No fill - 재시도
                await new Promise(r => setTimeout(r, Math.pow(2, i) * 1000));
                continue;
            }

            // 다른 에러는 즉시 반환
            throw new Error(response.data.msg);
        } catch (error) {
            if (i === maxRetries - 1) throw error;
        }
    }

    return null; // 폴백 콘텐츠 표시
}

ERROR_CODE_INVALID_PARAMS (4003)

원인: 요청 파라미터가 잘못되었습니다. 해결 방법:
  • 필수 파라미터(unit)가 포함되었는지 확인
  • 파라미터 값의 형식이 올바른지 확인
  • 파라미터 이름에 오타가 없는지 확인
{
    "code": 4003,
    "msg": "Invalid params",
    "result": null
}
파라미터 체크리스트:
파라미터필수올바른 값 예시
unit필수AD_UNIT_123
pf권장android, ios, web
lcl권장ko_KR, en_US
theme선택light, dark

에러 처리 모범 사례

1. 에러 코드 기반 분기 처리

function handleAdResponse(response) {
    switch (response.code) {
        case 0:
            // 성공 - 광고 렌더링
            renderAd(response.result);
            break;
        case 4000:
            // 유닛 ID 오류 - 로그 기록
            console.error('Invalid unit ID');
            break;
        case 4001:
        case 4002:
            // 광고 없음 - 폴백 콘텐츠 표시
            showFallbackContent();
            break;
        case 4003:
            // 파라미터 오류 - 개발자에게 알림
            console.error('Invalid parameters:', response.msg);
            break;
        default:
            // 알 수 없는 에러
            console.error('Unknown error:', response.code, response.msg);
    }
}

2. 폴백 콘텐츠 준비

function showFallbackContent() {
    const container = document.getElementById('ad-container');
    container.innerHTML = `
        <div class="fallback-content">
            <img src="/images/house-ad.jpg" alt="House Ad" />
        </div>
    `;
}

3. 모니터링 및 로깅

function logAdError(code, message, params) {
    // 에러 발생률 모니터링
    analytics.track('ad_error', {
        error_code: code,
        error_message: message,
        unit_id: params.unit,
        timestamp: new Date().toISOString()
    });
}

HTTP 상태 코드

REST API는 표준 HTTP 상태 코드도 함께 반환합니다.
HTTP 상태설명
200요청 성공 (에러 코드는 응답 본문에서 확인)
401인증 실패 (App Key 확인)
500서버 내부 오류
HTTP 200이라도 응답 본문의 code 값을 반드시 확인하세요. 비즈니스 로직 에러는 응답 본문에 포함됩니다.

관련 문서