우리 앱을 처음 쓰는 사람의 눈으로 봐 달라고 하면 어떨까요? 처음 쓰는 사람은 딱 한 번만 처음이라서, 두 번째부터는 이미 아는 사람이 됩니다. 그래서 처음 쓰는 사람을 만들어 봤어요. 사내에서 만들고 있는 AI 학습 코칭 앱 로나를, 앱 코드는 한 줄도 안 고치고 바깥에서 나흘 동안 테스트한 기록입니다.
발단 — 손이 버전을 못 따라갔다
처음 이틀은 손으로 했어요. 앱 번들을 풀어 코드를 읽고, 앱이 띄우는 로컬 서버에 조회 요청만 보내 보고, 이상한 동작을 결함 문서로 남겼습니다. 열 건쯤 모였을 때 문제가 보였어요. 조사한 나흘 동안 앱이 네 버전을 지났거든요. 손으로 한 조사는 버전이 바뀌면 다시 처음입니다.
속도가 문제였어요. 코딩 에이전트 덕에 만드는 쪽은 몇 배로 빨라졌는데, 검증하는 쪽은 여전히 사람 손이에요. 버전 하나에 고친 게 한두 군데가 아니라 기능이 통째로 바뀌어 올라오니, 사람이 클릭해 보는 QA로는 따라갈 수가 없었습니다. 만드는 쪽이 에이전트면 검증하는 쪽도 에이전트여야 속도가 맞겠다 싶었어요.
지난 글에서 코드는 이해의 캐시이고 엄밀함은 평가 쪽으로 옮겨가야 한다는 얘기를 했었죠. 그걸 모듈 하나가 아니라 앱 하나에 통째로 적용해 보면 어떻게 될까 싶었어요. 규칙은 하나입니다. 앱 코드는 고치지 않는다. 바깥에서 써 보고, 지켜보고, 기록만 한다. 앱은 개발팀이 만들고, 저는 그 앱을 처음 쓰는 사람이 겪는 일을 증거와 함께 넘기는 역할이에요.
설계 세션에서 우선순위를 하나 뒤집었습니다. 처음엔 "찾아 둔 결함이 다음 버전에서 다시 나는지 지키는 일"을 먼저 하려 했는데, 그건 이미 아는 것만 지킵니다. 모르는 결함을 찾는 일이 1순위가 됐어요. 그러려면 앱을 실제로 써 보는 누군가가 필요합니다. 첫 표본은 좁게 잡았어요. 초보 한 명, 과제 하나. 변수를 하나씩 늘려야 뭐가 앱 문제이고 뭐가 학습자 차이인지 가를 수 있으니까요.
설계 — 초보 한 명을 만들다
그냥 코딩 에이전트에게 "이 앱 QA 좀 해 줘"라고 하면 안 되냐고 물으실 수 있어요. 그렇게 하면 뭘 본 건지 알 수가 없어요. 로나는 혼자 도는 앱이 아니라 Codex 앱이나 Claude 앱과 붙어서 도는 앱이거든요. 사용자는 로나에서 "코칭 시작"을 누르고, 실제 대화는 코딩 에이전트 앱 안에서 코치(그 안에서 도는 AI)와 하고, 진행 상황은 다시 로나의 진행표로 돌아옵니다. 그러니 테스트 대상이 앱 하나가 아니라 앱 두 개와 그 사이의 연결, 그리고 그 안에서 도는 AI까지 넷이에요. 게다가 테스트를 시킬 에이전트가 테스트 대상의 엔진이기도 합니다. Codex에게 시키면 Codex 위에서 도는 코치를 Codex가 검사하는 셈이죠. 누가 학습자를 연기하고, 누가 코치를 맡고, 누가 판정하는지를 갈라 두지 않으면 결과를 읽을 수 없어요. 그래서 설계가 필요했습니다.
코드보다 먼저 용어집을 만들었어요. 봇이 쓰는 말이 흔들리면 판정도 흔들리니까요. 열다섯 개 중 글에 필요한 다섯만 옮깁니다.
📎 페르소나 — 가상 학습자의 프로필이에요. AI 숙련도, 쓰는 도구, 가져온 과제까지 정해 두면 말투와 판단 기준이 따라옵니다. 시나리오는 시작 조건·목표·대화 턴 상한·기대 결과를 적은 대본이고, 시나리오에 적힌 "눌러도 되는 버튼" 목록이 곧 그 런의 승인 범위예요. 페르소나 하나가 시나리오 하나를 끝까지 한 번 수행한 것을 런이라 부릅니다. 런이 끝나면 시나리오의 기대 결과와 대조해 검사 항목마다 통과·실패를 가르는데 그 묶음이