제목과 본문만 바뀌는 업무를 매번 새 프로그램으로 만들면 고칠 곳도 늘어난다. 그렇다고 지난 입력을 그대로 쓰면 이번 요청과 다른 자료를 전달할 수 있다. 나는 어떤 부분이 절차이고 어떤 부분이 이번 값인지 정의로 나누고 실행 입구에서 필요한 값을 다시 받도록 만들었다.
매개변수 이름과 실행 단계는 다른 자료다
Recipe의 parameters는 문자열 값의 사전이고 steps는 지원하는 단계들의 배열이다. 단계 value에는 매개변수 자리가 들어갈 수 있다. 같은 제목 입력과 본문 확인 순서를 두고 이번 내용만 바꾸는 구조다. 입력의 이름을 명시하므로 호출자가 어떤 자료를 준비해야 하는지 읽을 수 있다.
매개변수로 만들지 않은 고정 내용은 그대로 실행 정의에 남는다. 그래서 입력 목록만 읽고 모든 동작을 안다고 생각하면 안 된다. 고정된 사이트와 대상, 클릭의 결과 조건까지 inspect해야 한다. 값이 달라지는 부분을 표시하는 계약과 전체 절차의 의도를 확인하는 일은 함께 필요했다.
이번 입력을 요구하는 경계를 따로 확인했다
workflow.run의 진입점은 입력 배열을 사전으로 바꾼 뒤 중복 키가 없는지, 정의의 모든 키와 정확히 맞는지 검사한다. 보관함 실행 경로도 같은 키 수와 포함 관계를 확인한다. 누락·중복·미지 키를 PROGRAM_CURRENT_INPUTS_REQUIRED로 거절하는 곳이다.
낮은 층의 executeRecipe는 정의 기본값과 inputs를 합친다. 따라서 엔진 함수 하나만 보고 모든 호출에서 누락 입력을 거절한다고 쓰면 틀린 설명이 된다. 나는 이번 값의 명시를 어느 입구에서 검사하는지까지 확인했다. 재사용 지침과 실제 실행 경계가 어디서 만나는지 알아야 정확한 보장이 된다.
JSON 전체가 아니라 문자열 값을 치환한다
엔진은 문자열 안의 매개변수 자리만 찾아 값을 넣고 배열과 객체는 재귀적으로 내려간다. 키 이름은 그대로 두며 치환 결과를 Recipe로 다시 검사한다. 원고의 따옴표가 JSON 구조를 닫거나 한글 줄바꿈이 코드 문자열을 깨뜨리는 식의 조합을 피하려는 구현이다.
입력 문자열이 다른 매개변수 표기를 포함해도 다시 템플릿으로 순환하지 않는다. 하지만 이것만으로 HTML과 SQL, 셸 명령 등 모든 문맥에서 안전하다고 볼 수 없다. 최종 사용 문맥의 처리는 별도다. 나는 문자열 자료를 보존하는 변환과 실제 화면에 입력하는 검증을 나눠 설명한다.
실행 전에는 값이 갈 곳도 함께 검사한다
준비 경로는 치환한 시작 주소와 탭, 이동 주소를 검사하고 첨부 핸들이 이번 선택 파일에 있는지 확인한다. 매체별 입력 형식도 해당 검사로 넘긴다. 원고 문자열이 맞다고 다른 프로필의 파일을 사용하거나 임의 경로를 업로드할 수 있게 만들지 않는다.
이 검사는 실제 파일이 서버에 올라갔다는 증거는 아니다. 실행 전에 자료와 대상이 가능한 모양인지 확인하는 준비 단계다. 현재 페이지 기능처럼 의도적으로 대상 값을 가져오는 경로도 있으므로 모든 값이 무조건 수동 입력이라고 단정하지 않는다. 대신 값을 어디서 얻었는지와 최종 키 계약을 구분한다.
잘못된 입력에서는 행동이0회여야 했다
기존 단위 시험은 미지 입력을 보냈을 때 첫 브라우저 호출 전에 실패하고 calls가0인지 확인한다. 정의에 임의 code나 오래된 refId를 넣으면 형식 검사도 실패해야 한다. 값이 이상해도 일단 몇 단계를 진행한 뒤 멈추는 방식과 구별된다.
아래 공유 모듈은 현재 입력을 모두 요구하는 더 좁은 합성 컴파일러다. 실제 브라우저 동작은 없고 fill·verify 설명을 자료로 만든다.22개 시험과 ZIP 추출 검사를 수행했다. 원본 앱의 시험 코드 검토와 이 독립 모듈 실행을 구분했으며 둘을 합쳐 실제 사이트 전체 검수가 끝났다고 보고하지 않는다.
변하는 값은 드러내고 고정 판단은 검토한다
입력이 바뀔 때마다 코드를 복제하지 않으면 공통 오류를 고칠 위치가 줄어든다. 동시에 이번 입력을 분명히 요구해야 과거 원고가 다시 전달되는 일을 줄일 수 있다. 나는 재사용의 편리함과 이번 작업의 명시성을 함께 갖추는 것이 중요하다고 봤다.
회사의 견적과 보고서도 비슷하다. 형식은 같아도 거래처와 기간, 자료는 이번 값이어야 한다. 고정 절차에 감춰 둔 결정이 없는지 읽고 입력이 어디서 왔는지 남겨야 한다. 프로그램을 잘 나누는 일은 함수 수를 늘리는 것보다 무엇이 매번 달라지고 무엇을 다시 확인해야 하는지 설명하는 일이었다.