[python] 응답 포맷 선택과 컨텐츠 협상

인터넷에서 정보를 요청할 때, 클라이언트와 서버 간의 데이터 교환은 다양한 형식으로 이루어질 수 있습니다. 이때 클라이언트가 원하는 데이터 포맷을 서버에게 전달하고, 서버는 해당 형식으로 응답을 반환하는 과정을 “컨텐츠 협상(Content Negotiation)”이라고 합니다.

컨텐츠 협상의 유형

컨텐츠 협상은 세 가지 주요 유형으로 이루어집니다.

1. 서버 주도형 컨텐츠 협상(Server-driven Negotiation)

서버가 클라이언트에게 제공 가능한 컨텐츠 형식을 나열하고, 클라이언트가 그 중에서 선택하는 방식입니다. 이때 서버는 Accept 헤더를 통해 클라이언트에 가능한 포맷을 알려줍니다.

GET /data HTTP/1.1
Host: example.com
Accept: application/json, text/html

서버는 위 요청의 Accept 헤더를 확인하고, 해당하는 형식의 컨텐츠를 반환합니다.

2. 클라이언트 주도형 컨텐츠 협상(Client-driven Negotiation)

클라이언트가 서버에게 선호하는 컨텐츠 형식을 제안하고, 서버가 그 중에서 선택하는 방식입니다. 이때 클라이언트는 Accept 헤더를 통해 서버에게 원하는 포맷을 알려줍니다.

GET /data HTTP/1.1
Host: example.com
Accept: application/json

서버는 클라이언트의 Accept 헤더를 확인하고, 해당하는 형식의 컨텐츠를 반환합니다.

3. 콘텐츠 협상 없음(No Negotiation)

클라이언트와 서버가 별도의 컨텐츠 협상 없이 사전에 협의된 고정된 형식으로 통신하는 방식입니다. 이 경우 협상 없이 고정된 형식의 컨텐츠만 전달됩니다.

컨텐츠 협상의 장점

컨텐츠 협상은 다양한 클라이언트와 서버 간의 상호 운용성을 향상시키는 데 도움이 됩니다. 클라이언트가 원하는 형식으로 데이터를 요청하고 서버가 해당 형식으로 응답함으로써, 효율적인 데이터 교환을 가능케 합니다.

컨텐츠 협상은 RESTful API와 웹 서비스에서 특히 중요한 요소로, 클라이언트와 서버 간의 유연하고 효율적인 통신을 지원합니다.

컨텐츠 협상은 요청과 응답의 포맷을 선택하는 유연한 방법을 제공하여, 네트워크 기반 시스템의 성능을 향상시키고, 상호 운용성을 개선합니다.


참고 자료: