n8n으로 SSL 인증서 만료 모니터링 자동화하기 — Notion 목록과 Discord 등급 알림
이 글과 연결된 글 보기
드래그로 이동 · 휠/두 손가락으로 확대 · 방향키로 글 선택 · 0으로 맞춤. 실선: 본문 링크, 점선: 시리즈·주제의 대표 연결.표시된 글 7편 목록
n8n.io 공식 템플릿 마켓플레이스에 공개된 SSL 인증서 모니터링 워크플로우를 가져오면, Notion에 정리해둔 도메인 목록을 매일 아침 자동으로 점검해 인증서 만료일과 SSL Labs 스타일 보안 등급을 확인하고, 등급이 기준 아래로 떨어지거나 만료가 임박했을 때만 Discord로 색상별 알림을 받는 모니터링 체계를 구성할 수 있습니다.
이 템플릿 하나로 보여줄 수 있는 것
"SSL 인증서를 갱신하지 않아 서비스가 몇 시간 멈췄다"는 사고 소식은 심심찮게 나옵니다. 인증서 만료는 사고 자체는 사소하지만 원인이 허무해서 더 눈에 띕니다. 이 템플릿은 그 뉴스를 남 일이 아니라 "내가 예방 체계를 만들어본 적 있는 문제"로 바꿔줍니다. 면접에서 "모니터링 자동화 해본 적 있나요?"라는 질문에 "도메인별 SSL 인증서 만료일과 보안 등급을 매일 점검하고, 문제가 생겼을 때만 알림이 오게 구성해봤습니다"라고 구체적으로 답할 수 있습니다.
짧은 문장 안에 들어간 역량은 세 가지입니다.
- 다중 소스 교차 검증 — 하나의 API 응답만 믿지 않고, 서로 다른 두 경로로 같은 대상을 검사해 신뢰도를 높이는 설계
- 조건부 알림 설계 — 검사 결과가 나올 때마다 알리는 게 아니라, 정해둔 기준(만료 임박, 등급 하락, 취약점 발견)을 넘을 때만 알리도록 판단 로직을 넣는 경험
- 데이터 소스와 알림 채널의 분리 — Notion을 "무엇을 검사할지"의 원천으로, Discord를 "결과를 어떻게 전달할지"의 채널로 나눠 설계하는 구조
이 세 가지는 SSL 모니터링뿐 아니라 서버 헬스체크, 도메인 만료 관리, 외부 API 상태 감시처럼 "여러 대상을 주기적으로 검사하고 이상할 때만 알린다" 유형의 운영 자동화 전부에 그대로 쓰입니다.
이 템플릿은 무엇인가
이 워크플로우는 데이터팝콘이 만든 게 아닙니다. n8n 공식 템플릿 마켓플레이스(n8n.io/workflows)에 Comprehensive SSL certificate monitoring with Discord alerts and Notion integration라는 이름으로 공개된 템플릿이고, 제작자는 Tom Cao입니다. 카테고리는 SecOps로 등록돼 있어서, 보안 운영 자동화 사례를 찾을 때 참고할 만한 템플릿으로 꼽힙니다.
공식 설명에 따르면 이 템플릿이 겨냥하는 사용자는 DevOps 엔지니어, IT 관리자, 보안 담당자입니다. 여러 도메인의 SSL 인증서를 감시하면서 상용 모니터링 서비스에 비용을 들이지 않고, 이중 검증과 전문적인 리포트 형태의 결과를 원하는 사람들입니다. 매일 아침 도는 트리거가 Notion에 등록해둔 URL 목록을 읽어오고, 각 도메인마다 무료 SSL 진단 스크립트와 외부 API 두 경로로 교차 검사한 뒤, 만료일부터 프로토콜·암호화 방식·알려진 취약점·컴플라이언스 기준까지 종합해 SSL Labs와 비슷한 방식의 등급을 매깁니다. 기준을 벗어난 경우에만 Discord로 알림이 갑니다.
n8n 설치나 기본 노드 조작법은 n8n으로 반복업무 자동화 포트폴리오 만들기에 정리돼 있으니, 이 글은 이 템플릿의 구조 자체에 집중합니다.
구조 — Trigger / Task / Target
공식 문서의 "What it does"를 데이터팝콘 방식인 Trigger/Task/Target 세 칸으로 정리하면 이렇습니다. 템플릿 카드에 미리보기로 노출된 노드는 HTTP Request, If, Discord를 포함해 총 8개이며, 나머지 5개의 정확한 이름은 공식 페이지에 나와 있지 않아 아래 흐름도는 "What it does" 설명을 근거로 재구성한 것입니다.
- Trigger — 매일 아침 도는 Daily Trigger 하나입니다. 사람이 매번 도메인을 하나씩 확인하러 갈 필요가 없습니다.
- Task — Notion에서 검사 대상 URL 목록을 가져온 뒤, 무료 SSL 진단 스크립트(sysadmin-toolkit의 오픈소스 스캐너)와 SSL-Checker.io 외부 API 두 경로로 같은 도메인을 각각 검사합니다. 두 결과를 합쳐 인증서 만료일, SSL 설정 보안성, TLS 1.3·1.2 및 폐기된 프로토콜 지원 여부, 암호화 스위트 강도, POODLE·BEAST 같은 알려진 취약점, PCI DSS·NIST·FIPS 컴플라이언스 기준까지 종합 판단해 A+부터 F까지의 등급을 매깁니다.
- Target — 만료 임박(기본 30일 이내), 등급 하락(기본 B 미만), 보안 설정 문제, 컴플라이언스 미달 중 하나라도 걸리면 Discord 채널로 심각도별 색상이 다른 rich embed 알림이 갑니다. 조건에 걸리지 않으면 알림 없이 조용히 끝납니다.
만들기
공식 Setup Instructions는 4단계입니다. 순서를 그대로 두고 각 단계에서 무엇을 준비해야 하는지 풀어씁니다.
1. 데이터 소스 — Notion에 모니터링 대상 URL 정리하기
이 템플릿은 검사할 도메인 목록을 Notion 데이터베이스에서 읽어옵니다. 데이터베이스 안에 URL 컬럼이 있어야 하고, 그 컬럼에 감시하고 싶은 도메인 주소를 하나씩 넣어두면 됩니다. n8n에서 Notion 노드를 쓰려면 notion.so의 Integrations 페이지에서 내부 통합(internal integration)을 하나 만들고, 그 통합을 대상 데이터베이스에 연결(Connect)해서 발급받은 토큰을 n8n Notion 크리덴셜로 등록합니다.
2. 크리덴셜 연결 — Discord Webhook과 API
Discord 알림을 받으려면 웹훅이 필요합니다. Discord 서버의 채널 설정에서 연동(Integrations) → 웹훅 만들기로 URL을 하나 발급받아 n8n에 등록하면 됩니다. 여기에 더해 공식 문서는 "데이터 소스에 필요한 API 크리덴셜도 함께 구성하라"고 안내합니다. 1번의 Notion 크리덴셜이 여기 해당하고, 스캔에 쓰는 외부 API 쪽에 별도 인증이 필요하면 그것도 함께 등록해야 합니다.
3. 임계값 손보기 — 만료 기준일과 최소 등급
기본값은 만료 30일 전부터 알림, 최소 허용 등급 B입니다. 이 값들은 워크플로우 안의 해당 노드를 열어 직접 바꿉니다. 도메인이 많고 갱신 주기가 빠듯한 팀이라면 만료 기준을 45일이나 60일로 늘려 여유를 두는 식으로 조정할 수 있고, 반대로 등급 기준을 A로 올리면 더 엄격하게 걸러냅니다. 어떤 문제 유형(만료·설정 오류·취약점·컴플라이언스)에서 알림을 받을지도 이 단계에서 함께 정합니다.
4. 고급 설정 — 점검 범위와 알림 포맷
취약점 점검 항목이나 준수해야 할 컴플라이언스 기준을 조직 상황에 맞게 조정할 수 있고, Discord 메시지 포맷이나 알림을 보낼 채널도 이 단계에서 바꿀 수 있습니다. 공식 문서는 이 단계를 "필요에 따라"로 설명하고 있어서, 처음 설정할 때는 1~3번까지만 마쳐도 기본 동작을 확인하는 데는 충분합니다.
주의할 점 · 제약
공식 문서와 카드 정보에서 확인되는 제약을 그대로 옮기면 세 가지입니다.
- 데이터 소스가 Notion으로 고정돼 있습니다 — 다른 도구(구글시트, Airtable 등)로 URL 목록을 관리하고 싶다면 데이터 소스 노드를 직접 교체해야 합니다. 템플릿을 그대로 가져오면 Notion 데이터베이스 하나가 전제 조건입니다.
- 이중 검증의 한 축이 외부 API에 의존합니다 — SSL-Checker.io라는 외부 서비스가 응답하지 않거나 느려지면, 그 시간 동안은 자체 스캐너 결과만으로 판단하게 됩니다. 공식 문서는 이 조합을 "정확도를 최대화하기 위한 이중 확인"이라고 설명하지만, 두 경로 중 하나가 외부 서비스에 달려 있다는 점은 감안해야 합니다.
- 임계값·등급 기준을 바꾸려면 노드를 직접 열어야 합니다 — 별도의 설정 화면이 있는 게 아니라, 워크플로우 안의 관련 노드에 들어가 파라미터를 고쳐야 값이 바뀝니다. 도메인마다 다른 기준을 적용하고 싶다면 이 구조를 직접 확장해야 합니다.
노드 세부 이름과 연결 관계 중 카드 미리보기에 없는 나머지 5개 노드는 공식 페이지에 구체적으로 나와 있지 않습니다. 위 흐름도는 "What it does" 설명을 근거로 재구성한 것이라, 실제 노드 배치는 템플릿을 가져와 캔버스에서 직접 확인하는 게 정확합니다.
포트폴리오·면접 포인트
포트폴리오에는 Notion에 등록한 도메인 목록과, 실제로 등급이 산출돼 Discord에 도착한 알림 캡처 두 장이면 충분합니다. 일부러 만료가 임박했거나 등급이 낮게 나오는 도메인을 하나 섞어두면, 조건에 걸렸을 때만 알림이 온다는 걸 직접 보여줄 수 있습니다.
면접에서는 "왜 SSL 검사를 API 하나로 끝내지 않고 두 경로로 나눴나요?" 같은 질문이 나올 수 있습니다. 답은 이 템플릿의 설계 의도와 같습니다. 외부 API 하나만 믿으면 그 서비스가 일시적으로 오류를 내거나 느려질 때 잘못된 결과를 그대로 등급에 반영하게 됩니다. 자체 스캐너와 외부 API를 함께 돌려 서로 다른 두 결과를 비교하면, 한쪽이 흔들려도 다른 쪽으로 신뢰도를 보완할 수 있습니다. 이렇게 "왜 소스를 하나가 아니라 둘로 뒀는지"를 설명할 수 있으면, 노드를 나열하는 사람과 설계 의도를 이해한 사람이 갈립니다.
다음 액션
다음 편에서는 같은 마켓플레이스에서 AI 에이전트가 쓰는 토큰 사용량과 비용을 추정해 구글시트에 기록하는 템플릿을 다룹니다. 오늘 본 것처럼 여러 소스에서 데이터를 모으고 기준에 따라 판단한 뒤 어딘가에 기록하거나 알리는 패턴이, 이번에는 보안이 아니라 비용 관리라는 다른 주제에 적용되는 걸 보게 됩니다.
