본문 바로가기
Backend2026년 6월 12일2분 읽기

파일 업로드 서버 처리, multipart와 스트리밍

YS
김영삼
조회 1211
파일 업로드 서버 처리, multipart와 스트리밍

핵심 요약

파일 업로드는 multipart/form-data로 오며, 큰 파일을 버퍼로 통째 받으면 메모리가 터진다. 스트림으로 받아 디스크나 오브젝트 스토리지로 흘리고, 서버에서 크기 한도·확장자·실제 MIME을 반드시 검증한다(클라이언트 검증은 우회 가능).

1. 핵심 원칙

  • 스트리밍 파서(multer/busboy)로 메모리 점유 최소화
  • 최대 크기 제한을 서버에서 강제
  • 저장 파일명은 랜덤 생성 — 사용자 입력 파일명 그대로 쓰지 말 것

2. 검증 포인트

검증이유
크기 한도DoS·디스크 폭주 방지
확장자 화이트리스트실행 파일 업로드 차단
매직 넘버(실제 타입)확장자 위조 방지

3. 함정

  • 웹 루트(public)에 실행 가능한 파일을 그대로 저장하면 원격 실행 위험 — 정적 서빙 경로/권한 분리
  • Content-Type 헤더는 위조 가능 — 파일 시그니처로 실제 타입 확인
  • 경로 조합 시 ../ 차단(path traversal)

자주 묻는 질문

클라이언트에서 확장자 검사했는데 서버도 해야 하나요?

반드시요. 클라이언트 검증은 우회됩니다. 서버에서 크기·확장자·실제 MIME를 다시 검증하지 않으면 악성 파일이 올라옵니다.

파일명을 그대로 저장하면 안 되나요?

덮어쓰기·경로 탈출·실행 위험이 있습니다. 서버에서 랜덤 이름을 부여하고 원본명은 메타데이터로만 보관하세요.

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록