SPF 조회 10회, DMARC는 상위 도메인까지 — 메일 DNS 레코드 점검과 변경 감지
메일 도메인의 A·MX·SPF·DKIM·DMARC·PTR을 한 번에 점검하는 DNS 점검을 만들었다. SPF의 DNS 조회 10회 제한을 include를 따라가며 세는 방법, 하위 도메인 DMARC를 상위 도메인 정책으로 판정하는 규칙, 레코드가 바뀌었을 때만 알리는 변경 감지까지 정리했다.
메일 도메인의 A·MX·SPF·DKIM·DMARC·PTR을 한 번에 점검하는 DNS 점검을 만들었다. SPF의 DNS 조회 10회 제한을 include를 따라가며 세는 방법, 하위 도메인 DMARC를 상위 도메인 정책으로 판정하는 규칙, 레코드가 바뀌었을 때만 알리는 변경 감지까지 정리했다.
도메인 만료일을 .kr은 KISA WHOIS 43번 포트로, 그 외는 IANA RDAP 부트스트랩으로 찾아 조회하게 했다. 호스트명에서 등록 도메인을 뽑는 규칙, 한글·영문이 섞인 WHOIS 응답 해석, 조회가 실패할 때의 수동 만료일, 일수 기준 판정과 테스트까지 정리했다.
TcpClient와 SslStream으로 직접 핸드셰이크를 해서 검증 오류가 있어도 인증서 정보를 끝까지 모으는 SSL 점검을 만들었다. 587·143·110처럼 평문으로 시작하는 메일 포트의 STARTTLS 업그레이드, StreamReader 함정, 판정 규칙과 인증서 갱신 감지까지 정리했다.
웹·메일 서버의 SSL 인증서, 도메인 만료, DNS, 메일 서버 상태를 주기적으로 점검하고 이상이 있으면 메일로 알려 주는 InfraWatch를 만들었다. 설계 문서로 점검 명세와 알림 규칙을 먼저 정하고, Phase 0~9를 거쳐 운영 배포까지 한 과정을 연재 첫 글로 정리했다.
창 없이 트레이에 상주하는 WPF 앱을 배포 가능한 상태로 마무리했다. Mutex와 이벤트로 만든 단일 인스턴스, 다시 시작 없이 바뀌는 단축키·테마·언어, 범위 외였던 영어 화면을 하루 안에 넣은 문구 표 구조, 155MB에서 70MB로 줄인 단일 exe와 그 대가까지 정리하며 연재를 마친다.
1차는 한 PC 전용이지만 2차 여러 PC 동기화를 대비해 Id는 GUID, 모든 엔티티에 UpdatedAt, 삭제는 소프트 삭제로 정했다. 이 결정이 JSON 가져오기의 충돌 처리(더 최신인 쪽 유지)로 바로 쓰인 과정과, 고정 GUID 샘플, VACUUM INTO 백업, EF Core에서 만난 함정을 정리했다.
명령어 본문에 {{이름}}, {{이름:기본값}} 자리를 두고 복사할 때 채우는 기능. 정규식 대신 손으로 짠 파서, 닫히지 않은 중괄호를 그대로 두는 규칙, 같은 이름은 한 번만 묻기, 마지막 입력값 기억, Enter로 다음 칸까지 정리했다.
어느 프로그램 위에서든 Ctrl+Shift+Space로 검색 팝업을 띄우고, Enter로 복사한 뒤 원래 창으로 포커스를 돌려주는 구조. 메시지 전용 창으로 받는 전역 단축키, 커서가 있는 모니터와 DPI, 미리 렌더링으로 줄인 첫 호출 시간, 클립보드 재시도, 마우스 클릭이 안 먹던 결함까지 정리했다.
EF Core가 지원하지 않는 FTS5 가상 테이블을 raw SQL로 만들고, trigram 토크나이저로 한글과 부분 문자열을 찾게 했다. trigram이 못 찾는 짧은 검색어의 LIKE 폴백, bm25 컬럼 가중치, 트리거 없는 색인 갱신까지 정리했다.
PowerShell·Docker·SQL 명령어를 저장해 두고 전역 단축키로 2초 안에 꺼내 쓰는 Windows 앱 Cliply를 만들었다. 설계 문서로 범위와 단계를 먼저 정하고, Phase 0~7과 배포·영문 화면까지 진행한 과정을 연재 첫 글로 정리했다.