본문 바로가기
★ 프로젝트 + 트러블 슈팅 ★

[MIME 이슈] 파일 타입 트러블 슈팅

by 리승우 2024. 6. 14.

[이슈 상황]

웹툰 관리자 페이지에서 웹툰 등록을 위해 이미지 파일 및 zip 파일을 업로드 할 시, 검증하는 로직이 있음

파일 타입들은 아래 목록 중 하나에 속해야만 다음 로직으로 가며, 그렇지 않을 시에는

"허용된 파일 형식이 아닙니다. 확인 후 올려주세요."

라는 alert를 띄워줌

'image/jpeg',
'application/zip'

 

해당 상황에서, 파일 업로드를 했을 때 계속 경고 alert이 발생하여 아래 명령문으로 파일의 타입을 확인해보았음

file --mime-type 파일명

 

그 결과, 이미지와 zip파일 모두 위 형식에 해당하고 있음..

 

[이슈 파악]

웹툰 관리자 페이지는 현재 웹툰을 제공하는 파트너사들이 이용하는 페이지임.

해당 파트너사들은 대부분 윈도우를 이용하는데, 윈도우에서는 mime가 어떻게 노출되는지 확인해보았음

동일한 파일을 대상으로 확인한 결과, 아래와 같이 나옴

mac : application/zip
window : application/x-zip-compressed

 

이유를 계속 찾아보고 있는데, 아래와 같은 막연한 설명밖에 찾이 못하였음...

 

macOS와 Windows에서 동일한 zip 파일이라도 MIME 타입이 서로 다를 수 있는 이유는 각 운영 체제의 파일 형식 인식 규칙과 기본 설정에 기인한 것입니다.

 

참고로 각 운영체제는 아래에 기반하였다

mac : Unix기반으로 이루어진 OS(완벽하게 Unix를 따라가지는 않음)

window : Windows OS (Unix를 계승하지 않음)

 

1969년부터 시작된 UNIX와 Unix-Like(유닉스를 닮은) System 계보도는 아래와 같다

 

[이슈 해결]

아래 목록에 window 환경에서도 검증이 통과할 수 있도록 특정 MIME를 추가함

'image/jpeg',
'application/zip'

 

 

[MIME란?]

MIME에 대한 정의가 필요할 것 같아. 정리

 

MIME (Multipurpose Internet Mail Extensions)는 인터넷에서 데이터 형식을 표현하고 전송하는 데 사용되는 표준입니다. MIME은 주로 이메일 시스템에서 시작되었지만, 현재는 웹에서도 다양한 데이터를 전송할 때 사용됩니다. MIME은 데이터의 종류를 정의하고 인식할 수 있도록 도와주며, 다양한 형식의 데이터를 안전하게 전송하고 처리할 수 있도록 합니다.

- MIME의 기본 개념

MIME TYPE은 인터넷에서 전송되는 다양한 종류의 데이터를 식별하기 위한 형식
  1. 데이터 형식 식별: MIME은 데이터의 형식을 정의하고 식별하는 데 사용됨. 예를 들어, 텍스트, 이미지, 오디오, 비디오 등 다양한 유형의 데이터를 정확하게 식별할 수 있음.
  2. 표준화된 데이터 타입: MIME은 각 데이터 유형에 대해 표준 MIME 타입을 정의하고 있음. 각 MIME 타입은 주어진 데이터의 형식을 나타내며, MIME 타입은 주로 확장자 또는 데이터의 헤더에서 추론됨.
  3. 전송 방법 지원: MIME은 데이터를 여러 부분으로 분할하고, 인코딩하고, 압축하는 등의 방법을 제공하여 데이터를 안전하게 전송할 수 있도록 함. 이는 데이터의 크기나 형식에 따라 최적의 전송 방식을 선택할 수 있도록 함. (인코딩은 Base64를 사용함)

 

- MIME 타입 구조

MIME 타입은 일반적으로 type/subtype 형식으로 구성됨.

여기서 type은 주요 유형을 나타내고, subtype은 세부 유형을 나타냄.

예를 들어, text/plain, image/jpeg, application/json 등이 MIME 타입의 예.

MIME 유형은 서버가 클라이언트에게 전송하는 컨텐츠의 종류를 알려주는 메타데이터(metadata)이다.
  • 주요 유형 (type): 데이터의 주요 유형을 정의. 일반적인 주요 유형에는 text, image, audio, video, application 등이 있음
  • 세부 유형 (subtype): 주요 유형 아래에 세부적으로 어떤 종류의 데이터인지를 나타냄. 예를 들어, text/plain은 일반적인 텍스트 데이터를 나타내고, image/jpeg는 JPEG 형식의 이미지 데이터를 나타냄.

 

- MIME의 활용

  1. 웹에서의 활용: 웹에서는 HTTP 헤더를 통해 MIME 타입을 전송하여 클라이언트가 어떤 종류의 데이터를 받을 것인지를 알려줌. 브라우저는 이 정보를 기반으로 적절한 처리 방법을 결정.
  2. 이메일 시스템: MIME은 이메일 시스템에서 데이터를 전송하고 첨부 파일을 처리하는 데 필수적. 이메일에서는 MIME을 사용하여 여러 유형의 첨부 파일을 인식하고, 텍스트 형식의 이메일과 HTML 형식의 이메일을 구분할 수 있음.
  3. 멀티파트 형식: MIME은 멀티파트 형식을 지원하여 한 번의 요청 또는 응답에 여러 부분을 포함할 수 있게함. 이는 파일 업로드와 같은 경우에 유용하게 사용될 수 있음.

 

- 결론

1. MIME은 인터넷에서 데이터의 형식을 정의하고 표현하는 데 중요한 역할을 함. (전송하는 컨텐츠의 종류를 알려주는 일종의 메타데이터)

2. 데이터를 안전하게 전송하고 처리하기 위해 MIME 타입은 데이터 유형을 명확하게 식별하고 적절한 처리 방법을 지시하는 데 사용됨

3. 인코딩 방식은 Base64를 상용하고 있음

 

 

 

참조

https://velog.io/@rookieand/MIME-type%EC%9D%80-%EB%AD%90%EA%B3%A0-Content-type%EC%9D%80-%EB%AD%94%EB%8D%B0

 

댓글