- 마지막 업데이트
과몰입 방지
이해하기
국내에서 온라인으로 서비스하는 게임은 「게임산업진흥에 관한 법률」 시행령에 따라 일정 주기마다 과몰입 방지 문구를 게임 화면에 노출해야 해요.
스토브 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_OverImmersionNotificationAPI를 호출해 과몰입 방지 알림을 등록해요. - 이 API는 1회만 호출하면 되며,
Base_Initialize성공 콜백 내에서 호출하는 것을 권장해요. - 등록이 완료되면 게임 시작 시점부터 매 시간마다
OnOverImmersionFinished콜백이 자동으로 호출돼요.
- Base SDK 초기화가 완료된 후
- 콜백 수신 및 정보 추출
- 콜백에는
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회만 호출하면 돼요. 초기화 성공 직후에 호출하는 것을 권장해요.
개발 흐름
- 알림 등록
초기화 완료 후 알림 등록 API(
Base_OverImmersionNotification)를 호출해 과몰입 방지 알림을 등록해요. - 콜백 수신
게임 시작 시점부터 매 시간마다 등록한 콜백이 호출돼요. 콜백 인자는 콜백 결과와 과몰입 정보 객체예요. (
CallbackResult·StovePCOverImmersion) - 결과 검증
콜백 결과로 성공 여부를 확인해요. (
CallbackResult.IsSuccessful()) 한국 외 국가에서는NOT_SUPPORTED_COUNTRY(31)가 반환돼요. - 정보 추출
과몰입 정보 객체에서 메시지·경과 시간·최소 노출 시간을 가져와요. (
GetWarningMessage()·GetElapsedTimeInHours()·GetMinExposureTimeInSeconds()) - 메시지 노출 게임 내 식별 가능한 위치에 메시지를 띄우고, 최소 노출 시간(초) 이상 유지한 뒤 자연스럽게 사라지게 처리해요.
트러블슈팅
| 상황 | 원인 | 해결 방법 |
|---|---|---|
| 과몰입 방지 콜백을 등록했는데 한 시간이 지나도 호출되지 않아요 | 게임 메인 루프에서 콜백 디스패치 함수(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를 적용하고, 베트남 서비스에는 별도의 베트남 규제 가이드를 참고해 주세요.
샘플 코드
// 기존 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) 등은 자연스럽게 우회 처리
}
}
);