# Multipart 업로드 1GB 상한 유지 — 리스크 문서화

**결정**: multipart 상한 1GB 유지 (사용자 확정, D-B4-multipart, sid 20260629-175705)
**관련 체크리스트**: [security-remediation-checklist.md §B4](./security-remediation-checklist.md#b4-의존성세션운영-하드닝)

## 현재 설정

`src/main/resources/application.properties`:

```properties
spring.servlet.multipart.max-file-size=1GB
spring.servlet.multipart.max-request-size=1GB
```

## 리스크

### DoS (Denial of Service)

- 악의적 클라이언트가 1GB 파일 업로드를 동시에 여러 건 요청하면 서버 처리 스레드·메모리·디스크 I/O를 소진할 수 있다.
- Spring MVC 기본 설정에서 multipart 파싱은 요청 완료 전까지 임시 파일(`java.io.tmpdir`)에 버퍼링된다.
- 임시 디스크 고갈 시 다른 기능(로그, 쓰기 연산)도 함께 영향받는다.

### 디스크 고갈

- 업로드 임시 경로(`/tmp` 또는 컨테이너 tmpfs)와 저장 경로(`~/.bibimbap/uploads`)가 모두 대용량 파일로 채워질 수 있다.
- 컨테이너 환경에서 tmpfs 상한이 낮으면 1GB 단일 파일에도 OOM 오류가 발생한다.

## 유지 결정 근거

- bibimbap 은 게임 WebGL 번들 업로드를 지원하며, 실제 게임 빌드 크기가 수백 MB에 이를 수 있다. 상한을 낮추면 합법적 업로드가 차단된다.
- 현재 운영 규모(소규모)에서 대규모 DoS 시도 가능성이 낮다고 사용자가 판단했다.
- 상한 축소·업로드 스트리밍 개선은 이후 운영 부하 확인 후 별도 검토.

## 완화 권고 (추후)

| 권고 항목 | 설명 |
| --- | --- |
| 리버스 프록시 상한 설정 | nginx `client_max_body_size` 또는 AWS ALB 요청 크기 제한으로 애플리케이션 앞단 차단 |
| 디스크 모니터링 | 업로드 경로(`~/.bibimbap/uploads`) 및 tmpdir 사용량 alert 설정 (예: 80% 도달 시 알림) |
| 업로드 인증 게이트 | 현재 게임 업로드는 로그인 필수 — 익명 대용량 업로드 차단. 권한 검사 유지 확인. |
| 동시 업로드 rate limit | Spring MVC thread pool 또는 리버스 프록시 connection limit으로 동시 대용량 요청 제한 |
| tmpdir 분리 | `spring.servlet.multipart.location` 으로 tmpdir를 전용 볼륨으로 분리해 시스템 영향 격리 |

## 관련 문서

- [owasp-dependency-check-guide.md](./owasp-dependency-check-guide.md) — 동일 B4 트랙 CVE 스캔 설정
- [security-remediation-checklist.md](./security-remediation-checklist.md) — 전체 보안 체크리스트
- [../maintenance/post-deploy-verification-checklist.md](../maintenance/post-deploy-verification-checklist.md) — 배포 후 디스크 확인 절차
