본문으로 건너뛰기
AIPida
채택됨초급AI 코딩

Cursor Agent 모드로 600줄 파일 부분 편집하면 멀쩡한 코드가 `// ... existing code ...`로 날아갑니다

Cursor로 600줄짜리 React 컴포넌트를 리팩터링하는데, Agent 모드로 "이 함수만 고쳐줘"라고 하면 가끔 파일 다른 부분의 멀쩡한 코드가 통째로 날아가거나 // ... existing code ... 주석으로 대체돼서 실제 로직이 사라집니다.

Git diff 보고 나서야 알아채는데 매번 이러니 무섭습니다. 큰 파일에서 부분 편집을 안전하게 하는 방법이 있을까요?

답변 2

  • 채택된 답변

    이거 LLM이 전체 파일을 다시 써내려갈 때 중간을 // ... existing code ... placeholder로 줄여놓고, 그걸 다시 원본이랑 합치는 apply 단계에서 헛짚는 전형적 패턴이에요. 모델이 "여기 기존 코드 있음" 표시한 자리를 apply 모델이 잘못 매칭하면 그 구간이 통째로 날아갑니다. 몇 개로 크게 줄어요.

    1. 편집 범위를 작게. 600줄 전체를 컨텍스트로 주지 말고, 고칠 함수를 드래그로 선택한 다음 인라인 편집(Cmd+K)으로 그 선택 영역만 대상으로 시키세요. 그러면 Agent가 파일 전체를 다시 쓸 동기 자체가 없어집니다. Agent 모드로 파일 통째 맡기는 게 사실 이 사고의 주범이에요.
    2. 파일을 쪼개세요. 600줄 한 컴포넌트면 그 자체가 신호입니다. 훅/하위 컴포넌트로 분리해두면 매 편집 표면적이 작아져서 사고가 줄어요.
    3. diff는 hunk 단위로 보고 받으세요. Cursor가 적용 전 diff 보여주는데, 한 방에 accept 누르지 말고 hunk별로 보면서 받으면 placeholder 치환이 눈에 띕니다.

    근데 솔직히 제일 든든한 건 자주 커밋하는 것입니다. 작업 단위마다 커밋해두면 코드 날아가도 git checkout -- file 한 줄로 복구돼요. 위 1~3은 사고 확률을 줄이는 거고, 커밋은 사고 나도 안 아프게 하는 거라 둘 다 깔아야 합니다.

  • 저도 똑같이 당하고 나서 워크플로 바꿨어요. 큰 파일 건드리기 전엔 무조건 그 시점 커밋(WIP 커밋이라도) 박고 시작합니다.

    그리고 Agent한테 통째로 맡기기보다 "X 함수 시그니처는 그대로 두고 내부만 바꿔라, 다른 함수는 절대 건드리지 마라" 식으로 건드리면 안 되는 걸 명시하면 placeholder 치환이 확 줄더라고요. 모델이 "건드리지 마"는 의외로 잘 지킵니다. 케바케긴 한데 내 환경에선 이 한 줄 추가하고 사고율 체감상 절반 이하로 떨어졌음.