You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Render Free 플랜에서 실행되는 백엔드 Web Service 배포/부팅 및 백그라운드 처리
💥 발생 상황
Render 무료 플랜의 512MB 메모리 제한에서 백엔드 인스턴스가 아래 로그와 함께 종료되었습니다.
기존 Render 환경변수 또는 Dockerfile JVM 설정이 -Xmx384m 기준이라 heap 외 메모리까지 포함한 실제 RSS가 512MB를 초과할 수 있었습니다. JVM은 heap 외에도 metaspace, thread stack, code cache, direct memory를 사용합니다.
추가로 이미지 생성과 EPUB 정규화 비동기 작업이 동시에 실행될 수 있었고, 캐릭터 이미지 업로드 과정에서 base64 재인코딩/재디코딩으로 불필요한 메모리 복사가 발생했습니다.
📝 To-do
Render Free 512MB 기준 JVM 옵션 축소
Spring lazy initialization 기본 활성화
Swagger/OpenAPI 기본 비활성화
Hibernate batch fetch size 축소
이미지 생성 executor 동시 실행 수 1개로 제한
EPUB 정규화 executor 동시 실행 수 1개로 제한
이미지 업로드 시 base64 재인코딩/재디코딩 제거
Render 배포 runbook 환경변수 갱신
전체 테스트 실행
🧪 예상 응답
Render Free 환경에서 백엔드가 부팅 및 일반 요청 처리 중 512MB 제한을 넘지 않도록 메모리 헤드룸을 확보합니다.
Render Dashboard의 Environment Variables에는 아래 값을 추가 또는 교체해야 합니다.
# 기존 JAVA_TOOL_OPTIONS가 있으면 아래 값으로 교체JAVA_TOOL_OPTIONS=-Xms64m -Xmx256m -XX:+UseSerialGC -XX:ActiveProcessorCount=1 -XX:MaxMetaspaceSize=128m -XX:ReservedCodeCacheSize=64m -XX:MaxDirectMemorySize=32m -Xss256k -XX:+ExitOnOutOfMemoryError# 없으면 새로 추가SPRING_MAIN_LAZY_INITIALIZATION=trueSPRINGDOC_ENABLED=falseHIBERNATE_DEFAULT_BATCH_FETCH_SIZE=100# 기존 값이 없다면 함께 추가 권장DB_MAX_POOL_SIZE=2DB_MIN_IDLE=1
주의: Render Dashboard에 JAVA_TOOL_OPTIONS가 설정되어 있으면 Dockerfile의 JAVA_TOOL_OPTIONS보다 우선 적용됩니다.
📸 ScreenShot & Log
Instance failed: r8xxz
Ran out of memory (used over 512MB) while running your code.
July 14, 2026 at 3:02 PM
Instance failed: r8xxz
Exited with status 137 while running your code. Check your service logs for more information.
July 14, 2026 at 2:57 PM
Activity