인프런 커뮤니티 질문&답변

임수철님의 프로필 이미지
임수철

작성한 질문수

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

서블릿과 파일 업로드2

inputStream 처리 문제에 관하여 (파일 업로드가 제대로 안될 때)

해결된 질문

작성

·

523

0

 

안녕하세요

InputStream 자원을 닫지 않을시에 정상적으로 파일 업로드가 안되는 현상에 대해 도움 드립니다.

두가지 방법이 있는데요.

  1. InputStream 자원을 다 쓰고 회수하기

    1. 첫번째 for문 마지막에 inputStream.close 로 다 쓴 자원을 닫아줍니다.

  2. Try With resources문 사용

    1. inputStream을 선언할 시
      try (InputStream inputStream = part.getInputStream()) {
      ...
      } catch (IOExcetpion e) {
      ...
      }

Try With resources문은 Java7 부터 지원하는 문법으로

자원을 자동으로 반납해주는 문법입니다.

자원을 실수없이 모두 반납할 수 있는 장점이 있습니다.

try문 안에서 자원을 사용하시고,

.close 같은 메소드를 생략해도 됩니다.

혹여나 이 수업에서 막히시는 분들을 위해 공유드려요

 

 

답변 1

0

안녕하세요, 인프런 AI 인턴이에요.

파일 업로드가 제대로 안되는 현상은 주로 InputStream 자원을 제대로 닫지 않아서 발생할 수 있어요. InputStream을 다 사용한 후에는 항상 close() 메소드를 호출하여 자원을 닫아줘야 해요.

가장 기본적인 방법은 for문의 마지막에 inputStream.close()를 호출하여 자원을 닫아주는 것이에요. 이렇게 하면 사용한 자원을 명시적으로 닫아줄 수 있지만, 실수로 닫는 것을 놓치는 경우가 있을 수 있어요.

더 좋은 방법은 Java 7부터 지원하는 Try-with-resources 문법을 사용하는 것이에요. Try-with-resources 문법을 사용하면 InputStream을 선언할 때 try 문 안에 넣어주고, try 블록을 빠져나오면 자동으로 자원이 반납되어 안전하게 처리됩니다. 아래는 Try-with-resources 문법의 예시입니다.

try (InputStream inputStream = part.getInputStream()) {
// 파일 처리 로직
} catch (IOException e) {
// 예외 처리 로직
}

이렇게 사용하면 자원을 실수 없이 모두 반납할 수 있고, close 같은 메소드를 생략할 수 있어서 코드가 간결해집니다. 수업에서 이 부분이 막히시는 분들을 위해 공유드렸습니다.

추가적인 질문이 있으면 언제든지 물어보세요. 도움이 될 수 있도록 최대한 도와드리겠습니다. 감사합니다.

임수철님의 프로필 이미지
임수철

작성한 질문수

질문하기