Introduction
익숙하지 않은 코드베이스에서 작업을 시작하거나 이전에 접한 적이 없는 큰 코드베이스의 일부를 변경하라는 메시지가 표시되면 일반적으로 속도를 높이기 위해 SME(주제 전문가)가 필요합니다. SME는 일반적으로 코드가 어떻게 함께 맞는지 알고 질문에 대답할 수 있는 숙련된 개발자입니다. 중소기업을 항상 사용할 수 있는 것은 아닙니다. 다른 표준 시간대에 있거나, 자신의 업무로 바쁘거나, 더 이상 팀에 있지 않을 수 있습니다.
익숙하지 않은 코드베이스를 이해해야 하는 경우 일반적으로 코드를 아는 팀원을 사용합니다. 해당 담당자가 부재중인 경우 코파일럿 CLI가 빈자리를 메울 수 있습니다. 이 자습서 코파일럿 CLI 에서는 리포지토리의 코드에 대해 질문하고, 코드 기반 답변을 생성하는 프롬프트 기술을 알아보고, 변경을 시작할 수 있는 자신감을 구축합니다.
AI SME를 사용하는 경우(또는 AI SME를 사용하는 경우는 언제인가요?)
이 자습서는 코드베이스를 더 빨리 이해해야 할 때마다 유용합니다. 다음은 그 예입니다.
- 방금 팀 또는 오픈 소스 프로젝트에 참여했으며 신속하게 속도를 높일 필요가 있습니다.
- 이전에 작업한 적이 없는 큰 코드베이스의 영역을 변경해야 합니다.
- 원래 작성자가 더 이상 유지 관리하지 않는 서비스 또는 라이브러리를 상속했습니다.
이 자습서에서는 터미널에서 작업하고 탐색하는 프로젝트에서 사용하는 언어로 코드를 읽는 것이 편하다고 가정합니다. 코파일럿 CLI에 대한 사전 경험은 필요하지 않습니다.
사전 요구 사항
시작하기 전에 다음이 있는지 확인합니다.
- 구독입니다 GitHub Copilot . GitHub Copilot 계획을(를) 참조하세요.
- 코파일럿 CLI 설치되고 인증되었습니다. GitHub Copilot CLI 시작하기을(를) 참조하세요.
- 탐색하려는 리포지토리의 로컬 복제본입니다. 리포지토리 복제을(를) 참조하세요.
1. 리포지토리에서 세션 시작
터미널을 열고 알아보려는 리포지토리의 루트로 변경합니다. 리포지토리 루트부터 시작 코파일럿 CLI 하면 전체 코드베이스를 컨텍스트로 사용할 수 있습니다.
cd PATH/TO/YOUR/REPOSITORY copilot
cd PATH/TO/YOUR/REPOSITORY
copilot
이제 대화형 코파일럿 CLI 세션에 있습니다. 프롬프트에 입력하는 모든 항목은 리포지토리의 파일을 읽고, 셸 명령(예: git log 또는 grep)을 실행하고, 찾은 내용에 따라 질문에 답변할 수 있는 모델로 전송됩니다.
팁
- 파일 변경은 차단한 상태에서 승인 요청 없이 명령을 실행하도록 코파일럿 CLI을 신뢰한다면,
copilot --deny-tool='write' --allow-all-tools로 시작하세요. 도구 사용 허용 및 거부을(를) 참조하세요. - 매우 큰 코드베이스에서 작업하는 경우 관련 하위 디렉터리에서 시작하여 코파일럿 CLI 더 나은 결과를 얻을 수 있습니다. 이렇게 하면 컨텍스트가 가장 관련성이 큰 파일로 제한됩니다.
2. 문서가 아닌 코드의 기본 답변
대부분의 리포지토리에는 추가 정보 파일, 디자인 노트, 아키텍처 다이어그램 등 코드와 설명서가 혼합되어 있습니다. 설명서는 프로젝트에 대해 알아내는 데 유용하지만 오래된 것일 수 있습니다. 코파일럿 CLI에 코드가 어떻게 동작하는지 질문했는데, 코파일럿 CLI가 오래된 Markdown 파일에서 답변을 가져오면 확신에 찬 틀린 답변을 얻게 됩니다.
질문을 시작하기 전에 코드 자체에 대한 답변을 기반으로 하고 공백을 채우지 않고 불확실성에 플래그를 지정하도록 지시 코파일럿 CLI 합니다. 다음은 그 예입니다.
For the rest of this session, when I ask how something works, base your answer on the code in this repository, not on documentation files such as README.md or files under docs/. If a documentation file conflicts with the code, treat the code as the source of truth. If you can't find a definitive answer in the code, say so - don't guess.
For the rest of this session, when I ask how something works, base your answer on the code in this repository, not on documentation files such as README.md or files under docs/. If a documentation file conflicts with the code, treat the code as the source of truth. If you can't find a definitive answer in the code, say so - don't guess.
이러한 종류의 프리앰블을 사용자 지정 지침 파일에 넣고 세션 간에 다시 사용할 수 있으므로 매번 다시 입력할 필요가 없습니다. 에 대한 사용자 지정 지침 추가 GitHub Copilot 명령 줄 인터페이스 (CLI)을(를) 참조하세요.
3. 코드베이스 개요 가져오기
프로젝트의 정신 지도를 작성하려면 광범위한 질문으로 시작합니다. 목표는 특정 기능을 깊이 파고들기 전에 코드의 전체 구조(진입점이 어디에 있는지, 각 디렉터리에 무엇이 들어 있는지, 그리고 주요 구성 요소들이 어떻게 맞물리는지)를 이해하는 것입니다.
다음과 같은 프롬프트를 시도합니다.
Give me an overview of this codebase. What does the application do, what are the main components, and how do they communicate? Cite the files you used as evidence.
Give me an overview of this codebase. What does the application do, what are the main components, and how do they communicate? Cite the files you used as evidence.
What are the entry points for this application? For each entry point, tell me which file contains the entry point and which directories contain the code it calls into.
What are the entry points for this application? For each entry point, tell me which file contains the entry point and which directories contain the code it calls into.
인용 및 증거를 요청하는 것이 중요합니다.
코파일럿 CLI에서 "이건 src/auth/middleware.ts에서 처리됩니다"라고 알려주면, 해당 파일을 열어 직접 답을 확인할 수 있습니다. 인용이 찾은 내용과 일치하지 않으면 뒤로 밀고 후속 질문을 하는 데 유용한 신호입니다.
4. 특정 기능을 자세히 살펴보기
개요가 있으면 변경해야 하는 영역의 범위를 좁혀야 합니다. 단일 쿼리가 아닌 대화로 처리합니다. 각 답변은 다음 질문에 사용할 수 있는 용어, 파일 이름 및 개념을 표시합니다.
다양한 각도에서 주제에 접근하는 유사한 질문을 하는 것이 좋습니다. 이렇게 하면 전체 그림을 얻을 수 있으며, 알아내려는 내용을 오해하지 않고 중요한 세부 정보를 놓치지 않았다는 확신을 Copilot 얻을 수 있습니다.
예를 들어 특정 API 엔드포인트에 속도 제한을 추가하라는 요청을 받았고 이전에 코드의 이 부분에서 작업한 적이 없다고 가정해 보겠습니다. 다음과 같은 질문으로 시작할 수 있습니다.
Is there any existing rate limiting in this codebase? If so, where is it implemented, and how is it configured?
Is there any existing rate limiting in this codebase? If so, where is it implemented, and how is it configured?
If I wanted to add per-user rate limiting to the /api/v1/upload endpoint, which files would I most likely need to change, and which existing patterns in the codebase should I follow?
If I wanted to add per-user rate limiting to the /api/v1/upload endpoint, which files would I most likely need to change, and which existing patterns in the codebase should I follow?
동일한 CLI 세션 내에서 후속 질문을 하면 기능의 세부 정보를 자세히 살펴보고 알아야 할 사항을 알려주는 구체적인 답변을 제공하는 데 필요한 컨텍스트를 제공할 Copilot 수 있습니다.
5. 동작 및 에지 사례 조사
코드를 읽으면 코드가 수행하는 작업을 알 수 있습니다. 코드가 수행해야 하는 작업이나 비정상적인 상황에서 코드가 어떻게 동작하는지를 알려주지 않는 경우가 많습니다. 이러한 질문에서는 인간 전문가가 가장 큰 가치를 발휘하며, 사람이 없을 때는 코파일럿 CLI가 도움을 줄 수 있습니다.
질문할 수 있는 동작 및 예외 사례 관련 질문의 예는 다음과 같습니다.
What happens if the database connection drops while a request is being processed? Walk me through the error handling, based on the code.
What happens if the database connection drops while a request is being processed? Walk me through the error handling, based on the code.
The `getUser` function takes a `userId` parameter. What validation is performed on it before it reaches the database query? Are there any code paths where an unvalidated value could reach the query?
The `getUser` function takes a `userId` parameter. What validation is performed on it before it reaches the database query? Are there any code paths where an unvalidated value could reach the query?
대답을 받으면 "코드 표시" 또는 "어떤 파일에서 찾았나요?"로 후속 작업을 수행합니다. 아직 인용되지 않은 경우 이렇게 하면 답을 확인하고 검증할 수 있는 곳이 생깁니다.
6. Git 기록을 다른 원본으로 사용
유용한 맥락의 상당수는 현재 코드가 아니라 Git 히스토리에 담겨 있습니다. 예를 들어 함수가 왜 그런 방식으로 작성되었는지, 버그가 마지막으로 언제 수정되었는지, 모듈을 처음 추가한 사람이 누구인지 같은 정보입니다.
코파일럿 CLI는 사용자를 위해 git 명령을 실행하고, 그 출력을 활용해 코드만 읽어서는 쉽게 답할 수 없는 질문에 답할 수 있습니다.
다음과 같은 프롬프트를 시도합니다.
When was the `PaymentProcessor` class introduced, and what was the original commit message? Has it been substantially refactored since then?
When was the `PaymentProcessor` class introduced, and what was the original commit message? Has it been substantially refactored since then?
Look at the last 20 commits that touched files under `src/billing/`. Summarize what kinds of changes have been made recently.
Look at the last 20 commits that touched files under `src/billing/`. Summarize what kinds of changes have been made recently.
Who has made the most commits to `src/auth/`? Use that information to suggest the best person on this team to ask about authentication.
Who has made the most commits to `src/auth/`? Use that information to suggest the best person on this team to ask about authentication.
7. 신뢰하기 전에 확인
코파일럿 CLI 강력한 SME이지만 틀림없는 것은 아닙니다. 코드를 잘못 읽거나, 비슷해 보이는 파일들을 혼동하거나, 때로는 없는 내용을 지어낼 수도 있습니다. 도움이 되지만 오류 가능한 동료의 조언을 처리하는 방식으로 답변을 처리합니다. 시작점으로 유용하지만 중요한 작업을 수행하기 전에 확인할 가치가 있습니다.
몇 가지 습관만 들이면 문제를 피하는 데 도움이 됩니다:
- 인용된 파일을 확인합니다. 특정 파일 또는 줄 번호를 참조하는 경우 코파일럿 CLI 해당 파일을 열고 확인합니다. 인용이 잘못되었다면, 답변의 나머지 부분도 더욱 회의적으로 받아들여야 합니다.
- 직접 실행합니다.
코파일럿 CLI에서 함수가 빈 입력에 대해
null를 반환한다고 알려주면, 빈 입력으로 해당 함수를 호출하는 간단한 테스트나 REPL 호출을 작성해 확인하세요. - 사람과 교차 확인하세요. 답변이 중요한 경우(보안, 데이터 무결성, 프로덕션에서 잘못되면 곤란한 모든 것)에는 코파일럿 CLI의 답변을 출발점으로 삼고, 해당 분야 전문가(SME)나 코드 리뷰를 통해 확인하세요.
결론
이 자습서에서는 코파일럿 CLI를 개인 SME로 활용하여 다음과 같은 작업을 수행했습니다:
- 실제 파일에 고정된 익숙하지 않은 코드베이스의 개요를 확인합니다.
- 변경할 파일과 따라야 할 패턴을 알 수 있도록 특정 기능을 자세히 알아냅니다.
- 동작, 에지 사례 및 Git 기록을 조사합니다.
- 대답을 확인하여 중요한 경우 답변을 사용할 수 있습니다.
이러한 방식으로 사용되며, 코파일럿 CLI 인간 중소기업을 대체하지는 않지만, 작업하는 동안 발생하는 일상적인 질문에 대한 의존도가 낮아집니다. 팀 동료들은 정말로 자신의 경험이 필요한 질문에 시간을 집중할 수 있고, 당신은 그들이 자리를 비운 동안에도 계속 일을 진행할 수 있습니다.
다음 단계
- 가장 유용한 프롬프트 프리앰블을 사용자 지정 지침으로 저장하여 세션 및 프로젝트에서 다시 사용할 수 있습니다. 에 대한 사용자 지정 지침 추가 GitHub Copilot 명령 줄 인터페이스 (CLI)을(를) 참조하세요.
- 변경하려는 코드 영역을 이해했다면, 변경하는 데 코파일럿 CLI를 활용하세요. GitHub Copilot를 사용하여 코드 리팩터링 및 GitHub Copilot을 사용하여 테스트 작성을(를) 참조하세요.
- 세션 중에 실행할 수 있는 도구를 코파일럿 CLI 제어하는 방법을 알아봅니다. 도구 사용 허용 및 거부을(를) 참조하세요.