Community코딩 & 개발github.com

boshu2/refactor

동작을 유지하면서 구조, 인터페이스 또는 책임을 단순화합니다. 집중적인 리팩토링이 요청되거나 기능 변경에 별도의 의도가 필요할 때 사용하세요.

refactor란 무엇인가요?

Refactor 스킬은 관찰 가능한 동작(behavior)을 변경하지 않고 코드 구조를 개선하는 데 특화된 AI 에이전트 도구입니다. 개발자가 리팩토링 요청을 하면, 이 스킬은 먼저 보존할 동작과 집중할 테스트 범위를 명확히 지정하고, 기준선(baseline)을 기록합니다. 그런 다음 추출, 이름 변경, 인라인화, 단순화, 캡슐화, 이동, 죽은 코드 제거 중 하나의 변환을 적용하고, 사전/사후 테스트 결과와 diff를 보고합니다. 이 스킬은 파일 크기나 코드의 양보다는 호출자(caller)가 이해해야 할 개념과 도메인 규칙의 변경 가능성에 초점을 맞추며, 동작 변경과 구조 변경을 분리하여 처리합니다. Red(테스트 실패) 결과가 나오면 자동으로 되돌리거나 재시도하지 않고, 발견된 사실을 개발자에게 보고합니다. 또한 인터페이스나 모듈 분할 시 여러 후보군을 탐색(probe)하고, 잘못된 경계를 코드베이스에 직접 적용하는 '조기 분할( premature seam )' 오류를 방지하도록 설계되었습니다. 중립성 게이트(Neutrality gates)를 통해 해시 비교, 테스트 결과 일치 등을 확인하여 동작이 실제로 보존되었는지 검증하며, 검증되지 않은 부분은 반드시 보고서에 명시합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/boshu2/agentops/tree/main/skills/refactor

Installed? Explore more 코딩 & 개발 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

리팩토링 — 하나의 구조적 실험

리팩토링은 관찰 가능한 동작을 유지하면서 구조를 변경합니다. 호출자가 선택한 하나의 변환을 수행하고 결과를 보고합니다.

프롬프트

billing-service/internal/retry/backoff.go 리팩토링: RetryRequest에서 지수 백오프 계산을 별도의 함수로 추출하세요. 다른 동작 변경은 없습니다. 기준선을 기록하고, 변경 전후에 go test ./internal/retry/... 를 실행하고, diff 요약, 명령어, 결과, 그리고 점검되지 않은 부분을 보고하세요.

작동 조건

  • 보고서는 보존된 동작을 명시하고, 변경 전후에 go test ./internal/retry/... 를 실행했음을 인용해야 합니다.
  • git diff --stat 는 internal/retry/backoff.go 만을 수정해야 하며, 관련 없는 파일을 수정해서는 안 됩니다.
  • 골든 출력 해시는 변경된 표면이 출력을 생성할 때마다(예: 변경 전후 sha256sum) 캡처되어 바이트 단위로 비교되어야 합니다.
  • 보고서의 점검되지 않은 동작 목록은 비어 있더라도 출력에 반드시 존재해야 하며, 게이트가 건너뛴 모든 표면을 명시해야 합니다.

절차

  1. 보존할 동작, 집중할 승인 표면, 그리고 호출자에게 구체적인 구조적 문제점을 명명합니다. 호출자의 도메인 용어와 수용된 동작 예시를 재사용하고, 변경을 통해 그 의미를 보존합니다.
  2. 재현 가능한 기존 실패를 포함하여 정직한 기준선을 기록합니다. 실행 가능한 동작을 비교하는 평가의 경우, 시작 소스를 고정하고 편집 전에 기준선을 빌드합니다. 해당 바이너리와 비교 입력을 유지합니다. 동일한 도구 체인과 해당 입력을 사용하여 후보를 비교합니다. 이는 일반적인 리팩토링에 실행 가능한 비교 의식을 추가하지 않습니다.
  3. 하나의 경계된 변환(추출, 이름 변경, 인라인화, 단순화, 캡슐화, 이동, 죽은 코드 제거)을 적용합니다. 결과를 파일 크기만으로 판단하지 말고, 호출자가 이해해야 할 사항과 도메인 규칙을 변경해야 하는 위치를 기준으로 판단합니다.
  4. 집중 점검과 변경된 표면으로 정당화되는 가장 작은 패키지 수준의 회귀 점검을 실행합니다.
  5. diff 요약, 명령어, 결과, 그리고 점검되지 않은 동작을 반환합니다.

새로 발견된 동작 수정을 구조적 변경과 결합하지 마십시오. 빨간색 결과는 호출자에 대한 증거입니다. 이 스킬은 자동으로 되돌리거나, 범위를 좁히거나, 재시도하거나, 커밋하거나, 검증하거나, 후속 작업을 라우팅하지 않습니다.

책임 및 인터페이스 비용

인터페이스를 추가하거나 모듈을 분할하기 전에 대표적인 호출자를 검사하십시오. 호출자가 조정해야 하는 개념(필요한 설정, 순서, 상태, 오류 처리 및 반복되는 도메인 규칙)의 수를 세십시오. 유용한 경계는 응집력 있는 규칙을 하나의 소유자 아래에 두고 호출자가 해당 규칙을 재현하지 않고도 결과를 요청할 수 있게 합니다. 단순히 다른 이름을 추가하거나 동일한 조정을 호출자에게 떠넘기는 래퍼는 거부하십시오. 구체적인 호출자 문제가 경계 변경을 정당화하지 않는 한, 기존 경계로 충분합니다.

추출된 작업 및 유형에 대해 호출자의 어휘를 사용하십시오. 동작을 변경하는 명명 모호성은 기존 도메인 정의에 속합니다. 해당 구분이 필요한 경우에만 도메인을 참조하십시오. 공개 심볼, 영구 필드 또는 프로토콜 값의 이름을 변경하는 것은 허용된 범위에서 제공하지 않는 한 호환성 변경입니다.

변환에 이음새(추출 경계, 인터페이스 또는 모듈 분할)가 필요하고 둘 이상의 후보 이음새가 있는 경우, 자르기 전에 탐색하십시오. 탐색은 일회용 격리 환경(호출자 정책이 허용하는 스크래치 브랜치, 작업 트리 또는 복사된 트리)에서 실행하십시오. 이음새를 대략적으로 넣어보고, 그것이 강제하는 것(시그니처 변경, 임포트 순환, 테스트 재작성)을 확인한 다음, 탐색을 폐기하고 지식만 유지하십시오. 중단 조건: 최대 두 번의 탐색; 두 번째 후보 이음새도 저항하는 경우, 세 번째를 시도하는 대신 두 발견 사항을 모두 호출자에게 보고하십시오. 첫 번째 상상 가능한 이음새를 작업 트리에 직접 자르는 것은 조기 이음새 실패 모드입니다. 지금 되돌리는 비용이 그대로 유지하는 비용보다 더 크기 때문에 잘못된 경계가 굳어집니다.

중립성 게이트

"동작 보존"은 단언이 아니라 실행해야 할 주장입니다. 변환을 동작 동일성 증명에 조건을 두십시오:

  • 집중 점검과 패키지 수준 회귀 점검이 변경 전후 모두 통과하고, 사전에 존재하던 실패 집합과 동일해야 합니다. — 새로운 빨간색이 없고, 조용히 사라진 빨간색도 없어야 합니다(테스트가 실행을 멈추는 것은 동작 변경입니다).
  • 출력을 생성하는 표면(생성기, 직렬화기, 포매터, 보고서)의 경우, 출력의 해시를 계산하십시오. 변경 전에 동일한 입력에 대한 골든 출력 해시를 캡처하고 변경 후 바이트 단위로 비교하십시오. 해시 불일치는 표면화하고 설명해야 할 동작 차이이며, 무시해서는 안 됩니다. 호출자가 변경을 유지할지, 범위를 좁힐지, 되돌릴지 결정합니다.
  • 변경된 표면의 관찰 가능한 오류 메시지, 종료 코드 및 공개 시그니처는 호출자가 이를 제외하지 않는 한 동작의 일부입니다.

사후에 건너뛰거나 범위가 좁혀진 중립성 게이트는 사후 중립성 실패 모드입니다. — diff가 무엇을 테스트할지 결정합니다. 보고서의 점검되지 않은 동작 목록에서 게이트가 다루지 않은 모든 표면을 명시하십시오.

참고

Individual skills in this repo

This repo contains 9 individual skills — each has its own dedicated page.

관련 스킬