2026년 5월 1일 | 바이브코딩 Tips
긴 코딩 에이전트 세션은 대개 코드가 아니라 문맥부터 흐려진다. 처음에는 목표와 금지 범위가 꽤 선명했는데, 파일을 몇 번 읽고 테스트를 몇 번 고치고 나면 “지금 어디까지 해도 되는지”가 애매해진다. 모델이 갑자기 멍청해져서라기보다, 사람이 머릿속에 들고 있던 기준이 대화 안에서 계속 갱신되지 않았기 때문이다. 나는 이 구간에서 프롬프트를 더 길게 쓰기보다, 압축이나 handoff 전에 작은 세션 스냅샷을 남기는 쪽이 더 안정적이라고 느낀다.
여기서 말하는 세션 스냅샷은 회고문이 아니다. “무엇을 했다”를 예쁘게 요약하는 문서도 아니다. 다음 에이전트 호출, 다음 작업자, 혹은 몇 시간 뒤의 내가 다시 이어받을 수 있도록 목표, 현재 상태, 남은 위험, 다음 검증만 네 줄로 고정하는 작은 재개 계약에 가깝다. 글자 수로는 짧지만, 이 네 줄이 없으면 긴 세션은 의외로 쉽게 다른 작업으로 변한다.
바이브코딩에서는 이 문제가 더 자주 보인다. 자연어로 “조금만 더 다듬어 줘”라고 던지는 순간, 에이전트는 방금 실패한 테스트보다 더 넓은 개선을 상상할 수 있다. 처음에는 한 컴포넌트의 상태 표시만 고치려 했는데, 어느새 데이터 흐름과 설정 파일까지 만지는 식이다. 그래서 나는 큰 작업을 끌고 갈수록 대화의 마지막을 다음 대화의 시작점으로 만드는 장치가 필요하다고 본다.
Figure 1: 압축이나 handoff 전에 목표, 현재 상태, 남은 위험, 다음 검증을 네 줄로 묶는 세션 스냅샷.
그림에서 내가 제일 중요하게 보는 부분은 “현재 상태” 다음에 바로 “다음 작업”을 적지 않는다는 점이다. 중간에 남은 위험을 한 칸 둬야 한다. 이 칸이 빠지면 다음 세션은 남은 의문을 해결할 문제로 보지 않고, 이미 합의된 요구사항처럼 취급하기 쉽다. 에이전트에게 맡기는 일이 많아질수록, 애매한 것은 애매하다고 따로 남겨야 한다.
1. 압축이 무서운 이유는 기억 상실이 아니다
context compaction이나 긴 대화 재개를 생각하면 보통 “앞 내용을 잊어버리면 어떡하지”부터 걱정한다. 물론 그것도 문제다. 그런데 내가 실제로 더 자주 겪은 실패는 단순한 기억 상실이 아니라 기준 손실이었다. 파일 이름이나 함수 이름은 다시 찾을 수 있는데, 왜 그 파일만 고치기로 했는지, 어떤 영역은 건드리면 안 된다고 봤는지, 테스트 실패를 어디까지 허용하기로 했는지가 사라진다.
이 기준이 흐려지면 에이전트는 꽤 성실하게 엉뚱해진다. 실패 로그를 더 읽고, 근처 파일을 더 찾고, “관련 있어 보이는” 개선을 붙인다. 겉으로는 일을 많이 하는데, 실제로는 처음의 작업 계약에서 멀어진다. 예전에 정리한 도구 계약서가 실행 전에 권한을 좁히는 장치라면, 세션 스냅샷은 작업 중간에 그 계약을 다시 접어 넣는 장치다.
2. 내가 남기는 네 줄
스냅샷을 길게 쓰면 안 남기게 된다. 나는 보통 아래 네 줄만 남긴다. 작업이 위험하면 표로 조금 더 적고, 단순하면 코드 블록 하나면 충분하다. 중요한 건 모든 맥락을 보존하는 게 아니라, 다음 실행이 잘못 시작하지 않을 만큼의 기준점을 남기는 것이다.
| 줄 | 적는 내용 | 막아 주는 실패 |
|---|---|---|
| 목표 | 이번 세션이 원래 끝내려던 상태를 한 문장으로 적는다. | 주변 리팩터링이나 새 기능으로 새는 문제 |
| 현재 상태 | 읽은 파일, 바뀐 파일, 통과한 검증과 실패한 검증을 분리한다. | 이미 확인한 내용을 다시 훑느라 시간을 쓰는 문제 |
| 남은 위험 | 아직 모호한 요구사항, 건드리면 안 되는 파일, 확인 못 한 가정을 둔다. | 모호한 결정을 이미 확정된 것처럼 실행하는 문제 |
| 다음 검증 | 다음 세션이 제일 먼저 돌릴 테스트, 화면 확인, diff 확인 순서를 쓴다. | 바로 수정부터 시작해 실패 원인을 덮는 문제 |
네 줄 중에서 가장 자주 빠지는 건 남은 위험이다. 에이전트가 만든 요약은 보통 “무엇을 했는가”에 치우친다. 그런데 이어서 작업할 때 더 필요한 정보는 “아직 믿으면 안 되는 것은 무엇인가”다. 실패한 테스트가 있다면 실패했다고 남기고, 사용자가 다시 결정해야 할 UX 문구가 있으면 결정 필요라고 남긴다. 불확실성을 감추지 않는 쪽이 다음 작업을 더 빠르게 만든다.
3. 스냅샷은 이렇게 짧아야 쓴다
내가 실제로 쓰는 모양은 대략 이렇다. 코드 블록으로 남겨도 되고, 이슈 댓글이나 PR 설명 끝에 붙여도 된다. 핵심은 다음 세션의 첫 프롬프트로 그대로 복사해도 이상하지 않은 형태를 유지하는 것이다.
세션 스냅샷
목표: 검색 결과 카드에서 빈 설명값이 보일 때 fallback 문구만 안정화한다.
현재 상태: SearchResultCard와 formatDescription을 읽었고, 카드 테스트 2개를 추가했다. lint는 통과, fallback edge case 1개는 아직 실패한다.
남은 위험: ranking 로직과 API 응답 스키마는 건드리지 않는다. 빈 문자열과 null을 같은 정책으로 볼지 결정이 필요하다.
다음 검증: 실패한 fallback 테스트를 먼저 다시 보고, 수정 후 카드 테스트와 diff --name-only를 확인한다.
이 정도면 세션이 압축되거나 새 대화로 넘어가도 시작점이 크게 흔들리지 않는다. 특히 마지막 줄의 “diff 확인”이 은근히 중요하다. 에이전트가 테스트를 통과시켰더라도 예상 밖의 파일을 건드렸다면, 그건 완료가 아니라 범위 복구 신호다. read:edit 비율을 보는 습관과 마찬가지로, 스냅샷도 결과보다 결과가 나온 경로를 보게 만든다.
4. hook으로 올릴 것과 손으로 남길 것
이 스냅샷을 매번 손으로 쓰는 게 귀찮다면 일부는 hook이나 routine으로 올릴 수 있다. 예를 들어 세션 종료 직전 변경 파일 목록, 마지막 테스트 결과, 실패한 명령 정도는 자동으로 붙일 수 있다. 나는 이런 자동 기록을 좋아한다. 사람이 기억해서 적는 것보다 누락이 적고, 나중에 “그때 뭘 돌렸더라”를 덜 묻게 된다.
다만 목표와 남은 위험은 아직 사람이 적는 편이 낫다. 자동 도구는 바뀐 파일을 잘 모으지만, 왜 그 파일만 허용했는지까지는 모른다. 사용자가 다시 결정해야 할 문구, 건드리면 안 되는 결제 흐름, 다음 세션에서 멈춰야 할 조건 같은 것은 작업자의 판단이 들어간다. 그래서 내가 보는 이상적인 조합은 기계가 상태를 모으고, 사람이 위험을 적는 방식이다.
이 구분은 hooks 가드레일과도 이어진다. hook은 반복되는 절차를 실행 계층에 묶는 데 좋고, 세션 스냅샷은 아직 판단이 필요한 경계를 다음 대화로 넘기는 데 좋다. 둘을 섞으면 “자동으로 남는 사실”과 “사람이 명시한 제한”이 분리된다. 이 분리가 있어야 다음 에이전트가 요약을 과신하지 않는다.
5. handoff bundle과의 차이
세션 스냅샷은 내가 전에 썼던 handoff bundle과 닮았지만, 쓰는 타이밍이 조금 다르다. handoff bundle은 모바일이나 외부 빌더에서 만든 초안을 데스크톱 검증으로 넘길 때 유용하다. 반면 세션 스냅샷은 같은 작업면 안에서도 자주 쓴다. 긴 대화가 압축되기 전, 모델을 바꾸기 전, 잠깐 중단하기 전처럼 문맥이 끊길 가능성이 있는 순간에 남기는 작은 체크포인트다.
그래서 handoff bundle이 “작업 산출물을 넘긴다”에 가깝다면, 세션 스냅샷은 “작업 기준을 잃지 않게 접어 둔다”에 가깝다. 둘 다 완료 보고가 아니다. 오히려 아직 완료가 아니라는 사실을 안전하게 보존하는 장치다. 이 차이를 알고 쓰면, 스냅샷을 불필요하게 크게 만들지 않게 된다. 네 줄이면 충분한 일을 문서 한 장으로 키우면 결국 안 쓰게 된다.
6. 내 기준의 종료 문장
바이브코딩 세션을 끝낼 때 나는 “다 했어?”보다 “다음에 어디서 다시 시작하지?”를 먼저 묻는 편이 낫다고 본다. 세션 스냅샷은 그 질문에 대한 최소 답이다. 목표가 남아 있고, 현재 상태가 남아 있고, 위험이 남아 있고, 다음 검증이 남아 있으면 이어서 작업할 수 있다. 반대로 코드가 많이 바뀌었는데 이 네 줄이 없으면, 다음 세션은 꽤 높은 확률로 처음부터 다시 추리한다.
이 습관이 작업을 느리게 만들지는 않았다. 오히려 중단하기가 쉬워졌다. 언제든 멈출 수 있어야 에이전트에게 더 작은 단위로 맡길 수 있고, 작은 단위로 맡길수록 실패를 되돌리기도 쉽다. 내 기준에서 좋은 바이브코딩 세션은 한 번에 끝나는 세션이 아니라, 끊겨도 기준이 남는 세션이다. 압축 전에 네 줄만 남겨도 그 차이는 꽤 크게 느껴진다.
'[개발 깨알 상식_Tips] > [바이브코딩 Tips]' 카테고리의 다른 글
| 스킬 설명: 호출 조건을 먼저 박기 (0) | 2026.05.03 |
|---|---|
| 종료 체크: 끝났다는 말 앞에서 볼 세 가지 (0) | 2026.05.02 |
| 도구 계약서: 실행 전에 허용 범위 묶기 (0) | 2026.04.30 |
| 모바일 Lovable 작업은 handoff bundle로 끊기 (0) | 2026.04.29 |
| 바이브코딩 Tips 3: Claude Code Routines에서 /schedule로 먼저 붙이고 API /fire는 중복 호출 막기 (1) | 2026.04.17 |