{"meta":{"title":"Rust 빌드 및 테스트","intro":"CI(연속 통합) 워크플로를 만들어 Rust 프로젝트를 빌드하고 테스트하는 방법을 알아보세요.","product":"GitHub Actions","breadcrumbs":[{"href":"/ko/actions","title":"GitHub Actions"},{"href":"/ko/actions/tutorials","title":"자습서"},{"href":"/ko/actions/tutorials/build-and-test-code","title":"코드 빌드 및 테스트"},{"href":"/ko/actions/tutorials/build-and-test-code/rust","title":"Rust"}],"documentType":"article"},"body":"# Rust 빌드 및 테스트\n\nCI(연속 통합) 워크플로를 만들어 Rust 프로젝트를 빌드하고 테스트하는 방법을 알아보세요.\n\n## 소개\n\n이 가이드에서는 Rust 패키지를 빌드하고 테스트하고 게시하는 방법을 보여 줍니다.\n\nGitHub 호스팅 실행기에는 사전 설치된 소프트웨어가 포함된 도구 캐시가 있으며, 여기에는 Rust의 종속성이 포함되어 있습니다. 최신 소프트웨어 및 사전 설치된 Rust 버전의 전체 목록은 [GitHub 호스팅 실행기](/ko/actions/using-github-hosted-runners/using-github-hosted-runners/about-github-hosted-runners#preinstalled-software)을(를) 참조하세요.\n\n## 필수 조건\n\nYAML 구문과 이를 GitHub Actions와 함께 사용하는 방법에 대해 잘 알고 있어야 합니다. 자세한 내용은 [GitHub Actions에 대한 워크플로 구문](/ko/actions/using-workflows/workflow-syntax-for-github-actions)을(를) 참조하세요.\n\nRust 언어를 기본적으로 이해하는 것이 좋습니다. 자세한 내용은 [Rust 시작하기](https://www.rust-lang.org/learn)를 참조하세요.\n\n## Rust 워크플로 템플릿 사용\n\n빠르게 시작하려면 워크플로 템플릿을 리포지토리의 `.github/workflows` 디렉터리에 추가합니다.\n\nGitHub은 대부분의 Rust 프로젝트에서 작동하는 Rust 워크플로 템플릿을 제공합니다. 이 가이드의 후속 섹션에서는 이 워크플로 템플릿을 사용자 지정하는 방법에 대한 예시를 제공합니다.\n\n1. GitHub에서 리포지토리의 기본 페이지로 이동합니다.\n\n2. 리포지토리 이름에서 **<svg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-play\" aria-label=\"play\" role=\"img\"><path d=\"M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z\"></path></svg> 작업**을 클릭합니다.\n\n   ![\"github/docs\" 리포지토리의 탭 스크린샷. \"작업\" 탭은 주황색 윤곽선으로 강조 표시됩니다.](/assets/images/help/repository/actions-tab-global-nav-update.png)\n\n3. 리포지토리에 워크플로가 이미 있는 경우 **새 워크플로**를 클릭합니다.\n\n4. \"워크플로 선택\" 페이지에는 권장되는 워크플로 템플릿의 선택 항목이 표시됩니다. “Rust”를 검색합니다.\n\n5. ```\n          **지속적 통합**을 클릭하여 워크플로 선택을 필터링합니다.\n   ```\n\n6. “GitHub Actions에서 제공하는 Rust” 워크플로에서 **구성**을 클릭합니다.\n\n   ![\"워크플로 선택\" 페이지의 스크린샷. “Rust” 워크플로의 “구성” 버튼은 주황색 윤곽선으로 강조 표시되어 있습니다.](/assets/images/help/actions/starter-workflow-rust.png)\n\n7. 필요에 따라 워크플로를 편집합니다. 예를 들어 Rust 버전을 변경합니다.\n\n8. ```\n          **변경 내용 커밋**을 클릭합니다.\n   ```\n\n`rust.yml` 워크플로 파일이 리포지토리의 `.github/workflows` 디렉터리에 추가됩니다.\n\n## Rust 버전 지정\n\nGitHub-호스팅 러너에는 최신 버전의 Rust 도구 체인이 포함되어 있습니다. rustup을 사용하여 실행기에서 설치된 버전을 보고하고 버전을 재정의하고 다른 도구 체인을 설치할 수 있습니다. 자세한 내용은 [rustup 책](https://rust-lang.github.io/rustup/)을 참조하세요.\n\n이 예제에서는 실행기 환경을 설정하여 rust의 야간 빌드를 사용하고 버전을 보고하기 위해 사용할 수 있는 단계를 보여 줍니다.\n\n```yaml copy\n      - name: Temporarily modify the rust toolchain version\n        run: rustup override set nightly\n      - name: Output rust version for educational purposes\n        run: rustup --version\n```\n\n### 종속성 캐시 처리\n\n캐시 작업을 사용하여 종속성을 캐시하고 복원할 수 있습니다. 이 예제에서는 리포지토리에 `Cargo.lock` 파일이 포함되어 있다고 가정합니다.\n\n```yaml copy\n      - name: Cache\n        uses: actions/cache@v4\n        with:\n          path: |\n            ~/.cargo/registry\n            ~/.cargo/git\n            target\n          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}\n```\n\n사용자 지정 요구 사항이 있거나 캐싱에 대한 더 세부적인 제어가 필요한 경우 [`cache`작업](https://github.com/marketplace/actions/cache)에 대한 다른 구성 옵션을 탐색해야 합니다. 자세한 내용은 [종속성 캐싱 참조](/ko/actions/using-workflows/caching-dependencies-to-speed-up-workflows)을(를) 참조하세요.\n\n## 코드 빌드 및 테스트\n\n코드를 빌드하고 테스트하기 위해 로컬에서 사용하는 것과 동일한 명령을 사용할 수 있습니다. 이 예시 워크플로에서는 작업에서 `cargo build` 및 `cargo test`를 사용하는 방법을 보여 줍니다.\n\n```yaml copy\njobs:\n  build:\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n        BUILD_TARGET: [release] # refers to a cargo profile\n    outputs:\n      release_built: ${{ steps.set-output.outputs.release_built }}\n    steps:\n      - uses: actions/checkout@v6\n      - name: Build binaries in \"${{ matrix.BUILD_TARGET }}\" mode\n        run: cargo build --profile ${{ matrix.BUILD_TARGET }}\n      - name: Run tests in \"${{ matrix.BUILD_TARGET }}\" mode\n        run: cargo test --profile ${{ matrix.BUILD_TARGET }}\n```\n\n이 예제에서 사용되는 `release` 키워드는 cargo 프로필에 해당합니다.\n[프로필](https://doc.rust-lang.org/cargo/reference/profiles.html)을 `Cargo.toml` 파일에서 정의한 모든 것을 사용할 수 있습니다.\n\n## 패키지 또는 라이브러리를 crates.io에 게시\n\n워크플로를 설정하여 코드를 빌드하고 테스트한 후에는 비밀을 사용하여 로그인하여 패키지를 [crates.io](https://crates.io/)에 게시할 수 있습니다.\n\n```yaml copy\n      - name: Login into crates.io\n        run: cargo login ${{ secrets.CRATES_IO }}\n      - name: Build binaries in \"release\" mode\n        run: cargo build -r\n      - name: \"Package for crates.io\"\n        run: cargo package # publishes a package as a tarball\n      - name: \"Publish to crates.io\"\n        run: cargo publish # publishes your crate as a library that can be added as a dependency\n```\n\n크레이트를 빌드하고 패키징하는 데 오류가 있는 경우 매니페스트, `Cargo.toml` 파일에서 메타데이터를 확인합니다. [매니페스트 형식](https://doc.rust-lang.org/cargo/reference/manifest.html)을 참조하세요. 또한 `Cargo.lock` 파일을 확인해야 합니다. [Cargo.toml 및 Cargo.lock ](https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html)을 참조하세요.\n\n## 워크플로 데이터를 아티팩트로 패키지\n\n워크플로가 완료되면 분석을 위해 결과 아티팩트를 업로드하거나 다른 워크플로에서 사용할 수 있습니다. 워크플로에 이러한 예제 단계를 추가하여 다른 워크플로에서 사용할 애플리케이션을 업로드할 수 있습니다.\n\n```yaml copy\n      - name: Upload release artifact\n        uses: actions/upload-artifact@v4\n        with:\n          name: <my-app>\n          path: target/${{ matrix.BUILD_TARGET }}/<my-app>\n```\n\n업로드된 아티팩트를 다른 작업에서 사용하려면 워크플로에 리포지토리에 대한 올바른 권한이 있는지 확인합니다. [워크플로에서 인증에 GITHUB\\_TOKEN 사용](/ko/actions/security-for-github-actions/security-guides/automatic-token-authentication)을(를) 참조하세요. 다음 예제 단계를 사용하여 이전 워크플로에서 만든 앱을 다운로드하고 GitHub에 게시할 수 있습니다.\n\n```yaml copy\n      - uses: actions/checkout@v6\n      - name: Download release artifact\n        uses: actions/download-artifact@v5\n        with:\n          name: <my-app>\n          path: ./<my-app>\n      - name: Publish built binary to GitHub releases\n      - run: |\n          gh release create --generate-notes ./<my-app>/<my-project>#<my-app>\n```"}