

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# PATCH 작업을 사용하여 리소스 수정
<a name="managing-fhir-resources-patch"></a>

AWS HealthLake 는 FHIR 리소스에 대한 PATCH 작업을 지원하므로 전체 리소스를 업데이트하지 않고 추가, 교체 또는 삭제할 특정 요소를 대상으로 하여 리소스를 수정할 수 있습니다. 이 작업은 다음이 필요한 경우에 특히 유용합니다.
+ 대규모 리소스에 대한 대상 업데이트 수행
+ 네트워크 대역폭 사용량 감소
+ 특정 리소스 요소에 대한 원자성 수정 수행
+ 동시 변경 사항 덮어쓰기 위험 최소화
+ 배치 및 트랜잭션 워크플로의 일부로 리소스 업데이트

## 지원되는 패치 형식
<a name="patch-supported-formats"></a>

AWS HealthLake 는 두 가지 표준 패치 형식을 지원합니다.

### JSON 패치(RFC 6902)
<a name="patch-format-json"></a>

JSON 포인터 구문을 사용하여 리소스 구조의 위치별로 요소를 대상으로 지정합니다.

**Content-Type:** `application/json-patch+json`

### FHIRPath 패치(FHIR R4 사양)
<a name="patch-format-fhirpath"></a>

FHIRPath 표현식을 사용하여 콘텐츠 및 관계를 기준으로 요소를 대상으로 지정하여 패치 적용에 대한 FHIR 네이티브 접근 방식을 제공합니다.

**Content-Type:** `application/fhir+json`

## 사용법
<a name="patch-usage"></a>

### 직접 패치 작업
<a name="patch-usage-direct"></a>

PATCH HTTP 메서드를 사용하여 FHIR 리소스에서 PATCH 작업을 직접 호출할 수 있습니다.

```
PATCH [base]/[resource-type]/[id]{?_format=[mime-type]}
```

### 번들의 패치
<a name="patch-usage-bundles"></a>

패치 작업은 `batch` 또는 유형의 FHIR 번들 내에 항목으로 포함될 수 `transaction`있으므로 패치 작업을 단일 요청으로 다른 FHIR 상호 작용(생성, 읽기, 업데이트, 삭제)과 결합할 수 있습니다.
+ **트랜잭션 번들**: 모든 항목이 원자적으로 성공하거나 실패함
+ **배치 번들**: 각 항목은 독립적으로 처리됩니다.

## JSON 패치 형식
<a name="patch-json-format"></a>

### 지원되는 작업
<a name="patch-json-supported-operations"></a>


| 연산 | 설명 | 
| --- | --- | 
| add | 리소스에 새 값 추가 | 
| remove | 리소스에서 값 제거 | 
| replace | 리소스의 기존 값 바꾸기 | 
| move | 한 위치에서 값을 제거하고 다른 위치에 추가 | 
| copy | 한 위치에서 다른 위치로 값 복사 | 
| test | 대상 위치의 값이 지정된 값과 동일한지 테스트 | 

### 경로 구문
<a name="patch-json-path-syntax"></a>

JSON 패치는 JSON 포인터 구문(RFC 6901)을 사용합니다.


| 경로 예제 | 설명 | 
| --- | --- | 
| /name/0/family | 이름의 패밀리 요소 | 
| /telecom/- | 통신 배열에 추가 | 
| /active | 루트 수준 활성 요소 | 
| /address/0/line/1 | 첫 번째 주소의 두 번째 줄 | 

### 예제
<a name="patch-json-examples"></a>

**여러 작업을 사용한 직접 JSON 패치 요청**  


```
PATCH [base]/Patient/example
Content-Type: application/json-patch+json
If-Match: W/"1"

[
  {
    "op": "replace",
    "path": "/name/0/family",
    "value": "Smith"
  },
  {
    "op": "add",
    "path": "/telecom/-",
    "value": {
      "system": "phone",
      "value": "555-555-5555",
      "use": "home"
    }
  },
  {
    "op": "remove",
    "path": "/address/0"
  },
  {
    "op": "move",
    "from": "/name/0/family",
    "path": "/name/1/family"
  },
  {
    "op": "test",
    "path": "/gender",
    "value": "male"
  },
  {
    "op": "copy",
    "from": "/name/0",
    "path": "/name/1"
  }
]
```

**단일 작업으로 직접 JSON 패치 요청**  


```
PATCH [base]/Patient/example
Content-Type: application/json-patch+json

[
  {
    "op": "replace",
    "path": "/active",
    "value": false
  }
]
```

**번들의 JSON 패치**  
base64로 인코딩된 JSON 패치 페이로드를 포함하는 바이너리 리소스를 사용합니다.

```
{
  "resourceType": "Bundle",
  "type": "transaction",
  "entry": [{
    "resource": {
      "resourceType": "Binary",
      "contentType": "application/json-patch+json",
      "data": "W3sib3AiOiJhZGQiLCJwYXRoIjoiL2JpcnRoRGF0ZSIsInZhbHVlIjoiMTk5MC0wMS0wMSJ9XQ=="
    },
    "request": {
      "method": "PATCH",
      "url": "Patient/123"
    }
  }]
}
```

## FHIRPath 패치 형식
<a name="patch-fhirpath-format"></a>

### 지원되는 작업
<a name="patch-fhirpath-supported-operations"></a>


| 연산 | 설명 | 
| --- | --- | 
| add | 리소스에 새 요소 추가 | 
| insert | 목록의 특정 위치에 요소 삽입 | 
| delete | 리소스에서 요소 제거 | 
| replace | 기존 요소의 값 바꾸기 | 
| move | 목록 내 요소 재정렬 | 

### 경로 구문
<a name="patch-fhirpath-path-syntax"></a>

FHIRPath 패치는 FHIRPath 표현식을 사용하여 다음을 지원합니다.
+ **인덱스 기반 액세스**: `Patient.name[0]`
+ **를 사용한 필터링`where()`**: `Patient.name.where(use = 'official')`
+ **부울 로직**: `Patient.telecom.where(system = 'phone' and use = 'work')`
+ **함수 하위 설정**: `first()`, `last()` 
+ **존재 확인**: `exists()`, `count()` 
+ **다형성 탐색**: `Observation.value`

### 예제
<a name="patch-fhirpath-examples"></a>

**직접 FHIRPath 패치 요청**  


```
PATCH [base]/Patient/123
Content-Type: application/fhir+json
Authorization: ...

{
  "resourceType": "Parameters",
  "parameter": [{
    "name": "operation",
    "part": [
      { "name": "type", "valueCode": "add" },
      { "name": "path", "valueString": "Patient" },
      { "name": "name", "valueString": "birthDate" },
      { "name": "value", "valueDate": "1990-01-01" }
    ]
  }]
}
```

**번들의 FHIRPath 패치**  
파라미터 리소스를의 항목 리소스로 사용합니다`method: PATCH`.

```
{
  "resourceType": "Bundle",
  "type": "transaction",
  "entry": [{
    "resource": {
      "resourceType": "Parameters",
      "parameter": [{
        "name": "operation",
        "part": [
          { "name": "type", "valueCode": "add" },
          { "name": "path", "valueString": "Patient" },
          { "name": "name", "valueString": "birthDate" },
          { "name": "value", "valueDate": "1990-01-01" }
        ]
      }]
    },
    "request": {
      "method": "PATCH",
      "url": "Patient/123"
    }
  }]
}
```

## 요청 헤더
<a name="patch-request-headers"></a>


| 헤더 | 필수 | 설명 | 
| --- | --- | --- | 
| Content-Type | 예 | application/json-patch\$1json JSON 패치의 경우 또는 FHIRPath 패치application/fhir\$1json의 경우 | 
| If-Match | 아니요 | ETag를 사용한 버전별 조건부 업데이트 | 

## 샘플 응답
<a name="patch-sample-response"></a>

작업은 새 버전 정보와 함께 업데이트된 리소스를 반환합니다.

```
HTTP/1.1 200 OK
Content-Type: application/fhir+json
ETag: W/"2"
Last-Modified: Mon, 05 May 2025 10:10:10 GMT

{
  "resourceType": "Patient",
  "id": "example",
  "active": true,
  "name": [
    {
      "family": "Smith",
      "given": ["John"]
    }
  ],
  "telecom": [
    {
      "system": "phone",
      "value": "555-555-5555",
      "use": "home"
    }
  ],
  "meta": {
    "versionId": "2",
    "lastUpdated": "2025-05-05T10:10:10Z"
  }
}
```

## 동작
<a name="patch-behavior"></a>

PATCH 작업:
+ 적절한 사양에 따라 패치 구문을 검증합니다(JSON 패치의 경우 RFC 6902, FHIRPath 패치의 경우 FHIRPath R4).
+ 원자적으로 작업 적용 - 모든 작업이 성공하거나 모두 실패함
+ 리소스 버전 ID를 업데이트하고 새 기록 항목을 생성합니다.
+ 변경 사항을 적용하기 전에 기록에서 원래 리소스를 보존합니다.
+ 패치 적용 후 FHIR 리소스 제약 조건 검증
+ ETag와 If-Match 헤더를 사용한 조건부 업데이트 지원

## 오류 처리
<a name="patch-error-handling"></a>

작업은 다음 오류 조건을 처리합니다.
+ **400 잘못된 요청**: 잘못된 패치 구문(부적합 요청 또는 잘못된 패치 문서)
+ **404 찾을 수 없음**: 리소스를 찾을 수 없음(지정된 ID가 존재하지 않음)
+ **409 충돌**: 버전 충돌(동시 업데이트 또는 비최신 버전 ID 제공)
+ **422 처리 불가능한 엔**터티: 지정된 리소스 요소에 패치 작업을 적용할 수 없습니다.

## 기능 요약
<a name="patch-summary-of-capabilities"></a>


| 기능 | JSON 패치 | FHIRPath 패치 | 
| --- | --- | --- | 
| 콘텐츠 유형 | application/json-patch\$1json | application/fhir\$1json | 
| 경로 형식 | JSON 포인터(RFC 6901) | FHIRPath 표현식 | 
| 직접 패치 API | 지원됨 | 지원됨 | 
| 번들 배치 | 지원됨(바이너리를 통해) | 지원됨(파라미터를 통해) | 
| 번들 트랜잭션 | 지원됨(바이너리를 통해) | 지원됨(파라미터를 통해) | 
| 운영 | 추가, 제거, 교체, 이동, 복사, 테스트 | 추가, 삽입, 삭제, 교체, 이동 | 

## 제한 사항
<a name="patch-limitations"></a>
+ 검색 조건을 사용하는 조건부 PATCH 작업은 지원되지 않습니다.
+ 번들의 JSON 패치는 base64 인코딩 콘텐츠와 함께 바이너리 리소스를 사용해야 합니다.
+ 번들의 FHIRPath 패치는 파라미터 리소스를 사용해야 합니다.

## 추가 리소스
<a name="patch-additional-resources"></a>

PATCH 작업에 대한 자세한 내용은 다음을 참조하세요.
+ [FHIR R4 패치 설명서](https://hl7.org/fhir/http.html#patch)
+ [FHIR R4 FHIRPath 패치 사양](https://hl7.org/fhir/fhirpatch.html)
+ [RFC 6902 - JSON 패치](https://datatracker.ietf.org/doc/html/rfc6902#section-4)
+ [RFC 6901 - JSON 포인터](https://datatracker.ietf.org/doc/html/rfc6901)