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