

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

# 의 기본 사항 AWS SDK for Rust
<a name="fundamentals"></a>

Rust 프로그래밍 언어 기본 사항 AWS SDK for Rust, SDK for Rust 상자 정보, 프로젝트 구성, SDK for Rust의 Tokio 런타임 사용 등를 사용한 프로그래밍의 기본 사항을 알아봅니다.

## 사전 조건
<a name="prerequisites"></a>

를 사용하려면 Rust 및 Cargo가 설치되어 있어야 AWS SDK for Rust합니다.
+ Rust 도구 체인 설치: [https://www.rust-lang.org/tools/install](https://www.rust-lang.org/tools/install)
+ `cargo install cargo-component` 명령을 실행하여 `cargo-component` [도구](https://github.com/bytecodealliance/cargo-component)를 설치합니다.

### 권장 도구:
<a name="recommended-tools"></a>

코드 완성 및 문제 해결을 지원하기 위해 IDE에 다음과 같은 선택적 도구를 설치할 수 있습니다.
+ rust-analyzer 확장은 [Visual Studio Code의 Rust](https://code.visualstudio.com/docs/languages/rust)를 참조하세요.
+ Amazon Q Developer는 [IDE에서 Amazon Q Developer 확장 또는 플러그인 설치](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/q-in-IDE-setup.html)를 참조하세요.

## Rust 기본 사항
<a name="rust-fundamentals"></a>

다음은 알아두면 도움이 될 Rust 프로그래밍 언어의 몇 가지 기본 사항입니다. 모든 자세한 내용은 [Rust 프로그래밍 언어](https://doc.rust-lang.org/book/title-page.html#the-rust-programming-language)를 참조합니다.
+ `Cargo.toml`은 표준 Rust 프로젝트 구성 파일이며, 프로젝트에 대한 종속성과 일부 메타데이터를 포함합니다. Rust 소스 파일에는 `.rs` 파일 확장자가 있습니다. [Hello, Cargo\$1](https://doc.rust-lang.org/book/ch01-03-hello-cargo.html)를 참조하세요.
  + `Cargo.toml`은 프로필을 사용하여 사용자 지정할 수 있습니다. [릴리스 프로파일을 사용하여 빌드 사용자 지정](https://doc.rust-lang.org/book/ch14-01-release-profiles.html)을 참조하세요. 이러한 프로필은 공유 AWS `config` 파일 내에서 AWS의 프로필 사용과 완전히 관련이 없고 독립적입니다.
  + 프로젝트와 이 파일에 라이브러리 종속성을 추가하는 일반적인 방법은 `cargo add`를 사용하는 것입니다. [https://doc.rust-lang.org/cargo/commands/cargo-add.html](https://doc.rust-lang.org/cargo/commands/cargo-add.html) 섹션을 참조하세요.
+ Rust에는 다음과 같은 기본 함수 구조가 있습니다. `let` 키워드는 변수를 선언하며 할당(=)과 페어링될 수 있습니다. `let` 이후에 유형을 지정하지 않으면 컴파일러가 유형을 유추합니다. [변수 및 변경 가능성](https://doc.rust-lang.org/book/ch03-01-variables-and-mutability.html)을 참조하세요.

  ```
  fn main() {
      let w = "world";
      println!("Hello {}!", w);
  }
  ```
+ Rust는 명시적 유형 `x`의 변수 `T`를 선언하기 위해 `x: T` 구문을 사용합니다. [데이터 유형](https://doc.rust-lang.org/book/ch03-02-data-types.html)을 참조하세요.
+ `struct X {}`는 새 유형 `X`를 정의합니다. 메서드는 사용자 지정 구조 유형 `X`에 구현됩니다. `X` 유형에 대한 메서드는 `impl` 키워드 접두사가 붙은 구현 블록으로 선언됩니다. 구현 블록 내에서 `self`는 메서드가 직접 호출된 구문의 인스턴스를 나타냅니다. [키워드 `impl`](https://doc.rust-lang.org/std/keyword.impl.html) 및 [메서드 구문](https://doc.rust-lang.org/book/ch05-03-method-syntax.html)을 참조하세요.
+ 느낌표(‘\$1’)가 함수 정의 또는 함수 직접 호출로 보이는 값을 따르는 경우 코드는 매크로를 정의하거나 직접 호출합니다. [매크로](https://doc.rust-lang.org/book/ch19-06-macros.html?highlight=macro#macros)를 참조하세요.
+ Rust에서 복구할 수 없는 오류는 `panic!` 매크로로 표시됩니다. 프로그램이 실행을 중지할 `panic!`을 발견하면 실패 메시지를 인쇄하고, 해제하고, 스택을 정리하고, 종료합니다. [`panic!`으로 복구할 수 없는 오류](https://doc.rust-lang.org/book/ch09-01-unrecoverable-errors-with-panic.html)를 참조하세요.
+ Rust는 다른 프로그래밍 언어와 마찬가지로 기본 클래스의 기능 상속을 지원하지 않습니다. `traits`는 Rust가 메서드의 오버로딩을 제공하는 방법입니다. 특성은 개념적으로 인터페이스와 유사한 것으로 생각할 수 있습니다. 그러나 특성과 실제 인터페이스는 차이가 있으며 설계 프로세스에서 다르게 사용되는 경우가 많습니다. [특성: 공유 동작 정의](https://doc.rust-lang.org/book/ch10-02-traits.html)를 참조하세요.
  + 다형성은 각 데이터 형식을 개별적으로 작성할 필요 없이 여러 데이터 유형에 대한 기능을 지원하는 코드를 말합니다. Rust는 열거형, 특성 및 제너릭을 통해 다형성을 지원합니다. [유형 시스템 및 코드 공유로서의 상속](https://doc.rust-lang.org/book/ch17-01-what-is-oo.html?#inheritance-as-a-type-system-and-as-code-sharing)을 참조하세요.
+ Rust는 메모리에 대해 매우 명시적입니다. 스마트 포인터는 ‘포인터처럼 작동하지만 추가 메타데이터와 기능도 있는 데이터 구조’입니다. [스마트 포인터](https://doc.rust-lang.org/book/ch15-00-smart-pointers.html)를 참조하세요.
  + `Cow` 유형은 필요할 때 호출자에게 메모리 소유권을 전송하는 데 도움이 되는 clone-on-write 스마트 포인터입니다. [https://doc.rust-lang.org/std/borrow/enum.Cow.html](https://doc.rust-lang.org/std/borrow/enum.Cow.html)을(를) 참조하세요.
  + `Arc` 유형은 할당된 인스턴스 수를 계산하는 원자적 참조 카운트 스마트 포인터입니다. [https://doc.rust-lang.org/std/sync/struct.Arc.html](https://doc.rust-lang.org/std/sync/struct.Arc.html)을(를) 참조하세요.
+ SDK for Rust는 복잡한 유형을 구성하기 위해 빌더 패턴을 자주 사용합니다.

## AWS SDK for Rust crate 기본 사항
<a name="aws-sdk-crate-fundamentals"></a>
+ SDK for Rust 기능의 기본 코어 크레이트는 `aws-config`입니다. 이는 환경에서 구성을 읽을 수 있는 기능을 제공하기 때문에 대부분의 프로젝트에 포함됩니다.

  ```
  $ cargo add aws-config
  ```
  + 이를 호출 AWS 서비스 된와 혼동하지 마십시오 AWS Config. 이는 서비스이므로 AWS 서비스 상자의 표준 규칙을 따르며 라고 합니다`aws-sdk-config`.
+ SDK for Rust 라이브러리는 각각 다른 라이브러리 상자로 구분됩니다 AWS 서비스. 이러한 크레이트는 [https://docs.rs/](https://docs.rs/)에서 확인할 수 있습니다.
+ AWS 서비스 상자는 `aws-sdk-s3` 및 `aws-sdk-[servicename]`와 같은의 명명 규칙을 따릅니다`aws-sdk-dynamodb`.

## 작업을 위한 프로젝트 구성 AWS 서비스
<a name="project-configuration-for-working-with-aws-services"></a>
+ 애플리케이션에서 사용할 각에 대해 프로젝트에 크레이트를 추가해야 AWS 서비스 합니다.
+ 크레이트를 추가하는 권장 방법은 `cargo add aws-sdk-s3` 등의 `cargo add [crateName]`를 실행하여 프로젝트 디렉터리의 명령줄을 사용하는 것입니다.
  + 그러면 `[dependencies]`에서 프로젝트의 `Cargo.toml`에 줄이 추가됩니다.
  + 기본적으로 최신 버전의 크레이트가 프로젝트에 추가됩니다.
+ 소스 파일에서 `use` 문을 사용하여 크레이트의 항목을 범위로 가져옵니다. Rust 프로그래밍 언어 웹 사이트에서 [외부 패키지 사용](https://doc.rust-lang.org/book/ch07-04-bringing-paths-into-scope-with-the-use-keyword.html#using-external-packages)을 참조하세요.
  + 크레이트 이름은 종종 하이픈으로 표시되지만 실제로 크레이트 사용 시 하이픈이 밑줄로 변환됩니다. 예를 들어, `aws-config` 크레이트는 코드 `use` 문에서 `use aws_config`로 사용됩니다.
+ 구성은 복잡한 주제입니다. 구성은 코드에서 직접 수행하거나 환경 변수 또는 구성 파일에서 외부에서 지정할 수 있습니다. 자세한 내용은 [외부에서 AWS SDK for Rust 서비스 클라이언트 구성](config-external.md) 단원을 참조하십시오.
  + SDK가 구성을 로드하면 대부분의 설정에 적절한 기본값이 있으므로 실행을 중지하는 대신 잘못된 값이 기록됩니다. 로깅을 켜는 방법은 [AWS SDK for Rust에서 로깅 구성 및 사용](logging.md) 섹션을 참조하세요.
  + 대부분의 환경 변수 및 구성 파일 설정은 프로그램이 시작될 때 한 번 로드됩니다. 프로그램을 다시 시작할 때까지 값에 대한 업데이트가 표시되지 않습니다.

## Tokio 런타임
<a name="tokio-runtime"></a>
+ Tokio는 SDK for Rust 프로그래밍 언어의 비동기 런타임으로, `async` 작업을 실행합니다. [tokio.rs](http://tokio.rs/) 및 [docs.rs/tokio](http://docs.rs/tokio)를 참조하세요.
+ SDK for Rust에는 비동기 런타임이 필요합니다. 프로젝트에 다음 크레이트를 추가하는 것이 좋습니다.

  ```
  $ cargo add tokio --features=full
  ```
+ `tokio::main` 속성 매크로는 프로그램에 대한 비동기 기본 진입점을 생성합니다. 이 매크로를 사용하려면 다음과 같이 `main` 메서드 앞의 줄에 매크로를 추가합니다.

  ```
  #[tokio::main]
  async fn main() -> Result<(), Error> {
  ```