- 마지막 업데이트
웹 서비스 로그인 연동
이해하기
웹 서비스 로그인 연동은 공식 홈페이지·이벤트 페이지 같은 웹 서비스에 스토브 계정 로그인을 연동하는 기능이에요. 이용자는 별도의 계정 없이 스토브 계정으로 로그인하고, 웹 서비스는 발급된 인증 쿠키(SUAT)로 로그인 상태를 확인해요.
연동 방식은 두 가지예요. 스토브 공통 네비게이션을 웹 페이지에 삽입하는 GNB 방식과, 스토브 로그인 페이지를 직접 호출하는 로그인 URL 방식이에요. 로그인·언어·테마 같은 공통 UI까지 함께 제공하려면 GNB 방식을, 로그인 동선만 연동하려면 로그인 URL 방식을 선택하면 돼요.
연동 방식
| 방식 | 이런 경우에 사용 | 특징 |
|---|---|---|
| GNB 방식 | 로그인 외에 회원가입·언어·테마·게임 이동 등 공통 UI를 함께 제공하려는 웹 서비스 |
스토브 공통 네비게이션 모듈을 웹 페이지에 삽입. (반응형 UI·옵션 커스텀 제공) |
| 로그인 URL 방식 | 공통 UI 없이 스토브 로그인 동선만 직접 연동하려는 웹 서비스 | 스토브 로그인 페이지를 URL로 호출하고, 완료 시 쿠키로 인증 상태 확인 |
적용 환경
스토브 인증은 도메인 요건을 충족하는 웹 서비스에서만 사용할 수 있어요. 외부 인프라로 서비스를 구성하는 경우 SSL 인증서가 필요해요.
| 항목 | 내용 |
|---|---|
| 도메인 요건 | 연동 대상 웹 서비스가 onstove.com 계열 도메인(예: xxx.game.onstove.com)을 사용해야 스토브 인증을 사용할 수 있음 |
| SSL 인증서 | 외부 인프라로 웹 서비스를 별도 구성하는 경우 SSL 인증서 발급·설정 필요 |
| 반응형 지원 | GNB 방식은 PC·Tablet·Mobile 화면에 맞춰 자동 레이아웃되는 반응형 UI 제공 |
구성 요소
| 구성 요소 | 역할 |
|---|---|
| Web Service | 공식 홈페이지·이벤트 페이지 등 스토브 로그인을 연동하는 대상 서비스 |
| GNB 모듈 | stove-gnb.js. 웹 페이지에 마운트되어 로그인·회원가입·언어·테마·게임 이동 등 공통 UI 제공 |
| 스토브 로그인 페이지 | accounts.onstove.com/login. 로그인 URL 방식에서 직접 호출하는 인증 페이지 |
| 인증 쿠키 (SUAT) | 로그인 완료 후 발급되는 STOVE User Access Token. 웹 서비스가 로그인 상태 식별에 사용 |
| 퍼블리싱 기술 담당자(기술PM) | 도메인 연결, game_no·inflow_path 발급, SSL·방화벽 설정 등 사전 준비 처리 |
동작 원리
GNB 방식은 웹 페이지에 GNB 모듈을 로드해 지정한 요소에 마운트해요. GNB가 로그인·회원가입 동선과 언어·테마 등 공통 기능을 제공하고, 로그인이 완료되면 스토브 인증 쿠키가 설정돼요. GNB 자체를 수정하지 않고 서비스별 커스텀 영역과 옵션으로 필요한 기능만 선택해 사용해요.
로그인 URL 방식은 game_no·inflow_path·redirect_url을 포함한 스토브 로그인 페이지 URL을 생성해 호출해요. 이용자가 로그인을 완료하면 redirect_url로 이동하고, 웹 서비스는 응답 쿠키에서 SUAT 등 토큰 정보를 확인해 로그인 상태를 처리해요.
연동 가이드
사전 준비
두 방식에 공통으로 필요한 준비 사항이에요. 방식별 세부 준비는 각 [개발하기] 트랙에서 안내해요.
| 항목 | 내용 | 비고 |
|---|---|---|
| 도메인 연결 | 웹 서비스가 onstove.com 계열 도메인(예: xxx.game.onstove.com)을 사용하도록 연결. 도메인 연결은 기술PM이 처리 |
필수 |
| 코드 발급 | 로그인 URL 방식에 필요한 game_no와 유입경로 코드(inflow_path)를 기술PM을 통해 발급 |
로그인 URL 방식 |
| SSL 인증서 | 외부 인프라로 서비스를 구성하는 경우 SSL 인증서 발급·설정. 기술PM을 통해 발급 가능 | 외부 인프라 시 |
| 테스트 계정 | 연동 테스트를 위해 웹에서 스토브 회원가입이 완료된 계정 확보 | 필수 |
연동 전 담당팀과 사전 공유가 필요해요
도메인 연결·코드 발급·방화벽 설정 등은 퍼블리싱 기술 담당자(기술PM)를 통해 진행돼요. 연동 시작 전 담당팀에 공유해 주세요. 문의: sgp_publishtech_d@smilegate.com
환경별 도메인 안내
방식별로 사용하는 도메인이 환경에 따라 달라요. 연동 테스트는 Sandbox에서 먼저 진행한 뒤 Live에 적용해요.
| 환경 | GNB 모듈 (stove-gnb.js) | 로그인 페이지 |
|---|---|---|
| Live | https://js-cdn.onstove.com/libs/common-gnb/latest/stove-gnb.js | https://accounts.onstove.com |
| Sandbox | https://js-cdn.gate8.com/libs/common-gnb/latest/stove-gnb.js | https://accounts.gate8.com |
| QA | https://js-cdn-qa.onstove.com/libs/common-gnb/latest/stove-gnb.js | - |
| QA2 | https://js-cdn-qa2.onstove.com/libs/common-gnb/latest/stove-gnb.js | - |
| Dev | https://js-cdn-dev.onstove.com/libs/common-gnb/latest/stove-gnb.js | - |
| Dev2 | https://js-cdn-dev2.onstove.com/libs/common-gnb/latest/stove-gnb.js | - |
개발하기
GNB 방식
GNB(Global Navigation Bar)는 스토브 계정 로그인·회원가입, 언어 변경, 게임 이동 등 공통 기능을 제공하는 웹 공통 네비게이션이에요. 서비스별 옵션으로 필요한 기능만 선택해 사용하고, 반응형 UI로 PC·모바일에서 동일한 경험을 제공해요. 아래 내용은 개편된 GNB 기준이에요.
사전 준비
- 웹 서비스가
onstove.com계열 도메인을 사용하도록 도메인 연결이 완료되어 있어야 해요. - 환경에 맞는 GNB 모듈(
stove-gnb.js) 호스트 주소를 확보해야 해요. (환경별 도메인 안내 참고) - GNB를 렌더링할 요소(예:
)를 페이지에 준비해야 해요. - 언어·테마 커스텀이 필요하면 서비스의 언어 커버리지와 기본 언어·테마 정책을 미리 정해야 해요.
개발 흐름
GNB 모듈을 로드한 뒤 렌더링할 요소를 지정해 window.StoveGnb.mount()를 호출하면 GNB가 마운트돼요. 로그인 여부에 따라 UI가 자동으로 바뀌고, 로그인이 완료되면 스토브 인증 쿠키가 설정돼요.
- 환경에 맞는 GNB 모듈(
stove-gnb.js)을 로드해요. - GNB를 렌더링할 요소의 CSS 선택자와 옵션 객체를
window.StoveGnb.mount(selector, options)에 전달해요. - GNB가 마운트되며 로그인·회원가입·언어·테마 등 공통 UI가 렌더링돼요.
- 마운트·언어 변경·테마 변경 시점은
GNB커스텀 이벤트로 전달되므로, 필요한 시점을 수신해 서비스 동작을 연결해요. - 이용자가 로그인을 완료하면 스토브 인증 쿠키가 설정되고, 로그인 여부에 따라 GNB UI가 자동으로 전환돼요.
window.StoveGnb.mount(selector, options)에 전달하는 인자예요.
| 파라미터 | 타입 | 설명 |
|---|---|---|
selector |
string |
GNB를 렌더링할 요소의 CSS 선택자 |
options |
object |
GNB 동작을 설정하는 옵션 객체 |
서비스별 옵션과 파트너스 설정으로 필요한 기능만 사용해요. 로그인 여부에 따라 기본 디자인이 자동으로 바뀌고, 모바일에서는 하단 메뉴바를 제공해요.
| 항목 | 내용 |
|---|---|
| 기본 디자인 | 로그인 여부에 따라 UI 자동 전환. 미로그인 시 회원가입·로그인 버튼, 로그인 시 알림·내정보 메뉴 제공 |
| 기본 메뉴 | 스토브·스토어 메뉴 통합. 노출 여부를 옵션으로 제어 |
| 전체 메뉴 | 메뉴와 게임 목록 분리. 언어·테마 설정 지원 |
| 즐겨찾기·내정보 | 즐겨찾기·인기 게임 목록 제공. 고객센터·신고센터는 전체 메뉴로 이동 |
| 모바일 대응 | 하단 메뉴바 제공. 타이틀 설정 여부에 따라 로고 표시 방식 변경 |
| 서비스 GNB | 서비스명·알림·언어·테마·스토브 설치 버튼 등을 선택적으로 사용 |
서비스별 요구 사항은 별도 커스텀 영역에서 반영해요. GNB 자체를 수정하거나 다시 배포하지 않아도 서비스 UI를 확장할 수 있어요.

기본 디자인은 로그인 여부에 따라 자동으로 바뀌어요. 미로그인 시 회원가입·로그인 버튼을, 로그인 시 알림·내정보 메뉴를 제공해요.


기본 메뉴는 스토브·스토어 메뉴를 통합해 단순하게 구성했어요.

전체 메뉴는 게임 목록과 메뉴를 분리하고 언어·테마 설정을 함께 제공해요.

즐겨찾기는 즐겨찾기 기능과 인기 게임 목록을 제공하고, 내정보는 UI를 개선하며 고객센터·신고센터를 전체 메뉴로 옮겼어요.


모바일에서는 하단 메뉴바를 제공하며, 타이틀 설정 여부에 따라 로고 표시 방식이 달라져요. 왼쪽이 타이틀 미설정, 오른쪽이 타이틀 설정 화면이에요.


서비스 GNB는 스토브 서비스 외에도 사용할 수 있도록 다양한 옵션을 제공해요. 서비스 특성에 맞게 필요한 기능만 선택해요. 위가 기본 옵션, 아래가 서비스 옵션을 적용한 화면이에요.


설정 위치
ㆍ GNB 옵션: 메뉴·언어·테마·타이틀 노출 여부 설정
ㆍ 파트너스: 공통 GNB 관리 → 기본 메뉴 관리 / 전체 메뉴 관리 / 인기 게임 관리
GNB는 아래 우선순위로 노출 언어를 결정해요. 앞 단계에서 유효한 언어를 찾지 못하면 다음 단계로 넘어가요.
- URL 패스에 포함된 언어 정보 (예:
https://event.onstove.com/ko) —useLanguageCodeFromPath옵션이true일 때 적용 - 쿠키(
LOCALE)에 저장된 언어 정보 — URL 패스에 언어가 없으면 조회 후 리다이렉트 - 브라우저 언어 — 쿠키에 언어 정보가 없으면 서버는
Accept-Language, 브라우저는navigator.language참조 - 서비스 기본 언어 — 위에서 지원 언어를 찾지 못하면 각 프론트에 정의된 기본 언어 사용 (전체 웹 서비스 fallback은 영어)
GNB는 언어 변경 시 페이지 새로고침을 전제로 동작해요
언어 변경을 커스텀 처리하더라도 페이지가 새로고침되어야 GNB 언어 설정이 정상 반영돼요. customChangeLanguage를 true로 두면 언어 변경 시 GNB 커스텀 이벤트를 전달받아 직접 처리할 수 있어요.
customChangeLanguage를 true로 두면 언어 변경 시 쿠키를 바꾼 뒤 change-language 이벤트를 전달해요. false(기본)면 쿠키를 바꾼 뒤 useLanguageCodeFromPath가 true면 URL 언어 패스를 바꿔 이동하고, 아니면 페이지를 새로고침해요. 이벤트 처리 예시는 아래 [샘플 코드]의 이벤트 수신 탭을 참고해요.
mount()에 전달하는 옵션이에요. 서비스에 필요한 옵션만 선택해 지정해요.
| 옵션 | 필수 | 기본값 | 설명 |
|---|---|---|---|
logArea |
필수 | "" | 로그 수집용 로그 영역. 서비스 메인 주소를 기입 (예: https://store.onstove.com) |
useLanguageCodeFromPath |
선택 | false | true 시 URL Path의 언어코드를 감지해 언어 설정 |
serviceTitle.pc / .mobile |
선택 | "" | 스토브 로고 우측 서비스 타이틀 (HTML string). PC·모바일 개별 지정 |
widget.notification |
선택 | true | 알림 노출 여부 |
widget.stoveDownload |
선택 | false | 스토브 설치 버튼 노출 여부 |
widget.languageSelect |
선택 | true | 언어 선택 노출 여부 |
widget.themeSelect |
선택 | true | 테마 선택 노출 여부 |
widget.stoveMenu.active / .mobile |
선택 | false / true | 기본 메뉴 노출 여부. mobile은 active=true일 때만 적용 |
global.languageCoverages |
선택 | ['en','zh-cn','zh-tw','ja','ko'] | 언어 버튼으로 노출할 언어 목록. 기본 언어(en)가 없으면 자동 추가 |
global.defaultSelectedLanguage |
선택 | 'en' | 언어 정책상 사용할 언어가 없을 때 선택되는 기본 언어 |
global.customChangeLanguage |
선택 | false | true 시 언어 변경 후 커스텀 이벤트 전달 |
loginMethod.redirectCurrentPage |
선택 | true | 로그인 후 이동 위치. true는 현재 페이지, false는 account 도메인 기본 페이지 |
mode.theme.support / .default |
선택 | ["light"] / "light" | 지원 테마 목록과 기본 테마. light·dark 조합 지정 |
mode.mini |
선택 | false | 미니 버전(세로폭 감소, 높이 48px) 사용 여부 |
mode.layout |
선택 | "wide" | 레이아웃 방식. wide / fix |
mode.fixed |
선택 | true | 상단 고정 여부. 고정 시 스크롤에도 GNB가 상단 유지 |
userMenu.coupon |
선택 | true | 내정보 메뉴 내 쿠폰함 노출 여부 |
주요 옵션의 실제 노출 예시예요.
serviceTitle — 스토브 로고 우측 서비스 타이틀 (PC / 모바일)


widget — 알림 / 스토브 설치 / 언어 선택 / 테마 선택




widget.stoveMenu — 기본 메뉴 (PC / 모바일)


global.languageCoverages / mode.theme — 언어 목록 / 테마 설정 팝업


mode.layout / userMenu.coupon — 레이아웃 / 내정보 쿠폰함


서비스가 지원하는 테마 목록과 기본 테마를 mode.theme로 설정해요. 지원 조합에 맞게 아래처럼 구성해요.
// 다크·라이트 모두 지원
mode: {
theme: {
support: ["dark", "light"],
default: "dark" // default는 서비스 기획에 따라 설정
}
}
// 다크만 지원
mode: { theme: { support: ["dark"], default: "dark" } }
// 라이트만 지원
mode: { theme: { support: ["light"], default: "light" } }
테마 쿠키 유무와 지원 목록(support)에 따른 테마 적용 흐름이에요.



GNB 메뉴 영역은 지정된 커스텀 영역(customMenuArea)에서만 확장할 수 있어요. 기본 메뉴를 비활성화하고(widget.stoveMenu.active=false) GNB가 전달하는 마운트 이벤트를 수신해 서비스 메뉴를 직접 렌더링해요. 커스텀 영역 외에는 커스텀을 지원하지 않아요.
mount()의 반환값으로 제공되는 GNB 인스턴스의 updateOptions()로 런타임 중 옵션을 바꿀 수 있어요. 런타임 변경은 serviceTitle과 widget.stoveMenu만 적용되고, 나머지 옵션은 무시돼요.
마운트 이벤트로 커스텀 시점을 파악해요
ㆍ mounted: GNB 1depth 컨테이너가 마운트될 때 전달돼요. customMenuArea를 커스텀할 수 있어요.
ㆍ menu-mounted: GNB 1depth 메뉴 영역의 스켈레톤이 꺼지고 노출될 때 전달돼요.
트러블슈팅
| 상황 | 원인 | 조치 |
|---|---|---|
| GNB가 렌더링되지 않음 | 모듈 로드 전 mount() 호출 또는 잘못된 선택자 | 모듈 onload 이후 mount()를 호출하고 렌더링 요소의 선택자를 확인하세요. |
| 로그인/인증이 동작하지 않음 | 웹 서비스가 허용 도메인(onstove.com 계열)이 아님 | 도메인 연결 상태를 확인하고 기술PM에게 문의하세요. |
| 언어 변경이 반영되지 않음 | 페이지 새로고침 없이 커스텀 처리 | 언어 변경 후 페이지를 새로고침하거나 customChangeLanguage 이벤트 흐름을 확인하세요. |
| 커스텀 메뉴 영역이 비어 있음 | 마운트 이벤트 이전에 커스텀 영역 접근 | mounted/menu-mounted 이벤트를 수신한 뒤 customMenuArea를 사용하세요. |
| 런타임 옵션 변경이 적용되지 않음 | 런타임 미지원 옵션 변경 시도 | 런타임 변경은 serviceTitle·widget.stoveMenu만 지원. |
샘플 코드
GNB 모듈을 로드해 옵션과 함께 마운트하고, 마운트·언어·테마 이벤트를 수신하는 예제예요. 모듈 호스트 주소는 환경에 맞게 적용해 주세요.
<div id="stove-gnb-wrapper"></div>
<script defer>
(function () {
const script = document.createElement('script');
script.src = 'https://js-cdn.onstove.com/libs/common-gnb/latest/stove-gnb.js'; // 환경별 적용 필요
script.onload = () => {
if (window.StoveGnb) {
window.StoveGnb.mount('#stove-gnb-wrapper', {
logArea: 'https://도메인주소를입력해주세요',
useLanguageCodeFromPath: true, // URL 언어 패스 미사용 시 false
serviceTitle: {
pc: '',
mobile: '서비스 타이틀(모바일)'
},
widget: {
stoveMenu: {
active: true, // 기본 메뉴 비활성화 시 false
mobile: true
}
}
});
}
};
document.body.appendChild(script);
})();
</script>
로그인 URL 방식
GNB를 사용하지 않고 스토브 로그인 페이지를 직접 연동하는 방식이에요. 웹 서비스가 로그인 페이지 URL을 생성해 호출하고, 로그인 완료 후 발급되는 쿠키(토큰·국가·언어 정보 등)로 계정 로그인을 연동해요.
사전 준비
- 웹 서비스(공홈)의 도메인이
xxx.game.onstove.com형태여야 스토브 인증을 사용할 수 있어요. - 외부 인프라를 별도 구성하는 경우 SSL 인증서를 발급·설정해야 해요. (기술PM 발급)
- 유입 경로 식별용
inflow_path와game_no를 기술PM을 통해 발급받아야 해요. - 연동 테스트를 위해 웹에서 스토브 회원가입이 완료된 계정이 있어야 해요.
개발 흐름
파라미터를 포함한 스토브 로그인 페이지 URL을 생성해 호출하고, 로그인이 완료되면 redirect_url로 이동해요. 웹 서비스는 응답 쿠키에서 SUAT 등 토큰을 확인해 로그인 상태를 처리해요.
game_no·inflow_path·redirect_url을 쿼리 파라미터로 지정해 스토브 로그인 페이지 URL을 생성해요.redirect_url은 URL 인코딩해요.- 생성한 로그인 페이지 URL을 호출해요.
- 이용자가 스토브 로그인 페이지에서 로그인을 완료해요.
- 로그인 완료 후
redirect_url로 이동하며 인증 쿠키가 설정돼요. - 웹 서비스는 쿠키에서
SUAT(Web Access Token) 등을 확인해 로그인 상태를 처리해요.
| 파라미터 | 필수 | 예시 | 설명 |
|---|---|---|---|
game_no |
필수 | 45 | 입점 시 발급받은 게임 번호 |
inflow_path |
필수 | STOVE_GAMEID (대문자) | 이용자 유입 경로 식별값. 스토브 입점 시 기술PM 통해 발급 |
redirect_url |
필수 | https://test.game.onstove.com/ | 로그인 후 이동할 URL(URL 인코딩). xxxx.onstove.com 도메인만 허용 |
요청 형식 예시
https://accounts.onstove.com/login
?inflow_path={INFLOW_PATH}
&game_no={GAME_NO}
&redirect_url={REDIRECT_URL}
로그인이 완료되면 인증 쿠키가 설정돼요. 웹 서비스는 SUAT로 로그인 상태를 식별해요. SUAT 외에도 로그인 전·후에 따라 다양한 쿠키가 함께 전달돼요.
| 쿠키 | 설명 |
|---|---|
SUAT |
STOVE User Access Token. 인증된 사용자를 식별하는 Access Token |
| 로그인 전·후 부가 쿠키 | 언어·국가·규제·타임존 등 부가 정보 쿠키도 함께 발급. 아래 표 참고 |
트러블슈팅
| 상황 | 원인 | 조치 |
|---|---|---|
| 로그인 페이지가 열리지 않음 | 필수 파라미터(game_no·inflow_path·redirect_url) 누락 | 세 파라미터를 모두 포함하고 redirect_url을 URL 인코딩하세요. |
| 로그인 후 리다이렉트 실패 | redirect_url이 허용 도메인이 아님 | xxxx.onstove.com 도메인 범위로 주소를 지정하세요. |
| 인증 쿠키가 확인되지 않음 | 도메인 불일치 또는 SSL 미설정 | 서비스 도메인·SSL 설정을 확인하고 기술PM에게 문의하세요. |
| 유입 경로가 집계되지 않음 | inflow_path 미발급 또는 오기입 | 기술PM을 통해 발급받은 값을 대문자로 정확히 전달하세요. |
샘플 코드
파라미터를 지정해 스토브 로그인 페이지 URL을 생성해 호출하는 예제예요. 도메인은 환경에 맞게 적용해 주세요.
// 스토브 로그인 페이지 URL 생성 및 호출
function openStoveLogin({ gameNo, inflowPath, redirectUrl }) {
const base = "https://accounts.onstove.com/login"; // 환경별 적용 필요
const url = new URL(base);
url.searchParams.set("inflow_path", inflowPath); // 대문자
url.searchParams.set("game_no", gameNo);
url.searchParams.set("redirect_url", redirectUrl);
// URLSearchParams가 인코딩 처리
window.location.href = url.toString();
}
openStoveLogin({
gameNo: "45",
inflowPath: "STOVE_GAMEID",
redirectUrl: "https://test.game.onstove.com/"
});