bibimbap/docs/work-log/2026-06-17-jam-platform-roa...

224 lines
11 KiB
Markdown

---
kind: work-log
title: bibimbap 플랫폼 고도화 — 목적별 워크스트림 로드맵
description: 150635 단일 게임잼 프레임을 4개 목적 워크스트림(거버넌스/게임잼/사이트플랫폼/유저배지)+운영으로 재구조. 게임잼은 그 중 하나. 의존성(빌드순서) 유지 + 잼일정 분리가능 여부 명시.
status: active
source_session: 20260617-150635
restructured_by: 20260617-162536
created_at: 2026-06-17
owner: art
---
# bibimbap 플랫폼 고도화 — 목적별 워크스트림 로드맵
기존 bibimbap(게임 공유 + 팀원 모집, Spring Boot + MyBatis + JSP) 위에 신규 기능군을 얹는다.
**핵심 재구조 이유**: 이전 로드맵(20260617-150635)은 의존성/공유자원 축으로는 잘 쪼갰으나, 모든 항목을 단일 "게임잼 플랫폼 고도화" 목적 프레임 아래 배치했다. 재검토 결과, 제공한 메모가 전부 게임잼용이 아니었다. 항목별 "왜 존재하나(목적)"를 1:1로 재확정한 결과, **4개 목적 워크스트림 + 운영**으로 분해됐다.
- 게임잼은 4개 워크스트림 중 하나(W2)다.
- 사이트 전반 기능(태그검색·댓글리뷰·포스팅·메인·Unity업로드)과 유저 배지/평판은 게임잼 회차 일정과 무관하게 독립 진행 가능.
- 의존성 그래프(빌드 순서)는 그대로 유효하다 — 워크스트림 라벨로 재서술했을 뿐.
---
## W1 — 거버넌스 / RBAC ★토대
**목적**: 사이트 거버넌스(운영진 관리). 게임잼이 없어도 필요한 토대.
- **포함**:
- 관리자(전체) / 부관리자(허용된 권한만 = 권한부여형) 모델
- 관리자 콘솔 — 부관리자 임명 + 권한 토글
- 권한 체크 인터셉터
- 권한 토글 항목 예시: 게임잼관리, 포스팅작성(= 포스터 권한)
- **게임잼 관계**: 소비자 — 게임잼관리 권한·심사위원 역할이 이 위에 얹힘.
- **잼 일정 분리**: 가능(토대, 독립).
- **의존**: 없음.
- **공유 자원**: `users`, `security/`, 세션/인증.
---
## W2 — 게임잼 ★본체
**목적**: 게임잼 운영·평가·시상 그 자체. 잼이 없으면 존재 이유 없음.
- **잼 일정 분리**: 불가(잼 그 자체).
- **의존**: W1.
### W2-1 — 게임잼 엔티티 + 라이프사이클
- `jams` 테이블, 상태전이(모집→개발→평가→종료), 개발기간/평가기간 필드
- 관리자 게임잼 CRUD, 게임잼 목록/상세 페이지
- 회차 독립(다중 인스턴스)
- 출품작 = 기존 `games` 재사용 + 잼 연결(`jam_id`/조인). 개인·팀 모두.
- 출품작 이중 노출 — 잼 전용 뷰 + 일반 게임 허브
- 운영 표시 필드: Discord 링크 / 상금 / 후원사 (표시만)
### W2-2 — 심사위원 역할 권한
- W1 위에 얹히는 잼 전용 역할
- 권한 체크: 심사위원만 심사 점수 입력 가능
### W2-3 — 잼 평가 통합설계 (스키마 동결) ⚠️결합 클러스터
> 범위 = 잼 평가만. 댓글/리뷰 스키마 자체는 W3에서 설계(동결 묶음 아님).
- 심사 점수 / 잼 투표 / 시상 집계 스키마 확정·동결
- "W3 댓글/리뷰의 리뷰 평점 → 시상 유저평점 트랙" 단방향 집계 계약
- 평가기간 게이트 계약
- **권장 진입**: design-advisor
- **산출**: design.md + DB 스키마(동결) + contracts
### W2-4 — 심사위원 평가
- 권한자(심사위원) 점수 입력 → 심사위원 대상 집계
- **의존**: W2-3 동결 완료, W2-2(심사위원 권한)
### W2-5 — 인기투표
- 잼 전용 1인 1표, 평가기간 한정, `game_likes`와 별개
- **의존**: W2-3 동결 완료
### W2-6 — 시상 집계 / 결과
- 3트랙 산정: 심사 / 유저평점(W3 리뷰 평점 집계) / 인기 → 수상 표시
- **의존**: W2-4, W2-5, W3 댓글리뷰 평점
---
## W3 — 사이트 플랫폼 (전부 잼 일정 독립)
**목적**: 일반 게임/콘텐츠 사이트 기능. 게임잼은 소비자 중 하나.
- **잼 일정 분리**: 전부 가능(독립 출시 가능).
### W3-1 — 태그 + 검색
- **목적**: 일반 게임 발견성 중심. 잼 용도(이전 회차 검색 / 진행 회차 강조)는 부수.
- 공유 `tags` + 조인테이블(game/jam), 게임잼 태그 검색 UI/쿼리
- **의존**: W2 게임잼 엔티티 (잼 태그 연결 시에만). 단독 게임 태그는 독립.
### W3-2 — 댓글 / 리뷰 분리
- **목적**: 모든 게임 페이지 일반 기능. 잼 평가기간 게이트 없음.
- `game_comments` 200자 + 리뷰(게시물당 1회, 완성도+종합 평점)
- 리뷰 작성 주체 = 아무나(게임당 1회)
- 잼 연결 = 시상(W2-6)이 리뷰 평점을 단방향 집계할 뿐. 이 기능 자체는 잼과 무관.
- **의존**: 없음(독립).
### W3-3 — 포스팅 보드
- **목적**: 사이트 공지·블로그 + 외부링크 큐레이션. **별도 메뉴**로 운영.
- 포스터 권한자(W1)만 작성. 유저 작성 차단.
- 카테고리: 유니티블로그 / 세션 / 게임잼대상 후기인터뷰 / 뒤끝 개발팀
- 게임잼은 포스팅 주제 중 하나로 포함될 뿐 — 포스팅 보드가 게임잼에 의존하지 않음.
- **의존**: W1(포스터 권한).
### W3-4 — 메인페이지 (게임 허브)
- **목적**: `index.jsp` 에 게임 + 잼 출품작이 모이는 공간.
- 포스팅은 별도 메뉴 — 메인 통합 아님.
- **의존**: W2 게임잼 엔티티(잼 출품작 노출 시).
### W3-5 — Unity WebGL 빌드 업로드 자동화 ⏸deferred
- **목적**: 일반 게임 호스팅 자동화(모든 제출). 현 수동 호스팅 대체.
- 업로드 → 검증 → `/game/{uuid}/` 배치
- **선행**: 별도 조사(빌드 포맷/검증/보안 — zip-slip 등)
- 게임잼과 무관한 일반 인프라.
---
## W4 — 유저 배지 / 평판 ★신규 (150635 누락)
**목적**: 커뮤니티 기여 인정. 권한 아님, 평판/배지. 게임잼·RBAC와 별개 도메인.
- **포함**:
- **리뷰어 배지**: 업로드 게임 인증 리뷰어. W3 리뷰 활동/품질 기반 부여.
- **기술자 배지**: 개발 정보 공유·적극 업로더 인정. ("기술자"는 임시명칭)
- **배경**: 150635가 리뷰어/기술자를 RBAC "인증유저 플래그"로 오분류 → 본 재검에서 별도 워크스트림으로 발굴.
- **잼 일정 분리**: 가능(독립).
- **의존**: 활동 소스(W3 리뷰 등) 존재 후. 독립 출시 가능.
---
## 운영 (코드 외)
- **Discord**: 공지·진행은 수동 운영. 코드는 게임잼 상세에 초대 링크 표시(W2-1 흡수).
- **뒤끝(Bekend)**: 파트너/콘텐츠 — 포스팅 카테고리로만 등장(W3-3).
- **상금·후원**(치킨/10만원/편의점 5000원권): 게임잼 상세 표시 필드(W2-1) + 실제 지급은 수동.
---
## 의존성 그래프 / 빌드 순서
```
W1 거버넌스/RBAC ─────────────────────────────────────────────── ★최우선 토대
├──> W2-1 게임잼 엔티티 + 라이프사이클
│ │
│ ├──> W2-2 심사위원 역할 권한
│ │
│ ├──> W2-3 잼 평가 통합설계(스키마 동결)
│ │ │
│ │ ├──> W2-4 심사위원 평가 ──────────────────┐
│ │ │ │
│ │ └──> W2-5 인기투표 ─────────────────────┐ │
│ │ │ │
│ │ W3-2 댓글/리뷰(독립) ──[리뷰평점 단방향집계]──┤ │
│ │ ↓ ↓
│ │ W2-6 시상 집계
│ │
│ ├──> W3-1 태그+검색 (잼 태그 연결 시)
│ └──> W3-4 메인 허브 (잼 출품작 노출 시)
├──> W3-3 포스팅 보드 (W1 후 병렬 가능, 잼 독립)
└──> W4 유저 배지/평판 (W3 활동 소스 후, 독립)
W3-2 댓글/리뷰 ── 독립(잼 무관, 단 W2-6이 평점 집계)
W3-5 Unity 업로드 ── deferred (조사 선행 필요)
```
**크리티컬 패스**: W1 → W2-1 게임잼 엔티티 → W2-3 잼 평가 통합설계 → W2-6 시상 집계
**병렬 가능**:
- W1 완료 후: W3-3 포스팅(잼 독립)
- W2-1 완료 후: W3-1 태그검색, W3-4 메인 허브
- W3-2 댓글/리뷰: 언제든 독립 진행 가능
- W4 배지: W3 활동 소스 존재 후 독립 진행
---
## S → W 매핑 (추적성)
이전 세션 및 handoff가 S1~S7 레이블을 참조하므로 매핑을 유지한다.
| 구 레이블 | 새 워크스트림 | 교정 사항 |
|---|---|---|
| S1 RBAC | W1(관리자/부관리자/권한토글) + W2-2(심사위원 역할) + **W4(리뷰어/기술자 배지, 오분류 교정)** | 리뷰어·기술자는 RBAC 아닌 배지/평판으로 재분류 |
| S2 게임잼 엔티티 | W2-1 | 변동 없음 |
| S3 태그+검색 | W3-1 | 목적 재확인: 일반 발견성 중심, 잼은 소비자 |
| S4D 평가 통합설계 | W2-3 | **범위 축소**: 잼 평가(심사/투표/시상) 스키마만 동결. 댓글/리뷰 스키마는 W3-2에서 별도 설계 |
| S4a 댓글/리뷰 분리 | W3-2 | **일반기능으로 재분류**: 잼 평가 동결묶음에서 분리. 시상은 단방향 집계만 |
| S4b 심사위원 평가 | W2-4 | 변동 없음 |
| S4c 인기투표 | W2-5 | 변동 없음 |
| S4d 시상 집계 | W2-6 | 변동 없음 |
| S5 포스팅 보드 | W3-3 | **별도 메뉴 명확화**: 메인 통합 아님 |
| S6 메인페이지 | W3-4 | **교정**: 포스팅 통합 아님. 게임+잼 출품작 허브만 |
| S7 Unity 업로드 | W3-5 | 목적 재확인: 일반 인프라, 잼 의존 아님. deferred 유지 |
| *(누락)* | **W4 유저 배지/평판** | 신규 발굴 워크스트림 |
---
## 150635 대비 핵심 교정 5건
1. **댓글/리뷰(구 S4a) = 일반기능** → 잼 평가 동결묶음에서 분리. 시상(W2-6)은 리뷰 평점을 단방향으로 집계할 뿐이며, 댓글/리뷰 자체는 잼과 무관하게 독립 진행 가능.
2. **포스팅(구 S5) = 별도 메뉴** → 메인(구 S6) 통합 아님. 메인은 게임+잼 출품작 허브이고, 포스팅은 별도 메뉴로 운영.
3. **태그검색(구 S3)·Unity업로드(구 S7) = 사이트 일반 인프라** → 잼은 소비자 중 하나일 뿐, 이 기능들이 게임잼을 위해 존재하는 것이 아님.
4. **유저 배지/평판(W4) = 누락됐던 신규 워크스트림** → 리뷰어·기술자가 S1 RBAC "인증유저 플래그"로 오분류됐던 것을 별도 도메인(평판/배지)으로 발굴·분리.
5. **잼 평가 통합설계(구 S4D) 동결 범위 축소** → 잼 평가(심사/투표/시상) 스키마만 동결 대상. 댓글/리뷰 스키마는 W3-2에서 별도 설계하며 동결 묶음 아님.