Skip to content
스토브
마지막 업데이트

과몰입 방지

이해하기


국내에서 온라인으로 서비스하는 게임은 「게임산업진흥에 관한 법률」 시행령에 따라 일정 주기마다 과몰입 방지 문구를 게임 화면에 노출해야 해요.
스토브 PC SDK는 이 의무 표시를 처리할 수 있도록 Base SDK를 통해 과몰입 경고 메시지·게임 플레이 경과 시간·메시지 최소 노출 시간 정보를 콜백으로 전달해요.
게임에서는 전달받은 정보를 활용해 게임 내 식별 가능한 위치에 메시지를 노출하도록 UI를 구성하면 돼요.

과몰입 방지 기능은 국내 서비스 필수 적용 항목이에요.
PC SDK 전용 기능이며, 모바일에서는 제공되지 않아요. 대상 게임은 반드시 연동해야 해요.



적용 환경 및 동작 범위

항목 내용
제공 플랫폼 PC SDK 3.0 (Base SDK) 전용. 모바일 미지원.
동작 국가 한국에서만 동작. 한국 이외의 국가에서 호출 시 NOT_SUPPORTED_COUNTRY (31) 에러 반환.
대상 게임 국내에서 온라인으로 서비스하는 게임. 게임산업진흥에 관한 법률 시행령에 따라 의무 적용.
베트남 서비스 베트남은 별도의 베트남 규제 기능을 사용. 과몰입 방지 기능과는 별개로 적용.



SDK가 전달하는 정보

게임 플레이 시작 이후 일정 주기마다 콜백을 통해 다음 정보가 전달돼요.
게임에서는 이 값을 사용해 의무 표시 UI를 구성해요.

전달 정보 설명
과몰입 경고 메시지 법령에 부합하는 과몰입 방지 문구. Base_SetLanguage API로 설정된 언어로 번역되어 전달.
게임 플레이 경과 시간 게임 플레이 시작 시점부터 누적된 경과 시간(시 단위).
메시지 최소 노출 시간 메시지를 화면에 표시해야 하는 최소 시간(초 단위).

메시지는 게임 내 식별이 가능한 위치에 노출해야 해요.
Base SDK에서 제공하는 과몰입 경고 메시지는 이용자가 인지할 수 있는 가독성 있는 위치에 노출해야 하며, 전달받은 최소 노출 시간 이상 유지해야 해요.



메시지 노출 예시

콜백으로 전달되는 메시지는 아래와 같은 형태예요. 경과 시간 정보가 메시지에 함께 포함되어 전달돼요.

"게임을 플레이한 지 1 시간이 지났습니다. 과도한 게임이용은 정상적인 일상생활에 지장을 줄 수 있습니다."



적용 방식

과몰입 방지 메시지는 두 가지 방식 중 선택해 적용할 수 있어요.
두 방식 모두 법령 요건(노출 주기, 최소 노출 시간, 가독성 등)을 충족해야 해요.

방식 설명 권장 여부
PC SDK 연동 Base SDK의 Base_OverImmersionNotification API 등록 후,
매 시간마다 호출되는 콜백에서 전달받은 정보를 화면에 노출.
권장
CP사 자체 구현 게임에서 자체 카운터·타이머와 메시지 리소스를 직접 관리하여 노출. 선택

연동 가이드



기본 연동 구조


  • 알림 등록
    • Base SDK 초기화가 완료된 후 Base_OverImmersionNotification API를 호출해 과몰입 방지 알림을 등록해요.
    • 이 API는 1회만 호출하면 되며, Base_Initialize 성공 콜백 내에서 호출하는 것을 권장해요.
    • 등록이 완료되면 게임 시작 시점부터 매 시간마다 OnOverImmersionFinished 콜백이 자동으로 호출돼요.

  • 콜백 수신 및 정보 추출
    • 콜백에는 StovePCOverImmersion 구조체가 전달돼요. 구조체에서 메시지·경과 시간·최소 노출 시간을 조회해 화면에 노출해요.
    • GetWarningMessage()로 얻은 메시지는 Base_SetLanguage로 설정된 언어로 번역된 결과예요.
    • 한국 외 국가에서 호출되면 콜백에서 NOT_SUPPORTED_COUNTRY (31) 에러가 반환돼요. 국내 서비스 외에는 별도 처리 없이 자연스럽게 우회되도록 구현해 주세요.

  • 메시지 노출
    • 게임 내 식별이 가능한 위치(예: 화면 상단/하단 띠 영역, 시스템 메시지 영역 등)에 메시지를 표시해요.
    • 전달받은 메시지 최소 노출 시간(초)만큼 화면에 유지한 후 자연스럽게 사라지도록 처리해요.
    • 메시지 영역은 다른 UI에 가려지지 않도록 z-order와 가독성을 확보해요.

개발하기


PC (PCSDK)

PC SDK 전용 기능이에요.
모바일에서는 제공되지 않으며, 한국 외 국가에서 호출 시 NOT_SUPPORTED_COUNTRY(31) 에러가 반환돼요.


사전 준비

  • BaseSDK 연동 및 초기화(Base_Initialize)가 선행돼야 해요. 초기화 전에 호출하면 콜백이 동작하지 않아요.
  • 게임 루프에서 콜백 디스패치 함수(Base_RunCallback())가 주기적으로 호출돼야 콜백이 정상 전달돼요.
  • 메시지를 다국어로 노출하려면 사전에 언어 설정 API(Base_SetLanguage(enum 기반) / Base_SetLanguageEx(문자열 기반))로 언어를 설정해요. 콜백에서 받는 메시지가 설정된 언어로 자동 번역돼요.
  • 등록은 1회만 호출하면 돼요. 초기화 성공 직후에 호출하는 것을 권장해요.



개발 흐름

  1. 알림 등록 초기화 완료 후 알림 등록 API(Base_OverImmersionNotification)를 호출해 과몰입 방지 알림을 등록해요.
  2. 콜백 수신 게임 시작 시점부터 매 시간마다 등록한 콜백이 호출돼요. 콜백 인자는 콜백 결과와 과몰입 정보 객체예요. (CallbackResult·StovePCOverImmersion)
  3. 결과 검증 콜백 결과로 성공 여부를 확인해요. (CallbackResult.IsSuccessful()) 한국 외 국가에서는 NOT_SUPPORTED_COUNTRY(31)가 반환돼요.
  4. 정보 추출 과몰입 정보 객체에서 메시지·경과 시간·최소 노출 시간을 가져와요. (GetWarningMessage()·GetElapsedTimeInHours()·GetMinExposureTimeInSeconds())
  5. 메시지 노출 게임 내 식별 가능한 위치에 메시지를 띄우고, 최소 노출 시간(초) 이상 유지한 뒤 자연스럽게 사라지게 처리해요.



트러블슈팅

상황원인해결 방법
과몰입 방지 콜백을 등록했는데 한 시간이 지나도 호출되지 않아요게임 메인 루프에서 콜백 디스패치 함수(Base_RunCallback())를 호출하지 않으면 SDK가 알림 시점이 돼도 게임에 전달할 수단이 없어요. 콜백은 이 디스패치 함수를 호출한 스레드에서만 실행돼요.메인 루프에서 매 프레임 또는 일정 주기로 콜백 디스패치 함수를 호출해야 해요. 입력 처리와 렌더 사이에 한 번 호출하면 문제없어요.
콜백 등록 자체가 실패하거나 등록은 되는데 호출이 한 번도 안 와요BaseSDK 초기화가 완료되기 전에 콜백을 등록했어요. 초기화 완료 전에는 SDK가 이용자 세션을 알지 못해 등록한 콜백이 활성화되지 않아요.콜백 등록 코드는 초기화 성공 이후(OnInitializeFinished 성공 이후)로 옮겨야 해요. 부팅 시퀀스에서 BaseSDK 초기화 → 콜백 등록 순서로 진행하면 문제없어요.
한국 외 국가 빌드에서 등록 API가 NOT_SUPPORTED_COUNTRY(31)로 실패해요과몰입 방지는 한국 한정 규제 기능이라 한국 외 국가에서는 31번 오류가 반환돼요. 글로벌 빌드에 그대로 호출하면 부팅 로그에 의미 없는 에러가 남아요.GDS 정보(Base_GetGds)에서 국가 코드(ISO 3166-1 ALPHA-2, 한국이면 "KR")를 확인하고, 한국일 때만 등록 코드에 진입하도록 분기해야 해요. 한국 외 빌드에서는 등록을 건너뛰면 문제없어요.
등록은 됐는데 알림 메시지가 영어로만 노출돼요SDK가 제공하는 알림 문구는 언어 설정 API(Base_SetLanguage(enum 기반)·Base_SetLanguageEx(문자열 기반))로 지정한 언어를 따라가요. 언어 설정 전에 콜백이 도착하면 디폴트(영어)로 표시돼요.콜백 등록 전 단계에서 언어 설정 API로 게임 언어를 먼저 적용해야 해요. 부팅 직후 언어를 한 번 지정하면 이후 모든 SDK 메시지가 해당 언어로 나오므로 문제없어요.
알림 메시지가 게임 UI에 가려지거나 잘 안 보여요게임 측에서 메시지를 표시하는 위치·z-order·노출 시간 처리가 부족해 다른 UI에 묻혀요. SDK는 메시지 텍스트만 전달하고 노출 방식은 게임 책임이에요.시스템 메시지 영역이나 상단/하단 띠 등 항상 보이는 위치에 띄우고, 다른 UI보다 위에 오도록 z-order를 잡아야 해요. 노출 시간을 충분히 두고 이용자 입력 직후에는 닫지 않도록 처리하면 문제없어요.

베트남 서비스는 별도 기능을 사용해요
베트남은 한국 과몰입 방지 기능과 다른 규제 흐름(베트남 연령 등급/과몰입)을 사용해요.
한국 게임에 본 API를 적용하고, 베트남 서비스에는 별도의 베트남 규제 가이드를 참고해 주세요.



샘플 코드

cpp
// 기존 C/C++ API (Native C/C++ · Unreal 공통)
using namespace Stove::PCSDK;
using namespace Stove::PCSDK::Base;

// (선택) 다국어 노출 시 사전 언어 설정
Base_SetLanguageEx(L"ko");

// 과몰입 방지 알림 등록 — Base_Initialize 성공 콜백 안에서 1회만 호출
Base_OverImmersionNotification(
    [](CallbackResult callbackResult, StovePCOverImmersion overImmersion)
    {
        if (callbackResult.GetResult().IsSuccessful())
        {
            const wchar_t* message   = overImmersion.GetWarningMessage();
            int32_t elapsedHours     = overImmersion.GetElapsedTimeInHours();
            int32_t minExposureSec   = overImmersion.GetMinExposureTimeInSeconds();
            // 게임 UI에 message 노출, minExposureSec 이상 유지 후 종료 처리
        }
        else
        {
            // 한국 외 국가(NOT_SUPPORTED_COUNTRY=31) 등은 자연스럽게 우회 처리
        }
    }
);

자주 묻는 질문



Q1. 과몰입 방지 기능은 어떤 게임에 적용해야 하나요?
A. 「게임산업진흥에 관한 법률」 시행령에 따라 국내에서 온라인으로 서비스하는 게임에 적용되는 의무 항목이에요.
국내 서비스를 진행하는 PC 게임은 필수로 연동해야 하며, 미연동 시 법령 위반에 따른 행정 조치 대상이 될 수 있어요.
Q2. 모바일 게임에도 과몰입 방지 기능을 적용해야 하나요?
A. 스토브 과몰입 방지 기능은 PC SDK 전용 기능으로, 모바일에서는 별도 제공되지 않아요.
법령 적용 대상에 해당하는 모바일 게임은 게임 내에서 자체적으로 의무 표시를 구현해야 해요.
Q3. 한국 외 국가에서 서비스하는 경우 어떻게 처리되나요?
A. 과몰입 방지 기능은 한국에서만 동작해요.
한국 이외의 국가에서 Base_OverImmersionNotification API를 호출하면 콜백에서 NOT_SUPPORTED_COUNTRY (31) 에러가 반환돼요.
글로벌 빌드를 단일 코드로 운영하는 경우, 에러 코드 분기로 메시지 노출 로직을 자연스럽게 우회하도록 구현해 주세요.
Q4. 베트남에 서비스하는 경우 같은 기능을 사용하면 되나요?
A. 베트남 서비스는 별도의 베트남 규제 기능을 사용해야 해요.
한국의 과몰입 방지 기능과는 동작 방식과 표시 요건이 다르므로 별도 연동이 필요하며, 베트남 연령 등급(LOTUS) 관련 가이드를 참고해 주세요.
Q5. Base_OverImmersionNotification은 매번 호출해야 하나요?
A. 1회만 호출하면 돼요. Base_Initialize 성공 콜백 내에서 호출하는 것을 권장해요.
등록이 완료되면 게임 시작 시점부터 매 시간마다 자동으로 콜백이 호출되므로, 매 호출 시점마다 다시 등록할 필요가 없어요.
Q6. 콜백이 호출되지 않아요. 어떻게 확인하나요?
A. SDK의 비동기 API 콜백은 Base_RunCallback()을 호출하는 스레드에서 실행돼요.
게임 루프에서 Base_RunCallback()이 주기적으로 호출되고 있는지 먼저 확인해 주세요.
그 외에도 Base SDK 초기화(Base_Initialize) 성공 여부, 등록 시점이 초기화 콜백 이후인지, 한국 외 국가 IP에서 호출되고 있지 않은지 함께 확인해 주세요.
Q7. 메시지를 다국어로 노출하려면 어떻게 하나요?
A. GetWarningMessage()로 받은 메시지는 Base_SetLanguage API로 설정된 언어로 자동 번역되어 전달돼요.
게임에서 별도의 다국어 리소스를 관리할 필요 없이, 언어 설정만 적절한 시점에 호출하면 돼요.
Q8. 메시지 노출 위치와 시간은 어떻게 정해야 하나요?
A. Base SDK에서 제공하는 과몰입 경고 메시지는 게임 내 식별이 가능한 위치(가독성·시인성이 확보된 영역)에 노출해야 해요.
노출 시간은 콜백으로 전달되는 GetMinExposureTimeInSeconds() 값 이상으로 유지해 주세요.
다른 UI 요소에 가려지거나 이용자가 즉시 닫을 수 없도록 z-order와 인터랙션 제어에 유의해 주세요.
Q9. SDK를 사용하지 않고 게임에서 자체적으로 구현해도 되나요?
A. CP사(개발사)가 자체 카운터·메시지 리소스를 사용해 직접 구현하는 방식도 가능해요.
다만 법령에서 요구하는 메시지 내용, 노출 주기(1시간), 최소 노출 시간, 가독성 요건을 모두 충족해야 해요.
법령 변경에 대한 대응 부담이 있으므로, SDK 연동을 통한 자동 갱신 방식을 권장해요.



직접 문의하고 싶으신가요? stove.developers@smilegate.com