4P by darjeeling 5시간전 | ★ favorite | 댓글 1개

요약:

  • 20년 가까이 PLY(Python Lex-Yacc)를 기반으로 작동하던 C 언어 파서 'pycparser'를 LLM 코딩 에이전트(Codex)를 활용해 수동 작성 방식의 Recursive Descent 파서로 완전히 교체한 과정을 다룹니다.
  • 외부 의존성(PLY) 제거, 유지보수 난이도 감소, 성능 30% 향상이라는 성과를 거두었으며, 대규모 레거시 코드 리팩토링에서 LLM의 실용성을 입증했습니다.
  • LLM이 생성한 코드의 품질 문제(가독성, 복잡성 등)를 해결하기 위한 인간 개발자의 반복적인 검토와 프롬프트 엔지니어링의 중요성을 강조합니다.

상세요약:

  1. 배경 및 동기
    pycparser는 매일 약 2,000만 건의 다운로드를 기록하는 주요 오픈소스 프로젝트입니다. 기존에는 PLY 라이브러리를 사용해 C99 문법을 처리했으나, 다음과 같은 문제들이 누적되었습니다:
  • 의존성 문제: PLY 라이브러리가 관리 중단(Archived)되면서 보안 및 유지보수 리스크가 발생했습니다.
  • 문법 복잡성: C11, C23 등 최신 표준과 확장 문법을 지원하면서 YACC 특유의 reduce-reduce 충돌이 빈번해져 확장이 어려워졌습니다.
  • 철학적 변화: 저자는 시간이 흐르며 Parser Generator보다 직접 작성한 Recursive Descent 파서가 이해와 유지보수 면에서 유리하다는 확신을 갖게 되었습니다.
  1. LLM(Codex)과의 협업 과정
    저자는 혼자서 일주일 이상 걸릴 것으로 예상되는 이 작업을 LLM에게 맡기기로 했습니다. pycparser가 보유한 2,500라인 이상의 강력한 테스트 스위트가 LLM의 결과물을 검증하는 '가드레일' 역할을 했습니다.
  • 초기 이식: "lexer는 두고 parser만 Recursive Descent로 바꿔달라"는 프롬프트에 Codex는 한 시간 이상 작업하여 테스트를 통과하는 프로토타입을 만들어냈습니다.
  • 반복적인 개선: 초기 코드는 기능적으로는 완벽했으나 가독성이 낮고, 예외 처리를 제어 흐름에 남용하는 등 품질 면에서 아쉬움이 있었습니다. 저자는 'Git 브랜치'를 적극 활용하며 수십 번의 커밋을 통해 코드를 다듬었습니다.
  1. 결과 및 교훈
  • 성능 향상: 수동으로 작성된 파서는 기존 YACC 기반보다 약 30% 빠른 성능을 보였습니다.
  • 코드 품질과 유지보수: LLM은 게으르거나 복잡한 코드를 작성하는 경향이 있지만, 개발자가 명확한 지시(예: "X를 Y로 변경하라", "주석을 추가하라")를 내리면 효과적으로 대응했습니다.
  • 정적 타이핑의 중요성: 이후 작업에서 Python의 Type Annotation을 추가하자 LLM의 제안 정확도가 더 높아졌습니다. 저자는 향후 코딩 에이전트가 Rust나 TypeScript 같은 강타입 언어에서 더 강력한 성능을 발휘할 것이라고 예측했습니다.
  1. 결론
    저자는 이번 프로젝트를 통해 LLM이 단순한 장난감이 아니라 실질적인 생산성을 10배 이상 높여줄 수 있는 도구임을 확인했습니다. 약 30~40시간이 걸릴 작업을 4~5시간 만에 끝냈으며, 개발자가 흐름(Flow)에 진입하는 촉매제로서 LLM의 가치를 높게 평가했습니다.

애초에 저 작업을 30~40시간만에 할 생각한거 부터가 고인물...