Skip to content

[버그] UpdateBoardRequest가 use_file_upload=false에서도 allowed_extensions를 검증하여 게시판 수정이 실패합니다 #78

Description

@glitter-gim

증상 요약

게시판 수정 화면에서 첨부파일 사용을 비활성화(use_file_upload=false) 한 상태로 저장하면, allowed_extensions 검증 오류가 발생하여 저장이 실패합니다.


재현 절차

  1. 관리자 -> 게시판 관리 -> 기존 게시판 수정
  2. "첨부파일 사용"을 비활성화
  3. 저장 버튼 클릭

기대한 동작

첨부파일 사용이 비활성화된 경우에는 허용 확장자 설정이 사용되지 않으므로 정상적으로 저장되어야 합니다.


실제 동작

다음과 같은 Validation 오류가 발생하며 저장되지 않습니다.

{
    "message": "허용 파일 확장자를 최소 1개 이상 입력해야 합니다.",
    "errors": {
        "allowed_extensions": [
            "허용 파일 확장자를 최소 1개 이상 입력해야 합니다."
        ]
    }
}

실제 요청 Payload는 다음과 같습니다.

{
    "use_file_upload": false,
    "allowed_extensions": []
}

환경 정보 (필수)

  • 코어 버전: 7.0.4
  • 업그레이드 전 -> 후 버전: 해당 없음 (신규 설치)
  • PHP 버전: 8.3.x
  • 웹서버·실행 방식: Nginx + PHP-FPM
  • DB: MariaDB 10.11.x
  • OS: Linux

활성 확장 목록 (해당 시)

sirsoft-board

재현 환경

순정 설치 환경 (코어 수정 및 커스텀 확장 없음)


스크린샷·로그

브라우저 응답(JSON)

{
    "message": "허용 파일 확장자를 최소 1개 이상 입력해야 합니다.",
    "errors": {
        "allowed_extensions": [
            "허용 파일 확장자를 최소 1개 이상 입력해야 합니다."
        ]
    }
}

추가 정보

원인을 확인한 결과 StoreBoardRequestUpdateBoardRequest의 검증 정책이 서로 달랐습니다.

StoreBoardRequest는 첨부파일 사용이 비활성화된 경우 allowed_extensions 검증을 제외하지만,

UpdateBoardRequest는 다음 규칙이 적용되어 있었습니다.

'allowed_extensions' => ['sometimes', 'array', 'min:1'],

관리 화면에서는 use_file_upload=false인 경우에도

{
    "allowed_extensions": []
}

가 함께 전송되므로 min:1 검증에 의해 저장이 실패했습니다.

정책상 다음과 같이 동작하는 것이 일관된 동작이라고 판단됩니다.

  • use_file_upload=true + allowed_extensions=[] -> Validation 실패
  • use_file_upload=true + 확장자 지정 -> 정상
  • use_file_upload=false -> allowed_extensions 검증 제외
  • allowed_extensions 미전송(부분 수정) -> 정상

이 문제는 프런트엔드가 비활성 상태의 필드를 전송해서 발생하는 단순 UI 문제라기보다, 서버 측 검증이 use_file_upload 조건을 반영하지 않아 발생하는 요청 검증 정책의 불일치입니다. 따라서 프런트엔드에서 allowed_extensions를 제거하는 방식만으로 우회하기보다, UpdateBoardRequest의 검증 규칙을 StoreBoardRequest와 동일한 조건부 정책으로 맞추는 것이 적절합니다.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions