

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

# 애플리케이션으로 데이터 전달
<a name="apps-data"></a>

**중요**  
이 AWS OpsWorks Stacks 서비스는 2024년 5월 26일에 수명이 종료되었으며 신규 및 기존 고객 모두에서 비활성화되었습니다. 가능한 한 빨리 워크로드를 다른 솔루션으로 마이그레이션하는 것이 좋습니다. 마이그레이션에 대한 질문이 있는 경우 [AWS re:Post](https://repost.aws/) 또는 [AWS Premium Support](https://aws.amazon.com/support)를 통해 AWS Support 팀에 문의하세요.

키-값 페어와 같은 데이터를 서버 상의 애플리케이션으로 전달하는 것이 유용한 경우가 있습니다. 이렇게 하려면 [사용자 지정 JSON](workingstacks-json.md)을 사용하여 데이터를 스택에 추가합니다. OpsWorks Stacks는 각 수명 주기 이벤트에 대해 각 인스턴스의 노드 객체에 데이터를 추가합니다.

그러나 레시피는 Chef 속성을 사용하여 노드 객체로부터 사용자 지정 JSON 데이터를 가져올 수 있지만 애플리케이션을 그럴 수 없습니다. 사용자 지정 JSON 데이터를 하나 이상의 애플리케이션으로 가져오기 위한 접근 방법 한 가지는 `node` 객체에서 데이터를 추출하여 애플리케이션이 읽을 수 있는 파일에 기록하는 사용자 지정 레시피를 구현하는 것입니다. 이 항목의 예제에서는 데이터를 YAML 파일로 기록하는 방법을 보여주지만, JSON 또는 XML과 같은 다른 형식에도 동일한 기본 접근 방법을 사용할 수 있습니다.

키-값 데이터를 스택의 인스턴스에 전달하려면 다음과 같은 사용자 지정 JSON을 스택에 추가합니다. 사용자 지정 JSON을 스택에 추가하는 방법에 대한 자세한 정보는 [사용자 지정 JSON 사용](workingstacks-json.md) 단원을 참조하세요.

```
{
  "my_app_data": {
    "app1": {
      "key1": "value1",
      "key2": "value2",
      "key3": "value3"
    },
    "app2": {
      "key1": "value1",
      "key2": "value2",
      "key3": "value3"
    }
  }
}
```

예제에서는 짧은 이름이 `app1` 및 `app2`이고 각각 세 개의 데이터 값을 갖는 앱이 두 개 있는 것으로 가정합니다. 함께 제공되는 레시피는 사용자가 앱의 짧은 이름을 사용하여 연결된 데이터를 식별하는 것으로 가정합니다. 다른 이름은 임의의 이름입니다. 앱 짧은 이름에 대한 자세한 정보는 [Settings](workingapps-creating.md#workingapps-creating-settings) 단원을 참조하세요.

다음 예제의 레시피는 `deploy` 속성에서 각 앱에 대한 데이터를 추출하여 `.yml` 파일에 저장하는 방법을 보여줍니다. 이 레시피는 사용자 지정 JSON이 각 앱에 대한 데이터를 포함하는 것으로 가정합니다.

```
node[:deploy].each do |app, deploy|
  file File.join(deploy[:deploy_to], 'shared', 'config', 'app_data.yml') do
    content YAML.dump(node[:my_app_data][app].to_hash)
  end
end
```

`deploy` 속성에는 각 앱마다 앱의 짧은 이름으로 명명된 속성이 하나씩 포함됩니다. 각 앱 속성에는 앱에 대한 다양한 정보를 표현하는 속성 세트가 포함됩니다. 이 예제는 `[:deploy][:app_short_name][:deploy_to]` 속성으로 표현되는 앱의 배포 디렉터리를 사용합니다. `[:deploy]`에 대한 자세한 내용은 [deploy 속성](attributes-json-deploy.md) 단원을 참조하세요.

`deploy`의 각 앱에 대해 레시피가 다음을 수행합니다.

1. 애플리케이션의 `app_data.yml` 디렉터리 내 `shared/config` 하위 디렉터리에 `[:deploy_to]`라는 파일을 생성합니다.

    OpsWorks Stacks가 앱을 설치하는 방법에 대한 자세한 내용은 섹션을 참조하세요[Deploy 레시피](create-custom-deploy.md).

1. 앱의 사용자 지정 JSON 값을 YAML으로 변환하여 `app_data.yml`에 기록합니다.

**앱에 데이터를 전달하려면**

1. 스택에 앱을 추가하고 해당 앱의 짧은 이름을 기록해 둡니다. 자세한 내용은 [앱 추가](workingapps-creating.md) 단원을 참조하십시오.

1. 앞서 설명한 대로 앱의 데이터가 포함된 사용자 지정 JSON을 `deploy` 속성에 추가합니다. 사용자 지정 JSON을 스택에 추가하는 방법에 대한 자세한 정보는 [사용자 지정 JSON 사용](workingstacks-json.md) 단원을 참조하세요.

1. 쿡북을 생성한 다음, 사용자 지정 JSON에 사용한 속성 이름에 맞게 수정한 이전 예제의 코드를 사용하여 쿡북에 레시피를 추가합니다. 쿡북 및 레시피를 생성하는 방법에 대한 자세한 정보는 [쿡북과 레시피](workingcookbook.md) 단원을 참조하세요. 이 스택에 대한 사용자 지정 쿡북이 이미 있는 경우 기존 쿡북에 레시피를 추가하거나 기존 Deploy 레시피에 코드를 추가할 수 있습니다.

1. 스택에 쿡북을 설치합니다. 자세한 내용은 [사용자 지정 쿡북 설치](workingcookbook-installingcustom-enable.md) 단원을 참조하십시오.

1. 앱 서버 계층의 배포 수명 주기 이벤트에 레시피를 할당합니다. 그러면 OpsWorks 스택이 부팅된 후 각 새 인스턴스에서 레시피를 실행합니다. 자세한 내용은 [레시피 실행](workingcookbook-executing.md) 단원을 참조하십시오.

1. 앱을 배포합니다. 이제 사용자 데이터가 포함된 스택 구성 및 배포 속성이 설치됩니다.

**참고**  
데이터 파일이 앱 배포 전에 배치되어야 할 경우 레시피를 계층의 설정 수명 주기 이벤트에도 할당할 수 있습니다. 이 이벤트는 인스턴스 부팅이 완료된 직후 한 번 발생합니다. 그러나 OpsWorks Stacks는 아직 배포 디렉터리를 생성하지 않았으므로 레시피는 데이터 파일을 생성하기 전에 필요한 디렉터리를 명시적으로 생성해야 합니다. 다음 예제에서는 명시적으로 앱의 `/shared/config` 디렉터리를 생성한 후 여기에 데이터 파일을 생성합니다.  

```
node[:deploy].each do |app, deploy|

 directory "#{deploy[:deploy_to]}/shared/config" do
      owner "deploy"
      group "www-data"
      mode 0774
      recursive true
      action :create
    end

  file File.join(deploy[:deploy_to], 'shared', 'config', 'app_data.yml') do
    content YAML.dump(node[:my_app_data][app].to_hash)
  end
end
```

데이터를 로드하려면 다음의 [Sinatra](http://www.sinatrarb.com/) 코드와 같은 코드를 사용할 수 있습니다.

```
#!/usr/bin/env ruby
# encoding: UTF-8
require 'sinatra'
require 'yaml'

get '/' do
  YAML.load(File.read(File.join('..', '..', 'shared', 'config', 'app_data.yml')))
End
```

다음과 같이 사용자 지정 JSON을 업데이트하여 언제라도 앱의 데이터 값을 업데이트할 수 있습니다.

**앱 데이터를 업데이트하려면**

1. 사용자 지정 JSON을 편집하여 데이터 값을 업데이트합니다.

1. 앱을 다시 배포하면 OpsWorks Stacks가 스택의 인스턴스에서 Deploy 레시피를 실행하도록 지시합니다. 이러한 레시피는 업데이트된 스택 구성의 속성 및 배포 속성을 사용하므로 사용자 지정 레시피가 현재 값으로 데이터 파일을 업데이트합니다.