Files
api2/docs/codebase-notes.md
2026-07-20 17:49:24 +09:00

3.4 KiB

현재 코드베이스 메모

멀티모듈 이관 상태

  • 기존 단일 모듈의 업무 API 이관을 완료하고, 레거시 소스는 저장소에서 제거했습니다.
  • core/admin/front 모듈은 각각 독립 bootJar로 빌드·배포합니다.
  • 이후 신규 기능도 core standard/bespoke와 admin/front 업무 Service 경계를 기준으로 추가합니다.

이관 원칙

  • 범용적인 단일 테이블 데이터 처리는 core.modules.standard에 둡니다.
  • JOIN·집계·복합 SQL 데이터 처리는 core.modules.bespoke에 둡니다.
  • admin/front는 Controller, 업무 Service, Form, 화면 VO를 소유합니다.
  • admin/front 업무 Service가 업무 정책과 트랜잭션을 소유하며 core standard/bespoke Service를 조합합니다.
  • Mapper는 core standard/bespoke에 통합하고, Controller는 core Service 또는 Mapper를 직접 호출하지 않습니다.
  • core VO는 내부 업무·조회 결과를 표현하고, admin/front 업무 Service가 필요한 필드만 화면/API 응답 VO로 조립합니다.
  • 비밀번호, refresh token 등 민감 정보는 일반 core VO와 외부 응답 VO에 포함하지 않습니다.
  • core는 화면 전용 VO나 Controller를 소유하지 않습니다.

파일과 TUS

  • 단순 파일 업로드는 DB 기록 없이 파일을 저장하고 uploadPath를 반환합니다.
  • 일반 file Controller는 admin/front 양쪽에 둘 수 있으며, 저장 구현은 core 공통 기능으로 이관합니다.
  • TUS는 02-api-admin/modules/tus의 admin 전용 기능입니다. front에는 TUS Controller나 tus-file.* 설정을 두지 않습니다.
  • TUS Controller는 요청 바인딩과 응답만 담당하고, TusFileService가 core standard/bespoke Service를 조합합니다.
  • FILE_MASTER, FILE_DETAIL, 업로드·다운로드 이벤트 로그의 단일 테이블 처리는 core standard를 사용합니다. 토큰 소유권, 완료 파일 목록·조회, 파일 이동 대상 조회, 마스터 집계는 core bespoke fileDetailTusFile, fileMasterTusFile에 둡니다.
  • 완료 파일의 최종 저장 루트는 일반 업로드와 같은 file.storage.root-path입니다. TUS 임시 파일은 admin의 tus-file.upload.tmp-root를 사용합니다.
  • TUS 업로드 인증 경로와 Hook 경로만 admin SecurityConfig에서 비인증으로 열고, 나머지 TUS API는 ADMIN 권한을 요구합니다.
  • tusd 실제 Hook, 임시 파일 이동, nginx 파일 제공은 tusd와 file-domain 설정이 준비된 환경에서 통합 검증합니다.

CORS 동기화

  • Dynamic CORS 필터와 캐시는 core를 통해 admin/front 양쪽 JVM에서 동작합니다.
  • CORS 관리 API는 admin에만 둡니다.
  • 허용 Origin 목록은 Redis alist:cors:allow-origins 키에 JSON 목록으로 저장합니다.
  • admin에서 정책을 변경하면 트랜잭션 커밋 후 Redis Pub/Sub 채널 alist:cors:allow-origins:changed로 갱신 이벤트를 발행합니다.
  • 각 JVM은 해당 채널을 구독해 즉시 Redis 목록을 다시 읽고, 예외 상황에 대비해 60초 주기 Redis 재조회도 수행합니다.

주의 사항

  • application-local.yaml에 민감정보가 있을 수 있으므로 공유와 커밋 전에 확인합니다.
  • Mapper 인터페이스, XML namespace, XML id, DTO resultType/parameterType은 이관 시 함께 변경합니다.
  • 파일 경로 변경은 nginx alias, tusd 경로, API 환경 설정을 함께 확인합니다.