성능 향상

이 문서에서는 애플리케이션의 성능을 개선할 수 있는 몇 가지 기술에 대해 설명합니다. 경우에 따라 다른 API 또는 일반적인 API의 예시를 통해 개념을 설명하지만 그러나 Android Over The Air API에도 동일한 개념이 적용됩니다.

gzip을 사용한 압축

각 요청에 필요한 대역폭을 줄이는 쉽고 편리한 한 가지 방법은 gzip 압축을 사용하는 것입니다. 이 경우 결과를 압축 해제하려면 CPU 시간이 추가로 필요하기는 하지만 대신에 네트워크 비용을 절감할 수 있다는 장점이 있습니다.

gzip으로 인코딩된 응답을 받으려면 Accept-Encoding 헤더를 설정하고 사용자 에이전트에 gzip 문자열이 포함되도록 수정해야 합니다. 다음은 gzip 압축을 사용할 수 있도록 적절하게 구성된 HTTP 헤더의 예시입니다.

Accept-Encoding: gzip
User-Agent: my program (gzip)

부분 리소스 작업

API 호출의 성능을 개선하는 또 다른 방법은 관심 있는 데이터 부분만 보내고 받는 것입니다. 이렇게 하면 애플리케이션에서 불필요한 필드를 전송하고 파싱하고 저장하지 않게 되므로 네트워크, CPU, 메모리를 포함한 리소스를 더 효율적으로 사용할 수 있습니다.

다음과 같은 두 가지 유형의 부분 요청이 있습니다.

  • 부분 응답: 응답에 포함할 필드를 지정하는 요청(fields 요청 매개변수 사용)
  • 패치: 변경할 필드만 전송하는 업데이트 요청(PATCH HTTP 동사 사용)

부분 요청을 작성하는 자세한 방법은 다음 섹션에 설명되어 있습니다.

부분 응답

기본적으로 서버에서는 요청을 처리한 후에 전체 리소스 표현을 반환합니다. 더 나은 성능을 위해 서버에 필요한 필드만 전송하도록 요청하여 부분 응답을 받을 수 있습니다.

부분 응답을 요청하려면 fields 요청 매개변수를 사용하여 반환받을 필드를 지정합니다. 응답 데이터를 반환하는 모든 요청에서 이 매개변수를 사용할 수 있습니다.

fields 매개변수는 응답 데이터에만 영향을 주며 전송해야 하는 데이터에는 영향을 주지 않습니다. 리소스를 수정할 때 전송하는 데이터의 양을 줄이려면 패치 요청을 사용하세요.

패치(부분 업데이트)

리소스를 수정할 때 불필요한 데이터가 전송되지 않도록 할 수도 있습니다. 변경하려는 특정 필드의 업데이트된 데이터만 전송하려면 HTTP PATCH 동사를 사용합니다. 이 문서에 설명된 패치 시맨틱스는 이전에 부분 업데이트를 위해 구현되었던 GData 구문과는 다르며 더 간단해졌습니다.

아래의 짧은 예에서는 일부 데이터만 업데이트할 경우 패치를 사용하면 전송해야 하는 데이터가 얼마나 최소화되는지를 보여 줍니다.

패치에 대한 응답 처리

API는 올바른 패치 요청을 처리한 후 200 OK HTTP 응답 코드와 함께 수정된 리소스의 전체 표현을 반환합니다. API에 ETag가 사용되는 경우에는 PUT을 사용할 때와 마찬가지로 패치 요청이 성공적으로 처리되면 서버에서 ETag 값을 업데이트합니다.

fields 매개변수를 사용하여 반환되는 데이터의 양을 줄이지 않으면 패치 요청에서 전체 리소스 표현을 반환합니다.

패치 요청으로 인해 새로운 리소스 상태의 구문 또는 의미 체계가 올바르지 않게 되면 서버에서 400 Bad Request 또는 422 Unprocessable Entity HTTP 상태 코드를 반환하며 리소스 상태는 변경되지 않은 채 유지됩니다. 예를 들어 필수 필드의 값을 삭제하려고 하면 서버에서 오류가 반환됩니다.

PATCH HTTP 동사가 지원되지 않는 경우 대체 표기법

방화벽에서 HTTP PATCH 요청을 허용하지 않으면 아래와 같이 HTTP POST 요청을 실행하고 재정의 헤더를 PATCH로 설정합니다.

POST https://www.googleapis.com/...
X-HTTP-Method-Override: PATCH
...

패치와 업데이트의 차이점

실제로 HTTP PUT 동사를 사용하는 업데이트 요청용으로 데이터를 전송할 때는 필수항목이거나 선택항목인 필드만 전송해야 합니다. 서버에서 설정된 필드의 값을 전송하면 이 값은 무시됩니다. 이는 부분 업데이트를 수행하는 또 다른 방법처럼 보일 수도 있지만 이 접근 방식에는 몇 가지 제한사항이 있습니다. HTTP PUT 동사를 사용하는 업데이트의 경우 필수 매개변수를 제공하지 않으면 요청이 실패하고 선택적 매개변수를 제공하지 않으면 이전에 설정한 데이터가 삭제됩니다.

이러한 이유로 패치를 사용하는 것이 훨씬 안전합니다. 변경하려는 필드의 데이터만 제공하면 되며, 생략한 필드는 삭제되지 않습니다. 반복 요소 또는 배열의 경우에만 이 규칙에 예외가 적용됩니다. 즉, 모두 생략하면 이전 상태가 그대로 유지되고, 이 중 하나라도 제공하면 전체 세트가 제공한 세트로 대체됩니다.