> For the complete documentation index, see [llms.txt](https://terraform201.devart.tv/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://terraform201.devart.tv/undefined.md).

# 필수 도구 설치하기

본 강의 실습을 위해서는 다음의 도구가 필요합니다.

## &#x20;:wrench: 설치해야할 패키지

* 테라폼
* SOPS
* AWS CLI
* jq

***

{% tabs %}
{% tab title="테라폼(Terraform)" %}
:rocket: **테라폼(Terraform) = 1.8.0**

* [설치 링크](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli)

{% code overflow="wrap" %}

```bash
# MAC OS
$ brew tap hashicorp/tap
$ brew install hashicorp/tap/terraform

# Windows
$ choco install terraform

```

{% endcode %}

version 명령어를 통해 테라폼 버전이 v1.5.7임을 확인합니다.

```
# 버전 확인 
$ terraform version
Terraform v1.5.7
on darwin_arm64
```

{% endtab %}

{% tab title="SOPS" %}
:rocket: **SOPS = 3.8.0**

* [설치 링크](https://github.com/getsops/sops/releases)
* 보안상 감춰야하는 값을 관리할 때 사용하는 패키지입니다.

아래와 같이 패키지 확장자를 선택해서 설치할 수 있습니다. 예시는 macOS M1(Darwin.arm64) 에서 설치하는 방법입니다.

```
$ # Download the binary
curl -LO https://github.com/getsops/sops/releases/download/v3.8.0/sops-v3.8.0.darwin.arm64

# Move the binary in to your PATH
mv sops-v3.8.0.darwin.arm64 /usr/local/bin/sops

# Make the binary executable
chmod +x /usr/local/bin/sops
```

\--version 옵션을 통해서 버전이 3.8.0 임을 확인합니다.

```
$ sops --version
sops 3.8.0 (latest)
```

{% endtab %}

{% tab title="AWS CLI" %}
:rocket: **awscli >= 2.x**

* [설치 링크](https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html)

\--version 옵션을 통해서 버전이 2.x이상 버전임을 확인합니다.

```
$ aws --version
aws-cli/1.29.49 Python/3.11.0 Darwin/22.5.0 botocore/1.31.49
```

{% endtab %}

{% tab title="jq" %}
:rocket: **jq >= 1.7**

* [설치 링크](https://jqlang.github.io/jq/download/)
* JSON 데이터를 다룰 때 사용하는 패키지입니다.

\--version 옵션을 통해서 버전이 1.7 이상 버전임을 확인합니다.

```
$ jq --version
jq-1.7
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
**테라폼(Terraform) 라이선스에 관하여**

테라폼은 2023년 8월 10일 S/W 라이선스를 ***MPL2.0***&#xC5D0;서 ***BSL1.1***&#xB85C; 변경하였습니다.

보통 오픈소스 커뮤니티에서는 이러한 결정을 사전에 공지하고 많은 의견을 받아서 결정하지만, \
Hashicorp사에서 사전 동의없이 결정하여 논란이 있었습니다.

저는 오랜 시간동안 테라폼을 사용한 사람으로서, 한명의 엔지니어로서 어느쪽이 옳다고 의견을 말씀 드리기가 어렵습니다. Hashicorp의 오픈소스 자체가 너무 훌륭하여 회사로써의 이득이 충분치 않았다는 것도 부정할 수 없기 때문입니다. 그리고 테라폼을 이용하여 다양한 것들을 시도하던 회사나 개인의 입장도 이해하기 때문입니다.

일반 사용자, 회사 입장에서는 큰 변화가 없을 수 도 있기 때문에 아래의 라이선스 정책에 대해서 정확히 이해하는 것이 더 좋을 것 같아 아래에 간략하게 정리했습니다.

참고 부탁드립니다.
{% endhint %}

{% hint style="info" %}
**MPL v2.0 License ( from ChatGPT4 )**

1. **본질**: MPL 2.0은 오픈 소스 라이선스로, 소스 코드의 공유를 요구하지만, 라이선스된 코드와 다른 코드를 결합하여 생성된 작품은 별도의 라이선스로 배포할 수 있게 합니다.
2. **파일 수준의 Copyleft**: MPL 2.0은 파일 수준의 copyleft 특성을 가집니다. 즉, MPL로 라이선스된 파일을 수정하면 해당 파일의 수정된 부분은 MPL 하에 배포되어야 합니다. 그러나, 해당 파일 외의 다른 파일들에는 MPL이 적용되지 않습니다.
3. **다른 코드와의 결합**: MPL 2.0 라이선스 하에 있는 코드는 다른 라이선스를 가진 코드와 자유롭게 결합할 수 있습니다. 결합된 결과물을 배포할 때 MPL로 라이선싱된 파일은 그대로 MPL 하에 배포되어야 하지만, 다른 파일들에 대해서는 그렇지 않습니다.
4. **특허 권리**: MPL 2.0은 코드 기여자들이 해당 코드와 관련된 특허 권리를 부여하는 조항을 포함하고 있습니다.
5. **소스 코드 배포**: MPL 2.0 하에 라이선스된 코드의 이진 버전을 배포할 때, 사용자는 그 코드의 소스 코드 버전에 액세스할 권리가 있습니다.

MPL 2.0에는 더 많은 조항과 세부 사항이 있습니다. 라이선스에 관한 완전한 내용과 조항을 이해하려면 공식 MPL 2.0 텍스트를 참조하는 것이 좋습니다.
{% endhint %}

{% hint style="info" %}
**BSL v1.1 ( from ChatGPT4 )**

1. **제한 기간**: BSL 라이센스 하에 릴리스된 소프트웨어는 "Change Date"로 지정된 날짜까지 특정 사용 조건에 제한됩니다.
2. **제한**: 라이센스에는 소프트웨어를 사용하는 데 몇 가지 제한이 포함될 수 있습니다. 예를 들어, 소프트웨어를 사용하여 특정 규모 이상의 데이터베이스를 운영하거나, SaaS로 제공하는 것을 금지할 수 있습니다.
3. **오픈소스 전환**: "Change Date" 이후, 소프트웨어는 지정된 오픈소스 라이선스, 예를 들어 Apache 2.0, under에 배포됩니다. 이 때부터, 제한 사항 없이 소프트웨어를 사용할 수 있게 됩니다.
4. **소스 코드 사용**: "Change Date" 이전에도 사용자는 소프트웨어의 소스 코드를 검토하거나 수정할 수 있지만, 라이선스의 제한 조건 내에서만 사용할 수 있습니다.

BSL은 오픈소스와 상업 라이선스의 특성을 결합하여, 기업들이 초기에는 소프트웨어를 상업적으로 보호하면서, 장기적으로는 커뮤니티와 함께 오픈소스로 사용할 수 있도록 하는 유연성을 제공합니다.

BSL의 구체적인 내용과 조항에 대한 완전한 이해를 위해서는 해당 라이선스 문서의 전문을 직접 참조하는 것이 좋습니다.
{% endhint %}

{% hint style="info" %}
**MPL 2.0에서 BSL 1.1로 라이선스 변경에 대한 의미 ( from ChatGPT4 )**

MPL 2.0에서 BSL 1.1로 라이선스가 변경되면, 해당 소프트웨어의 사용과 배포에 대한 접근 및 권한이 크게 바뀌게 됩니다. 이러한 변경의 의미와 가능한 추측을 아래에 나열해 보겠습니다:

1. **상업적 가치**: 기업이나 개발자는 MPL 2.0에서 BSL 1.1로 라이선스를 변경하는 것으로, 해당 소프트웨어에 상업적 가치가 있다고 판단했을 수 있습니다. BSL은 특정 기간 동안 소프트웨어의 일부 사용을 제한할 수 있기 때문에, 기업은 이 기간 동안 소프트웨어의 상업적 가치를 최대화하려고 시도할 수 있습니다.
2. **제한된 사용**: MPL 2.0은 오픈소스 라이선스로서 소프트웨어의 자유로운 사용, 수정, 배포를 허용합니다. BSL 1.1로의 전환은 특정 사용 사례나 상황에서의 소프트웨어 사용을 제한하려는 의도일 수 있습니다. 예를 들어, 대규모의 상업적 환경에서의 사용이나 SaaS로서의 제공을 제한하고자 할 수 있습니다.
3. **오픈소스로의 장기적 전환**: BSL 1.1은 "Change Date" 이후에 다시 오픈소스 라이선스로 전환됩니다. 따라서, 기업은 장기적으로 커뮤니티와 함께 해당 소프트웨어를 발전시키길 원하지만, 단기적으로는 상업적 이익을 추구하려는 전략을 선택했을 수 있습니다.
4. **커뮤니티 반응**: 이러한 라이선스 변경은 오픈소스 커뮤니티 내에서 다양한 반응을 일으킬 수 있습니다. 일부 사용자나 기여자는 제한적인 BSL에 반대할 수 있으며, 이로 인해 프로젝트의 포크나 대체 프로젝트의 시작을 볼 수도 있습니다.
5. **경쟁과 시장 동향**: 해당 소프트웨어의 시장 내 경쟁 상황, 동향, 그리고 사용자의 수요에 따라 라이선스 변경 결정이 내려졌을 수도 있습니다. 기업은 라이선스를 변경하여 특정 시장 세그먼트에서 경쟁력을 강화하려고 할 수 있습니다.

결론적으로, MPL 2.0에서 BSL 1.1로의 라이선스 변경은 소프트웨어의 상업적 활용, 사용 제한, 그리고 장기적인 오픈소스 전략 등 여러 요인을 반영하는 것으로 해석될 수 있습니다.
{% endhint %}

{% hint style="info" %}
**ChatGPT 의견에 대한 개인적 의견**

거의 모두 동의하며 처음 의견드린 것처럼 어느쪽에 편들기 어렵습니다.\
S/W엔지니어로서도, 비즈니스를 하는 하는 사람으로서도, 특히 Hashicorp는 이제 상장을 한 회사이기 때문에 투자자의 의견들도 무시할 수 없었을 것입니다.

ChatGPT가 설명해준 것처럼, 라이선스 정책에 관해서 정확한 검토는 필요합니다. 특히, 테라폼을 이용하여 어떠한 도구를 만들고 플랫폼을 만들때는 정확하게 사용해야합니다.

그리고, 이러한 정책은 테라폼의 버전에 따라서 적용되는 부분이 달라 그 부분도 찾아보고 공부 해보는 것을 \
권해드립니다.

하지만, 너무 라이선스 정책에 갇혀서 개인의 사용이나 회사에서의 도구 그대로에 대한 사용에 대해서는 주저할 필요는 없습니다. 설령 테라폼을 못쓰는 환경이 되더라도 그 사용에 의미와 선언적 의미에 대해서만 이해하더라도 개인에게 충분한 성장에 도움이 될 것 입니다.

{% endhint %}
