GitHub이 10월 15일 Agentic Autofix를 정식 제공(GA)으로 전환했습니다.
한 줄로 요약하면 이렇습니다.
경고를 Copilot에 배정
→ 코드베이스 조사
→ 수정안 생성
→ CodeQL 재실행으로 검증
→ 필요하면 반복
→ Draft PR 생성
7월 10일 퍼블릭 프리뷰로 등장한 지 약 3개월 만입니다. 그동안의 변천도 빨랐습니다. 7월 16일에 서드파티 스캐너 경고까지 대상이 확대됐고, 9월 9일에는 코드 품질(Code Quality) 경고도 최대 25개까지 일괄로 맡길 수 있게 됐고, 9월 25일에는 Copilot Memory를 활용해 리포지토리 고유의 보안 패턴을 기억하게 됐습니다.
이번 글에서는 GA로 바뀌면서 무엇이 달라졌는지, 실제로 어떻게 동작하는지, 그리고 이 기능을 "믿어도 되는 범위"가 어디까지인지까지 차례대로 살펴보겠습니다.
프리뷰와 GA 사이에서 달라진 것
동작 자체는 프리뷰 때와 같지만, 켜는 방식과 조건이 정리됐습니다.
개별 경고 화면
기존: Generate Fix (무료 정적 수정 제안)
이제: Assign to Copilot (에이전트가 조사·수정·검증)
지원 범위
GitHub Enterprise Cloud (데이터 레지던시 포함)
GitHub Code Security 또는 GitHub Advanced Security 고객
켜는 순서
엔터프라이즈 관리자가 'Agentic autofix' 정책 활성화
→ 조직·리포지토리 관리자가 Code Security 설정에서 켬
→ Copilot 결제 수단 필요
프리뷰에서 정식 제공으로 넘어오면서 "리포지토리에서 직접 켜면 되는 기능"에서 "엔터프라이즈 정책 게이트를 통과해야 하는 기능"이 됐다는 점이 실무에서 가장 크게 체감되는 차이입니다. 보안 기능답게 관리자가 통제 지점을 쥐는 구조입니다.
어떻게 동작하나: 개발자가 하던 일을 순서대로
경고 하나를 Copilot에 배정하면 다음이 일어납니다.
① 관련 파일 조사 — 경고가 난 파일 밖까지 코드베이스를 읽음
② 수정안 생성 — 리포지토리 커스텀 지침(custom instructions)도 따름
③ 검증 — CodeQL을 다시 실행해 경고가 닫히는지 확인
④ 반복 — 검증이 실패하면 수정안을 고쳐서 재시도
⑤ Draft PR 생성 — 수정 요약, 경고가 닫히는 이유, 검증 절차 포함
만들어진 PR은 바로 머지하는 용도가 아니라 검토 대기 상태입니다. PR에 코멘트를 달거나 리포지토리의 Agents 탭에서 세션에 이어서 지시를 내릴 수 있습니다. 프리뷰 안내 기준으로 수정 생성에는 보통 2~4분이 걸립니다.
배정 방법은 세 가지입니다.
① 개별 경고 화면에서 Assign to Copilot
② 경고 목록 또는 보안 캠페인에서 최대 25개 선택 → PR 하나로 일괄 수정
③ REST API: assignees에 ["copilot-swe-agent[bot]"] 지정
여기서 눈여겨볼 제약이 하나 있습니다. 기본 브랜치(default branch)에서 발견된 경고만 배정할 수 있습니다. PR이나 다른 브랜치에서만 감지된 경고는 대상이 아닙니다. "브랜치에서 발견 → 머지 전에 수정"이 아니라 "기본 브랜치에 쌓인 백로그를 태운다"는 용도라는 뜻입니다.
예제: 경로 조작(path traversal) 경고 하나를 맡기면
간단한 예로 감을 잡아보겠습니다. 아래 같은 코드는 CodeQL이 "신뢰할 수 없는 입력이 경로에 사용됨" 경고를 냅니다.
# 경고 대상 코드
from flask import request
@app.get("/files")
def read_file():
name = request.args.get("name", "")
with open(f"/data/reports/{name}") as f: # 경로 조작 가능성
return f.read()
Copilot이 만들게 될 수정은 대략 이런 방향입니다.
# 수정 방향의 예 (실제 제안은 상황에 따라 다를 수 있음)
from pathlib import Path
from flask import request, abort
BASE = Path("/data/reports").resolve()
@app.get("/files")
def read_file():
name = request.args.get("name", "")
target = (BASE / name).resolve()
if target != BASE and BASE not in target.parents:
abort(404)
return target.read_text()
중요한 건 코드 자체보다 그다음입니다. PR에는 바꾼 코드뿐 아니라 경고가 닫히는 이유와 Copilot이 수행한 검증 절차가 함께 들어갑니다. 검증이 실패하면 스스로 다시 시도하고, 그래도 안 되면 그 사실이 PR에 남습니다.
검증의 범위를 정확히 알아야 합니다
여기가 이 글에서 가장 중요한 부분입니다.
Copilot이 하는 검증은 주장이 아니라 실행입니다. CodeQL을 실제로 다시 돌려서 같은 경고가 나오지 않는지 확인합니다. 모델이 "확인했습니다"라고 말하는 것과는 차원이 다릅니다. 그런데 GitHub 문서는 그 범위도 분명히 밝혀둡니다.
검증되는 것
기본 code-scanning 쿼리 스위트 기준의 경고
검증이 보장되지 않는 것
커스텀 쿼리로 만든 경고
security-extended 쿼리 스위트 경고
서드파티 도구가 올린 경고의 수정 품질
→ 동작 자체가 best-effort(최선 노력) 기준
즉 "CodeQL이 통과했다"는 그 도구의 눈으로 다시 봤을 때 안 걸린다는 뜻이지, "취약점이 사라졌음이 증명됐다"는 뜻이 아닙니다. 정적 분석은 거짓 음성도 내고, 비즈니스 로직의 맥락은 모릅니다.
Grok 4.7의 self-verification 글에서 다뤘던 것과 같은 질문이 여기서도 반복됩니다. 다만 여기서는 "같은 모델이 다시 생각하는" 자기 검증이 아니라 외부 도구를 재실행하는 검증이라는 점이 낫습니다. 그래도 그 도구가 못 보는 것은 못 봅니다. 사람 리뷰는 여전히 파이프라인의 일부입니다.
과금: AI Credits와 Actions 분을 함께 씁니다
GA 전환과 함께 과금 경로도 명확해졌습니다.
부과 대상: AI Credits (Code Security 예산에서 차감) + GitHub Actions 분
표기 위치: 엔터프라이즈 빌링·라이선스의 AI usage → "Advanced Security" 제품
관리: SKU 단위 예산 설정 가능
전제: Copilot 결제 수단 정의 필요
에이전트 세션은 토큰과 실행 시간을 함께 소비하므로, 25개 일괄 수정처럼 큰 작업은 그만큼 AI Credits와 Actions 분이 들어갑니다. 무료 정적 제안(Generate Fix)과는 비용 구조가 다르다는 점을 팀 예산에 먼저 반영해 두는 편이 좋습니다.
CodeBridge Mini Lab: 오늘 10분 점검
보안 백로그가 있는 리포지토리라면 다음을 확인해 보세요.
[ ] CodeQL(code scanning)이 기본 브랜치에서 돌고 있는가
[ ] CI 테스트가 PR에서 실행되고 있는가 (수정 PR 검증의 두 번째 안전망)
[ ] 엔터프라이즈 'Agentic autofix' 정책과 리포지토리 설정 상태를 아는가
[ ] AI가 만든 보안 수정 PR을 누가 어떤 기준으로 리뷰하는지 정했는가
[ ] Code Security AI Credits 예산 상한을 설정했는가
[ ] 커스텀/서드파티 쿼리 경고는 별도 검토 절차가 있는가
특히 네 번째 항목이 핵심입니다. 이 기능은 리뷰를 대체하는 게 아니라, 리뷰할 수 있는 형태의 PR을 만들어 주는 기능입니다.
결론: 보안 백로그의 병목은 수정이 아니라 조사였다
한 문장으로 정리하면 이렇습니다.
"고치는 시간"보다 "조사하는 시간"이 병목이던 백로그가,
검증 가능한 PR 큐로 바뀐다.
의미 있는 변화는 속도가 아니라 증거의 형태입니다. "AI가 고쳤다"가 아니라 "CodeQL을 다시 돌려 이 결과가 나왔고, 이 PR이 여기 있다"가 남습니다. 그 증거를 읽고 판단하는 사람의 역할은 없어지지 않습니다. 오히려 PR 리뷰가 보안 팀의 새로운 전선이 됩니다.
이번 주에 할 일 하나만 고르라면, 기본 브랜치에 쌓인 오래된 경고 하나를 골라 배정해 보세요. 그 PR 하나가 여러분 팀에 이 도구가 맞는지 알려줄 가장 싼 실험입니다.
함께 읽으면 좋은 글
- Anthropic 키 실수 커밋, 이제 푸시 전에 막힌다
- GitHub의 문맥 기반 비밀 탐지: 토큰 모양이 없어도 막는 법
- CodeQL 2.27.2로 PR에서 잡기: C++ 정규식·Rust 비동기·JS 워크플로 분석
참고 자료
- GitHub Changelog: Agentic autofix for code scanning alerts general availability (Oct 15, 2026)
- GitHub Docs: About autofix for code scanning
- GitHub Community Discussion #209845: Agentic autofix GA
이 주제를 직접 따라가며 배우고 싶다면
에이전트에게 코드를 맡기고, 그 결과를 PR로 검증하는 흐름은 Copilot을 자동완성 이상으로 쓰는 연습에서 바로 이어집니다. Agent·Plan 모드로 실제 프로젝트를 구현하고 테스트하는 과정부터 손에 익혀보세요.