최종 갱신 (KST)

← 일감 목록
T-109

서버 2개(게임·경매장)를 Docker로 띄워 친구들이 내 서버에 접속

진우 New 우선순위 높음 목표 미정 · ⏳ 나중에

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

배경

회차 회의(토 22:00)에서 각자 로컬 서버가 아니라 한 서버에 함께 붙어 플레이해야 거래소·경매장 같은 공유 기능을 확인할 수 있다. 지금은 서버를 내 PC에서 직접 실행하고, 클라는 127.0.0.1에만 붙는다.

현재 상태 (2026-10-02):

  • Docker 파일이 저장소에 없다.
  • WSGameServer — TCP 10050 리슨 (Server/WSGameServer/Network/NetworkManager.cs)
  • AuctionServer — gRPC 127.0.0.1:10060 리슨 (Server/AuctionServer/appsettings.json) — 게임 서버가 붙는 서버
  • 클라 접속 주소가 127.0.0.1:10050으로 박혀 있다 (Assets/Scripts_Server/Network/MikaNetwork.Unity/NetworkManager.cs)
  • DB는 SQLite 파일 (Server/Shared/game.sqlite3) + .bytes 데이터

범위 — 이번 회차는 "모두 내 Docker 게임 서버에 붙기"

  • 이 일감: 게임 서버·경매장 둘 다 내 Docker · 친구 클라가 내 게임 서버에 붙는다.
  • 각자 로컬 게임 서버 + 내 경매장 공유 조합은 T-110으로 뗐다 (2026-10-02) — listing_id·이벤트·판매 대금 정산이 게임 서버 하나를 전제로 짜여 있어 프로토콜·정산 흐름을 바꿔야 한다.
  • 다만 T-110이 바로 이어받을 수 있게 경매장 주소는 이번에 설정값으로 빼 둔다.

할 일

  • [ ] 게임 서버 리슨 포트 10050 → 30329 (2026-10-02 결정 — 로컬·Docker·외부 모두 같은 번호) · 서버 테스트·더미 클라·문서의 10050도 함께
  • [ ] WSGameServer·AuctionServer 각각 Dockerfile (.NET 10 멀티스테이지 빌드)
  • [ ] docker-compose.yml — 두 서비스를 한 네트워크로 묶는다
    • 게임 서버만 호스트에 노출 — 30329:30329 (안팎 같은 번호), 경매장 10060은 compose 내부 전용
    • 경매장 리슨 주소 0.0.0.0
    • 게임 서버의 경매장 주소를 설정값으로 뺀다 — compose 안에서는 서비스 이름 (T-110 대비)
  • [ ] SQLite DB·Shared/Data를 볼륨으로 마운트 — 컨테이너를 다시 만들어도 데이터가 남게
  • [ ] 개발 DB와 리모트 DB의 스키마를 맞추는 법 (2026-10-02 결정) — 지금은 game.sqlite3를 git에 올리고 migrations/*.sql을 손으로 돌려, 어느 DB에 어디까지 적용됐는지 기록이 없다
    • 스키마 기준을 SQL로 — schema.sql(초기 전체) + 순번 붙인 migrations/ · DB 파일은 결과물
    • 게임 서버가 시작할 때 PRAGMA user_version을 보고 남은 마이그레이션을 자동 적용 (경매장 AuctionStore.cs와 같은 방식)
    • 적용 전 DB 파일을 백업 복사
    • game.sqlite3를 git에서 뺀다 — 없으면 schema.sql+마이그레이션으로 새로 만든다
    • 유저 데이터는 개발·리모트가 달라도 된다 — 개발 DB는 지워도 되고, 리모트는 볼륨에 남겨 마이그레이션으로만 앞으로 간다. 개발용 테스트 계정이 필요하면 시드 SQL을 개발에서만
    • 규칙: 데이터를 지우는 마이그레이션(DELETE)은 리모트에 친구 계정이 있으니 공지하고 돌린다 — Server/CLAUDE.md·sqlite-sql-creator에 반영
  • [ ] 클라 접속 위치를 고를 수 있게 한다 (NetworkManager.cs의 127.0.0.1:10050 하드코딩 제거) · 포트는 30329
    • 에디터에서 접속할 곳을 고른다 — 프리셋(로컬 · 진우 서버) + 직접 입력. 개인 선택이라 EditorPrefs에 저장해 커밋되지 않게 한다. 기본값은 로컬
    • 빌드는 공용 설정(ScriptableObject 등)의 주소로 붙는다 — 회차 빌드는 진우 서버
  • [ ] 외부 접속 경로 — 공유기 포트포워딩(30329) + 방화벽 허용, 또는 Tailscale 등 VPN 중 하나로 정한다
  • [ ] 실측 — 친구 PC 클라 → 내 Docker 게임 서버 · 로그인 · 채취 · 경매장 등록/구매
  • [ ] 띄우는 법·주소 바꾸는 법을 Server/docs/에 짧게 남긴다

완료 조건

docker compose up 한 번으로 두 서버가 뜨고, 261010 회차 클라 빌드로 친구 PC에서 내 서버에 접속해 로그인·채취·경매장 등록/구매가 된다. 컨테이너를 재시작해도 계정·매물 데이터가 남아 있고, 스키마가 바뀐 서버로 갈아 끼우면 리모트 DB가 자동으로 마이그레이션된다.

막고 있는 것 / 선행 일감

  • 없음 — 클라 접속 주소 코드는 Scripts_Server라 서버 쪽에서 처리한다. 클라 빌드 설정에 손대야 하면 태웅에게 알린다.

관련 커밋

  • 없음