게임 4개 원래 이름으로, .5 + NPMplus 배포 구성
- 보석 상인 → 스플렌더, 벽 쌓기 길찾기 → 쿼리도, 숫자 타일 → 루미큐브, 주사위 땅따먹기 → 부루마불 - deploy/docker-compose.proxy.yml: Caddy 없이 앱만(.5:2970), HTTPS·헤더는 NPMplus - deploy/npmplus-advanced.conf: Caddyfile과 같은 보안 헤더 - 문서: 2026-10-06 결정, 배포 7절 (e2e 구십구 0 카드 방향 버튼 반영 포함) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -53,6 +53,23 @@ deploy/
|
||||
## 6. 정해야 할 것 (사용자 결정 필요)
|
||||
| 항목 | 선택지 | 기본 제안 |
|
||||
|---|---|---|
|
||||
| 서버 위치 | 이 호스트 / .5 Docker 호스트 / 외부 VPS | 개발 중에는 이 호스트에서 테스트, 공개용은 사용자 결정 |
|
||||
| 서버 위치 | 이 호스트 / .5 Docker 호스트 / 외부 VPS | **.5로 결정(2026-10-06)**, 7절 |
|
||||
| 도메인 | `game.tkrmagid.kr` (확정) | 모든 기능 완성 후 DNS 연결 |
|
||||
| 디스코드 앱 | 개발자 포털에서 생성 → client ID/secret, Redirect URI 등록 | 도메인 정해진 뒤 |
|
||||
| 디스코드 앱 | 개발자 포털에서 생성 → client ID/secret, Redirect URI 등록 | **생성됨(2026-10-06)**, 값은 .5의 `deploy/.env` |
|
||||
|
||||
## 7. 실제 배포: .5 Docker 호스트 + NPMplus (2026-10-06)
|
||||
.5(192.168.10.5)는 80/443을 쓰지 않고, 집 공인 IP의 80/443은 192.168.10.3의 NPMplus가 받는다(다른 tkrmagid.kr 사이트와 같은 방식).
|
||||
그래서 Caddy 없이 앱만 띄우고 HTTPS·보안 헤더는 NPMplus가 맡는다.
|
||||
|
||||
```
|
||||
인터넷 → game.tkrmagid.kr(211.213.11.141) → NPMplus 192.168.10.3:443 → 192.168.10.5:2970 → app:3000
|
||||
```
|
||||
|
||||
- 코드: `root@192.168.10.5:/root/other/joke-app` (Gitea `tkrmagid/joke-app` clone)
|
||||
- 설정: 같은 곳 `deploy/.env` (권한 600, `APP_PORT=2970`, `SESSION_SECRET`은 서버에서 생성)
|
||||
- 실행: `cd /root/other/joke-app/deploy && docker compose -f docker-compose.proxy.yml up -d --build` (프로젝트 이름 `joke-app`, 볼륨 `joke-app_app-data`)
|
||||
- NPMplus 프록시 호스트 `game.tkrmagid.kr` → `http://192.168.10.5:2970`, WebSocket 허용. Advanced 칸에는 `deploy/npmplus-advanced.conf`(CSP 등 Caddyfile과 같은 헤더)를 넣는다.
|
||||
- 인증서: DNS에 `game` 레코드(`CNAME tkrmagid.kr` 또는 `A 211.213.11.141`)가 생긴 뒤 NPMplus에서 Let's Encrypt 인증서를 받고 Force SSL·HSTS·HTTP/2를 켠다.
|
||||
- 업데이트: `git pull && docker compose -f docker-compose.proxy.yml up -d --build`
|
||||
- 확인: `curl http://192.168.10.5:2970/healthz`, `curl -I https://game.tkrmagid.kr/`
|
||||
|
||||
|
||||
@@ -68,6 +68,7 @@
|
||||
E2E: 달무티 4인 1라운드 → 세금 교환 → 2라운드, 보석 상인 10점 한 판, 벽 쌓기 길찾기 한 판(길 막는 벽 거절 확인),
|
||||
라스베가스 3라운드 한 판, 바퀴벌레 포커 3인 한 판, 구십구 3인 한 판(PC 방장 + 휴대폰).
|
||||
사용자 결정 대기: '바퀴벌레 포커'·'구십구' 이름 유지 여부, 보석 상인 원작 카드 수치 유지 여부(각 문서 §12).
|
||||
→ **2026-10-06 결정**: 원래 이름으로 표시(스플렌더·쿼리도·루미큐브·부루마불), 스플렌더 카드 수치는 원작 그대로. 구십구는 코리아보드게임즈 공식 상품 페이지의 규칙 설명대로 맞춤(`games/ninety-nine.md` §1).
|
||||
|
||||
## M8. 파티 게임
|
||||
- 도블, 그림 맞히기(붓질 스트리밍), 마피아(채팅 채널).
|
||||
|
||||
@@ -9,11 +9,18 @@
|
||||
- 화면은 **PC 버전 중심**으로 만든다(휴대폰은 접어서 지원).
|
||||
- 게임 규칙 기본값은 관리자 사이트에서 모두 바꿀 수 있으므로, 3절의 기본안은 "처음 값"이다.
|
||||
|
||||
## 0-1. 확정된 결정 (2026-10-06)
|
||||
- 일반 이름으로 만들었던 게임 4개를 원래 이름으로: 보석 상인 → **스플렌더**, 벽 쌓기 길찾기 → **쿼리도**, 숫자 타일 → **루미큐브**, 주사위 땅따먹기 → **부루마불**.
|
||||
- 스플렌더 카드 수치: 원작 그대로.
|
||||
- 구십구: 공식 규칙이 있으면 그것으로, 없으면 알아서. → 코리아보드게임즈 공식 상품 페이지의 규칙 설명 이미지로 맞춤. 공개되지 않은 특수 카드 장수는 각 4장으로 정함(`games/ninety-nine.md` §1).
|
||||
- 서버: **.5 Docker 호스트**(192.168.10.5:2970), 앞단은 기존 NPMplus(192.168.10.3)가 HTTPS를 맡는다(`11-deployment-ops.md` 7절).
|
||||
- 디스코드 앱 생성 완료(Client ID `1557009917641105499`). Secret은 서버 `.env`와 호스트 비밀 저장소에만 둔다.
|
||||
|
||||
## 1. 운영 (진행에 꼭 필요)
|
||||
| # | 항목 | 기본안 | 필요한 것 |
|
||||
|---|---|---|---|
|
||||
| 1 | 서버 위치 | 도메인은 game.tkrmagid.kr 확정. 완성 후 연결 | 공개 서버 위치(이 호스트 / .5 Docker 호스트 등)와 DNS 연결 시점 |
|
||||
| 2 | 디스코드 로그인 | 게스트만으로 먼저 개발. **관리자 사이트는 디스코드 로그인이 있어야 들어갈 수 있다** | 디스코드 개발자 포털에서 앱 생성 → Client ID, Client Secret, Redirect URI(`https://game.tkrmagid.kr/api/auth/discord/callback`) 등록 |
|
||||
| 1 | 서버 위치 | **결정됨(2026-10-06)**: .5 Docker 호스트 + NPMplus | DNS에 `game` 레코드 추가(사용자) |
|
||||
| 2 | 디스코드 로그인 | **결정됨(2026-10-06)**: 앱 생성, 서버 `.env`에 반영. **관리자 사이트는 디스코드 로그인이 있어야 들어갈 수 있다** | 개발자 포털 OAuth2 → Redirects에 `https://game.tkrmagid.kr/api/auth/discord/callback` 등록 확인 |
|
||||
|
||||
## 2. 정책
|
||||
| # | 항목 | 기본안 |
|
||||
@@ -36,4 +43,4 @@
|
||||
| 원카드 | 2→2장, A→3장, ♠A→5장, 조커 5/7장, 20장이면 파산 | 색깔 카드 모드 |
|
||||
| 할리갈리 | 마지막 1명 남을 때까지(10분 제한) | 원작 종료 규칙 |
|
||||
| 그림 맞히기 | 한 턴에 여러 명이 맞힐 수 있음(먼저 맞힐수록 높은 점수) | 한 명만 맞히기 |
|
||||
| 구십구 | 공식 규칙서를 온라인에서 확인하지 못해 일부를 추정해 기본값으로 둠 | 클래식 99 규칙. 가지고 있는 실물 규칙서 사진이 있으면 정확히 맞출 수 있음 |
|
||||
| 구십구 | 코리아보드게임즈 공식 규칙(5장씩, 인원별 시작 숫자, 0 카드는 방향 유지·반대 선택). 특수 카드 장수만 추정(각 4장) | 클래식 99 규칙, 목숨(하우스 룰) |
|
||||
|
||||
@@ -21,17 +21,17 @@
|
||||
| `yut` | 윷놀이 | 개인 2~4, 팀전 2팀 최대 8 | 명절 국민 게임 | M4 |
|
||||
| `one-card` | 원카드 (+ 색깔 카드 모드) | 2~9 (색깔 카드 2~10) | 판매 2위(우노/원카드) | M4 |
|
||||
| `gostop` | 고스톱 / 맞고 | 2~5 (맞고 2, 고스톱 3, 광팔기 4~5) | 한국 대표 화투 게임 | M5 |
|
||||
| `rummikub` | 숫자 타일(루미큐브 방식) | 2~4 | 판매 3위, 카페 2위 | M4 |
|
||||
| `rummikub` | 루미큐브 | 2~4 | 판매 3위, 카페 2위 | M4 |
|
||||
| `davinci-code` | 다빈치 코드 | 2~4 | 카페 1위, 판매 6위 | M4 |
|
||||
| `yacht` | 요트 다이스 | 1~8 | 카페 7위, 쉬움 | M4 |
|
||||
| `halli-galli` | 할리갈리 | 2~6 | 판매 1위(실시간 반응) | M6 |
|
||||
| `marble` | 주사위 땅따먹기(부루마블 방식) | 2~4 | 판매 9위, 국민 게임 | M6 |
|
||||
| `marble` | 부루마불 | 2~4 | 판매 9위, 국민 게임 | M6 |
|
||||
|
||||
## 3. 3순위: 보드게임카페·파티 인기
|
||||
| id | 이름 | 인원 | 마일스톤 |
|
||||
|---|---|---|---|
|
||||
| `dalmuti` | 달무티 | 4~8 | M7 |
|
||||
| `splendor` | 보석 상인(스플렌더 방식) | 2~4 | M7 |
|
||||
| `splendor` | 스플렌더 | 2~4 | M7 |
|
||||
| `quoridor` | 쿼리도 | 2, 4 | M7 |
|
||||
| `las-vegas` | 라스베가스 | 2~5 | M7 |
|
||||
| `cockroach-poker` | 바퀴벌레 포커 | 2~6 | M7 |
|
||||
@@ -53,4 +53,4 @@
|
||||
| 5초 준다, 갈팡질팡 | 말로 하는 파티 게임(음성 필요) |
|
||||
|
||||
## 5. 상표·이름 표시 (확정)
|
||||
친구끼리만 쓰는 사이트이므로 **원래 상표명을 그대로 쓴다**(루미큐브, 우노, 뱅!, 스플렌더, 할리갈리, 다빈치 코드, 부루마블 등). 표시 이름은 관리자 사이트에서 언제든 바꿀 수 있다(`14-admin.md` 4절). 카드·화투·타일 그림은 계속 직접 만든 SVG를 쓴다.
|
||||
친구끼리만 쓰는 사이트이므로 **원래 상표명을 그대로 쓴다**(루미큐브, 우노, 뱅!, 스플렌더, 할리갈리, 다빈치 코드, 부루마불, 쿼리도 등). 표시 이름은 관리자 사이트에서 언제든 바꿀 수 있다(`14-admin.md` 4절). 카드·화투·타일 그림은 계속 직접 만든 SVG를 쓴다.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# 세계 여행 땅따먹기 (`marble`)
|
||||
# 부루마불 (`marble`)
|
||||
|
||||
> 마일스톤: M6 · 인원: 최소 2 ~ 최대 4명 · 예상 시간: 약 30~50분(기본 20라운드 제한) · 난이도: 쉬움~보통
|
||||
|
||||
@@ -345,6 +345,7 @@ interface MarbleResult {
|
||||
- Wikipedia "Monopoly (game)"(원형 장르, 파산·매각 규칙 참고): https://en.wikipedia.org/wiki/Monopoly_(game)
|
||||
|
||||
## 12. 메모 (상표·법적 주의 등)
|
||||
- **표시 이름(2026-10-06 확정)**: 친구끼리 쓰는 사이트라 원래 이름 "부루마불"으로 표시한다(`13-decisions.md` 0절). 아래 상표 메모는 공개 서비스로 바꿀 때를 위한 참고로 남긴다.
|
||||
- "부루마불"은 씨앗사, "모두의마블"은 넷마블, "Monopoly"는 Hasbro의 상표다. 화면·광고에 쓰지 말고 표시 이름은 자체 명칭(후보: "세계 여행 땅따먹기", "주사위 부자 여행", "지구 한 바퀴")으로 한다. "황금열쇠"라는 카드 이름도 부루마불을 강하게 연상시키므로 "행운카드"로 쓴다.
|
||||
- 판 배치·가격·카드는 모두 자체 설계이며 원작의 수치·카드 문구를 옮기지 않았다. 도시 이름은 실제 지명이라 자유롭게 쓸 수 있다. 원작의 우주선 이름(콜롬비아호 등) 대신 "우주센터"를 쓴다.
|
||||
- 사행성 주의: 돈은 방 안에서만 쓰는 가상 화폐로 저장·이월·환전이 없다. 실제 돈·상품 연동 금지. 규칙 보기에 명시한다.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# 벽 쌓기 길찾기 (쿼리도 방식) (`quoridor`)
|
||||
# 쿼리도 (`quoridor`)
|
||||
|
||||
> 마일스톤: M7 · 인원: 최소 2 ~ 최대 4명 (2인 또는 4인만, 3인 불가) · 예상 시간: 약 10~20분 · 난이도: 쉬움~보통
|
||||
|
||||
@@ -206,6 +206,7 @@ interface QuoridorResult {
|
||||
- BoardGameGeek "Quoridor": https://boardgamegeek.com/boardgame/624/quoridor (출판사·인원·플레이 시간)
|
||||
|
||||
## 12. 메모 (상표·법적 주의 등)
|
||||
- **표시 이름(2026-10-06 확정)**: 친구끼리 쓰는 사이트라 원래 이름 "쿼리도"으로 표시한다(`13-decisions.md` 0절). 아래 상표 메모는 공개 서비스로 바꿀 때를 위한 참고로 남긴다.
|
||||
- "Quoridor"(쿼리도/쿼리더)는 Gigamic의 등록 상표다. 게임 규칙 자체는 저작권 보호 대상이 아니지만 이름·로고·판 디자인은 사용하지 말 것. 서비스 표시 이름 후보: "벽 쌓기 길찾기", "길막기", "미로 탈출 보드". 최종 이름은 사용자 결정 사항. 규칙 보기에서 "쿼리도와 비슷한 규칙" 같은 비교 언급 여부도 사용자와 확인.
|
||||
- 게임 id `quoridor`는 내부용이며 UI에 노출하지 않는다(필요하면 `wall-maze` 등으로 변경).
|
||||
- 금전·베팅 요소 없음.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# 숫자 타일 게임 - 루미큐브 방식 (`rummikub`)
|
||||
# 루미큐브 (`rummikub`)
|
||||
|
||||
> 마일스톤: M4 · 인원: 최소 2 ~ 최대 4명 · 예상 시간: 약 30~60분 · 난이도: 보통
|
||||
|
||||
@@ -312,6 +312,7 @@ interface GameResult {
|
||||
- 나무위키 "루미큐브": https://namu.wiki/w/루미큐브 (조커 감점 30점 공식 / 50점 대회 룰, 2~4명)
|
||||
|
||||
## 12. 메모 (상표·법적 주의 등)
|
||||
- **표시 이름(2026-10-06 확정)**: 친구끼리 쓰는 사이트라 원래 이름 "루미큐브"으로 표시한다(`13-decisions.md` 0절). 아래 상표 메모는 공개 서비스로 바꿀 때를 위한 참고로 남긴다.
|
||||
- "Rummikub"와 "루미큐브"는 M&M Ventures(Kodkod)의 등록 상표다. 국내 유통사도 있다. 화면, 방 목록, 도메인, 홍보에 상표명과 로고를 쓰지 않는다.
|
||||
- 표시 이름 후보(사용자가 선택): "숫자 타일", "숫자 맞추기 타일", "타일 놀이", "숫자 줄 세우기".
|
||||
- 문서와 코드 ID(`rummikub`)는 내부용이다. 외부 노출이 걱정되면 `number-tiles` 같은 중립 ID로 바꾸는 것을 검토한다.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# 보석 상인 (`splendor`)
|
||||
# 스플렌더 (`splendor`)
|
||||
|
||||
> 마일스톤: M7 · 인원: 최소 2 ~ 최대 4명 · 예상 시간: 약 30분 · 난이도: 보통
|
||||
|
||||
@@ -298,6 +298,7 @@ interface SplendorResult {
|
||||
- 나무위키 "스플렌더": https://namu.wiki/w/스플렌더
|
||||
|
||||
## 12. 메모 (상표·법적 주의 등)
|
||||
- **표시 이름(2026-10-06 확정)**: 친구끼리 쓰는 사이트라 원래 이름 "스플렌더"으로 표시한다(`13-decisions.md` 0절). 아래 상표 메모는 공개 서비스로 바꿀 때를 위한 참고로 남긴다.
|
||||
- "Splendor"와 "스플렌더"는 Space Cowboys(Asmodee)의 상표다. 화면·URL·광고 문구에 쓰지 말고 표시 이름은 "보석 상인"(후보: "보석 거상", "젬 마켓")으로 한다. 게임 규칙 자체는 저작권 보호 대상이 아니지만, 원작 카드 일러스트·귀족 초상·로고·규칙서 문장은 쓰지 않는다.
|
||||
- 카드 구성 수치(비용·점수 표)는 게임 규칙의 일부인 사실 데이터로 보는 것이 일반적이나, 원작과 완전히 같은 수치를 쓰는 것이 부담되면 같은 구조(단계별 장 수, 점수 분포, 비용 합 범위)를 유지한 자체 카드 목록으로 바꿀 수 있도록 카드 테이블을 데이터 파일로 분리해 둔다. 이 결정은 프로젝트 오너 확인 필요.
|
||||
- 돈이나 포인트를 걸지 않는다.
|
||||
|
||||
Reference in New Issue
Block a user