파일업로드 (DB)에 직접 트러블 슈팅

존스노우·2024년 4월 5일
0

기타

목록 보기
7/7

"stackTrace": "org.springframework.orm.jpa.JpaSystemException: could not execute statement [Packet for query is too large (45,421,549 > 33,554,432). You can change this value on the server by setting the 'max_allowed_packet'

  • 대충 패킷의 크기가 45,421,549바이트인데, 서버의 'max_allowed_packet' 값이 33,554,432바이트로 설정되어 있어 오류가 발생

  • 기존 mybatis로 일정한 크기까지 파일 크기 검사해서 파일을 DB에 저장시 에러가 없엇음

  • jpa 로 변경 후 조금 큰 파일을 올렸더니 저런 에러발생
    ?

  • 파일은 20mb인데. 왜 2배정도 크기가 커져서 들어가서 저렇게됫을까.

Mybatis VS Jpa

  1. Mybatis : : SQL 매핑 프레임 워크
  • 쿼리 직접 작성하고 파라미터 전달해서 디비랑 상호작용

  • Mybatis는 파일 데이터를 즉시 데이터베이스에 전달하므로
    메모리에 장시간 보관하지 않는다.

  • Mybatis에서 파일 데이터 디비에 저장할때 해당 디비 jdbc드라이버를 사용함

  • jdbc드라이버는 대용량 데이터 처리할수 있도록 최적화 됨.

  • 이 를 통해 대용량 파일을 한번에 메모리에 로드하지않고 효율적 저장 가능

  1. JPA

  • JPA에서 파일 데이터를 엔티티의 바이트 배열 필드에 직접 매핑하면, 엔티티 객체 전체를 메모리에 로드해야 합니다. 이 때 파일 크기가 크면 OutOfMemoryError가 발생할 수 있습니다.
profile
어제의 나보다 한걸음 더

0개의 댓글