Skip to main content

GitHub Copilot을 사용하여 디버그하는 방법 학습

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

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

필수 조건

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

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

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

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

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

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

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

new2code/debug-with-copilot 리포지토리의 bugged_dice_battle.py 파일을 사용해 보겠습니다. 이 프로그램은 다음 코드를 사용하여 두 플레이어 간의 주사위 전투를 시뮬레이션합니다.

# Import the random module to easily generate pseudo-random numbers
import random

# Define a function that simulates a dice battle between two players
def dice_battle():

    # Generate random numbers between 1 and 6 for each player's die roll
    die_1 = random.randint(1, 6)
    die_2 = random.randint(1, 6)

    # Compare the die rolls and return the result as a string
    if die_1 > die_2:
        return "Player 1 rolled a " + die_1 + " and Player 2 rolled a " + die_2 + ". Player 1 wins!"
    elif die_1 < die_2:
        return "Player 1 rolled a " + die_1 + " and Player 2 rolled a " + die_2 + ". Player 2 wins!"
    else:
        return "Player 1 rolled a " + die_1 + " and Player 2 rolled a " + die_2 + ". It's a tie!"

print(dice_battle())

먼저 리포지토리를 로컬로 복제해야 합니다.

  1. VS Code에서 Cmd+Shift+P(Mac) 또는 Ctrl+Shift+P(Windows/Linux)를 눌러 명령 팔레트를 엽니다.

  2. Git: Clone을 입력하고 Enter 키를 누릅니다.

  3. new2code/debug-with-copilot 리포지토리의 URL을 붙여넣습니다.

    Text
    https://github.com/new2code/debug-with-copilot
    
  4. Enter 키를 누른 다음, 컴퓨터에 리포지토리를 저장할 위치를 선택합니다.

  5. 메시지가 표시되면 VS Code에서 리포지토리를 엽니다.

이제 리포지토리를 복제했으므로 bugged_dice_battle.py를 실행하여 출력을 살펴보겠습니다.

  1. Cmd+Shift+P(Mac) 또는 Ctrl+Shift+P(Windows/Linux)를 눌러 명령 팔레트를 엽니다.

  2. Terminal: Create New Terminal을 입력하고 Enter 키를 누릅니다.

  3. Mac 또는 Linux를 사용하는 경우 터미널 탭에 다음 코드를 붙여넣습니다.

    Shell
    python bugged_dice_battle.py
    

    Windows를 사용하는 경우에는 다음 코드를 붙여넣습니다.

    Shell
    py bugged_dice_battle.py
    
  4. Enter 키를 눌러 프로그램을 실행합니다.

안타깝게도 터미널에서 TypeError: can only concatenate str (not "int") to str의 메시지로 끝나는 일부 오류 텍스트가 표시되었습니다. 이것이 의미하는 바를 이해하려면 Command+Shift+I(Mac) 또는 Ctrl+Alt+I(Windows/Linux)를 눌러 Copilot Chat을 연 다음, 붙여넣고 다음 프롬프트를 보냅니다.

Text
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_1die_2를 문자열에 연결하려고 시도하기 때문에 오류가 발생한다고 응답하며 문자열에만 연결할 수 있습니다. 그런 다음, str() 함수를 사용하여 정수를 연결하기 전에 정수에서 문자열로 변환하여 버그를 수정하는 업데이트된 버전의 코드를 제공합니다.

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

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

이러한 "보이지 않는" 버그의 경우 Copilot이 특히 유용합니다. new2code/debug-with-copilot 리포지토리의 bugged_factorial_finder.py 파일을 사용하여 실습해 보겠습니다. 이 Python 프로그램은 계승 값을 계산해야 하며 다음과 같은 코드를 포함합니다.

# Initialize the factorial result to 1
factorial = 1

# Initialize the input number to 6
number = 6

# Loop from 1 to number (inclusive) and multiply factorial by each number
for i in range(1, number + 1):
    factorial *= factorial * i

print(f"The factorial of {number} is {factorial}")

리포지토리를 이미 로컬로 복제했으므로 bugged_factorial_finder.py 파일을 실행하여 출력을 살펴보겠습니다.

  1. VS Code에서 Cmd+Shift+P(Mac) 또는 Ctrl+Shift+P(Windows/Linux)를 눌러 명령 팔레트를 엽니다.

  2. Terminal: Create New Terminal을 입력하고 Enter 키를 누릅니다.

  3. Mac 또는 Linux를 사용하는 경우 터미널 탭에 다음 코드를 붙여넣습니다.

    Shell
    python bugged_factorial_finder.py
    

    Windows를 사용하는 경우에는 다음 코드를 붙여넣습니다.

    Shell
    py bugged_factorial_finder.py
    
  4. Enter 키를 눌러 프로그램을 실행합니다.

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

무엇이 잘못되었는지 이해하려면 VS Code에서 bugged_factorial_finder.py 파일을 연 상태에서 Copilot Chat을 열고 다음 프롬프트를 보냅니다.

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

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

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

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

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

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

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

YOUR-ERROR-MESSAGE

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

이러한 전술을 사용하면 프로젝트에서 버그를 스쿼시하기 위한 준비가 완료된 것입니다.

다음 단계

코딩을 계속하다 보면 디버그하기 어려운 특정 문제 시나리오와 오류가 발생할 수 있습니다. 잠재적인 문제 목록과 문제 해결을 위한 Copilot Chat 메시지 예시를 보려면 디버깅 오류을(를) 참조하세요.