Skip to main content

Google Drive-synchronized floating Post-it memo pad for Windows, macOS, and Linux

Project description

Memo-Bot v1.3.2 ๐Ÿ“Œ

๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ ๊ธฐ๋ฐ˜์˜ ์™„๋ฒฝํžˆ ๋™๊ธฐํ™”๋˜๋Š” ํฌ๋กœ์Šค ํ”Œ๋žซํผ ํฌ์ŠคํŠธ์ž‡ ๋ฉ”๋ชจ์žฅ์ž…๋‹ˆ๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ(Flutter)์™€ ๋ฐ์Šคํฌํ†ฑ(Windows, macOS, Linux - Python/PyWebView) ํ™˜๊ฒฝ์„ ์ง€์›ํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž์˜ ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ **์ˆจ๊ฒจ์ง„ ์•ฑ ํด๋” (Application Data Folder)**๋ฅผ ์ด์šฉํ•ด ๋ณด์•ˆ์ด ๋งค์šฐ ๋›ฐ์–ด๋‚˜๊ณ  ๊น”๋”ํ•œ ๋™๊ธฐํ™”๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.


๐ŸŽจ ๊ธฐ์ˆ  ์Šคํƒ ๋ฐ ํŠน์ง•

  • Desktop Client: Python + PyWebView (HTML/JS/CSS). OS ๋‚ด์žฅ ์›น๋ทฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋ฐฐํฌ ํŒŒ์ผ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋ชจ๊ฐ€ ์ตœ์†Œํ™”๋ฉ๋‹ˆ๋‹ค.
  • Mobile Client (Android): Flutter (Material 3 ๋‹คํฌ ๋ชจ๋“œ). ๋ชจ๋˜ํ•˜๊ณ  ์œ ๋ คํ•œ ํฌ์ŠคํŠธ์ž‡ ๋ฆฌ์ŠคํŠธ ๋ฐ ํŽธ์ง‘ ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ณต.
  • Sync Engine: Google Drive AppData API. ์‚ฌ์šฉ์ž์˜ ํŒŒ์ผ ๋ชฉ๋ก์— ๋…ธ์ถœ๋˜์ง€ ์•Š๋Š” ๊ณ ์œ  ์•ฑ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ํŒŒ์ผ์˜ appProperties ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ ์†Œ๋ชจ๊ฐ€ ๋งค์šฐ ์ ๊ณ  ๋ฐ˜์‘์ด ๋น ๋ฅธ ๋™๊ธฐํ™”๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“‚ ๋ฐ์ดํ„ฐ ์ €์žฅ ๊ฒฝ๋กœ ๋ฐ ํŒŒ์ผ ํฌ๋งท

๋ฉ”๋ชจ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์ €์žฅํ•˜๋ฉด ๊ฐ ๋ฉ”๋ชจ๋Š” ๋กœ์ปฌ ์ปดํ“จํ„ฐ์— ๊ฐœ๋ณ„ JSON ํŒŒ์ผ ํ˜•ํƒœ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

1. ๋กœ์ปฌ ์ €์žฅ ๊ฒฝ๋กœ

  • Windows: C:\Users\<์‚ฌ์šฉ์ž๋ช…>\.memobot\notes\
  • macOS / Linux: ~/.memobot/notes/

2. ํŒŒ์ผ ํ˜•์‹ ๋ฐ ์ด๋ฆ„

  • ๊ฐ ๋ฉ”๋ชจ๋‹น note_<๊ณ ์œ ID>.json ํ˜•์‹์œผ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. (์˜ˆ: note_a1b2c3d4.json)

3. JSON ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์˜ˆ์‹œ

๋ฉ”๋ชจ์˜ ๋‚ด์šฉ, ์ƒ‰์ƒ, ์ขŒํ‘œ ๋ฐ ํฌ๊ธฐ, ํƒœ๊ทธ ์ •๋ณด๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ฒจ๋ถ€๋œ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๊นŒ์ง€ ๋‹จ์ผ JSON ํŒŒ์ผ ๋‚ด์— ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค.

{
  "id": "a1b2c3d4-...",
  "content": "๋ฉ”๋ชจ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. #ํƒœ๊ทธ",
  "color": "yellow",
  "tags": ["ํƒœ๊ทธ"],
  "x": 120,
  "y": 250,
  "width": 250,
  "height": 250,
  "is_folded": false,
  "on_top": true,
  "updated_at": "2026-06-04T12:57:08Z",
  "image": "data:image/png;base64,iVBORw0KGgoAAA..." // ์ฒจ๋ถ€๋œ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ (Base64 ์ธ์ฝ”๋”ฉ)
}

[!NOTE] ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ ๋™๊ธฐํ™”๊ฐ€ ์‹คํ–‰๋˜๋ฉด ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ์˜ ์ˆจ๊ฒจ์ง„ ์•ฑ ์ „์šฉ ์ €์žฅ์†Œ(AppData Folder) ํด๋”์—๋„ ๋กœ์ปฌ๊ณผ ๋™์ผํ•œ ํŒŒ์ผ๋ช… ๋ฐ JSON ๋ฐ์ดํ„ฐ ํฌ๋งท์œผ๋กœ ์ €์žฅ ๋ฐ ๋™๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.


๐Ÿ”‘ ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ API ์„ค์ • (OAuth 2.0)

์–‘์ชฝ ํ”Œ๋žซํผ์—์„œ ๋™๊ธฐํ™” ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด Google Cloud Console์—์„œ OAuth 2.0 ์ž๊ฒฉ ์ฆ๋ช…์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. Google Cloud Console ์ ‘์†:

    • Google Cloud Console์— ๊ตฌ๊ธ€ ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค.
    • ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค (์˜ˆ: Memo-Bot).
  2. Google Drive API ํ™œ์„ฑํ™”:

    • API ๋ฐ ์„œ๋น„์Šค > ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
    • Google Drive API๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์‚ฌ์šฉ(Enable) ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. OAuth ๋™์˜ ํ™”๋ฉด ์„ค์ •:

    • API ๋ฐ ์„œ๋น„์Šค > OAuth ๋™์˜ ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
    • User Type์„ **์™ธ๋ถ€(External)**๋กœ ์„ ํƒํ•˜๊ณ  ์ƒ์„ฑ์„ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.
    • ํ•„์ˆ˜ ์ •๋ณด(์•ฑ ์ด๋ฆ„, ์ด๋ฉ”์ผ ๋“ฑ)๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฒ”์œ„(Scopes) ์„ค์ • ๋‹จ๊ณ„์—์„œ .../auth/drive.appdata ๋ฒ”์œ„๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค (๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ์˜ ์•ฑ ์ „์šฉ ์ˆจ๊ฒจ์ง„ ํด๋” ์ฝ๊ธฐ/์“ฐ๊ธฐ ๊ถŒํ•œ).
    • ํ…Œ์ŠคํŠธ ์‚ฌ์šฉ์ž (Test Users) ๋“ฑ๋ก ๋‹จ๊ณ„์—์„œ ๋™๊ธฐํ™” ํ…Œ์ŠคํŠธ์— ์‚ฌ์šฉํ•  ๋ณธ์ธ์˜ ๊ตฌ๊ธ€ ์ด๋ฉ”์ผ์„ ๋ฐ˜๋“œ์‹œ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

[!IMPORTANT] OAuth ๋™์˜ ํ™”๋ฉด์˜ ํผ๋ธ”๋ฆฌ์‹ฑ ์ƒํƒœ๊ฐ€ ํ…Œ์ŠคํŠธ(Testing) ๋ชจ๋“œ์ธ ๊ฒฝ์šฐ, ํ…Œ์ŠคํŠธ ์‚ฌ์šฉ์ž๋กœ ์ด๋ฉ”์ผ ๊ณ„์ •์ด ๋“ฑ๋ก๋˜์–ด ์žˆ์–ด์•ผ๋งŒ ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ์ด ์ •์ƒ ์ฒ˜๋ฆฌ๋˜๊ณ  ์ฐจ๋‹จ ์—๋Ÿฌ(403 access_denied)๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  1. ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด(Credentials) ์ƒ์„ฑ:
    • API ๋ฐ ์„œ๋น„์Šค > ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
    • ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด ๋งŒ๋“ค๊ธฐ > OAuth ํด๋ผ์ด์–ธํŠธ ID๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์œ ํ˜•์„ **๋ฐ์Šคํฌํ†ฑ ์•ฑ(Desktop App)**์œผ๋กœ ์„ ํƒํ•˜๊ณ  ์ด๋ฆ„์„ ์ž…๋ ฅ ํ›„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ์ƒ์„ฑ๋œ ํด๋ผ์ด์–ธํŠธ ID์˜ JSON ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ป ๋ฐ์Šคํฌํ†ฑ ์•ฑ ์‹คํ–‰ ๋ฐ ๋ฐฐํฌ (Python)

1. ์ž๊ฒฉ ์ฆ๋ช… ํŒŒ์ผ ๋ฐฐ์น˜

๋‹ค์šด๋กœ๋“œ๋ฐ›์€ ํด๋ผ์ด์–ธํŠธ ๋น„๋ฐ€๋ฒˆํ˜ธ JSON ํŒŒ์ผ์„ client_secrets.json์œผ๋กœ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜์—ฌ ๋‹ค์Œ ๊ฒฝ๋กœ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

  • Windows: C:\Users\<์‚ฌ์šฉ์ž๋ช…>\.memobot\client_secrets.json
  • macOS/Linux: ~/.memobot/client_secrets.json

2. ๊ฐœ๋ฐœ์ž ๋ชจ๋“œ ๋กœ์ปฌ ์‹คํ–‰

cd desktop
# ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ ๋ฐ ํ™œ์„ฑํ™”
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# ์˜์กด์„ฑ ํŒจํ‚ค์ง€ ์„ค์น˜
pip install -e .

# ์•ฑ ์‹คํ–‰
memobot

3. PyPI ๋ฐฐํฌ์šฉ ๋นŒ๋“œ ๋ฐ ์—…๋กœ๋“œ

ํŒจํ‚ค์ง€ ์ฒญ์†Œ, ๋นŒ๋“œ, ์—…๋กœ๋“œ๋ฅผ ์ผ๊ด„์ ์œผ๋กœ ์ž๋™ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๋ฐฐ์น˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค:

# Windows ํ™˜๊ฒฝ์—์„œ ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ ๋ฐฐ์น˜ํŒŒ์ผ ์‹คํ–‰
./publish_pypi.bat
  • ์‹คํ–‰ ์‹œ ๊ธฐ์กด ๋นŒ๋“œ ์ž„์‹œ ํŒŒ์ผ๋“ค์„ ๋ชจ๋‘ ์ดˆ๊ธฐํ™”ํ•˜๊ณ , build ๋ฐ twine ๋ชจ๋“ˆ์„ ์ž๋™์œผ๋กœ ์ตœ์‹  ์„ค์น˜/์—…๊ทธ๋ ˆ์ด๋“œํ•œ ํ›„ ๋นŒ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ๋นŒ๋“œ ์™„๋ฃŒ ํ›„ [1] TestPyPI ์—…๋กœ๋“œ, [2] ๊ณต์‹ PyPI ์—…๋กœ๋“œ, [3] ์—…๋กœ๋“œ ์—†์ด ๋นŒ๋“œ๋งŒ ์ˆ˜ํ–‰ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ด ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐฐํฌ ์™„๋ฃŒ ์‹œ ์‚ฌ์šฉ์ž๋Š” pip install memobot ๋ช…๋ น์–ด๋งŒ์œผ๋กœ ํฌ๋กœ์Šค ํ”Œ๋žซํผ(Windows, macOS, Linux) ํ™˜๊ฒฝ์— ์„ค์น˜ํ•˜๊ณ  memobot ๋ช…๋ น์–ด๋กœ ์ฆ‰์‹œ ์•ฑ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. PyPI ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ• (์„ค์น˜, ์—…๋ฐ์ดํŠธ, ์‚ญ์ œ)

์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋Š” ํŒŒ์ด์ฌ์ด ์„ค์น˜๋œ ํ™˜๊ฒฝ์—์„œ ์•„๋ž˜์˜ pip ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด ํŒจํ‚ค์ง€๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์„ค์น˜ (Install):
    pip install memobot
    
  • ์‹คํ–‰ (Run): ์„ค์น˜ ํ›„ ํ„ฐ๋ฏธ๋„์ด๋‚˜ ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ์—์„œ ์•„๋ž˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ๋ฐ์Šคํฌํ†ฑ ์•ฑ์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค (์œˆ๋„์šฐ ํ™˜๊ฒฝ์—์„œ๋Š” ๊ฒ€์€์ƒ‰ ์ฝ˜์†”์ฐฝ ์—†์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์šฉ ์•ฑ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค).
    memobot
    
  • ์ตœ์‹  ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ (Update):
    pip install --upgrade memobot
    
  • ์‚ญ์ œ (Uninstall):
    pip uninstall memobot
    

๐Ÿ“ฑ ๋ชจ๋ฐ”์ผ ์•ฑ ์‹คํ–‰ (Flutter Android)

1. Flutter ์˜์กด์„ฑ ๊ตฌ์„ฑ

cd mobile
flutter pub get

2. ์•ˆ๋“œ๋กœ์ด๋“œ ํ”Œ๋žซํผ ์„ค์ •

๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ ์—ฐ๋™์„ ์œ„ํ•ด ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ์˜ ํŒจํ‚ค์ง€๋ช…๊ณผ ๋””๋ฒ„๊ทธ ์„œ๋ช… ํ‚ค(SHA-1)๋ฅผ Google Cloud Console์˜ ๋™์ผ ํ”„๋กœ์ ํŠธ์— ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. OAuth ํด๋ผ์ด์–ธํŠธ ID ์ถ”๊ฐ€ ์ƒ์„ฑ:
    • Google Cloud Console > ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด > OAuth ํด๋ผ์ด์–ธํŠธ ID ์ƒ์„ฑ.
    • ์œ ํ˜•์„ Android๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    • ํŒจํ‚ค์ง€ ์ด๋ฆ„ ์ž…๋ ฅ (์˜ˆ: com.example.memobot).
    • ๊ฐœ๋ฐœ์šฉ SHA-1 ์ง€๋ฌธ ์ธ์ฆ์„œ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค (JDK์˜ keytool์„ ํ†ตํ•ด ์กฐํšŒ ๊ฐ€๋Šฅ).
  2. ์„œ๋น„์Šค ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ:
    • ํ•„์š”์— ๋”ฐ๋ผ Firebase์™€ ๊ฒฐํ•ฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ google-services.json์„ mobile/android/app/ ์•„๋ž˜์— ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ๋ณธ ๊ตฌํ˜„์—์„œ๋Š” google_sign_in ํŒจํ‚ค์ง€๊ฐ€ ํด๋ผ์ด์–ธํŠธ ID๋ฅผ ํ†ตํ•ด ์ง์ ‘ ๋™์ž‘ํ•˜๋ฏ€๋กœ ์ตœ์†Œํ•œ์˜ ์„ค์ •๋งŒ์œผ๋กœ ์ž‘๋™ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

3. ์•ฑ ์‹คํ–‰

flutter run

๐Ÿ”„ ๋™๊ธฐํ™” ๋ฐ ์ถฉ๋Œ ๋ฐฉ์ง€ ์„ธ๋ถ€ ์„ค๊ณ„

  • Tombstoning (์†Œํ”„ํŠธ ์‚ญ์ œ): ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ ๋‚ด์—์„œ ๋ฉ”๋ชจ๋ฅผ ์‚ญ์ œํ•˜๋ฉด ํŒŒ์ผ์ด ์ฆ‰์‹œ ์˜๊ตฌ ์‚ญ์ œ๋˜์ง€ ์•Š๊ณ  ๋‚ด๋ถ€ ํ•„๋“œ๊ฐ€ is_deleted: true๋กœ ๊ฐฑ์‹ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค๋ฅธ ๋””๋ฐ”์ด์Šค๊ฐ€ ๋™๊ธฐํ™” ์‹œ์ ์— ํ•ด๋‹น ๋ฉ”๋ชจ๋ฅผ ๋กœ์ปฌ์—์„œ๋„ ๋˜‘๊ฐ™์ด ์ง€์›Œ์ฃผ๋„๋ก ์œ ๋„ํ•˜๋ฉฐ, ์™„๋ฒฝํ•œ ์‚ญ์ œ ์ „ํŒŒ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • Last-Write-Wins (์ตœ์ข… ์“ฐ๊ธฐ ์šฐ์„ ): ์˜คํ”„๋ผ์ธ ์ˆ˜์ •์„ ํฌํ•จํ•˜์—ฌ ์„œ๋กœ ๋‹ค๋ฅธ ๊ธฐ๊ธฐ์—์„œ ๊ฐ™์€ ํฌ์ŠคํŠธ์ž‡์„ ์ˆ˜์ •ํ•œ ๊ฒฝ์šฐ, JSON ๋‚ด๋ถ€์˜ updated_at ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋” ๋Šฆ๊ฒŒ ํŽธ์ง‘๋œ ์ตœ์ข… ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฎ์–ด์”๋‹ˆ๋‹ค.

๐Ÿš€ ์—…๋ฐ์ดํŠธ ๋‚ด์—ญ (Changelog)

v1.3.2 (2026-06-06)

  • Gemini API ํ‚ค ๋‹ค์ค‘ ์ž…๋ ฅ UI ๊ฐœ์„ : ๋‹จ์ผ ์ž…๋ ฅ์ฐฝ์— ์‰ผํ‘œ๋กœ ๊ธธ๊ฒŒ ๋‚˜์—ดํ•ด์•ผ ํ–ˆ๋˜ ๊ธฐ์กด ๋ฐฉ์‹ ๋Œ€์‹ , ์„ค์ • ์ฐฝ์—์„œ ํ•œ ์นธ์— ํ‚ค ํ•˜๋‚˜์”ฉ ๊น”๋”ํ•˜๊ฒŒ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์ค‘ ํ‚ค ๋™์  ์ถ”๊ฐ€(+)/์‚ญ์ œ(ํœด์ง€ํ†ต) ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด ๋ฐฑ์—”๋“œ ์ž๋™ ํ‚ค ์ˆœํ™˜(rotation) ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ 100% ํ•˜์œ„ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.

v1.3.1 (2026-06-05)

  • ์˜ต๋””์‹œ์–ธ ์Šคํƒ€์ผ ์œ„ํ‚ค๋งํฌ [[ ]] ์—ฐ๋™: ๋ฉ”๋ชจ ๋ณธ๋ฌธ ๋‚ด ๋Œ€๊ด„ํ˜ธ ๋งํฌ([[๋ฉ”๋ชจ ์ œ๋ชฉ]]) ํด๋ฆญ ์‹œ ํ•ด๋‹น ๋ฉ”๋ชจ ์ฐฝ์„ ์ฆ‰์‹œ ํฌ์ปค์Šคํ•˜๊ณ , ๋ฉ”๋ชจ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ์ฒซ ์ค„ ์ œ๋ชฉ์„ ๊ฐ€์ง„ ์‹ ๊ทœ ๋ฉ”๋ชจ๋ฅผ ์ƒ์„ฑํ•ด ์—ฐ๋™ํ•ด์ฃผ๋Š” WikiLinks ๊ธฐ๋Šฅ์„ ํƒ‘์žฌํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ ์‚ญ์ œ๋œ ๋ฉ”๋ชจ ์™„์ „ ์‚ญ์ œ: ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ์™€ ๋™๊ธฐํ™” ์‹œ, ์ด๋ฏธ ์†Œํ”„ํŠธ ์‚ญ์ œ(Tombstone) ์ฒ˜๋ฆฌ๋œ ์‚ญ์ œ ๋Œ€๊ธฐ ๋ฉ”๋ชจ๊ฐ€ ๋™๊ธฐํ™” ๋ชฉ๋ก์— ๋‚จ์•„ ์ž”์กดํ•˜๋Š” ํ˜„์ƒ์„ ๋ฐฉ์ง€ํ•˜๋„๋ก ์›๊ฒฉ ๋ฐ ๋กœ์ปฌ์—์„œ ์˜๊ตฌ ์‚ญ์ œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฃจํ‹ด์„ ๋ณด๊ฐ•ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ ์›ฐ์ปด ๋ฉ”๋ชจ ๋น„ํ™œ์„ฑํ™”: ์•ฑ ์ฒ˜์Œ ์‹คํ–‰ ์‹œ ๋กœ์ปฌ ์ €์žฅ์†Œ์— ๊ธฐ๋ณธ์œผ๋กœ ์ƒ์„ฑ๋˜๋˜ 2๊ฐœ์˜ ํŠœํ† ๋ฆฌ์–ผ ์„ฑ๊ฒฉ์˜ ๊ฐ€์ด๋“œ ๋ฉ”๋ชจ๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š๋„๋ก ์ˆ˜์ •ํ•˜์—ฌ ๋” ๊น”๋”ํ•œ ์‹œ์ž‘ ํ™”๋ฉด์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ๋‚ ์งœ ํฌ๋งท ๋ณ€๊ฒฝ: ๋ฉ”๋ชจ ์ƒ์„ฑ ๋ฐ ์—…๋ฐ์ดํŠธ ์‹œ, ์‹œ๊ฐ„(์‹œ/๋ถ„/์ดˆ) ์ •๋ณด๋งŒ ๋…ธ์ถœ๋˜๋˜ ํ™”๋ฉด์— ๋…„-์›”-์ผ ์ •๋ณด๊ฐ€ ํ•จ๊ป˜ ๋…ธ์ถœ๋˜๋„๋ก ๋‚ ์งœ ํ‘œ์‹œ ํฌ๋งท์„ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค (YYYY-MM-DD HH:MM:SS).
  • ํ•„ํ„ฐ ์ดˆ๊ธฐํ™” ์ž๋™ํ™”: ํ•ด์‹œํƒœ๊ทธ๋‚˜ ๋ฉ”๋ชจ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•œ ํ›„ ์ €์žฅ ์‹œ, ํŽธ์ง‘ํ•œ ๋ฉ”๋ชจ๊ฐ€ ํ˜„์žฌ ๊ฒ€์ƒ‰ ๋˜๋Š” ํƒœ๊ทธ ํ•„ํ„ฐ ๋•Œ๋ฌธ์— ๋ณด์ด์ง€ ์•Š๋Š” ํ˜„์ƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ•„ํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ '์ „์ฒด'๋กœ ์ดˆ๊ธฐํ™”ํ•˜์—ฌ ๋ฐฉ๊ธˆ ์ˆ˜์ •ํ•œ ๋ฉ”๋ชจ๊ฐ€ ๋Œ€์‹œ๋ณด๋“œ์— ์ฆ‰์‹œ ๋…ธ์ถœ๋˜๋„๋ก ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์Šฌ๋ฆผ ์นด๋“œ ๋ทฐ & ํœ  ์Šคํฌ๋กค ์ง€์›: ๋Œ€์‹œ๋ณด๋“œ์—์„œ ์ ‘ํžŒ ์ƒํƒœ์˜ ๋ฉ”๋ชจ ์นด๋“œ๋ฅผ ๋Œ€ํญ ์Šฌ๋ฆผํ™”(38px)ํ•˜๊ณ  ์ ‘ํžŒ ์ƒํƒœ์—์„œ๋„ ๋ฉ”๋ชจ ๋ณธ๋ฌธ ์ฒซ ๋ฒˆ์งธ ์ค„์ด ์ƒ๋‹จ์— ๋…ธ์ถœ๋˜๋„๋ก ์ตœ์ ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋กœ, ์Šคํฌ๋กค๋ฐ” ๋…ธ์ถœ ์—†์ด ๋งˆ์šฐ์Šค ํœ  ์Šคํฌ๋กค์„ ๊ฐ์ง€ํ•ด ๊ฐ„ํŽธํ•˜๊ฒŒ ์˜ค๋ฅด๋‚ด๋ฆด ์ˆ˜ ์žˆ๋„๋ก ํŽธ์˜์„ฑ์„ ๊ฐ•ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฒ„์ „ ๋ฑƒ์ง€ ์ถ”๊ฐ€: ๋งค๋‹ˆ์ € ์ฐฝ ํ—ค๋”์˜ ๋กœ๊ณ  ์šฐ์ธก์— ๋ฉ”์ธ ํ…Œ๋งˆ์™€ ์กฐํ™”๋กœ์šด Glassmorphism ์Šคํƒ€์ผ์˜ ๋ฒ„์ „ ๋ฑƒ์ง€(v1.3.1)๋ฅผ ๋ถ€์ฐฉํ–ˆ์Šต๋‹ˆ๋‹ค.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

memobot-1.3.2.tar.gz (71.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

memobot-1.3.2-py3-none-any.whl (68.0 kB view details)

Uploaded Python 3

File details

Details for the file memobot-1.3.2.tar.gz.

File metadata

  • Download URL: memobot-1.3.2.tar.gz
  • Upload date:
  • Size: 71.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for memobot-1.3.2.tar.gz
Algorithm Hash digest
SHA256 e443457eae93e47850bb65c717a240ef6f1bb9f86abdf4f78fcd41667e6ba25e
MD5 5ef2e281024114fbb6f4588936ec5c8a
BLAKE2b-256 c65aacc42c3ed8f999e3baa7facc0d884388036a855f3fd8d55872085947abfa

See more details on using hashes here.

File details

Details for the file memobot-1.3.2-py3-none-any.whl.

File metadata

  • Download URL: memobot-1.3.2-py3-none-any.whl
  • Upload date:
  • Size: 68.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for memobot-1.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 da21a0763387337c3d84d1bd7497cf68db3e27a2dfa45b3d3b377e4a1da8a90b
MD5 a0164d6a7df63b14bab1afd7d65eeba3
BLAKE2b-256 65914ddc7abd3507396ba16e275c5a009b746722edfa3cd6cb898eff316dc1cc

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page