.kr은 WHOIS, 나머지는 RDAP — 도메인 만료일 자동 조회
도메인 만료일을 .kr은 KISA WHOIS 43번 포트로, 그 외는 IANA RDAP 부트스트랩으로 찾아 조회하게 했다. 호스트명에서 등록 도메인을 뽑는 규칙, 한글·영문이 섞인 WHOIS 응답 해석, 조회가 실패할 때의 수동 만료일, 일수 기준 판정과 테스트까지 정리했다.
애드소프트 기술블로그
애드소프트 박재호입니다. IIS·ASP.NET·Docker·메일서버를 직접 운영하며 겪은 문제와 해결 과정을 기록합니다.
도메인 만료일을 .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과 배포·영문 화면까지 진행한 과정을 연재 첫 글로 정리했다.
Unity 6 게임을 Play 스토어 비공개 테스트에 올리기까지의 기록. 빌드 설정을 강제하는 에디터 스크립트, 저장소 밖 서명 키와 환경변수, 한 번 쓰면 다시 못 쓰는 버전 코드, 네이티브 디버그 기호, -version 인자 충돌, 광고 ID 선언과 개인정보처리방침, 결과 이미지 공유까지 정리했다. 연재 마지막 글이다.