Skip to content

Refactor: UX 개선에 따른 도메인 규칙 수정#191

Merged
lunarbae628 merged 24 commits into
stagingfrom
Refactor/new-ux
Apr 12, 2026
Merged

Refactor: UX 개선에 따른 도메인 규칙 수정#191
lunarbae628 merged 24 commits into
stagingfrom
Refactor/new-ux

Conversation

@lunarbae628
Copy link
Copy Markdown
Collaborator

@lunarbae628 lunarbae628 commented Apr 12, 2026

🛰️ Issue Number

🪐 작업 내용

문서 작업 UX 개편에 맞춰 백엔드의 브랜치/저장/커밋/병합 흐름을 재정리했습니다.
기존에는 이어서 작업, 병합, 비교, 저장 삭제가 커밋 도메인과 save 삭제 흐름에 섞여 있었는데, 이번 변경으로 “브랜치 생성 + 작업장 save 유지” 흐름을 기준으로 정리했습니다.

  • 커밋 생성 시 기존 save를 삭제하지 않도록 변경했습니다.

    • 기존에는 커밋을 만들면서 해당 브랜치의 save를 제거하는 흐름이 있었는데, 이제 커밋 이후에도 작업장 save를 유지합니다.
    • 이 변경으로 커밋 생성 후에도 같은 브랜치에서 계속 작업장을 유지할 수 있습니다.
  • 이어서 작업하기를 “브랜치 생성” 흐름으로 단순화했습니다.

    • 기존 createBranchOrSave 성격의 흐름을 정리하고, 이어서 작업하기는 새 브랜치와 save를 생성하는 흐름으로 정리했습니다.
    • CreateBranchOrSaveDocsCreateBranchDocs로 정리했습니다.
    • 브랜치 생성 성공/실패 시 MySQL Branch/Save와 Mongo SaveContent 정합성을 검증하는 테스트를 추가했습니다.
  • 이제 병합은 새로운 브랜치를 생성합니다.

    • 병합은 커밋에 직접 결과를 붙이는 방식이 아니라, 병합 결과를 담는 새 브랜치와 save를 생성하는 흐름으로 정리했습니다.
    • BranchmergeTargetCommit을 추가했습니다.
    • 병합 시 base commit은 fromCommit, target commit은 mergeTargetCommit으로 저장되도록 했습니다.
    • 그래프 응답 DTO인 BranchGraphDtomergeTargetCommitId를 포함하도록 변경했습니다.
    • GraphMapper, GetDocGraphDocs도 병합 브랜치 메타를 내려줄 수 있게 수정했습니다.
    • 이 변경으로 프론트에서 병합 브랜치를 두 커밋에서 출발한 형태로 렌더링할 수 있습니다.
  • root commit 삭제를 허용하도록 커밋 삭제 조건을 조정했습니다.

    • 기존에는 root commit 삭제가 막히는 흐름이 있었는데, 현재 UX에서는 브랜치의 첫 커밋도 삭제할 수 있도록 변경했습니다.
    • 대신 mergeTargetCommit으로 참조되는 커밋은 삭제할 수 없도록 검사를 추가했습니다.
    • CommitRepository, CommitQueryService, CommitService, CommitErrorCode 쪽 삭제 검증 흐름을 정리했습니다.
  • 비교용 조합 조회 API를 제거했습니다.

    • 기존 compare/merge 조합 응답 DTO와 Swagger 문서를 제거했습니다.
    • 비교/병합 화면에서는 각 커밋을 단일 조회한 뒤 클라이언트가 조합하는 흐름으로 바뀌었기 때문에, 백엔드의 별도 compare API 책임을 제거했습니다.
  • BlockDto를 제거하고 block 응답 구조를 단순화했습니다.

    • 더 이상 사용하지 않는 BlockDto를 삭제했습니다.
    • BlockService, BlockMapper, CreateCommitRequest, CommitMapper, 관련 테스트 DTO를 새 요청 구조에 맞게 정리했습니다.
    • 커밋 생성 요청에서 block을 불필요한 wrapper로 한 번 더 감싸지 않도록 흐름을 맞췄습니다.
  • save 단독 삭제 API를 제거했습니다.

    • DELETE /api/document/{docId}/save/{saveId} 엔드포인트를 제거했습니다.
    • SaveService.deleteSave(), SaveQueryService.deleteSave(), deleteSaveContentById(), deleteSaveIfExists()를 제거했습니다.
    • DeleteSaveDocs Swagger 문서를 삭제했습니다.
    • SaveErrorCode에서 save 삭제 관련 에러코드를 제거했습니다.
    • Branch.removeSave()를 제거해 브랜치에서 save만 떼어내는 우회 경로를 없앴습니다.
  • save 제약을 강화했습니다.

    • Save.saveMongoIdnullable = false를 추가했습니다.
    • Save.branchoptional = false, nullable = false, unique = true를 추가했습니다.
    • branch당 save가 하나만 존재하고, save row는 반드시 branch와 Mongo save id를 갖도록 했습니다.
    • save 없는 branch를 정상 시나리오로 다루던 테스트를 제거하고, 테스트 fixture도 save를 함께 생성하도록 정리했습니다.
  • 테스트를 새 흐름에 맞춰 정리했습니다.

    • 브랜치 생성 오케스트레이터 테스트를 추가했습니다.
    • 브랜치 생성 정합성 통합 테스트를 추가했습니다.
    • 병합 통합 테스트와 병합 서비스 mock 테스트를 branch merge 구조 기준으로 추가했습니다.
    • 기존 commit merge 통합 테스트는 제거하고 새 merge 도메인 테스트로 대체했습니다.
    • save 삭제 관련 테스트는 삭제했습니다.
    • saveMongoId = null 저장 실패 테스트를 추가했습니다.
    • doc / branch / merge / commit 예외 흐름에서 커스텀 예외 변환 테스트를 보강했습니다.
  • UX수정할겸 UI대격변했습니다. 이쁩니다

📚 Reference

운영/스테이징 DB가 ddl-auto=validate라면 saves.save_mongo_id NOT NULL, saves.branch_id NOT NULL UNIQUE, branches.merge_target_commit_id 추가에 맞는 DDL 반영이 필요합니다.

✅ Check List

  • 코드가 정상적으로 컴파일되나요?
  • 테스트 코드를 통과했나요?
  • merge할 브랜치의 위치를 확인했나요?
  • Label을 지정했나요?

Feat: 🎉 Staging서버 오픈 🎉
Fix: SSL 만료로 보이던 문제 원인 분석 및 구조 개선
Refactor: 생성 로직 보상트랜잭션 도입 및 서비스 분리
Hotfix: application-prod.yml cors 리스트 오타 수정
feat: Mongo delete outbox 전환 및 생성 보상 구조 정리
Updated team member roles and responsibilities in the README.
- Branch에 mergeTargetCommit 추적 필드 추가
- 브랜치 그래프 DTO/JPQL 조회 로직 반영
- 머지 서비스/오케스트레이터 시그니처 변경에 맞춰 테스트 수정
- test 프로필 기본값 보강으로 컨텍스트 로드 안정화
@lunarbae628 lunarbae628 merged commit dbc43a7 into staging Apr 12, 2026
2 checks passed
@lunarbae628 lunarbae628 deleted the Refactor/new-ux branch April 17, 2026 17:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant