GitHub

88 개의 포스트

github.blog/engineering

태그로 필터

github4분 읽기큐레이션 요약

GitHub Copilot CLI, 세컨드 오피니언을 위해 여러 모델 제품군 결합

GitHub Copilot CLI가 주 모델과 다른 AI 계열의 모델을 활용해 작업을 검토하는 실험 기능 **Rubber Duck**을 공개했습니다. Rubber Duck은 계획 수립, 복잡한 구현, 테스트 작성 후처럼 오류를 조기에 발견하기 좋은 시점에 독립적인 피드백을 제공합니다. 평가 결과 Claude Sonnet과 GPT-5.4 기반 Rubber Duck 조합은 Sonnet과 Opus 단독 실행 성능 차이의 74.7%를 줄였습니다. ## 자신감 있는 실수가 누적되는 문제 - 코딩 에이전트는 일반적으로 다음 순서로 작업합니다. - 요구사항 분석 - 계획 수립 - 구현 - 테스트 - 문제 발생 시 반복 수정 - 초기 계획의 잘못된 가정이나 비효율은 이후 구현의 기반이 되어 오류를 연쇄적으로 키울 수 있습니다. - 에이전트가 자신의 결과를 스스로 검토하는 방식도 도움이 되지만, 동일한 모델은 같은 학습 데이터와 편향, 맹점을 공유합니다. - 따라서 자기 검토만으로는 발견하기 어려운 문제를 찾기 위해 다른 모델 계열의 관점이 필요합니다. ## 다른 모델 계열을 활용하는 Rubber Duck - Rubber Duck은 주 에이전트의 계획과 작업을 검토하는 전문 리뷰 에이전트입니다. - 현재 Claude 모델을 주 오케스트레이터로 선택하면 Rubber Duck은 GPT-5.4를 사용합니다. - 검토 결과는 다음과 같은 고가치 우려 사항을 짧고 집중적으로 제시합니다. - 주 에이전트가 놓친 세부 사항 - 다시 검토해야 할 가정 - 잠재적인 엣지 케이스 - 현재 Claude Opus, Sonnet, Haiku를 주 모델로 사용할 때 활성화할 수 있으며, 향후 다른 모델 조합도 실험할 예정입니다. ## 복잡한 작업에서의 효과 - SWE-Bench Pro의 실제 오픈소스 프로젝트 기반 대형 코딩 문제로 평가했습니다. - Claude Sonnet 4.6과 GPT-5.4 Rubber Duck 조합은 Claude Opus 4.6 단독 실행과 유사한 해결률을 기록했습니다. - Sonnet과 Opus의 성능 차이 중 74.7%를 줄였습니다. - 특히 다음 조건의 작업에서 효과가 컸습니다. - 3개 이상의 파일을 수정하는 작업 - 70단계 이상이 필요한 장기 작업 - 복잡한 리팩터링과 아키텍처 변경 - 성능 개선 폭은 일반적으로 Sonnet 기준 3.8%, 가장 어려운 문제에서는 4.8%였습니다. ## Rubber Duck이 발견한 오류 사례 - **스케줄러의 구조적 오류** - 스케줄러가 시작 직후 종료되어 작업을 하나도 실행하지 못하는 문제를 발견했습니다. - 수정하더라도 내부 작업 중 하나가 무한 루프라는 추가 문제도 확인했습니다. - **반복문으로 인한 데이터 손실** - 반복문이 매번 같은 `dict` 키를 덮어쓰는 버그를 찾았습니다. - 그 결과 Solr 검색 요청에서 네 개의 facet 범주 중 세 개가 조용히 사라졌습니다. - **파일 간 데이터 흐름 단절** - 여러 파일이 Redis 키를 읽지만 새 코드가 해당 키를 더 이상 기록하지 않는 문제를 발견했습니다. - 배포 후 이메일 확인 UI와 정리 작업이 조용히 고장 날 수 있는 상황이었습니다. ## 검토가 실행되는 시점 Rubber Duck은 필요성이 높은 체크포인트에서 자동으로 호출되거나 사용자가 직접 요청할 수 있습니다. - **계획 작성 후** - 잘못된 설계 결정을 구현 전에 발견해 후속 오류의 누적을 막습니다. - **복잡한 구현 후** - 여러 파일에 걸친 코드의 엣지 케이스와 구조적 문제를 점검합니다. - **테스트 작성 후, 실행 전** - 테스트 커버리지의 공백이나 잘못된 단정을 찾아냅니다. - **에이전트가 작업 루프에 빠졌을 때** - 진전이 없는 상황에서 새로운 관점을 제공해 막힌 지점을 해결합니다. - **사용자 요청 시** - 사용자가 언제든 작업을 비판적으로 검토하도록 요청할 수 있습니다. - Copilot은 피드백을 반영한 뒤 무엇이 어떻게 바뀌었는지 보여줍니다. ## 사용 방법과 적합한 활용 사례 - GitHub Copilot CLI를 설치한 뒤 `/experimental` 명령으로 실험 기능을 활성화합니다. - 모델 선택기에서 Claude 모델을 선택하고 GPT-5.4 사용 권한이 있어야 합니다. - Rubber Duck은 자동으로 호출되거나 “작업을 검토해 달라”고 요청해 수동 실행할 수 있습니다. - 특히 다음 작업에 적합합니다. - 복잡한 리팩터링 - 아키텍처 변경 - 실패 비용이 큰 고위험 작업 - 테스트 커버리지 검증 - 구현 전 계획에 대한 독립적인 의견 확인 Rubber Duck은 코딩 에이전트를 단순히 더 오래 실행하는 대신, 서로 다른 모델 계열의 관점으로 중요한 의사결정을 교차 검증하려는 접근입니다. 복잡하거나 영향 범위가 큰 작업에서는 계획 단계와 테스트 실행 전에 검토를 요청하는 것이 실용적인 활용법입니다.

원문 읽기(새 탭에서 열림)
github4분 읽기큐레이션 요약

Diff 라인 성능 개선을 위한 험난한 여정

GitHub는 대규모 풀 리퀘스트에서도 **Files changed** 탭의 반응성과 안정성을 유지하기 위해 단일 해결책이 아닌 여러 최적화 전략을 적용했다. 특히 diff 라인마다 생성되는 DOM 요소, React 컴포넌트, 이벤트 핸들러를 줄여 메모리 사용량과 입력 지연을 낮추고, 가장 큰 변경 사항에는 가상화를 적용해 렌더링 범위를 제한하는 방향을 택했다. 핵심 교훈은 작은 구조적 최적화도 수천 개의 diff 라인에 누적되면 큰 성능 개선으로 이어진다는 것이다. ## 대규모 풀 리퀘스트에서 성능이 어려운 이유 - GitHub의 풀 리퀘스트는 한 줄 수정부터 수천 개 파일과 수백만 줄을 포함하는 변경까지 규모 편차가 매우 크다. - 일반적인 풀 리퀘스트는 빠르게 동작했지만, 대규모 변경에서는 다음 문제가 발생했다. - JavaScript 힙이 극단적인 경우 1GB를 초과 - DOM 노드 수가 40만 개 이상으로 증가 - 페이지 상호작용이 매우 느려지거나 사실상 사용할 수 없게 됨 - 입력 후 다음 화면이 표시되기까지의 시간인 INP가 허용 수준을 초과 - 모든 기능과 브라우저의 기본 동작을 유지하면서 최악의 경우까지 해결하는 단일 기법은 현실적인 한계가 있었다. ## 풀 리퀘스트 규모별 최적화 전략 GitHub는 변경 규모와 복잡도에 따라 서로 다른 전략을 조합했다. - **diff 라인 컴포넌트 최적화** - 대부분의 풀 리퀘스트에서 기본 diff 화면을 빠르게 유지 - 중간 및 대규모 리뷰에서도 브라우저의 기본 `find-in-page` 같은 동작을 보존 - **가상화를 통한 점진적 성능 저하** - 가장 큰 풀 리퀘스트에서는 한 번에 렌더링하는 콘텐츠 양을 제한 - 모든 내용을 동시에 DOM에 올리지 않아 응답성과 안정성을 우선 - **기반 컴포넌트와 렌더링 개선** - 특정 모드에 관계없이 모든 크기의 풀 리퀘스트에 누적 효과를 제공 - 렌더링 구조 자체를 단순화해 메모리와 상호작용 비용을 줄임 ## 초기 목표와 측정 지표 최적화 작업의 목표는 단순히 평균 속도를 높이는 데 그치지 않았다. - JavaScript 힙 크기와 메모리 사용량 감소 - DOM 노드 수 감소 - 평균 INP 개선 - 특히 최악의 사용자 경험을 나타내는 p95와 p99 INP 대폭 개선 - 이를 위해 상태, HTML 요소, JavaScript 코드, React 컴포넌트 수를 전반적으로 줄이는 단순화 전략을 채택 ## v1의 문제: diff 라인당 높은 렌더링 비용 React로 처음 diff 화면을 구현한 v1은 작은 재사용 컴포넌트를 많이 조합하는 구조였다. - unified 뷰의 diff 한 줄에는 최소 약 10개의 DOM 요소가 필요했다. - split 뷰에서는 한 줄당 약 15개의 DOM 요소가 필요했다. - 구문 강조를 적용하면 추가 `<span>` 요소가 더해져 DOM 수가 증가했다. - React 계층에서도 다음과 같은 컴포넌트가 생성됐다. - unified 뷰: 한 줄당 최소 8개 컴포넌트 - split 뷰: 한 줄당 최소 13개 컴포넌트 - 댓글, hover, focus 등 추가 상태가 활성화되면 컴포넌트 수는 더 늘어났다. - 작은 컴포넌트마다 React 이벤트 핸들러를 5~6개씩 연결하는 경우가 많았다. - 결과적으로 diff 한 줄에 20개 이상의 이벤트 핸들러가 붙을 수 있었고, 이를 수천 줄에 적용하면서 비용이 급격히 커졌다. v1의 한 줄당 최소 구조는 다음과 같았다. - DOM 요소 10~15개 - React 컴포넌트 8~13개 - React 이벤트 핸들러 20개 이상 - 다수의 작은 재사용 컴포넌트 이 구조는 일반적인 규모에서는 문제가 없었지만, 데이터 크기가 사실상 제한되지 않는 대규모 풀 리퀘스트에서는 변경 줄 수가 늘수록 INP와 JavaScript 힙 사용량이 함께 악화됐다. ## v2의 방향: 작은 변경을 대규모로 누적 v2에서는 눈에 띄지 않는 HTML 구조까지 점검해 diff 라인당 비용을 줄였다. - 줄 번호 셀에 불필요하게 포함되어 있던 `<code>` 태그를 제거했다. - diff 한 줄에서 DOM 노드 2개를 줄이는 것은 개별적으로는 작은 개선처럼 보인다. - 그러나 10,000줄을 렌더링하면 DOM 노드 20,000개를 제거하는 효과가 발생한다. - 이처럼 줄 단위의 사소한 최적화도 대규모 데이터에서는 메모리 사용량과 렌더링 비용에 크게 누적된다. - 성능 개선에서는 큰 기능 변경만큼 불필요한 태그, 컴포넌트, 이벤트 핸들러를 하나씩 제거하는 작업도 중요하다. ## 실용적인 결론 대규모 목록이나 코드 diff를 렌더링할 때는 처음부터 최악의 데이터 규모를 고려해야 한다. 컴포넌트를 잘게 나누는 구조가 유지보수에는 유리할 수 있지만, 각 요소에 상태와 이벤트 핸들러를 추가하면 수천 개 항목에서 큰 비용이 된다. 따라서 DOM 구조를 단순화하고, 항목별 렌더링 비용을 측정하며, 극단적인 규모에는 가상화를 적용하는 조합이 효과적이다.

원문 읽기(새 탭에서 열림)
github4분 읽기큐레이션 요약

GitHub 전반의 오픈 소스 공급망 보안 강화

공격자들은 GitHub Actions 워크플로를 침해해 API 키 같은 비밀을 탈취한 뒤, 악성 패키지를 배포하고 더 많은 프로젝트로 공격을 확산시키고 있다. 이에 대응하려면 Actions 워크플로를 CodeQL로 점검하고, 서드파티 액션을 커밋 SHA로 고정하며, 장기 비밀 대신 OIDC 기반 인증과 trusted publishing을 사용해야 한다. GitHub는 npm 악성코드 탐지와 Actions·npm 보안 로드맵을 강화하고 있지만, 오픈소스 생태계 전반의 지속적인 협력이 필요하다고 강조한다. ## GitHub Actions 워크플로가 공격의 출발점 - 최근 오픈소스 공급망 공격은 GitHub Actions 워크플로의 취약점을 찾는 방식으로 시작되는 경우가 많다. - 공격자는 워크플로에서 API 키, 토큰, 배포 자격 증명 등의 비밀을 탈취한다. - 탈취한 자격 증명으로: - 공격자가 통제하는 환경에서 악성 패키지를 배포하고 - 해당 패키지를 이용해 다른 프로젝트와 계정으로 공격을 확산한다. ## 지금 적용할 수 있는 Actions 보안 조치 - 공개 저장소에서 무료로 사용할 수 있는 **CodeQL의 GitHub Actions 분석 기능**을 활성화한다. - 워크플로 구현상의 보안 취약점과 보안 모범 사례 위반을 점검할 수 있다. - `pull_request_target`을 사용하지 않는다. - 외부 기여자의 코드가 높은 권한의 워크플로 컨텍스트에서 실행될 위험이 있다. - 서드파티 GitHub Actions를 전체 길이의 커밋 SHA로 고정한다. - 태그나 브랜치는 이후 다른 코드로 변경될 수 있지만, SHA 고정은 특정 코드 버전을 보장한다. - 이 변경은 저장소 관리자나 Dependabot이 수행해야 하며, 외부 Pull Request가 액션 버전 고정을 바꾸려 하면 주의해야 한다. - 사용자 입력을 셸 명령이나 스크립트에 직접 삽입하지 않는다. - 이 방식은 스크립트 인젝션으로 이어질 수 있다. - 침해된 의존성은 GitHub Advisory Database에서 확인한다. - Dependabot을 사용해 악성 또는 취약한 의존성에 대한 알림을 받는다. ## 비밀 대신 OIDC와 trusted publishing 사용 - 워크플로에 장기 보관되는 비밀을 넣는 대신, **OpenID Connect(OIDC) 토큰**을 사용할 수 있다. - OIDC 토큰에는 실행 중인 워크로드의 신원이 포함되므로, 클라우드 제공업체·패키지 저장소·호스팅 서비스가 해당 워크플로를 검증하고 권한을 부여할 수 있다. - GitHub와 OpenSSF는 이를 패키지 저장소의 **trusted publishing**으로 확산하고 있다. - 현재 npm, PyPI, NuGet, RubyGems, Crates 등 여러 저장소에서 지원된다. - trusted publishing의 장점: - 빌드 파이프라인에서 장기 비밀을 제거한다. - 패키지가 어떤 신뢰된 워크플로에서 배포됐는지 확인할 수 있다. - 패키지가 갑자기 trusted publishing을 중단하면, 탈취된 자격 증명을 이용한 공격 가능성을 조사하는 신호가 된다. ## npm의 악성 패키지 탐지 - npm에서는 매일 3만 개가 넘는 패키지가 배포된다. - GitHub는 모든 npm 패키지 버전을 악성코드 관점에서 검사한다. - 탐지 규칙은 공격 방식의 변화에 맞춰 지속적으로 개선된다. - 매일 수백 개의 신규 배포 패키지에서 악성 코드가 발견될 수 있으며, 실제 조치 전에는 사람이 양성 여부를 검토한다. - 오탐률이 1%만 되어도 매일 수백 개의 정상 패키지 배포가 중단될 수 있으므로, 자동 탐지와 사람의 검증 사이 균형이 중요하다. ## Shai-Hulud 이후의 보안 로드맵 - 2025년 말 발생한 Shai-Hulud 공격은 npm 보안 로드맵을 재정비하는 계기가 됐다. - GitHub는 다음 작업을 가속했다. - npm trusted publishing 확대 - 악성코드 탐지 및 제거 기능 강화 - 오픈소스 유지관리자와의 보안 요구사항 논의 - 보안 변경은 기존 워크플로를 수정하게 만들거나 하위 호환성을 깨뜨릴 수 있으므로, GitHub는 생태계가 원활하게 전환할 수 있도록 지원할 계획이다. - 최근 공격을 계기로 GitHub Actions 보안 로드맵도 재검토하고, 이미 진행 중인 보안 기능의 출시를 앞당기고 있다. ## 오픈소스 생태계의 공동 대응 - 오픈소스는 전 세계가 공유하는 공공재인 만큼 공격이 앞으로도 계속될 가능성이 높다. - GitHub는 npm과 GitHub Actions를 비롯해 향후 등장할 새로운 공격 경로까지 방어 범위를 확대하겠다고 밝혔다. - 효과적인 보안 기능을 만들기 위해 유지관리자와 커뮤니티의 피드백이 중요하다. 실무적으로는 먼저 CodeQL로 Actions를 검사하고, `pull_request_target` 제거·커밋 SHA 고정·스크립트 인젝션 점검을 진행하는 것이 좋다. 이후 가능하면 OIDC와 trusted publishing으로 배포 인증을 전환해, 탈취 가능한 장기 비밀 자체를 줄여야 한다.

원문 읽기(새 탭에서 열림)
github4분 읽기큐레이션 요약

Copilot CLI에서 /fleet으로 여러 에이전트 동시에 실행하기

Copilot CLI의 `/fleet`는 하나의 작업을 여러 독립적인 하위 작업으로 나누고, 여러 에이전트를 병렬 실행하는 기능이다. 오케스트레이터가 작업의 의존성을 분석해 실행 순서를 정하고, 결과를 검증·통합하므로 여러 파일이나 모듈을 동시에 처리할 수 있다. 다만 에이전트들이 동일한 파일을 수정하면 잠금이나 자동 병합 없이 마지막 변경이 덮어쓰므로, 작업 범위와 파일 경계를 명확히 지정해야 한다. ## `/fleet`의 작동 방식 - 사용자가 `/fleet <작업 목표>` 형식으로 목표를 전달한다. - 오케스트레이터가 목표를 독립적인 작업 단위로 분해한다. - 작업 간 의존성을 분석해 병렬 실행 가능한 항목과 순차 실행해야 하는 항목을 구분한다. - 독립적인 작업은 백그라운드 하위 에이전트에 동시에 배정한다. - 작업 완료를 확인한 뒤 다음 의존 작업을 실행한다. - 각 결과를 검증하고 최종 산출물로 통합한다. - 하위 에이전트는 각자의 컨텍스트 창을 사용하지만 동일한 파일 시스템을 공유하며, 서로 직접 대화하지 않고 오케스트레이터를 통해 조정된다. ## 시작 방법 - 대화형 CLI에서는 다음과 같이 실행한다. ```text /fleet Refactor the auth module, update tests, and fix the related docs in the folder docs/auth/ ``` - 터미널에서 비대화형으로 실행할 수도 있다. ```bash copilot -p "/fleet <YOUR TASK>" --no-ask-user ``` - `--no-ask-user`는 사용자가 추가 질문에 응답할 수 없는 비대화형 환경에서 필요하다. ## 병렬화에 적합한 프롬프트 작성 - 작업마다 구체적인 산출물을 지정해야 한다. - 파일 - 테스트 스위트 - 문서 페이지 - 특정 모듈 - “문서를 작성하라”처럼 모호한 요청은 독립 작업을 식별하기 어려워 순차 실행될 가능성이 높다. - 예를 들어 인증, 엔드포인트, 오류 문서를 각각 별도 파일로 지정하면 세 작업은 병렬 처리할 수 있다. - 여러 문서를 연결하는 `docs/index.md`처럼 다른 결과물에 의존하는 작업은 후속 단계로 명시해야 한다. ## 파일 범위와 제약 조건 지정 프롬프트에는 각 에이전트가 담당할 범위를 명확히 적어야 한다. - 담당 디렉터리나 파일을 지정한다. - 수정해서는 안 되는 영역을 명시한다. - 테스트 변경 금지 - 의존성 업그레이드 금지 - 지정 디렉터리 외 수정 금지 - 완료 조건을 제시한다. - 린트 통과 - 타입 검사 통과 - 특정 테스트 통과 - API, UI, 설정처럼 서로 다른 영역을 별도 트랙으로 나누면 병렬 실행 효과가 커진다. ## 작업 의존성 선언 - 한 작업이 다른 작업의 결과를 필요로 하면 프롬프트에 `depends on` 관계를 명시한다. - 예를 들어 다음과 같이 데이터베이스 마이그레이션, ORM 모델, API 핸들러, 통합 테스트의 순서를 지정할 수 있다. - ORM 모델이 완성된 뒤 API 핸들러와 통합 테스트를 동시에 실행하도록 구성할 수 있다. - 의존성을 명시하지 않으면 에이전트가 충돌하거나 불완전한 결과를 바탕으로 작업할 수 있다. ## 사용자 지정 에이전트 활용 - `.github/agents/`에 전문 에이전트 설정 파일을 만들 수 있다. - 에이전트마다 다음을 지정할 수 있다. - 모델 - 사용 가능한 도구 - 역할과 작업 지침 - 문서 작성에는 `technical-writer` 같은 전문 에이전트를 사용하고, 코드 변경에는 기본 에이전트를 사용하는 식으로 역할을 나눌 수 있다. - 모델을 별도로 지정하지 않으면 현재 기본 모델이 사용된다. ## 병렬 실행 여부 확인 - 오케스트레이터가 작업을 여러 트랙으로 분해했는지 계획을 먼저 확인한다. - `/tasks` 명령으로 백그라운드 작업 목록과 진행 상태를 볼 수 있다. - 여러 트랙에서 동시에 진행 상황이 보고되는지 확인한다. - 병렬화되지 않는다면 다음처럼 먼저 분해하도록 요청할 수 있다. ```text Decompose this into independent tracks first, then execute tracks in parallel. Report each track separately with status and blockers. ``` ## 주요 주의점 - 하위 에이전트는 파일 잠금 기능 없이 동일한 파일 시스템을 공유한다. - 두 에이전트가 같은 파일을 수정하면 오류나 자동 병합 없이 마지막 완료 결과가 앞선 변경을 덮어쓸 수 있다. - 따라서 각 에이전트에 서로 다른 파일을 배정해야 한다. - 하나의 파일에 여러 에이전트가 기여해야 한다면: - 각자 임시 파일에 작성한 뒤 오케스트레이터가 병합하게 하거나 - 에이전트 실행 순서를 명시해야 한다. - 하위 에이전트는 오케스트레이터와의 이전 대화 기록을 볼 수 없으므로, 전달되는 프롬프트만으로 작업할 수 있도록 지침과 제약 조건을 self-contained하게 작성해야 한다. 실제로 `/fleet`를 사용할 때는 먼저 작업을 파일·모듈 단위로 분리하고, 의존성과 검증 조건을 프롬프트에 명시하는 것이 좋다. 특히 공유 파일을 여러 에이전트가 수정하지 않도록 범위를 엄격히 나누면 병렬 처리의 속도 이점과 결과 안정성을 함께 얻을 수 있다.

원문 읽기(새 탭에서 열림)
github3분 읽기큐레이션 요약

Copilot Applied Science의 에이전트 주도 개발

GitHub Copilot Applied Science 팀의 Tyler McGoffin은 코딩 에이전트를 활용해 벤치마크 결과 분석에 필요한 지적 반복 작업을 자동화한 프로젝트 `eval-agents`를 만들었다. 핵심은 에이전트를 단순한 코드 생성기가 아니라 계획·구현·검증에 참여하는 협업자로 활용하고, 에이전트가 기여하기 쉬운 저장소 구조를 만드는 것이다. 그 결과 3일도 안 되어 5명이 11개 에이전트와 4개 스킬을 추가하고, 345개 파일에 걸쳐 약 2만 8천 줄의 변경을 만들어냈다. ## 반복적인 벤치마크 분석에서 `eval-agents` 탄생 - 연구자는 TerminalBench2, SWEBench-Pro 같은 코딩 에이전트 평가 벤치마크를 분석한다. - 각 평가 작업은 에이전트의 사고 과정과 행동을 담은 trajectory로 기록되며, 대개 수백 줄의 `.json` 파일로 저장된다. - 수십 개 작업과 여러 번의 벤치마크 실행을 합치면 분석 대상이 수십만 줄에 달한다. - 기존에는 Copilot으로 trajectory에서 패턴을 먼저 찾은 뒤 사람이 직접 조사해 읽어야 할 분량을 수백 줄로 줄였다. - 이 반복 과정을 에이전트가 자동 수행하도록 만든 도구가 `eval-agents`다. ## 프로젝트 설계 목표 - 에이전트를 쉽게 공유하고 사용할 수 있도록 구성한다. - 새로운 에이전트를 쉽게 작성할 수 있도록 한다. - 사람보다 코딩 에이전트가 프로젝트 기여의 주요 수단이 되도록 설계한다. - 특히 세 번째 목표를 적용하자 프로젝트 자체의 사용성과 협업성도 함께 좋아졌다. - 과학자와 엔지니어가 각자의 필요에 맞는 에이전트와 기능을 직접 추가할 수 있는 기반이 마련됐다. ## 코딩 에이전트를 중심으로 한 개발 환경 - 코딩 에이전트: Copilot CLI - 사용 모델: Claude Opus 4.6 - IDE: VS Code - Copilot SDK를 사용해 Copilot CLI의 도구, MCP 서버, 사용자 정의 도구와 스킬 등록 기능을 재활용했다. - 에이전트 실행 기반을 직접 처음부터 만들지 않아도 되어 에이전트 생성 속도를 높일 수 있었다. ## 효과적인 프롬프트 전략 - 에이전트는 범위가 명확한 작업에는 강하지만, 복잡하고 고차원적인 문제에는 충분한 안내가 필요하다. - 짧은 요구사항보다 문제를 고민하는 과정, 전제, 우려 사항을 자세히 설명하는 대화형 프롬프트가 효과적이다. - 바로 구현을 지시하기보다 계획 모드에서 조사와 설계를 먼저 진행하게 하는 것이 좋다. - 예를 들어 테스트가 에이전트의 변경에 맞춰 부적절하게 수정되는 문제를 해결하기 위해, 계획 모드에서 에이전트가 건드릴 수 없는 보호된 테스트 영역을 설계하도록 했다. - 그 대화의 결과로 사람이 승인해야만 수정할 수 있는 계약 테스트와 유사한 회귀 방지 장치가 만들어졌다. - 결론적으로 효과적인 인간 엔지니어에게 필요한 설명, 사고 유도, 검토 과정이 에이전트에도 동일하게 중요하다. ## 에이전트 우선 저장소를 위한 아키텍처 전략 - 에이전트 중심 프로젝트에서는 새 기능보다 코드 구조 개선, 리팩터링, 문서화, 테스트 작성이 더 중요한 기반 작업이 된다. - 명확한 이름과 파일 구조는 에이전트가 코드를 탐색하고 변경하기 쉽게 만든다. - 기능과 패턴을 문서화하면 에이전트가 프로젝트의 규칙과 설계 의도를 더 잘 따를 수 있다. - 발견된 문제를 테스트 케이스로 남기면 이후 에이전트의 변경으로 인한 회귀를 방지할 수 있다. - 에이전트가 기능을 빠르게 추가할수록 사람이 죽은 코드와 불필요한 복잡성을 정리하는 작업도 병행해야 한다. - 잘 관리된 저장소에서는 Copilot을 통한 기능 전달이 쉬워지므로, 과거에 미뤄두었던 유지보수 작업이 개발 생산성의 핵심 요소가 된다. ## 짧은 기간에 이루어진 협업 성과 - 처음 참여한 팀원 5명이 3일 이내에 프로젝트에 기여했다. - 새로 추가된 항목: - 에이전트 11개 - 스킬 4개 - 과학자의 추론 흐름을 표현하는 `eval-agent workflows` - 전체 변경 규모는 345개 파일에서 `+28,858/-2,884`줄이었다. - 이는 에이전트에게 적절한 개발 환경과 구조를 제공하면 새로운 기능과 협업을 매우 빠르게 확장할 수 있음을 보여준다. 에이전트를 효과적으로 활용하려면 좋은 프롬프트만으로는 부족하다. 계획 모드와 상세한 대화를 적극 활용하고, 문서·테스트·리팩터링을 지속해 에이전트가 이해하기 쉬운 저장소를 유지하는 것이 실용적인 출발점이다.

원문 읽기(새 탭에서 열림)
github원문

입문자를 위한 GitHub: GitHub 보안 시작하기 (새 탭에서 열림)

제시해주신 내용은 저자인 Kedasha의 약력으로 보입니다. 해당 저자가 작성한 기술 블로그의 핵심 주제인 **"소프트 삭제(Soft Delete)의 문제점과 대안"**에 대한 내용을 바탕으로 요청하신 형식에 맞춰 요약해 드립니다. 소프트 삭제(Soft Delete)는 구현이 쉬워 보이지만 장기적으로는 시스템 복잡성과 성능 저하를 초래하는 안티 패턴에 가깝습니다. 데이터의 물리적 삭제 대신 플래그를 사용하는 방식은 모든 쿼리에 필터 조건을 강제하여 실수를 유발하고, 유니크 제약 조건 충돌이나 GDPR 같은 데이터 프라이버시 법규 준수를 어렵게 만듭니다. 따라서 데이터 보존이 필요하다면 물리적 삭제와 함께 별도의 보관 테이블이나 트리거를 활용하는 아키텍처를 구축하는 것이 더욱 견고한 해결책이 됩니다. **소프트 삭제가 초래하는 데이터 관리의 복잡성** * **쿼리 오염:** 모든 `SELECT` 쿼리에 `WHERE deleted_at IS NULL`과 같은 조건을 추가해야 하며, 이를 한 번이라도 누락할 경우 삭제된 데이터가 사용자에게 노출되는 심각한 논리적 오류가 발생합니다. * **제약 조건 충돌:** 사용자 아이디나 이메일처럼 유니크(Unique) 제약 조건이 걸린 컬럼에서 데이터가 소프트 삭제된 경우, 동일한 값으로 새로운 데이터를 삽입할 때 충돌이 발생하여 비즈니스 로직이 꼬이게 됩니다. * **데이터베이스 비대화:** 실제로 삭제된 데이터가 테이블에 계속 남아 있어 인덱스 크기가 커지고 검색 성능이 점진적으로 저하됩니다. **규제 준수 및 보안상의 한계** * **GDPR 및 개인정보 보호:** 유럽의 GDPR 등 현대의 개인정보 보호법은 사용자의 '잊힐 권리'를 보장하며 데이터의 완전한 삭제를 요구하는 경우가 많습니다. 소프트 삭제는 물리적으로 데이터를 남겨두기 때문에 법적 요구사항을 충족하지 못할 위험이 있습니다. * **데이터 생명주기 관리:** 오래된 데이터를 퍼지(Purge)하거나 아카이빙하는 정책을 세울 때, 활성 데이터와 삭제된 데이터가 섞여 있어 관리 포인트가 늘어납니다. **더 나은 대안: 트리거 기반 보관 및 전용 테이블 활용** * **히스토리/보관 테이블 분리:** 삭제가 발생할 때 원본 테이블에서는 데이터를 물리적으로 삭제(Hard Delete)하고, 삭제된 데이터는 별도의 `audit_logs` 또는 `archive` 테이블로 옮겨 관리합니다. * **데이터베이스 트리거 활용:** 어플리케이션 로직에서 삭제와 삽입을 동시에 처리하는 대신, DB 수준의 트리거를 설정하여 삭제 시 자동으로 보관 테이블에 기록되도록 구성하면 데이터 유실을 방지하면서도 운영 테이블의 무결성을 유지할 수 있습니다. * **클린 쿼리 유지:** 운영 테이블에는 항상 '살아있는' 데이터만 존재하게 되므로 쿼리가 단순해지고 인덱스 효율성이 극대화됩니다. 비즈니스 요구사항에 따라 데이터 복구가 필수적이라면, 어플리케이션 계층에서 플래그를 관리하는 소프트 삭제보다는 **데이터베이스 아키텍처 수준에서 별도의 이력 테이블을 운영하는 방식**을 우선적으로 고려하시길 권장합니다. 이는 시스템의 확장성과 안전성을 동시에 확보할 수 있는 가장 확실한 방법입니다.

github원문

오픈 소스 취약점 트렌드 1년: CVE, 보안 권고 및 악성코드 (새 탭에서 열림)

GitHub Security Lab의 일원인 보안 분석가는 오픈소스 생태계의 안전을 위해 취약점 데이터를 관리하고 표준화하는 핵심적인 역할을 수행합니다. 이들은 GitHub 자문 데이터베이스(Advisory Database)를 운영하고 CVE 식별자를 직접 발행함으로써, 전 세계 개발자들이 보안 위협에 신속하게 대응할 수 있는 기반을 제공합니다. **보안 자문 데이터베이스 큐레이션** * GitHub Advisory Database의 큐레이터로서 소프트웨어 공급망에서 발생하는 다양한 보안 정보를 수집하고 정제합니다. * 개발자들이 사용 중인 라이브러리의 취약점을 명확히 인지하고 조치할 수 있도록 보안 자문 콘텐츠를 최신 상태로 유지합니다. **CVE 식별자 발행 및 취약점 기록 관리** * 보안 취약점에 고유 번호를 부여하는 CVE ID 발행 권한을 가진 전문가로서, 새로운 취약점을 공식적으로 등록합니다. * 각 취약점의 세부 사항을 담은 CVE 레코드를 작성하고 게시하여, 보안 업계 전체가 표준화된 정보를 공유할 수 있도록 돕습니다. **GitHub Security Lab의 역할** * 단순한 분석을 넘어 보안 연구소의 구성원으로서 실제적인 보안 위협을 식별하고 해결책을 제시합니다. * 전 세계 소프트웨어 프로젝트의 투명성을 높이기 위해 보안 커뮤니티와 협력하며 기술적 지원을 지속합니다. 보안 분석가는 단순히 취약점을 찾는 것에 그치지 않고, 이를 데이터화하고 전파하여 소프트웨어 생태계 전반의 보안 수준을 높이는 데 기여하고 있습니다. 신뢰할 수 있는 오픈소스 환경을 구축하기 위해 CVE와 같은 표준화된 기록 체계를 적극적으로 활용하는 것이 중요합니다.

github3분 읽기큐레이션 요약

Copilot SDK를 활용한 AI 기반 GitHub 이슈 분류 구축하기

IssueCrush는 GitHub 이슈를 카드처럼 검토하고, Copilot SDK로 각 이슈의 요약과 처리 방향을 자동으로 제안하는 앱이다. React Native가 Node.js 기반 SDK를 직접 실행할 수 없기 때문에, Copilot SDK는 서버에서 실행하고 클라이언트는 HTTPS로 통신하는 구조를 사용한다. 핵심은 AI를 활용해 트리아지 시간을 줄이되, 인증 보안·리소스 정리·AI 장애 시 대체 경로까지 함께 설계하는 것이다. ## IssueCrush: 스와이프로 이슈 트리아지 - GitHub 이슈를 스와이프 가능한 카드로 표시한다. - 왼쪽으로 넘기면 이슈를 닫고, 오른쪽으로 넘기면 유지한다. - “Get AI Summary”를 누르면 Copilot이 이슈 내용을 분석한다. - 긴 이슈 설명을 직접 모두 읽지 않고도 다음 정보를 빠르게 파악할 수 있다. - 이슈의 핵심 내용 - 주요 문제나 기능 요청 - 조사, 구현, 담당 팀 배정, 중복 이슈 종료 등 권장 조치 ## React Native와 서버 측 SDK 아키텍처 - Copilot SDK는 Node.js 패키지이며 내부적으로 Copilot CLI 프로세스를 실행하고 JSON-RPC로 통신한다. - React Native 앱에서는 Node.js 런타임과 CLI 바이너리를 직접 사용할 수 없으므로 SDK를 서버에서 실행해야 한다. - 구성은 다음과 같다. - React Native·웹 클라이언트 → HTTPS → Node.js 서버 - Node.js 서버 → Copilot SDK → 로컬 Copilot CLI - 클라이언트는 별도로 GitHub OAuth와 GitHub REST API를 사용해 이슈 데이터를 가져온다. - 서버 측 통합의 장점: - 여러 클라이언트가 하나의 SDK 인스턴스를 공유해 연결과 인증 오버헤드를 줄인다. - Copilot 인증 정보와 API 토큰을 모바일 앱에 포함하지 않아 보안성이 높다. - Copilot 장애나 타임아웃이 발생해도 기본 요약으로 대체할 수 있다. - 서버에서 요청·응답, 지연 시간, 오류를 기록해 디버깅과 모니터링이 쉽다. ## 사전 준비 사항 - 서버에 Copilot CLI를 설치하고 시스템 `PATH`에서 실행 가능하게 해야 한다. - GitHub Copilot 구독 또는 BYOK 방식의 자체 API 키가 필요하다. - 서버에서 `copilot auth`를 실행하거나 `COPILOT_GITHUB_TOKEN` 환경 변수를 설정해 CLI를 인증해야 한다. ## Copilot SDK의 세션 기반 실행 SDK 사용 흐름은 다음과 같다. - `CopilotClient`를 생성하고 `start()`로 CLI 프로세스를 시작한다. - `createSession()`으로 사용할 모델과 권한 처리 방식을 지정한다. - `sendAndWait()`에 프롬프트를 전달해 응답을 기다린다. - `response.data.content`에서 요약 결과를 추출한다. - 작업이 끝나면 세션을 `disconnect()`하고 클라이언트를 `stop()`한다. 예시에서는 `gpt-4.1` 모델과 `approveAll` 권한 처리기를 사용하며, 초기화부터 정리까지 `try/finally`로 감싼다. ## 세션 생명주기와 리소스 정리 - SDK의 기본 생명주기는 다음 순서다. - `start()` - `createSession()` - `sendAndWait()` - `disconnect()` - `stop()` - 세션을 정리하지 않으면 리소스와 메모리가 누수될 수 있다. - 항상 `try/finally`에서 정리 작업을 수행해야 한다. - 정리 과정의 오류가 원래 발생한 오류를 덮지 않도록 `catch(() => {})`로 무시할 수 있다. ## 트리아지를 위한 프롬프트 설계 - 원문을 그대로 전달하기보다 모델이 판단하기 쉬운 구조화된 정보를 제공한다. - 프롬프트에는 다음 정보가 포함된다. - 제목과 이슈 번호 - 저장소 이름 - 상태와 라벨 - 생성일 - 작성자 - 이슈 본문 - 모델에게 2~3문장으로 간결하게 답하도록 요청한다. - 응답 목표는 다음 세 가지다. - 이슈가 무엇에 관한 것인지 설명 - 핵심 문제나 요청 식별 - 조사 필요, 구현 가능, 백엔드 팀 배정, 중복으로 종료 등 권장 조치 제안 - 빠른 검토를 위해 명확하고 실행 가능하게 작성하도록 하고, 마크다운 형식은 사용하지 않도록 지시한다. - 라벨과 작성자 같은 메타데이터도 이슈의 성격과 처리 방향을 판단하는 데 중요한 맥락으로 활용된다. ## 실용적인 권장 사항 Copilot SDK를 모바일이나 웹 앱에 직접 넣기보다 Node.js 서버에 배치하고, 인증 정보는 서버에만 보관하는 구성이 적절하다. 또한 세션 정리를 반드시 보장하고, AI가 실패해도 기본 트리아지가 가능하도록 비AI 대체 경로를 마련하는 것이 안정적인 운영에 중요하다.

원문 읽기(새 탭에서 열림)
github3분 읽기큐레이션 요약

깃허브, AI 기반 탐지 기능으로 애플리케이션 보안 범위 확장

GitHub는 AI 기반 보안 탐지를 도입해 CodeQL만으로는 충분히 다루기 어려운 언어와 프레임워크까지 애플리케이션 보안 범위를 확장한다. 이 기능은 풀 리퀘스트에서 취약점을 탐지하고 Copilot Autofix로 수정안까지 제안해, 코드 병합 전에 위험을 발견·해결하는 것을 목표로 한다. 공개 프리뷰는 2026년 2분기 초에 제공될 예정이다. ## CodeQL과 AI 탐지를 결합한 보안 검사 - CodeQL은 지원 언어에 대해 깊은 의미 분석을 제공하는 기존 정적 분석 엔진이다. - 현대 저장소에는 Shell/Bash 스크립트, Dockerfile, Terraform(HCL), PHP 등 다양한 생태계의 코드가 함께 포함된다. - GitHub는 CodeQL과 AI 기반 탐지를 결합한 하이브리드 모델로 이러한 영역까지 보안 검사 범위를 넓힌다. - AI 탐지는 전통적인 정적 분석으로 지원하기 어려운 코드에서 잠재적 취약점과 수정 제안을 찾아낸다. - 내부 테스트에서 30일 동안 17만 건 이상의 결과를 처리했으며, 개발자 긍정 피드백 비율은 80%를 넘었다. - 이 기능은 보안·코드 품질·코드 리뷰를 지원하는 GitHub의 에이전트형 탐지 플랫폼을 기반으로 한다. ## 풀 리퀘스트에서 취약점 조기 발견 - 풀 리퀘스트가 생성되면 GitHub Code Security가 변경 사항에 적합한 방식을 자동으로 선택해 분석한다. - 지원 언어에는 CodeQL 정적 분석을 사용한다. - 추가 생태계에는 AI 기반 보안 탐지를 적용한다. - 결과는 기존 코드 스캐닝 결과와 함께 풀 리퀘스트 안에 표시된다. - 탐지 대상에는 다음과 같은 문제가 포함된다. - 안전하지 않은 문자열 결합 방식의 SQL 쿼리나 명령어 - 취약한 암호화 알고리즘 - 민감한 리소스를 노출하는 인프라 구성 - 개발자는 별도 보안 도구로 이동하지 않고 코드 리뷰 과정에서 위험을 확인할 수 있다. ## Copilot Autofix를 통한 수정 자동화 - 취약점을 찾는 것뿐 아니라 빠르고 안전하게 수정하는 것도 보안 운영의 핵심이다. - Copilot Autofix는 탐지 결과를 바탕으로 개발자가 검토·테스트·적용할 수 있는 수정안을 제안한다. - 2025년 Autofix는 46만 건 이상의 보안 경고 해결에 사용됐다. - Autofix를 사용한 경우 평균 해결 시간은 0.66시간으로, 사용하지 않은 경우의 1.29시간보다 짧았다. - 탐지와 자동 수정 제안을 연결해 취약점 발견부터 해결까지의 시간을 줄인다. ## 병합 시점의 보안 정책 적용 - GitHub는 코드가 검토되고 승인되는 병합 지점에서 보안 결과를 통제할 수 있도록 한다. - 보안 탐지, 수정 제안, 정책 집행을 풀 리퀘스트에 통합하면 배포 이후가 아니라 병합 전에 위험을 차단할 수 있다. - 팀은 개발자가 기존 워크플로를 벗어나지 않으면서 보안 기준을 적용할 수 있다. - 장기적으로는 정적 분석의 정확성과 AI의 맥락 이해를 결합한 더 발전된 탐지 체계로 확장될 예정이다. 실무에서는 CodeQL이 지원하는 핵심 언어뿐 아니라 Shell, Docker, Terraform, PHP 등을 사용하는 저장소에도 해당 기능을 검토할 만하다. 다만 AI가 제안한 수정안은 반드시 개발자가 코드 의도와 테스트 결과를 확인한 뒤 병합하는 것이 좋다.

원문 읽기(새 탭에서 열림)
github3분 읽기큐레이션 요약

Squad가 리포지토리 내에서 협업하는 AI 에이전트를 실행하는 방법

Squad는 GitHub Copilot 기반의 여러 AI 에이전트를 저장소 안에 직접 구성해, 설계·구현·테스트·문서화를 협업 방식으로 수행하게 하는 오픈소스 도구다. 복잡한 오케스트레이션 인프라나 고급 프롬프트 설계 없이 `squad init`만으로 팀을 구성할 수 있으며, 저장소 파일을 공유 메모리로 활용한다. 다만 완전한 자동화가 아니라 사용자가 최종적으로 모든 변경 사항과 풀 리퀘스트를 검토하고 병합해야 한다. ## 저장소 안에 구성되는 AI 개발팀 - 전역 설치: ```bash npm install -g @bradygaster/squad-cli ``` - 저장소별 초기화: ```bash squad init ``` - 초기화하면 리드, 프런트엔드 개발자, 백엔드 개발자, 테스터 등 역할별 에이전트가 생성된다. - 사용자는 자연어로 작업을 요청하고, 코디네이터 에이전트가 적절한 전문가에게 작업을 분배한다. - 각 전문가는 별도의 브랜치와 파일을 사용해 구현, 테스트, 문서화 등을 병렬로 진행한다. ## 에이전트 간 작업 조정과 독립적 검토 - 예를 들어 JWT 인증을 요청하면: - 백엔드 에이전트는 refresh token과 bcrypt를 포함한 인증 기능을 구현한다. - 테스트 에이전트는 테스트 코드를 작성하고 실행한다. - 문서화 에이전트는 변경 내용을 정리해 풀 리퀘스트를 생성한다. - 테스트 실패 시 원래 구현자가 자기 코드를 스스로 수정하지 못하도록 검토 프로토콜을 적용할 수 있다. - 다른 에이전트가 별도의 컨텍스트에서 문제를 수정하므로, 자기검토보다 독립적인 리뷰에 가깝다. - 사용자는 중간 결과를 모두 검토하기보다 내부 검증 과정을 통과한 풀 리퀘스트를 검토할 수 있다. - 에이전트가 잘못된 가정을 할 수 있으므로, 최종 검토와 병합은 여전히 사람이 담당한다. ## `decisions.md`를 활용한 공유 메모리 - 실시간 대화나 벡터 데이터베이스 대신 저장소의 `decisions.md`에 아키텍처 결정을 기록한다. - 라이브러리 선택, 명명 규칙, 데이터베이스 연결 방식 같은 결정이 구조화된 블록으로 누적된다. - 이 방식의 장점: - 결정 사항이 지속적으로 보존된다. - Git으로 버전 관리할 수 있다. - 에이전트가 어떤 근거로 작업했는지 추적할 수 있다. - 연결이 끊기거나 세션이 재시작되어도 컨텍스트를 복구할 수 있다. - 저장소 파일을 팀의 “공유 두뇌”로 사용하는 비동기 협업 모델이다. ## 컨텍스트 분할 대신 컨텍스트 복제 - 한 에이전트가 설계, 구현, 테스트, 관리까지 모두 맡으면 컨텍스트 창이 메타 작업으로 가득 차고 환각 가능성이 커진다. - Squad의 코디네이터는 실제 작업을 수행하지 않고 전문가를 호출하는 얇은 라우터 역할을 한다. - 각 전문가는 별도의 추론 호출과 컨텍스트 창을 사용한다. - 지원 모델에서는 에이전트 하나당 최대 약 200K 토큰의 컨텍스트를 활용할 수 있다. - 하나의 컨텍스트를 여러 역할이 나누는 대신, 각 에이전트가 필요한 저장소 컨텍스트를 독립적으로 복제해 병렬 추론한다. ## 파일 기반의 명시적 에이전트 기억 - 에이전트의 기억은 모델 가중치나 숨겨진 세션 상태에 의존하지 않는다. - `.squad/` 폴더에 다음과 같은 텍스트 파일을 저장한다. - **Charter**: 에이전트의 역할과 정체성 - **History**: 에이전트가 과거에 수행한 작업 - **Team decisions**: 팀 전체가 공유하는 결정 사항 - 이 파일들은 코드와 함께 버전 관리되므로 에이전트의 행동 근거를 확인할 수 있다. - 저장소를 복제하면 코드뿐 아니라 프로젝트에 맞게 온보딩된 AI 팀의 기억도 함께 가져올 수 있다. ## 다중 에이전트 개발의 진입 장벽 완화 - 기존 다중 에이전트 시스템은 오케스트레이션 계층, 프레임워크, 벡터 데이터베이스 등을 직접 구성해야 하는 경우가 많다. - Squad는 CLI 명령 두 번으로 저장소에 사전 구성된 팀을 추가한다. - 복잡한 프롬프트 설계나 별도의 중앙 인프라 없이 바로 작업을 위임할 수 있다. - 저장소에 남는 결정 기록과 에이전트 이력 덕분에 동작을 비교적 쉽게 점검하고 재현할 수 있다. 실용적으로는 반복적인 구현·테스트·문서화 작업이 많은 저장소에서 Squad를 시도해볼 만하다. 다만 AI가 생성한 모든 변경 사항을 자동 병합하기보다는, 풀 리퀘스트와 테스트 결과를 사람이 확인하는 협업 도구로 사용하는 것이 적절하다.

원문 읽기(새 탭에서 열림)
github4분 읽기큐레이션 요약

오픈 소스를 만들어가는 사람들에게 투자하고 함께 미래를 준비하기

오픈소스 보안은 코드와 도구만이 아니라 이를 유지하는 사람에 대한 투자에서 출발한다. GitHub는 AI로 취약점과 보안 보고서가 급증하는 상황에서 메인테이너의 부담을 줄이기 위해 자금, 교육, 보안 도구, AI 기능을 함께 강화하겠다고 밝혔다. 이를 통해 메인테이너가 지속 가능하게 프로젝트를 관리하고, 소프트웨어 공급망 전반의 보안을 높이는 것이 목표다. ## 메인테이너가 직면한 부담 - 메인테이너는 풀 리퀘스트 검토, 보안 신고 대응, 릴리스 관리 등을 자원봉사 또는 제한된 시간 안에 수행한다. - 소규모 프로젝트가 갑자기 핵심 인프라로 사용되면서 유지보수 책임이 개인에게 집중될 수 있다. - 늦은 시간까지 이어지는 업무와 경제적 보상 부족은 번아웃으로 이어진다. - AI의 확산으로 자동 생성된 풀 리퀘스트와 보안 신고가 급증하면서 신뢰할 수 있는 문제와 단순한 노이즈를 구분하기 어려워졌다. ## 오픈소스 보안을 위한 공동 투자 - GitHub는 Anthropic, AWS, Google, OpenAI와 함께 Linux Foundation의 **Alpha-Omega** 이니셔티브에 총 1,250만 달러를 지원한다. - 지원 목적은 다음과 같다. - AI 기반 보안 기능을 메인테이너의 기존 작업 흐름에 통합 - 핵심 오픈소스 프로젝트의 보안 강화 - 메인테이너가 새로운 보안 위협에 대응할 수 있도록 교육과 실용적 도구 제공 - GitHub는 28만 명 이상의 메인테이너에게 다음 기능을 무료로 제공하고 있다. - GitHub Copilot Pro - GitHub Actions - 코드 스캐닝 및 Autofix - 시크릿 스캐닝과 푸시 보호 - 의존성 알림 ## GitHub Secure Open Source Fund 확대 - **GitHub Secure Open Source Fund**에 550만 달러 규모의 Azure 크레딧과 재원을 추가한다. - 지원 항목은 다음과 같다. - 보안 교육과 전문 지식 - 프로젝트 간 협력과 커뮤니티 형성 - Datadog, Open WebUI, Atlantic Council, OWASP 등 새로운 파트너십 - 기존 프로그램에서는 38개국 200명 이상의 메인테이너가 참여한 138개 프로젝트를 지원했다. - 그 결과 다음과 같은 보안 성과가 발생했다. - 새로운 CVE 191건 등록 - 유출 전 차단된 시크릿 250건 이상 - 발견 및 해결된 유출 시크릿 600건 이상 - 월간 수십억 회 다운로드되는 프로젝트에 영향 - 단순한 자금 지원보다 보안 개선이라는 구체적 목표와 실습, 교육, 전문가 지원을 결합할 때 효과가 크다는 교훈을 얻었다. ## 보안 신고와 취약점 대응 개선 - GitHub Security Lab은 보안 권고 경험과 **Private Vulnerability Reporting(PVR)** 기능에 투자한다. - 목표는 품질이 낮은 신고를 줄이고, 메인테이너가 늘어나는 보안 보고서를 더 효율적으로 관리하도록 돕는 것이다. - GitHub는 보안 연구와 교육을 통해 일반적인 위협에 대한 대응력을 오픈소스 커뮤니티 전체로 확산시키고 있다. - 보안 도구가 메인테이너의 실제 작업 흐름에 자연스럽게 결합되어야 한다고 강조한다. ## AI를 메인테이너의 부담 완화에 활용 - AI는 방어 측과 공격 측 모두의 취약점 발견 속도와 규모를 크게 높이고 있다. - 따라서 메인테이너는 더 많은 취약점을 찾는 것뿐 아니라 다음 작업을 빠르게 수행해야 한다. - 보안 신고 우선순위 지정 - 실제 위험과 노이즈 구분 - 취약점의 원인 이해 - 수정 코드 작성 및 검증 - GitHub는 AI가 추가적인 압박이 아니라 생산성 향상을 위한 도구가 되어야 한다고 설명한다. - 이를 위해 다음 영역에 AI를 적용할 계획이다. - 이슈 분류 - 풀 리퀘스트 검토 - 취약점 식별 - 보안 취약점 자동 수정 - 메인테이너에게 제공되는 Copilot Pro에는 AI 지원 코드 리뷰, 에이전트 기반 보안 수정 워크플로, 다양한 모델 활용 기능이 포함된다. - GitHub는 보안 연구용 AI 프레임워크도 오픈소스로 공개해 특정 보안 조직뿐 아니라 메인테이너가 직접 활용할 수 있도록 했다. ## 지속 가능한 보안 생태계 - 메인테이너에게 시간, 전문성, 자금, 적절한 도구를 제공하면 프로젝트 보안이 개선되고 그 효과가 downstream 사용자와 다른 프로젝트로 확산된다. - 이는 메인테이너 지원 → 보안 개선 → 생태계 전체의 신뢰 향상 → 더 많은 참여와 지원으로 이어지는 선순환 구조를 만든다. - AI 시대의 오픈소스 보안은 자동화만으로 해결되지 않으며, 사람의 판단과 지속 가능한 유지보수가 함께 필요하다. 오픈소스 프로젝트를 운영한다면 보안 기능을 일회성으로 적용하기보다 코드 스캐닝, 시크릿 보호, 의존성 관리, 비공개 취약점 신고를 정기적인 유지보수 과정에 포함하는 것이 좋다. 동시에 AI 도구는 신고와 수정 작업을 줄이는 보조 수단으로 활용하되, 최종 판단은 메인테이너가 직접 검증해야 한다.

원문 읽기(새 탭에서 열림)
github4분 읽기큐레이션 요약

초보자를 위한 GitHub: GitHub Actions 시작하기

GitHub Actions는 GitHub에 내장된 CI/CD 및 자동화 플랫폼으로, YAML 워크플로를 통해 반복 작업과 배포 과정을 자동화한다. 저장소 이벤트가 발생하면 가상 실행 환경에서 작업을 수행하며, 글에서는 새 이슈에 `triage` 라벨을 자동으로 붙이는 첫 워크플로를 만드는 과정을 설명한다. 핵심 구성 요소는 이벤트(`on`), 실행 환경(`runs-on`), 작업(`jobs`), 단계(`steps`), 권한(`permissions`)이다. ## GitHub Actions의 역할 - GitHub Actions는 지속적 통합·지속적 배포(CI/CD)와 자동화를 위한 플랫폼이다. - YAML 파일로 다음과 같은 작업을 자동화할 수 있다. - 취약점 검사 - 테스트 실행 - 릴리스 생성 - 팀에 업데이트 알림 - 배포 프로세스 - 워크플로는 저장소에 저장되며, 코드 푸시·풀 리퀘스트·이슈 생성·예약된 시간 등의 이벤트로 실행된다. - 이벤트가 발생하면 GitHub가 가상 환경을 준비하고 정의된 작업을 자동으로 실행한다. ## 워크플로를 구성하는 요소 - **이벤트(Event)** - 워크플로를 시작시키는 저장소 활동이다. - 예: 코드 푸시, 풀 리퀘스트 생성, 이슈 생성, 브랜치 병합 - **실행기(Hosted runner)** - 워크플로의 작업을 실행하는 가상 머신이다. - GitHub가 제공하는 Ubuntu, Windows, macOS 실행기를 사용할 수 있다. - 필요하면 자체 호스팅 실행기를 구성할 수도 있다. - **작업(Job)** - 하나의 실행기에서 수행되는 단계들의 묶음이다. - **단계(Step)** - 셸 명령을 실행하거나 미리 만들어진 재사용 가능한 액션을 호출한다. ## Actions 탭과 워크플로 템플릿 - 저장소의 **Actions** 탭에서는 현재 저장소에 등록된 워크플로를 확인할 수 있다. - **New workflow**를 선택하면 저장소에 적합한 추천 템플릿을 확인할 수 있다. - 템플릿은 YAML 편집기로 열리며, 기본적으로 다음 세 영역을 포함한다. - `name`: 워크플로의 목적을 설명하는 이름 - `on`: 워크플로를 실행할 이벤트 - `jobs`: 실제 작업 내용 ## YAML 워크플로 파일 작성 - 워크플로 파일은 저장소의 `.github/workflows` 디렉터리에 `.yml` 확장자로 저장한다. - 파일명은 `build-and-test.yml`, `security-scanner.yml`처럼 역할을 바로 알 수 있게 작성하는 것이 좋다. - 예제에서는 `label-new-issue.yml` 파일을 만들고 새 이슈에 라벨을 자동으로 추가한다. - 워크플로 이름은 다음과 같이 지정한다. ```yaml name: Label New Issues ``` ## 이슈 생성 이벤트 설정 - `on` 키워드로 워크플로의 실행 조건을 정의한다. - 다음 설정은 이슈가 새로 생성될 때만 워크플로를 실행한다. ```yaml on: issues: types: [opened] ``` - GitHub Actions는 다양한 이벤트와 세부 이벤트 유형을 지원하므로, 작업 목적에 맞는 트리거를 선택할 수 있다. ## 작업 환경과 권한 설정 - `jobs` 아래에 작업 이름을 지정한다. - `runs-on: ubuntu-latest`는 GitHub가 제공하는 최신 Ubuntu 실행기를 사용한다는 의미다. - 작업이 저장소를 읽고 이슈 라벨을 수정하려면 적절한 권한을 명시해야 한다. ```yaml jobs: label-issues: runs-on: ubuntu-latest permissions: issues: write contents: read ``` - `issues: write`는 이슈를 수정할 수 있는 권한이다. - `contents: read`는 저장소 콘텐츠를 읽을 수 있는 권한이다. - 작업 수준에서 `permissions`를 지정하면 해당 작업의 액션과 명령에 그 권한이 적용된다. ## 저장소 확인과 라벨 추가 단계 - `steps`에는 작업에서 순서대로 수행할 동작을 작성한다. - `actions/checkout@v6` 액션으로 저장소 코드를 실행 환경에 내려받는다. - 이후 GitHub CLI를 사용해 새 이슈에 `triage` 라벨을 추가한다. ```yaml steps: - name: Checkout repository uses: actions/checkout@v6 - name: Add triage label env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} ISSUE_NUMBER: ${{ github.event.issue.number }} LABEL: "triage" run: gh issue edit "$ISSUE_NUMBER" --add-label "$LABEL" ``` - `uses`는 GitHub Marketplace의 미리 만들어진 재사용 액션을 호출한다. - 저장소 체크아웃 - Node.js 설정 - 기타 반복적인 개발 작업 등에 활용할 수 있다. - `run`은 실행기에서 셸 명령을 직접 실행한다. - `GH_TOKEN`에는 GitHub가 제공하는 `GITHUB_TOKEN`을 사용한다. - `${{ github.event.issue.number }}`는 이벤트 정보에서 새로 생성된 이슈 번호를 가져온다. - `gh issue edit` 명령은 해당 이슈에 `triage` 라벨을 추가한다. 처음에는 GitHub Actions의 템플릿을 활용해 간단한 이벤트 기반 자동화를 만들어 보는 것이 좋다. 이후 이벤트 조건, 최소 권한, 재사용 액션과 직접 실행 명령을 조합하면 테스트·보안 검사·이슈 관리·배포까지 확장할 수 있다.

원문 읽기(새 탭에서 열림)
github4분 읽기큐레이션 요약

접근성을 위한 지속적인 AI: GitHub이 피드백을 포용으로 전환하는 방법

GitHub는 접근성 피드백이 여러 팀과 채널에 흩어져 처리되지 못하던 문제를 해결하기 위해, 피드백을 지속적으로 수집·분류·추적하는 AI 기반 워크플로를 구축했다. GitHub Actions, GitHub Copilot, GitHub Models를 결합해 반복적인 분석과 라우팅은 자동화하되, 우선순위와 해결 판단은 사람이 맡는다. 그 결과 접근성 문제를 일회성 감사가 아니라 지속적으로 개선되는 운영 시스템으로 전환했다. ## 접근성 피드백이 기존 방식에서 겪은 문제 - 접근성 문제는 내비게이션, 인증, 설정, 공통 컴포넌트 등 여러 영역에 걸쳐 발생해 단일 팀이 소유하기 어렵다. - 피드백이 여러 백로그와 버그 목록에 분산되면서 담당자가 정해지지 않거나 장기간 방치됐다. - 사용자가 반복해서 진행 상황을 문의해야 했고, 개선 사항이 막연한 “2단계 작업”으로 미뤄지는 경우가 많았다. - 따라서 단순한 버그 관리가 아니라, 접수부터 해결과 후속 안내까지 연결하는 조정 체계가 필요했다. ## Continuous AI: 접근성을 살아 있는 시스템으로 관리 - GitHub가 말하는 Continuous AI는 단일 제품이나 일회성 자동 검사 도구가 아니다. - 자동화, 인공지능, 사람의 전문성을 결합해 소프트웨어 개발 과정에 접근성을 지속적으로 포함시키는 방법론이다. - 코드 스캐너만으로는 실제 사용자가 겪는 장벽을 충분히 발견하기 어렵기 때문에, 사용자와 고객의 경험을 중심 데이터로 삼는다. - 피드백을 명확한 구조의 데이터로 바꾸고, 적절한 팀에 전달하며, 구현 가능한 이슈로 발전시키는 것이 핵심이다. - 이는 2025년 GAAD pledge의 방향인 오픈소스 생태계 전반의 접근성 개선과도 연결된다. ## 사용자와 조직 구성원을 위한 설계 시스템은 세 가지 주요 사용자를 기준으로 설계됐다. - **이슈 제출자** - 커뮤니티 관리자, 지원 담당자, 영업 담당자가 사용자를 대신해 문제를 등록한다. - 이들이 반드시 접근성 전문가일 필요는 없으므로, 입력 과정에서 접근성 개념과 필요한 정보를 안내해야 한다. - **접근성·서비스 팀** - 엔지니어와 디자이너가 재현 단계, WCAG 기준, 심각도, 담당 팀 등 실행 가능한 정보를 받아야 한다. - **프로그램·제품 관리자** - 문제 유형별 현황, 반복되는 추세, 해결 진행률을 파악해 리소스와 우선순위를 결정해야 한다. - 이를 위해 피드백을 단순 티켓이 아니라 파이프라인을 따라 흐르는 데이터로 취급하고, 변화에 맞춰 확장 가능한 구조를 선택했다. ## 이벤트 기반 피드백 워크플로 - 각 단계가 GitHub Action을 실행하는 이벤트 기반 구조로 설계됐다. - 이슈가 생성되면 GitHub Models API를 통해 GitHub Copilot이 피드백을 분석한다. - 상태가 변경되면 다음 담당 팀으로 자동 인계된다. - 문제가 해결되면 최초 제출자에게 후속 안내를 보내 사용자와의 소통을 마무리한다. - 모든 Action은 수동 실행하거나 재실행할 수 있어, 자동화가 처리하지 못하는 경우 사람이 언제든 개입할 수 있다. - 전체 흐름은 다음 일곱 단계로 구성된다. - 접수(Actioning intake) - Copilot 분석 - 제출자 검토 - 접근성 팀 검토 - 링크 감사 - 사용자와의 마무리 소통 - 개선 및 프롬프트 업데이트 - 제출자 검토에서 Copilot 분석을 다시 실행하거나, 마무리 단계에서 접근성 팀 검토로 되돌아가는 식의 피드백 루프도 포함된다. - 2024년 중반에는 이 시스템을 주로 직접 구축했지만, 현재는 자연어로 GitHub Actions를 생성할 수 있는 Agentic Workflows를 이용하면 유사한 시스템을 더 빠르게 만들 수 있다. ## 다양한 채널에서의 접수와 표준화 - 접근성 피드백은 지원 티켓, 소셜 미디어, 이메일, 직접 연락 등 다양한 경로에서 들어온다. - 현재 약 90%는 GitHub 접근성 Discussion 게시판을 통해 접수된다. - 공개 게시판에서는 다른 사용자가 문제를 확인하거나 추가 맥락과 우회 방법을 제공할 수 있어, 일반 지원 티켓보다 풍부한 정보가 모이는 장점이 있다. - 모든 피드백에는 영업일 기준 5일 이내에 응답한다. - 즉시 조치할 수 없는 내용도 관련 자료나 도움을 받을 수 있는 경로를 안내해 응답이 끊기지 않도록 한다. - 내부 팀의 조치가 필요한 경우 담당자가 사용자 보고 내용, 출처, 관련 컴포넌트를 담은 전용 접근성 피드백 이슈 템플릿으로 추적 이슈를 만든다. - 이슈 템플릿은 접수 정보를 표준화해 초기 맥락이 트리아지 과정에서 사라지는 것을 방지한다. ## 운영 방식에서 얻는 시사점 - AI는 접근성 문제의 최종 판단자라기보다 반복적인 분류·요약·전달을 담당하는 보조 수단으로 사용된다. - 실제 해결 여부, 우선순위, 담당 지정에는 사람의 전문성과 판단이 계속 필요하다. - 효과적인 자동화의 전제는 AI 모델 자체가 아니라, 먼저 피드백 채널을 정리하고 입력 형식을 표준화하는 일이다. - 접근성 문제를 개별 팀의 선택적 업무가 아니라 지속적으로 측정하고 개선해야 하는 제품 운영 데이터로 다뤄야 한다. 실무적으로는 먼저 접근성 피드백을 한곳으로 모으고, 재현 단계·영향 범위·WCAG 기준·심각도·소유 팀을 포함한 템플릿을 마련하는 것이 좋다. 그 기반 위에서 AI와 워크플로 자동화를 도입해야 자동 분류가 실제 해결과 사용자 후속 안내로 이어질 수 있다.

원문 읽기(새 탭에서 열림)
github3분 읽기큐레이션 요약

‘텍스트로서의 AI’ 시대는 끝났다. 실행이 새로운 인터페이스다.

이 글은 AI가 단순히 텍스트를 주고받는 도구를 넘어, 계획을 세우고 도구를 호출하며 실제 작업을 수행하는 실행 계층으로 발전하고 있다고 주장합니다. GitHub Copilot SDK를 사용하면 애플리케이션에 Copilot CLI의 검증된 계획·실행 엔진을 직접 내장할 수 있습니다. 이를 통해 개발자는 고정된 자동화 스크립트나 자체 오케스트레이션 계층을 만들지 않고도, 제약 조건 안에서 적응적으로 동작하는 에이전트형 시스템을 구축할 수 있습니다. ## 텍스트 기반 AI에서 실행 기반 AI로 - 기존 AI 사용 방식은 텍스트를 입력하고 텍스트를 받은 뒤, 사용자가 다음 행동을 직접 결정하는 구조였습니다. - 실제 운영 소프트웨어는 다음과 같은 실행 루프를 필요로 합니다. - 작업 계획 수립 - 도구 호출 - 파일 및 시스템 변경 - 명령 실행 - 오류 복구 - 실행 중 상황 변화에 따른 대응 - 따라서 AI의 핵심 인터페이스가 텍스트가 아니라, 제약 조건과 관찰 가능성을 갖춘 실행으로 바뀌고 있습니다. ## 여러 단계 작업을 에이전트에 위임 - 기존 스크립트는 작업 단계가 고정되어 있을 때는 유용하지만, 상황에 따라 흐름이 바뀌거나 오류 복구가 필요하면 취약해집니다. - Copilot SDK를 사용하면 애플리케이션이 구체적인 절차 대신 작업의 의도와 제약 조건을 전달할 수 있습니다. - 예를 들어 “이 저장소를 릴리스 준비 상태로 만들어라”라고 요청하면 에이전트가 다음을 수행할 수 있습니다. - 저장소 구조 탐색 - 필요한 작업 계획 수립 - 파일 수정 - 명령 실행 - 실패 발생 시 대안 적용 및 복구 - 고정된 예외 처리를 직접 작성하지 않고도, 규모가 커지는 업무 흐름에 적응하는 자동화를 구현할 수 있다는 점이 핵심입니다. ## 구조화된 런타임 컨텍스트 활용 - 시스템 로직을 프롬프트에 계속 추가하면 프롬프트가 복잡하고 취약해지며, 테스트와 유지보수가 어려워집니다. - Copilot SDK는 컨텍스트를 텍스트가 아닌 구조화되고 조합 가능한 도구와 데이터로 제공합니다. - 애플리케이션은 다음과 같은 방식으로 실행 환경을 확장할 수 있습니다. - 도메인 전용 도구 및 에이전트 스킬 정의 - Model Context Protocol(MCP)을 통한 도구 연결 - 실행 시점에 필요한 컨텍스트 검색 - 예를 들어 에이전트가 직접 다음 정보를 조회할 수 있습니다. - 서비스 소유 팀 - 과거 의사결정 기록 - 의존성 그래프 - 내부 API 스키마 - 권한과 안전 제약 조건 - MCP는 에이전트가 실제 시스템과 권한이 부여된 데이터에 근거해 행동하도록 연결하는 기반 역할을 합니다. ## IDE 밖에 실행 기능 내장 - AI 기능은 더 이상 IDE나 터미널 안에서만 제공될 필요가 없습니다. - Copilot SDK를 활용하면 다음과 같은 애플리케이션에 에이전트 실행을 통합할 수 있습니다. - 데스크톱 애플리케이션 - 사내 운영 도구 - 백그라운드 서비스 - SaaS 플랫폼 - 이벤트 기반 시스템 - 파일 변경, 배포 이벤트, 사용자 동작 등을 감지한 뒤 애플리케이션에서 Copilot을 프로그래밍 방식으로 호출할 수 있습니다. - 결과적으로 AI는 별도의 보조 창이 아니라 제품 내부에서 실행되는 인프라가 됩니다. ## 애플리케이션 아키텍처의 변화 - Copilot SDK는 Copilot CLI를 구동하는 계획·실행 엔진을 애플리케이션의 프로그래밍 가능한 계층으로 제공합니다. - 개발자는 매번 오케스트레이션 로직을 새로 구축하기보다, 애플리케이션이 달성해야 할 목표와 실행 가능한 범위를 정의하는 데 집중할 수 있습니다. - 다만 실제 운영 환경에서는 도구 권한, 안전 제약, 실행 결과 관찰, 오류 처리 등을 명확히 설계해야 합니다. Copilot SDK는 AI를 “답변을 생성하는 기능”에서 “실제 업무를 수행하는 시스템 구성 요소”로 확장하려는 접근입니다. 반복 작업이나 복잡한 운영 흐름에 적용할 때는 의도 중심의 에이전트 실행, MCP 기반의 구조화된 컨텍스트, 명확한 권한·안전 제약을 함께 설계하는 것이 좋습니다.

원문 읽기(새 탭에서 열림)
github4분 읽기큐레이션 요약

내부 살펴보기: GitHub

GitHub Agentic Workflows는 에이전트를 기존 CI/CD에 통합하되, 에이전트의 비결정성과 프롬프트 인젝션 위험을 전제로 설계된 보안 아키텍처를 사용합니다. 핵심은 자유로운 에이전트 작성과 통제된 실행을 분리하고, 워크플로를 명시적인 권한·출력·네트워크·감사 제약이 있는 GitHub Actions로 컴파일하는 것입니다. 특히 에이전트에 비밀을 직접 제공하지 않고, 계층적 격리와 단계적 쓰기 검증으로 피해 범위를 제한합니다. ## 에이전트 자동화가 만드는 새로운 위협 - 에이전트는 저장소 상태와 외부 입력을 해석해 런타임에 자율적으로 결정을 내리므로 기본적으로 신뢰할 수 없습니다. - GitHub Actions는 구성 요소들이 하나의 신뢰 도메인에서 실행되는 비교적 개방적인 환경입니다. - 에이전트가 손상되면 다음과 같은 행동이 가능해질 수 있습니다. - MCP 서버와 상호작용 - 인증 토큰과 환경 변수 접근 - 임의의 인터넷 호스트로 네트워크 요청 - 악성 이슈·웹 페이지를 통한 프롬프트 인젝션 실행 - 원치 않는 커밋, 댓글, 이슈 생성 - 따라서 기본 보안 모드는 에이전트가 읽거나 쓰면 안 되는 상태에 접근하고, 허가되지 않은 통신 채널을 악용한다고 가정합니다. ## 다층 방어 구조 GitHub Agentic Workflows는 **기반 인프라(substrate)**, **구성(configuration)**, **계획(planning)**의 세 계층으로 방어합니다. - **기반 인프라 계층** - GitHub Actions 러너 VM과 신뢰된 컨테이너를 사용합니다. - 컨테이너 격리, 커널 수준 통신 경계, 권한 있는 작업과 시스템 호출 중재를 제공합니다. - 사용자 수준 구성 요소가 손상되어 컨테이너 내부에서 임의 코드를 실행하더라도 격리 경계를 넘는 피해를 제한합니다. - **구성 계층** - 어떤 구성 요소를 실행하고 서로 어떻게 연결할지 선언적으로 정의합니다. - 허용되는 통신 채널과 각 구성 요소의 권한을 결정합니다. - 에이전트 API 키와 GitHub 토큰 같은 외부 자격 증명을 어떤 컨테이너에 주입할지 통제합니다. - 컴파일러, 방화벽 정책, MCP 설정 등이 이 계층에 포함됩니다. - **계획 계층** - 구성 계층이 정한 구성 요소들을 언제, 어떤 순서로 실행할지 결정합니다. - 구성 요소 간 데이터 교환을 명시한 단계적 워크플로를 생성합니다. - 안전한 출력 시스템을 통해 쓰기 작업을 검증하고 제한하는 역할을 담당합니다. ## 에이전트에 비밀을 제공하지 않는 설계 - 일반적인 GitHub Actions 환경에서는 여러 프로세스가 환경 변수와 설정 파일에 저장된 토큰을 볼 수 있습니다. - 프롬프트 인젝션을 받은 에이전트는 셸 도구를 이용해 다음 정보에 접근할 수 있습니다. - 설정 파일 - SSH 키 - Linux `/proc` 상태 - 워크플로 로그 - 탈취한 자격 증명은 외부 웹사이트로 전송하거나 공개 이슈·풀 리퀘스트·댓글에 삽입할 수 있습니다. - 이를 막기 위해 에이전트를 별도 컨테이너에서 실행하고 네트워크 경로를 제한합니다. - 인터넷 접속은 방화벽을 통해 통제 - MCP 호출은 신뢰된 MCP 게이트웨이를 통해서만 허용 - LLM 호출은 API 프록시를 통해 중계 - MCP 게이트웨이는 별도의 신뢰 컨테이너에서 MCP 서버를 실행하며, MCP 인증 정보에 독점적으로 접근합니다. - 에이전트 컨테이너는 LLM 인증 토큰을 직접 보지 않고, 격리된 API 프록시가 인증을 대신 처리하는 구조를 사용합니다. ## 네트워크와 권한의 제한 - 에이전트와 방화벽 사이에 전용 사설 네트워크를 구성해 인터넷 연결을 통제합니다. - 허용 목록 기반 방화벽 정책으로 에이전트가 통신할 수 있는 대상과 채널을 제한합니다. - MCP 서버와 LLM API를 직접 노출하지 않고 각각 게이트웨이와 프록시 뒤에 배치합니다. - 이 구조는 에이전트가 손상되더라도 임의의 외부 호스트로 데이터를 반출하거나 인증 서비스를 직접 악용하는 가능성을 줄입니다. ## 안전한 쓰기와 감사 가능성 - 에이전트가 저장소나 GitHub 객체에 직접 자유롭게 쓰지 못하도록 출력 단계를 별도로 통제합니다. - 계획 계층의 안전한 출력 시스템은 다음을 담당하도록 설계됩니다. - GitHub 쓰기 작업의 허용 여부 결정 - 호출 가능한 기능과 호출 횟수 제한 - 출력에서 비밀 정보 제거 - 부적절하거나 원치 않는 내용 조정 - 에이전트의 실행 결과와 외부 효과를 추적할 수 있도록 모든 작업을 기록하는 원칙을 적용합니다. - 결과적으로 에이전트의 자유로운 추론 능력은 유지하되, 실제 커밋·댓글·이슈 생성 같은 효과는 검증된 단계와 명시적 정책을 거쳐야 합니다. ## 실용적인 결론 에이전트 기반 CI/CD를 도입할 때는 에이전트를 일반 스크립트처럼 신뢰하지 말고, 처음부터 침해 가능성을 전제로 설계해야 합니다. 별도 컨테이너 격리, 비밀의 프록시 위임, 허용 목록 네트워크, 단계적 쓰기 검증, 전체 감사 로그를 함께 적용하는 것이 안전한 기본값입니다.

원문 읽기(새 탭에서 열림)