next.js bodySizeLimitNext.js Server ActionNext.js 13 API RoutesNextjs 413 Payload Too LargeNext.js serveraction

Next.js Server Action 큰 용량 이미지 업로드하기 (413 Payload Too Large)

KUKJIN LEE
KUKJIN LEE
2025년 1월 12일
1326

Next.js로 웹 애플리케이션을 개발하다 보면, 대용량 이미지를 업로드해야 하는 상황이 종종 생깁니다. 그러나 기본 설정 그대로라면 용량 제한(body size limit)에 걸려 업로드가 실패할 수 있습니다. 문제를 어떻게 해결하는지, Next.js 13+ 버전에서 Server Actions 설정을 활용해 Body Size Limit(요청 바디 제한)를 늘리는 방법을 설명 드리겠습니다.

 

next.config.js 수정

아래 예시는 Server Actions에 대한 Body Size Limit를 30MB로 설정하는 코드입니다. next.config.js 파일에 다음과 같은 구문을 추가하면 됩니다. 물론 30MB를 50MB로 변경하면 50MB 설정한다는 뜻이됩니다.

/** @type {import('next').NextConfig} */
const nextConfig = {
    images: {
        domains: ['gg.cloudfront.net'],
    },
    // Server Actions body size 제한을 30MB로 설정
    experimental: {
        serverActions: {
            bodySizeLimit: '30mb'
        }
    },
}
module.exports = nextConfig

적용후테스트방식

  1. 큰 용량 이미지 업로드 페이지 만들기

    • 간단한 파일 입력(<input type="file" />)을 통해 20MB ~ 30MB 이상의 이미지를 테스트 업로드해보기.

    • 에러 발생 여부, 업로드 속도, 그리고 업로드 성공 시 서버 로그를 모니터링.

  2. 콘솔 확인

    • Next.js 서버(혹은 Vercel 로그)에서 body parser 관련 에러가 발생하지 않는지 확인.

    • 업로드가 정상 처리되면, 이미지가 서버/스토리지에 올라갔는지 확인

 

결론

Next.js는 편리한 Image Optimization 기능과 Server Actions를 제공하지만, 기본 설정에서 바디 사이즈 제한이 있을 수 있어 큰 이미지 업로드에 실패할 때가 있습니다. 따라서 용량이 큰 이미지 또는 기타 파일을 첨부 할 경우 설정 변경을 통해 쉽게 해결할 수 있습니다.

  • 30MB 이하의 이미지가 대부분이라면 bodySizeLimit: '30mb' 정도면 무난

  • 더 큰 파일이 잦다면, CDN 직업로드나 S3 직업로드 등으로 확장 가능합니다.

보다 안정적으로 서비스를 운영하기 위해, 단순히 용량 제한만 풀 것이 아니라 트래픽/스토리지 비용, 보안 정책도 함께 검토해보시길 권장드립니다.

관련 글

TypeScript any 린트 에러(no-explicit-any) 근본적으로 해결하기

TypeScript 프로젝트에서 @typescript-eslint/no-explicit-any 린트 에러는 단순 규칙 비활성화로 해결할 문제가 아닙니다. 눈 앞 문제는 해결할 수 있지만, TypeScript를 사용하는 가장 중요한 이유를 위배하게 됩니다. any 타입은...

2025년 7월 23일269

JSP 주석, 아직도 `` 쓰시나요? 올바른 사용법

코드를 작성하다 보면 주석을 남기는 경우가 많습니다. 하지만 JSP 환경에서 어떤 주석을 사용하냐에 따라 보안 수준과 성능 이 크게 달라집니다. 표준 주석: 서버 사이드 주석 &lt;%-- --%&gt; JSP 페이지 내 개발 관련 주석은 &lt;%-- --%&gt; 를 사용하는게 좋습니다...

2025년 7월 9일144

쉽게 만드는 React Tab 라이브러리 react-tabs

개발자가 커스텀 스타일을 쉽게 적용할 수 있도록 최소한의 스타일만 제공하여 유연한 스타일링 이 가능한 라이브러리입니다. 상태 관리가 내장되어 있어 탭 선택 및 패널 표시 로직을 직접 구현할 필요 없이 간편하게 사용할 수 있습니다. 기본 사용법 먼저, 라이브러리를 설치합...

2025년 6월 17일173

Next.js 환경 변수 NEXT_PUBLIC 접두사 역할

NEXT_PUBLIC 접두사를 붙이면 변수의 접근 범위가 완전히 달라집니다. 이 차이점을 이해하는 것이 안전하고 효율적인 Next.js 애플리케이션을 구축하는 데 중요합니다. NEXT_PUBLIC 접두사가 없는 환경 변수 (서버 전용) NEXT_PUBLIC 접두사 없이...

2025년 6월 13일156