# 컴파일된 언어에 CodeQL 코드 스캐닝

컴파일된 언어, 사용 가능한 빌드 옵션을 분석하는 방법을 CodeQL 이해하고 필요한 경우 데이터베이스 생성 프로세스를 사용자 지정하는 방법을 알아봅니다.

## 빌드 모드 비교

<div class="ghd-tool rowheaders">

| 빌드 모드 특성                   | 없음                        | 자동 빌드 | 설명서 |
| -------------------------- | ------------------------- | ----- | --- |
| 기본 설정 및 조직 수준의 활성화에 사용됩니다. | 예(C/C++, C#, Java 및 Rust) |       |     |

```
          `none`가 지원되지 않는 곳에서 예 | No |
```

\| 사용자 구성 없이 분석 성공함 | 예 | 변수 | No |
\| 분석의 완전성 | 생성된 코드가 분석되지 않음 | 변수 | 사용자 제어 |
\| 분석의 정확성 | 좋음 | 좋음 | 최상의 |

</div>

## 빌드 모드 선택

처음으로 또는 여러 리포지토리에서 설정하는 code scanning 경우 기본 설정을 사용하는 것이 가장 좋습니다. 기본 설정은 가능한 한 CodeQL 빨리 경고 수정을 시작할 수 있도록 데이터베이스를 생성하고 코드를 분석하는 데 사용할 수 있는 가장 간단한 방법을 사용합니다. 초기 경고를 해결하고 나면 위험 수준이 높은 리포지토리에 수동 빌드 프로세스를 사용하여 고급 설정으로 전환할 수 있습니다.

컴파일된 언어에 대한 언어별 `autobuild` 동작, 실행기 요구 사항 및 빌드 모드 세부 정보는 [컴파일된 언어에 대한 CodeQL 빌드 옵션 및 단계](/ko/code-security/reference/code-scanning/codeql/codeql-build-options-and-steps-for-compiled-languages)을 참조하세요.

## 다중 언어 리포지토리에서 여러 빌드 모드 사용

컴파일된 언어가 여러 개인 리포지토리의 경우, 언어마다 빌드 모드를 다르게 사용할 수 있습니다. 예를 들어 리포지토리에 C/C++, C# 및 Java 포함된 경우 한 언어에 대한 수동 빌드 단계(여기 C/C++)를 제공할 수 있습니다. 이러한 워크플로는 각 언어에 대해 다른 빌드 모드를 지정합니다.

```yaml
strategy:
  matrix:
    include:
      # Analyzes C and C++ code using the commands in `Build C and C++ code`
      - language: c-cpp
        build-mode: manual
      # Analyzes C# code by automatically detecting a build
      - language: csharp
        build-mode: autobuild
      # Analyzes Java code directly from the codebase without a build
      - language: java-kotlin
        build-mode: none # analyzes Java only
steps:
- name: Checkout repository
  uses: actions/checkout@v5

# Initializes CodeQL tools and creates a codebase for analysis.
- name: Initialize CodeQL
  uses: github/codeql-action/init@v4
  with:
    languages: ${{ matrix.language }}
- if: ${{ matrix.build-mode == 'manual' }}
  name: Build C and C++ code
  run: |
    echo 'If you are using a "manual" build mode for one or more of the' \
      'languages you are analyzing, replace this with the commands to build' \
      'your code, for example:'
    echo ' make bootstrap'
    echo ' make release'
    exit 1
```

최신 버전에서 지원되는 언어, 라이브러리 및 프레임워크에 대한 자세한 내용은 설명서에서 CodeQL[지원되는 언어 및 프레임워크를](https://codeql.github.com/docs/codeql-overview/supported-languages-and-frameworks)CodeQL 참조하세요. 최신 버전을 실행하기 위한 시스템 요구 사항에 대한 자세한 내용은 설명서의 CodeQL[시스템 요구 사항을](https://codeql.github.com/docs/codeql-overview/system-requirements/#additional-software-requirements)CodeQL 참조하세요.

##

```
          CodeQL에 대한 종속성 캐싱 사용 설정
```

기본 설정 워크플로의 경우 종속성 캐싱은 퍼블릭 및 프라이빗 리포지토리의 GitHub에서 호스팅되는 실행기에만 사용하도록 설정되어 있습니다.

고급 설정 워크플로에서는 기본적으로 종속성 캐싱이 비활성화됩니다.
CodeQL에 대한 종속성 캐싱을 활성화하려면 고급 설정 워크플로에서 CodeQL 작업에 대한 `dependency-caching` 설정을 사용합니다. 이 설정은 다음 값을 허용합니다.

* `false`
  /
  `none`
  /
  `off`: 종속성 캐싱이 비활성화됩니다(기본값).
* `restore`: 기존 캐시만 복원하고 새 캐시는 저장하지 않습니다.
* `store`: 새 캐시만 저장하고 기존 캐시는 복원하지 않습니다.
* `true`
  /
  `full`
  /
  `on`: 기존 캐시를 복원하고 새 캐시는 저장합니다.

예를 들어, 다음 설정은 CodeQL 작업에 대한 종속성 캐싱을 활성화합니다.

```yaml
    # Initializes CodeQL with dependency caching enabled
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v4
      with:
        languages: java
        dependency-caching: true
```

##

```
          `none` 빌드 모드를 CodeQL에 사용하세요.

          C/C++, C#, Java 및 Rust 의 경우 CodeQL리포지토리에 Kotlin 코드도 포함되어 있지 않으면 기본 설정을 code scanning 사용하도록 설정할 때 빌드를 요구하지 않고 데이터베이스를 만듭니다. 리포지토리에 Java 코드 외에 Kotlin 코드가 포함된 경우 Kotlin 분석에 빌드가 필요하기 때문에 자동 빌드 프로세스에서 기본 설정을 사용하도록 설정됩니다.
```

다음과 같은 경우 빌드 없이 데이터베이스를 CodeQL 만들면 사용 `autobuild` 또는 수동 빌드 단계보다 덜 정확한 결과를 생성할 수 있습니다.

* 빌드 스크립트는 종속성 정보를 쿼리할 수 없고 종속성 추측은 정확하지 않습니다.
* 리포지토리는 보통 빌드 프로세스 중에 코드를 생성합니다.

  ```
          `autobuild` 또는 수동 빌드 단계를 사용하기 위해서는 고급 설정을 사용할 수 있습니다.
  ```

> \[!NOTE] Java 분석의 경우 `build-mode``none`로 설정되고 Kotlin 코드가 리포지토리에 있으면 Kotlin 코드가 분석되지 않으며 경고가 생성됩니다.
> [컴파일된 언어에 대한 CodeQL 빌드 옵션 및 단계](/ko/code-security/reference/code-scanning/codeql/codeql-build-options-and-steps-for-compiled-languages#building-java-and-kotlin)을(를) 참조하세요.

##

```
          `autobuild`를 CodeQL으로 사용하십시오.
```

이 CodeQL 작업은 다음 경우에 컴파일된 언어를 분석하는 데 사용합니다 `autobuild` .

* 기본 설정이 사용되며 이 언어는 `none` 빌드를 지원하지 않습니다(C/C++, C#, Java 및 Rust는 지원됨).
* 고급 설정이 활성화되고 워크플로는 `build-mode: autobuild`를 지정합니다.
* 고급 설정이 활성화되고 워크플로에 `autobuild` 작업(`github/codeql-action/autobuild@v4`)을 사용하는 언어용으로 자동 작성 단계가 있습니다.

###

```
          `build-mode` 옵션을 사용합니다.
```

```yaml
# Initializes the CodeQL tools for scanning.
name: Analyze
strategy:
  matrix:
    include:
      # Analyze C and C++ code
      - language: c-cpp
        build-mode: autobuild
      # Analyze Go code
      - language: go
        build-mode: autobuild

steps:
  - uses: github/codeql-action/init@v4
    with:
      languages: ${{ matrix.language }}
      build-mode: ${{ matrix.build-mode }}
```

### 자동 구성 단계 사용

```yaml
    # Initializes the CodeQL tools for scanning.
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v4
      with:
        languages: ${{ matrix.language }}

    - name: Autobuild
      uses: github/codeql-action/autobuild@v4
```

## 수동으로 빌드 단계 지정

고급 설정을 활성화한 경우에만 수동 빌드 단계를 지정할 수 있으며, [코드 검사에 대한 고급 설정 구성](/ko/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/configuring-advanced-setup-for-code-scanning#configuring-advanced-setup-for-a-repository)을 참조하세요.

`autobuild` 가 실패했거나 `autobuild` 프로세스에서 빌드한 것과는 다른 소스 파일들을 분석하고자 한다면 다음을 수행해야 합니다.

* 워크플로에서 특정 언어에 대한 빌드 모드를 지정했다면, 빌드 모드를 `manual`로 변경하세요.
* 워크플로에 `autobuild` 단계가 있는 경우, `autobuild` 단계를 삭제하거나 주석으로 처리합니다.

다음으로, `run` 단계의 주석 처리를 제거하고 사용할 빌드 프로세스를 직접 지정합니다. C/C++, C#, Go, Java, Kotlin 및 Swift의 경우 CodeQL은 지정된 빌드 단계에서 빌드된 모든 소스 코드를 분석합니다.

```
          `build-mode`를 `manual`로 정의하도록 워크플로를 업데이트합니다.
```

```yaml
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@v4
  with:
    languages: ${{ matrix.language }}
    build-mode: manual
- uses: github/codeql-action/analyze@v4
  with:
    category: "/language:${{ matrix.language }}"
```

또는 "자동 빌드" 단계를 주석으로 처리하도록 워크플로를 업데이트합니다.

```yaml
    # Autobuild attempts to build any compiled languages.
    # - name: Autobuild
    #  uses: github/codeql-action/autobuild@v4
```

### 빌드 명령 추가

수동 빌드가 활성화되면 워크플로에 `run` 단계의 주석 처리를 제거하고 리포지토리에 적합한 빌드 명령을 추가합니다.
`run` 단계는 운영 체제의 셸을 사용하여 명령줄 프로그램을 실행합니다. 이러한 명령을 수정하고 더 많은 명령을 추가하여 빌드 프로세스를 사용자 지정할 수 있습니다.

```yaml
- run: |
    make bootstrap
    make release
```

```
          `run` 키워드에 대한 자세한 내용은 [AUTOTITLE](/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun)을(를) 참조하세요.
```

<!-- For "no-build" this is covered earlier in the article under "About CodeQL build modes". -->

컴파일된 언어에 대한 수동 빌드 단계를 추가했으며 code scanning 리포지토리에서 아직 작동하지 않는 경우 문의하세요 [GitHub 지원 포털](https://support.github.com) 사용.