AI와 배포 안전망
결론부터 말하자면
2가지 작업을 진행할 예정
- AI 코드 생성시 생산된 코드에 맥락(코드의 목적과, 코드블럭이 어떤 액션을 일으키는지 등)을 주석으로 남기도록 스킬 업데이트
- PR이 머지되고 배포가 될 때마다, 일정 시간 에이전트가 모니터링을 하고 임계값을 넘는 경우 자동으로 롤백하고 슬랙 노티를 주는 시스템을 만들고자 한다.
(누가 만들어주면 좋것네~)
왜 하나요? 이건 코드리뷰에 대한 고민과 이어진다.
코드는 쏟아지는데, 리뷰가 병목이 되어간다
AI 덕분에 코드 생성 속도는 비약적으로 빨라졌다. 다만 AI 코드가 많아지고, 본인도 직접 작성하는 코드가 줄어들고 있는 시점에서 코드에 대한 신뢰도와, 점차 병목이 되어가는 코드리뷰에 대한 고민이 많아진다. 코드리뷰를 어떻게 해야 병목이 되지 않고, 유의미한 코드리뷰를 할 수 있을까?
Sonar의 서베이에 따르면 AI를 적극적으로 도입한 팀에서 PR 머지량은 98% 증가했지만, 리뷰 시간은 91% 늘어났다고 한다. 코드를 만드는 속도와 검증하는 속도 사이의 격차가 벌어지고 있다는거고, 아직은 AI 코드에서 여러 이슈들이 발생하고 있기도 하다(물론 이 부분은 매우 빠르게 발전해나갈거라고 생각함). 즉, 코드리뷰는 필요하고, 중요해지고있고, 엄청 많은 코드 속에서 AI 가 생산해 낸 이슈를 발견해야하고, 수정해야 한다. 이전보다 훨씬 더 많이…
그래서 사람은 코드리뷰에서 뭘 해야 할까?
아직 사람의 컨텍스트가, 그리고 뇌에서 순간적으로 교체되는 기억과 정보들이 AI보다 더 뛰어나다고 생각한다. 아직은. 언젠간 따라잡힐 수도 있지만, 지금 이 순간에는 AI가 아직 학습하지 못한, 컨텍스트에 주입된 적 없는, 스킬에 적혀있지 않은 부분들을 사람이 채워줘야 한다.
그러면 사람이 정말 한 줄 한 줄 읽으면서 휴리스틱하게 채워넣을 것인가? 불가능하다고 본다. 가능하더라도 너무 많은 시간이 소요된다.
그렇기에 사람이 해야 하는 건 낮은 레벨의 구현 검증이 아니다. 높은 레벨에서 — 이 코드의 목적이 뭔지, 과거에는 어떻게 했는지, 이 변경이 시스템 전체에 어떤 영향을 줄지를 판단하는 것이다. 그리고 AI가 리뷰하기 좋은 단위로, 사람이 읽기 좋은 커밋 메시지와 설명이 있는 코드를 AI에게 요구해야 한다.
Chrome 엔지니어링 리드 Addy Osmani는 이렇게 표현했다. “AI는 코드를 더 빠르게 작성한다. 당신이 할 일은 여전히 그것이 실제로 작동함을 증명하는 것이다.” 코드를 생성하는 것과, 그것이 작동함을 증명하는 것은 다른 일이다. AI가 전자를 가져갔다면, 사람은 후자를 책임져야 한다. 맞는말 같다.
자동화된 안정성
그래서 돌아가서, 자동화된 안정성을 높이는 게 중요하다고 생각한다.
리뷰를 완벽하게 하는 게 답이 아니라, 실패해도 빠르게 복구하는 것이 답이라고 본다. 왜냐면 실패한 지점에서 사람이 넣어줄 수 있는 — 왜 실패했는지에 대한, 회사마다 다를 컨텍스트를 넣어줘야 하기 때문이다.
내가 만들려는 것
이런 흐름 위에서, 내 상황에 맞는 시스템을 만들고자 한다.
- PR 머지 감지: PR이 머지되면 이벤트를 감지한다
- 배포 후 모니터링 에이전트 기동: 크론잡이 에이전트를 주기적으로 호출하는 방식. 배포가 나간 시점부터 약 1시간 동안 모니터링한다
- 크리티컬 에러 감지 시 자동 롤백: 에러율, 로그 패턴 등을 기준으로 판단하고, 기준치를 넘으면 자동으로 이전 버전으로 롤백
- 노티피케이션: 롤백이 발생하면 Slack으로 무엇이 왜 롤백됐는지 알림
- 사람의 컨텍스트 주입: 실패 원인을 확인하고, 회사/도메인 특화된 컨텍스트를 다음 시도에 반영
더 발전시킬 방향도 보인다. 롤백만 하는 게 아니라 실패 원인을 분석해서 수정 PR을 자동 생성하는 것, 과거 롤백 이력에서 패턴을 학습해 사전에 위험한 PR을 표시하는 것, 그리고 롤백 후 사람이 넣어준 컨텍스트를 축적해서 에이전트의 판단 기준을 계속 보강하는 것까지. 이런 방향으로 점진적으로 키워갈 수 있다고 본다.
마무리
완벽한 코드리뷰는 점점 더 비현실적이 되어가고 있다. 코드 생산 속도와 검증 속도의 격차는 계속 벌어질 것이다.
그렇다면 방향을 바꿔야 한다. 리뷰를 완벽하게 하는 대신, 실패가 안전한 시스템을 만드는 것. 빠르게 실패하고, 빠르게 복구하고, 실패에서 배운 걸 다음에 반영하는 것. 사람은 AI가 아직 채울 수 없는 컨텍스트를 넣어주는 역할로 전환하고, 나머지는 에이전트가 지켜보게 하는 것.
사람과 AI의 역할 분담이 이 방향으로 가야 한다고 생각한다.