티스토리 뷰

728x90

 

 로컬환경에서는 파일을 POST로 요청을 보낼때 정상적으로 요청이 완료되어서 이미지파일을 저장하는데 똑같은 코드를 톰캣환경의 서버에 배포하여 같은 기능을 실행하면 이상하게 파일이 전송조차 되지 않는 오류를 경험해보신적 있으신가요? 이번 포스팅에는 서버로 배포한경우 서버에서 업로드 크기를 조정하는 방법에 대해서 포스팅을 해보겠습니다.

 

 웹 애플리케이션에서 파일 업로드는 매우 일반적인 기능입니다. 하지만 파일 업로드 크기는 보안 및 성능상의 이유로 제한이 필요하며, 개발 환경과 배포 환경에서 이 제한을 어떻게 설정하느냐에 따라 파일 업로드 동작이 달라질 수 있습니다. 

 

1. 기본 파일 업로드 크기 제한

 

Spring Boot와 Tomcat을 함께 사용하는 경우, 기본적으로 설정된 파일 업로드 크기 제한이 있습니다:

  • Spring Boot는 기본적으로 파일 크기를 1MB로 제한합니다.
  • Tomcat은 POST 요청 크기를 기본적으로 2MB로 제한합니다.

 따라서 큰 파일을 업로드하려면 이 제한을 늘려야 합니다. 로컬 개발 환경과 서버 배포 환경 모두에서 이러한 제한을 설정할 수 있습니다.

 

2. Spring Boot에서 파일 업로드 크기 설정하기

 Spring Boot는 자체적으로 파일 업로드 크기 제한을 설정할 수 있습니다. 이 설정은 application.properties 또는 application.yml 파일에서 관리됩니다.

 

 

application.properties

spring.servlet.multipart.max-file-size=50MB  # 업로드 가능한 최대 파일 크기
spring.servlet.multipart.max-request-size=50MB  # 전체 요청의 최대 크기

 

application.yml

spring:
  servlet:
    multipart:
      max-file-size: 50MB  # 업로드 가능한 최대 파일 크기
      max-request-size: 50MB  # 전체 요청의 최대 크기

 

  • max-file-size: 한 번에 업로드할 수 있는 개별 파일의 최대 크기.
  • max-request-size: 요청 전체의 최대 크기. 여러 파일을 업로드할 경우 이 값이 중요합니다.

 이 설정은 로컬 개발 환경에서 주로 사용되며, Spring Boot가 내장된 Tomcat 서버 위에서 동작하는 경우 이 설정이 파일 크기 제한을 관리합니다.

 

 

3. Tomcat에서 파일 업로드 크기 설정하기

 

 배포 환경에서는 Tomcat이 파일 크기를 제한할 수 있습니다. 이 경우 server.xml 또는 context.xml 파일을 수정해야 합니다. Tomcat의 설정은 주로 배포된 서버 환경에서 사용됩니다.

server.xml에서 POST 요청 크기 설정

Tomcat의 server.xml에서 POST 요청의 크기를 설정할 수 있습니다. 이 파일은 Tomcat의 conf 폴더에 위치해 있습니다.

 

server.xml

<Connector 
    port="8080" 
    protocol="HTTP/1.1" 
    connectionTimeout="20000" 
    redirectPort="8443"
    maxPostSize="52428800"  <!-- POST 요청 크기를 50MB로 설정 -->
/>

 

  • maxPostSize: POST 요청의 최대 크기를 바이트 단위로 설정합니다. 50MB는 52428800 바이트입니다. 제한을 없애려면 -1로 설정할 수 있습니다.

context.xml

<Context>
    <!-- 파일 업로드 최대 크기 설정 -->
    <Resources allowLinking="true" maxFileSize="52428800" maxRequestSize="52428800"/> <!-- 50MB -->
</Context>

 

 

  • maxFileSize: 업로드할 수 있는 개별 파일의 최대 크기.
  • maxRequestSize: 전체 요청의 최대 크기. 여러 파일을 업로드하는 경우 이를 더 높게 설정해야 할 수 있습니다.

 

 

4. 프록시 서버(NGINX)의 파일 업로드 크기 제한 설정

 배포된 서버에서 NGINXApache 같은 프록시 서버를 사용하는 경우, 이들 서버에서도 파일 업로드 크기를 제한할 수 있습니다. 예를 들어, NGINX는 기본적으로 1MB로 제한되어 있으며, 이를 늘려줘야 합니다.

 

  • NGINX 설정 파일은 일반적으로 /etc/nginx/nginx.conf 또는 개별 서버 블록 파일에 있습니다.
  • client_max_body_size 지시자를 사용하여 업로드 크기를 설정할 수 있습니다.

 

nginx.conf 

http {
    ...
    client_max_body_size 50M;  # 50MB로 설정
    ...
}

 

 

 이 설정을 변경한 후 NGINX를 재시작해야 적용됩니다.

sudo systemctl restart nginx

 

 

 

5. 로컬 환경과 서버 환경의 차이점

로컬 환경:

  • Spring Boot 내장 서버를 사용하는 로컬 개발 환경에서는 주로 application.properties 또는 application.yml 파일에서 파일 크기 제한을 설정합니다.
  • 이때 파일 크기 제한은 주로 Spring Boot 자체에서 관리되며, Tomcat 설정은 기본적으로 Spring Boot의 설정에 의해 덮어씌워집니다.

서버 환경:

  • 배포된 서버 환경에서는 Tomcat 설정이 중요한 역할을 합니다. server.xml과 context.xml에서 POST 요청과 파일 업로드 크기를 제한할 수 있습니다.
  • 또한 NGINXApache와 같은 프록시 서버가 있다면, 이들의 설정에서도 파일 업로드 크기를 관리해야 합니다.
  • 서버 환경에서는 Spring Boot의 설정Tomcat, 프록시 서버의 설정이 모두 적절하게 설정되어 있어야 파일 업로드 문제가 발생하지 않습니다.

 

 

6. 마치며...

 파일 업로드 크기 제한은 웹 애플리케이션에서 매우 중요한 설정입니다. Spring Boot, Tomcat, 그리고 프록시 서버에서 각각 설정을 적절히 관리해야만 대용량 파일을 업로드할 때 문제가 발생하지 않습니다.

  • 로컬 환경에서는 주로 Spring Boot의 설정으로 파일 크기 제한을 관리합니다.
  • 배포된 서버 환경에서는 Tomcat의 설정이 더 중요하며, 프록시 서버(NGINX 등)를 사용할 경우 해당 서버의 설정도 함께 관리해야 합니다.

이렇게 로컬과 서버 환경에서 파일 업로드 크기 제한을 명확하게 설정하고 관리하면, 파일 업로드 관련 문제를 사전에 방지할 수 있습니다.

 

감사합니다. ^^

728x90