Skip to content

[code-review] 스냅샷 코드 품질 개선 (상수 분산, lazy-load, 중복 검증, 테스트) #101

Description

@MingJK

#87, #89 병합


[1] AUTO_SNAP_PREFIX 상수 분산 — main.py와 vmcontrol.py 불일치 위험

파일: main.py L141, api/routes/vmcontrol.py L504

AUTO_SNAP_PREFIX = "auto-daily" 상수가 main.py에만 정의되어 있고, vmcontrol.py에서는 "auto-daily" 문자열 리터럴을 직접 사용 중. 두 값이 달라지면 자동/수동 스냅샷 구분 로직(startswith 체크)이 깨짐.

수정 방향: 상수를 공통 모듈(예: core/config.py)로 이동하고 두 파일에서 import하여 단일 출처로 관리.


[2] expunge_all 이후 Server 관계 lazy-load 위험

파일: main.py L181–182, L213–215

joinedload(Vm.server)로 eager load 후 db.expunge_all()로 세션 분리. 이후 get_proxmox_for_server(server)server.name 접근이 이루어짐. Server 모델에 추가 관계가 lazy-load로 설정되어 있다면 DetachedInstanceError가 발생할 수 있음.

수정 방향: get_proxmox_for_server가 접근하는 Server 모델의 모든 필드·관계를 확인 후 필요 시 joinedload 범위 확장하거나 필요한 값을 튜플로 미리 추출.


[3] 중복 스냅샷 이름 검증 없음 — 500 대신 400 반환 필요

파일: api/routes/vmcontrol.py L501–508

동일한 snap_name이 이미 존재하는 경우를 명시적으로 체크하지 않음. Proxmox가 중복 이름 오류를 반환하지만 except Exception이 이를 500으로 처리해 클라이언트가 의미 있는 오류 메시지를 받지 못함.

수정 방향: snapshot.get() 결과에서 동일 이름 존재 여부 확인 후 HTTPException(status_code=400, detail="이미 존재하는 스냅샷 이름입니다.") 처리.


[4] 에러 케이스 통합 테스트 미비

파일: tests/test_input_validation.py

Pydantic 스키마 단위 테스트는 있으나, 엔드포인트 레벨 에러 케이스가 없음.

  • 미소유 VM 접근 시 403
  • 존재하지 않는 VM 404
  • 최대 스냅샷 개수 초과 400

수정 방향: TestClient 통합 테스트 추가. 소유권 검증과 Proxmox 응답 mock 처리 케이스 우선 작성.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions