Joyuno's Dev Blog

2026-05-09 (토) 개발일지

dev-blog

오늘은 bit-scalp 프로젝트의 macro_engine.py를 Claude Sonnet 3.5로 리팩토링하고 디버깅한 하루였다. 로그 분석부터 코드 생성까지 체계적 프롬프팅을 시도했는데, 컨텍스트를 코드 스니펫 + 실행 로그로 제공하니 AI의 제안이 실전에서 바로 먹혔다.

코드 리팩토링 프롬프트 최적화

기존엔 “이 코드 개선해줘” 식으로 전체 파일을 던졌더니, AI가 불필요한 제너릭 패턴을 뱉어냈다.

“macro_engine.py의 메인 루프를 더 효율적으로 만들어줘. 현재 구조: while 루프 안에서 API 호출 반복.”

이번엔 함수별 역할 + 예상 입력/출력을 먼저 나열한 후 물어봤다. Claude가 macro_engine.py의 상태 머신 로직을 정확히 파악해, 비동기 처리로 변환 제안.

잘 통한 점:

  • 스니펫 20줄 + “이 부분의 병목: API 호출 100ms 지연” 설명 → 15분 만에 동작 코드.
  • Sonnet 3.5의 컨텍스트 창(200k 토큰) 활용으로 전체 파일 검토 OK.

안 통한 점:

  • 입력 예시를 생략하니 엣지 케이스(빈 리스트) 무시 → 로컬 python3 테스트에서 뻑남.
시도 프롬프트 스타일 결과
1회 전체 코드 던지기 일반론( “try-except 추가” )
2회 역할+입력/출력 실제 동작 코드 (통과율 90%)

노하우: 다음엔 macro_engine.py 변경 전/후를 diff 형식으로 AI에 보여주며 검증.

디버깅 시 로그 컨텍스트 제공

python3 macro_engine.py 실행 중 문자열 파싱 에러가 발생했다. strings로 바이너리 덤프 확인 후 Claude에 넘김.

“이 로그 봐: ‘Invalid macro string: \x00’. macro_engine.py 45라인에서 문자열 처리 중.”

AI가 바이너리 문자열 인코딩 문제를 바로 짚었고, encode('utf-8', errors='ignore') 패치 제안. 적용 후 재실행 성공.

잘 통한 점:

  • 로그 10줄 + 라인 번호 지정 → AI가 “45라인의 split()이 null 바이트 무시” 정확 진단.
  • 분업 지점: AI는 원인 분석, 나는 python3으로 검증.

안 통한 점:

  • 로그만 주니 하드웨어 의존성(플랫폼 문자열 처리) 놓침 → macOS vs Linux 차이 직접 테스트 필요.

다음 디버깅 플로우:

  1. strings로 로그 필터링.
  2. Claude에 “로그 + 해당 코드 10줄” 제공.
  3. 제안 즉시 python3 단위 테스트.

의존성 관리와 설치 스크립트 생성

pip으로 새 라이브러리 추가 중 충돌. echo로 버전 고정 스크립트 만들려다 Claude 활용.

“requirements.txt에 다음 추가: library==1.2.3. macro_engine.py에서 import 에러 날 수 있음.”

AI가 requirements 충돌 체크 + 설치 순서 스크립트 생성. pip install --upgrade 우선순위 제안으로 5분 만에 해결.

잘 통한 점:

  • 현재 pip list 출력 첨부 → 버전 호환성 100% 맞춤 제안.

안 통한 점:

  • AI가 가상환경 가정 → 실제 echo > .env로 환경 변수 직접 세팅.

배운 점: pip 관련은 “현재 설치 목록 + 에러 로그” 패턴으로 고정. # 주석으로 스크립트 옵션 나열해 AI가 이해 쉽게.

오늘의 한줄

Claude에 로그 + 코드 스니펫 조합 프롬프트가 디버깅 속도를 2배 올렸지만, 플랫폼 차이는 여전히 인간 검증 필수.