Java 1.8 ImageIO가 TIFF를 못 읽는 이유와 해결 방법

박성현·2025년 12월 4일

개발중 학습

목록 보기
35/44

[트러블슈팅] Java 1.8에서는 TIFF ImageIO 미지원 → Java 11로 업그레이드하여 해결한 사례

최근 프로젝트에서 드론 촬영 원본 이미지(.TIF) 를 기반으로 썸네일을 생성해야 하는 작업이 있었다.
그런데 특정 서버에서는 썸네일 생성이 실패하고, 어떤 서버에서는 정상 작동하는 이상한 현상을 발견했다.

결론부터 말하면,

Java 1.8의 기본 ImageIO는 TIFF 읽기를 지원하지 않고, Java 11은 공식적으로 TIFF 읽기를 지원한다

이 차이 때문에 발생한 문제였다.

아래는 실제로 겪은 문제 상황과 해결 과정이다.


🔍 1. 문제 발생 상황

썸네일 생성 코드에서 .TIF 파일을 읽는 부분이 있었다.

BufferedImage image = ImageIO.read(new File(imagePath));

Java 11 서버에서는 정상적으로 이미지가 로딩되지만,
Java 1.8 서버에서는 다음과 같은 에러가 발생했다:

❌ Java 1.8 서버 오류 로그

javax.imageio.IIOException: Can't read input file!

또는

No ImageReader found for format 'tif'

두 메시지는 공통적으로 ImageIO가 TIFF 포맷을 처리하지 못한다는 의미다.


🤔 2. 로그는 안 나오는데, 이미지는 계속 null

문제가 더 어려웠던 이유는:

  • Java 1.8에서는 TIFF 자체를 지원하지 않기 때문에
    에러를 던지지 않고 null을 반환하는 경우까지 존재했다.
  • 때문에 디버깅이 쉽지 않았고, 단순 경로 문제로 오해하기 쉬웠다.

🧪 3. 동일 코드, 서로 다른 서버에서 다른 결과

서버Java 버전결과
서버 AJava 1.8TIFF 읽기 실패(Thumbnail 생성 실패)
서버 BJava 11TIFF 정상 로딩(Thumbnail 생성 성공)

정확히 같은 코드인데도 결과가 갈림.
이때 직감했다:

“버전 차이에서 오는 ImageIO TIFF 지원 문제다.”


📌 4. 왜 Java 1.8은 TIFF 를 지원하지 않을까?

🔸 Java 1.8 ImageIO 포맷 지원 현황

  • jpg
  • png
  • gif
  • bmp
  • wbmp
  • tif/tiff (미지원)

TIFF는 오래전부터 특수 이미지 포맷으로 분류되어
Java 1.8에서는 ImageIO에 기본 포함되지 않는다.


📌 5. Java 11 이상에서는 TIFF 지원됨

Java 11부터는 OpenJDK에 TIFF 플러그인이 기본 포함되어서
별도 라이브러리 없이 ImageIO에서 TIFF를 읽을 수 있게 되었다.

✔ Java 11 ImageIO TIFF Reader 정상 출력

Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName("tif");
while (readers.hasNext()) {
    System.out.println("Reader: " + readers.next().getClass());
}

Java 11에서는 아래와 같이 정상 Reader가 잡힘:

Reader: com.sun.imageio.plugins.tiff.TIFFImageReader

Java 1.8에서는 아무 것도 출력되지 않음.


🛠 6. 내가 적용한 최종 해결 방법

✔ 해결책 1) 서버 Java 버전을 1.8 → 11 로 업그레이드

실제로 서버 환경을 다음과 같이 변경했다:

echo $JAVA_HOME
# 기존: /usr/lib/jvm/jdk-1.8.x

java -version
# 기존: openjdk version "1.8.0_462"

Java 11로 변경

export JAVA_HOME=/usr/lib/jvm/jdk-11.0.21

업그레이드 후, TIFF 썸네일 생성은 즉시 정상 작동했다.


🚀 7. 업그레이드 후 확인

✔ Java 11에서 TIFF 정상 로딩

BufferedImage img = ImageIO.read(new File("/path/image.TIF"));
System.out.println(img != null ? "OK" : "Fail");

결과:

OK

문제 완전히 해결!


🎯 8. 결론

이번 문제의 핵심은:

Java 1.8의 ImageIO는 TIFF 를 지원하지 않는다. → Java 11 이상에서는 TIFF 지원됨

따라서 TIF 이미지를 사용하는 프로젝트라면 다음 중 하나를 선택해야 한다.

해결 옵션

  1. Java 11 이상으로 업그레이드 (가장 안정적)
  2. Java 1.8 환경 유지 시, twelve-monkeys 같은 외부 이미지 라이브러리 추가

✨ 9. 요약

항목Java 1.8Java 11
TIFF 포맷 ImageIO 지원❌ 미지원✔ 기본 지원
Thumbnail 생성실패정상
추가 라이브러리 필요OX

📘 마무리

이 문제는 경로 오류처럼 보였지만, 실제 원인은 Java 버전 차이로 인한 TIFF 지원 여부였다.

같은 코드가 서버 A에서는 실패하고 B에서는 성공한다면
환경(Java 버전)을 먼저 확인하는 것이 큰 도움이 된다.

이런 문제 다시 안 겪도록 기록 차원에서 남겨본다.


profile
개발기록장

0개의 댓글