← 전체 글로 돌아가기

API

API에서 대량 파일 업로드를 처리할 때 배포 전 확인

파일 업로드 엔드포인트가 느려지거나 실패하면, 타임아웃, 파일 크기 제한, 디스크 공간을 순서대로 확인한다.

사용자가 여러 파일을 한 번에 업로드할 때, API 응답이 느리거나 에러가 나는 경우가 많다.

실제 API 응답을 확인한다

curl -i 'https://example.com/api/upload' \
  -F 'file=@/path/to/large-file.zip'

HTTP 상태 코드, 응답 시간, 에러 메시지를 본다. 특히 timeout이 나는지, 413 (Payload Too Large) 에러가 나는지 확인한다.

서버의 파일 업로드 크기 제한을 확인한다

Nginx, Apache 등 웹 서버에서 업로드 크기 제한을 둔다:

client_max_body_size 100M;  # nginx
LimitRequestBody 104857600  # apache

애플리케이션 레벨에서도 제한이 있을 수 있다. 예를 들어 Node.js express는:

app.use(express.json({ limit: '100mb' }));
app.use(express.urlencoded({ limit: '100mb' }));

타임아웃을 확인한다

대용량 파일 업로드는 시간이 걸린다. 기본 타임아웃 (보통 30초)을 초과하면 업로드가 중단된다.

server.timeout = 300000; // 5분

API 엔드포인트마다 다른 타임아웃을 설정할 수도 있다.

디스크 공간과 메모리를 점검한다

df -h
free -h

파일이 메모리에 전부 로드된 후 저장되는 방식이면, 메모리 부족으로 실패할 수 있다. 파일을 청크(chunk) 단위로 받아서 바로 디스크에 저장하는 방식이 더 효율적이다.

상태 코드와 응답을 기록한다

SELECT status_code, COUNT(*) FROM api_logs
WHERE endpoint = '/api/upload' AND timestamp > NOW() - INTERVAL '1 hour'
GROUP BY status_code;

업로드 실패가 계속되는지, 특정 파일 크기에서만 실패하는지 추적한다.

클라이언트에서의 분할 업로드를 고려한다

매우 큰 파일은 여러 부분으로 나눠서 업로드하는 게 안정적이다. 이렇게 하면 각 부분이 실패해도 다시 보낼 수 있고, 전체 업로드를 다시 시작할 필요가 없다.