bibimbap/.serena/memories/core.md

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.
  • 인증 = HttpSession attr userId (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.