# 실시간 구독

`wss://<ref>.<zone>/realtime/v1?apikey=<공개 키>`

## 순서

1. 접속하면 `ready`가 와요
2. `{"type":"subscribe","channel":"table:notes"}`
3. 그 표가 바뀌면 `change`가 와요

## 반드시 먼저 해야 하는 것

**표마다 실시간을 켜야 해요.** 켜지 않은 표는 조용해요.

`set_realtime { ref, table: "notes", enabled: true }`로 켜고, `list_realtime_tables`로 켜진 표를 확인해요.
SQL로는 Supabase에서 쓰던 문장 그대로 돼요(SQL 편집기, `run_sql`, 마이그레이션):

```sql
alter publication supabase_realtime add table notes;
```

나머지 SQL이 끝난 뒤 그 표의 실시간이 켜지고, `drop table notes`로 쓰면 꺼져요. public 스키마의 표만 돼요.

## 보이는 것만 와요

변경 알림도 접근 규칙을 통과해야 전달돼요.
공개 키로 못 읽는 줄은 실시간으로도 오지 않아요.

## 그 밖

`{"type":"broadcast","channel":"room:1","payload":{...}}`: 사람 사이 메시지
`{"type":"presence","channel":"room:1","state":{...}}`: 누가 접속해 있는지

broadcast와 presence 둘 다 **그 채널을 먼저 subscribe 해야** 받아요.
안 하면 `error`로 "먼저 subscribe 하세요"가 와요.

## 설정과 비공개 채널 규칙

```
get_realtime_settings            켜짐, 공개 채널 허용, 한도
set_realtime_settings            바꾸기 (준 값만, 소유자·관리자)
list_realtime_policies           realtime_messages 표의 규칙
create_realtime_messages_table   규칙을 적을 표 만들기
add_realtime_policy              규칙 틀 더하기 (signed-in-read | signed-in-write | own-channel)
```

`allow_public`을 끄면 비공개 채널만 쓸 수 있고, 들어오는 사람은 realtime_messages 표의 규칙이 정해요. 규칙은 개발자 이상이 더할 수 있어요.

---

https://end.blackall.ai/docs/realtime?lang=ko
