← 목록
기타 2026-05-27 3KB 읽기 3분

시즌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 유지 권장.
TLS 도입 시 알림_HTTP_POST를 알림_HTTPS_POST로 분기.
  • 메신저 endpoint /api/v1/system/notify 가 talk.crowny.org에 실제 구현 필요.
  • launchd plist 에서 SLACK_WEBHOOK_URL 환경변수 주입 → 한선씨 환경변수 읽기 빌트인이
아직 없어 알림_슬랙웹훅() 하드코드. 추후 빌트인 추가 후 동적 로딩.