# GitHub Copilot 사용하여 디버그하는 학습

GitHub Copilot에게 도움을 요청하여 코드의 오류를 식별하고 수정합니다.

특히 새 개발자인 경우 코드에서 버그를 찾고 수정하는 것이 어려울 수 있습니다. 다행히 GitHub Copilot과 같은 도구를 사용하면 버그를 빠르게 식별하고 스쿼시할 수 있으므로 더 창의적이고 흥미로운 작업에 집중할 수 있습니다.

## 필수 조건

이 문서의 예제에서는 GitHub Copilot를 사용하여 Visual Studio Code(VS Code)에서 Python 프로젝트를 디버그하고 있다고 가정합니다. 예제를 따르려면 다음을 수행해야 합니다.

* Visual Studio Code 문서에서 [Copilot으로 Visual Studio Code 설정을 완료하세요](https://code.visualstudio.com/docs/copilot/setup-simplified).
* [Python을 다운로드하세요](https://www.python.org/downloads/).
* Visual Studio Code에 대한 [Python 확장](https://marketplace.visualstudio.com/items?itemName=ms-python.python)을 설치합니다.

## 예제를 통해 디버그하는 방법 학습

버그가 있는 코드를 실행하려고 할 때 발생하는 두 가지 주요 상황은 다음과 같습니다.

* 코드 실행이 완료되기 전에 종료되고 오류 메시지가 표시됩니다.
* 오류 없이 코드가 실행되지만 예상한 것과 다르게 출력됩니다.

다행히도 Copilot은 두 경우 모두에서 코드를 디버그하는 데 도움이 될 수 있습니다. 방법을 알아보려면 다음 예제를 참조하세요.

### GitHub Copilot을 사용하여 오류 디버깅

버그가 있는 코드를 실행하면 오류 메시지가 자주 표시됩니다. 이 메시지는 오류가 발생한 파일과 줄 번호를 제공하며, 무엇이 잘못되었는지 간략하게 설명합니다. 그럼에도 오류 메시지가 혼란스러울 수 있습니다. 버그를 완전히 이해하고 수정하려면 Copilot에게 도움을 요청할 수 있습니다.

예제 리포지토리를 사용하여 이 작업을 시도해 보겠습니다. [`new2code/debug-with-copilot`](https://github.com/new2code/debug-with-copilot)

#### 예제 리포지토리 복제

먼저 리포지토리의 로컬 복사본을 만들어야 합니다.

1. VS Code에서 [new2code/debug-with-copilot 리포지토리 복제를 시작](vscode://vscode.git/clone?url=https://github.com/new2code/debug-with-copilot)합니다. <!-- markdownlint-disable-line GHD003 -->
2. 컴퓨터에 리포지토리를 저장할 위치를 선택한 다음, **Select as Repository Destination**을 클릭합니다.
3. 메시지가 표시되면 리포지토리를 엽니다.

#### 버그가 있는 파일 실행

이제 [`bugged_dice_battle.py`](https://github.com/new2code/debug-with-copilot/blob/main/bugged_dice_battle.py) 파일을 실행합니다. 이 프로그램은 두 플레이어 사이의 주사위 전투를 시뮬레이션합니다.

1. VS Code에서 `bugged_dice_battle.py` 파일을 열고 검토합니다.

2. 명령어 팔레트를 열려면 <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>P</kbd> (Windows/Linux) 또는 <kbd>Cmd</kbd>+<kbd>Shift</kbd>+<kbd>P</kbd> (Mac) 키를 누르십시오.

3. `Terminal: Create New Terminal`을 입력하고 <kbd>Enter</kbd> 키를 누릅니다.

4. 터미널 탭에 다음 명령을 붙여넣습니다.

   Windows:

   ```shell copy
   py bugged_dice_battle.py
   ```

   Mac 또는 Linux:

   ```shell copy
   python bugged_dice_battle.py
   ```

5. <kbd>Enter</kbd> 키를 눌러 프로그램을 실행합니다.

안타깝게도 터미널에서 다음 메시지로 끝나는 일부 오류 텍스트가 표시되었습니다.

> TypeError: str("int" 아님)만 str에 연결할 수 있습니다.

#### 파일 디버깅

이 오류의 의미를 이해하려면 [공동 파일럿 채팅을 VS Code에서 여세요](vscode://GitHub.Copilot-Chat?ref_product=copilot\&ref_type=engagement\&ref_style=text). 그런 다음, 다음 프롬프트를 붙여넣고 전송하세요. <!-- markdownlint-disable-line GHD003 -->

```text copy
Explain in depth why my code produces the following error and how I can fix it:

TypeError: can only concatenate str (not "int") to str
```

Copilot은 정수 `die_1`과 `die_2`를 문자열에 연결하려고 시도하기 때문에 오류가 발생한다고 응답하며 문자열에만 연결할 수 있습니다.

업데이트된 코드 버전을 제공하여 `str()` 함수를 사용하여 정수를 문자열로 변환한 후 연결하여 버그를 수정합니다. Copilot의 제안을 파일에 적용하여 디버깅의 마지막 단계를 연습합니다.

### GitHub Copilot을 사용하여 잘못된 출력 디버깅

경우에 따라 버그가 있는 코드가 오류를 throw하지 않고 실행되기도 하지만 출력이 명확하게 잘못된 경우가 있습니다. 이 경우 VS Code에서 버그의 위치나 원인을 알 수 없기 때문에 디버깅이 더 어려울 수 있습니다.

이러한 "보이지 않는" 버그의 경우 Copilot이 특히 유용합니다. 예제 리포지토리의 다른 파일, `bugged_factorial_finder.py`에 대한 실습 환경을 살펴보겠습니다. 인수를 계산해야 하는 Python 프로그램입니다.

#### 버그가 있는 파일 실행

먼저 프로그램을 실행하여 잘못된 출력을 살펴보겠습니다.

1. `bugged_factorial_finder.py` 파일을 열고 검토합니다.

2. 이전에 만든 터미널에서 다음 명령을 붙여넣습니다.
   Windows:

   ```shell copy
   py bugged_factorial_finder.py
   ```

   Mac 또는 Linux:

   ```shell copy
   python bugged_factorial_finder.py
   ```

3. <kbd>Enter</kbd> 키를 눌러 프로그램을 실행합니다.

안타깝게도 코드가 예상대로 작동하지 않습니다. 올바른 6의 계승 값인 `720`을 반환하려고 했지만, 반환된 결과값은 훨씬 더 높습니다.

#### 파일 디버깅

무엇이 잘못되었는지 이해하려면 [공동 파일럿 채팅](vscode://GitHub.Copilot-Chat?ref_product=copilot\&ref_type=engagement\&ref_style=text)을 열고 다음 프롬프트를 전송하세요. <!-- markdownlint-disable-line GHD003 -->

```text copy
Why is the output of this code so much higher than expected? Please explain in depth and suggest a solution.
```

Copilot은 `*=` 연산자를 사용하기 때문에 실제로 `factorial`에 `i`**및**`factorial`을 모두 곱하고 있다는 점을 지적할 것입니다. 즉, 루프가 반복될 때 마다 추가 `factorial` 값을 곱합니다.

이 오류를 해결하기 위해 Copilot은 수식에서 추가 `factorial`을 제거하거나 `*=` 연산자를 `=`로 변경하여 코드를 제안합니다. 지금 변경하세요!

## 사용자 고유의 프로젝트 디버깅

이제 Copilot을 사용하여 몇 가지 간단한 프로그램 디버깅을 연습했으므로 동일한 방법을 사용하여 작업에 숨어 있는 버그를 찾아 수정할 수 있습니다.

예를 들어 코드에서 생성된 오류 메시지를 디버그하려면 Copilot을 다음 프롬프트에 보냅니다.

```text copy
Explain in depth why my code produces the following error and how I can fix it:

YOUR-ERROR-MESSAGE
```

그렇지 않은 경우 잘못된 출력을 디버깅하는 경우 Copilot에게 출력이 잘못된 이유와 수정 방법을 문의하세요. 최상의 결과를 얻기 위해 출력이 예상과 어떻게 다른지에 대해 가능한 한 많은 컨텍스트를 제공합니다.

이러한 전술을 사용하면 프로젝트에서 버그를 해결할 완벽한 준비가 된 것입니다!

## 다음 단계

코딩을 계속하다 보면 디버그하기 어려운 특정 문제 시나리오와 오류가 발생할 수 있습니다. 잠재적인 문제 목록과 문제 해결을 위한 공동 파일럿 채팅 메시지 예시를 보려면 [오류 디버깅](/ko/copilot/copilot-chat-cookbook/debugging-errors)을(를) 참조하세요.