본문으로 건너뛰기
피드

AI가 건드린 코드, 신뢰 등급으로 막는 오픈소스 도구 ‘tears’

open-source 약 8분
vote
0
댓글
북마크

tears는 저장소 안의 파일마다 신뢰 등급을 붙이고, AI 에이전트가 수정한 파일은 자동으로 낮은 등급으로 내리는 도구야. 핵심은 인증, 결제, 보안 같은 중요한 코드가 검토 안 된 코드에 의존하지 못하게 CI에서 막는 구조야.

  • 1

    파일 헤더의 @tear 값으로 코드 신뢰 등급을 관리함

  • 2

    AI 에이전트가 파일을 수정하면 훅이 해당 파일의 등급을 자동으로 낮춤

  • 3

    CI는 높은 신뢰 등급의 코드가 낮은 신뢰 등급 코드에 의존하는 것을 차단함

  • 4

    현재 기계적 스캔은 Python이 기본이고 여러 언어는 설정으로 켤 수 있음

  • 5

    Claude Code, Codex, OpenCode 훅과 pre-commit, GitHub Actions 연동을 제공함

AI 코딩을 막는 게 아니라, 위험한 코드 경로를 막는 도구

  • tears는 저장소 안의 모든 파일을 같은 기준으로 리뷰하지 말자는 문제의식에서 출발함

    • 대시보드, 스크립트, 프로토타입은 빠르게 바꿔도 되지만 인증, 결제, 핵심 비즈니스 로직은 훨씬 조심해야 한다는 얘기
    • 문제는 이 코드들이 같은 저장소에 살다 보면, 검토 안 된 모듈이 민감한 코드로 슬쩍 import될 수 있다는 점임
  • 해결 방식은 파일마다 @tear 헤더로 신뢰 등급을 붙이는 것

    • @tear: 0은 보안 중요 코드나 도메인 오너가 깊게 리뷰한 코드
    • @tear: 1은 사람이 줄 단위로 리뷰한 코드
    • @tear: 2는 데이터 유출, 네트워크 호출, 뻔한 보안 문제 정도를 훑어본 코드
    • @tear: 3은 이른바 바이브 코딩(vibe coding)으로 만든 코드

중요

> 숫자가 낮을수록 더 신뢰된 코드임. 핵심 규칙은 신뢰 높은 코드가 신뢰 낮은 코드에 의존하지 못하게 막는 것임.

  • import 규칙은 꽤 직관적임. 같은 등급이거나 더 신뢰 높은 코드만 가져올 수 있음
    • 0 등급 파일은 0만 import 가능
    • 1 등급 파일은 0, 1을 import 가능
    • 2 등급 파일은 0, 1, 2를 import 가능
    • 3 등급 파일은 사실상 전부 import 가능

AI가 파일을 건드리면 등급이 내려감

  • tears에서 제일 재밌는 장치는 “diff에 남는 신뢰 등급 변경”임

    • AI 에이전트가 파일을 수정하면 훅이 해당 파일의 헤더를 자동으로 낮은 신뢰 등급으로 바꿈
    • 사람이 리뷰한 뒤 등급을 다시 올릴 수 있음
    • 만약 diff에서 그 변경을 보고 되돌렸다면, 적어도 그 코드를 봤다는 뜻이 됨
  • 지원하는 에이전트 훅은 Claude Code, Codex, OpenCode 쪽으로 준비돼 있음

    • Claude Code는 Edit, Write, MultiEdit 이후 stdin JSON payload에서 수정 파일 경로를 읽음
    • Codex는 현재 apply_patch 편집만 처리하고, PostToolUse payload에서 파일 경로를 뽑아 공통 훅 로직에 넘김
    • OpenCode 플러그인은 edit, write, apply_patch 호출을 감지해 uv run python -m tears.hook FILE을 실행함
  • 단, 아직 한계도 분명함

    • Codex 훅은 repo-local 방식이고 패키지 설치형이 아님
    • Codex는 사용자가 시작 시 훅 활성화에 동의해야 동작함
    • OpenCode 플러그인도 아직 repo-local 방식임

도입 방식은 부드러운 시험 모드부터 가능

  • 바로 전체 저장소를 엄격하게 막는 구조는 아님. soft trial mode가 있음

    • default_tear = 1을 쓰면 기존에 헤더가 없는 파일을 일단 리뷰된 코드처럼 취급함
    • 이후 준비가 되면 default_tear3으로 바꾸거나 제거해서 더 엄격한 모드로 갈 수 있음
    • --missing-only 옵션은 기존에 의도적으로 붙인 등급은 건드리지 않고, 헤더 없는 파일만 태깅함
  • 설정은 .tears.toml에서 읽고, 꽤 많은 조절 포인트가 있음

    • max_tear는 최고 등급 숫자이며 기본값은 3
    • missing_header는 헤더 없는 파일을 경고로 볼지 에러로 볼지 정함
    • languages는 스캔할 언어 목록이고 기본값은 python
    • directory_requirements로 민감한 경로가 특정 신뢰 등급 이하로 내려가지 못하게 할 수 있음
    • artificial_tears로 특정 파일에 별도 import 예산을 줄 수도 있음
  • 현재 스캐너는 Python이 기본이고, 다른 언어는 설정으로 켜는 방식임

    • 지원 목록에는 C, C++, C#, Dart, Go, Java, JavaScript, Kotlin, PHP, Ruby, Rust, TypeScript가 있음
    • 다만 import resolution은 로컬 기준의 보수적 분석이고, 패키지 alias나 빌드 메타데이터는 아직 모델링하지 않음
    • tears PATH에서 PATH는 하위 필터가 아니라 설정과 스캔의 루트로 취급됨

💡

> 이 도구는 “AI가 만든 코드는 나쁘다”가 아니라 “아직 사람이 읽지 않은 코드는 민감한 경로로 못 들어오게 하자”에 가까움. 내부 도구나 대시보드는 빨리 만들고, 인증/결제 쪽 경계만 CI로 잠그는 식으로 쓸 수 있음.

sequenceDiagram
    participant 에이전트 as AI 에이전트
    participant 파일 as 소스 파일
    participant 훅 as tears 훅
    participant 리뷰어 as 사람 리뷰어
    participant 씨아이 as CI
    에이전트->>파일: 코드 수정
    훅->>파일: @tear 등급 자동 하향
    리뷰어->>파일: diff 확인 후 등급 복원
    씨아이->>파일: import 신뢰 규칙 검사
    씨아이-->>리뷰어: 위반 시 병합 차단

기술 맥락

  • tears가 고른 핵심 선택은 코드 신뢰도를 외부 시스템이 아니라 파일 헤더에 넣는 방식이에요. 별도 대시보드나 스프레드시트는 시간이 지나면 실제 코드와 어긋나기 쉬운데, 헤더는 diff와 함께 움직이니까 리뷰 과정에서 자연스럽게 보이거든요.

  • import 방향을 신뢰 등급으로 제한하는 것도 중요한 선택이에요. 보안상 위험한 건 낮은 품질의 코드 자체보다, 그 코드가 인증이나 결제 같은 핵심 경로로 흘러 들어오는 상황이기 때문이에요. 그래서 @tear: 0 코드는 같은 0 등급만 import하게 막는 구조가 나와요.

  • AI 에이전트 훅은 “누가 코드를 썼는가”보다 “사람이 다시 읽었는가”를 남기려는 장치예요. 에이전트가 건드리면 등급을 낮추고, 사람이 diff에서 그 변경을 되돌리면 검토했다는 흔적이 남아요. 리뷰 여부를 말로 주장하는 대신 변경 내역으로 확인하게 만드는 셈이에요.

  • 아직 구현은 현실적인 제약이 있어요. Python이 기본 스캔 대상이고, 다른 언어는 켤 수 있지만 import 해석은 로컬 기준의 보수적 방식이에요. 패키지 alias나 빌드 시스템까지 정확히 따라가는 단계는 아니라서, 대규모 다언어 저장소에서는 trial mode로 먼저 돌려보는 게 맞아요.

AI 코딩 도구를 막자는 얘기가 아니라, ‘어디까지 믿을 수 있는 코드인가’를 저장소 안에 남기자는 접근이 재밌어. 코드 리뷰를 했다는 사실을 외부 문서가 아니라 diff 자체로 증명하게 만드는 게 이 도구의 핵심임.

댓글

댓글

댓글을 불러오는 중...

open-source

NIPA, 260명 규모 오픈소스 컨트리뷰션 아카데미 시작

정보통신산업진흥원이 2026 오픈소스 컨트리뷰션 아카데미 발대식을 열고 13주간의 프로젝트 활동을 시작했음. 국내 개발자들이 GitHub 기반 글로벌 협업 환경에서 코드, 문서, 버그 수정, 풀 리퀘스트를 직접 경험하게 하는 프로그램임.

open-source

그누보드7, 디딤과 손잡고 멀티클라우드 도입 문턱 낮춘다

에스아이알소프트가 클라우드 전문기업 디딤과 협력해 그누보드7 기반 웹서비스 구축·운영 환경을 넓히기로 했다. 커뮤니티, 쇼핑몰, 예약, 구독형 서비스 같은 실무 프로젝트에서 서버 구성과 운영 부담을 줄이는 게 핵심이다.

open-source

오픈소스 컨트리뷰션 아카데미 출범, 국내 개발자 260여 명 참여

정보통신산업진흥원이 2026 오픈소스 컨트리뷰션 아카데미 발대식을 열고 13주간의 활동을 시작했다. 11개 프로젝트팀의 멘토와 멘티 260여 명이 글로벌 오픈소스 프로젝트 기여를 목표로 코드 개발, 문서화, 오류 수정 등을 진행한다.

open-source

NIPA, 국내 개발자 260명 규모 오픈소스 컨트리뷰션 아카데미 시작

정보통신산업진흥원이 2026 오픈소스 컨트리뷰션 아카데미 발대식을 열고 국내 개발자의 글로벌 오픈소스 프로젝트 참여를 지원한다. 11개 프로젝트팀, 멘토·멘티 260여 명이 13주 동안 깃허브 기반 협업, 코드 리뷰, 문서화, 오류 수정 등을 실제로 경험한다.

open-source

Ghostty 엔진을 Emacs 안으로 끌고 온 터미널, Ghostel.el

Ghostel.el은 Ghostty의 libghostty-vt를 기반으로 Emacs 안에서 동작하는 터미널 에뮬레이터다. eat 스타일의 여러 입력 모드, 안정적인 복사 모드, line mode, 자동 password prompt 처리, compile-mode 유사 실행 버퍼, Kitty graphics 지원, 높은 throughput을 앞세워 eat/vterm과 차별화함.