시즌1 알림 — 단가갱신 cron 통합
개요
launchd가 매년 10-01 00:00에 시즌1 단가를 갱신하는 cron 트리거 실행 직후, 크라우니메신저(talk.crowny.org)와 Slack 두 채널로 알림을 발송하는 한선씨 모듈.
- 환경:
production(실 전송) /dev(영속만) /mock(영속만) 자동 분기 — 셀코어 룰 등록 - 실 운영자가 코드 수정 없이 환경 토글만 바꿔도 채널 라우팅 자동 전환
작성한 파일
/Users/ef/Downloads/CrownyTVM/std/시즌1알림.한선(+.han동기화본)/Users/ef/Downloads/CrownyTVM/bin/시즌1단가cron.sh—가져오기 "시즌1알림"후크 한 줄 추가- 영속:
/tmp/시즌1알림이력.dat—시각|채널|상태|페이로드
핵심 함수
알림_HTTP_POST(호스트, 포트, 경로, 본문)— TCP연결/쓰기/읽기/닫기 4단계알림_메신저전송(채널, 본문)— talk.crowny.org/api/v1/system/notify알림_슬랙전송(웹훅, 본문)— Slack incoming webhook (placeholder, v0.38 TLS 미완)알림_본문조립(년차, 새단가, 직전단가)—시즌1 단가갱신: 1년차 25500원 -> 27500원 (증감 2000원)알림_단가갱신(년차, 새단가, 직전단가)— 두 채널 동시 발송 메인 진입점알림_이력기록(채널, 상태, 페이로드)—파일추가영속알림_자가검증()— mock 모드 1 시나리오, 이력 2줄(messenger+slack MOCK) 기대
셀코어 룰
변수 룰1 = 룰생성("단가갱신_알림_채널결정", 1)
룰1 = 룰조건추가(룰1, "환경", "==", "production")
룰1 = 룰변경추가(룰1, "channels", "messenger,slack")
변수 룰2 = 룰생성("단가갱신_알림_dev", 2)
룰2 = 룰조건추가(룰2, "환경", "==", "dev")
룰2 = 룰변경추가(룰2, "channels", "log")
시즌1 모듈 연동
시즌1단가cron.sh → 시즌1단가갱신.단가갱신_다음() 호출 후
이어서 시즌1알림.알림_단가갱신() 호출로 두 채널 발송.
이전단가/이전년차는 단가갱신_현재() / 단가갱신_년차() 로 미리 캡처.
v0.38 함정 회피
파일읽기빈 문자열 가드 (만약 (글자수(내용) == 0) { 반환 결과 })TCP읽기(소켓)1인자만- 함수명 예약키워드 미포함 (전이/상태/설정/길이/추가/포함 단독 사용 없음)
지금()사용 (현재시각미정의 → 컴파일 에러 회피)- 변수명
상태→상태문(예약어 회피)
검증 결과 (자가검증 출력)
=== 시즌1 알림 검증 ===
본문 조립: 시즌1 단가갱신: 1년차 25500원 -> 27500원 (증감 2000원)
[시즌1알림] messenger=MOCK slack=MOCK ch=log
[시즌1알림] 시즌1 단가갱신: 1년차 25500원 -> 27500원 (증감 2000원)
이력 줄 수 = 2 (기대 2: messenger+slack MOCK)
[0] 1779843049|messenger|MOCK|{...}
[1] 1779843049|slack|MOCK|{"text":"시즌1 단가갱신: ..."}
=== 검증 완료 ===
잔여 이슈
- Slack 실 발송은 hooks.slack.com HTTPS — v0.38 TLS 미완. 환경=mock 유지 권장.
- 메신저 endpoint
/api/v1/system/notify가 talk.crowny.org에 실제 구현 필요. - launchd plist 에서
SLACK_WEBHOOK_URL환경변수 주입 → 한선씨 환경변수 읽기 빌트인이