강화 확률, 정말
더 이상 문제는 없을까?
공지된 숫자가 실제로 그대로 나오고 있는지, 우리끼리 한번 직접 세어보려고 해요. API Key 하나만 있으면 참여 끝.
01 · Why
왜 이걸 하고 있냐면.
넥슨이 공개하는 확률은 “전체 평균” 하나뿐이에요. 큐브 레어→에픽 몇 퍼센트, 스타포스 17성 성공 몇 퍼센트 — 이게 끝입니다.
The Real Question
근데 진짜 궁금한 건 그게 아니잖아요.
- · 이벤트 기간에도 확률이 똑같나요?
- · 서버마다, 시간대마다 똑같나요?
- · 점검 직후 1시간은? 특정 레벨 구간은?
이게 조건부 확률이에요. 전체 평균만 맞으면 상황별로 숫자가 어떻게 움직이든 공지 위반이 아닙니다. 그리고 어디에도 공개돼 있지 않아요.
그래서 만들었습니다. 각자 가진 Open API 데이터를 모아서, 공지된 평균이 맞는지 + 상황별로 쪼갰을 때도 일관적인지까지 같이 세어보는 거예요.
의심하자는 게 아니라, 같이 확인하자는 거예요.
02 · How
어떻게 굴러가냐면.
Key 한 번 붙여넣는 그 순간 계정의 공개 기록을 한꺼번에 받아서 저장해요. Key 자체는 저장하지 않습니다. 목표 표본이 쌓이면 수집된 기록을 집계해 분석·공개합니다.
Key 한 번만 사용
넥슨 Open API Key 를 붙여넣으면 서버가 그 순간 공개 기록을 전부 가져옵니다. Key 자체는 서버에 수집하지 않습니다.
공개 기록 저장
스타포스·큐브·잠재 이력, 캐릭터당 스냅샷 26종(스탯·장비·유니온·랭킹 등), 길드 정보를 DB 에 저장합니다.
통계 검증
전체 데이터로 공지된 확률이 맞는지, 상황별로 쪼갰을 때도 일관적인지 통계적으로 검증합니다.
결과 공개
데이터와 분석 코드를 통째로 공개해서 누구나 재검증할 수 있게 합니다.
03 · Data
뭘 가져오고, 뭘 저장하냐면.
What this Key can do
이 Key 는 조회 전용(read-only)이에요. 본인 계정의 공개 정보만 읽을 수 있고, 아이템 이동/결제/로그인 같은 건 애초에 불가능합니다.
넥슨 계정 로그인 토큰과 완전히 분리된 별도 Key 입니다. 마음이 불편하시면 openapi.nexon.com 에서 언제든 폐기하실 수 있어요.
Nexon Open API endpoints we call
등록 시 서버가 호출하는 엔드포인트 전부예요. 전부 넥슨이 공개해 둔 조회 전용 API 입니다.
DB 에 저장되는 것
- • 계정 식별자 (account_id)
- • 캐릭터 메타 (ocid, 이름, 월드, 레벨, 직업)
- • 스냅샷 26종 (스탯/장비/유니온/랭킹/…)
- • 강화 이력 3종 (스타포스/큐브/잠재)
- • 길드 스냅샷
DB 에 저장되지 않는 것
- • API Key 자체 (서버에 수집하지 않음)
- • 실명·이메일·전화번호·로그인 토큰
- • IP·User-Agent·브라우저 지문 (rate limit 처리용으로 메모리에 잠깐 들고 있다가 버림, DB 영구 저장 없음)
- • 개인 메모·채팅·친구 관계 같은 사교 정보
서버는 Key 를 수신하자마자 Nexon Open API 를 차례로 호출하고, 받아온 공개 기록만 DB 에 기록합니다. Key 자체는 서버에 수집하지 않습니다.
04 · Starforce PnL
손익은 어떻게 계산하냐면.
결과 화면의 스타포스 손익 대시보드가 쓰는 계산 방식이에요. 복잡해 보이지만 핵심은 “이 한 번의 시도가 기대값 대비 얼마나 벌었거나 잃었는가” 하나입니다.
PnL Formula
스타포스 시도 한 건의 손익은 이렇게 정의해요. 단순히 “성공 했냐” 가 아니라 자산 가치 변화까지 같이 봅니다.
여기서 C[s] 는 “0성에서 s성까지 올리는 데 드는 기대 메소” 예요. 즉 s성짜리 아이템 하나의 “재구축 비용” 이고, 이게 이 프로젝트가 말하는 “자산 가치” 입니다.
How C[s] is computed
C[s] 는 2025-04-01 이후의 공식 성공/유지/파괴 확률을 그대로 써서 재귀적으로 구합니다. 시뮬레이션이 아니라 닫힌 형태의 기대값 계산이에요. 이벤트 조합(할인·파감 O/X)마다 테이블을 따로 만들어 두고, 시도마다 그 순간 이벤트 상황에 맞는 걸 씁니다. 노작값(boom cost)은 일반 서버 시세 기준이며, 서버 카테고리별 탭에서도 동일한 값을 사용합니다.
Boom cost (노작값)
파괴 손익을 계산하려면 “이 아이템이 터졌을 때 다시 하나 구하는 평균 비용”이 필요해요. 경매장 시세·노작 비용·원가를 종합해 아이템별로 경험값을 박아두고 있습니다.
- · 광휘는 1000억대, 칠흑은 15~50억, 여명은 500만~1억 수준으로 세팅.
- · 에테르넬은 부위별로 상급(글러브/슈즈/케이프 20억)과 중급(상의/하의/모자/숄더 2억) 을 나눠서 매칭합니다.
- · 아케인셰이드·앱솔랩스·루타비스 등 직업별로 이름이 다른 계열은 prefix 매칭으로 일괄 적용합니다.
현재 노작값은 일반 서버 시세 기준으로 통일되어 있어요. 리부트·스페셜 등 서버마다 시세가 다를 수 있어서, 결과 화면의 손익 테이블에서 아이템별 노작값을 직접 수정할 수 있어요. 수정하면 해당 아이템의 기대값 테이블 C[] 도 같이 재계산돼서 전체 손익이 즉시 갱신됩니다.
파괴방지(safeguard) 사용 여부는 아이템·성 구간별로 기대값이 최소가 되는 최적 조합을 미리 계산해서 적용합니다.
Supported items
현재 손익 계산이 지원되는 장비 목록이에요. 여기 없는 장비는 결과 화면의 손익 집계에서 자동으로 제외됩니다 (표본 오염 방지). 신규 장비 추가 요청은 문의 메일로 보내주세요.
광휘 · 3종
| 아이템 | Lv | 노작값 |
|---|---|---|
| 죽음의 맹세 | 250 | 1200억 |
| 근원의 속삭임 | 250 | 1000억 |
| 황홀한 악몽 | 250 | 1000억 |
칠흑 · 7종
| 아이템 | Lv | 노작값 |
|---|---|---|
| 컴플리트 언더컨트롤 | 200 | 300억 |
| 이라333 | 160 | 50억 |
| 거대한 공포 | 200 | 50억 |
| 몽환의 벨트 | 200 | 40억 |
| 마력이 깃든 안대 | 160 | 30억 |
| 커맨더 포스 이어링 | 200 | 20억 |
| 루즈 컨트롤 머신 마크 | 160 | 15억 |
여명 · 4종
| 아이템 | Lv | 노작값 |
|---|---|---|
| 트와일라이트 마크 | 140 | 6,000만 |
| 여명의 가디언 엔젤 링 | 160 | 1,000만 |
| 에스텔라 이어링 | 160 | 1,000만 |
| 데이브레이크 펜던트 | 140 | 500만 |
악세 · 2종
| 아이템 | Lv | 노작값 |
|---|---|---|
| 플라즈마 하트 | 130 | 15억 |
| 마이스터링 | 140 | 2,000만 |
보장 · 13종
| 아이템 | Lv | 노작값 |
|---|---|---|
| 도미네이터 펜던트 | 140 | 7억 |
| 블랙빈 마크 | 135 | 8,000만 |
| 파풀라투스 마크 | 145 | 2,500만 |
| 실버블라썸 링 | 110 | 100만 |
| 가디언 엔젤 링 | 160 | 100만 |
| 분노한 자쿰의 벨트 | 150 | 80만 |
| 데아 시두스 이어링 | 130 | 70만 |
| 아쿠아틱 레터 눈장식 | 100 | 30만 |
| 응축된 힘의 결정석 | 110 | 20만 |
| 골든 클로버 벨트 | 140 | 20만 |
| 로얄 블랙메탈 숄더 | 120 | 10만 |
| 카오스 혼테일의 목걸이 | 120 | 0 |
| 매커네이터 펜던트 | 120 | 0 |
에테르넬 · 에테르넬 계열 (Lv 250)
에테르넬 계열 — 부위별 노작값:
아케인 · 아케인셰이드 계열 (Lv 200)
아케인셰이드 계열 — 노작값 500만
앱솔 · 앱솔랩스 계열 (Lv 160)
앱솔랩스 계열 — 노작값 100만
아스트라 · 아스트라 계열 (Lv 200)
아스트라 계열 — 노작값 10억
루타비스 · 4종 계열 (Lv 140)
이글아이 계열 — 노작값 100만
트릭스터 계열 — 노작값 100만
하이네스 계열 — 노작값 100만
파프니르 계열 — 노작값 100만
05 · Open Source
결과는 다 풀 거예요.
목표 표본이 쌓이면 분석 코드와 데이터셋을 함께 공개합니다. 동일 입력으로 동일 결과가 나와야 분석이 의미를 가지기 때문이에요.
분석 코드 — GitHub
집계 스크립트, 통계 검증, 시각화까지 전부 GitHub 에 올립니다. 같은 데이터 + 같은 코드 = 같은 결과가 나와야 한다는 게 포인트예요.
데이터셋 — Hugging Face
수집된 이벤트 데이터는 Hugging Face Datasets 에 올려서 load_dataset(...) 한 줄로 불러올 수 있게 합니다. 강화 시도·성공 여부·시점 같은 실제 이벤트를 손대지 않아야 재검증이 가능해요.
06 · Thanks
도움 주신 분들.
최근에 Key 를 등록해 주신 분들이에요. 이 분들 덕분에 표본이 한 명씩 늘고 있어요.