Conversation
- 사용자/권한: User, Department, Role, UserRole - 문서/파일/버전: Document, DocumentVersion, FileObject, DocumentChunk - 컬렉션/권한: DocumentCollection, CollectionDocument, CollectionPermission, DocumentPermission, UserDocumentAccessCache - 임베딩/인덱싱: EmbeddingModel, EmbeddingJob, Embedding - 검색/RAG: SearchQuery, SearchResult, RagResponse, ResponseCitation - Worker/장애복구: WorkerNode, EmbeddingJobAttempt, IndexingEvent, FailoverEvent - 관련 Enum 24종 포함 - 기존 BaseEntity/패키지 컨벤션을 그대로 따름, Repository/Service/Controller는 미생성
- V2 departments, V3 users, V4 file_objects, V5 documents, V6 document_versions, V7 collections, V8 collection_documents 순서로 생성 - documents <-> document_versions 순환 FK는 V5에서 컬럼만 생성 후 V6에서 ALTER TABLE로 FK 추가 - collection_documents는 이제 collections/documents/users에 대한 실제 FK 제약 포함 - 엔티티(@table uniqueConstraints/indexes)와 동일한 uk_/idx_ 네이밍 규칙 적용
- roles, user_roles, collection_permissions, document_permissions, user_document_access_cache, embedding_models, document_chunks, embeddings, worker_nodes, embedding_jobs, embedding_job_attempts, indexing_events, search_queries, search_results, rag_responses, response_citations, failover_events - collection_permissions/document_permissions에 target_type CHECK 제약 실제 추가 - .dev/learnings/flyway-migration-guide.md: V 네이밍 의미, 순환 FK 해결 패턴, V1~V25 마이그레이션 체인 표, 자주 겪는 실수 정리
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (73)
📝 WalkthroughWalkthrough1단계 MVP를 위한 24개 JPA Entity(사용자/권한, 문서/파일/버전, 컬렉션, 권한, 임베딩, 검색/RAG, 워커/장애복구)와 관련 Enum들을 신규 추가하고, 이에 대응하는 Flyway 마이그레이션(V2~V25) 및 마이그레이션 운영 가이드 문서를 함께 도입했다. 기능 구현(Repository/Service/Controller)은 포함되지 않는다. Changes도메인 Entity/Enum 및 마이그레이션
Estimated code review effort: 4 (Complex) | ~75 minutes Sequence Diagram(s)해당 없음 (Entity/Enum/마이그레이션 스키마 정의 위주로, 다중 컴포넌트 간 실행 흐름을 시각화할 대상이 없음) 관련 이슈: 제안 라벨: enhancement, database, domain-model 제안 리뷰어: 코드 소유자 및 백엔드 도메인 담당자 (저장소 정보 부족으로 특정 인원 지정 불가) Poem: 버그·성능·SOLID 관점 핵심 피드백: 이번 PR은 순수 스키마/Entity 정의라 로직 버그 위험은 낮으나, ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Warning Tools execution failed with the following error: Failed to run tools: 13 INTERNAL: Received RST_STREAM with code 2 (Internal server error) Comment |
🔍️ 작업 내용
1단계 MVP(업로드 → 인덱싱 → 권한 기반 검색 → 출처 반환)에 필요한 JPA Entity 24종 + Enum 24종을 생성하고, 24개 테이블 전체에 대한 Flyway 마이그레이션(V1~V25)을 작성했습니다. Repository/Service/Controller는 포함하지 않았습니다.
✨ 상세 설명
생성한 패키지 구조 (Entity/Enum)
추가한 Flyway 마이그레이션 (V2~V25, 의존성 순서)
사용법/네이밍 규칙/순환 FK 해결 패턴은
.dev/learnings/flyway-migration-guide.md에 정리했습니다.주요 설계 포인트
global.common.entity.BaseEntity를 그대로 상속(신규BaseTimeEntity를 따로 만들지 않음).collections테이블 Entity는java.util.Collection과의 이름 충돌을 피해DocumentCollection으로 명명.@ManyToOne(fetch = LAZY)만 사용,@OneToMany/@ManyToMany미사용(다대다는 중간 엔티티로 해소: UserRole, CollectionDocument 등).documents.current_version_id는document_versions와의 순환 FK 구조상 nullable 처리. 마이그레이션에서는 V5(documents, FK 보류) → V6(document_versions 생성 후ALTER TABLE로 FK 마무리) 3단계 패턴으로 실제 FK까지 완결.deletedAt(soft delete)은 User/Document/DocumentCollection에만 별도 필드로 추가.configJson,filtersJson,metadataJson,vector,queryVector)은 Hibernate JSON/Vector 매핑 미설정 상태라String/TEXT컬럼으로 임시 매핑, 관련 TODO 주석 포함.@Setter미사용, 상태 변경은markIndexed(),lock(),updateHeartbeat()등 의미 있는 메서드로만 노출.@Table/마이그레이션 SQL 양쪽에uk_*/idx_*네이밍 규칙을 동일하게 적용.collection_permissions/document_permissions의target_type(USER/DEPARTMENT/ROLE)별 단일 FK 제약은 JPA로 표현 불가해 엔티티에는 TODO만 남겼지만, 마이그레이션(순수 SQL)에는 실제CHECK제약(ck_*_target_type_fk)으로 추가해 해결.🛠️ 추후 리팩토링 및 고도화 계획
vector타입 실제 매핑 방식 확정 필요 (Embedding.vector,SearchQuery.queryVector)embedding_models의 active/searchable 모델 단일 허용 제약은 애플리케이션 또는 DB partial unique index로 보강 필요user_document_access_cache에 저장하지 않고 검색 시 live predicate로 처리@JdbcTypeCode(SqlTypes.JSON)) 또는 OpenSQL JSON 타입으로 교체 검토uk_user_document_access_cache_user_id_document_id_source_type_source_id등 일부 제약 이름이 PostgreSQL 식별자 63자 제한에 근접/초과할 수 있어 필요 시 축약 검토📸 스크린샷 (선택)
해당 없음 (Entity/Enum/마이그레이션 생성 작업)
💬 리뷰 요구사항
domain.{도메인}.entity/.enums)가 기존 컨벤션과 맞는지 확인 부탁드립니다.documents↔document_versions순환 FK 처리 방식(V5/V6 분리 + ALTER TABLE)이 적절한지 확인 부탁드립니다.collection_permissions/document_permissions에 추가한CHECK제약 로직이 의도한 대로인지 확인 부탁드립니다../gradlew build및 실제flyway migrate실행 검증은 하지 못했습니다. 로컬에서 빌드/마이그레이션 실행 확인 부탁드립니다.Summary by CodeRabbit