변경된 파일이 1개뿐이어도 보안 검토에는 여러 단계가 필요합니다. 입력값 처리 한 줄, 파일 경로 조합 한 곳, 외부 주소를 받는 설정 하나가 취약점의 시작점이 될 수 있습니다. 그래서 커밋 직전 개발자는 “GitHub Copilot 앱 /security-review 사용법”을 찾지만, 명령을 실행하는 것만으로 검토가 끝나지는 않습니다. 이 글에서는 실제 작업 흐름에 맞춰 무엇을 준비하고 어떻게 다시 확인해야 하는지 살펴봅니다.
보안 검토의 역할
GitHub Copilot 앱의 /security-review는 현재 작업 흐름의 코드 변경 사항을 대상으로 필요할 때 실행하는 인공 지능 기반 보안 검토 기능입니다. 2026년 7월 14일 공개 미리 보기로 앱에 추가됐으며, 높은 신뢰도로 판단한 취약점을 심각도와 신뢰도 점수와 함께 보여줍니다. 수정 제안은 같은 세션에서 적용한 뒤 다시 확인할 수 있습니다. (github.blog)
주요 대상은 입력값 주입, 사이트 간 스크립팅, 안전하지 않은 데이터 처리, 경로 조작, 약한 암호화와 같은 문제입니다. 다만 전체 저장소를 대상으로 하는 정적 분석이나 비밀값 탐지의 완전한 대체품은 아닙니다. 현재 변경 사항을 빠르게 훑는 첫 번째 방어선에 가깝습니다.
실행 전 준비
실행 전에 다음 조건을 확인해야 합니다.
- GitHub Copilot 앱에서 프로젝트를 엽니다.
- 변경 사항이 있는 활성 에이전트 세션을 준비합니다.
- 검토할 파일이 현재 작업 공간과 변경 목록에 포함됐는지 확인합니다.
- Copilot 계정과 조직 정책이 앱 사용을 허용하는지 확인합니다.
- 공개 미리 보기 기능이라는 점을 알고 결과를 수동으로 검증합니다.
활성 세션이 없거나 변경 사항이 없는 빠른 대화 화면에서는 기대한 결과가 나오지 않을 수 있습니다. 공식 절차는 앱 세션의 보안 검토 안내에서 확인할 수 있습니다. 모든 Copilot 요금제에서 앱을 사용할 수 있지만, 업무용 계정은 관리자가 관련 정책을 켜야 할 수 있습니다. (docs.github.com)
실행 흐름
GitHub Copilot 앱 /security-review 사용법은 다음 순서로 익히면 됩니다.
프로젝트와 변경 범위
프로젝트를 열고 현재 브랜치의 변경 목록을 확인합니다. 검토 전에 임시 파일, 생성된 파일, 테스트용 비밀값을 정리합니다. 변경 범위가 너무 크면 결과의 우선순위가 흐려질 수 있으므로 기능 단위로 나누는 편이 좋습니다.
활성 에이전트 세션
사이드바에서 작업 중인 에이전트 세션을 엽니다. 세션이 별도 작업 공간이나 작업 트리를 사용한다면, 실제 수정이 그 공간에 반영됐는지 확인합니다. 앱은 여러 세션을 동시에 운영할 수 있으므로 다른 세션의 변경을 잘못 검토하지 않도록 주의해야 합니다. (docs.github.com)
명령 실행
입력창에 /security-review를 입력하고 실행합니다. 성공하면 현재 변경 사항을 기준으로 우선순위가 있는 발견 목록과 심각도, 신뢰도, 수정 제안이 표시됩니다. 결과가 비어 있다면 “안전하다”는 확정이 아니라 검토 대상이나 문맥이 부족했을 가능성도 살펴봐야 합니다.
검토 대상 제한
처음부터 저장소 전체를 설명하라고 요청하기보다 이번 변경이 인증, 파일 업로드, 외부 요청, 권한 확인 중 어디에 해당하는지 함께 적습니다. 예를 들어 “이번 변경에서 사용자 입력이 데이터베이스 질의로 이어지는 경로를 중점 검토해 달라”고 요청하면 사람이 확인할 지점이 선명해집니다.
결과 저장
발견 내용을 파일 경로, 줄 위치, 공격 조건, 영향 범위와 함께 기록합니다. Pull Request를 만들 예정이라면 수정 전 결과와 수정 후 결과를 나누어 남겨야 팀원이 변경 이유를 추적하기 쉽습니다.
도구별 담당 범위
Copilot 본지 코드 취약점 검사는 빠른 변경 검토에 적합하지만, 다른 도구와 역할이 겹치지 않습니다.
| 도구 | 주된 검사 대상 | 실행 시점 | 적합한 용도 |
|---|---|---|---|
/security-review |
현재 변경 코드의 높은 신뢰도 보안 문제 | 필요할 때 즉시 | 커밋 전 빠른 점검 |
| CodeQL | 코드 흐름과 취약한 호출 경로 | 코드 검사 작업 | 저장소 단위의 반복 분석 |
| Dependabot | 오래됐거나 취약한 외부 패키지 | 의존성 변경 시 | 공급망 위험 관리 |
| secret scanning | 노출된 비밀값과 인증 정보 | 파일 및 저장소 검사 | 토큰과 키 유출 대응 |
따라서 “Copilot 안전 검토와 CodeQL 차이”는 어느 쪽이 더 좋은가의 문제가 아닙니다. /security-review는 작업 중인 변경을 빠르게 살피고, CodeQL은 규칙과 데이터 흐름을 이용해 반복 가능한 검사를 수행합니다. Dependabot은 패키지 문제를, secret scanning은 비밀값 노출을 담당합니다. GitHub의 보안 화면도 도구별 경고를 따로 구분합니다. (docs.github.com)
주의: 인공 지능 검토에서 문제가 발견되지 않았더라도 인증 우회, 권한 상승, 암호화 설계와 같은 항목은 보안 담당자의 수동 검토와 자동 검사를 함께 진행해야 합니다.
심각도와 신뢰도 읽기
심각도는 문제가 악용됐을 때의 영향과 관련됩니다. 신뢰도는 제시된 코드 경로가 실제 취약점일 가능성을 나타내는 판단 기준입니다. 둘을 같은 의미로 보면 안 됩니다.
- 높은 심각도와 높은 신뢰도는 먼저 재현 조건을 확인하고 즉시 수정합니다.
- 높은 심각도와 낮은 신뢰도는 실행 경로와 권한 조건을 사람이 검증합니다.
- 낮은 심각도라도 로그인, 결제, 개인정보 처리와 연결되면 우선순위를 높입니다.
- 수정 제안은 그대로 적용하지 말고 입력 검증 위치와 오류 처리 방식까지 확인합니다.
GitHub Copilot 앱 안전 검토에서 가장 흔한 실수는 위험 표시만 보고 코드를 바꾸는 것입니다. 실제 공격자가 제어할 수 있는 값인지, 보호된 경로를 우회할 수 있는지, 운영 환경에서 해당 함수가 호출되는지 확인해야 합니다.
수정과 재검증
발견 후에는 다음 순서로 닫힌 검토 흐름을 만듭니다.
- 취약점이 시작되는 입력값과 최종 위험 지점을 연결합니다.
- 공격자가 제어할 수 있는 조건을 테스트 코드로 재현합니다.
- 수정 제안의 범위를 확인하고 최소 변경으로 패치합니다.
- 단위 테스트와 통합 테스트를 실행합니다.
- 권한이 없는 사용자와 정상 사용자의 결과가 모두 올바른지 확인합니다.
- 같은 활성 세션에서
/security-review를 다시 실행합니다. - 남은 경고가 새 코드에서 생긴 것인지 기존 문제인지 구분합니다.
- Pull Request에 원인, 수정 내용, 재검증 결과를 기록합니다.
이 과정이 필요한 이유는 수정이 다른 경로를 열 수 있기 때문입니다. 예를 들어 입력값을 막기 위해 문자열을 강제로 바꾸면 오류 처리나 인코딩 문제가 새로 생길 수 있습니다.
자주 묻는 문제
“제출 코드 전 어떻게 보안 취약점을 확인하나요?”
먼저 변경 파일을 분리하고 테스트용 비밀값을 제거한 뒤 활성 에이전트 세션에서 /security-review를 실행합니다. 이후 테스트, 수동 검토, 저장소 보안 검사까지 이어가야 합니다. 커밋 전 검토는 빠른 필터이지 최종 승인 절차가 아닙니다.
“/security-review 오탐은 어떻게 처리하나요?”
오탐으로 판단하기 전에 호출 경로와 권한 조건을 확인합니다. 실제 공격이 불가능하다는 근거를 파일 위치와 테스트 결과로 남기고, 수정하지 않을 경우 Pull Request에 이유를 기록합니다. 같은 문장을 반복해 명령을 실행하기보다 “어떤 입력이 외부에서 제어되는가”를 구체적으로 질문하는 편이 낫습니다.
“결과가 없으면 취약점이 없는 것인가요?”
아닙니다. 변경 범위가 비어 있거나 세션이 다른 작업 공간을 보고 있을 수 있습니다. 문맥이 부족한 호출, 지원되지 않는 언어와 구조, 복잡한 권한 흐름도 놓칠 수 있습니다. 그래서 CodeQL, Dependabot, secret scanning을 별도로 유지해야 합니다. (docs.github.com)
Kvmzen 테스트 기록
Kvmzen의 테스트 저장소에서는 되돌릴 수 있는 테스트 브랜치에 입력값 검증이 빠진 예제 코드를 넣고 다음 기록 양식으로 검토합니다.
- 변경한 파일과 함수
- 공격자가 제어하는 입력
- 실행한
/security-review시각 - 표시된 심각도와 신뢰도
- 사람이 확인한 실제 호출 경로
- 적용한 수정 내용
- 수정 전후 테스트 결과
- 재검토에서 사라진 경고와 남은 경고
이 사례에서는 특정 결과를 미리 정하지 않습니다. 실제 출력이 달라질 수 있기 때문입니다. 핵심은 결과 숫자를 자랑하는 것이 아니라, 발견에서 수동 확인과 재검증까지 이어지는 기록을 남기는 데 있습니다.
로컬 환경과 맥 작업 환경
기존 로컬 노트북에서만 검토하면 운영체제 차이, 개발 도구 버전 차이, 절전으로 인한 세션 중단이 생길 수 있습니다. 팀 공용 서버를 쓰면 권한 분리와 작업 공간 충돌을 관리해야 합니다. 클라우드 개발 환경은 편하지만 네트워크 지연, 접속 정책, 지속 비용을 함께 계산해야 합니다.
특히 macOS 프로젝트를 검토하는 팀이라면 로컬 장비를 계속 유지하는 방식보다 맥 미니 렌탈 환경을 별도 테스트 공간으로 쓰는 편이 관리하기 쉽습니다. 개인 장비는 전원과 저장 공간을 직접 관리해야 하고, 공용 서버는 세션 격리와 권한 설정이 번거롭습니다. Kvmzen의 클라우드 맥을 사용하면 변경 전용 환경을 분리하고, 필요할 때 같은 작업 조건을 다시 열어 검토할 수 있습니다. 서비스 이용 전에는 맥 지원 범위와 현재 제공 조건을 확인하는 것이 좋습니다.
결국 /security-review는 개발자의 판단을 없애는 기능이 아니라, 놓치기 쉬운 변경을 일찍 드러내는 보조 장치입니다. 되돌릴 수 있는 브랜치에서 한 가지 통제된 문제를 넣고 실행한 뒤, 수동 확인과 테스트를 거쳐 결과를 재검증해 보시기 바랍니다. 지속적인 macOS 테스트 환경이 필요하다면 Kvmzen의 맥 렌탈을 검토하면 장비 관리 부담을 줄이면서 같은 보안 검토 흐름을 반복할 수 있습니다.
