2.4 KiB
2.4 KiB
Core — bibimbap
게임 쇼케이스 + 팀원 모집 웹앱 (org: com.pandoli365). 서버사이드 JSP 렌더 + JSON API 혼합. Spring Boot WAR + MyBatis + PostgreSQL.
Source map (src/main/java/com/pandoli365/bibimbap/)
BibimbapApplication/ServletInitializer— 부트 진입 + 외부 서블릿 컨테이너 배포용 initializer (packaging=war).controller/—@Controller. 페이지 컨트롤러(RecruitController,WebMvcController)는 JSP view-name 반환.controller/api/(GameController·GameAssetController·GameUploadController·UserController+ApiExceptionControllerAdvice)는 JSON/mutation 처리.mapper/— MyBatis@Mapper인터페이스, 어노테이션 인라인 SQL. 상세mem:conventions.data/— DB row/DTO POJO (GameData,UserData,RecruitPostData,GameComment/LikeData,UserAuthIdentityData). 수기 getter/setter (Lombok 미사용).abstracts/— 제네릭 베이스Request/Result/Service<Req,Res>/ErrorResult.game/GameCatalog— DB 이전 레거시 게임 카탈로그(정적 배열 NAMES/CREATORS/...). DB 미존재 game id fallback.security/CsrfTokens— 수동 CSRF 토큰 util (Spring Security 없음).config/UploadResourceConfig— 업로드 WebGL/프로필 정적 리소스 핸들러.webapp/WEB-INF/views/*.jsp(+fragments/header.jspf) — 뷰. ViewResolver prefix/WEB-INF/views/, suffix.jsp.resources/{dev,live}/db.properties— 프로필별 DB 자격증명 (gitignore;.example만 커밋).
프로젝트 전역 불변식
- Soft delete: 조회는
is_delete IS NOT TRUE필터, 삭제는is_delete=true, updated_at=now().game_likes는 hard delete. - 인증 =
HttpSessionattruserId(Spring Security 없음). mutation 엔드포인트는 첫 줄에CsrfTokens.isValid(request)체크 → 실패 시 403. - 소유권 = session userId vs row userId 비교.
- 사용자 노출 문자열은 한국어.
참조
- 언어/프레임워크/빌드:
mem:tech_stack - 실행 명령:
mem:suggested_commands - 코드 컨벤션(mapper/controller/validation):
mem:conventions - 작업 완료 게이트:
mem:task_completion
추가: 광범위한 docs/ (ATP 문서체계 + 분석) 와 docs/graph/ (graphify 산출물 메타) 존재.
graphify 그래프 산출물 위치·재생성·graphify-out 캐시 정리 함정: mem:graphify_workflow.