MIME 타입을 이해하는데 시간이 오래 걸렸다. MIME 자료 구조에서 body와 parts의 차이를 이해하는데 가장 애 먹었다. 현재까지 확인한 바로는 parts는 주로 MIME 타입이 multiparts/* 인 경우에 값을 들고 있다. body는 그 외에 text/plain, text/html, image/png 등 실제 정보를 들고 있는 경우에 값을 가지고 있다. 그리고 body에 값이 있으면 parts는 값이 없고, parts에 값이 있으면 body에는 값이 없다. (정확히는 'size': 0 컴포넌트만 있다.)
# body에 값이 있는 경우 -> parts 키를 가진 컴포넌트는 없다.
...
'mimeType': 'image/png',
...
'body': {
'attechmentId': 'base64로 인코딩된 이미지',
'size': 인코딩_문자열_길이,
},
# parts에 값이 있는 경우 -> body가 비어있다.
...
'mimeType': 'multiparts/alternative',
...
'body': {
'size': 0
},
'parts': [
MessagePart_1,
MessagePart_2,
...
],
현재 Gmail API에서 가장 고민이 되는 부분은 HTML 처리이다. text/html인 body의 디코딩된 HTML 코드를 보면, 테이블 태그 정보가 처리하기가 까다롭다. 테이블 정보가 유의미한 경우와 레이아웃을 위한 테이블인 경우가 같이 있는 경우가 꽤 있다.
당직 멘토님께 이 문제를 여쭤보니 HTML을 MD 형식으로 전환하는 모델을 추천해주셨다. Jina Reader AI 모델이었다. 아직 사용하지는 않았지만, HTML을 파싱하기 위한 API 호출 횟수를 줄일 수 있어서 유용한 모델이라고 생각이 들었다. 최대한 다양한 분들께 내가 직면한 문제점을 정리해서 여쭤보고 조언을 구하는 것 또한 문제를 해결하는 빠른 점이라고 느꼈다.