05. 거래 (Trade)
상위 문서:
게임기획코어.md상태: 경제 골격 확정 · 즉시 판매 구현 완료 · 거래소(자원 수량 구매)·경매장(장비·캐릭터 즉시구매) 서버 구현 · 캐릭터·장비 즉시 판매(#47) (T-094 · T-091) · 수치는 테스트값 바뀌면 갱신:게임UI·게임기획코어·기획평가·아이템·우편·자원채취·작업슬롯진행 및 성장·캐릭터·퀘스트·해금
이 게임의 유일한 경쟁 축이자, 승패 조건이 없는 게임에서 장기 목표를 대신하는 시스템이다.
⚠️ 2026-08-01 대폭 갱신. 비어 있던 화폐 순환(faucet ↔ sink)이 확정됐다. 이전 상태는 "버는 길만 있고 쓰는 길이 없다"(R2 🔴)였다.
1. 확정 사항
| # | 항목 | 확정 내용 |
|---|---|---|
| 1 | faucet은 채취 하나뿐 | 재화가 새로 생기는 지점은 자원채취뿐이다. 예외는 운영 우편의 골드 첨부 하나 — 운영 판단으로 가끔 나가는 지급이라 상시 faucet이 아니다 |
| 2 | 골드화 경로 = 즉시 판매 · 거래소 판매 | → 3.1 |
| 3 | 거래 방식 = D안 (자유 거래 + 가격 밴드) | → 2장 |
| 4 | sink 3종 | 거래 수수료 · 슬롯 해금(골드) · 가챠 비용(골드) → 3.2 |
| 5 | 상점은 골드 상점 | 현금 상품을 두지 않는다. 유료 재화도 없다(다이아 폐지 2026-09-28) — 과금은 게임 밖(DLC · 스팀 마켓 수수료) |
| 6 | 퀘스트는 골드를 직접 주지 않는다 | 두 번째 faucet을 만들지 않는다 → 퀘스트 4장 |
| 7 | 슬롯 확장 = 골드 단독 | 계정 레벨 게이트는 폐기(2026-09-30 · #43) → 3.3 |
| 8 | 모든 아이템은 거래소 등록이 가능하다 | 예외를 두려면 Tradable 컬럼이 필요하다 |
| 9 | 자원은 거래소, 장비는 경매장 | 거래소는 원하는 수량을 최저가부터 산다(로스트아크식). 경매장은 매물 하나를 통째로 산다. 입찰은 두지 않는다 (2026-09-24) → 4장 |
| 10 | 등록비는 만료면 환급, 취소면 미환급 | 방치하다 만료돼도 손해가 없다(P3). 등록·취소를 반복하는 시세 교란만 비용을 문다 (2026-09-23) |
| 11 | 거래소에서 나오는 물건·대금은 전부 우편 | 구매한 물건 · 판매 대금 · 취소·만료 반환 → 우편 1장 |
골드 잔액(User.Gold)은 이미 구현돼 있다. 없던 것은 화폐가 아니라 버는 길과 쓰는 길이었다.
2. 거래 방식 — D안 확정
| 방식 | 설명 | 판정 |
|---|---|---|
| A. 자유 거래소 | 유저가 가격 지정, 최저가 매칭 | 봇·시세 조작·인플레 전부 발생 |
| B. 주문서(오더북) | 매수/매도 호가 매칭 | 방치형 규모에 과하다 |
| C. NPC 고정가 | 유저 간 직접 거래 없음 | "유저 간 경쟁"이 사라져 확정 기획 위반 |
| D. A + 가격 상하한 | 자유 거래 + 기준가 대비 밴드 제한 | ✅ 채택 |
D를 고른 이유: 확정 기획이 요구하는 "유저 간 경쟁"을 지키면서 조작을 구조적으로 억제한다. 게다가 하한은 즉시 판매가가 공짜로 만들어 준다(3.1) — 밴드 설계의 절반이 이미 풀린다.
3. 경제 구조
3.1 재화 흐름 (확정)
[faucet] 채취 ──→ 아이템 ──┬─→ 즉시 판매 ──────→ 골드 ──┐
├─→ 거래소 판매 ────→ 골드 ──┤
└─→ 캐릭터 먹이기 (자원 sink) │
↓
[sink] 거래 수수료 · 슬롯 해금(골드) · 가챠 비용
즉시 판매 — 낮은 등급의 출구
거래소 등록밖에 출구가 없으면 낮은 등급이 갈 곳이 없다. 아무도 사지 않아 인벤토리만 찬다.
| 가치 | 처분 |
|---|---|
| 낮음 (Common·Uncommon) | 즉시 판매 → 골드. 거래소에 올려도 팔리지 않는다 |
| 높음 (Rare~Mythic) | 즉시 판매 또는 거래소 등록 — 유저 간 경쟁의 대상 |
- 기준가는
Item.xlsx의BasePrice컬럼이다 → 아이템 5장. - 캐릭터·장비 개체도 즉시 판매된다 (2026-10-01 · #47). 판매가는
CharacterTable·EquipTable의BasePrice× 같은 비율. 착용 중인 장비 · 배치됐거나 장비를 낀 캐릭터 · 마지막 남은 캐릭터는 팔 수 없다. - 즉시 판매가 =
BasePrice의 100%다 (2026-09-02 확정). 값은Constants.xlsx의SellRatePermille(천분율, 1000 = 100%) 한 곳에 있다. - 즉시 판매가가 거래소 가격의 바닥이 된다. 누구도 즉시 판매가보다 싸게 올리지 않으므로 가격 하한이 자동으로 생긴다. 시세 조작 방어에 유리하다.
- ✅ 서버 구현 완료 (2026-09-02, T-028) —
C_ItemSellRequest/S_ItemSellResponse. 종류 목록을 한 번에 받고, 한 종류라도 모자라면 전부 거절한다. 인벤토리 차감과 골드 지급은 한 트랜잭션이다 — 갈라지면 아이템만 사라진다.
3.2 sink 3종 (확정)
즉시 판매는 골드 faucet이다. 버는 길을 열면서 쓰는 길을 안 열면 골드만 무한 누적된다.
| # | sink | 강도 | 성격 |
|---|---|---|---|
| ① | 거래 수수료 (등록비 + 판매 수수료) | 상시·완만 | 자전거래가 손해가 되도록 설계한다 |
| ② | 슬롯 해금(골드) — 잠긴 칸에서 직접 연다, 상점 품목이 아니다 (2026-09-16) | 강함 | 슬롯은 곧 재화 생성량의 배수다 → 3.3 · 해금 4.1 |
| ③ | 가챠 비용 — 골드 직접 | 지속 | 캐릭터 획득 경로 (2026-09-02 확정) → 캐릭터 5.1 · 장비 뽑기 3풀(2026-09-19) → 5.1.1 |
sink 없는 경제는 예외 없이 인플레로 붕괴한다. 게다가 방치형이라 띄워 둔 내내 faucet이 돈다. 세 개 중 어느 하나도 "나중에 붙이는 것"으로 미루지 않는다.
3.3 슬롯 확장 = 골드 단독 (2026-08-01 확정 · 2026-09-30 개정)
칸마다 골드로 산다. 처음에는 계정 레벨(상한) × 골드(구매)의 이중 게이트였으나, 2026-09-30 계정 레벨 게이트를 뺐다(#43).
| 항목 | 값 | 비고 |
|---|---|---|
| 시작 슬롯 | 2개 | 1개면 첫날에 "여러 개를 굴린다"는 이 게임의 질문이 보이지 않는다 |
| 상한 | 8개 | UI 목업이 8개를 상정 |
| 해금 | 칸마다 UnlockTable 행 — 골드 + 선행 칸. AccountLevel은 0(조건 없음)으로 확정 → 해금 4.1 |
유저의 해금 행동으로 연다 |
| 골드 값 | ✅ 8칸까지 약 한 달 곡선(3,000 → 10,000,000, 9cd5611) |
하루 8시간 가동 · 번 골드의 절반을 슬롯에 쓴다는 가정. 수치는 테스트값이다 |
왜 골드 단독인가 (2026-09-30):
| 이중 게이트를 둔 이유 | 다시 보니 |
|---|---|
골드만이면 골드 → 슬롯 → 골드 자기가속이 폭주한다 |
계정 레벨도 슬롯이 버는 경험치로 오른다 — 레벨 게이트는 자기가속을 끊지 못하고 늦출 뿐이다 |
- 속도 조절은 골드 곡선 하나로 한다 — 칸마다 약 10배씩 비싸진다.
- 외부 골드 유입(부계정)은 거래 최소 계정 레벨로 막는다 (일감 T-012).
⚠️ 슬롯 해금 골드 곡선은 경제 총량과 함께 잡는다 → 캐릭터 3.2 자기가속 루프.
3.4 봇·다계정 대응
방치형 + 거래소는 봇에게 이상적인 환경이다(조작 없이 재화가 생성된다).
| 위험 | 대응 |
|---|---|
| 다계정 파밍 | 계정당 채취 상한, 계정 생성 제한 |
| 시세 조작 | 가격 밴드(D안), 1인 판매 중 매물 상한(4장) · 검색 빈도 제한 |
| RMT | 거래 로그 감사, 이상 거래 탐지 |
| 자전거래 | 수수료를 자전거래가 손해가 되도록 설계 (3.2 ①) |
4. 거래소 · 경매장 (경매장 서버)
둘 다 메인 서버와 다른 프로세스(경매장 서버) 로 돈다. 메인이 재시작해도 매물은 그대로다.
서버 구조·장애 복구는 Server/docs/경매장.md — 여기는 플레이어가 겪는 규칙만 적는다.
4.1 거래소 — 자원 (로스트아크식 수량 구매)
| 동작 | 규칙 |
|---|---|
| 목록 | 자원 종류마다 한 줄 — 최저가 · 판매 중 수량 · 최근 거래가 · 전일 평균가. 분류(ItemType)·이름(클라가 TID로 바꾼다)으로 거른다 |
| 가격대 | 한 종류를 고르면 단가별 판매 중 수량(싼 순 10칸)을 본다 |
| 구매 | "N개, 개당 최대 P골드" — 여러 판매자의 매물을 최저가부터 채운다. 실제 낸 금액은 N×P보다 적을 수 있다. N개를 다 못 채우면 아무것도 사지 않는다(누가 먼저 샀거나 가격이 올랐다). 산 자원은 우편 한 통으로 온다 |
| 판매 | 매물은 일부씩 팔린다. 팔릴 때마다 그만큼의 대금(수수료 제외)이 우편으로 온다. 남은 수량은 계속 팔린다 |
| 취소·만료 | 누가 구매 중이면 취소할 수 없다. 남은 수량만 돌아온다. 만료면 등록비도 팔리지 않은 비율만큼 돌려준다 |
| 전일 평균가 | 한국 시간 자정 기준 어제 체결의 수량 가중 평균 |
4.2 경매장 — 장비 · 캐릭터 (즉시구매)
| 동작 | 규칙 |
|---|---|
| 검색 | 장비: 분류(EquipKind) · 이름 · 희귀도 · 인챈트 등급 · 인챈트 옵션 포함 · 단가 상한. 캐릭터: 이름 · 희귀도 · 단가 상한(분류 없음). 단가가 싼 순 |
| 판매자 | 매물 줄에 등록 순간의 닉네임이 보인다(2026-10-01 · #47) |
| 구매 | 매물 하나를 통째로 산다. 먼저 경매장에 닿은 요청이 이긴다. 장비는 인챈트까지, 캐릭터는 레벨·경험치까지 그대로 우편으로 온다 |
| 입찰 | 없다 (2026-09-24 결정) |
4.3 공통
| 동작 | 규칙 |
|---|---|
| 등록 | 자원은 종류·수량, 장비·캐릭터는 개체 하나. 등록하는 순간 인벤토리에서 빠지고 등록비가 나간다. 착용 중인 장비 · 슬롯에 배치됐거나 장비를 낀 캐릭터 · 마지막 남은 캐릭터는 올릴 수 없다 |
| 가격 | 단가로 정한다. 하한 = BasePrice(즉시 판매가 — 캐릭터는 CharacterTable.BasePrice), 상한 = 1조(절대값 — 2026-10-06 10조에서 낮춤, 그 전에는 하한 × 10) |
| 수량 | 자원은 한 번에 9,999개까지 올린다(2026-10-06). 보유량이 더 많으면 나눠 올린다 — 단가 상한과 한 쌍으로 총액을 묶는다 |
| 판매 대금 | 판매액 − 판매 수수료가 우편으로 온다. 판매자가 접속 중이 아니어도 된다 |
| 취소 | 물건은 우편으로 돌아오고 등록비는 돌아오지 않는다 |
| 만료 | 기간이 지나면 물건과 등록비가 우편으로 돌아온다 |
수치 (테스트값 — Constants.xlsx의 Auction* 행에서 바꾼다):
| 항목 | 값 |
|---|---|
| 단가 상한 | 1조 절대값(AuctionMaxUnitPrice — 2026-10-05 × 10 폐지 · 2026-10-06 10조 → 1조) |
| 한 번에 올리는 수량 상한 | 9,999개(AuctionMaxListingCount — 2026-10-06) |
| 등록비 | 총액의 1% (최소 1) |
| 판매 수수료 | 총액의 5% |
| 1인 판매 중 매물 상한 | 20건 |
| 등록 기간 | 48시간 |
| 검색 빈도 | 순간 5회 · 2초마다 1회 회복 |
위 수치와 즉시 판매가 비율(SellRatePermille)은 Constants.xlsx 에 있다 — 기획이 빌드 없이 바꾼다. 슬롯 확장 비용은 UnlockTable.
5. 서버 / 클라이언트 책임
| 책임 | 주체 |
|---|---|
| 등록·취소·구매 전 과정 | 서버 (전부) |
| 즉시 판매 정산 | 서버 |
| 잔액·재고 검증 | 서버 |
| 동시 구매 경합 처리 | 서버 (트랜잭션 필수) |
| 시세 계산 | 서버 |
| 목록·시세 차트 표시 | 클라이언트 |
거래는 실질 가치가 오가는 지점이다. 클라이언트 계산 결과를 어떤 경우에도 신뢰하지 않는다. 동시 구매(같은 매물을 두 명이 동시에)는 반드시 트랜잭션으로 막는다.
6. 결정 필요 (Open Questions)
- 거래 수수료율은? (등록비 / 판매 수수료 각각) — 테스트값 1% / 5%로 돌고 있다(4장)
가격 밴드의 상한 배수는?— 배수 폐지, 절대 상한 1조(2026-10-05 태웅 10조 → 2026-10-06 진우 1조 · 한 번에 9,999개). x10은 희귀품의 값을 막았다. 하한(즉시 판매가)만 남는다 — 시세 조작 대응은 매물 상한·검색 빈도 제한이 맡는다- 1인 판매 중 매물 상한 · 등록 기간은? — 테스트값 20건 · 48시간
- 시세를 유저에게 공개하는가? (차트 제공 여부) — 체결 기록은 메인
t_auction_trade에 남아 있어 나중에 뽑을 수 있다 - 상점에서 파는 물건은? 골드 상점 방향은 잡혔으나 지금 살 수 있는 것이 하나도 없다 — 슬롯 해금은 T-038, 가챠는 티켓 대신 골드 직접 결제(T-027)로 바뀌었다. 상점의 구매 쪽은 팔 물건이 생길 때 만든다
- 거래 불가 아이템이 있는가? →
Tradable컬럼 · 아이템 - 수익화(BM)와 거래소가 연결되는가? 연결 시 확률형 아이템 고지 의무 검토 필요
해소됨 (2026-09-24):
- 로스트아크식 거래소 — ✅ 자원은 수량 구매(최저가부터 · 전부 아니면 없음) + 시세(최근가·전일 평균). 입찰은 두지 않는다 (T-091)
해소됨 (2026-09-23):
- 거래소 구현 — ✅ 경매장 서버 · 즉시구매 · 매물 통째 구매 · 등록비 만료 환급/취소 미환급 (T-094)
해소됨 (2026-09-02):
- 즉시 판매가 비율 — ✅
BasePrice의 100% (3.1). 서버 상수 한 곳에 둔다- 즉시 판매 구현 — ✅ 서버 완료 (T-028). 클라 UI는 T-032
해소됨 (2026-08-01):
- 거래 방식 — ✅ D안(자유 거래 + 가격 밴드)
- 화폐 sink — ✅ 3종 확정 (거래 수수료 · 슬롯 해금 · 가챠 비용)
- 골드 획득 경로 — ✅ 즉시 판매 + 거래소 판매. 채취가 유일한 faucet
- 상점의 정체 — ✅ 골드 상점 (현금 상품 없음)
- 슬롯 확장 수단 — ✅ 골드 단독 (2026-09-30 · #43 — 이전: 레벨 × 골드 이중 게이트)