---
template: policy-doc@1
doc_id: 06-communication
title: 알림·메시징 도메인 — 알림 두 갈래 · 알림톡 상태와 종류 · 푸시 예약과 대상 · FCM 예외 · 팩스 과금 설정과 이력
config: ../_meta/template-config.yaml
last_verified: 4d798f55
policies:
  - id: ALARM_TWO_TRACKS
    status: active-prod
    evidence: [S-schema, S-guard]
    limitations:
      - 사용자 알림과 관리자 알림이 서로 다른 자료형·입구를 갖는다는 것까지가 관측이다. 두 갈래가 같은 사건에서 함께 만들어지는지는 이 문서가 추적하지 않았다
      - 읽음 표시가 되돌려질 수 있는지는 세지 않았다
    anchors:
      - insuniverse-server/apps/api/src/modules/alarm/alarm.entity.ts:6
      - insuniverse-server/apps/api/src/modules/alarm/alram-admin.entity.ts:6
      - insuniverse-server/apps/api/src/modules/alarm/alarm.controller.ts:14
      - insuniverse-server/apps/api/src/modules/alarm/alarm-admin.controller.ts:25
  - id: ALIMTALK_STATE_AND_TYPE
    status: active-prod
    evidence: [S-constant, S-route]
    limitations:
      - 발송 상태와 종류가 서로 다른 축이라는 것까지가 관측이다. 상태 전이를 무엇이 일으키는지는 이 문서가 판정하지 않는다
      - 템플릿 코드로 본문을 되찾는 자리는 열되 템플릿 승인 절차는 이 저장소 밖이다
    anchors:
      - insuniverse-server/apps/api/src/modules/alimtalk/alimtalk.entity.ts:7
      - insuniverse-server/apps/api/src/modules/alimtalk/alimtalk.entity.ts:12
      - insuniverse-server/apps/api/src/modules/alimtalk/alimtalk.controller.ts:17
      - insuniverse-server/apps/api/src/modules/alimtalk/alimtalk.repository.ts:68
  - id: PUSH_SCHEDULE_AND_TARGET
    status: active-prod
    evidence: [A-scheduler, S-constant]
    limitations:
      - 예약 발송이 주기 작업으로 돈다는 것과 대상이 종류로 갈린다는 것까지가 관측이다. 주기 값 자체는 코드에 있으나 실행 환경에서 꺼질 수 있고 그 여부는 이 저장소가 말하지 않는다
      - 대상 종류별 회원 집합의 산출식은 이 문서가 옮기지 않는다
    anchors:
      - insuniverse-server/apps/api/src/modules/push/push.scheduler.ts:15
      - insuniverse-server/apps/api/src/modules/push/push.service.ts:192
      - insuniverse-server/apps/api/src/modules/push/push.service.ts:67
  - id: FCM_EXCEPTION_SHAPE
    status: active-prod
    evidence: [S-contract, S-component]
    limitations:
      - 전용 예외 형태가 있다는 것까지가 관측이다. 그 예외가 발생했을 때 알림 자료가 남는지 지워지는지는 이 문서가 판정하지 않는다
      - 자격 값의 출처와 회전 절차는 총론 벤더 축이 진다
    anchors:
      - insuniverse-server/apps/api/src/modules/fcm/fcm.exception.ts:3
      - insuniverse-server/apps/api/src/modules/fcm/fcm.service.ts:37
  - id: FAX_CONFIG_AND_HISTORY
    status: active-prod
    evidence: [S-schema, S-route]
    limitations:
      - 장당 차감값과 사용 금액이 설정 자료에 있고 발송 이력이 별도로 쌓인다는 것까지가 관측이다. 설정값 자체는 운영 자료라 적지 않는다
      - 차감 경로가 하나인지 이 문서가 단언하지 않는다. 실차감 자리와 미구현 표시가 같은 모듈에 함께 있다는 관측이 이월 원장에 있다
    anchors:
      - insuniverse-server/apps/api/src/modules/fax/fax.repository.ts:27
      - insuniverse-server/apps/api/src/modules/fax/fax-admin.controller.ts:32
      - insuniverse-server/apps/api/src/modules/fax/fax-user.controller.ts:26
      - insuniverse-server/apps/api/src/modules/fax/fax.service.ts:40
---

# 알림·메시징 도메인 — 알림 두 갈래 · 알림톡 상태와 종류 · 푸시 예약과 대상 · FCM 예외 · 팩스 과금 설정과 이력

**무엇이 언제 누구에게 나가는가**를 다룬다. 사용자 알림과 관리자 알림 두 갈래, 알림톡의 상태·종류 축, 푸시의 예약 발송과 대상 종류, 푸시 전송 실패의 전용 예외 형태, 팩스의 과금 설정과 발송 이력이 여기 있다.

**여기 없는 것** — 결제 성공·실패라는 사건 자체는 `04-settlement-money.md` 가, 분석 완료라는 사건은 `01-analysis.md` 가 진다. 각 채널 사업자의 실패 의미와 자격 관리, 보관 기간은 총론 소관이며 이 문서는 그 규칙이 이 도메인 자료에 걸리는 자리만 낸다.

## 정책 (기획)

### ALARM_TWO_TRACKS

**알림은 사용자용과 관리자용 두 갈래이고 서로 다른 자료다.** 각각 자기 종류 어휘를 갖고, 관리자용에는 처리 결과 축이 하나 더 있다. 두 갈래 모두 읽음 표시를 남기며 입구도 갈린다 — 사용자 쪽은 로그인 주체 기준, 관리자 쪽은 역할 기준이다.

### ALIMTALK_STATE_AND_TYPE

**알림톡은 발송 상태 축과 종류 축을 따로 갖는다.** 어디까지 진행됐는가와 무엇을 알리는가가 서로 다른 코드값이다. 발송할 본문은 템플릿 코드로 되찾으며, 사용자 쪽 발송 입구는 로그인 뒤에 열린다.

### PUSH_SCHEDULE_AND_TARGET

**푸시는 즉시 발송과 예약 발송 두 형태가 있고, 예약분은 주기 작업이 집어 간다.** 대상은 개별 지정이 아니라 종류로 갈린다 — 전체·일반·기업·개별 목록이 각각 다른 산출을 탄다.

### FCM_EXCEPTION_SHAPE

**푸시 전송 실패는 전용 예외 형태로 구분된다.** 일반 오류와 섞이지 않도록 별도 형태를 갖고, 전송 호출은 제목·본문·수신 토큰·이동 대상·알림 식별자·동작 종류를 함께 싣는다.

### FAX_CONFIG_AND_HISTORY

**팩스는 장당 차감값과 사용 금액을 설정 자료로 갖고, 발송은 이력으로 쌓인다.** 설정은 관리자만 고치고 발송은 로그인 주체가 하며, 재발송과 취소가 각각 자기 입구를 갖는다.

**이 문서는 차감 경로가 하나라고 단언하지 않는다.** 실제 차감이 일어나는 자리와 아직 구현되지 않았다는 표시가 같은 모듈에 함께 있다는 관측이 이월 원장에 올라 있고, 이 창은 그 사실을 지우지 않고 그대로 남긴다.

## 강제 지점 (개발)

### ALARM_TWO_TRACKS

사용자 알림 종류 어휘는 `insuniverse-server/apps/api/src/modules/alarm/alarm.entity.ts:6`, 관리자 알림 종류 어휘는 `insuniverse-server/apps/api/src/modules/alarm/alram-admin.entity.ts:6` 의 열거형이다. 사용자 입구의 결선 층은 `insuniverse-server/apps/api/src/modules/alarm/alarm.controller.ts:14`, 관리자 입구의 허용 역할은 `insuniverse-server/apps/api/src/modules/alarm/alarm-admin.controller.ts:25` 가 선언한다.

### ALIMTALK_STATE_AND_TYPE

상태 축은 `insuniverse-server/apps/api/src/modules/alimtalk/alimtalk.entity.ts:7`, 종류 축은 `insuniverse-server/apps/api/src/modules/alimtalk/alimtalk.entity.ts:12` 의 열거형이다. 사용자 발송 입구의 결선 층은 `insuniverse-server/apps/api/src/modules/alimtalk/alimtalk.controller.ts:17`, 템플릿 코드로 본문을 되찾는 조회는 `insuniverse-server/apps/api/src/modules/alimtalk/alimtalk.repository.ts:68` 이다. 발송 상태의 감시 자리는 `../05-schedules/03-monitoring.md#monitoring:alimtalk-status` 가 진다.

### PUSH_SCHEDULE_AND_TARGET

예약 발송 주기 작업은 `insuniverse-server/apps/api/src/modules/push/push.scheduler.ts:15` 의 선언이고, 대상 종류별 회원 산출은 `insuniverse-server/apps/api/src/modules/push/push.service.ts:192`, 전송 처리기는 `insuniverse-server/apps/api/src/modules/push/push.service.ts:67` 이다. 주기 선언의 런타임 위상은 `../05-schedules/04-runtime-topology.md#schedule:push.scheduler` 가 진다.

### FCM_EXCEPTION_SHAPE

전용 예외 형태는 `insuniverse-server/apps/api/src/modules/fcm/fcm.exception.ts:3`, 전송 호출은 `insuniverse-server/apps/api/src/modules/fcm/fcm.service.ts:37` 이다. 자격과 토큰 수명은 `../06-vendors/04-messaging.md#messaging:fcm:credentials` 와 `../06-vendors/04-messaging.md#messaging:fcm:token-lifecycle` 가 진다.

### FAX_CONFIG_AND_HISTORY

설정 조회는 `insuniverse-server/apps/api/src/modules/fax/fax.repository.ts:27`, 설정 변경 입구는 `insuniverse-server/apps/api/src/modules/fax/fax-admin.controller.ts:32`, 사용자 발송 입구는 `insuniverse-server/apps/api/src/modules/fax/fax-user.controller.ts:26`, 발송 처리기는 `insuniverse-server/apps/api/src/modules/fax/fax.service.ts:40` 이다.

## 적용 범위 (actor × 서비스)

| 정책 id | server | site | admin |
|---|---|---|---|
| ALARM_TWO_TRACKS | 두 종류 어휘 · 두 입구의 결선 층·역할 | 알림 목록·읽음 처리 | 관리자 알림 목록 |
| ALIMTALK_STATE_AND_TYPE | 두 축 어휘 · 발송 입구 · 템플릿 조회 | 발송 요청 | 발송 이력 화면 |
| PUSH_SCHEDULE_AND_TARGET | 주기 선언 · 대상 산출 · 전송 처리기 | 푸시 수신 | 푸시 등록·예약 화면 |
| FCM_EXCEPTION_SHAPE | 예외 형태 · 전송 호출 | 수신 단말 등록 | — |
| FAX_CONFIG_AND_HISTORY | 설정 조회·변경 · 발송 입구·처리기 | 팩스 발송 화면 | 설정 관리 화면 |

`—` = 그 서비스가 이 정책의 경로에 등장하지 않음.

이 표의 열은 서비스 3종이며 actor 는 열이 아니다. 이 문서의 축은 발송 자원에 걸리는 판정이라 actor 를 열로 두면 서버 한 칸만 차는 표가 된다. 열 이름 집합과 순서는 `../_meta/template-config.yaml` 의 `services` 를 그대로 따른다.

## 예외·폴백

| 정책 id | 예외 조건 | 폴백 동작 | 확인 근거 |
|---|---|---|---|
| ALARM_TWO_TRACKS | 로그인하지 않고 알림을 열려 할 때 | 사용자 입구의 결선 층에서 거부된다 | `insuniverse-server/apps/api/src/modules/alarm/alarm.controller.ts:14` |
| ALARM_TWO_TRACKS | 관리자 알림을 사용자 입구로 열려 할 때 | 자료와 입구가 달라 그 경로로 가지 않는다 | `insuniverse-server/apps/api/src/modules/alarm/alram-admin.entity.ts:6` |
| ALIMTALK_STATE_AND_TYPE | 템플릿 코드에 맞는 본문이 없을 때 | 되찾기 조회가 비어 떨어진다. 대체 본문은 이 경로에 없다 | `insuniverse-server/apps/api/src/modules/alimtalk/alimtalk.repository.ts:68` |
| ALIMTALK_STATE_AND_TYPE | 로그인하지 않고 발송을 요청할 때 | 결선 층에서 거부된다 | `insuniverse-server/apps/api/src/modules/alimtalk/alimtalk.controller.ts:17` |
| PUSH_SCHEDULE_AND_TARGET | 주기 작업이 실행 환경에서 꺼져 있을 때 | 예약분이 집혀 나가지 않는다. 그 여부는 이 저장소가 말하지 않는다 | `insuniverse-server/apps/api/src/modules/push/push.scheduler.ts:15` |
| PUSH_SCHEDULE_AND_TARGET | 대상 종류에 맞는 회원이 없을 때 | 산출이 빈 집합을 되돌린다 | `insuniverse-server/apps/api/src/modules/push/push.service.ts:192` |
| FCM_EXCEPTION_SHAPE | 전송이 실패할 때 | 전용 예외 형태로 갈린다. 알림 자료의 존치 여부는 이 문서가 판정하지 않는다 | `insuniverse-server/apps/api/src/modules/fcm/fcm.exception.ts:3` |
| FAX_CONFIG_AND_HISTORY | 관리자가 아닌 주체가 설정을 고칠 때 | 관리자 입구의 결선 층에서 거부된다 | `insuniverse-server/apps/api/src/modules/fax/fax-admin.controller.ts:32` |
| FAX_CONFIG_AND_HISTORY | 차감이 실제로 일어났는지 물을 때 | 이 문서는 단언하지 않는다. 경로 이원화 관측이 이월 원장에 있다 | `insuniverse-server/apps/api/src/modules/fax/fax.service.ts:40` |

## 연혁

릴리스 태그가 존재하지 않는다. 릴리스 열은 `—` 로 두고 커밋 SHA 로 추적한다.

| 릴리스 | 날짜 | SHA | 변경 요약 |
|---|---|---|---|
| — | 2024-12-03 | `12bc68b7` | 사용자 알림 종류 어휘에 분석 상태 축 추가 |
| — | 2024-12-05 | `e668fcfa` | 알림톡 상태·종류 두 축이 열거형으로 고정됨 |
| — | 2025-01-07 | `b852e6ce` | 알림톡 발송 완료 여부 확인 경로 추가 |
| — | 2025-01-16 | `40c8587a` | 알림 입구의 정렬 조건이 사용자·관리자로 갈림 |
| — | 2025-03-28 | `8610ad11` | 관리자 알림 종류 어휘 추가 |
| — | 2025-07-14 | `c4136e53` | 푸시 전송 실패의 전용 예외 형태 신설 |
| — | 2025-10-28 | `48194202` | 푸시 대상이 회원 종류별로 갈림 |
| — | 2025-10-30 | `2ec78694` | 푸시 예약 발송과 주기 작업 추가 |
| — | 2025-11-25 | `40933e51` | 팩스 설정 자료·발송 이력·재발송 경로 정리 |
