[Tika] 첨부파일 확장자 및 MIME 타입 추출하기

웹개발 시 첨부파일 확장자 위변조를 위한 검증이 필요한 경우가 있습니다. 파일의 확장자MIME 타입을 정확히 판별해야 할 때가 많습니다. 예를 들어 이미지 업로드 제한, 문서 유형 분류, 보안 검증 등에서 활용되죠. 단순히 확장자만 보는 것은 보안상 위험할 수 있으므로, 실제 파일의 내용을 기반으로 분석하는 것이 좋습니다. 이런 작업 오픈소스 Apache Tika입니다.

Tika란?

Apache Tika는 다양한 확장자 포맷의 파일에서 텍스트나 메타데이터, MIME 타입 등을 추출해주는 Java 기반 오픈소스 라이브러리입니다. 문서 내용을 파싱하는 기능뿐만 아니라 파일의 콘텐츠를 기반으로 확장자나 MIME 타입도 추론해줍니다.

Maven 의존성 추가

먼저 Maven 기반 프로젝트라면 다음 의존성을 pom.xml에 추가하세요:

<dependency>
  <groupId>org.apache.tika</groupId>
  <artifactId>tika-core</artifactId>
  <version>2.9.1</version>
</dependency>

Java 예제: MIME 타입과 확장자 추출

import org.apache.tika.Tika;
import org.apache.tika.mime.MimeTypes;
import java.io.File;

public class FileTypeExample {
    public static void main(String[] args) throws Exception {
        File file = new File("example.docx");  // 업로드된 파일

        Tika tika = new Tika();

        // MIME 타입 추출
        String mimeType = tika.detect(file);
        System.out.println("MIME 타입: " + mimeType);

        // 확장자 추출
        String extension = MimeTypes.getDefaultMimeTypes()
                                    .forName(mimeType)
                                    .getExtension();
        System.out.println("예상 확장자: " + extension);
    }
}

예를 들어 example.docx 파일을 분석하면 다음과 같은 결과가 나올 수 있습니다:

MIME 타입: application/vnd.openxmlformats-officedocument.wordprocessingml.document  
예상 확장자: .docx

왜 Tika를 써야 할까?

  • 보안 강화: 확장자가 .jpg여도 내부적으로는 실행 파일일 수 있습니다. Tika는 실제 파일 내용을 기반으로 판단합니다.
  • 포맷 검증: 사용자가 업로드한 파일이 실제로 요구한 포맷인지 검증 가능
  • 자동 처리: 다양한 형식에 대해 자동으로 확장자 및 타입을 예측해줍니다.

활용 예시

  • 이미지 업로드 시 image/* MIME 타입만 허용
  • 게시판 첨부파일 필터링
  • 백엔드 문서 분류 자동화

마무리

Apache Tika는 단순히 텍스트를 추출하는 도구를 넘어서, 파일의 MIME 타입과 확장자 판별에도 매우 유용한 도구입니다. 특히 사용자 업로드 기반의 웹서비스를 운영 중이라면 Tika를 통해 파일의 신뢰성과 보안을 강화해보세요. 웹개발 생산성과 안정성을 동시에 높일 수 있는 좋은 선택이 될 것입니다.

댓글 남기기