피드로 돌아가기
Dev.toBackend
원문 읽기
AST 정규화 및 SHA-256 해싱을 통한 중복 코드 제출 차단 및 AI 비용 최적화
Code Fingerprinting: Detecting Duplicate Submissions Without Losing Your Mind (or Your API Budget)
AI 요약
Context
동일한 로직의 코드 중복 제출로 인한 AI API 토큰 낭비와 DB 메모리 소비 및 RPC 호출 증가 문제 발생. 단순 Rate Limiting으로는 요청 본문의 내용 기반 중복을 식별할 수 없는 구조적 한계 존재.
Technical Solution
- Babel 및 Tree-sitter를 활용하여 소스 코드를 추상 구문 트리(AST)로 변환함으로써 표면적 문법 요소를 제거한 구조적 스켈레톤 추출
- 변수명 등 비내장 식별자를 v0, v1 등의 제네릭 이름으로 치환하는 AST 정규화 과정을 통해 서로 다른 변수명을 사용한 동일 로직 코드의 일관성 확보
- 정규화된 AST를 다시 컴팩트한 소스 코드로 생성한 뒤 SHA-256 해시 함수를 적용하여 고정 길이의 유니크한 Fingerprint 생성
- 생성된 해시 값을 PostgreSQL에 인덱싱하여 저장함으로써 신규 제출 건에 대해 O(1) 수준의 빠른 중복 여부 판별 및 캐시 응답 반환 구조 설계
- JS/TS는 Babel의 @babel/traverse를 통한 정밀 제어를 수행하고 그 외 7개 언어는 Tree-sitter의 패턴 매칭을 통한 범용적 파싱 전략 채택
실천 포인트
1. 요청 데이터의 단순 일치 여부가 아닌 구조적 동일성 판별이 필요한지 검토
2. 언어별 AST 파서 선정 시 정규화(Normalization) 및 트래버설(Traversal) 지원 여부 확인
3. 복잡한 트리 구조의 직접 저장 대신 해시 기반의 핑거프린팅 기법 적용 고려
4. 내장 함수(Built-in) 리스트를 정의하여 정규화 대상에서 제외함으로써 코드의 의미론적 정체성 유지