AI VIDEO BRIEFING
개발 생산성의 두 축, 마찰과 비결정성 — 재시도·내구성 실행·강한 일관성
8명 규모 스타트업이 어떻게 많은 일을 해내는지, GOTO 강연은 이를 마찰과 비결정성 두 축으로 설명한다. 비동기 작업 흐름과 재시도·내구성 실행·강한 일관성이라는 해법을 정리했다.

핵심 메시지
쉽게 이해하기
8명짜리 스타트업 리부트를 만드는 로베르트얀 하위스만은 '작은 팀으로 어떻게 그렇게 많은 일을 해내느냐'는 질문에서 강연을 시작한다. 그는 데이터가 아니라 경험담을 제시한다고 미리 밝히고, 팀이 집중하는 것은 두 가지뿐이라고 말한다. 하나는 마찰, 다른 하나는 비결정성이다. 그리고 이 둘을 코딩할 때와 사람과 일할 때로 나눠 네 칸의 표를 만든다.
마찰은 다음 결과에 도달하기까지 나를 느리게 만드는 모든 것이다. 사람 쪽에서 가장 흔한 마찰은 기다림이다. 팀은 바르샤바부터 하와이까지 흩어져 있고, 발표자가 있는 코펜하겐과 하와이는 12시간 차이가 난다. 해법은 지연 시간을 줄이는 대신 처리량을 택하는 것이다. 막히면 다른 일로 넘어갈 수 있도록 병렬 작업을 여러 개 쥐고 있고, 하루 두 시간만 모두가 겹치는 시간을 만들어 그때 막힌 것을 푼다. 반대로 고객의 치명적 버그처럼 지연이 중요한 일에는 시간대를 무기로 삼아 코펜하겐에서 뉴욕, 하와이로 넘겨 가며 24시간 연속으로 작업한다.
여기서 첫 번째 AI 언급이 나온다. 발표자는 '저녁 먹으러 갈 테니 그동안 이걸 풀어놔' 하고 맡길 수 있는 에이전트를 기다린다고 말한다. 다른 시간대 동료에게 부탁하듯이 말이다. 하지만 지금까지 써 본 에이전트는 몇 분마다 입력을 요구하거나, 두 시간쯤 혼자 일하고 나면 손댈 곳이 많은 결과를 내놓는다며 아직 그 수준은 아니라고 선을 긋는다.
코딩 쪽 마찰을 줄이는 방법으로는 지루하지만 확실한 세 가지를 든다. 첫째, 타입을 프런트엔드부터 데이터베이스까지 끊김 없이 적용하는 것이다. 백엔드와 DB 사이는 ORM으로, 프런트엔드와 백엔드 사이는 tRPC나 하나의 스키마에서 클라이언트 SDK를 생성하는 방식으로 잇는다. 둘째, 단위 테스트다. LLM이 테스트를 잘 써 주니 이제 변명거리가 없고, 무엇보다 테스트가 있는 코드베이스는 에이전트와 일하기가 훨씬 낫다. 컨텍스트 창을 넘어가 이전에 맞춰 놓은 것을 망가뜨려도 테스트가 잡아 주기 때문이다. 셋째, 반복을 멈추는 것이다. 그는 10년 전 자신이 설계에 참여했던 파이어스토어 코드를 예로 들며, 함수마다 같은 적재 코드를 반복해야 했던 점을 스스로 비판하고 '직교 지속성' 개념을 소개한다.
마찰이 계속되는 트레이드오프라면, 비결정성은 한 번 투자해 끝낼 수 있는 문제라는 것이 강연의 핵심 주장이다. 사람 쪽 비결정성은 '이 일이 쓸모는 있나', '이 코드가 반려되지 않을 확률이 60%쯤 된다' 같은 불확실성이고, 팀은 브레인스토밍으로 이를 없앤다. 문제를 발견한 사람이 초안을 쓰고 동료를 한 명씩 찾아가 같이 고치기를 반복해, 누구에게 물어도 같은 답이 나올 만큼 논쟁의 여지가 사라질 때까지 다듬는다. 중요한 것은 아이디어에 주인이 없다는 점이다. 코드 쪽 비결정성에 대해서는 세 가지 기본기를 제시한다. 요청이 사라지거나 응답이 돌아오지 않을 때를 대비한 재시도와 멱등성, 클라이언트가 죽어도 처음부터 다시 시작해 하던 일을 이어가는 내구성 실행, 그리고 트랜잭션이 쪼개지지 않도록 지키는 강한 일관성이다.
주요 인사이트
- 분산 팀에서 기다림을 없애려 애쓰기보다, 막혀도 손댈 일이 남아 있도록 병렬 작업을 설계하는 편이 현실적이다. 코드 리뷰가 하루 묵혀도 괜찮은 구조라면 시차는 문제가 아니다.
- 단위 테스트의 가치가 달라졌다. 사람의 회귀 방지 장치를 넘어, 컨텍스트를 잃어버리는 에이전트가 스스로 실수를 확인하는 수단이 됐다.
- 마찰과 비결정성은 대응 방식이 다르다. 마찰은 고칠 값어치가 있는지 매번 저울질해야 하지만, 비결정성은 초기에 구조로 해결해 두면 두 번 다시 신경 쓰지 않아도 된다.
- 재시도에는 반드시 멱등성이 따라와야 한다. 같은 요청이 두 번 도착해도 한 번만 실행되도록 고유 식별자와 실행 이력을 서버가 기억해야 하며, 이것이 내구성 실행의 토대도 된다.
- 강한 일관성은 데이터베이스만의 문제가 아니다. 트랜잭션 맥락을 다른 호출로 전달하지 못하면 하나여야 할 트랜잭션이 둘로 쪼개지고, 트랜잭션 밖에서 값을 읽는 실수는 리뷰에서 잡기도 어렵다.
- AI가 코드를 배우는 지금이 분기점이라는 지적이 인상적이다. 실수하기 쉬운 도구를 계속 쓰면 AI도 같은 실수를 학습하고, 그 결과를 사람이 평생 수습하게 된다.
자주 묻는 질문
마찰과 비결정성은 어떻게 다른가?
마찰은 다음 결과까지 도달을 느리게 만드는 것으로, 설치를 기다리며 커피를 타러 가게 만드는 종류다. 비결정성은 성공을 예측할 수 없게 만드는 것으로, 사람이 일을 그만두고 싶게 만드는 종류다. 발표자는 마찰은 계속되는 트레이드오프이고 비결정성은 한 번의 투자로 없앨 수 있다고 본다.
내구성 실행(durable execution)이란 무엇인가?
클라이언트가 도중에 죽어도 프로그램을 처음부터 다시 실행하면 서버가 이미 처리한 요청은 저장된 결과를 돌려주고, 클라이언트는 끊긴 지점까지 따라잡은 뒤 이어서 진행하는 방식이다. 덕분에 중단된 작업이 영원히 미완으로 남지 않는다. 템포럴, 리스테이트 같은 프레임워크가 이를 지원한다.
강한 일관성이 깨지는 이유로 무엇이 지적됐나?
일관성을 제공하지 않는 데이터베이스를 쓰는 경우, 코드 구조상 하나여야 할 트랜잭션이 여러 호출로 쪼개지는 경우, 그리고 트랜잭션 밖에서 데이터를 읽어 오는 것 같은 단순 실수 세 가지다. 마지막 유형은 코드만 봐서는 차이를 알아채기 어려워 리뷰에서 놓치기 쉽다.
강연은 AI 에이전트의 현재 수준을 어떻게 평가하나?
잠든 사이 일을 맡기고 아침에 결과를 검토하는 수준을 기대하지만, 지금 에이전트는 몇 분마다 입력을 요구하거나 두 시간쯤 혼자 작업한 뒤 손볼 것이 많은 결과를 내놓는다고 평가한다. 감독 없이 오래 일하는 단계에는 아직 이르지 못했다는 것이다.
원문과 출처
이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.
YouTube 원본 영상 보기 ↗