지난 개발 일지 #4는 차트를 10년으로 늘리고 점수를 한 번 더 의심한 기록이었다. 그 무렵 블로그에 쓸 스크린샷을 찍다가 손이 멈췄다.
기능은 붙어 있었다. 피드도 있고, 리더보드도 있고, 차트도 있고, 예측 상세 페이지도 있었다. 그런데 이 화면을 커뮤니티에 그대로 올려도 부끄럽지 않은가 하고 스스로에게 물으니 선뜻 그렇다고 답할 수가 없었다. 곧 서비스를 밖에 알릴 참이었다. 손님이 오기 전에 집 안을 한 번 치워야 했다.
왜 그런 인상인지 Claude와 함께 뜯어봤다. 결론은 “못생겨서”가 아니었다. 중요한 정보와 부수적인 정보가 똑같은 크기, 똑같은 색으로 나열돼 있어서, 화면을 열었을 때 무엇부터 봐야 할지 알 수 없는 상태였다. 리더보드도 피드도 작은 회색 글자와 칩(알약 모양의 작은 라벨)의 나열이었고, 카드 모양·아이콘·색·글자 크기는 페이지마다 조금씩 달랐다. 예전에 로고와 랜딩 첫인상을 다듬은 이야기를 쓴 적이 있는데, 그때 손본 게 간판이었다면 이번에 문제가 된 건 집 안 전체였다. 다행인 점도 하나 나왔다. 문제의 8할은 페이지를 하나하나 고쳐야 하는 종류가 아니라, 색·카드·아이콘·숫자 표기의 공통 규칙을 세우면 한꺼번에 풀리는 종류였다.
마침 같은 시기에 첫 실사용자의 리뷰도 도착했다. Threads에서 앱을 직접 써 보고 리뷰해 주겠다는 분의 글을 보고 댓글을 달았는데, 고맙게도 서비스를 처음부터 끝까지 써 본 뒤 아홉 가지를 짚은 자세한 리뷰가 돌아왔다. 그리고 그 지적은 화면에만 머물지 않았다. 이 서비스가 처음 온 사람에게 무엇을 하라는 곳인지까지 건드렸다. 그래서 이번 회차는 두 가지 일을 나란히 진행한 기록이다. UI 전체를 5단계로 정비하는 일, 그리고 그 지적 9건을 반영하는 일이다.
페이지가 아니라 규칙부터 고치기로 했다
이번에도 코딩부터 시작하지 않고 계획 문서를 한 장 먼저 만들었다. 코드 전체를 훑어 어긋난 곳을 파일과 줄 번호까지 적어낸 조사와, 실제 스크린샷을 눈으로 뜯어본 진단을 합친 문서다. 조사 결과는 생각보다 구체적으로 어긋나 있었다. “상승”을 뜻하는 초록색은 다섯 가지로 흩어져 있었다. 카드는 정식 컴포넌트를 쓴 곳과 직접 테두리를 그린 박스가 뒤섞여 있었고, 직접 그린 박스만 40곳 가까이 됐다. 알림 종은 기기마다 다르게 그려지는 이모지인데 바로 옆 아이콘은 아이콘 라이브러리 것이라 나란히 두면 어긋나 보였고, 페이지 제목의 글자 크기도 페이지마다 제각각이었다.
정비는 다섯 단계로 쪼갰다. 폰트·색·아이콘·다크모드 같은 기반을 먼저 세우고, 그다음 카드·빈 화면·로딩 표시 같은 공통 요소를 통일하고, 그 위에서 가장 많이 노출되는 피드와 리더보드를 다듬고, 나머지 페이지를 같은 규칙에 맞추고, 마지막에 아주 가볍게 움직임을 얹는 순서다. 순서가 중요했다. 공통 규칙이 먼저 서 있어야 각 페이지가 그 규칙을 가져다 쓸 수 있기 때문이다. 각 단계는 별도 브랜치에서 만들고, 독립 AI 리뷰와 preview(배포 전 미리보기) 확인을 거친 뒤에야 합쳤다. 한 단계가 끝나야 다음을 시작했다.
바꾸지 않을 것도 먼저 정해뒀다. 색 조합(에메랄드와 골드), 정보 구조, 기능, 문구는 그대로 둔다. 리브랜딩이 아니라 정비다.
사이트 폰트는 처음부터 적용된 적이 없었다
기반 단계에서 곧장 버그가 하나 나왔다. 화면의 글꼴은 CSS 변수라는 이름표로 지정하는데, 전역 스타일의 본문 글꼴 이름표가 자기 자신을 가리키고 있었다. “이 글꼴을 써라”라고 적어야 할 자리에 사실상 “여기에 적힌 값을 다시 참조해라”라고 적혀 있었던 셈이다. 준비해 둔 진짜 글꼴은 어디에도 연결되지 않았고, 본문과 제목 전부가 지정 글꼴 대신 각자 기기의 기본 글꼴로 그려지고 있었다. 서비스를 연 이후 줄곧 그랬다는 얘기다. 빌드는 한 번도 불평하지 않았고, 눈으로 봐도 “글꼴이 좀 밋밋한가” 수준이라 걸리지 않았다.
연결을 고치는 김에 한글과 라틴을 모두 잘 그리는 Pretendard를 직접 호스팅으로 도입했다. 여기에도 함정이 하나 있었는데, 새 CSS 도구(Tailwind v4)의 테마 설정 안에서 이름표가 다른 이름표를 참조하게 두면 겉으론 멀쩡해 보여도 실제로는 연결이 끊긴 채 남는 경우가 있다는 것이다. 참조 대신 글꼴 목록을 명시적으로 풀어 적는 것으로 정리했다. 한 번 데인 종류의 실수인데, 하마터면 다른 자리에서 그대로 반복할 뻔했다.
다크모드는 더 황당했다. preview를 보다가, 크롬을 다크로 바꾸면 다른 사이트는 다 어두워지는데 우리 사이트만 그대로라는 걸 알아챘다. 코드를 뒤져 보니 다크모드용 스타일은 이미 곳곳에 다 만들어져 있었다. 없던 건 그걸 켜 주는 스위치였다. 화면 전체에 “다크모드일 때는 이 색”이라는 규칙이 준비돼 있는데, “지금이 다크모드다”라고 알려 주는 장치가 어디에도 없어서 전부 잠든 상태였던 것이다. 첫 화면이 그려지기 전에 기기의 다크 설정을 읽어 선언해 주는 짧은 스크립트를 넣어 해결했고, 다크모드가 처음으로 실제로 켜지는 셈이라, 밝은 색이 코드에 고정으로 박혀 있어 어두운 화면에서도 하얗게 남는 곳이 없는지 전체를 확인했다. 걸린 건 딱 하나, 토글 스위치의 손잡이였는데 그건 양쪽 테마 모두 흰 게 맞는 자리였다.
폰트와 다크모드가 남긴 교훈은 같다. 만들어 둔 것과 켜져 있는 것은 다르다. 그리고 이런 문제는 빌드 검사에도 안 걸리고, 대충 봐서는 눈에도 안 띈다.
초록색 하나에 두 가지 일을 시킬 수 없었다
색 정리는 기계적인 치환으로 끝날 줄 알았다. 다섯 가지로 흩어진 초록색을 “상승”이라는 의미의 이름표 하나로 모은다. 색상값을 직접 쓰지 않고 “상승”, “하락” 같은 의미로 색을 부르는 방식인데, 디자인 시스템에서는 이런 이름표를 시맨틱 토큰이라고 부른다. 다크모드 대응까지 이름표 안에 넣으면 다크에서 뭉개지던 14곳도 자동으로 해결되는 구조였다.
그런데 치환을 끝내고 preview를 보니 뭔가 이상했다. 새로 통일한 초록색이 어딘가 어둡고, 정작 버튼의 브랜드 초록색과 서로 어울리지 않았다. 원인을 따라가 보니 이건 실수가 아니라 딜레마였다. 흰 배경 위의 글자로 쓰려면 초록색이 충분히 진해야 읽히고, 뱃지나 분포 막대의 채움색으로 쓰려면 버튼과 같은 밝은 초록색이어야 어울린다. 하나의 이름표로 두 역할을 동시에 만족시킬 수 없었다.
답은 역할을 나누는 것이었다. 글자와 가는 강조선에는 진한 톤, 면을 채울 때는 버튼과 같은 밝은 톤을 쓰도록 이름표를 둘로 나눴다. 색은 취향의 문제 같지만 실제로는 읽히는가(대비)가 먼저고, 그 제약 안에서 브랜드 일관성을 챙기는 순서라는 걸 이때 배웠다.
제각각이던 카드와 필터를 하나로
공통 요소 단계에서는 카드부터 손댔다. 정식 카드 컴포넌트를 쓰는 곳이 다섯 곳, 직접 테두리를 그린 박스가 40곳 가까이라 모서리 곡률과 안쪽 여백이 제각각이었고, 다크모드에서는 두 방식의 배경 밝기가 서로 달라 나란히 놓인 카드인데 어떤 것은 밝고 어떤 것은 어두웠다. 공용 패널 컴포넌트 하나로 전부 모으고, 빈 화면 안내와 로딩 자리 표시(내용이 오기 전 잿빛으로 깜빡이는 표시)도 공용 컴포넌트로 만들었다. 그동안 “아직 데이터가 없다”는 빈 화면의 여백이 자리마다 달라 다섯 가지나 있었는데, 이제 한 가지다.
이 과정에서 Claude에게 물어본 게 하나 있다. 카드가 배경 위에 살짝 떠 보이는 효과는 어디서 확인하느냐고. 답은 라이트 모드에서는 안 보이는 게 정상이라는 것이었다. 라이트에서는 카드와 배경이 둘 다 흰색이라 얇은 테두리만 보이고, 다크에서만 카드가 배경보다 조금 밝아 떠 보인다. 요란한 그림자 대신 절제된 쪽을 택한 결과인데, 이런 건 말로 설명을 듣기 전까지 “고쳐졌는지 안 보인다”는 인상을 줄 수 있다는 것도 배웠다.
화면마다 모양이 다르던 필터도 이때 통일했다. 리더보드의 필터와 피드의 탭이 서로 다르게 생겨서, 리더보드 쪽 모양을 기준으로 사이트 전체의 필터·탭·폼 선택기를 하나로 맞췄다. UI 조작부에 쓰이던 이모지(종·차트·메달·자물쇠 따위)도 전부 아이콘 라이브러리로 바꿨는데, 여기서 함정을 하나 밟았다. 화면 코드의 이모지는 다 치웠는데 번역 문자열 안에 “👤 Human” 같은 형태로 숨어 있던 이모지가 정리에서 빠져, 설정 화면에 그대로 남아 있는 걸 나중에 발견했다.
아바타를 넣었더니 화면이 읽히기 시작했다
가장 체감이 컸던 건 아바타다. 그동안 리더보드와 피드는 이름과 숫자만 빽빽한 표였다. 프로필 사진이 없는 참가자에게는 핸들에서 계산한 값으로 고정 팔레트의 그라디언트와 이니셜을 정해 주는 아바타를 만들었다. 외부 라이브러리 없이 CSS로만 했고, 봇은 아바타 위에 작은 봇 아이콘을 겹쳐 사람과 구분했다. 함정은 두 개였다. 하나는 하이드레이션 불일치라는 오류다. 서버가 먼저 그린 아바타와 브라우저가 이어받아 그린 아바타가 서로 달라지면 나는 오류인데, 이걸 피하려면 색 계산이 난수나 시각 없이 항상 같은 답을 내야 한다. 그리고 다른 하나는 밝은 그라디언트 위 흰 이니셜이 대비 1.9:1까지 떨어져 읽기 어려웠다는 것이다. 밝은 색조를 한층 어둡게 조정해 해결했다.
피드 카드는 중요한 것부터 보이게 다시 짰다. 조사 때 가장 뼈아팠던 지적이, 가장 중요한 신호인 상승/하락이 카드에서 가장 작은 요소(작은 삼각형)라는 것이었다. 카드 왼쪽에 방향 색의 얇은 띠를 세우고, 방향 뱃지를 자산명 옆으로 올렸다. 대신 기간이나 시장 표기 같은 보조 정보는 흐린 글자로 낮춰 칩 개수를 줄였다. 긴 근거 글의 “더 보기” 버튼에서는 유령 버그를 하나 잡았다. 처음엔 글자 수 240자를 기준으로 잘림 여부를 추정했는데, 넓은 화면에서는 짧은 글도 다 보이는데 “더 보기”가 떠 있고 눌러도 아무 일도 일어나지 않았다. 글자 수 대신 실제로 글이 넘쳤는지를 재는 방식으로 바꿔, 진짜 잘렸을 때만 버튼이 뜨게 했다.
리더보드에서는 전문적인 숫자를 접어 두었다. 그동안 예를 들면 34 · [-61, +367] 같은 통계 표기(표본 수와 신뢰구간)가 모든 방문자에게 그대로 노출되고 있었는데, 지우는 대신 신뢰도 등급 색의 작은 점 하나로 줄이고 누르면 상세가 열리게 했다. 전문 정보는 접어 두되 버리지는 않는다는 원칙이다. 1·2·3위는 메달 이모지 대신 금·은·동 색 숫자로 바꿨고, 모바일에서 가로 스크롤이 생기던 6칸짜리 표는 카드 목록으로 전환했다. 접근성 문제도 하나 있었다. 신뢰구간으로 가는 유일한 통로인 그 점이 8px라 손가락으로 누를 수 없는 크기였고, 보이는 크기는 그대로 두되 누르는 영역만 24px로 넓혔다.
그리고 동선의 구멍을 발견했다. 예측 상세 페이지를 피드와 같은 규칙으로 다듬어 놓고 보니, 정작 피드 카드에서 거기로 가는 링크가 맨 아래 날짜 하나뿐이었고 그마저 판정이 끝난 카드에만 있었다. 목적지를 만들었으면 가는 길도 만들어야 한다. 카드 전체를 클릭할 수 있게 바꿨다.
마지막 단계인 모션은 최소한만 넣었다. 카드에 마우스를 올리면 살짝 떠오르고, 좋아요 하트가 톡 튀고, 피드가 부드럽게 나타나고, 랜딩의 숫자가 올라가며 채워지는 정도이고, 전부 기기의 “동작 줄이기” 설정을 켠 사람에게는 꺼진다. 여기에도 함정은 있었다. 숫자가 올라가는 연출은 검색엔진을 위해 서버가 실제 값을 먼저 그려 보내는데, 숫자에 쉼표를 찍는 함수에 언어권을 지정하지 않으면 서버와 브라우저가 서로 다른 자릿수 구분(1.234와 1,234)을 써서 또 하이드레이션 불일치가 난다. 언어권을 고정해서 막았다.
다섯 단계를 어떻게 굴렸나
이번 회차는 결과물보다 진행 방식이 더 이야깃거리일 수도 있다. “규칙은 하나인데 고칠 파일은 수십 개”인 작업이 많아서, 색 치환이나 카드 통일 같은 일은 규칙을 한 번 정해 두고 파일마다 AI 에이전트를 하나씩 붙여 병렬로 처리했다. 파일이 겹치지 않으니 충돌도 없다.
각 단계가 끝나면 리뷰를 세 겹으로 돌렸다. 먼저 독립 AI 리뷰를 네 가지 관점으로 받았다. 상승/하락 색의 의미가 맞는지, 기반 설정이 실제로 연결돼 있는지, 대비와 접근성에 문제가 없는지, 기존 동작이 깨지지 않았는지다. 다만 나온 지적을 그대로 반영하지는 않았다. 하나씩 반박을 시도해서 취향 문제나 오독은 걸러내고, 실제 문제만 남겼다. 그다음 다른 AI에게 한 번 더 리뷰를 받고, 마지막으로 preview에서 내가 라이트·다크·모바일을 직접 확인했다.
이 과정에서 리뷰가 잡아낸 것 중 제일 값진 건 디자인이 아니라 규칙 위반이었다. 랜딩의 상위 5인 표에서 일부 AI 봇이 사람 아이콘으로 표시되고 있었던 것이다. LDBD에는 “사람이 아닌 참가자는 항상 AI 봇으로 표시한다”는 규칙이 있는데, 정보가 빈 봇이 사람 모양으로 넘어가던 옛 버그를 아바타를 새로 입히면서 그대로 옮겨 담을 뻔했다. 역할 분담도 자연스럽게 갈렸다. AI 리뷰는 코드·규칙·접근성·하이드레이션을 잡았고, 나는 preview에서만 보이는 체감과 취향 — 초록색 톤이 안 맞는다, 카드 어딜 눌러야 상세로 가느냐 — 을 잡았다. 서로 다른 걸 잡아 줘서 각 단계가 확실히 닫혔다.
첫 실사용자의 지적 9건 — 정비와 나란히
이제 서두에서 말한 리뷰 9건 이야기다. 두 달 동안 나와 AI만 보던 화면에 처음으로 남의 눈이 닿은 것인데, 아홉 건을 코드와 대조해 보니 세 층위로 나뉘었다. 코드로 원인이 확인되는 버그와 마찰이 네 건, 정보 구조의 빈틈이 두 건, 그리고 서비스 방향에 대한 지적이 나머지였다. 버그 네 건은 정비 작업과 나란히 바로 고쳤다.
먼저 뜨끔했던 건 색이었다. 피드 카드 왼쪽에는 상승/하락을 나타내는 색 띠가 있는데, 그 색이 방향이 아니라 성공/실패를 나타내야 하지 않느냐는 지적이었다. 따져 보니 정확했다. 판정이 끝난 카드에는 적중/실패 칩이 이미 초록색과 빨간색을 쓰고 있어서, 같은 색이 한 카드 안에서 방향과 결과라는 두 가지 뜻으로 쓰이고 있었다. “하락에 걸어서 맞힌” 카드가 빨간 띠와 초록색 성공 칩을 동시에 달고 나오니, 초록색은 좋은 것이라는 직관과 정면으로 부딪혔다. 진행 중인 카드는 결과가 없으니 방향 색을 유지하고, 판정이 끝난 카드의 띠는 결과 색으로 바꿨다. 방향은 옆의 방향 뱃지가 이미 알려주고 있어서 잃는 것도 없다.
“더 보기”도 도마에 올랐다. 카드 전체를 클릭할 수 있게 만들어 둔 탓에, 그 위에 떠 있는 작은 “더 보기” 글자를 조금만 빗맞히면 카드가 통째로 눌려 상세 페이지로 넘어가 버린다는 것이다. 차라리 빼자는 의견이었는데, 이건 반대로 갔다. 접기 버튼을 빼면 긴 근거는 무조건 상세 페이지에 가야만 읽을 수 있어서, 싫다고 한 “의도치 않은 상세 진입”을 오히려 강제하게 된다. 대신 누르는 영역을 카드 전체 폭의 한 줄로 키우고, “글이 잘려 있다”고 느끼게 하는 하단의 흐림 효과까지 누르는 영역에 포함시켰다. 지적은 받아들이되 처방은 다시 생각하는 경우도 있다.
나머지 둘은 담백한 버그다. 리더보드 맨 아래의 신규/급상승 전환 버튼을 누르면 화면이 맨 위로 튕겼는데, 그 버튼이 사실은 링크라서 페이지 이동 시 맨 위로 스크롤하는 기본 동작을 타고 있었다. 그 버튼에만 스크롤 유지를 지정했다. 블로그 목록에서는 태그가 많은 글의 태그가 카드 밖으로 밀려 나갔는데, 줄바꿈 허용이 빠진 자리 하나였다.
AI 리뷰를 여러 겹 거친 화면인데도, 실제로 서비스를 써 본 한 사람은 그 리뷰들이 못 본 각도에서 문제를 짚었다. 이게 이번 회차에서 곱씹게 되는 지점이다.
페이지가 있는데 없다는 말
다섯 번째 지적은 “내가 예측한 종목 페이지가 없다, 내 현황을 모르겠다”였다. 흥미로운 건 그 페이지가 있다는 점이다. 내 점수와 예측 목록을 모아 보여주는 프로필 페이지가 멀쩡히 존재하는데, 없다고 느낀 것이다. 뜯어 보니 그 느낌이 맞았다. 들어가는 입구의 메뉴 이름이 “프로필”이라 내 예측 목록이 거기 있을 거라고 기대하기 어려웠고, 들어가도 자산별로 묶인 과거 기록이 나올 뿐 “지금 진행 중인 게 몇 건이고 언제 판정되는지”를 답해 주는 화면이 아니었다. 페이지는 있는데, 그 페이지가 사용자의 질문에 답하지 않고 있었다.
그래서 새 페이지를 만드는 대신 그 프로필 페이지의 맨 위에 현황 블록을 넣었다. 진행 중 몇 건, 오늘과 이번 주에 판정 예정 몇 건, 최근 판정 결과 몇 건이 한눈에 들어오고, 예측 목록에는 진행 중/판정 완료 필터를 달았다. 이미 불러오던 데이터에서 계산할 수 있어서 서버 요청이 늘지도 않았다. “예측한 종목별 전용 페이지를 만들어 달라”는 표면의 요구 대신, 그 밑에 있는 “내 현황이 보이는가”라는 질문에 답하는 쪽을 택했다.
가장 아픈 지적이 방향을 정해줬다
마지막 층위는 버그가 아니라 정체성이었다. 이건 내가 예측하는 서비스인가, AI의 예측을 보고 투자 판단에 참고하는 서비스인가. 그리고 핵심 제안은 “무엇을 원하는 서비스인지 명확히 하라”였다. 사실 이 지적은 처음이 아니다. 지난 글에서 쓴 경쟁력 진단 때 AI도 “가입하지 않은 방문자에게 주는 즉시 가치가 묻혀 있다”고 같은 곳을 짚었다. 따로 도착한 두 진단이 일치했고, 그게 결정을 더 미룰 수 없게 만들었다.
고민 끝에, 두 종류의 사용자를 나눠 보기로 했다. 보는 사람에게 LDBD는 AI(와 사람)의 예측 현황판이다. 검증된 트랙레코드와 자산별 집계 — 이 종목에 대해 AI 12개 중 8개가 상승을 예측하고 있다는 식의 정보 — 를 보고 자기 판단에 참고한다. 이번 리뷰어가 기대한 것도 정확히 이 가치였다. 예측을 공급하는 쪽, 그러니까 자기 예측 실력이나 AI 에이전트를 가진 사람에게는 공개적으로 검증받는 무대다. 보상은 상금이 아니라 노출과 신뢰이고, 잘하는 사람은 여기서 쌓은 기록을 명함 삼아 자기 서비스로 사람을 데려갈 수 있다. 좋은 공급자가 들어와야 보는 사람에게 더 유용해지고, 보는 사람이 늘어야 공급자의 보상이 커지는 구조다. 그동안 전면에 세웠던 “AI를 이겨라”라는 문구는 버리지 않되, 구경 온 사람을 첫 예측으로 이끄는 안내판 정도로 물러난다.
받아들이지 않은 제안도 있다. “누가 잘 맞히고 지금 뭘 사는지 보이게 하라”는 요구에서 앞쪽 절반 — 누가 잘 맞히는지, 시장을 지금 어떻게 보는지 — 은 수용하지만, 특정인의 진행 중 예측을 따라가게 만드는 화면은 만들지 않기로 했다. 진행 중 예측의 작성자를 가리는 건 베끼기로 게임이 무너지는 걸 막으려고 일부러 넣은 설계이기도 하고, “이 사람이 산 걸 너도 사라”는 흐름은 투자 자문처럼 읽힐 위험이 있기 때문이다. 지적 하나로 원칙까지 뒤집지는 않기로 했다.
한 명의 의견으로 전면 개편을 정당화하지 않으려고, 기존 진단과 겹치는 것만 채택했다는 점도 적어 둔다. 방향은 정해졌지만 실행은 남아 있다. 랜딩 첫 화면을 이 관점으로 다시 쓰는 일, 그리고 정보 구조의 남은 빈틈인 “로그인했을 때 어디가 홈인가”를 정하는 일이 그것이고, 결과는 이 일지에 계속 기록한다.
이번 회차의 교훈
만들어 둔 것과 켜져 있는 것은 다르다. 폰트는 지정만 되고 연결되지 않았고, 다크모드는 스타일만 있고 스위치가 없었다. 둘 다 빌드는 통과하고 눈에도 안 걸린다. “있다”를 확인했으면 “동작한다”를 따로 확인해야 한다.
색 하나에 두 역할을 시킬 수 없다. 글자의 가독성과 채움의 브랜드 일치는 같은 초록색으로 동시에 못 잡는다. 그리고 대비 같은 접근성 제약이 취향보다 먼저다.
일관성은 다짐이 아니라 공용 컴포넌트에서 나온다. 네 가지 모양이던 필터, 두 가지로 갈라져 있던 표기, 두 계열이던 카드를 “앞으로 통일하자”는 다짐이 아니라 공용 컴포넌트 하나씩으로 모으니 사이트가 비로소 한 벌의 옷을 입었다.
여러 겹의 AI 리뷰도 실사용자 한 명을 대신하지 못한다. 코드 리뷰와 규칙 검사를 다 통과한 색 띠의 의미 충돌은 실제로 써 본 사람만 잡아냈다. 다만 그 반대도 성립한다. 한 명의 리뷰를 그대로 다 수용하는 게 아니라, 기존 진단과 겹치는 것을 채택하고 원칙과 부딪히는 것은 거절하는 판별이 같이 있어야 했다.
그리고 “이 화면을 그대로 올려도 부끄럽지 않은가”라는 기준은 생각보다 좋은 시금석이었다. 지난 글에서 “조금만 더”를 런칭을 미룬 범인으로 몰아놓고 할 말은 아니지만, 이 정비만큼은 값을 했다고 생각한다. 치워 둔 집으로 곧 첫 손님들을 맞았으니까. 화면은 한 번에 완성되는 게 아니라 손보고, 지적받고, 다시 손보는 순환인 모양이다. 이번 회차를 한 문장으로 줄이면 이렇다. 만들어 둔 것과 켜져 있는 것은 다르고, AI 리뷰를 통과한 것과 사람이 실제로 이해하는 것도 달랐다.