Skip to main content

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

Project description

Memo-Bot v1.3.16 ๐Ÿ“Œ

๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ ๊ธฐ๋ฐ˜์˜ ์™„๋ฒฝํžˆ ๋™๊ธฐํ™”๋˜๋Š” ํฌ๋กœ์Šค ํ”Œ๋žซํผ ํฌ์ŠคํŠธ์ž‡ ๋ฉ”๋ชจ์žฅ์ž…๋‹ˆ๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ(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.16 (2026-06-07)

  • ๋น„๋ฐ€๋ฒˆํ˜ธ ์ˆ˜์ • ์‹œ ๊ธฐ์กด ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ฒ€์ฆ ๋‹จ๊ณ„ ์ถ”๊ฐ€:
    • ์„ค์ • ๋ฉ”๋‰ด์—์„œ ์ž ๊ธˆ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ƒˆ๋กœ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ํ•ด์ œํ•˜๋ ค๊ณ  ํ•  ๋•Œ, ํƒ€์ธ์ด ํ•จ๋ถ€๋กœ ์ ‘๊ทผํ•ด ๋ณ€๊ฒฝํ•˜์ง€ ๋ชปํ•˜๋„๋ก ๊ธฐ์กด ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ ํ™•์ธ ๋Œ€ํ™”์ƒ์ž๋ฅผ ํ•„์ˆ˜์ ์œผ๋กœ ๊ฑฐ์น˜๋„๋ก ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ์ด ๊ธฐ๋Šฅ์€ ๋ฐ์Šคํฌํ†ฑ ์„ค์ • ์ฐฝ(JS prompt ๋‹ค์ด์–ผ๋กœ๊ทธ) ๋ฐ ๋ชจ๋ฐ”์ผ(Flutter Android overlay) ์–‘์ชฝ ๋ชจ๋‘์— ๊ณตํ†ต ์ ์šฉ๋˜์—ˆ์œผ๋ฉฐ, ๊ฒ€์ฆ์— ํ†ต๊ณผํ•ด์•ผ๋งŒ ์ƒˆ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ์˜ ์ €์žฅ์ด ์Šน์ธ๋ฉ๋‹ˆ๋‹ค.

v1.3.15 (2026-06-07)

  • ๋ฉ”๋ชจ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž ๊ธˆ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์—ฐ๋™):
    • ๋ฐ์Šคํฌํ†ฑ ๋ฐ ๋ชจ๋ฐ”์ผ(Android) ์–‘์ชฝ ์•ฑ ๋ชจ๋‘์— ๊ฐœ๋ณ„ ๋ฉ”๋ชจ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž ๊ธˆ ๊ธฐ๋Šฅ์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ์„ค์ • ๋ฉ”๋‰ด์—์„œ ์‚ฌ์šฉํ•  ์ž ๊ธˆ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๊ฐœ๋ณ„ ๊ธฐ๊ธฐ์— ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ(๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ๋™๊ธฐํ™”๋˜์ง€ ์•Š๊ณ  ๊ฐ ๊ธฐ๊ธฐ๋ณ„ ๋กœ์ปฌ ๋ณด์•ˆ ์„ค์ •์—๋งŒ ๋…๋ฆฝ ์ €์žฅ), ์—๋””ํ„ฐ ํˆด๋ฐ”์— ์ƒˆ๋กœ ๋ฐฐ์น˜๋œ ์ž๋ฌผ์‡  ํ† ๊ธ€ ๋ฒ„ํŠผ์„ ํ†ตํ•ด ํŠน์ • ๋ฉ”๋ชจ๋ฅผ ์ž ๊ทธ๊ฑฐ๋‚˜ ํ•ด์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋ณด์•ˆ์„ ์œ„ํ•ด ์ž ๊ธด ๋ฉ”๋ชจ๋Š” ๋Œ€์‹œ๋ณด๋“œ ๋ฆฌ์ŠคํŠธ์—์„œ ๋งˆ์Šคํ‚น(๐Ÿ”’ ์ž ๊ธด ๋ฉ”๋ชจ์ž…๋‹ˆ๋‹ค.) ์ฒ˜๋ฆฌ๋˜๊ณ , ์‹ค์ œ ๋ณธ๋ฌธ ์ฝ˜ํ…์ธ ์™€ ๋ฏธ๋””์–ด ๋ฐ์ดํ„ฐ(์ด๋ฏธ์ง€/์˜ค๋””์˜ค)๋Š” ๊ฒ€์ฆ ์™„๋ฃŒ ์ „๊นŒ์ง€ ๋ฐฑ์—”๋“œ์™€ ํด๋ผ์ด์–ธํŠธ ๋‹จ ๋ชจ๋‘์—์„œ ์™„์ „ํžˆ ์ฐจ๋‹จ๋˜์–ด ์œ ์ถœ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฉ”๋ชจ์˜ ์ž ๊ธˆ ์—ฌ๋ถ€ ์ƒํƒœ(is_locked)๋Š” ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ ๋™๊ธฐํ™”๋ฅผ ํ†ตํ•ด ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์ž๋™ ์—ฐ๋™ ๋ฐ ๊ณต์œ ๋ฉ๋‹ˆ๋‹ค.

v1.3.14 (2026-06-07)

  • ์„ค์ • ์ฐฝ ๋…๋ฆฝ ํŒ์—… ๋ถ„๋ฆฌ:
    • ๊ธฐ์กด ๋ฉ”๋ชจ ๋งค๋‹ˆ์ €(Dashboard) ๋‚ด๋ถ€ ๋ ˆ์ด์–ด ๋ชจ๋‹ฌ๋กœ ๋„์šฐ๋˜ ์„ค์ • ์ฐฝ์„ ๋…๋ฆฝ๋œ ๋ณ„๋„ ์™ธ๋ถ€ ํŒ์—… ์ฐฝ(ํฌ๊ธฐ 450x620 ๊ณ ์ •, ํƒ€์ดํ‹€๋ฐ”๋ฅผ ๊ฐ€์ง„ ์œˆ๋„์šฐ)์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์˜คํ”ˆํ•˜๋„๋ก ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ์ด๋ฅผ ํ†ตํ•ด ๋งค๋‹ˆ์ € ์ฐฝ์˜ ํฌ๊ธฐ ์ œํ•œ์œผ๋กœ ์ธํ•ด ์„ค์ • ๋ฉ”๋‰ด ํ•˜๋‹จ ๋ฐ ์šฐ์ธก ํ•ญ๋ชฉ๋“ค์ด ํ™”๋ฉด์—์„œ ์ž˜๋ฆฌ๋Š” ํ˜„์ƒ์„ ์™„๋ฒฝํžˆ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ๊ธฐ์กด ์„ค์ • API ๋ฐ ์ด๋ฒคํŠธ ๊ตฌ์กฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์ด์‹ ๋ฐ ํ™œ์šฉํ•˜์—ฌ ์„ค์ • ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ๋กœ์ปฌ ๋ฉ”๋ชจ, ๋งค๋‹ˆ์ €, ๊ฐœ๋ณ„ ๋ฉ”๋ชจ ์œˆ๋„์šฐ์— ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฆ‰์‹œ ๋™๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.

v1.3.13 (2026-06-07)

  • ์ž์„ ์ •๋ ฌ ๋“œ๋ž˜๊ทธ ๊ฐœ์„  ๋ฐ ๋ถˆํ•„์š”ํ•œ ๋กœ๊ทธ/๊ฒฝ๊ณ  ์ œ๊ฑฐ:
    • ์ ‘ํžŒ ๋ฉ”๋ชจ๊ฐ€ ์ž์„(Magnetic) ์ •๋ ฌ ์ƒํƒœ๋กœ ๋‹ฌ๋ผ๋ถ™์–ด ์žˆ์„ ๋•Œ ๋งˆ์šฐ์Šค ๋“œ๋ž˜๊ทธ๋ฅผ ํ†ตํ•ด ๋งค๋„๋Ÿฝ๊ฒŒ ๋–ผ์–ด๋‚ผ ์ˆ˜ ์—†๋˜ ํ˜„์ƒ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, ๋ˆ„์  ๋งˆ์šฐ์Šค ์›€์ง์ž„์„ ์ถ”์ ํ•˜๋Š” ๋…ผ๋ฆฌ์  ์ขŒํ‘œ๊ณ„(Logical Coordinates) ์‹œ์Šคํ…œ์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ž์„ ๊ณ ์ •์ ์œผ๋กœ๋ถ€ํ„ฐ ๋งˆ์šฐ์Šค๋ฅผ 15px ์ด์ƒ ์ด๋™ํ•˜๋ฉด ๋ถ€๋“œ๋Ÿฝ๊ณ  ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์Šค๋ƒ…์ด ํ’€๋ฆฌ๋ฉฐ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ ๋™๊ธฐํ™” API ์ดˆ๊ธฐํ™” ์‹œ ํ„ฐ๋ฏธ๋„์— ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ถœ๋ ฅ๋˜๋˜ file_cache is only supported with oauth2client<4.0.0 ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ cache_discovery=False ์„ค์ •์„ ํ†ตํ•ด ์–ต์ œํ•˜๊ณ  ์ดˆ๊ธฐํ™” ๋™์ž‘์„ ์ตœ์ ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

v1.3.12 (2026-06-07)

  • ์œ„ํ‚ค๋งํฌ ํฌ๋งท ์ˆ˜์ • ๋ฐ ์ž‘์—… ํ‘œ์‹œ์ค„ ๊ฐœ๋ณ„ ๋ฉ”๋ชจ ๋…ธ์ถœ ๋ฐฉ์ง€:
    • ์œ„ํ‚ค๋งํฌ ๋ณต์‚ฌ ์‹œ ๊ธฐ์กด ID ๋ฐ ์ œ๋ชฉ ์กฐํ•ฉ ๋ฐฉ์‹([[noteId|Title]])์—์„œ ๋Œ€์ค‘์ ์ด๊ณ  ๋ช…ํ™•ํ•œ [[NoteTitle]] ํ˜•ํƒœ๋กœ ๋ณต์‚ฌ๋˜๋„๋ก ์ˆ˜์ •ํ•œ ํ›„, ๋ฉ”๋ชจ ๋ณธ๋ฌธ ํŒŒ์‹ฑ ๋ฐ ํด๋ฆญ ๋„ค๋น„๊ฒŒ์ด์…˜ ์‹œ์—๋„ ๋Œ€๊ด„ํ˜ธ ๊ธฐํ˜ธ([[, ]])๋ฅผ ์ž๋™ ์ œ๊ฑฐํ•ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋งค์นญ๋˜๋„๋ก ๋ณด์™„ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • Windows ํ™˜๊ฒฝ์—์„œ ๊ฐœ๋ณ„ ํฌ์ŠคํŠธ์ž‡ ๋ฉ”๋ชจ ์ฐฝ๋“ค์ด ์ž‘์—… ํ‘œ์‹œ์ค„(Taskbar)์— ์šฐํ›„์ฃฝ์ˆœ ์ƒ์„ฑ๋˜๋Š” ํ˜„์ƒ์„ ์ฐจ๋‹จํ•˜๊ณ , ์˜ค์ง ๋ฉ”์ธ "๋ฉ”๋ชจ ๊ด€๋ฆฌ์ž(Memo-Bot Manager)" ๋Œ€์‹œ๋ณด๋“œ ์ฐฝ๋งŒ ์ž‘์—… ํ‘œ์‹œ์ค„์— ๋…ธ์ถœ๋˜๋„๋ก ์Šคํƒ€์ผ๋ง(WS_EX_TOOLWINDOW ๋ฐ ShowInTaskbar = False)์„ ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

v1.3.11 (2026-06-07)

  • ํ•ด์‹œํƒœ๊ทธ/์œ„ํ‚ค๋งํฌ ๊ฒ€์ƒ‰ ๋ฐ ์œ„ํ‚ค๋งํฌ ๋ณต์‚ฌ ๊ธฐ๋Šฅ ์ถ”๊ฐ€: ๋Œ€์‹œ๋ณด๋“œ ๋ฉ”์ธ ํ™”๋ฉด์—์„œ #ํƒœ๊ทธ ๊ฒ€์ƒ‰์–ด ๋˜๋Š” [[์œ„ํ‚ค๋งํฌ]] ๊ฒ€์ƒ‰์–ด ํŒจํ„ด์„ ์ธ์‹ํ•˜๋Š” ์ง€๋Šฅํ˜• ํ•„ํ„ฐ๋ง ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฐœ๋ณ„ ๋ฉ”๋ชจ ํ—ค๋”์— "์œ„ํ‚ค๋งํฌ ๋ณต์‚ฌ" ๋‹จ์ถ”๋ฅผ ์ƒˆ๋กœ ๋ฐฐ์น˜ํ•˜์—ฌ ํด๋ฆญ ์‹œ [[noteId|Title]] ํฌ๋งท์˜ ๋งˆํฌ๋‹ค์šด ๋งํฌ๊ฐ€ ์›ํ„ฐ์น˜๋กœ ํด๋ฆฝ๋ณด๋“œ์— ๋ณต์‚ฌ๋˜๊ณ , ์„ฑ๊ณต ์‹œ ์ฒดํฌ ์•„์ด์ฝ˜์œผ๋กœ 1์ดˆ๊ฐ„ ์‹œ๊ฐ์  ํ”ผ๋“œ๋ฐฑ(ํ”Œ๋ž˜์‹œ ์• ๋‹ˆ๋ฉ”์ด์…˜)์„ ์ฃผ๋„๋ก ์‚ฌ์šฉ์„ฑ์„ ๊ฐ•ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

v1.3.10 (2026-06-06)

  • ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰(noconsole) ๊ธฐ๋ณธํ™”: PyInstaller ๋นŒ๋“œ ์‹œ์™€ PyPI ํŒจํ‚ค์ง€ ๋ฐฐํฌ ์‹œ ์œˆ๋„์šฐ ํ™˜๊ฒฝ์—์„œ ํ„ฐ๋ฏธ๋„ ์ฐฝ ์—†์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์šฉ GUI ์•ฑ์œผ๋กœ ์ฆ‰์‹œ ์‹คํ–‰๋˜๋„๋ก ์„ค์ •์„ ์ตœ์ ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค (--noconsole ๋ฐ gui_scripts ์ ์šฉ).

v1.3.9 (2026-06-06)

  • ๋ฉ”๋ชจ ๊ด€๋ฆฌ์ž ์ดˆ๊ธฐ ๋กœ๋“œ ๋ฐ ๋ ˆ์ด์Šค ์ปจ๋””์…˜ ํ•ด๊ฒฐ: ๋งค๋‹ˆ์ € ์ฐฝ ์ฒซ ์‹คํ–‰ ์‹œ window.pywebview ๊ฐ์ฒด๊ฐ€ ์•„์ง ๋ธŒ๋ผ์šฐ์ €์— ์ƒ์„ฑ๋˜์ง€ ์•Š์•˜์„ ๋•Œ ์›น ๋ชจ๋“œ๋กœ ์„ฑ๊ธ‰ํ•˜๊ฒŒ ์ฐจ๋‹จ๋˜์–ด ๋กœ์ปฌ ๋ฉ”๋ชจ ๋ชฉ๋ก์ด ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, pywebviewready ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ๋“ฑ๋ก ๋ฐ ๋Œ€๊ธฐ ๋กœ์ง์„ ์ „๋ฉด ์ตœ์ ํ™”ํ•˜์—ฌ ์•ˆ์ •์ ์œผ๋กœ ๋กœ์ปฌ ๋ฉ”๋ชจ๋ฅผ ์ดˆ๊ธฐ ํ™”๋ฉด์— ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

v1.3.8 (2026-06-06)

  • ๋Œ€์‹œ๋ณด๋“œ ์ดˆ๊ธฐํ™” ์‹œ ๋กœ์ปฌ ๋ฉ”๋ชจ ์ž๋™ ๋กœ๋“œ ์ˆ˜์ •: ์•ฑ ์‹คํ–‰ ์‹œ pywebviewready ์ด๋ฒคํŠธ๊ฐ€ ๋ฆฌ์Šค๋„ˆ ๋“ฑ๋ก ์ „์— ์ด๋ฏธ ํ˜ธ์ถœ๋˜์–ด ๋Œ€์‹œ๋ณด๋“œ๊ฐ€ ์ฒ˜์Œ ์ผœ์กŒ์„ ๋•Œ ๋กœ์ปฌ ๋ฉ”๋ชจ ๋ชฉ๋ก์ด ์ž๋™์œผ๋กœ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋˜ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์›น๋ทฐ API ๋กœ๋“œ ์—ฌ๋ถ€๋ฅผ ์ฆ‰์‹œ ๊ฒ€์‚ฌํ•˜์—ฌ ๋ฉ”๋ชจ ๋กœ๋”ฉ์ด ๋ฐ”๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ์ž„ํฌํŠธ ์˜ค๋ฅ˜ ์ˆ˜์ • (NameError: time): ๋‹ซ๊ธฐ ์ง€์—ฐ ์ฒ˜๋ฆฌ(defer_hide) ํ•จ์ˆ˜ ๋‚ด์—์„œ time.sleep ํ˜ธ์ถœ ์‹œ time ๋ชจ๋“ˆ์ด ๊ธ€๋กœ๋ฒŒ ์ž„ํฌํŠธ๋˜์–ด ์žˆ์ง€ ์•Š์•„ ๋ฐœ์ƒํ•˜๋˜ NameError ๋ฒ„๊ทธ ๋ฐ ์ด๋กœ ์ธํ•ด ๋‹ซ๊ธฐ ๋™์ž‘์ด ์•„์˜ˆ ๋ถˆ๊ฐ€๋Šฅํ•ด์ง€๋˜ ์˜ค๋™์ž‘์„ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

v1.3.7 (2026-06-06)

  • ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ ํƒญ ๋ชฉ๋ก ๋ ˆ์ด์•„์›ƒ ๊ฐœ์„  ๋ฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ˆ˜์ •: ๊ตฌ๊ธ€ ํด๋ผ์šฐ๋“œ ๋ฉ”๋ชจ ๊ด€๋ฆฌ ํ…Œ์ด๋ธ”์—์„œ ์ฒซ ๋ฒˆ์งธ ์—ด(๋ฉ”๋ชจ ๋ฏธ๋ฆฌ๋ณด๊ธฐ)์˜ ๋„ˆ๋น„๊ฐ€ ๋‹ค๋ฅธ ์—ด์˜ ๊ณ ์ • ๋„ˆ๋น„๋กœ ์ธํ•ด ๊ทน๋„๋กœ ์ถ•์†Œ๋˜์–ด #...์ด๋‚˜ ๋ฉ”...์ฒ˜๋Ÿผ ํ•œ ๊ธ€์ž์™€ ๋ง์ค„์ž„ํ‘œ๋กœ๋งŒ ๋ณด์ด๋˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ด ๋น„์œจ์„ ๊ณ ์ •ํ•˜๋Š” ๋Œ€์‹  ์œ ์—ฐํ•˜๊ฒŒ ์„ค์ •ํ•˜๊ณ  ๋ฐ˜์‘ํ˜• ๋ ˆ์ด์•„์›ƒ์„ ๋„์ž…ํ•˜์˜€์œผ๋ฉฐ, ๋งˆํฌ๋‹ค์šด ํ—ค๋” ๊ธฐํ˜ธ(์˜ˆ: ## , # )๋ฅผ ์ œ์™ธํ•˜๊ณ  ์ถœ๋ ฅํ•˜๋„๋ก ํ…์ŠคํŠธ ์ „์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

v1.3.6 (2026-06-06)

  • ๋ฉ”๋ชจ ๊ด€๋ฆฌ์ž ์ฐฝ ๋‹ซ๊ธฐ ๋ฌดํ•œ ๋ฃจํ”„ ๋ฒ„๊ทธ ์ˆ˜์ •: Windows ํ™˜๊ฒฝ์—์„œ ๋ฉ”๋ชจ ๊ด€๋ฆฌ์ž ์ฐฝ์„ ๋‹ซ์•„ ํŠธ๋ ˆ์ด ์•„์ด์ฝ˜์œผ๋กœ ์ˆจ๊ธธ ๋•Œ, pywebview์˜ hide() ๋™์ž‘์ด ๋‚ด๋ถ€์ ์œผ๋กœ closing ์ด๋ฒคํŠธ๋ฅผ ์žฌ๋ฐœํ•˜์—ฌ ๋ฌดํ•œ ๋‹ซ๊ธฐ ๋ฃจํ”„(์œˆ๋„์šฐ๊ฐ€ ์—ด๋ฆฌ์ž๋งˆ์ž ๋ฐ”๋กœ ์‚ฌ๋ผ์ง€๋Š” ํ˜„์ƒ)๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ƒํƒœ ๋ฝ(is_hiding_manager)์„ ๋„์ž…ํ•˜์—ฌ ์˜ˆ์™ธ ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

v1.3.5 (2026-06-06)

  • ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ ๋ฉ”๋ชจ ์ฒซ ์ค„ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ์ง€์›: ๋กœ์ปฌ์— ๋‹ค์šด๋กœ๋“œ๋˜์ง€ ์•Š์€ ํด๋ผ์šฐ๋“œ ์ „์šฉ ๋ฉ”๋ชจ๋„ ๋Œ€์‹œ๋ณด๋“œ์˜ ํด๋ผ์šฐ๋“œ ํƒญ ๋ชฉ๋ก์—์„œ ๋ณธ๋ฌธ ์ฒซ ์ค„ ๋‚ด์šฉ์„ ๋ฏธ๋ฆฌ ์งง๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ๋™๊ธฐํ™” ์‹œ ๋ฉ”๋ชจ์˜ ์ฒซ ์ค„ ํ…์ŠคํŠธ๋ฅผ ๋“œ๋ผ์ด๋ธŒ ํŒŒ์ผ์˜ appProperties ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ํ•จ๊ป˜ ์‹ค์–ด ๋ณด๋‚ด๊ณ , ๋ชฉ๋ก ๋ Œ๋”๋ง ์‹œ ์ด๋ฅผ ํŒŒ์‹ฑํ•ด ์ถœ๋ ฅํ•˜๋„๋ก ์—ฐ๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

v1.3.4 (2026-06-06)

  • ๋‹จ์ถ•ํ‚ค ๋ฒ”์œ„(Scope) ์ตœ์ ํ™”: ์ƒˆ ๋ฉ”๋ชจ ์ถ”๊ฐ€(Ctrl+N) ๋ฐ ๋™๊ธฐํ™”(Ctrl+S) ๋‹จ์ถ•ํ‚ค๊ฐ€ ๋ฉ”๋ชจ ๊ด€๋ฆฌ์ž ๋Œ€์‹œ๋ณด๋“œ๊ฐ€ ์—ด๋ฆฌ๊ณ  ํฌ์ปค์Šค๋˜์—ˆ์„ ๋•Œ๋งŒ ์ž‘๋™ํ•˜๋„๋ก ๋ฒ”์œ„๋ฅผ ๊ฐ€๋‘๊ณ , ๊ฐœ๋ณ„ ๋ฉ”๋ชจ ์‚ญ์ œ(Ctrl+D), ํ•ญ์ƒ ์œ„ ํ† ๊ธ€(Ctrl+P), ์ ‘๊ธฐ ํ† ๊ธ€(Ctrl+L)์€ ๊ฐœ๋ณ„ ๋ฉ”๋ชจ ์ฐฝ์ด ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์„ ๋•Œ๋งŒ ๋ฐ˜์‘ํ•˜๋„๋ก ๊ฐœ์„ ํ•˜์—ฌ ๋‹จ์ถ•ํ‚ค ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ธ€๋กœ๋ฒŒ ๋‹จ์ถ•ํ‚ค ์ง€์› (Windows): ๊ด€๋ฆฌ์ž ์ฐฝ์ด ๋‹ซํ˜€ ์žˆ๊ฑฐ๋‚˜(ํŠธ๋ ˆ์ด ์•„์ด์ฝ˜ ์ƒํƒœ) ๋ฐฑ๊ทธ๋ผ์šด๋“œ์— ์žˆ์„ ๋•Œ๋„ ์–ธ์ œ๋“ ์ง€ Ctrl+O๋ฅผ ๋ˆ„๋ฅด๋ฉด ๋ฉ”๋ชจ ๊ด€๋ฆฌ์ž๊ฐ€ ์ตœ์ƒ๋‹จ์œผ๋กœ ๋ณต์› ๋ฐ ๊ฐ•์ œ ํฌ์ปค์‹ฑ๋˜๋„๋ก Windows API(RegisterHotKey)๋ฅผ ์—ฐ๋™ํ•œ ๊ธ€๋กœ๋ฒŒ ๋‹จ์ถ•ํ‚ค ์Šค๋ ˆ๋“œ๋ฅผ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์„ค์ •์—์„œ ๋‹จ์ถ•ํ‚ค๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด ์‹œ์Šคํ…œ ๋“ฑ๋ก๋„ ์‹ค์‹œ๊ฐ„ ํ•ด์ œ๋ฉ๋‹ˆ๋‹ค.

v1.3.3 (2026-06-06)

  • ๋ฒ„ํŠผ ๋ฏธ๋‹ˆ๋ฉ€ํ™” ๋ฐ ๋„์›€๋ง ๊ฐ€์ด๋“œ ์ถ”๊ฐ€: ๋Œ€์‹œ๋ณด๋“œ ์ œ์–ด ๋ฒ„ํŠผ์„ ์Šฌ๋ฆผํ•˜๊ณ  ๋ฏธ๋‹ˆ๋ฉ€ํ•˜๊ฒŒ ๋””์ž์ธ์„ ์กฐ์ •ํ•˜๊ณ , ํ•ด์‹œํƒœ๊ทธ, ๋ฉ”๋ชจ๋งํฌ(WikiLinks), AI(Gemini) ์„ค์ • ๋ฐ ์‚ฌ์šฉ๋ฒ•์„ ์ƒ์„ธ ์•ˆ๋‚ดํ•˜๋Š” ๋„์›€๋ง ๊ฐ€์ด๋“œ ๋ชจ๋‹ฌ์„ ํƒ‘์žฌํ–ˆ์Šต๋‹ˆ๋‹ค.

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.16.tar.gz (88.4 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.16-py3-none-any.whl (82.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: memobot-1.3.16.tar.gz
  • Upload date:
  • Size: 88.4 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.16.tar.gz
Algorithm Hash digest
SHA256 93c6832993dfa9beadc46280958b7c64aa325abffa3251b22c148eef1655bb00
MD5 94da7bf0bd22f0997794ed439db1b844
BLAKE2b-256 9c1422dcfa53911413a2dba478b7b2810ef77fdcd71dc1c8322a24ecc6fe1202

See more details on using hashes here.

File details

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

File metadata

  • Download URL: memobot-1.3.16-py3-none-any.whl
  • Upload date:
  • Size: 82.4 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.16-py3-none-any.whl
Algorithm Hash digest
SHA256 3ff87ac0f34dd3c1c1309816cbb57fe7ad1911fd518bee229d07dd79899ed046
MD5 5aaf6d7deb08d48c3b56453321481aab
BLAKE2b-256 2bb1ea0670263d3ca6dee98c60e2c99833a371f08b7ecae8cac16509ef94ebf5

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