본문 바로가기
C.W.K.
Stream
Lesson 01 of 04 · published

아무도 못 읽던 숫자

~12 min · architecture, auditability, war-story, refactor

Level 0원석
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"브라우저 람다로 쓴 점수 규칙은 저장도 서빙도 감사도 안 된다."

돌아가던 판본

합성 지표가 프론트엔드에 살았어. 게이지 행을 받아서, 지표마다 점수 매기고, 범주 안에서 평균 내고, 가중치 걸고, 숫자를 그려. 페이지 로드마다 페이지가 이미 갖고 있는 데이터로 다시 계산됐고.

맞았어. 빨랐고. 아무도 못 찾은 버그가 없었어. 기능에 보통 대는 모든 시험 기준으로 멀쩡했지. 그리고 그 사실을 좀 붙들고 있을 값어치가 있어. 이건 결함 이야기가 아니거든. 맞는 코드가 틀린 자리에 있었다는 이야기고, 그건 알아채기가 훨씬 어려운 종류야.

결과 둘

그 모듈 자기 독스트링이 이름을 대고, 둘 다 정확성이 아니라 도달 범위에 관한 거야.

다른 아무것도 그걸 못 읽었어. 커맨드라인도. 위임 지시서도. 어시스턴트 표면도. 제품 전체의 대표 수치가 렌더링 과정 안에서만 존재했어. 그러니까 대시보드 옆에 도킹돼서 같은 페이지를 보고 있는 어시스턴트가, 사람이 보고 있는 그 숫자를 못 봤다는 뜻이야.

흔적을 안 남겼어. 로드마다 새로 계산되고 아무 데도 저장 안 되고. 그래서 자세 요약이 부르는 질문은 하나야. 이 바늘이 어디 있었지? 거기에 답이 아예 없었어. 대략적인 답도 아니고 비싼 답도 아니고. 없음.

이 숫자를 또 뭐가 읽어야 하는지 물어봐. 계산이 살 자리는 데이터가 마침 어디 있냐나 어디에 쓰기 편하냐로 정해지는 게 아니야. 소비자 집합으로 정해져. 답이 영원히 렌더링 표면 하나뿐이면 브라우저도 괜찮아. 두 번째 소비자가 생기는 순간 — CLI, 내보내기, 지시서, 어시스턴트, 미래 연동 — 그 계산은 전부가 닿을 수 있는 데 속해.

이게 마지막 레슨의 밑밥인 이유

이 퀘스트 틀이 이미 두 번 나왔어. 자기 한계를 못 밝히는 측정은 측정이 아니라 주장이다. 누구 달력인지 안 밝힌 날짜. 창이 얼마나 긴지 안 밝힌 백분위.

여기서 마지막 형태로 도착해. 한 층 위에서. 아무것도 들여다볼 수 없는 데서 계산된 숫자는 화면 보고 있는 사람 말고는 누구한테도 자기 한계를 못 밝혀. 이 제품이 지은 정직함 장치는 전부 브라우저 아닌 뭔가가 그걸 받을 수 있다는 걸 전제해. 행에 실린 창, 기준 플래그, 제일 오래된 입력, 가정을 실은 출처 문자열, 하나도 빠짐없이. 감사 가능성은 정직함이랑 별개 관심사가 아니야. 정직함의 배송 수단이야.

나였으면 거기 그냥 뒀을 거야
프론트엔드가 이미 행을 갖고 있었어. 점수 계산을 쓰기에 자연스러운 자리였고, 첫 시도에 돌아갔어. 쓰는 동안 뭐 하나 이상하게 느껴진 게 없었고, 그 diff 를 본 리뷰어라면 아무도 멀쩡한 파일 안 멀쩡한 함수를 문제 삼지 않았을 거야. 이걸 드러낸 건 코드 냄새가 아니었어. 아무도 답 못 하는 질문이었지. 이 바늘이 어디 있었지? 결함은 코드 안에서는 안 보였고, 누가 코드한테 코드가 못 듣는 걸 묻는 순간 뻔해졌어.

Code

같은 산수, 집 둘, 아주 다른 도달 범위·text
IN THE BROWSER                    IN THE ENGINE
-----------------------------     -----------------------------
rendered on the dashboard   YES   rendered on the dashboard  YES
readable by the CLI          no   readable by the CLI        YES
quotable in a brief          no   quotable in a brief        YES
visible to the assistant     no   visible to the assistant   YES
stored with a data_date      no   stored with a data_date    YES
has a history to plot        no   has a history to plot      YES
weights inspectable off-page no   weights inspectable        YES

# The left column is not a worse implementation of the right one.
# It is a correct implementation with a reach of exactly one
# surface -- and every honesty field this product computes has to
# travel further than that to be worth computing.

External links

Exercise

네가 다루는 프론트엔드에서 사용자가 의미 있게 받아들이는 계산값을 하나 찾아봐. 점수, 지수, 건강도 퍼센트, 전망치. 그다음 그걸 읽고 싶어할 만한 걸 전부 나열해. 알림 규칙, 내보내기, 보고서, API 소비자, 지원 도구. 그 목록에 항목이 둘 이상이고 계산이 클라이언트에 살면, 같은 걸 찾은 거야.
Hint
제일 빠른 진단은 역사 질문이야. '지난주 화요일에 이 값이 뭐였지?' 물어봐. 시스템에서 아무것도 답을 못 하면, 그 값은 기록되는 게 아니라 표시되고 있는 거야. 그리고 표시만 되는 숫자는 아무리 정확해도 감사도 비교도 인용도 안 돼.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.