
백엔드
린트 적용으로 코드 대량 변경 시 AST를 이용해 검증하기
두줄요약
ktlint 업데이트로 대량 변경이 발생했을 때 AST 비교로 실제 동작 코드 변화만 검증하는 방법을 소개했습니다. 자동 포매팅의 오동작을 선별해 리뷰와 검증 비용을 크게 줄였습니다.
문제 상황
- ktlint 버전 업데이트로 기존 코드에 새 규칙이 대량 적용되며 예상치 못한 오류와 대규모 변경 발생
- 자동 포매터가 코드의 표현만 바꿔야 하는데 기본 인자 누락 같은 오동작 가능성 존재
원인 분석
- 린트 규칙 강화로 기존 코드가 일괄적으로 위반 상태로 판정
- 공백, 주석, 어노테이션처럼 실행에 직접 영향 없는 요소와 실제 동작 코드가 섞여 검증 난이도 상승
해결 방법
- kotlin-compiler-embeddable로 PSI/AST를 생성하고 의미 없는 노드를 제외한 뒤 전후 트리를 비교
- 파일별 변경 내용을 zip 비교해 AST가 달라진 경우만 추출하고, 실제 동작 코드 변경 여부를 검증
주의할 점
- 불필요한 괄호처럼 포매터가 구조를 바꿀 수 있는 요소는 사전 정리 필요
- 주석 처리된 코드가 실제 구문으로 바뀌는 사례처럼 단순 텍스트 diff만으로는 검출 한계 존재
적용해볼 점
- 대량 린트 적용 전후에 AST 기반 검증 절차를 두어 안전성 확보
- 자동 수정 결과를 전수 수동 검토하지 않고, 의심 변경만 선별해 리뷰 효율 개선