공개 랜딩: 데모·도입 상담·문서 이동
제품 개발 기록으로 · AI · 근무표 · 급여 시트
코드 대조와 로컬 랜딩의 데모 탭 선택·근무표 생성으로 확인한 사용 설명입니다. 상담 접수·메일 발송과 운영 CDN 배포는 검증하지 않았습니다.
진입과 전체 조작
로그인 없이 랜딩 /를 엽니다. 상단 「왜 hereby인가」「데모」「기능」「가격」「도입 절차」「한 달 초기 도입 상담」은 같은 페이지의 해당 절로 이동합니다. 좁은 화면에서는 메뉴 열기 후 같은 항목을 고르고 닫습니다. 로고는 처음으로 돌아갑니다.
| 조작 | 입력·결과 | 저장·외부 영향 |
|---|---|---|
| 관점 선택 | 「경영 · 매니저」/「실무 · 운영」 선택, 키보드 방향키 이동 | 제목·설명·데모 이름·노출 탭 전환; 기본 경영 |
| 질문 데모 | 정해진 질문 버튼 선택 | 정해진 답변을 타이핑 표시, 실제 AI 요청 없음 |
| 근무표 데모 | 3개 제약 체크, 생성, 초기화 | 4명×7일 예시 근무표만 변경 |
| 급여 편차 데모 | 5·10·20만 원 기준 선택, 검토/확정 버튼 | 기준 이상 예시 행 강조, 서버 확정 없음 |
| 계약 데모 | 작성·서명 대기·완료 상태에 hover/포커스/클릭 | 예시 계약서 내용 전환, 실제 계약 생성·발송 없음 |
| 급여 시트 영상 | 실무 관점의 「급여 시트 둘러보기」 재생 | 저장된 실제 화면 녹화 재생, 현 세션의 급여 변경 없음 |
| 기능 색인 | 「전체 기능 더 보기」와 접기 | 13개 소개 펼침; 접으면 색인 위로 이동 |
| 규모 슬라이더 | 10~500명, 5명 단위, 코드 초기값 120명 | 추정 업무 시간과 상담 문구만 변경, 견적 산출 아님 |
| 상담 신청 | 병원 규모·메일 주소·개선 업무 필수 | 성공 응답을 받은 경우 완료 화면 |
| 테마 | 푸터 라이트/다크 선택 | 브라우저 hereby-landing-theme에 저장; 차단 시 현재 세션만 적용 |
| 참고 이동 | FAQ 내부 링크, 약관·개인정보·가이드·앱스토어 | 관련 경로 또는 외부 사이트 이동 |
데모 사용 순서
- 상단 「데모」 또는 「3분 데모 체험」으로 이동합니다. 관점을 고르면 해당 관점에 맞는 탭 이름이 표시됩니다. 「24시간 직원에게 질문하기」는 준비된 질문 중 하나를 누르면 답변·상세 내용이 바뀝니다. 자유 입력이나 조직 데이터 조회는 없습니다.
- 「AI 근무표」를 누르고 「김○○ 야간(N) 전담」「이○○ 목·금 연차」「전 직원 연속 나이트 2회 제한」을 선택합니다. 기본값은 모두 켜짐입니다.
- 「한 번의 클릭으로 근무표 초안 생성하기」를 누릅니다. 예시 표에 D/E/N/휴가 채워지고 반영 제약 개수와 「생성 완료」가 표시됩니다. 체크만 바꾸면 표는 즉시 바뀌지 않고 다시 생성해야 합니다. 같은 조건으로는 생성 버튼을 비활성화합니다.
- 표의 칸에 포인터를 두면 직원·요일·근무 뜻과 적용 제약이 표시됩니다. 「처음 상태로 되돌리기」는 표를 비우고 체크를 모두 기본값으로 돌립니다. 데모의
1.6초는 정해진 채움 애니메이션 길이이며 실제 AI 성능 측정이 아닙니다. 실제 스케줄러의 AI 버튼 제공 상태와도 구분합니다. - 「인건비 변화 확인」(실무: 「급여 이상 항목 확인」)에서는 기준 금액을 선택해 전월 대비 절대 차이가 기준 이상인 행을 봅니다. 기준 변경 시 완료 상태가 해제됩니다. 검토 요청/급여 확정 동작은 데모 안의 안내 상태만 바꿉니다.
- 「실시간 계약 진행 현황」(실무: 「직원 등록 → 전자계약」)에서 상태를 가리키거나 클릭합니다. 오른쪽 계약서 예시·서명 시각이 바뀝니다. 작성 중의 임금 타이핑은 정해진 예시이며 실제 입력 기능이 아닙니다.
- 실무 관점의 「급여 시트 둘러보기」에서 재생합니다. WebM 재생 지원 여부에 따라 영상 또는 포스터·대체 안내가 표시됩니다. 영상은 무음이며 단계 자막을 읽습니다. 영상과 현재 차이를 함께 확인합니다.

- AI 근무표 탭을 선택합니다.
- 제약조건 체크를 선택합니다. 체크 변경만으로 표를 다시 만들지 않습니다.
- 초안 생성 버튼을 누른 뒤 오른쪽 표와 반영 제약 개수를 확인합니다.
규모와 상담 신청
- 「가격」에서 직원 수 슬라이더를 움직입니다. 500은 「500명+」로 표시하고 대형 병원·체인 별도 라이선스 상담 문구로 바뀝니다. 업무 시간은 병동당 30명·월 근무표 4시간, 급여 24시간을 사용한 추정치로 10시간 단위 반올림입니다. 요금·절감 보장·실측 성능이 아닙니다.
- 상담 버튼을 눌러 「시작하기」 신청 폼으로 이동합니다. 병원 규모는 50명 미만/50~150명/150~500명/500명 이상 중 선택합니다. 이메일 예시는
docs-test@example.com과 같은 형식입니다. 개선 업무 선택지는 급여·근무표·병원 현황·인력/인건비·근태·휴가/결재·엑셀·노무/세무·디지털 전환·둘러보기입니다. - 필수 항목을 입력하고 신청 버튼을 누릅니다. 규모 누락, 이메일 형식 오류, 개선 업무 미선택은 각각 오류를 표시하고 전송하지 않습니다. 숨겨진
website는 봇 차단용이며 사용자가 채우는 항목이 아닙니다. - 전송 중 재클릭을 막고 명시적인
success: true응답을 받은 뒤 완료 화면을 표시합니다. HTTP 200이어도 JSON·응답 형태가 잘못되면 실패로 처리합니다. 성공한 뒤 같은 화면에서 재전송하지 않습니다. - 서버는 입력 검증·빈도 제한·동일 이메일 동시 요청 처리를 거쳐 내부 영업 이메일을 보냅니다. 상담 DB 레코드나 사용자 계정을 생성하지 않습니다. 동일 이메일 제한은 성공한 전송 이후 적용되므로 실패를 성공 접수로 안내하지 않습니다.
- 오류 시 입력을 유지하고 재시도하거나 화면의 연락 안내를 이용합니다. 폼 성공은 내부 메일 전송 처리 결과이며 담당자의 회신·도입 계약 완료를 뜻하지 않습니다. 페이지 새로고침은 로컬 폼 상태를 초기화합니다.
문서·약관 이동과 유지보수
푸터의 이용약관·개인정보 처리방침은 /terms/.../ 경로로 열고 수집 고지는 ?section=collect를 전달합니다. 뒤로 가기는 브라우저 기록을 따릅니다. FAQ와 가이드 버튼은 문서 사이트의 사용자 가이드로 연결합니다. 현재 「hereby 관리자」 링크는 문서 빌드에서 제외된 getting-started 페이지를 가리키므로 유효한 관리자 진입 주소로 안내할 수 없습니다. 이 불일치는 문서 원장에 남겼으며 랜딩 코드를 수정한 작업은 아닙니다.
공개 카피의 「제공 중」은 실제 기능 문서의 메뉴·권한·미구현 상태를 대체하지 않습니다. 총무 준비 중 메뉴, AI 순차 제공, 전자 교부의 실제 전달 경로 등은 사용자 문서 작성 전에 해당 기능을 대조합니다. 랜딩 변경 시 데모 예시·마케팅 근거·문의 응답·정적 SEO 문서·약관 경로를 함께 확인합니다.
- 화면 상태와 데모 데이터 · 데모 화면
- 접수 응답 검사 · 접수 서버
- 정적 페이지·canonical·robots·누락 경로 상태 코드 검증은 개발·운영을 따릅니다. 로컬 SPA가 열리는 것과 CDN 배포 확인은 별개입니다.
기존 변경 설명에만 있던 랜딩 사용법을 현재 조작별로 정리했습니다. 로컬 데모 생성 후 실제 셀 값·제약 3건·생성 완료 상태를 확인했으며 이미지에는 생성 전 상태만 담았습니다. 상담 전송, 모든 관점·모바일·테마 조합은 코드 대조이며 새 실행 확인을 하지 않았습니다.
약관 열람과 정적 HTML 제공
목적과 사용 조건
메디컬 소개 사이트를 방문한 사람이 개인정보 처리방침, 개인정보 수집 고지, 이용약관을 읽는 공개 기능입니다. 로그인, 조직 선택, 업무 권한, 사전 등록 데이터가 필요하지 않습니다. PC·모바일 웹에서 같은 문서를 엽니다. 이번 변경은 주소별 초기 HTML 제공에 관한 것으로 문서 내용이나 레이아웃을 수정하지 않습니다.
화면에 있는 조작은 문서 열기, 스크롤, 홈으로 이동하기입니다. 생성·편집·저장·승인·삭제·검색·내보내기 기능은 제공하지 않습니다. 열람 자체로 API를 호출해 업무 레코드를 만들거나 변경하지 않습니다. 개인정보 수집 고지는 상담 입력과 관련된 설명이며, 고지를 여는 것만으로 상담이 제출되지는 않습니다.
진입 경로와 사용 절차
- 메디컬 랜딩
/에 접속하고 페이지 하단 푸터로 이동합니다. - 「개인정보 처리방침」을 누릅니다.
/terms/privacy-policy/가 새 탭으로 열리고 제목 「개인정보처리방침 | hereby 메디컬」과 해당 본문이 표시됩니다. 주소를 직접 입력하거나 새로고침해도 같은 문서를 받아야 합니다. - 「개인정보 수집 고지」를 누르면
/terms/privacy-policy/?section=collect가 새 탭으로 열립니다. 같은 문서를 받은 뒤 JavaScript가collect를 제2조와 연결하여 해당 조항으로 스크롤합니다. JavaScript가 꺼져 있으면 문서 전체를 위에서부터 읽을 수 있고 자동 스크롤은 실행되지 않습니다. - 「이용약관」을 누르면
/terms/terms-of-service/가 새 탭으로 열립니다. 현재 이 문서는 준비 중인 안내를 제공하며, 운영에서도 검색 대상에서 제외됩니다. 이번 수정이 이용약관의 내용 완성을 의미하지 않습니다. - 문서 상단의 「홈으로」 또는 「hereby 메디컬」 링크를 누르면
/의 새 HTML을 요청하여 랜딩으로 돌아갑니다. 새 탭을 닫으면 원래 랜딩 탭이 남습니다.
약관 URL은 끝의 / 유무와 명시적인 index.html 주소 모두 해당 문서의 초기 HTML을 제공합니다. 사용자 진입 링크는 끝의 /가 있는 주소입니다. 명시적인 index.html 주소는 원본 확인용이며, 기존 클라이언트 라우터가 해당 주소의 브라우저 제목을 홈 제목으로 다시 지정할 수 있는 동작은 이번 수정에 포함하지 않습니다. /terms와 /privacy는 이 기능의 주소가 아닙니다. 알 수 없는 section 값은 자동 스크롤 대상을 만들지 않습니다. 자유 입력 필드, 필수값 검증, 금액·날짜 입력은 없습니다. 네트워크 실패 시 브라우저 오류 화면에서 새로고침하며, 별도 저장 복구나 중복 제출 처리는 필요하지 않습니다.
초기 응답과 검색 환경
2026-09-14 수정 전 dev·stg에서는 일반 약관 주소가 메인 랜딩 HTML과 제목을 반환했고 X-Cache: Error from cloudfront가 확인됐습니다. 같은 경로에 index.html을 붙이면 올바른 별도 문서가 반환됐습니다. 파일 미생성이 아니라 실제 요청 경로에 대응하는 S3 객체가 없어 CDN 오류 응답이 메인 HTML로 대체되는 현상입니다. JavaScript로 약관이 보이더라도 초기 응답의 본문·메타데이터가 올바르다는 증거가 되지 않습니다.
수정 코드는 빌드된 두 약관 문서를 끝의 /가 있는 키와 없는 키에 각각 게시합니다. 이 네 객체는 text/html; charset=utf-8로 제공되며, 메인 페이지의 오류 대체 응답을 거치지 않고 문서를 받을 수 있게 합니다. 아래 후속 확인에서 스테이징의 실제 제공을 검증했으며, 개발·운영의 배포 상태를 대신 증명하지는 않습니다.
| 환경 설정 | 홈·개인정보처리방침 | 이용약관 | sitemap·절대 URL 메타데이터 |
|---|---|---|---|
dev·stg: LANDING_SEO_INDEXABLE=false, LANDING_SITE_URL 없음 | noindex, follow | noindex, follow | 빈 sitemap. canonical·og:url·JSON-LD 생략이 정상 |
운영: LANDING_SEO_INDEXABLE=true, 운영 LANDING_SITE_URL 지정 | index, follow | noindex, follow | 홈·개인정보처리방침만 sitemap에 포함. 페이지별 canonical·구조화 데이터 생성 |
LANDING_VERIFY_URL은 검사할 배포 주소이며 색인 설정을 바꾸지 않습니다. 설정 누락은 검사 실패로 처리합니다. 메타데이터를 만들기 위한 LANDING_SITE_URL과 혼동하여 개발 사이트에 운영 설정을 넣지 않습니다.
구현 관계와 유지보수
apps/landing/src/views/footer.html이 세 열람 링크를 제공하고,src/views/terms/가 각 문서의 내용과 홈 링크를 제공합니다.src/router.ts는 현재 주소와section=collect의 조항 이동을 해석합니다.apps/landing/seo.ts가 원본 템플릿에서 페이지별 정적 HTML과 메타데이터·robots·sitemap을 생성합니다. API·SDK·DB 엔티티가 문서 내용의 공급원이 아닙니다.apps/landing/publish-routes.mjs가 빌드 파일을 확인하고ORIGIN_BUCKET,AWS_REGION을 사용하여 네 약관 객체 키에 업로드합니다. 실행 인자--dry-run은 게시 계획만 출력합니다. 별도 패키지 의존성이나 인증 정보를 추가하지 않습니다..github/workflows/dev-sites.yaml,stg-sites.yaml,release-sites.yaml은 원본 버킷 동기화 후 경로 객체를 게시하고 캐시 무효화를 요청합니다.s3 sync --delete가 별도 경로 객체를 제거하므로 게시 단계는 반드시 동기화 뒤에 있어야 합니다. 실패 시 배포 작업을 다시 실행합니다.- 운영은 캐시 무효화 요청 후 실제 주소를 최대 12회, 10초 간격으로 검사하며 단계 전체 제한은 5분입니다. 응답이 잘못되면 운영 배포 작업이 실패합니다. 개발·스테이징은 빌드 산출물 SEO 검사를 실행하고 배포 후 HTTP 검사는 한국 네트워크에서 별도로 수행합니다. 해외 러너의 작업 요약에는 HTTP 검사를 실행하지 않았다는 설명과 한국에서 실행할 명령이 표시됩니다. 알 수 없는 URL의 전역 404 응답 정책은 이번 수정 범위에 포함하지 않습니다.
검증과 사용자 문서 영향
2026-09-14, 수정 기준 커밋 a7d8ea63, 브랜치 codex/fix-landing-static-routes에서 조사했습니다. dev·stg 공개 HTTP 응답을 비로그인 상태로 읽었고, 운영 사이트는 요청하지 않았습니다.
- 실제 dev에 새 배포 검사를 실행하여 약관 일반 주소 네 곳의 실패와 나머지 네 검사의 성공을 확인했습니다. 이 실패는 수정 전 장애 재현 근거입니다.
seo-routing.test.mjs는 실제 빌드 파일로 S3의 정확한 키 조회와 CDN fallback을 재현합니다. 게시 전 검사가 실패하고 네 경로 객체를 적용한 뒤 통과하는 것을 검사합니다. 실제 AWS 업로드 성공을 대신 증명하지는 않습니다.seo-deployed.test.mjs는 홈페이지, 각 약관의 세 주소 형태, robots·sitemap의 HTTP 상태·콘텐츠 유형·환경별 메타데이터를 검사합니다. HTTP 200이라도 CDN 오류 대체 응답이거나 다른 문서이면 실패합니다.- 랜딩 빌드·환경별 테스트, 전체 빌드·린트의 최종 결과는 변경 설명에 기록합니다. 수정의 실제 배포·운영 반영·Search Console·검색 색인은 별도 확인 대상입니다.
사용자 문서의 링크 주소와 조작 절차는 유지됩니다. 개발·QA 안내인 apps/landing/README.md에 환경별 기대값, 올바른 주소, 게시 순서, 배포 검사 명령을 갱신했습니다. 이 변경에서 사용자 가이드 생성 파일은 수정하지 않았습니다. 푸터 열기, 개인정보 수집 고지의 자동 스크롤, 홈으로 복귀의 새 화면 캡처·영상은 아직 없으며 수정 배포 후 해당 세 흐름의 촬영이 필요합니다. 현재 근거는 코드 추적과 HTTP 검사이므로 화면·영상 QA 완료로 표시하지 않습니다.
후속 확인: 스테이징 배포 검사의 국가 제한
2026-09-14 Actions 실행 34831131844의 최초 실행과 재실행을 조사했습니다. 실제 체크아웃은 스테이징 커밋 fd22405e이며, 로컬 검사는 같은 검사 코드를 포함한 develop의 42db39c3에서 수행했습니다.
- Actions에서
Deploy Landing의 빌드,Verify SEO Output, S3 파일 동기화와 네 약관 경로 객체 게시가 성공한 것을 확인했습니다. 이후Verify Deployed SEO의 8개 검사가 모두 실패했습니다. 러너 이미지 로그의 실행 지역은 미국eastus2입니다. - 인프라 정본
fig-gitops의0fa2188e에서 스테이징 공통 설정이whitelist와KR을 지정하고, 랜딩 배포 설정이 이를 사용하는 것을 확인했습니다. 같은 배포 설정은 403을/index.html과 HTTP 200으로 대체하므로 모든 요청이 오류 대체 응답이 될 수 있습니다. 이는 약관 파일 누락이나 잘못된 noindex 설정과 별개의 원인입니다. - 한국에서
LANDING_VERIFY_URL=https://medical.stg.hereby.me/ LANDING_SEO_INDEXABLE=false node --test apps/landing/seo-deployed.test.mjs를 실행하여 8개 통과를 확인했습니다. 홈·약관 세 주소 형태·robots·sitemap을 실제 CDN으로 요청한 결과입니다. 스테이징 sitemap은application/xml이고 한국에서 확인한 정상 응답에는X-Cache: Error from cloudfront가 없습니다. - 배포된 HTTP 응답은 한국 네트워크에서 검사합니다. 국가 제한은 접근 제어이고
noindex는 검색 지시이므로 서로 대체할 수 없습니다. HTTP 200인 오류 대체 응답을 실패시키는 검사 코드도 유지합니다.
개발 환경도 같은 한국 제한을 사용하며 운영 환경의 공통 설정에는 국가 제한이 없습니다. 이 확인은 IaC 코드와 지역이 다른 HTTP 검사 결과의 대조이며 AWS 콘솔에서 현재 배포 설정을 직접 조회한 결과는 아닙니다.
같은 날 최종 결정으로 KR 제한을 유지하고 개발·스테이징의 해외 러너에서는 배포 후 HTTP 검사를 실행하지 않도록 수정했습니다. 빌드 산출물의 Verify SEO Output 단계는 그대로 실행하며, 기존 S3 동기화·약관 경로 게시·캐시 무효화 이후 작업 요약에 한국에서 사용할 검사 명령을 남깁니다. 해외 HTTP 검사를 통과한 것으로 표시하지 않습니다. 운영의 배포 후 검사와 CloudFront 접근 정책은 유지합니다. 별도의 한국 Actions 러너 구성은 요구하지 않습니다.
개발·QA 담당자는 배포 후 한국 네트워크에서 Actions의 Deploy Landing 작업 요약을 열고 표시된 LANDING_VERIFY_URL과 LANDING_SEO_INDEXABLE=false 명령을 저장소 루트에서 실행합니다. Node.js와 설치된 저장소 의존성이 필요합니다. 홈페이지·약관·robots·sitemap 검사 8개가 모두 통과하면 해당 시점의 배포 HTTP 검증을 완료한 것입니다. 실패하면 출력된 경로의 응답을 확인하고 원인을 수정한 뒤 같은 명령을 다시 실행합니다. 한국에서 개발·스테이징 검사 각각 8개, 총 16개가 통과했습니다. 로컬 회귀 검사 9개, 두 workflow의 YAML·shell·요약 출력 검증, 전체 린트·빌드와 preflight도 통과했으며, 수정한 workflow의 GitHub 실행은 아직 확인하지 않았습니다. 상세 근거는 변경 설명에 기록합니다.
사용자의 문서 열기·스크롤·홈 이동 절차는 유지됩니다. 개발·QA용 README에는 검사 실행 지역 조건과 장애 원인을 추가했습니다. 이번 확인에서는 브라우저 화면을 조작하거나 새 캡처·영상을 만들지 않았고, 운영 사이트·Search Console·검색 색인은 검증하지 않았습니다.