목록 보기
린트 적용으로 코드 대량 변경 시 AST를 이용해 검증하기
백엔드

린트 적용으로 코드 대량 변경 시 AST를 이용해 검증하기

라인
라인
2024년 2월 23일

두줄요약

ktlint 업데이트로 대량 변경이 발생했을 때 AST 비교로 실제 동작 코드 변화만 검증하는 방법을 소개했습니다. 자동 포매팅의 오동작을 선별해 리뷰와 검증 비용을 크게 줄였습니다.

문제 상황

  • ktlint 버전 업데이트로 기존 코드에 새 규칙이 대량 적용되며 예상치 못한 오류와 대규모 변경 발생
  • 자동 포매터가 코드의 표현만 바꿔야 하는데 기본 인자 누락 같은 오동작 가능성 존재

원인 분석

  • 린트 규칙 강화로 기존 코드가 일괄적으로 위반 상태로 판정
  • 공백, 주석, 어노테이션처럼 실행에 직접 영향 없는 요소와 실제 동작 코드가 섞여 검증 난이도 상승

해결 방법

  • kotlin-compiler-embeddable로 PSI/AST를 생성하고 의미 없는 노드를 제외한 뒤 전후 트리를 비교
  • 파일별 변경 내용을 zip 비교해 AST가 달라진 경우만 추출하고, 실제 동작 코드 변경 여부를 검증

주의할 점

  • 불필요한 괄호처럼 포매터가 구조를 바꿀 수 있는 요소는 사전 정리 필요
  • 주석 처리된 코드가 실제 구문으로 바뀌는 사례처럼 단순 텍스트 diff만으로는 검출 한계 존재

적용해볼 점

  • 대량 린트 적용 전후에 AST 기반 검증 절차를 두어 안전성 확보
  • 자동 수정 결과를 전수 수동 검토하지 않고, 의심 변경만 선별해 리뷰 효율 개선

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...