computer/algorithm
JSON으로 이미지를 전달하려면 어떻게 할 것인가?
축구왕농구킹
2022. 1. 15. 15:00
남세동님의 질문 2번. JSON으로 이미지를 전달하려면 어떻게 할 것인가?와 하위 질문 a, b를 알아보자.
JSON형식은 xml에 뒤이어 발표된 표준형식으로 서버-클라이언트가 텍스트로 데이터를 주고받는데 사용한다.
이미지의 바이너리를 문자열로 변환하고 JSON의 형태로 표현하여 전송하면 된다.
파이썬으로 JSON으로 이미지를 전달해보자.
이미지를 바이너리로 읽은 후 base64로 인코딩을 한다.
json.dumps()를 실행할때 딕셔너리에 bytes 타입이 있으면 함수는 type error를 반환하기때문에 decode()를 하여 문자열로 변환하였다.
실행 결과는 그림1과 같다.
import base64
import json
with open("test_image.png", "rb") as image_file:
image_binary = image_file.read()
encoded_string = base64.b64encode(image_binary)
image_dict = {
"test_image.png": encoded_string.decode()
}
image_json = json.dumps(image_dict)
print(image_json)

a. 에 답을 하자면 그림2에서는 3KB만큼 커진 것을 확인할 수 있다.
이미지의 바이너리를 base64 인코딩하고 이를 텍스트로 변환하였는데, base64로 인코딩하는 과정에서 1/3정도의 용량이 증가한다.

만약에 json의 필드를 압축하여 담을 수 있는 방법이 있다면 json 파일의 크기는 줄어들 수 있다.
b. json으로 이미지를 전달하는 단점은 무엇이 있을까?
두 번째 레퍼런스에 의하면 용량이 커짐으로써 오는 단점과 함께 CDN caching을 사용하기 어렵다.
디바이스에서 이미지 캐싱이 가능하지 않다.
보안상 장점이 없고 이미지를 다루는 서버사이드의 툴들이 이미지의 바이너리를 주로 다룬다는 점을 짚었다.
Reference