증상 요약
게시판 수정 화면에서 첨부파일 사용을 비활성화(use_file_upload=false) 한 상태로 저장하면, allowed_extensions 검증 오류가 발생하여 저장이 실패합니다.
재현 절차
- 관리자 -> 게시판 관리 -> 기존 게시판 수정
- "첨부파일 사용"을 비활성화
- 저장 버튼 클릭
기대한 동작
첨부파일 사용이 비활성화된 경우에는 허용 확장자 설정이 사용되지 않으므로 정상적으로 저장되어야 합니다.
실제 동작
다음과 같은 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
활성 확장 목록 (해당 시)
재현 환경
순정 설치 환경 (코어 수정 및 커스텀 확장 없음)
스크린샷·로그
브라우저 응답(JSON)
{
"message": "허용 파일 확장자를 최소 1개 이상 입력해야 합니다.",
"errors": {
"allowed_extensions": [
"허용 파일 확장자를 최소 1개 이상 입력해야 합니다."
]
}
}
추가 정보
원인을 확인한 결과 StoreBoardRequest와 UpdateBoardRequest의 검증 정책이 서로 달랐습니다.
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와 동일한 조건부 정책으로 맞추는 것이 적절합니다.
증상 요약
게시판 수정 화면에서 첨부파일 사용을 비활성화(use_file_upload=false) 한 상태로 저장하면,
allowed_extensions검증 오류가 발생하여 저장이 실패합니다.재현 절차
기대한 동작
첨부파일 사용이 비활성화된 경우에는 허용 확장자 설정이 사용되지 않으므로 정상적으로 저장되어야 합니다.
실제 동작
다음과 같은 Validation 오류가 발생하며 저장되지 않습니다.
{ "message": "허용 파일 확장자를 최소 1개 이상 입력해야 합니다.", "errors": { "allowed_extensions": [ "허용 파일 확장자를 최소 1개 이상 입력해야 합니다." ] } }실제 요청 Payload는 다음과 같습니다.
{ "use_file_upload": false, "allowed_extensions": [] }환경 정보 (필수)
활성 확장 목록 (해당 시)
재현 환경
순정 설치 환경 (코어 수정 및 커스텀 확장 없음)
스크린샷·로그
브라우저 응답(JSON)
{ "message": "허용 파일 확장자를 최소 1개 이상 입력해야 합니다.", "errors": { "allowed_extensions": [ "허용 파일 확장자를 최소 1개 이상 입력해야 합니다." ] } }추가 정보
원인을 확인한 결과
StoreBoardRequest와UpdateBoardRequest의 검증 정책이 서로 달랐습니다.StoreBoardRequest는 첨부파일 사용이 비활성화된 경우allowed_extensions검증을 제외하지만,UpdateBoardRequest는 다음 규칙이 적용되어 있었습니다.관리 화면에서는
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와 동일한 조건부 정책으로 맞추는 것이 적절합니다.