

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

# Configure 레시피
<a name="create-custom-configure"></a>

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

Configure 레시피는 계층의 Configure [수명 주기](workingcookbook-events.md) 이벤트에 할당됩니다. 이 이벤트는 특정 인스턴스가 온라인 상태로 전환되거나 해제될 때마다 스택의 모든 인스턴스에서 발생합니다. 변경 사항에 대응하여 적절히 인스턴스의 구성을 조정하려면 Configure 레시피를 사용합니다. Configure 레시피를 구현할 때 스택 구성 변경이 이 계층과 관계가 없는 인스턴스도 포함할 수 있다는 점을 염두에 두어야 합니다. 이 레시피는 적절히 대응할 수 있어야 합니다. 이는 경우에 따라 아무 작업도 하지 않음을 의미하기도 합니다.

## tomcat::configure
<a name="create-custom-configure-configure"></a>

`tomcat::configure` 레시피는 계층의 Configure 수명 주기 이벤트를 위한 것입니다.

```
include_recipe 'tomcat::context'
# Optional: Trigger a Tomcat restart in case of a configure event, if relevant
# settings in custom JSON have changed (e.g. java_opts/JAVA_OPTS):
#include_recipe 'tomcat::container_config'
```

`tomcat::configure` 레시피는 기본적으로 두 개의 종속 레시피를 실행하는 메타 레시피입니다.

1. `tomcat::context` 레시피는 웹 앱 컨텍스트 구성 파일을 생성합니다.

   이 파일은 애플리케이션이 MySQL 인스턴스와 통신하는 데 사용하는 JDBC 리소스를 구성합니다. 이에 대해서는 다음 섹션에서 설명합니다. Configure 이벤트에 대응하여 이 레시피를 실행할 경우 데이터베이스 계층이 변경되었을 때 웹 앱 컨텍스트 구성 파일을 업데이트할 수 있습니다.

1. `tomcat::container_config` 설정 레시피가 다시 실행되어 컨테이너 구성 변경 사항을 캡처합니다.

이 예제에서는 `include`의 `tomcat::container_config`가 코멘트 아웃됩니다. 사용자 지정 JSON을 사용하여 Tomcat 설정을 수정하려는 경우 이 주석을 제거할 수 있습니다. 그런 다음 Configure 수명 주기 이벤트가 `tomcat::container_config`를 실행합니다. 이는 Tomcat 관련 구성 파일을 업데이트하고([tomcat::container\$1config](create-custom-setup.md#create-custom-setup-config) 섹션 참조) Tomcat 서비스를 재시작합니다.

## tomcat::context
<a name="create-custom-configure-context"></a>

Tomcat 쿡북은 애플리케이션이 [J2EE DataSource](http://docs.oracle.com/javase/tutorial/jdbc/basics/sqldatasources.html) 객체를 사용하여 별도의 인스턴스에서 실행될 수 있는 MySQL 데이터베이스 서버에 액세스하도록 설정합니다. Tomcat에서는 각 애플리케이션에 대해 웹 엡 컨텍스트 구성 파일을 생성 및 설치하여 연결을 활성화할 수 있습니다. 이 파일은 애플리케이션과 애플리케이션이 데이터베이스와 통신하는 데 사용할 JDBC 리소스 간의 관계를 정의합니다. 자세한 정보는 [The Context Container](http://tomcat.apache.org/tomcat-7.0-doc/config/context.html)를 참조하세요.

`tomcat::context` 레시피의 주된 목적은 이 구성 파일을 생성하는 것입니다.

```
include_recipe 'tomcat::service'

node[:deploy].each do |application, deploy|
  context_name = deploy[:document_root].blank? ? application : deploy[:document_root]

  template "context file for #{application} (context name: #{context_name})" do
    path ::File.join(node['tomcat']['catalina_base_dir'], 'Catalina', 'localhost', "#{context_name}.xml")
    source 'webapp_context.xml.erb'
    owner node['tomcat']['user']
    group node['tomcat']['group']
    mode 0640
    backup false
    only_if { node['datasources'][context_name] }
    variables(:resource_name => node['datasources'][context_name], :webapp_name => application)
    notifies :restart, resources(:service => 'tomcat')
  end
end
```

Tomcat OpsWorks 쿡북 속성 외에도이 레시피는 [Stacks가 구성 이벤트와 함께 설치하는 스택 구성 및 배포 속성을](workingcookbook-json.md) 사용합니다. OpsWorks Stacks 서비스는 레시피가 일반적으로 데이터 백을 사용하거나 각 인스턴스에 속성을 검색하여 얻는 정보를 포함하는 속성을 각 인스턴스의 노드 객체에 추가합니다. 이러한 속성에는 스택 구성, 배포된 앱, 사용자가 포함시키기 원하는 사용자 지정 데이터에 대한 세부 정보가 포함됩니다. 레시피는 표준 Chef 노드 구문을 사용하여 스택 구성 및 배포 속성에서 데이터를 가져옵니다. 자세한 내용은 [스택 구성 및 배포 속성](workingcookbook-json.md) 섹션을 참조하세요. Chef 11.10 스택에서는 Chef 검색을 사용하여 스택 구성 및 배포 데이터를 가져올 수도 있습니다. 자세한 내용은 [Chef 검색 사용](workingcookbook-chef11-10.md#workingcookbook-chef11-10-search) 단원을 참조하십시오.

`deploy` 속성은 콘솔 또는 API를 통해 정의되거나 OpsWorks Stacks 서비스에 의해 생성되는 배포 관련 속성을 포함하는 `[:deploy]` 네임스페이스를 나타냅니다. `deploy` 속성에는 배포된 각 앱마다 앱의 짧은 이름으로 명명된 속성이 하나씩 포함됩니다. 각각의 앱 속성에는 문서 루트(`[:deploy][:appname][:document_root]`)와 같이 앱의 특성을 정의하는 속성 세트가 포함됩니다.

`context` 레시피는 먼저 [tomcat::service](create-custom-setup.md#create-custom-setup-service)를 호출하여 서비스가 이 Chef 실행에 대해 정의되도록 합니다. 그런 다음 구성 파일의 이름(`context_name` 확장명 제외)을 표시하는 `.xml` 변수를 정의합니다. 기본 문서 루트를 사용하는 경우, `context_name`이 앱의 짧은 이름으로 설정됩니다. 그렇지 않은 경우 지정된 문서 루트로 설정됩니다. [스택 생성 및 애플리케이션 실행](create-custom-stack.md) 섹션에 설명된 예제는 문서 루트를 `"ROOT"`로 설정합니다. 따라서 컨텍스트는 ROOT이고 구성 파일 이름은 `ROOT.xml`입니다.

이 레시피는 배포된 앱의 목록이 많은 부분을 차지하며, 각 앱에 대해 `webapp_context.xml.erb` 템플릿을 사용하여 컨텍스트 구성 파일을 생성합니다. 예제는 앱을 하나만 배포하지만 `deploy` 속성의 정의는 앱 수와 상관없이 이를 앱 목록으로 처리하도록 요구합니다.

`webapp_context.xml.erb` 템플릿은 운영 체제를 구별하지 않으므로 `templates` 디렉터리의 `default` 하위 디렉터리에 위치합니다.

이 레시피는 다음과 같이 구성 파일을 생성합니다.
+ 기본 속성 값을 사용할 경우 구성 파일 이름은 `context_name.xml`로 설정되고 `/etc/tomcat6/Catalina/localhost/` 디렉터리에 설치됩니다.

  스택 구성 속성의 `['datasources']` 노드에는 각각 연결된 애플리케이션이 데이터베이스와 통신하는 데 사용할 JDBC 데이터 리소스에 컨텍스트 이름을 매핑하는 속성이 하나 이상 포함됩니다. 노드 및 그 콘텐츠는 [스택 생성 및 애플리케이션 실행](create-custom-stack.md) 섹션에 설명된 대로 스택을 생성할 때 사용자 지정 JSON을 통해 정의됩니다. 예제에는 ROOT 컨텍스트 이름을 jdbc/mydb라는 JDBC 리소스와 연결하는 속성 하나가 있습니다.
+ 기본 속성 값을 사용하면 파일의 사용자 및 그룹 모두 Tomcat 패키지에 의해 설정됩니다. `tomcat`(Amazon Linux) 또는 `tomcat6`(Ubuntu).
+ `template` 리소스는 `['datasources']` 노드가 존재하고 `context_name` 속성을 포함하는 경우에만 구성 파일을 생성합니다.
+ `template` 리소스는 `resource_name` 및 `webapp_name`, 두 개의 변수를 정의합니다.

  `resource_name`은 `context_name`과 연결된 리소스 이름으로 설정되고, `webapp_name`은 앱의 짧은 이름으로 설정됩니다.
+ 템플릿 리소스는 Tomcat 서비스를 재시작하여 변경 사항을 로드하고 활성화합니다.

`webapp_context.xml.erb` 템플릿은 자체 속성 세트를 갖는 `Context` 요소를 포함하는 `Resource` 요소로 구성됩니다.

`Resource` 속성은 컨텍스트 구성의 특성을 정의합니다.
+ **name** - JDBC 리소스 이름. `tomcat::context`에서 정의된 `resource_name` 값으로 설정됩니다.

  예제에서는 리소스 이름이 jdbc/mydb로 설정됩니다.
+ **auth** 및 **type** - 이들은 JDBC `DataSource` 연결의 표준 설정입니다.
+ **maxActive**, **maxIdle** 및 **maxWait** - 최대 활성 연결 수, 최대 유휴 연결 수 및 연결이 반환되기까지 최대 대기 시간.
+ **username** 및 **password** - 데이터베이스의 사용자 이름 및 암호. `deploy` 속성에서 가져옵니다.
+ **driverClassName** - JDBC 드라이버의 클래스 이름. MySQL 드라이버로 설정됩니다.
+ **url** - 연결 URL.

  접두사는 데이터베이스에 따라 다릅니다. MySQL의 경우 `jdbc:mysql`, Postgres의 경우 `jdbc:postgresql`, SQL Server의 경우 `jdbc:sqlserver`로 설정되어야 합니다. 예제에서는 URL을 `jdbc:mysql://host_IP_Address:3306:simplejsp`로 설정합니다. 여기서 *simplejsp*는 앱의 짧은 이름입니다.
+ **factory** - `DataSource` 팩토리. MySQL 데이터베이스의 경우 필수입니다.

이 구성 파일에 대한 자세한 정보는 Tomcat wiki의 [Using DataSources](http://wiki.apache.org/tomcat/UsingDataSources) 항목 단원을 참조하세요.