콘텐츠로 이동

2026-05-04 | API 500 에러 수정 (자료구분 저장 실패)

2026-05-04 | API 500 에러 수정 (자료구분 저장 실패)

섹션 제목: “2026-05-04 | API 500 에러 수정 (자료구분 저장 실패)”

[!note] 수정이력 | 2026-05-04 03:13, 분홍 (hermes)

  • 이 파일은 2026-05-05 세션 중에도 참조됨

분홍아빠가 설정 페이지에서 자료구분 추가/수정 시 저장 실패 (500 에러) 및 라이트박스 클릭 안됨 두 가지 동시에 제기함.

실제 원인은 deps.py 권한 체크 함수에서 문자열 str 입력을 Enum으로 간주하여 .value 속성 접근 → AttributeErrorNameError (Enum import 누락) → 모든 권한 체크 API가 500 에러.

1. backend/app/api/deps.py — require_role() 함수 리팩토링

섹션 제목: “1. backend/app/api/deps.py — require_role() 함수 리팩토링”
  • 문제: allowed_rolesUserRole Enum이 아닌 문자열 str(“관리자”)로 전달됨
  • 해결: hasattr(r, 'value')로 Enum/str 분기, current_user.role도 동일하게 정규화
  • 후속: from enum import Enum 누락으로 isinstance(x, Enum)에서 NameError → import 추가

2. backend/app/api/v1/stages.py — (간접 수정)

섹션 제목: “2. backend/app/api/v1/stages.py — (간접 수정)”
  • require_role("관리자")처럼 문자열 str로 전달하고 있음. 위 deps.py 수정으로 자동 호환.

3. frontend/src/views/SettingsView.vue — company_id 파라미터 추가

섹션 제목: “3. frontend/src/views/SettingsView.vue — company_id 파라미터 추가”
  • 문제: GET /projects/dummy/stages/design/categories 호출 시 company_id 누락 → 다른 회사 데이터만 조회됨
  • 해결: API 호출 시 params에 company_id 추가

4. frontend/src/views/projects/ProjectDetailView.vue — 라이트박스 추가

섹션 제목: “4. frontend/src/views/projects/ProjectDetailView.vue — 라이트박스 추가”
  • 문제: 이미지 클릭 시 확대 안됨
  • 해결: @click=“openPhoto(p)”, photoDialog, v-dialog 템플릿으로 라이트박스 구현

docker compose restart backend : 캐시/바이트코드 안 바뀜 (X) docker compose build backend : 이미지 재빌드 (O) docker compose up -d backend : 컨테이너 재생성 (O)

  • GET 조회 : /projects/dummy/stages/design/categories?company_id=… | 200 OK
  • POST 추가 : /projects/dummy/stages/design/categories | 200 OK
  • PATCH 수정: /projects/dummy/stages/design/categories/ID | 200 OK
  • 에러 로그 : docker logs erp-backend | Traceback 없음
  1. 브라우저 새로고침(F5) → 설정 페이지 → 자료구분 추가/수정 테스트
  2. 설계단계/실사단계 이미지 클릭 → 라이트박스 확대 테스트
  • [r.value for r in allowed_roles] 에서 r 가 문자열 “관리자”면 → “관리자”.value → AttributeError → 500
  • Docker 환경에서 소스 수정 후 docker compose restart 만으론 반영 안 됨. 반드시 build + 재생성
  • [[2026-05-05_세션재개]] — 이 내용을 기반으로 다음 세션 시작