여러 홈페이지를 만들면 같은 기능을 다시 만들 필요는 줄일 수 있다. 그러나 문구와 연락처, 자료와 권한까지 한 덩어리로 공유하면 다른 사이트의 정보가 섞일 수 있다. 나는 공통 플랫폼과 문의 UI의 실제 소스를 읽고 함께 쓸 부분과 따로 확인할 부분을 정리했다.

어느 사이트의 요청인지 서버가 먼저 정한다

현재 플랫폼 소스는 요청 호스트에서 허용된 형태의 식별자를 읽고 그 식별자로 공개 상태의 기록을 조회한다. 화면이 보내온 임의 이름을 모든 사이트의 조회 기준으로 쓰지 않는다. 이번에는 원래 TypeScript 소스를 메모리에서 실행하고 가상 저장소로 서로 다른 호스트의 조회를 검사했다. 다른 운영 데이터베이스에는 연결하지 않았다.

두 가상 사이트의 응답에 서로의 이름이 섞이지 않는지, 허용하지 않은 호스트와 여러 단계의 식별자가 조회 전에 거절되는지 확인했다. 자료가 없으면 준비 중 안내가 나오는 현재 계약도 읽었다. 준비 중 응답을 실제 정보의 발행 완료로 세지 않는다. 호스트와 기록의 관계를 먼저 확인하는 방법이다.

이미지와 파일의 경로도 같은 범위를 사용한다

본문을 올바르게 나누어도 자료 경로가 공통이면 이미지가 다른 사이트의 것으로 바뀔 수 있다. 현재 미디어 소스는 호스트에서 읽은 식별자를 파일 키 앞에 붙여 저장소를 조회한다. 검사에서는 같은 파일 이름을 요청해도 두 호스트가 각자의 접두 경로를 사용하고 상위 경로 이동이 거절되는지 확인했다.

이 접두 경로는 자료가 섞이지 않도록 이름 공간을 나누는 방법이다. 사용자의 접근 권한을 검사하는 기능과 같지는 않다. 원래 미디어 함수에 없는 비공개 권한 검사까지 있다고 설명하지 않는다. 공개 상태와 인증 조건을 가진 다른 시스템에서는 그 조건도 별도로 연결해야 한다. 경로 구분과 권한 구분을 함께 생각하되 서로 대신하는 증거로 쓰지 않는다.

공통 UI는 설정을 받고 각 사이트의 내용을 채운다

공통 문의 UI에서는 스크롤에 따른 표시와 버튼 모양, 이벤트 전달을 재사용할 수 있다. 실제 소스는 siteId와 동작 목록, 버튼 문구와 연결 조건을 설정으로 받는다. 클릭 이벤트에도 현재 사이트 식별자를 넣는다. 이 구조에서 재사용할 것은 동작이며 각 사이트의 실제 연락 정보와 다음 행동은 자료에서 따로 채운다.

브라우저에 보관할 값도 어떤 사이트의 값인지 구별해야 한다. 현재 카운트 저장은 설정한 storageKey를 읽고 쓴다. 사이트 식별자가 있다는 이유만으로 모든 저장 키가 자동으로 분리된다고 말하지 않는다. 설정을 복사할 때 키와 문구, 연결 대상이 모두 새 사이트의 조건인지 점검해야 한다. 이 블로그의 공개 연락은 별도 이메일 설정을 따른다.

공통 수정과 개별 수정을 다른 근거로 확인한다

공통 기능의 수정은 여러 사이트에 영향을 줄 수 있으므로 한 화면의 정상 결과만으로 끝내기 어렵다. 반대로 개별 문구를 바꾸기 위해 공통 코드를 고치면 영향 범위가 불필요하게 커질 수 있다. 나는 공통 동작의 버전과 개별 설정의 변경을 나누어 기록하는 편이 다음 검수 대상을 정하기 쉽다고 생각한다.

새 로컬 검사 아홉 개는 현재 라우팅 코드와 가상 DB·미디어 조건에서 호스트 구분, 자료 접두 경로, HEAD와 쓰기 거절, 출력 문자열 처리를 확인했다. 원래 파일을 고치지 않았고 실제 사이트 화면과 분산 저장소의 전체 검증도 수행하지 않았다. 공통 UI는 선택한 소스 구간을 읽은 근거이며 이번에 모든 브라우저 동작을 다시 실행한 것은 아니다.

확장할수록 사이트별 정본과 공개 조건을 남긴다

공통 프로그램이 많아지면 어느 프로젝트의 자료가 정본인지 더 분명해야 한다. 파일만 찾았다고 현재 운영 자료로 판단하지 않고 요청을 해석하는 코드와 실제 설정, 공개 상태를 연결해 읽는다. 고객 식별 정보는 이 공개 글에 옮기지 않고 내부 근거로만 남겼다. 기능을 설명하는 데 실제 업체명과 다른 사이트 링크가 필요하지 않았다.

이 홈페이지의 확장 편집실도 공통 블록을 추가하되 원고의 버전과 미디어 공개 검토는 따로 유지한다. 하나의 예제가 되는 것과 여러 사이트에서 같은 조건으로 쓸 수 있는 것은 다른 검사다. 나는 반복 작업을 줄이는 공통 기능을 늘리면서도 사이트마다 무엇을 공개하고 어디로 연결할지의 기준을 잃지 않으려 한다.