Skip to main content

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

Project description

Memo-Bot v1.0 ๐Ÿ“Œ

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

๐Ÿ“ฑ ๋ชจ๋ฐ”์ผ ์•ฑ ์‹คํ–‰ (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 ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋” ๋Šฆ๊ฒŒ ํŽธ์ง‘๋œ ์ตœ์ข… ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฎ์–ด์”๋‹ˆ๋‹ค.

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.0.0.tar.gz (58.3 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.0.0-py3-none-any.whl (55.8 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for memobot-1.0.0.tar.gz
Algorithm Hash digest
SHA256 0c72a40400c187c2e23f9e3ef4f3a53aa17a3cae3c80747682c5a08959b79c63
MD5 a6582ac39e56f07bcb47c9365ec29d8a
BLAKE2b-256 2044618d54bc6cec1eb97651e9db30a61ef2cebac3976b12a54647060a82ff7e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: memobot-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 55.8 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.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3b6f4d275a8bf6e79c59bb0f8e81c13f543d3b9e9b51b3f5f3ff1db987125fb2
MD5 0843d91488c2ad49767b85338d7f15b3
BLAKE2b-256 9840e122703ae4f8a12499edbb3b99ae5795eb7be02873914cd3a1accc56c10d

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