Skip to content

CopyPack 전체 복사로 대형 팩의 준비·reload 비용이 커진다 #16

Description

@leehyowon14

요약

CopyPack.dpt/, .git/, .DS_Store만 제외하고 팩 루트의 일반 파일을 전체 복사합니다. PrepareMany뿐 아니라 shell의 :reload/:sync도 staging 디렉터리에 전체 팩을 다시 복사합니다.

  • 검토 기준: main@4e87765f95c106edb3c956cfad2abc1db64c0c39
  • 판정: 동작 CONFIRMED
  • 우선순위: P3
  • 성격: correctness bug가 아닌 성능·정책 trade-off

영향

팩 루트에 큰 fixture, 문서, 빌드 산출물 또는 상대 server.jar가 있으면 시작·reload 시간, 임시 디스크 사용량과 I/O가 전체 크기에 비례해 증가합니다.

발생 조건 및 확인 범위

  • .dpt, .git, .DS_Store 외 일반 파일은 복사됩니다.
  • symlink는 따라가지 않고 복사를 오류로 종료합니다.
  • refresh는 새 staging 디렉터리에 전체 복사 후 rename합니다.
  • 작은 팩에서는 영향이 미미할 수 있으며 전체 staging copy는 격리와 원자적 교체라는 장점이 있습니다.
  • 구체적인 end-to-end 성능 기준은 아직 측정하지 않았습니다.

재현 및 검증 방법

  1. 유효한 팩에 fixtures/large-test-data.bin 같은 비런타임 대형 파일을 추가합니다.
  2. workspace.CopyPack 또는 dpt shell을 실행합니다.
  3. 실행 작업공간에 해당 파일이 복사됐는지 확인합니다.
  4. 작은 데이터 파일 하나만 수정하고 :reload를 실행합니다.
  5. 대형 fixture가 다시 복사되는지 확인하고, 없는 경우와 시간·쓰기 바이트를 비교합니다.

기대 동작

격리와 안전한 교체를 유지하면서 불필요한 반복 복사를 줄일 수 있어야 합니다. include/exclude 정책, fingerprint 기반 증분 staging 또는 copy-on-write 방식을 검토할 수 있습니다.

완료 조건

  • 작업공간 복사 정책을 문서화한다.
  • .dpt, .git, .DS_Store 제외와 안전한 symlink 정책을 유지한다.
  • 변경되지 않은 대형 비런타임 파일의 반복 복사를 피한다.
  • prepare/refresh 결과가 기존 동작과 호환된다.
  • 다중 팩, overlay, 권한, rollback 테스트를 유지한다.
  • 작은 팩과 대형 팩의 prepare/refresh benchmark를 추가한다.

관련 코드

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions