최종 갱신 (KST)

← 일감 목록
T-110

로컬 게임 서버 여러 대가 경매장 하나를 공유

진우 New 우선순위 보통 목표 미정 · ⏳ 나중에

2026-10-06 later/로 뺐다 — 당분간 하지 않기로 했다 (사용자 결정). 할 때가 되면 루트로 되돌린다.

배경

각자 로컬 게임 서버를 쓰면서 경매장만 내 Docker 것을 함께 쓰는 조합이 필요하다 — 서로의 매물이 보여야 한다. T-109에서 떼어 냈다 (2026-10-02). 지금 경매장은 게임 서버 하나를 전제로 짜여 있어 게임 서버가 둘 이상 붙으면 다음이 깨진다:

무엇 문제
seller_id·buyer_id 게임 서버마다 SQLite가 따로라 계정 ID가 둘 다 1번부터 — 판매자를 구분할 수 없다
listing_id 게임 서버의 trade_id를 그대로 쓴다 — 서버끼리 겹치면 멱등 처리 때문에 남의 매물이 등록되지 않는다
FetchEvents·AckEvents 이벤트를 서버 구분 없이 준다 — 내 서버가 남의 취소·만료 이벤트를 가져가 지운다
판매 대금 정산 구매자의 게임 서버가 자기 DB에서 정산한다 — 판매자가 다른 서버면 판매자 골드를 넣을 방법이 없다

경매장 원칙은 유지한다 — 메인이 항상 호출자, 경매장은 메인을 부르지 않는다 (Server/AuctionProtocol/auction.proto).

할 일

  • [ ] auction.proto에 string server_id 추가 — 매물·판매자·구매자·이벤트를 (server_id, 기존 ID) 쌍으로 구분
  • [ ] 게임 서버 설정(appsettings 또는 환경변수)에 ServerId — 사람마다 정한다 (예: jinwoo, taewoong)
  • [ ] 경매장 DB 키를 (server_id, listing_id)로 · 기존 auction.sqlite3 이행
  • [ ] FetchEvents·AckEvents를 server_id별로 거른다
  • [ ] 정산 흐름 변경 — 구매자 서버는 구매자 골드만 차감, "판매됨" 이벤트를 판매자 서버가 FetchEvents로 가져가 골드 지급
  • [ ] 경매장 10060 외부 노출 + 최소한의 접근 제한 (공유 키 · VPN 한정 등)
  • [ ] Server/docs/경매장.md 갱신
  • [ ] 실측 — 두 PC의 로컬 게임 서버가 내 경매장에 붙어 서로 등록·구매하고, 판매자 쪽에 대금이 들어온다

완료 조건

로컬 게임 서버 두 대가 한 경매장에 붙어 서로의 매물을 사고팔 수 있고, 판매 대금이 판매자 서버에 정확히 들어간다. 계정 ID·trade_id가 겹쳐도 섞이지 않는다.

⚠️ 각자 로컬 서버라 치트로 만든 아이템·골드가 경매장을 통해 남의 서버로 흘러간다. 테스트 단계라 허용하지만, 실서비스 구조에서는 이 조합을 막는다.

막고 있는 것 / 선행 일감

  • T-109 — 경매장 Docker화 · 게임 서버의 경매장 주소 설정화

관련 커밋

  • 없음