서류발급 발송
Day1Company
서류발급 요청
가이드
개요
서류발급 요청(출석부·수강증명서·수강증명원)을 목록으로 확인하고, 담당자가 첨부파일과 함께 훈련생 이메일로 바로 발송할 수 있게 해주는 시스템입니다. 발송 이력은 자동으로 기록되어 같은 요청을 실수로 두 번 보내는 것을 막아주고, 발송이 끝나면 원본 구글시트의 상태도 함께 갱신됩니다.
사용법
1. 로그인
비밀번호로 로그인합니다. 슬랙 링크로 들어와도 예외 없이 비밀번호를 입력해야 합니다.
2. 목록에서 선택
기본적으로 "미완료만 보기"가 켜져 있어 처리할 건만 보입니다. 과정별로 묶여 있고, 훈련생을 클릭하면 상세화면이 열립니다.
3. 첨부 후 발송
출석부 PDF를 선택하고 "메일 발송"을 누르면 실제 이메일이 나갑니다. 처리 중에는 버튼에 작은 스피너가 돕니다 — 파일이 클수록 시간이 걸릴 수 있습니다. 첨부파일은 10MB를 넘으면 거부되니, 큰 파일은 압축하거나 나눠서 올려주세요.
4. 발급 완료
출석부만 요청된 건은 발송 성공 시 자동으로 완료 처리됩니다. 수강증명서 등 다른 서류가 함께 걸린 건은, 그 서류 처리(모두싸인 등)까지 끝난 뒤 "발급 완료" 버튼을 직접 눌러야 합니다. 실수로 눌렀다면 같은 버튼을 한 번 더 누르면 "확인중" 상태로 되돌아갑니다.
실제 훈련생 기록을 건드리지 않고 "발송 전 미리보기" 기능을 체험해보고 싶으신가요?
테스트 예시 데이터로 미리보기 체험하기 →
목록 맨 위에 "[테스트 예시] KDT 1기"가 추가됩니다 — 이 예시는 무엇을 눌러도 실제 이메일이 나가거나 실제 시트가 바뀌지 않습니다.
슬랙 연동
"훈련생 서류발급" 워크플로에 새 요청이 올라오면 "발송하러 가기" 버튼이 함께 붙습니다. 원래는 이 버튼이 해당 훈련생 화면으로 바로 열리는 걸 목표로 했지만, 슬랙 워크플로 빌더의 버튼 URL 입력창이 여러 줄짜리 값을 못 받아들여서(실제 클릭 테스트로 확인), 지금은 목록 화면으로 들어온 뒤 직접 선택하는 방식으로 되어 있습니다. "미완료만 보기" 필터가 기본으로 켜져 있어 찾기는 어렵지 않습니다.
시스템 구조
슬랙 버튼을 누르면 이 시스템으로 들어와 목록을 확인하고, 발송하면 NHN Cloud를 거쳐 실제 이메일이 나갑니다. 발송 여부는 Cloudflare KV에 별도로 기록해 시트 갱신이 실패해도 중복발송을 막고, 시트 읽기/쓰기는 항상 GAS 웹앱을 경유합니다.
문제 해결
- 비밀번호가 계속 틀렸다고 나와요
- 정확히 입력했는데도 안 되면, 여러 번 틀려서 잠깐 잠겨있을 수 있습니다("너무 많이 틀렸습니다" 메시지가 뜨면 안내된 시간만큼 기다렸다가 다시 시도해 주세요). 그래도 안 되면 비밀번호 자체를 담당자에게 다시 확인해 주세요.
- 첨부파일이 안 올라가요
- 파일 용량이 10MB를 넘으면 업로드가 거부됩니다. 더 작게 압축하거나 나눠서 첨부해 주세요.
- 목록이 뜨는 데 가끔 오래 걸려요
- 구글시트와 연결하는 부분(GAS)이 오래 안 쓰이다 첫 요청을 받으면 "잠깐 깨어나는" 지연이 있을 수 있습니다. 이 경우 시스템이 자동으로 몇 초 안에 다시 시도하니 대부분 저절로 해결됩니다. 그래도 안 뜨면 새로고침 버튼을 눌러주세요.
- 발송 버튼을 눌렀는데 화면이 멈춘 것 같아요
- 파일을 업로드하는 중일 수 있습니다. 버튼 옆에 작은 원이 돌고 있는지 확인해 주세요 — 돌고 있다면 정상적으로 처리 중인 것입니다. 큰 PDF일수록 시간이 걸립니다.
- "오늘 발송 한도를 초과했습니다"라는 메시지가 떠요
-
하루에 보낼 수 있는 이메일 수에 상한이 있습니다(기본 30건, 필요시 관리자가 조정 가능).
- 정상적인 대량 발급이면 관리자에게 한도 상향을 요청해 주세요.
- 짐작 가는 이유가 없다면 비정상적으로 반복 발송되고 있지 않은지 먼저 확인해 주세요.
- 한도는 다음날 자동으로 초기화됩니다.
- "요청 보안 확인 실패"라는 메시지가 떠요
- 브라우저 탭을 오래 열어두면 발생할 수 있습니다. 새로고침 버튼을 한 번 눌러주세요.
- 발송은 됐는데 시트 상태가 안 바뀌어요
-
메일은 이미 나갔으니 다시 보내지 마세요.
- 발송 기록은 별도로 안전하게 남아있어 중복발송 걱정 없습니다.
- 시트 갱신은 잠깐의 지연이면 자동으로 재시도됩니다.
- 그래도 이 안내가 계속 뜨면 자동 재시도로도 안 풀린 것이니, 새로고침 후 상세화면에서 "발급 완료" 버튼을 직접 눌러주세요.
- 시트 쪽에서 "권한이 없습니다" 같은 오류가 나요
- 이 시스템이 쓰는 구글시트에 담당자 계정의 편집자 권한이 있는지 먼저 확인해 주세요.
- "시트 조회 실패: unauthorized"라는 메시지가 떠요
-
이 시스템과 구글시트를 이어주는 코드(GAS)의 인증키가 서로 안 맞을 때 나는 오류입니다. 일반 사용자가 직접 해결할 수 있는 문제는 아니니, 운영 책임자에게 바로 알려주세요.
담당자 참고: GAS 코드 편집기 열기 → 프로젝트 설정 → 스크립트 속성에서
DOCUMENTS_WEBAPP_SECRET값을 확인하고, doc-issuance-sender의 Cloudflare 시크릿(DOCUMENTS_APPS_SCRIPT_SECRET)과 동일한지 대조할 것. 이 편집기는 회사 구글 계정으로 로그인해야 열립니다.
알려진 제한 · 보류 사항
제한사항 — 구조적으로 지금 방식이 최선
아래는 결정을 바꾼다고 당장 해결되지 않는, 시스템·문서 구조 자체의 제약입니다.
상태는 두 단계뿐
"확인중/발급 완료" 두 단계만 지원합니다.
- 연결된 구글시트가 체크박스 하나로만 상태를 저장하는 구조라, 애초에 세 단계 이상을 구분해서 저장할 방법이 없습니다.
- 실제로 운영해보니 두 단계만으로도 업무에 지장이 없어, 시트 구조를 바꾸면서까지 세분화하지는 않기로 했습니다.
출석부 자동 발급 미도입
담당자가 HRD-Net에서 출석부를 직접 다운로드해 첨부하는 지금 방식을 그대로 유지합니다.
- 고용24/HRD-Net에 훈련생 출결 데이터를 가져오는 API는 있지만, 그걸로 우리가 새로 만든 문서는 HRD-Net이 실제로 발급한 원본이 아닙니다.
- 이 출석부는 훈련생이 외부기관(보조금·취업증명 등)에 공식 제출하는 용도로 쓰이는데, 우리가 만든 문서는 "언제 어디서 발급됐는지" 증명이 안 돼 원본으로 인정받지 못하거나 위조 문서처럼 보일 위험이 있습니다.
- HRD-Net이 발급하는 진짜 파일을 자동으로 가져오려면 담당자 로그인 계정 자체를 시스템이 다뤄야 하고 별도 인프라도 필요해서, 그 위험과 비용이 지금 얻는 이득보다 크다고 판단했습니다.
목록 갱신은 최대 20초 늦을 수 있음
목록 조회 속도를 높이기 위해 구글시트 조회 결과를 20초 동안 저장해두고 재사용합니다.
- 이 화면에서 직접 "발급 완료"를 누르거나 메모를 저장한 경우는 저장과 동시에 그 항목만 즉시 갱신되므로, 새로고침하면 바로 반영됩니다.
- 반면 구글시트를 직접 열어 셀을 수정했거나 새 서류발급 신청폼이 막 제출된 경우는 이 시스템이 그 변경을 알 방법이 없어, 최대 20초 정도 늦게 보일 수 있습니다.
- 급하게 최신 상태를 확인해야 한다면 20초 정도 기다렸다가 새로고침해 주세요.
보류사항 — 특정 결정이 있으면 재검토 가능
아래는 기술적으로는 가능하지만, 비용·리스크 대비 이득이 낮다고 판단해 지금은 미룬 것입니다. 상사(의사결정권자)가 아래 "필요한 조치"를 진행해주시면 다시 검토할 수 있습니다.
감사로그에 담당자명 미표시
처리 기록에 담당자명이 자동으로 남지 않습니다.
- 공용 비밀번호 하나를 여러 담당자가 함께 쓰는 구조라, 로그인 시점에 "누가" 들어왔는지 구분할 정보 자체가 없습니다.
- 개인별 로그인 체계를 새로 만들지 않기로 한 원래 방침과 맞물려 있어, 필요해지면 별도로 다시 설계해야 합니다.
필요한 조치: 개인별 로그인 체계(계정별 아이디) 도입 여부 결정
외부 접근 제한 미도입
Cloudflare Access 같은 별도 접근 제어는 도입하지 않았습니다.
- 이미 비밀번호+세션+여러 번 틀리면 잠기는 로그인 제한으로 막고 있습니다.
- 다루는 정보(서류발급 요청)가 결제·의료 정보급으로 민감하지는 않습니다.
- 별도 출입증을 더 붙이는 비용(사내 인증 시스템 연동 등 실제 개발 필요) 대비, 지금 방어 수준으로 충분하다고 판단했습니다.
- 사고가 나거나 더 민감한 정보를 다루게 되면 다시 검토합니다.
필요한 조치: Cloudflare Access(Zero Trust) 결제수단 등록, 또는 Slack 로그인(OAuth) 개발 승인
수강증명서·수강증명원(모두싸인) 자동 발급은 검토 중
수강증명서·수강증명원은 아직 담당자가 모두싸인에서 직접 처리하는 방식 그대로입니다 — 아래 이유로 도입 여부가 아직 결정되지 않았습니다.
- (좋은 소식) 모두싸인은 HRD-Net과는 사정이 다릅니다 — 지금도 이미 이 문서의 공식 발급 경로가 모두싸인이라, API로 서명 절차를 시작해도 웹에서 직접 한 것과 같은 진짜 문서가 나옵니다. 출석부 때 걸렸던 "가짜 문서" 문제는 없습니다.
- API 연동은 무료 플랜이 아니라 일정 등급 이상 유료 플랜부터 지원되는데, 실제 계정 설정(개인설정 → 외부 서비스 연동)에서 확인해보니 API 신청 메뉴 자체가 안 보여서, 지금 플랜에서 바로 쓸 수 있는지 확인이 안 됩니다.
- 완료된 서명 문서 자체는 지금도 훈련생 서명 후 문제없이 받고 있으니 그건 의문의 여지가 없습니다. 아직 확인이 안 된 건 "우리 시스템이 그 완료 문서를 API로 자동 수령해서 발송 메일에 바로 첨부할 수 있는지"라는 더 좁은 부분입니다.
필요한 조치: 모두싸인 "도입 문의" 제출 승인(정확한 요금·플랜을 확인하는 절차 자체가 비용이 발생할 수 있어 승인 필요)
참고 자료: API 소개, 템플릿으로 서명요청하기, API 연동 기능 소개(고객지원), 공공기관 전용 API
슬랙 워크플로 내 처리(파일첨부·발송)는 검토 후 보류
출석부 첨부와 메일 발송까지 슬랙을 떠나지 않고 끝낼 수 있는지 검토했지만, 지금처럼 슬랙에서 이 시스템으로 들어와 처리하는 방식을 유지하기로 했습니다.
- 슬랙에 파일 업로드 기능 자체는 있지만, 지금 쓰는 것 같은 코드 없는 워크플로 빌더가 아니라 Slack이 별도로 제공하는 "커스텀 앱 개발" 방식에서만 지원됩니다.
- 발송(NHN Cloud 호출)처럼 외부로 요청을 보내는 기능도 워크플로 빌더 기본 기능엔 없어서, 이것도 커스텀 앱 개발이 필요합니다.
- 결국 새 슬랙 앱을 직접 개발하는 수준의 투자가 필요한데, 이건 예전에 "슬랙 로그인 연동"을 검토했을 때와 같은 종류의 판단이라(그때도 개발 비용 대비 이득이 낮다고 봤음), 지금 규모에서는 얻는 이득 대비 투자가 크다고 판단했습니다.
필요한 조치: 슬랙 커스텀 앱(Slack Functions) 개발 착수 결정 — 규모가 있는 신규 개발 프로젝트입니다.