같은 쌍, 두 번, 거꾸로
트랙 1 은 번역 함수로 끝났어. 설정 어휘가 들어가고 라우팅 어휘가 나오고, 건너는 자리에서만 적용되고 절대 되돌려 저장 안 하는 것. 그게 모든 앱을 깨뜨린 버그를 닫았지.
나중에 작업장들이 어느 두뇌가 일을 했는지 기록해야 했어. 출처 기록을 조회할 수 있게 철자가 하나여야 했고, 필요한 철자는 반대쪽이었어. 고르는 화면의 어휘, 사람이 알아보는 쪽. 그래서 두 번째 정규화가 생겼고, 라우팅 이름을 고르는 화면 이름으로 되돌려.
함수 둘. 같은 이름 쌍. 반대 방향. 그리고 이 가족의 규칙은 무뚝뚝해. 절대 합치지 마.
왜 이게 딱 정리할 거리처럼 보이나
둘을 처음 발견했다고 상상해봐. 같은 문자열 둘 사이를 매핑하는 함수 둘이, 같은 가족 안에, 둘 다 정규화-뭐시기라는 이름으로. 모든 본능이 이건 오타가 든 중복이고 처방은 방향을 하나 고르는 거라고 말해.
중복이 아냐. 서로 다른 질문에 답해.
- 이 요청이 어느 엔드포인트로 가야 해? 답은 라우팅 어휘에 있어. 라우트 이름이 그거니까.
- 이 기록이 누가 일했다고 적어야 해? 답은 고르는 화면 어휘에 있어. 기록을 읽는 사람이 알아보는 게 그거고, 설정 주인이 내놓는 것도 그거니까.
합치면 함수가 하나 사라지는 게 아니라, 둘 중 하나의 뜻이 바뀌어. 그리고 두 방향 다 이미 저장된 기록에 식별자를 써넣었어. 하나는 요청 로그에, 하나는 출처 행에. 그러니까 합병은 역사를 조용히 다시 해석해. 정리라는 깃발을 달고 도착하는 데이터 오염이야.
이 구분이 살아남게 하는 법
방어는 주석이 아니라 이름이랑 위치야. 함수마다 정규화라는 일반 단어 말고 자기 목적지 어휘를 따서 이름 붙여. 라우팅 쪽이랑 고르는 화면 쪽이 호출 지점마다 둘 다 안 열어봐도 구별돼. 둘은 각 어휘를 소유한 관심사에 맞춰 다른 모듈에 살고. 그리고 각각이 자기 독스트링에, 일부러 반대로 돌고 절대 합치면 안 된다는 문장을 싣고 있어.
마지막 게 하중을 받는 부분이야. 결국 둘 다 발견할 사람은 아키텍처 문서를 읽고 있지 않을 거거든. 버그를 찾았다고 생각하는 그 순간에 둘 중 하나를 읽고 있을 거야.