Q) 클라이언트에서 이미지 파일을 서버로 보낼 때 어떤 과정으로 진행될까?
클라이언트에서 객체나 텍스트가 아닌 이미지, 영상, 오디오 같은 타입의 파일을 전송하려면 기존 http에서 req/res 방식을 좀 달리 해야할 것이다. 그러기 위해선 서버 간 통신 Content-Type
에 변화를 줘야한다.
클라이언트가 파일을 HTTP POST 메소드를 활용해 서버에 전송하고자 한다면 당연히 기존 텍스트, 객체 등과 같은 방식으로 전달하면 안 될 것이다.
그럴 때 클라이언트 입장에서 해당 파일을 재가공해서 서버에 요청해야 할 것이다.
<form action="/uploads" method="post" enctype="multipart/form-data">
<input type="file" name="avatar" />
<input type="text" name="description" />
</form>
클라이언트의 html reqest 형식이 다음과 같다고 할 때 위의 코드를 해석해 보자면,
http 요청/응답 과정에선 Start Line, Headers, Body이 존재한다고 설명한 적 있다.
여기서 body에 클라이언트가 전송하고자 하는 정보를 담을 수 있는데, 이때 해당 정보의 데이터 타입을 Content-Type이라고 하며 Headers가 해당 타입 정보를 담고 있다.
중요한 점은 body와 Content-Type 모두 한 가지 종류의 데이터 정보만을 담을 수 있다. 하지만, 위 form 정보는 이미지와 이미지를 설명하는 input으로 구성된다.
위와 같은 상황에서 여러 종류의 데이터를 하나의 요청 body에 담아 보내기 위해 multipart가 탄생했다는 설화를 알 수 있다!