# FlareMo ๐ฅ
์๋ฒ ์ ๋ก ยท ์ ์ง๋ณด์ ๋น์ฉ ์ ๋ก ยท 24์๊ฐ ๊ธ๋ก๋ฒ ์ฃ์ง ์์ ๊ฐ๋ ยท ์์ ํ ๋ฐ์ดํฐ ์์ ๊ถ
๊ฐ์ธ์๊ฒ๋ ์กฐ์ฉํ๊ณ ์ง์คํ ์ ์๋ ์๊ฐ ๊ธฐ๋ก ๊ณต๊ฐ์ด์ ์ 2์ ๋, ํ์๊ฒ๋ ์ธ๋ฐํ ๊ถํ ๊ด๋ฆฌ๋ฅผ ๊ฐ์ถ ๊ณต์ ์ง์ ๋ฒ ์ด์ค.
English โข
็ฎไฝไธญๆ โข
ๆฅๆฌ่ช โข
Franรงais โข
Espaรฑol โข
ํ๊ตญ์ด โข
ะ ัััะบะธะน โข
ุงูุนุฑุจูุฉ
| โ๏ธ ๋ฐ์คํฌํฑ ยท ๋ผ์ดํธ ๋ชจ๋ | ๐ ๋ฐ์คํฌํฑ ยท ๋คํฌ ๋ชจ๋ | ๐ฑ ๋ชจ๋ฐ์ผ ยท ๋ฐ์ํ |
| :---: | :---: | :---: |
|

|

|

|
์ค์ ์ด์ ํ๋ฉด ์คํฌ๋ฆฐ์ท: ๋ผ์ดํธ/๋คํฌ ๋ชจ๋ ๋งค๋๋ฌ์ด ์ ํ๊ณผ ๋ชจ๋ฐ์ผ ์์ ๋ฐ์ํ. ํ๋ฉด์ ๋ณด์ด๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ค์ ๋ก ๋์ํ๋ ๋ฐฑ์๋ ๊ธฐ๋ฅ๊ณผ ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค.
---
## ๐ก ์ FlareMo์ธ๊ฐ?
Flomo์ Memos ๊ฐ์ ๋๊ตฌ๋ค์ ๋ถ๋ด ์๋ ๋ฉ๋ชจ ๊ธฐ๋ก๊ณผ ๋ฐฉํด๋ฐ์ง ์๋ ํ์๋ผ์ธ์ด ์ง๋ ํฐ ๊ฐ์น๋ฅผ ์ฆ๋ช
ํด ์์ต๋๋ค. ํ์ง๋ง ์ ํต์ ์ธ ๋
ธํธ ํ๊ฒฝ์ ์์ฒด ํธ์คํ
ํ๋ ค๋ฉด VPS ๋น์ฉ์ ์ง๋ถํ๊ณ , Docker์ PostgreSQL์ ์ค์ ํ๊ณ , ์๋ ๋ฐฑ์
์คํฌ๋ฆฝํธ๋ฅผ ์์ฑยท๊ด๋ฆฌํ๋ฉด์ ๋์คํฌ๋ ํ๋์จ์ด ๊ณ ์ฅ์ ๊ฑฑ์ ํด์ผ ํ์ต๋๋ค.
FlareMo๋ ๋ ๋จ์ํ ์ง๋ฌธ์ ๋ตํฉ๋๋ค: **๋ฌด๋ฃ Cloudflare ๊ณ์ ํ๋๋ง์ผ๋ก, ์๋ฒ ์ ์ง๋ณด์ ์์ด 24์๊ฐ ์จ๋ผ์ธ์ผ๋ก ์ด์์๊ณ ์ ์ธ๊ณ์์ ๊ฐ์๋๋ ์ง์ ๋ฒ ์ด์ค๋ฅผ ๋ง๋ค ์ ์์๊น?**
- **์ง์ ํ ์๋ฒ๋ฆฌ์ค**: ์ฝ๋์ ์ ์ ์์ฐ ๋ชจ๋ ์ฌ์ฉ์ ๋ฐ๋ก ๊ทผ์ฒ์ Cloudflare Workers ์ฃ์ง ๋
ธ๋์์ ๋ฐ๋ฆฌ์ด ๋จ์ ์ง์ฐ์ผ๋ก ์คํ๋ฉ๋๋ค.
- **๊ธฐ๋ณธ ๊ฐ์ถฐ์ง ์ํฐํ๋ผ์ด์ฆ๊ธ ๋ด๊ตฌ์ฑ**: Cloudflare D1์ด ๋ฉ๋ชจ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ด๋นํ๊ณ , Cloudflare R2๊ฐ ๋ฉํฐ ๋ฆฌ์ ๋ณต์ ๋ก ๋ฏธ๋์ด ์ฒจ๋ถํ์ผ์ ์ ์ฅํฉ๋๋ค.
- **AI ๋ค์ดํฐ๋ธ ์ 2์ ๋**: Agent Memory ํ๋ธ์ CLI์ ํฌ๋ก์ค ์์ด์ ํธ ์คํฌ์ด ๋ด์ฅ๋์ด, AI ์์ด์ ํธ(Claude, Cursor, Codex, ChatGPT, ZCode)๊ฐ ์ฅ๊ธฐ ์ ํธ๋์ ๊ธฐ์ต ๋ฒ์๋ฅผ ์ฝ๊ณ ๊ฐฑ์ ํ ์ ์์ต๋๋ค. MCP ์๋ํฌ์ธํธ๋ ํจ๊ป ์ ๊ณต๋ฉ๋๋ค.
- **ํผ์์๋ ์กฐ์ฉํ, ํจ๊ป๋ผ๋ฉด ๊ฐ๋ ฅํ๊ฒ**: ๊ธฐ๋ณธ๊ฐ์ ์ํธํ๋ ๋น๊ณต๊ฐ 1์ธ์ฉ ์์์ฒ์
๋๋ค. ํ ๋ชจ๋๋ฅผ ์ผ๋ฉด ์ญํ ๊ณผ 3๋จ๊ณ ๊ณต๊ฐ ๋ฒ์๋ฅผ ๊ฐ์ถ ํ์
๊ณต๊ฐ์ผ๋ก ์ฆ์ ๋ฐ๋๋๋ค.
- **์ฌํํ๋ ๋จ์ํ์ง ์๊ฒ**: ์ธํฐํ์ด์ค๋ ์กฐ์ฉํ๊ณ ๋ชจ๋ ์ปจํธ๋กค์ ์กด์ฌ ์ด์ ๊ฐ ๋ถ๋ช
ํฉ๋๋ค โ ์ฃผ์๋ฅผ ๋๋ ์ฅ์๋, ๋น ์ง ๊ธฐ๋ฅ๋ ์์ต๋๋ค.
---
## โจ ํต์ฌ ๊ธฐ๋ฅ
### 1. ์ฆ์ ๊ธฐ๋ก & ์๊ฐ์ ์ฃผ๋ ํ๊ณ
- **๋ฐ๋ฆฌ์ด ๋ง์ ๊ธฐ๋ก**: ์นด๋ํ ํ์๋ผ์ธ, ํ๊ทธ, Markdown/GFM, ์ด๋ฏธ์งยท์ค๋์ค ์ฒจ๋ถ ๋ฏธ๋ฆฌ๋ณด๊ธฐ.
- **๋ฒ๊ฐ๊ฐ์ ๊ฒ์**: SQLite FTS5 ์ ๋ฌธ ์ธ๋ฑ์ฑ๊ณผ ์ฟผ๋ฆฌ ์ฐ์ฐ์ ์ง์ (`has:attachment`, `is:pinned`, `before:YYYY-MM-DD`, `after:YYYY-MM-DD`, `in:timeline|archive|trash`).
- **์๋ฏธ ๊ธฐ๋ฐ '์ฐพ๊ธฐ' (๋ฒกํฐ ๊ฒ์)**: Workers AI ์๋ฒ ๋ฉ๊ณผ Vectorize ํ์ ๋ฒกํฐ ์ธ๋ฑ์ค๋ฅผ ๊ฒฐํฉํด ๋ฌธ๋งฅ์ ๋ง๋ ํ์์ ์ ๊ณตํ๋ฉฐ, D1 ๊ถํ์ ์ฌ๊ฒ์ฆํ๊ณ ํ์ ์ FTS5๋ก ๋งค๋๋ฝ๊ฒ ๋์ฒดํฉ๋๋ค.
- **์๊ฐ ํ์ฑํ**: ๋ด์ฅ **๋ฐ์ผ๋ฆฌ ๋ฆฌ๋ทฐ**(๊ณผ๊ฑฐ์ ์ค๋), **๋๋ค ์ํฌ**(ํ๊ทธยท๋ฐฑ๋งํฌ ๊ทธ๋ํ๋ฅผ ํํํ๋ฉฐ ์ฝ์ ์์ฝ ์์ง), ๊ด๋ จ ๋
ธํธ ์ถ์ฒ.
- **๋ฒ์ ์ด๋ ฅ**: ์ ์ฒด ๋ฒ์ diff ๋น๊ต์ ํด๋ฆญ ํ ๋ฒ์ผ๋ก ๊ณผ๊ฑฐ ๋ฒ์ ๋ณต์.
### 2. AI ์ฅ๊ธฐ ๊ธฐ์ต (CLI + Skills)
- **Agent Memory**: `flaremo` CLI์ `flaremo-memory` ์คํฌ์ ๋๋ด โ AI ์์ด์ ํธ๊ฐ ๊ณต์ฉ REST ๊ธฐ๋ฐ์ ํตํด ์ธ์
์ ๋์ด ์ด์ด์ง๋ ์ฅ๊ธฐ ๊ธฐ์ต(์ ํธ๋, ํ๋ก์ ํธ ๊ฒฐ์ , ์ ์ฝ ์กฐ๊ฑด, ๊ตํ)์ ๊ธฐ๋กยท๊ฐฑ์ ํฉ๋๋ค.
- **Human in the loop**: `/memory` ํ๋ฉด์์ AI๊ฐ ๊ธฐ๋กํ ๊ธฐ์ต์ ๊ฒํ ํ๊ณ , ํ์ธยท์ ๊ธยท์์ ํ ์ ์์ต๋๋ค.
- **์ด๋ฆฐ ์ํ๊ณ**: ๊ถ์ฅ ๊ฒฝ๋ก๋ CLI + Skills์ด๋ฉฐ, ๊ธฐ์กด MCP ํด๋ผ์ด์ธํธ๋ฅผ ์ํด `/memory/mcp`(Streamable HTTP MCP)์ `/mcp` ์๋ํฌ์ธํธ๋ ์ ๊ณตํฉ๋๋ค.
### 3. ํ๋ก์ ํธ & ์์
- **ํ๋ก์ ํธ๋ก ์์
๋ชจ์ผ๊ธฐ**: ๊ด๋ จ ๋ฉ๋ชจ์ ํ ์ผ์ ํ๋ก์ ํธ๋ก ๋ฌถ์ด ๊ด๋ฆฌํฉ๋๋ค. ์ํ ์ด์ ๋๋๊ทธ๋ก ์ฎ๊ธฐ๋ ์นธ๋ฐ ๋ณด๋, ์ฐ์ ์์, ์๋ ์ ๋ ฌ, ๋ง๊ฐ์ผ์ ์ง์ํฉ๋๋ค.
- **๊ฐ์ธ ์ ์ฉ, ๋๋๋ฆด ์ ์๋ ์ญ์ **: ์์
์ ์์ ์ ํ ์ฌ๋์ ์์ ์ด๋ฉฐ, ์ญ์ ์ ํด์งํต์ผ๋ก ์ด๋ํด ๋ณต์ํ๊ฑฐ๋ ๊ธฐ๊ฐ์ด ์ง๋๋ฉด ์๋์ผ๋ก ์๊ตฌ ์ญ์ ๋ฉ๋๋ค.
### 4. ์์
๊ด๋ฆฌ & ์๋ฆผ
- **์์
์ ํ๋ก์ ํธ ์์**: `/projects` ๋ณด๋(์ํ ์ด ๊ฐ ๋๋๊ทธ), ์ฐ์ ์์, ์๋ ์ ๋ ฌ, ๋ง๊ฐ์ผ ๋๋ถ์ ํ๋ก์ ํธ ํ์ด์ง๊ฐ ์ผ์ ๊ด๋ฆฌ์ ๋จ์ผํ ํ์ด ๋ฉ๋๋ค.
- **์ผ์ ์ด ํ๋์**: ํ์๊ธฐ ํ ํ๋ฉด์ด ๋ฏธ๋ ์๊ฐ ์บ๋ฆฐ๋์ ๊ธฐํ ์ด๊ณผ/์ค๋ ์๋ฆผ์ ํจ๊ป ๋ณด์ฌ์ค, ๋ง๊ฐ์ด ๋ณด๋ ๋ค์ ์จ์ง ์์ต๋๋ค.
- **๊ธฐํ ์ด๊ณผ ์๋ฆผ**: ๊ธฐํ์ด ์ง๋ ์์
์ ์ฑ ๋ด ์๋ฆผ์ ๋์ฐ๊ณ , ๋ธ๋ผ์ฐ์ ์น ํธ์๋ ์ ํ์ ์ผ๋ก ์ผค ์ ์์ต๋๋ค.
### 5. ํ ํ์
& 3๋จ๊ณ ๊ณต๊ฐ ๋ฒ์
- **์ญํ ๊ฑฐ๋ฒ๋์ค**: `owner`, `admin`, `member` ์ญํ . ๊ด๋ฆฌ์๋ 1ํ์ฉ ํ์ฑํ ๋งํฌ๋ก ๋ฉค๋ฒ๋ฅผ ์ด๋ํ๊ณ , ๋ฉค๋ฒ๊ฐ ์ง์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ค์ ํฉ๋๋ค(๊ด๋ฆฌ์๋ ํ๋ฌธ ์๊ฒฉ ์ฆ๋ช
์ ์ ๋ ๋ค๋ฃจ์ง ์์ต๋๋ค).
- **3๋จ๊ณ ๊ณต๊ฐ ๋ฒ์**:
- ๐ **๋น๊ณต๊ฐ**: ์์ฑ์ ๋ณธ์ธ๋ง ์ด๋ ๊ฐ๋ฅ.
- ๐ฅ **ํ ๊ณต๊ฐ**: ํ์ฑ ํ์์๊ฒ ์ฝ๊ธฐ ์ ์ฉ ๊ณต์ .
- ๐ **์ ์ฒด ๊ณต๊ฐ**: ๊ธฐํ์ด ์๋ ๊ณต์ ๋งํฌ๋ก ์ต๋ช
์ฝ๊ธฐ ์ ์ฉ ์ ๊ทผ.
- **์์ ํ ๋ฉค๋ฒ ์ ์ธ**: ๋ฉค๋ฒ ์ ๊ฑฐ ์ ์ ๋ขฐํ ์ ์๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ ๋ฆฌ๊ฐ ์คํ๋์ด ๋น๊ณต๊ฐ ๋ฐ์ดํฐ๋ ์์ ํ ์ญ์ ํ๊ณ ํ ๋ฐ ๊ณต๊ฐ ๋ฉ๋ชจ๋ ๋ณด์กดํฉ๋๋ค.
- **๋ฆฌ๋ ์ํธ**: ๊ธฐํ์ด ์๋ ์ฝ๊ธฐ ์ ์ฉ ์ํธ๋ฅผ ๋ถ์ฌํ ์ ์์ต๋๋ค โ ๊ฒ์คํธ ๋
์, ๊ฐ์ ์๊ฐ์, ๊ณ ๊ฐ ๋ฉํ ๋ฑ. ์ํธ๋ ๋ง๋ฃ ์์ ์ ์๋์ผ๋ก ์ ๊ทผ์ด ์ฐจ๋จ๋ฉ๋๋ค(์๊ฒฉ ํด์ ์ fail-closed, ํฌ๋ก ๋ถํ์). ๋ฉค๋ฒ ํ์ด์ง์์ ๊ด๋ฆฌํ๊ฑฐ๋, Personal Access Token์ผ๋ก `PUT /api/app/admin/team/reader` ์๋ํฌ์ธํธ๋ฅผ ํธ์ถํด ์ด๋ฉ์ผ๋ก ๊ฐํตํ ์ ์์ต๋๋ค(`docs/team-mode.md` ์ฐธ์กฐ).
### 6. ์คํ๋ผ์ธ ์ฐ์ & PWA ๊ฒฝํ
- **์ค์นํ PWA**: macOS, Windows, iOS, Android ํ ํ๋ฉด์ ์ค์นํด ๋ค์ดํฐ๋ธ ์ฑ๊ณผ ๊ฐ์ ์ฌ์ฉ๊ฐ์ ์ ๊ณตํฉ๋๋ค.
- **์ ๋ขฐํ ์ ์๋ ์คํ๋ผ์ธ ๋๊ธฐํ**: ์ด์์ ์ฆ์ ๋ก์ปฌ์ ์ ์ฅ๋ฉ๋๋ค. ์คํ๋ผ์ธ ์ํ์ ์ ์ถ๊ณผ ์
๋ก๋๋ ํ์ ์์๋ค๊ฐ ์ฐ๊ฒฐ์ด ๋ณต๊ตฌ๋๋ฉด ์๋์ผ๋ก ์ฌ์๋ฉ๋๋ค.
- **์ค์๊ฐ ์์ฑ ๊ธฐ๋ก**: `/capture` ํ์ด์ง์์ ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ ์์ฑ ์ธ์(ASR) ์ ์ฌ๋ฅผ ์ง์ํฉ๋๋ค.
### 7. ๊ฐ๋ ฅํ Better Auth ์ ํ๋ฆฌ์ผ์ด์
๋ณด์
- **Better Auth ๊ธฐ๋ฐ**: `HttpOnly`, `SameSite=Lax` ๋ธ๋ผ์ฐ์ ์ฟ ํค ์ธ์
๊ณผ, ์คํฌ๋ฆฝํธยทCLIยทMCP์ฉ์ผ๋ก ํ๊ธฐ ๊ฐ๋ฅํ `memos_pat_` Personal Access Token์ ์ ๊ณตํฉ๋๋ค.
- **์๊ฒฉํ Origin ๋ณดํธ**: ์ํ ๋ณ๊ฒฝ ์์ฒญ์๋ ์ ํํ Origin ํ์ดํธ๋ฆฌ์คํธ ๊ฒ์ฆ์ ๊ฐ์ ํฉ๋๋ค. Cloudflare Access๋ ์ ํ์ ์ธ๋ถ ๋ฐฉ์ด์ ์ผ๋ก ๊ณ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
### 8. Memos ํธํ & ๋งค๋๋ฌ์ด ์ด์
- **Memos `/api/v1` ํธํ**: ํต์ฌ Memos API ์๋ํฌ์ธํธ(๊ธฐ๋ณธ camelCase, ํค๋๋ก legacy snake_case)์ OpenAPI ์คํค๋ง๋ฅผ ์ ๊ณตํฉ๋๋ค.
- **์๋ํํฐ ์ฑ ๋์**: Moe Memos ๊ฐ์ ๋ชจ๋ฐ์ผ ํด๋ผ์ด์ธํธ์์ ๋ฐ๋ก ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
- **์๋ฐฉํฅ ๊ฐ์ ธ์ค๊ธฐ/๋ด๋ณด๋ด๊ธฐ**: Memos / flomo์์ ์ถฉ๋ ์ฒ๋ฆฌ ์ ๋ต๊ณผ ํจ๊ป ์ํด๋ฆญ ๊ฐ์ ธ์ค๊ธฐ, ์ ์ฒด ์๋ณธ ๋ด๋ณด๋ด๊ธฐ ๋ฒ๋ค์ ์ง์ํฉ๋๋ค.
---
### 9. ํ๋ฌ๊ทธ์ธ ์์คํ
: ์นด๋๋ ํ๋ฌ๊ทธ์ธ
- **๊ธฐ๋ณธ ์นด๋ 5์ฅ**: Plain, Daily, Ticket, Postcard, ๊ทธ๋ฆฌ๊ณ canvas๋ก ๊ทธ๋ฆฌ๋ Postmark ๋ฐ๋ชจ.
- **์คํ ์ด์ ํ๋ ์ด์
**: ์ค์ ์์ ๋๋ ํฐ๋ฆฌ ํ์, ์ํด๋ฆญ ์ค์น(SHA-256 ๊ฒ์ฆ), ํ์ฑํ/๋นํ์ฑํ, ์์ ๋ณ๊ฒฝ, ๊ธฐ๋ณธ ์นด๋ ์ง์ , ์จ๊ธฐ๊ธฐ๋ฅผ ๋ชจ๋ ์ฒ๋ฆฌํฉ๋๋ค. ๊ณต์ ๋๋ ํฐ๋ฆฌ๋ [flaremo.app/plugins](https://flaremo.app/plugins/registry.json)์ ์์ต๋๋ค.
- **์ง์ ์
๋ก๋**: ๊ด๋ฆฌ์๋ ๋ก์ปฌ ํจํค์ง๋ฅผ ์ค์นํ ์ ์์ต๋๋ค โ ํด๋น ์ธ์คํด์ค์๋ง ์กด์ฌํ๋ฉฐ ์ด๋๋ก๋ ์ ์ก๋์ง ์์ต๋๋ค.
- **์ ์ ๋๊ตฌ**: `pnpm plugin:new`๋ก ์ค์บํด๋ฉํ๊ณ , `pnpm plugin:check`๋ **์ธ์คํด์ค๊ฐ ์ค์น ์ ๊ฐ์ ํ๋ ๊ฒ๊ณผ ์ ํํ ๋์ผํ ๊ท์น**์ผ๋ก ๊ฒ์ฆํ๋ฉฐ, `pnpm plugins:build`๋ก ํจํค์งํฉ๋๋ค. document ์นด๋๋ ์์ JSON ๋ ์ด์์, sandbox ์นด๋๋ ์ง์ ์์ฑํ HTML/CSS/JS๋ฅผ ์คํํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ [ํ๋ฌ๊ทธ์ธ ๊ฐ์ด๋](./docs/en/plugins.md)๋ฅผ ์ฐธ์กฐํ์ธ์.
- **๊ธฐ๋ณธ์ด ์์ **: ์นด๋๋ ๋ถํฌ๋ช
์ค๋ฆฌ์ง ์๋๋ฐ์ค์์ **๋คํธ์ํฌ ์ ๊ทผ ์์ด** ์คํ๋ฉ๋๋ค. ์ปค๋ฎค๋ํฐ/๋ธ๋๋ ํฉ์ ๊ด๋ฆฌ์๊ฐ ์ผ๊ธฐ ์ ๊น์ง ๊บผ์ ธ ์์ต๋๋ค.
## ๐ Cloudflare ๋ฌด๋ฃ ์ ๊ณต๋์ ์ผ๋ง๋ ๋๋ํ๊ฐ?
'๋ฌด๋ฃ'๋ ๊ณง '๊ทน์ฌํ ์ ํ'์ด๋ผ๊ณ ์ฌ๊ธฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ํ์ง๋ง ํ
์คํธ ์ค์ฌ์ ๊ฐ์ธ ์ง์ ๋ฒ ์ด์ค์๋ Cloudflare์ ๋ฌด๋ฃ ํ ๋น๋์ด ์ฌ์ค์ ๋ฌดํ๋์
๋๋ค:
| ๋ฆฌ์์ค | ๋ฌด๋ฃ ์ ๊ณต๋ | ํ์ฐ ์ฉ๋ | ์ค์ ์ฌ์ฉ ๊ฐ๋ฅ ๊ธฐ๊ฐ |
| :--- | :--- | :--- | :--- |
| **Cloudflare D1** | **5 GB ๋ฐ์ดํฐ๋ฒ ์ด์ค** | ํ
์คํธ ๋ฉ๋ชจ ์ฝ **250๋ง ๊ฐ** | ๋งค์ผ 100๊ฐ์ฉ ์์ฑํด๋ ์ฑ์ฐ๋ ๋ฐ **68๋
** ์์ |
| **Cloudflare R2** | **10 GB ์คํ ๋ฆฌ์ง** | ์ฌ์ง ์ฝ **5,000โ10,000์ฅ** / ์์ฑ **80์๊ฐ** | **์์๋ฐ์ด๋ ์๊ธ $0**; ๊ณต๊ฐ ๊ณต์ ๋ก๋ ๋์ญํญ ์ฒญ๊ตฌ๊ฐ ๋ฐ์ํ์ง ์์ |
| **Cloudflare Workers** | ๋๋ํ ๋ฌด๋ฃ ์์ฒญ ํ๋ | ์ ์ธ๊ณ 300๊ฐ ์ด์ ์ฃ์ง ๋ก์ผ์ด์
| ์ฝ๋ ๋ถํธ ์๋ ์ ์ธ๊ณ ๋ฐ๋ฆฌ์ด ์๋ต |
---
## ๐ฅ ๋น๊ต: Cloudflare ๋ค์ดํฐ๋ธ vs ํ NAS vs ์ ํต์ VPS
| ๊ธฐ์ค | Cloudflare ๋ค์ดํฐ๋ธ (FlareMo) | ํ NAS / ๋ฏธ๋ PC | ์ ํต์ VPS |
| :--- | :--- | :--- | :--- |
| **๋ฐ์ดํฐ ๋ด๊ตฌ์ฑ** | **์ํฐํ๋ผ์ด์ฆ๊ธ ๋ฉํฐ ๋ฆฌ์ ๋ณต์ **, ํ๋์จ์ด ๊ณ ์ฅ ์ํ ์ ๋ก | ๋จ์ผ ๋์คํฌ ๊ณ ์ฅ์ด๋ ์ ์ ํ ๋ฒ์ผ๋ก ๋ฐ์ดํฐ ์ ์ฒด ์์ค ๊ฐ๋ฅ | ์๋ ์ค๋
์ทยท๋ฐฑ์
๋ฃจํด์ ์์กด |
| **์ ์ง๋ณด์** | **์ ๋ก**: OS ํจ์น๋, Docker compose๋, DB ๊ด๋ฆฌ๋ ์์ | OS ์
๋ฐ์ดํธ, Docker ๊ด๋ฆฌ, SMART ๋์คํฌ ์๋ฆผ, ๋ผ์ฐํฐ ์ค์ | ์ปค๋ ์
๊ทธ๋ ์ด๋, ๋ณด์ ํจ์น, ๊ฐ์ ๋ฐ๋ชฌ ๊ด๋ฆฌ |
| **์ ์ ์ง์ฐ** | **๊ธ๋ก๋ฒ ์ฃ์ง CDN**, ์ด๋์๋ 100ms ๋ฏธ๋ง ์๋ต | DDNS / frp / Tailscale ํฐ๋ ํ์, ๊ฐ์ ์ฉ ํ์ ์
๋งํฌ์ ์ ์ฝ | ๋จ์ผ ํด๋ผ์ฐ๋ ๋ฆฌ์ ์ ์์กด, ๊ตญ๊ฒฝ ๊ฐ ์ง์ฐ ํผ |
| **SSL & ๋๋ฉ์ธ** | **์๋ HTTPS** ๋ฐ ์ปค์คํ
๋๋ฉ์ธ ๋ฐ์ธ๋ฉ | ์๋ ์ธ์ฆ์ ๋ฐ๊ธ, ๋ฆฌ๋ฒ์ค ํ๋ก์ ์ค์ | Nginx / Caddy ์ค์ ๊ณผ Let's Encrypt ๊ฐฑ์ ๊ด๋ฆฌ |
| **๋น์ฉ** | ๋ฌด๋ฃ ํฐ์ด์์ **์ $0** | ๋์ ์ด๊ธฐ ํ๋์จ์ด ๋น์ฉ + ์ง์์ ์ธ ์ ๊ธฐ๋ฃ | ๋งค์/๋งค๋
์ฒญ๊ตฌ๋๋ ์๋ฒยท๋์ญํญ ๋น์ฉ |
---
## ๐ 5๋ถ ๋ง์ ๋ฐฐํฌํ๊ธฐ
### ๋ฐฉ๋ฒ 1: ์ํด๋ฆญ Cloudflare ๋ฐฐํฌ
[](https://deploy.workers.cloudflare.com/?url=https://github.com/realchendahuang/FlareMo)
์ ์ฅ์๋ฅผ ๋ด GitHub ๊ณ์ ์ผ๋ก ๋ณต์ ํ๊ณ D1, R2, Queues, Vectorize๋ฅผ ์๋์ผ๋ก ํ๋ก๋น์ ๋ํฉ๋๋ค. ์ต์ด ๋ฐฐํฌ ํ `FLAREMO_PUBLIC_URL`๊ณผ ์ํฌ๋ฆฟ์ ์ค์ ํ์ธ์([docs/en/deploy.md](./docs/en/deploy.md#one-click-deploy-community-supported) ์ฐธ์กฐ). ์ฒซ ์๋์์ "Github API Limit Exceeded"๊ฐ ํ์๋๋ฉด ๋ช ๋ถ ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๋ค์ ์๋ํ์ธ์.
### ๋ฐฉ๋ฒ 2: GitHub Action (์
ํ ํธ์คํ
ํฌํฌ)
ํฌํฌ์์ Actions์ **Deploy to Cloudflare**๋ฅผ ์คํํ๋ฉด ๋ฆฌ์์ค ํ๋ก๋น์ ๋, Worker ๋ฐฐํฌ, ์ธ์ฆ ์ํฌ๋ฆฟ ๋๊ธฐํ๊ฐ ํ ๋ฒ์ ์ด๋ฃจ์ด์ง๋๋ค. push๋ง์ผ๋ก๋ ๋ฐฐํฌ๋์ง ์์ต๋๋ค. [docs/en/github-action-deploy.md](./docs/en/github-action-deploy.md)๋ฅผ ์ฐธ์กฐํ์ธ์.
### ๋ฐฉ๋ฒ 3: AI ์์ด์ ํธ๋ก ๋ฐฐํฌ (๊ถ์ฅ)
ํฐ๋ฏธ๋ ๋ช
๋ น์ ์คํํ ์ ์๋ AI ์์ด์ ํธ(Claude Code, Cursor Agent, Codex ๋ฑ)์๊ฒ ์ ์ฅ์์ ํจ๊ป [docs/en/agent-deploy.md](./docs/en/agent-deploy.md)๋ฅผ ์ ๋ฌํ์ธ์:
> "docs/en/agent-deploy.md ๋ฌธ์์ ๋ฐ๋ผ ๋ด Cloudflare ๊ณ์ ์ FlareMo๋ฅผ ๋ฐฐํฌํด ์ค."
---
### ๋ฐฉ๋ฒ 4: 3๋จ๊ณ ์๋ ๋ฐฐํฌ
#### 1. Cloudflare ๋ฆฌ์์ค ์์ฑ
```bash
pnpm exec wrangler whoami
pnpm exec wrangler d1 create flaremo
pnpm exec wrangler r2 bucket create flaremo-attachments
```
๋๋ `pnpm provision:remote`๋ฅผ ๋์ ์คํํ์ธ์: ๋๋ฝ๋ D1 / R2 / Queue / Vectorize ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ณ D1 `database_id`๋ฅผ `wrangler.jsonc`์ ๋์ ๊ธฐ๋กํฉ๋๋ค. ๋ฉฑ๋ฑํ๊ฒ ๋์ํ๋ฉฐ ๊ธฐ์กด ๋ฆฌ์์ค๋ ๊ฑด๋๋๋๋ค.
#### 2. ์ค์ ๋ฐ ์ํฌ๋ฆฟ ๊ตฌ์ฑ
```bash
cp wrangler.jsonc.example wrangler.jsonc
```
์์ฑ๋ `database_id`๋ฅผ ์ฑ์ฐ๊ณ `FLAREMO_PUBLIC_URL`์ ํ๋ก๋์
๋๋ฉ์ธ์ผ๋ก ์ค์ ํ์ธ์. ๊ทธ๋ค์ ์ํฌ๋ฆฟ์ ์ค์ ํฉ๋๋ค:
```bash
pnpm exec wrangler secret put BETTER_AUTH_SECRET --config ./wrangler.jsonc
pnpm exec wrangler secret put FLAREMO_BOOTSTRAP_SECRET --config ./wrangler.jsonc
```
#### 3. ๋ฐฐํฌ
```bash
pnpm deploy:dry-run
pnpm deploy
```
(์ ์ฒด `pnpm verify` ๊ฒ์ดํธ๋ ์ ์ง๊ด๋ฆฌ์๊ฐ ๋ช
์์ ์ผ๋ก ์์ฒญํ ๋๋ง ์คํ๋ฉ๋๋ค.)
ํ๋ก๋์
๋๋ฉ์ธ์ `/setup`์ ์ ์ํด `FLAREMO_BOOTSTRAP_SECRET`์ ์
๋ ฅํ๊ณ Owner ๊ณ์ ์ ์ด๊ธฐํํ์ธ์.
์์ธ ๊ฐ์ด๋: [๋ฐฐํฌ ๊ฐ์ด๋](./docs/en/deploy.md) ยท [GitHub Action ๋ฐฐํฌ](./docs/en/github-action-deploy.md) ยท [์
๋ฐ์ดํธ ๊ฐ์ด๋](./docs/en/update.md).
---
## ๐งฑ ์ํคํ
์ฒ & ๊ธฐ์ ์คํ
```mermaid
flowchart LR
Browser["FlareMo Web UI (React 19 / PWA)"] --> Worker["Cloudflare Worker"]
Clients["Memos Clients / Scripts / MCP"] --> Worker
Worker --> Auth["Better Auth (Session / PAT)"]
Worker --> D1["Cloudflare D1 (Memos / Relations / Settings)"]
Access["Cloudflare Access (Optional Outer Perimeter)"] -.-> Worker
Worker --> R2["Cloudflare R2 (Attachments & Exports)"]
Worker --> Assets["Workers Static Assets"]
```
- **๋ฐํ์**: Cloudflare Workers
- **ํ๋ก ํธ์๋**: React 19, Vite, TanStack Router, Tailwind CSS 4, Radix UI
- **๋ฐ์ดํฐ๋ฒ ์ด์ค**: Cloudflare D1, Drizzle ORM
- **์คํ ๋ฆฌ์ง**: Cloudflare R2
- **์ธ์ฆ**: Better Auth (HttpOnly ์ฟ ํค ์ธ์
+ ํ๊ธฐ ๊ฐ๋ฅํ `memos_pat_`)
- **AI & ๊ฒ์**: Workers AI, Vectorize, SQLite FTS5
- **ํ๋ฌ๊ทธ์ธ**: ์ฌ๋กฏ ๊ธฐ๋ฐ ํ์ฅ ํ๋ซํผ([ํ์ค](./docs/plugin-platform-standard.md), [๊ฐ์ด๋](./docs/en/plugins.md)); ํจํค์ง๋ R2์ ์ ์ฅ๋๋ฉฐ ์๋๋ฐ์ค ์นด๋๋ ๋คํธ์ํฌ ์ ๊ทผ ์์ด ์คํ๋ฉ๋๋ค
---
## ๐ Star History
[](https://star-history.com/#realchendahuang/FlareMo&Date)
---
## ๐ ๋ผ์ด์ ์ค
[GNU AGPL-3.0](./LICENSE) ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ์คํ์์ค๋ก ๊ณต๊ฐ๋ฉ๋๋ค.
Copyright (c) 2026 realchendahuang.