본문 바로가기

공지사항

공지사항을 알려드립니다.

또다른공고 [버그] UpdateBoardRequest가 use_file_upload=false에서도 allowed_extensions를 …

페이지 정보

profile_image
작성자 관리자
조회 25회 작성일 26-07-19 20:56

본문

## 증상 요약


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


---


## 재현 절차


1. 관리자 -> 게시판 관리  -> 기존 게시판 수정

2. "첨부파일 사용"을 비활성화

3. 저장 버튼 클릭


---


## 기대한 동작


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


---


## 실제 동작


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


```json

{

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

    "errors": {

        "allowed_extensions": [

            "허용 파일 확장자를 최소 1개 이상 입력해야 합니다."

        ]

    }

}

```


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


```json

{

    "use_file_upload": false,

    "allowed_extensions": []

}

```


---


## 환경 정보 (필수)


- **코어 버전**: 7.0.4

- **업그레이드 전 -> 후 버전**: 해당 없음 (신규 설치)

- **PHP 버전**: 8.3.x

- **웹서버·실행 방식**: Nginx + PHP-FPM

- **DB**: MariaDB 10.11.x

- **OS**: Linux


---


## 활성 확장 목록 (해당 시)


```text

sirsoft-board

```


---


## 재현 환경


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


---


## 스크린샷·로그


브라우저 응답(JSON)


```json

{

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

    "errors": {

        "allowed_extensions": [

            "허용 파일 확장자를 최소 1개 이상 입력해야 합니다."

        ]

    }

}

```


---


## 추가 정보


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


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


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


```php

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

```


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


```json

{

    "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와 동일한 조건부 정책으로 맞추는 것이 적절합니다.