Memo-Bot v1.5.39 🤖📌
구글 드라이브 기반의 완벽히 동기화되는 크로스 플랫폼 포스트잇 메모장입니다. 안드로이드(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메타데이터를 캐싱하여 트래픽 소모가 매우 적고 반응이 빠른 동기화를 지원합니다.
🌟 주요 핵심 기능 (Features)
- 🔄 구글 드라이브 양방향 동기화: 모바일과 데스크톱 간 작성한 포스트잇 메모가 구글 드라이브 앱 전용 숨김 저장소를 통해 실시간 연동 및 동기화됩니다.
- 📌 메모 접기 (Fold) 및 최상단 고정 (Pin): 메모 헤더를 더블클릭하거나 접기 단추를 누르면 제목만 보이도록 접을 수 있으며, 압정 아이콘으로 Z-Order 최상단 고정을 간편하게 제어합니다.
- 🔘 메모 버로우 (Burrow) 기능 (v1.5.20+):
- 작업 화면을 방해하는 메모 창을 일시적으로 완전히 숨기고, 아주 작은 투명 도트(dot) 아이콘으로 전환합니다.
- 다양한 스타일 튜닝: 환경설정에서 도트의 디자인(● 원, ◆ 마름모, ■ 정사각형)과 크기(4단계 조절)를 취향껏 선택할 수 있습니다.
- 마우스 호버 툴팁 피드백: 버로우 도트 위에 마우스를 얹으면 300ms 지연 후 메모의 제목이 툴팁으로 나타나 내용을 빠르게 확인 가능하며, 마우스를 치우면 즉시 닫힙니다.
- 멀티 모니터 좌표 기억: 도트를 원하는 위치로 드래그해 두면 해당 스크린 좌표를 실시간 추적 및 기록하여, 앱 종료 후 다시 켜도 멀티 모니터 상의 드래그했던 정확한 그 지점에 도트가 복원됩니다.
- 모서리 기준 복원: 도트를 마우스 왼쪽 클릭하여 복원(Unburrow)하면, 도트가 놓여 있던 자리가 메모 창의 왼쪽 위 모서리가 되도록 부드럽게 창이 복구됩니다.
- 🖥️ 스마트 멀티 모니터 화면 보호 및 중앙 자동 복구 (v1.5.39+):
- 모니터 화면 외 영역(Off-Screen) 열림 차단 및 화면 중앙 자동 배치: 모니터 구성 변경이나 해상도/DPI 배율 차이 등으로 인해 현재 연결된 모니터 작업 영역 밖에 위치한 메모가 있다면, 앱 실행 시 또는 메모 관리자에서 열 때 자동으로 주 모니터 정중앙으로 이동 및 저장합니다.
- 스마트 테두리 스냅 & 멀티 모니터 이동 제어: 메모를 마우스로 천천히 드래그하면 현재 모니터의 상/하/좌/우 작업 영역 테두리에서 멈춰 실수로 화면 밖으로 이탈하는 것을 방지하며, 옆 모니터 방향으로 빠르게 당겨 이동하면 모니터 경계를 넘어 다른 모니터로 자유롭게 이동할 수 있습니다.
- 🕸️ 지식 관계 그래프 (Knowledge Graph) 시각화 (v1.5.34+):
- 메모 간의 태그 및 상호 연관성을 vis-network 물리 엔진 기반의 네트워크 그래프로 한눈에 파악합니다.
- 클러스터링 응집도 개선: 메모들이 지나치게 분산되지 않고 자연스러운 군집을 이루어 관계를 명확히 조망할 수 있습니다.
- 원클릭 포커스 줌인 & 우클릭 줌아웃 리셋: 메모 노드를 좌클릭하면 해당 메모를 중심으로 부드럽게 화면이 확대(Zoom-in)되고, 빈 공간을 마우스 우클릭하면 즉시 전체 그래프가 한눈에 보이도록 축소(Zoom-out) 복원됩니다.
- 노드 크기 규격화 & 균일 팝업 풍선: 모든 메모 노드의 크기를 시각적으로 편안하게 균일화하였으며, 마우스 호버 시 메모 제목과 핵심 본문 미리보기를 담은 일관된 크기의 말풍선 팝업을 제공합니다.
- 🔌 고도화된 플러그인 확장 생태계 (v1.5.34+):
- 사용자 맞춤형 파이썬 스크립트 플러그인을 최대 5개까지 등록하여 메모 작업 생산성을 극대화합니다.
- 기본 내장 5대 필수 플러그인:
- 할 일 목록 서식 변환기 (
todo): 텍스트 목록을 원클릭으로 마크다운 체크리스트(- [ ])로 상호 변환. - 인라인 계산기 & 단위 변환기 (
calc): 사칙연산, 수식 자동 계산 및 환율/단위(USD, KRW, kg, lb 등) 즉시 변환. - 웹 링크 북마크 카드 (
bookmark): URL 감지 시 웹페이지 제목과 메타데이터를 파싱하여 깔끔한 북마크 카드로 변환. - 텍스트 정리기 (
clean): 불필요한 공백, 다중 빈 줄, 들여쓰기 오차를 일괄 정돈. - 일일 브리핑 & 날씨 (
weather): 현재 날짜/시간과 Open-Meteo 기반 실시간 날씨 브리핑을 메모에 자동 삽입.
- 할 일 목록 서식 변환기 (
- 글로벌 다국어 완벽 지원: 한국어(ko), 영어(en), 일본어(ja), 중국어(zh) 4개 국어 번역 대응.
- ⚡ 초경량 C/C++ 네이티브 컴파일 릴리즈 (Nuitka):
- 기존 PyInstaller 패키징 외에도 Nuitka를 통한 C/C++ 네이티브 바이너리(
Memo-Bot_Native_v*.exe)를 공식 배포하여 압도적인 실행 속도와 낮은 메모리 점유율을 제공합니다.
- 기존 PyInstaller 패키징 외에도 Nuitka를 통한 C/C++ 네이티브 바이너리(
📂 데이터 저장 경로 및 파일 포맷
메모를 작성하고 저장하면 각 메모는 로컬 컴퓨터에 개별 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 인코딩)
}
🔑 구글 드라이브 API 설정 (OAuth 2.0)
양쪽 플랫폼에서 동기화 기능을 활성화하기 위해 Google Cloud Console에서 OAuth 2.0 자격 증명을 설정해야 합니다.
-
Google Cloud Console 접속:
- Google Cloud Console에 구글 계정으로 로그인합니다.
- 새 프로젝트를 생성합니다 (예:
Memo-Bot).
-
Google Drive API 활성화:
- API 및 서비스 > 라이브러리로 이동합니다.
Google Drive API를 검색하고 사용(Enable) 버튼을 클릭합니다.
-
OAuth 동의 화면 설정:
- API 및 서비스 > OAuth 동의 화면으로 이동합니다.
- User Type을 **외부(External)**로 선택하고 생성을 누릅니다.
- 필수 정보(앱 이름, 이메일 등)를 입력합니다.
- 범위(Scopes) 설정 단계에서
.../auth/drive.appdata범위를 추가합니다 (구글 드라이브의 앱 전용 숨겨진 폴더 읽기/쓰기 권한). - 테스트 사용자 (Test Users) 등록 단계에서 동기화 테스트에 사용할 본인의 구글 이메일을 반드시 추가합니다.
- 사용자 인증 정보(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의 동일 프로젝트에 등록해야 합니다.
- OAuth 클라이언트 ID 추가 생성:
- Google Cloud Console > 사용자 인증 정보 > OAuth 클라이언트 ID 생성.
- 유형을 Android로 선택합니다.
- 패키지 이름 입력 (예:
com.example.memobot). - 개발용 SHA-1 지문 인증서를 입력합니다 (JDK의
keytool을 통해 조회 가능).
- 서비스 파일 다운로드:
- 필요에 따라 Firebase와 결합하여 사용할 경우
google-services.json을mobile/android/app/아래에 배치할 수 있으나, 본 구현에서는google_sign_in패키지가 클라이언트 ID를 통해 직접 동작하므로 최소한의 설정만으로 작동 가능합니다.
- 필요에 따라 Firebase와 결합하여 사용할 경우
3. 앱 실행
flutter run
💡 플랫폼별 참고 사항 (macOS / Android / Linux)
🍎 macOS (맥) 환경에서의 유의점
- 무설정 즉시 실행: macOS에는 렌더링 백엔드인 Cocoa
WKWebView가 OS 레벨에서 완벽하게 내장되어 있어, 추가적인 패키지 설치 없이pip install memobot후에 즉시 실행 가능합니다. - 윈도우 전용 스타일 차이: 작업 표시줄(Taskbar)에서 창 아이콘 숨기기, OS 네이티브 그림자 제거, 윈도우 스타일 강제 변경 등 Win32 API 및 DWM(Desktop Window Manager)을 직접 제어하는 일부 네이티브 최적화 기능은 윈도우에서만 작동하며, macOS에서는
pywebview표준 창 형태로 렌더링됩니다.
🤖 Android (안드로이드) 환경에서의 유의점
- 구글 로그인 경고창 우회 (최초 1회): 구글 클라우드 콘솔의 OAuth 동의 화면이 [앱 게시 (In Production / 배포)] 상태이지만 아직 구글의 공식 브랜드 검수(Verification)를 완료하지 않았기 때문에, 최초 로그인 시 "이 앱은 Google의 확인을 받지 않았습니다 (This app isn't verified)" 경고창이 발생합니다. 이때 당황하지 마시고 [고급 (Advanced)] -> **[Memo-Bot(으)로 이동 (안전하지 않음)]**을 클릭하여 로그인을 완료해 주시면 됩니다. (배포 상태이므로 특정 테스트 사용자로 등록하지 않은 계정에서도 연동 및 사용이 가능합니다.)
- 동기화 주기: 모바일 앱은 과도한 배터리 소모를 방지하기 위해 백그라운드 푸시 동기화를 지원하지 않습니다. 데스크톱에서 수정한 내용을 불러오고 싶을 때, 앱 메인 화면 상단에서 아래로 당겨서 새로고침(Pull to Refresh)하거나 동기화 버튼을 눌러 동적 동기화를 트리거할 수 있습니다.
🐧 Linux (리눅스) 환경에서의 유의점
- 웹 렌더러 패키지 설치 필수: 리눅스 데스크톱 환경에서는 웹 창을 렌더링하기 위해 GTK WebKit2 라이브러리가 필요합니다.
pip설치 전 아래 OS 패키지를 먼저 설치해 주세요:# Ubuntu / Debian 계열 sudo apt install python3-gi python3-gi-cairo gir1.2-gtk-3.0 gir1.2-webkit2-4.1
🔄 동기화 및 충돌 방지 세부 설계
- Tombstoning (소프트 삭제): 사용자가 앱 내에서 메모를 삭제하면 파일이 즉시 영구 삭제되지 않고 내부 필드가
is_deleted: true로 갱신됩니다. 이는 다른 디바이스가 동기화 시점에 해당 메모를 로컬에서도 똑같이 지워주도록 유도하며, 완벽한 삭제 전파를 제공합니다. - Last-Write-Wins (최종 쓰기 우선): 오프라인 수정을 포함하여 서로 다른 기기에서 같은 포스트잇을 수정한 경우, JSON 내부의
updated_at타임스탬프를 기준으로 더 늦게 편집된 최종 데이터를 기준으로 덮어씁니다.
🚀 업데이트 내역 (Changelog)
v1.5.39 (2026-11-07)
- 관계 그래프(
vis-network) 줌인 반복 및 마우스 이동 시 확대/축소 진동 버그 완벽 해결:vis-network.min.js엔진 내부의View.prototype.animateView및_transitionRedraw애니메이션 리스너 누수(easingTime === 0일 때 이전initRedraw리스너가 해제되지 않던 결함)를 직접 패치하여, 노드 클릭 줌인 후 마우스 이동 시 화면이 커졌다 작아지는 현상을 근본적으로 해결- 데이터 변경 여부 캐시 해시 검사(
lastRenderedNotesHash) 및 초기 안정화 1회성 가드(isPhysicsStopped)를 도입하여 중복fit()호출 및 뷰포트 리셋 차단
- 모니터 화면 외 영역(Off-Screen) 열림 차단 및 스마트 멀티 모니터 제어:
- 앱 실행 시 및 메모 관리자에서 메모를 열 때(
show_note), 현재 설치된 모니터 작업 영역(rcWork)을 벗어난 메모나 손상된 크기(width/height: null)를 가진 메모를 자동으로 주 모니터 화면 정중앙으로 이동시켜 복구 및 저장 - 버로우(
is_burrowed) 또는 도킹(docked_state) 상태의 메모를 메모 관리자에서 열 때 화면 밖(-20000, -20000)에 머물지 않고 즉시 상태를 해제하여 화면 중앙에 팝업되도록 개선 - 스마트 멀티 모니터 드래그 동작: 메모를 천천히 움직이면 현재 모니터 테두리에 스냅되어 화면 밖 이탈을 막아주고, 빠르게 이동시키면 모니터 간 경계를 넘어 옆 모니터로 이동 가능하도록 구현
- 앱 실행 시 및 메모 관리자에서 메모를 열 때(
v1.5.37 (2026-11-07)
- 관계 그래프 인터랙션 및 뷰포트 조작 완벽 정상화 (Hotfix):
- 캔버스 빈 곳 우클릭 시 이벤트 리스너 중복 누적으로 인한 사선 슬라이드 반복 및 뷰포트 락(먹통) 버그 완전 해결
- 캔버스 패닝(화면 잡고 끌기) 및 노드 자유 드래그 기능 정상 복원 (
dragNodes: true,dragView: true) - 마우스 휠 스크롤 줌인/줌아웃 가속 및 먹통 현상 해결 (
zoomSpeed: 0.7) - 축소 상태에서 노드 클릭 시 부드러운 줌인(
1.3), 확대 상태에서 노드 클릭 시 포스트잇 메모 창 팝업 인터랙션 최적화
v1.5.36 (2026-11-07)
- 관계 그래프 마우스 인터랙션 및 휠 줌 안정화 버그 픽스:
- 드래그 및 휠 스크롤 시 불필요하게 물리 엔진(physics)이 다시 켜져 노드가 튀거나 요동치던 현상 근본 차단
- 마우스 우클릭 시 좌클릭 이벤트가 동시 발동하여 줌인되던 이벤트 충돌 수정 및 우클릭 전체 줌아웃(Fit) 리셋 완벽 안정화
- 드래그/패닝 직후 마우스 업 시 클릭 이벤트가 오발동하던 문제 방지 (드래그 타임스탬프 필터링)
- 노드 클릭 시 고정 배율(
1.35) 줌인 및 확대 상태 재클릭 시 포스트잇 메모 창 팝업 인터랙션 최적화 - 휠 스크롤 속도 최적화(
zoomSpeed: 0.6)로 부드럽고 안정적인 줌 조작 보장
v1.5.35 (2026-11-07)
- 관계 그래프 인터랙션 고도화 (Knowledge Graph Interaction):
- 노드 클릭 시 무한 확대 방지 및 기본 확대 배율(
1.35) 고정 줌인 - 이미 확대된 상태에서 노드 클릭 시 더 이상 커지지 않고 해당 포스트잇 메모 창 즉시 팝업(열림)
- 노드 미리보기 팝업 풍선의 기본 높이를 항상 4줄 규격으로 단정하게 고정 확보 및 본문 줄바꿈 지원
- 팝업 풍선 너비를 250px로 최적화하여 가독성 개선
- 노드 클릭 시 무한 확대 방지 및 기본 확대 배율(
v1.5.34 (2026-11-07)
- 관계 그래프(Knowledge Graph) 시각화 개선:
- 메모 노드 간 거리 최적화 및 자연스러운 클러스터링 모음 배치
- 메모 노드 좌클릭 시 해당 메모 중심 확대(줌인), 빈 공간 우클릭 시 전체 보기 리셋(줌아웃)
- 메모 노드 크기 규격 통일 및 마우스 호버 시 메모 제목/미리보기를 제공하는 균일한 팝업 풍선 툴팁 지원
- 기본 플러그인 5종 탑재 및 인터페이스 확장:
- 할 일 목록 서식 변환기 (
todo) - 인라인 계산기 & 단위 변환기 (
calc) - 웹 링크 북마크 카드 (
bookmark) - 텍스트 정리기 (
clean) - 일일 브리핑 & 날씨 (
weather)
- 할 일 목록 서식 변환기 (
- 다국어(한국어, 영어, 일본어, 중국어) 지원 및 Nuitka 네이티브 컴파일 배포 지원
v1.5.33 (2026-11-06)
- 실시간 메모 전송 (Real-time Memo Transfer): 대상 IP/도메인 직접 입력 모달 및 단축키(
Ctrl+Shift+T) 지원 - 주소록(Address Book) 기능: 자주 전송하는 대상자 별칭과 IP/포트 등록 및 원클릭 전송
- 외부 공유기 및 네트워크 가이드: 포트포워딩, DDNS, Windows Defender 인바운드 방화벽 상세 가이드 수록 (
send_memo_doc.md)
v1.5.32 (2026-09-13)
- 메모 제목 설정 및 팝업 입력창 붙여넣기(Ctrl+V) / 우클릭 컨텍스트 메뉴 간섭 수정:
- 메모 내 글로벌 이미지 붙여넣기(
handleImagePaste) 핸들러가 모달 내 일반 텍스트 입력창(input,textarea등)의 기본 붙여넣기 동작을 가로채서 본문으로 강제 삽입하던 문제를 수정했습니다. - 이제 메모 제목 설정 모달, 그룹 이름 입력, 잠금 해제 입력, 플러그인 검색창 등 모든 입력 필드에서 텍스트 클립보드 붙여넣기(Ctrl+V)가 원활하게 동작합니다.
- 모달 대화상자 내부 및 입력창에서 우클릭 시 메모 관리 컨텍스트 메뉴가 부적절하게 표시되던 현상을 방지하도록 예외 처리를 추가했습니다.
- 메모 제목 설정 창 오픈 시 기존 제목 텍스트가 자동 선택(
select)되도록 개선했습니다.
- 메모 내 글로벌 이미지 붙여넣기(
v1.5.31 (2026-09-09)
- 그룹 관리 대시보드 UI/UX 대폭 강화 및 데드락 완전 해결:
- 그룹 제목 클릭 시 접기/펼치기 (Accordion/Collapsible) 기능 구현: 메모 그룹 제목 헤더를 클릭하여 그룹 카드를 콤팩트하게 접거나 펼칠 수 있으며, 세션 간 접힘 상태가 유지됩니다.
- 팝업 창 닫기 시 무한 대기 (Deadlock) 해결: 팝업 창 Close 이벤트 발생 시 메인 GUI Thread의 블로킹을 해제하고 비동기 알림(
notify_manager_js_async)을 통해 매니저 대시보드를 갱신하도록 처리하여 스피너 무한 대기 현상을 완벽히 차단했습니다. - '표시 중 / 숨김' 상태 실시간 동기화: 그룹 팝업 창의 열림/닫힘 및 가시 상태 변경이 매니저 UI 버튼 상태와 실시간으로 연동되도록 개선했습니다.
v1.5.30 (2026-07-11)
- 버로우 도트 툴팁(제목) 스마트 배치 및 화면 잘림 방지 (Clamping) 구현:
- 도트가 화면 아래쪽(모니터 하단 절반 영역)에 있을 경우, 툴팁이 도트 위(상단)로 스마트하게 정렬하여 작업 표시줄이나 화면 아래에 가려지지 않도록 개선했습니다.
- 도트가 화면 위쪽 절반 영역에 있을 때 툴팁이 아래로 내려오는 기존 동작은 정확히 유지됩니다.
- 도트가 화면 왼쪽이나 오른쪽 극단 모서리에 붙어 있을 때 툴팁 일부가 화면 밖으로 잘려서 렌더링되던 현상을 방지하기 위해, 모니터 가로 영역(좌우 마진 6px) 기준으로 자동 clamp 하도록 보정했습니다. (멀티 모니터 완벽 지원)
v1.5.28 (2026-07-11)
- Tcl/Tk 다중 스레드 기동 배제 및 단일 Tk 스레드 아키텍처(Toplevel) 도입으로 Tcl_AsyncDelete 원천 해결:
- 메모를 버로우할 때마다 개별 데몬 스레드에서
tk.Tk()를 동적으로 기동 및 소멸시키던 구조를 완전 폐기하고, 프로세스 내에 오직 단 하나의 글로벌 Tk 루트 스레드만 상시 유지하는 구조로 리팩토링했습니다. - 개별 버로우 도트들은 단일 Tk 루트에 귀속되는
tk.Toplevel윈도우로 생성되며, 윈도우 생성/소멸 등의 모든 UI 작업이 메인 Tk thread에 안전하게 대리 처리(Marshalling)됩니다. - 이로써 다중 스레드에서 Tcl 인터프리터가 생성 및 파괴를 교차 경합하며 발생시키던
Tcl_AsyncDeleteWrong Thread 크래시 문제를 근본적으로 100% 원천 해결했습니다.
- 메모를 버로우할 때마다 개별 데몬 스레드에서
v1.5.27 (2026-07-11)
- 가비지 컬렉터(GC)에 의한 Tcl/Tk 비동기 자원 파괴 크래시 영구 해결:
- 메모를 언버로우한 직후 pywebview 창을 드래그해서 움직이는 과정에서 가비지 컬렉션(GC)이 트리거되어
Tcl_AsyncDelete크래시를 유발하는 문제를 완벽히 차단했습니다. - Tkinter 초기화 시
NoDefaultRoot()를 선언해 전역 루트 등록을 우회하고, 파괴 완료 시tk._default_root = None처리를 통해 Tcl 전역 찌꺼기 레퍼런스를 명시적 해제했습니다. BurrowDotWindow클래스에 오버라이드된 소멸자(__del__)를 선언하여 가비지 컬렉터 스레드가 백그라운드에서 임의로 Tcl 인터프리터를 건드려 폭발하는 문제를 완전히 종결했습니다.
- 메모를 언버로우한 직후 pywebview 창을 드래그해서 움직이는 과정에서 가비지 컬렉션(GC)이 트리거되어
v1.5.26 (2026-07-11)
- 버로우 연속 생성-소멸 다중 스레드 경쟁 크래시 (Tcl_AsyncDelete) 영구 해결:
- 이전 도트 창이 파괴(
root.destroy())되는 시점과 새로운 도트 창이 활성화되어 생성되는 시점 사이에 비동기 스레드 간섭이 일어나던 Tcl/Tk 멀티스레드 자원 경쟁을 완벽히 격리했습니다. - Tkinter 종료 이벤트를 통제하는
destroyed_event스레드 이벤트를 도입하여, 이전 윈도우 인스턴스가 완전히 100% 해제되어 소멸 스레드가 끝난 후에만 pywebview 복구 및 다음 버로우 기동 프로세스가 순차 진행되도록 엄격히 통제했습니다. - 이로써 아주 빠르게 언버로우와 버로우를 연속 반복할 때 발생하던 임의의 프로그램 다운 현상을 근본적으로 원천 차단했습니다.
- 이전 도트 창이 파괴(
v1.5.25 (2026-07-11)
- Tkinter 버로우 창 스레드 충돌 및 드래그 릴리즈 크래시 최종 해결:
- 마우스 드래그가 없는 단순 클릭 릴리즈(
release콜백) 시에도root.destroy()를 직접 기동하여 발생하던 Tcl/Tk 스레드 경합 문제를 완전히 차단했습니다. - 마우스 릴리즈 콜백 내부에서도 직접 파괴하지 않고 상태 플래그(
_close_requested)만 설정하도록 변경하여, 소멸 처리가 항상 단일 Tkinter 메인 루프 스택 하단에서 실행되도록 일원화했습니다. - 이로써 이동, 클릭, 복원, 연속 버로우 동작 시 발생하던 모든 비정상 다운 현상을 완벽히 종결했습니다.
- 마우스 드래그가 없는 단순 클릭 릴리즈(
v1.5.24 (2026-07-11)
- Tkinter 버로우 창 스레드 충돌 핫픽스 (Tcl_AsyncDelete 해결):
- 데스크톱 사용 도중 특정 상황에서
Tcl_AsyncDelete: async handler deleted by the wrong thread에러가 발생하며 비정상적으로 다운되는 현상을 해결했습니다. - Tkinter 메인 윈도우 스레드가 아닌 외부 스레드(pywebview API)에서
root.destroy()나root.after()를 직접 호출하지 않도록,_close_requested상태 플래그 기반의 폴링(Polling) 루프를 구축해 스레드 안전하게 파괴하도록 리팩토링했습니다.
- 데스크톱 사용 도중 특정 상황에서
v1.5.23 (2026-07-10)
- 로컬 패키지 버전 충돌 방지 핫픽스:
- 사용자 PC의 글로벌 파이썬
site-packages에 구버전memobot패키지가 이미 전역 설치되어 있는 경우, 대시보드의 버전 뱃지가 로컬 소스코드가 아닌 구버전(1.5.17)으로 고정 노출되는 Shadowing 현상을 수정했습니다. - 백엔드 버전 반환 API가 로컬의
__init__.py파일을 먼저 탐색 및 직접 파싱하도록 참조 순서를 보완했습니다.
- 사용자 PC의 글로벌 파이썬
v1.5.21 (2026-07-10)
- 외부 패키지(pywin32) 종속성 제거 및 런타임 에러 핫픽스:
- 패키징(Memo-Bot.exe) 빌드 실행 시
ModuleNotFoundError: No module named 'win32event'가 발생하는 문제를 해결했습니다. - 중복 실행 감지용 Win32 Named Mutex 로직을 외부 모듈
win32event/win32api대신 파이썬 표준 라이브러리인ctypes기반 호출로 대체 구현하여 배포 안정성을 확보하고 불필요한 의존성을 제거했습니다.
- 패키징(Memo-Bot.exe) 빌드 실행 시
v1.5.20 (2026-07-10)
- 독립 Python tkinter 기반 버로우(Burrow) 기능 도입:
- 메모를 화면에서 아주 작은 크기로 축소하는 버로우 기능 개선. pywebview 윈도우 한계를 극복하고 독립적인 초경량 투명 tkinter 닷(dot) 윈도우를 백엔드 스레드에서 기동합니다.
- 버로우 닷의 디자인(모양: ●원, ◆마름모, ■정사각형)과 크기(4단계 조절)를 환경설정에서 자유롭게 선택 가능합니다.
- 마우스를 도트 위에 얹으면 메모 제목이 툴팁으로 즉시 나타나고, 마우스 이탈 시 즉시 자연스럽게 툴팁이 닫힙니다.
- 버로우 상태에서 도트를 드래그하여 임의의 위치 및 멀티 모니터로 이동하면 해당 최종 좌표를 실시간으로 저장하여, 앱 종료 후 다시 켰을 때도 해당 모니터의 정확한 위치에 그대로 복원됩니다.
- 앱 시작 시 버로우된 메모는 pywebview 창을 화면 밖 격리 구역(
-20000, -20000)에 숨김 생성하여 브라우저 강제 노출이나 윈도우 겹침 등의 오작동을 원천 차단했습니다.
v1.5.19 (2026-07-09)
- 접힌 메모 가로/세로 3단계 크기 조절 기능 추가:
- 메모 매니저(대시보드) 창의 상단 컨트롤에 세로 높이 조절(
card-height-btn) 및 가로 폭 조절(card-width-btn) 버튼을 추가하여, 총 9가지 조합의 크기 세팅을 개별 설정할 수 있습니다. - 가로 폭은 220px / 340px / 460px로, 세로 높이는 38px / 68px / 105px로 토글 순환되며, 설정은 브라우저
localStorage에 자동 보관됩니다. - 2단계(Medium) 및 3단계(Tall) 높이 모드에서는 메모 수정일자와 본문 요약 프리뷰(2~4줄) 및 등록된 해시태그 배지들이 동적으로 자동 노출됩니다.
- 메모 매니저(대시보드) 창의 상단 컨트롤에 세로 높이 조절(
- 그룹 메모 삭제 시 대시보드 및 그룹 창 실시간 연동:
- 그룹에 소속된 메모를 삭제할 경우, 해당 메모 스티커가 닫히는 동시에 대시보드와 그룹 폴더 창에서도 즉시 실시간 삭제 반영됩니다.
- 그룹 내에 남은 메모가 존재하지 않으면, 빈 그룹 창이 공중에 남는 대신 해당 그룹 창이 자동으로 즉시 종료됩니다.
- 모바일/데스크톱 릴리즈 버전 통합 동기화 (1.5.19+31):
- 데스크톱 패키지 버전(
1.5.19)과 모바일 플러터 앱 버전(1.5.19+31)을 동기화했습니다.
- 데스크톱 패키지 버전(
v1.5.18 (2026-07-09)
- 그룹 기능 고도화:
- 그룹 폴더 창 내에서 즉시 새로운 메모를 생성하여 소속시킬 수 있는 [+] 버튼을 헤더에 추가했습니다.
- 그룹 내부 메모 리스트(패널 및 팬아웃 프리뷰)에서 제목이 지정된 메모의 경우, 굵은 글씨의 제목과 본문 요약이 병렬 표시되도록 시각적으로 개선했습니다.
- 이미 그룹에 소속된 메모를 해당 그룹으로 다시 드래그했을 때 중복 추가를 방지하고 경고 창과 에러음을 띄우며, 해당 메모를 최상단 핀 고정(Pin) 처리합니다.
- 드래그 동작이 종료될 때 윈도우 항상 위 속성이 꼬이지 않도록 **Z-Order 복원 기능(Win32 API)**을 적용했습니다.
- 메모 UI 및 동작 개선:
- 메모 매니저(대시보드)에서 접힌 상태의 메모는 내용 대신 굵은 제목만 깔끔하게 표시되도록 개선했습니다.
- 매니저의 그룹 표시를 심플한 폴더 아이콘으로 변경하고, 마우스 오버 시 툴팁으로 그룹명을 띄워주도록 수정했습니다.
- 그룹창에 메모를 드래그 앤 드롭으로 추가할 때, 이미 추가된 메모라면 중복 추가 확인창을 띄우는 대신 해당 위치에서 바로 최상단 고정(Pin) 상태로 전환되어 시인성을 높였습니다.
- 그룹 추가 확인창에서 불필요하게 반복되던 "메모가 겹쳐졌습니다." 문구를 깔끔하게 제거했습니다.
- 다중 모니터 대응 강화:
- 다중 모니터 해제 등으로 인해 메모가 화면 밖의 좌표에서 열리는 현상을 방지하기 위해, 메모 로드 시 연결된 모니터 영역을 체크하여 자동으로 안전한 화면 중앙으로 끌고 오도록 좌표 자동 보정 기능을 추가했습니다.
- 모바일/데스크톱 릴리즈 버전 통합 동기화 (1.5.18+30):
- 데스크톱 패키지 버전(
1.5.18)과 모바일 플러터 앱 버전(1.5.18+30)을 동기화했습니다.
- 데스크톱 패키지 버전(
v1.5.17 (2026-07-03)
- 트레이 아이콘 단축키 설정 메뉴 보강:
- 시스템 트레이 메뉴의 "단축키 설정" 서브 메뉴에서 누락되었던 퀵메мо 캡처 HUD(
capture) 및 퀵 OCR 메모 스캔(ocr_capture) 단축키 On/Off 토글 제어 항목을 추가했습니다.
- 시스템 트레이 메뉴의 "단축키 설정" 서브 메뉴에서 누락되었던 퀵메мо 캡처 HUD(
- 모바일/데스크톱 릴리즈 버전 통합 동기화 (1.5.17+29):
- 데스크톱 패키지 버전(
1.5.17)과 모바일 플러터 앱 버전(1.5.17+29)을 동기화했습니다.
- 데스크톱 패키지 버전(
v1.5.16 (2026-07-03)
- Named Mutex 기반 싱글 인스턴스 락(Single Instance Guard) 탑재:
- 중복 기동 시 기존 메모봇 프로세스의 단축키 충돌이 발생하는 문제를 완벽하게 예방하기 위해, Named Mutex 기반 싱글 인스턴스 락을 Windows 환경에 신설했습니다.
- 중복 기동 시 이미 열려 있는 기존 메모봇 매니저 화면을 자동으로 바탕화면 앞으로 복원(SetForegroundWindow)해 주고 새로 실행한 프로세스는 안전하게 자동 종료합니다.
- 모바일/데스크톱 릴리즈 버전 통합 동기화 (1.5.16+28):
- 데스크톱 패키지 버전(
1.5.16)과 모바일 플러터 앱 버전(1.5.16+28)을 일관되게 동기화했습니다.
- 데스크톱 패키지 버전(
v1.5.15 (2026-07-03)
- 스마트 OCR 자동 번역 및 실시간 다국어 번역 시스템 추가:
- OCR 후 자동 번역: 대시보드 설정창에
스마트 OCR 자동 번역 설정영역을 추가하여 OCR 캡처 직후 영/한, 일/한 등 타겟 언어로 실시간 기계 번역된 텍스트가 원본 아래에 자동 덧붙여 기입되도록 구현했습니다. - 메모장 실시간 번역 단축 버튼: 개별 포스트잇 헤더에 번역 단축 버튼을 추가하여, 드래그 선택 영역 또는 메모장 전체 본문을 번역할 수 있는 미려한 반투명 번역 결과 모달 레이어를 탑재했습니다.
- 번역 모달 피드백 액션: 모달 내에서 번역 결과를 한 번에 복사(
복사)하거나, 본문 맨 아래에 저장(메모에 추가)하는 고생산성 버튼을 지원합니다. - 무제한 초경량 번역 엔진: 별도의 유료 API 키 없이도 동작하는 우회 구글 번역 모듈을 파이썬 내장 라이브러리 만으로 구현하여 가볍고 빠른 동작을 달성했습니다.
- OCR 후 자동 번역: 대시보드 설정창에
- 모바일/데스크톱 릴리즈 버전 통합 동기화 (1.5.15+27):
- 데스크톱 패키지 버전(
1.5.15)과 모바일 플러터 앱 버전(1.5.15+27)을 동시에 상향 및 동기화했습니다.
- 데스크톱 패키지 버전(
v1.5.14 (2026-07-02)
- OCR 연속 화면 스크롤 및 완료 방식 고도화:
- 마우스를 드래그하여 최하단 경계선에 가져다 대면 자동으로 화면 스크롤 다운을 실행하고 연속 캡처 레이어가 활성화되는 연속 캡처 기법을 장착했습니다.
- 화면 상단/중단에서 마우스 버튼을 놓으면 스크롤 없이 단발 캡처로 종료되며, 빈 곳 클릭 또는
Escape키 입력 시 즉각 캡처 모드가 마쳐지고 결과 메모가 생성되는 안전장치를 설계했습니다. - OCR 디코딩 프로세스를 비동기 백그라운드로 스레드 분리하여 렉 현상을 원천 방어했습니다.
- 모바일 및 데스크톱 버전업 연동 (1.5.14+26):
- 모바일 앱의 릴리즈 코드를 빌드 번호
26으로 정렬하여 버전 싱크를 조정했습니다.
- 모바일 앱의 릴리즈 코드를 빌드 번호
v1.5.13 (2026-07-02)
- 글로벌 단축키(핫키) Win32 바인딩 안전성 개선:
- Win32 환경에서 백그라운드 핫키 스레드 시작 시, OS 메시지 큐(Message Queue)가 없어 글로벌 핫키 등록(
RegisterHotKey)이 에러를 뱉는 버그를 강제 PeekMessage 예비 호출 기법으로 해결했습니다. 단축키 바인딩 안정성을 100%로 확보했습니다.
- Win32 환경에서 백그라운드 핫키 스레드 시작 시, OS 메시지 큐(Message Queue)가 없어 글로벌 핫키 등록(
- PyPI 배포(pypi_upload.bat) 스크립트 개선:
- 버전 일괄 관리 안정성을 위해
pyproject.toml에도 최신 버전을 동기화했습니다. - 빌드 시 기존 캐시가 꼬여 구버전으로 패키징되는 문제를 원천 차단하기 위해
src/memobot.egg-info폴더를 포함하여 완벽하게 리셋하도록 클린업 기능을 보강했습니다.
- 버전 일괄 관리 안정성을 위해
v1.5.12 (2026-07-02)
- 메모 제목 설정 및 동적 접기/펴기 리사이징 구현:
- 포스트잇 헤더 우클릭 시 메모 제목을 직접 지정할 수 있는 입력 모달 기능을 추가했습니다. (미지정 시 첫 줄 자동 적용)
- 뷰 모드(포커스 해제)에서 헤더 액션 버튼들을
display: none으로 제거하여, 제목이 넓은 공간을 온전히 활용해 한눈에 끝까지 쫙 보이고 깔끔하게 가운데 정렬되도록 레이아웃을 개선했습니다. - 메모를 접을 때 설정된 글자수 범위 내에서 실제 제목의 길이에 맞춰 가장 콤팩트한 최적의 폭으로 접히도록 동적 리사이즈를 적용했습니다.
- 접혀 있는 메모를 다시 펼치거나 더블클릭으로 해제할 때, 접기 전에 임의로 조절해 두었던 원래의 펴진 가로 크기로 안전하게 원복해 줍니다.
- 설정 화면에 "메모 제목 표시 글자수" 설정을 추가하여, 제목 최대 한도에 맞춰 접힌 메모 가로 폭을 실시간으로 제어할 수 있도록 동기화 전파 기능을 결합했습니다.
v1.5.11 (2026-07-01)
- 포스트잇 편집 모드 진입 시 빈 줄 움찔거림 증상 수정: 마크다운 문단 마진으로 인해 읽기 모드와 편집 모드(textarea) 간 빈 줄의 높이가 불일치하여 화면이 움찔거리던 레이아웃 튐 증상을 수정하여 모드 전환을 부드럽게 개선했습니다.
v1.5.10 (2026-06-29)
- 메모봇 실행 시 매니저 실행 버그 수정: 수동으로 메모봇을 직접 실행할 때도 "메모봇 실행 시 매니저 실행" 옵션이 켜져 있으면 매니저(대시보드) 창이 정상적으로 표시되도록 수정했습니다.
v1.5.9 (2026-06-29)
- 기본 설정 및 문구 개선: 설정 화면의 문구를 "메모봇 실행 시 매니저 실행"으로 수정하여 보다 명확하게 변경했습니다.
- 최초 실행 시 자동 최적화: 앱 첫 실행 시 "OS 시작 시 자동 실행" 및 "메모봇 실행 시 매니저 실행" 옵션이 기본값으로 활성화되도록 개선했습니다.
v1.5.8 (2026-06-29)
- 윈도 시작 시 매니저 창 자동 실행 옵션 추가: 설정 화면에서 Windows 부팅 시 메모 관리자 창을 자동으로 열거나 백그라운드 트레이로만 실행할지 선택할 수 있는 체크박스 설정을 추가했습니다.
- 트레이 아이콘 컨텍스트 메뉴 개선: 트레이 메뉴 최상단에 "설정" 메뉴를 추가하고 바로 아래 구분선(Separator)을 배치하여 설정 창 진입이 훨씬 수월해졌습니다.
- 다국어 현지화: 새 설정에 대해 7개 언어(한국어, 영어, 일본어, 중국어, 러시아어, 프랑스어, 이탈리아어) 번역을 모두 구현했습니다.
v1.5.7 (2026-06-27)
- 해시태그 버튼 무반응 세부 디버깅: 해시태그 목록 팝업의 초기화 상태, 버튼 쿼리 여부, 로드 에러(Try-Catch 내 예외)를 파이썬 터미널 로그로 실시간 전송하는 상세 JS 디버깅 로깅을 구현했습니다.
v1.5.6 (2026-06-27)
- 해시태그 버튼 무반응 오류 수정 (캐시 방지): WebView2 브라우저 캐시로 인해 해시태그 추가 이벤트 리스너가 반영되지 않던 현상을 해결하기 위해
note.html에 캐시 버스팅 파라미터(note.js?v=155)를 도입했습니다.
v1.5.5 (2026-06-27)
- 해시태그 퀵 선택 기능 구현: 포스트잇 하단 스케줄(스캐즐) 버튼 옆에
#버튼을 신설하여, 기존 메모들에 등록된 모든 해시태그 목록을 한눈에 보고 다중 선택하여 현재 메모 본문에 즉시 등록/해제할 수 있도록 지원합니다.
v1.5.4 (2026-06-27)
- 오프라인 환경 리소스 내장화 (CDN 의존성 제거): 인터넷 연결이 차단된 환경에서도 UI 아이콘과 폰트가 완벽하게 노출되도록 FontAwesome 6.4.0 및 Google Fonts(Inter, Outfit, Noto Sans KR/JP/SC), Vis.js 그래프 라이브러리, Highlight.js 테마 CSS를 로컬 패키지(
ui/libs)에 내장했습니다. @font-face로컬 웹폰트 매핑을 추가하고 모든 HTML 템플릿의 외부 CDN<link>참조를 패키지 내 상대 경로로 수정하여 완전한 오프라인 독립 실행을 지원합니다.
v1.5.3 (2026-06-27)
- 멀티모니터 환경 메모 드래그 및 복원 오류 수정 (마우스 어긋남 및 화면 이탈 현상 해결)
v1.5.2 (2026-06-27)
- 퀵메모 스크린샷 캡쳐 붙여넣기 다운 현상 수정: 대용량 Base64 이미지 전송 시 발생하는 WebView2/WPF IPC 크래시를 방지하기 위해, 클립보드 이미지 감지 시 JS에서 플래그만 전송하고 Python 백엔드(
PIL.ImageGrab)에서 직접 클립보드 데이터를 긁어와 저장하도록 구조를 최적화했습니다. - 설정 포커스 툴팁 버그 수정: WebView2 최초 로드 시 첫 번째 요소 포커스로 인해 네이티브 툴팁이 화면에 고정되는 문제를
app.js에서 100ms 지연 후blur()및focus()처리와 헤더 버튼들의tabindex="-1"설정으로 완벽하게 해결했습니다. - 스레드-세이프 창 소멸 적용: 백그라운드 스레드에서 직접
window.destroy()를 호출할 때 발생하는 접근성 충돌 크래시 문제를 방지하기 위해 Win32PostMessageW(hwnd, WM_CLOSE, 0, 0)메시지 송신 방식으로 창을 닫도록 개선했습니다. - 단축키 재등록 락 현상 해결: 설정 창에서 핫키(단축키) 변경 시 빠른 속도로 중복 등록이 수행되는 문제를 방지하기 위해 Unregister 후 적절한 지연(0.05초)을 두어 교착 상태를 예방했습니다.
- 퀵메모 UX 개선: 퀵메모 창에 포커스가 있는 상태에서
ESC키를 누르면 창이 닫히도록 하고, 메모 작성 후Enter키를 누르면 메모가 생성됨과 동시에 퀵메모 창이 즉시 닫히도록 개선했습니다.
v1.5.1 (2026-06-26)
- 그룹 폴더 창 상단 고정(Pin) 기능 추가: 그룹 폴더 창 타이틀바에 핀 버튼을 추가하여 항상 위(Always on Top)로 고정할 수 있습니다. 고정 시 핀 색상이 빨간색으로 표시됩니다.
- 그룹 폴더 창 배경색 적용: 투명도 미지원 환경에서 회색 대신 깔끔한 다크 네이비(#1a1a2e) 배경이 표시됩니다.
- 매니저 창 더블클릭 동작 복원: 매니저 창에서 접힌 메모를 더블클릭하면 펼친 메모 상태로 전환되고, 싱글클릭은 메모 위치로 이동하는 기존 UX로 복원했습니다.
- 64비트 상단 고정 버그 수정: 64비트 Windows에서
SetWindowPosctypes 호출 시argtypes/restype미선언으로 포인터 값이 잘려 상단 고정이 무효화되던 문제를 수정했습니다. - 전역 단축키 등록 오류 무시: 이미 등록된 단축키 충돌 시 앱 시작이 중단되지 않도록 예외 처리를 강화했습니다.
v1.5.0 (2026-06-26)
- 마그넷 도킹/그룹화 기능 완성: 모니터 가장자리에서 2개 이상의 메모를 겹쳐 그룹으로 관리할 수 있습니다.
- 세로 방향 전개: 상/하/좌/우 어디에 도킹하든 메모 목록이 읽기 편한 세로(아래쪽) 방향으로 부드럽게 펼쳐집니다.
- 첫 번째 메모 접근성 개선: 그룹을 펼쳤을 때 첫 번째 메모(리더) 창이 확장되어 그룹명과 메모 제목이 모두 표시되며, 개별 클릭으로 언도킹할 수 있습니다.
- 자체 커스텀 모달 적용: 그룹명 지정 시 화면 가장자리에서 기본 팝업이 잘리거나 인코딩이 깨지던 현상을 자체 제작 HTML 모달로 완벽히 해결했습니다.
- DPI 드래그 오차 수정: 윈도우 디스플레이 배율(125%, 150% 등) 환경에서 메모 이동 시 마우스 포인터와 창 사이의 거리가 멀어지던 문제를 수정했습니다.
v1.4.9 (2026-06-26)
- 데스크탑 앱 배포 스크립트 수정: 릴리즈 시 이전 버전 실행파일이 함께 업로드되는 문제 수정.
- 편집 모드 진입 UX 개선: 바탕화면 메모 편집 모드 진입을 기본 "원클릭"으로 변경.
- UI 레이아웃 안정성 강화:
- 메모 뷰 모드와 편집 모드 전환 시 발생하던 미세한 화면 꿀렁거림(Layout Shift) 현상 제거.
- 바탕화면 메모 크기 조절 시 메니저 창이 불필요하게 흔들리며 리렌더링되는 성능 문제 해결 (순수 위치/크기 조절 시에는 동기화 신호 제외 및 최종 수정시간 미갱신).
- 메니저 창 내 접힌 메모 목록에서 '바탕화면에서 스티커 열기' 아이콘이 네이티브 크기 조절 핸들에 가려져 클릭할 수 없던 문제 수정.
v1.4.0 (2026-06-21)
- 안드로이드 카메라 & STT 메모 위젯 추가:
- 스마트폰 바탕화면에서 즉시 메모를 작성할 수 있는 듀얼 버튼(카메라/음성) 네이티브 위젯을 출시했습니다.
- 위젯에서 카메라 아이콘을 누르면 앱이 즉시 카메라를 열고 촬영된 사진을 포함하는 새로운 폴라로이드 스타일 메모를 엽니다.
- 위젯에서 마이크(STT) 아이콘을 누르면
#음성메모태그가 달린 새 메모가 열리며 즉시 음성을 텍스트로 받아 적을 수 있습니다.
v1.3.40 (2026-06-15)
- 모바일 및 데스크톱 인라인 이미지 호환성 구현:
- 데스크톱에 적용된 인라인 이미지 구문(
@[[이미지]])을 모바일 앱에서도 동일하게 지원합니다. - 모바일 목록 카드의 본문 내에 이미지가 포함된 경우 텍스트 영역 내에
WidgetSpan을 사용해 인라인으로 렌더링하고, 에디터에서 이미지 첨부 시@[[이미지]]태그를 커서 영역에 자동으로 삽입합니다. - 이미지 삭제 시 본문 내
@[[이미지]]태그가 자동으로 함께 정리되도록 개선하였습니다. - 외부 공유 수신 시 이미지 메모에
@[[이미지]]태그를 기본 삽입하도록 연동했습니다.
- 데스크톱에 적용된 인라인 이미지 구문(
- 단축키 커스텀 설정 및 중복 방지 기능 완성:
- 설정 화면에서 단축키를 실시간으로 지정 및 변경 가능하며, 중복 단축키 입력을 차단하는 기능을 탑재했습니다.
- 단축키 안내 창 및 매니저 팝업 가이드에 변경된 사용자 단축키 정보가 실시간으로 동적 연동되도록 완료했습니다.
- 대시보드의 태그 필터 "전체" 버튼 미동작 오류 및 항상위 툴팁 겹침 현상을 해결하고 설정창의 높이를 860px로 확대하여 사용성을 증대했습니다.
v1.3.39 (2026-06-14)
-
단축키 매니저 동적 연동 및 다국어 갱신:
- 단축키 및 본문 이미지 삽입 안내 창을 다국어로 추가 갱신하고 단축키 매니저 크기를 확대하였습니다.
-
버전 변경 시 단축키 팝업 자동 리셋:
- 앱 버전이 변경되면 7일 비표시 설정을 무시하고 단축키 안내 팝업이 무조건 표시되도록 개선했습니다.
localStorage에 마지막으로 팝업이 표시된 버전을 저장하여 버전 변경 여부를 감지합니다.- Python API
get_app_version()을 추가하여 JS에서 현재 앱 버전을 조회할 수 있도록 했습니다.
v1.3.37 (2026-06-14)
- 단축키 팝업 복구, 매니저 창 배치 및 높이 최적화, 새 메모 팝업 위치 개선:
- 대시보드와 분리되어 독립적으로 뜨던 단축키 안내 팝업창을 다시 매니저 창 내부의 모달 팝업 레이아웃으로 변경했습니다.
- 매니저 대시보드 창의 기본 높이를 600px에서 750px로 충분히 높여 내부 팝업창이 내용을 많이 가리지 않도록 사용성을 개선했습니다.
- 매니저 창이 실행될 때 화면의 정중앙에 뜨도록 배치 좌표 계산을 연동했습니다.
- 새 메모를 추가하거나 생성할 때 화면 중앙이 아닌 화면의 우측 영역(가장자리 방향) 중앙에 팝업되도록 자동 배치 좌표를 개선하여 화면 가림을 최소화했습니다.
v1.3.36 (2026-06-14)
- 모바일 버전 메모 편집기 툴바 오버플로우 문제 해결 및 버전 표시 동기화:
- 모바일 기기(Android 에뮬레이터 등)에서 메모 편집 창(
_NoteEditorSheet)을 열었을 때 상단 툴바가 가로로 넘쳐RIGHT OVERFLOWED BY 40 PIXELS레이아웃 오류가 발생하던 문제를 수정했습니다. - 기존 단일 행 구성을 **'테마 색상 선택 행'**과 **'액션 버튼 행'**의 2단 레이아웃으로 분리했습니다.
- 모든 액션 아이콘 버튼(저장 체크 버튼 포함)에
visualDensity: VisualDensity.compact,constraints: BoxConstraints(),padding: EdgeInsets.all(6)속성을 균일하게 적용하여 모바일 기기 가로 해상도(320dp 이상)에서 오버플로우 없이 렌더링되도록 수정했습니다. - 모바일 버전 헤더의 버전 표시를 하드코딩된
V1.2에서 빌드 버전인V1.3.36으로 동기화했습니다.
- 모바일 기기(Android 에뮬레이터 등)에서 메모 편집 창(
v1.3.35 (2026-06-11)
- 입력 플러그인 파일 선택 모달 및 매니저 접힘/펼침 그룹 정렬 수정:
- Windows 환경의 설정 창에서 "입력 플러그인 설정" 시, 폴더 버튼을 눌러도 파일 선택 모달창(create_file_dialog)이 뜨지 않고 invalid file filter (*.py) 에러가 발생하던 PyWebView 버그 수정.
- 관리자 대시보드 창에 접힌 메모와 펼친 메모를 구획하여 깔끔하게 정리해주는 "그룹 정렬 레이아웃 모드" 버튼 및 지속 설정 상태 연동 추가.
v1.3.34 (2026-06-11)
- 단축키 및 본문 액션 고도화 & 관리자 레이아웃 버그 수정:
- Windows 환경에서 언제 어디서든 새 메모를 추가할 수 있는 전역 단축키(
Ctrl+N) 구현 (설정 화면에서 개별 단축키 활성화 여부 실시간 연동). - 메모 창 헤더 좌측에 새 메모를 마우스 클릭으로 바로 열 수 있는
+아이콘 추가. - 메모 본문 우측 상단에 메모 전체 내용을 클립보드로 복사하는 플로팅 복사 버튼 추가 (선택 색상 테마에 맞춰 투명도와 회색 색감이 조화롭게 자동 보정되며, 복사 성공 시 시각 피드백으로 체크 아이콘(
✓) 일시 표시). - 기본 예제 플러그인 3종(
datetime_plugin,meeting_minutes_plugin,book_search_plugin)에 메모봇 설정 언어(한국어, 영어, 일본어, 중국어)를 동적으로 감지하여 표시하는 다국어 지원 설계 적용. - 관리자 창에서 탭을 전환했다가 로컬 메모 탭으로 되돌아올 때 Grid 바둑판 정렬 레이아웃이 깨지고 일렬로 포개지던 CSS/JS display 초기화 버그 해결.
- Windows 환경에서 언제 어디서든 새 메모를 추가할 수 있는 전역 단축키(
v1.3.33 (2026-06-11)
- 플러그인 폴더 격리 및 기능 고도화:
- 플러그인 저장 폴더를 실행 파일 경로 기준의
plugins폴더로 고정. - 설정 메뉴(Settings)에서는 최대 5개의 플러그인을 슬롯에 지정(등록)할 수 있도록 제한 유지.
- 메모 창의 플러그인 메뉴(Popover) 및 인라인 키워드 단축 커맨드(
//triggerName//) 입력 시,plugins폴더 내에 위치한 모든 플러그인을 동적으로 감지하여 사용할 수 있도록 개선. - 슬롯 등록 시 외부 경로 파일을 선택하면 자동으로
plugins폴더로 복사 및 파일명 기반으로 등록되도록 개선.
- 플러그인 저장 폴더를 실행 파일 경로 기준의
v1.3.32 (2026-06-11)
- 입력 플러그인(Input Plugin) 시스템 탑재:
- Python 클래스 기반의 플러그인 동적 로더 및 실시간 핫리로드 기능 구현.
- 단순 텍스트 삽입/가공형(
text), 대화형 입력 마법사 폼(form), 실시간 외부 API 도서 검색(search)의 3가지 핵심 플러그인 스키마와 기본 샘플 플러그인 3종 배포. - 메모 에디터 내에서
//triggerName//인라인 입력을 통해 플러그인을 단축 호출하는 실시간 감지 기능 구현. - 플러그인 서식 삽입 시
{{placeholder}}탭 이동 및 블록 지정 지원 (Tab-stop Placeholder Navigation).
v1.3.31 (2026-06-11)
- 모바일 및 데스크톱 10색 테마 컬러 팔레트 동시 확장:
- 기존 5색에서 주황(Orange), 민트(Teal), 장미(Rose), 라벤더(Lavender), 회색(Gray)의 5가지 세련된 파스텔 톤 색상을 추가하여 총 10가지 색상을 지원하도록 데스크톱과 모바일 앱(Flutter)을 동시 갱신했습니다.
- 데스크톱 색상 선택 UI 간소화: 가로로 5개 나열되던 색상 버튼들을 1개의 파레트 아이콘 버튼으로 축소하고, 클릭 시 10색의 컬러칩이 바둑판 배열로 깔끔하게 열리는 팝오버(Popover) 드롭다운 창을 구현했습니다.
- 모바일 앱(Flutter) 호환성 및 테스트 안정화: 모바일에서도 10색이 가로 스크롤로 선택 가능하며, Flutter Analyzer 및 기존 widget_test.dart 소스 내의 빌드 에러를 완벽히 해소했습니다.
- 엣지탭 겹침 현상 정밀 제어 및 핸들 감지 예외 처리:
- Windows의 DWM 그림자 마진 또는 보이지 않는 테두리 픽셀 오차로 인해 발생하던 엣지탭(Edge Tab)의 상하/좌우 미세 겹침 버그를 4px의 물리적 정렬 간격 버퍼(
spacing = 4)를 적용하여 완벽하게 해소했습니다. - 크기 조절이나 고정 기능을 누르지 않고 즉각 엣지탭을 사용할 경우에도 윈도우 핸들(
hwnd)이 즉각 해상화(Resolution)되어 오차 없이 스냅되도록 백엔드 안전 장치를 병합했습니다.
- Windows의 DWM 그림자 마진 또는 보이지 않는 테두리 픽셀 오차로 인해 발생하던 엣지탭(Edge Tab)의 상하/좌우 미세 겹침 버그를 4px의 물리적 정렬 간격 버퍼(
- 메모 가로폭 크기 조절 일관성 통일:
- 메모를 접었을 때와 폈을 때 조절할 수 있는 가로폭의 최솟값을
140px로 상호 일치시켜 접기/펴기 상태 전환 시의 레이아웃 어긋남을 최적화했습니다.
- 메모를 접었을 때와 폈을 때 조절할 수 있는 가로폭의 최솟값을
v1.3.30 (2026-06-11)
- 화면 가장자리 도킹 기능의 정식 명칭을 '엣지탭(Edge Tab)'으로 명명 및 기능 고도화:
- 화면 좌측, 우측, 상단 가장자리에 드래그 시 책갈피 색인 모양으로 달라붙는 스냅 기능을 **'엣지탭(Edge Tab)'**으로 공식 정의했습니다.
- 좌/우측 사이드 엣지탭 라벨 가독성 고도화: WebView2 렌더링 엔진에서 90도 회전 시 폰트가 깨지거나 생략되는 문제를 해결하기 위해, 그레이스케일 안티앨리어싱 및 3D GPU 가속 옵션을 연동하여 글자가 매우 깨끗하고 선명하게 렌더링되도록 개선했습니다.
- 폰트 스타일 콤팩트 최적화: 엣지탭의 라벨 크기를
11px, 세미볼드(font-weight: 600)로 축소 및 미니멀하게 설계하여 깔끔한 외관을 완성했습니다. - 오리지널 단색 테마 및 고대비 색상 유지: 투명도 제거와 함께 메모장 본연의 오리지널 솔리드 컬러를 그대로 적용해 일체감을 극대화했습니다.
- 엣지탭 겹침 방지 (Non-Overlapping Snap): 여러 개의 메모가 동일한 엣지 영역에 도킹될 때, 물리적으로 겹쳐지지 않고 비어 있는 가장 가까운 공간에 순차적으로 정렬되도록 충돌 방지 공간 분배(Interval Snap) 로직을 연동했습니다.
v1.3.28 (2026-06-09)
- 다국어 설정 화면 번역 매핑 버그 수정:
- 설정 창의 일부 옵션(프로그램 실행 설정, OS 시작 시 자동 실행, 사용할 모델 등)의 data-i18n 속성이 중복되거나 잘못 지정되어 일어 등 다른 언어 선택 시 라벨 텍스트가 엉뚱한 내용으로 출력되던 오류를 개별 매핑 키 신설을 통해 해결했습니다.
v1.3.27 (2026-06-09)
- 다국어 설정 및 실시간 번역 동기화:
- 설정 메뉴에 "언어 설정 (Language)" 드롭다운을 추가하고, 한국어, 영어, 중국어, 일어, 러시아어, 프랑스어, 이탈리아어 7개 국어 팩 지원을 신설하였습니다.
- 사용자가 언어 설정을 변경하면 메인 대시보드 및 떠 있는 모든 스티커 메모 창에 새로고침 없이 실시간으로 다국어 번역이 전파 및 갱신되도록 개선하였습니다.
- 빌드(PyInstaller) 및 배포 패키지 구성에 언어 리소스(
languages/*)가 누락되지 않도록 동적 런타임 경로 해결 및 설정을 보완하였습니다.
- 초소형 메모 창 잠금 해제/닫기 버튼 잘림 문제 개선:
- 스티커 창의 세로 높이가 180px 이하로 좁아졌을 때, 비밀번호 입력 및 확인창의 잠금 아이콘을 숨기고 요소를 가로(row)로 컴팩트하게 정렬하는 반응형 CSS 고도화를 통해 해제/닫기 버튼이 보이지 않거나 잘리지 않도록 완벽히 대응하였습니다.
v1.3.26 (2026-06-09)
- 한글 입력 상태에서의 글로벌 단축키 작동 실패 버그 해결:
- 개별 메모 스티커 창이나 매니저 대시보드 내에서 한글 입력 모드로 설정되어 있을 때,
Ctrl+L(접기/펴기),Ctrl+D(삭제),Ctrl+P(고정),Ctrl+N(새 메모),Ctrl+S(동기화) 등의 단축키가 작동하지 않던 치명적인 문제를 해결했습니다. - 브라우저 keydown 이벤트의
e.key판별 외에 키보드의 물리적 위치를 나타내는e.code판별 검사를 병합하여 입력 상태에 100% 무관하게 단축키가 즉각 실행되도록 보완했습니다.
- 개별 메모 스티커 창이나 매니저 대시보드 내에서 한글 입력 모드로 설정되어 있을 때,
v1.3.25 (2026-06-08)
- 관계 그래프 내 'AI 연결 추천' 메뉴 및 자동 위키링크 연동 기능 신설 (PyPI 배포 완료):
- 관계 그래프(Relationship Graph) 상단에 [AI 연결 추천] 버튼을 새로 배치하고, 이를 통해 의미론적인 관련성은 깊지만 아직 위키링크(
[[ ]])로 연결되지 않은 메모 쌍을 AI 분석(Gemini / Ollama)을 통해 추천받는 전용 인터페이스를 구현했습니다. - 비동기 분석 중에는 세련된 글래스모피즘 스피너 로더가 진행 상황을 안내하며, AI가 탐색해 낸 연관 메모 리스트와 추천 이유를 전용 모달 창에 정렬하여 시각화합니다.
- [연결 적용] 클릭 시 백엔드 단에서 대상 메모 파일 내용 끝자락에
[[대상메모]]위키링크를 깔끔하게 추가합니다. - 적용 완료 시 대시보드 관계 그래프와 열려 있는 모든 스티커 메모 창이 실시간으로 동기화되어 즉시 화면에 실선이 연결되고 텍스트가 갱신됩니다.
- PyPI 배포: 본 릴리즈 버전은 PyPI memobot v1.3.25 패키지로 성공적으로 업로드 및 배포 완료되었습니다.
- 관계 그래프(Relationship Graph) 상단에 [AI 연결 추천] 버튼을 새로 배치하고, 이를 통해 의미론적인 관련성은 깊지만 아직 위키링크(
v1.3.24 (2026-06-08)
- 메무 매니저(대시보드) 실행 시 단축키 안내 팝업 신설:
- 앱의 핵심 편의 기능인 퀵메모 HUD 단축키(
Ctrl+Shift+Space), 매니저 창 복원 단축키(Ctrl+O) 및 각종 에디터 단축키를 사용자가 보다 직관적으로 파악할 수 있도록 대시보드 팝업창을 구현했습니다. - 팝업창 하단에 [7일 동안 이 팝업 보지 않기] 체크박스를 얹어, 체크 후 승인 시
localStorage캐시 만료 시간을 7일 후로 연장하여 번거로움을 덜어주는 스마트 상태 관리를 제공합니다.
- 앱의 핵심 편의 기능인 퀵메모 HUD 단축키(
v1.3.23 (2026-06-08)
- 관계 그래프 드래그 시 발생하는 물리 궤도 공전(회전) 억제:
- 드래그 동작 중에 노드들이 어떤 한 중심점을 축으로 뱅글뱅글 맴돌거나 공전하려는 물리 법칙의 문제(구심력 과다 및 감쇠율 부족)를 해결했습니다.
- 구심력 옵션(
centralGravity)을0.01로 극소화하여 공전 현상의 근본 원인을 없앴습니다. - 운동 에너지의 감쇠를 지배하는
damping계수를0.09에서0.85로 극대화하여 물리학적 점성을 크게 주었습니다. 이로써 드래그를 멈추거나 노드를 놓았을 때 춤추듯 회전하지 않고 관성이 즉각 상쇄되어 스무스하게 정지합니다. - 연결선 탄성 계수(
springConstant)와 척력 계수(gravitationalConstant)를 완화하여 노드들이 지나치게 튕겨나가지 않도록 미세 조정했습니다.
v1.3.22 (2026-06-08)
- 관계 그래프 무한 공전/진동 예방 방식 강화:
- 시뮬레이션 안정화(
stabilized) 이벤트가 수렴하지 않는 루프(예: 순환 참조 구조)에서는 아예 발생하지 않는 특성이 있어 여전히 도는 문제가 있었습니다. - 이를 근본적으로 방지하기 위해, 그래프 로드 시 2초(2000ms) 후에 강제로 물리 연산을 정지시키는 강제 타이머를 추가했습니다.
- 또한 드래그가 끝난 시점(
dragEnd)에서도 1초(1000ms)의 관성 여유를 준 뒤 강제로 물리를 비활성화하여, 최종 위치에 온전히 고정되도록 제어를 더욱 견고히 개선했습니다.
- 시뮬레이션 안정화(
v1.3.21 (2026-06-08)
- 관계 그래프 무한 공전/진동 현상 해결:
- 관계 그래프가 물리 엔진 연산에 의해 계속 회전 및 공전하며 진동하는 버그를 해결하기 위해, vis.js Network 시뮬레이션 안정화(
stabilized) 및 드래그 종료(dragEnd) 시점에 물리 효과(physics: false)를 끄고 그 자리에 노드들을 고정시키도록 개선했습니다. - 드래그 시작(
dragStart) 시점에는 다시 물리를 켜서 연결된 노드들이 상호작용하며 끌려오도록 자연스럽게 연동했습니다.
- 관계 그래프가 물리 엔진 연산에 의해 계속 회전 및 공전하며 진동하는 버그를 해결하기 위해, vis.js Network 시뮬레이션 안정화(
v1.3.20 (2026-06-08)
- 대시보드 해시태그 필터 접기/펴기 기능 및 구문 오류 해결:
- 해시태그 필터 토글: 대시보드 메인 화면 상단 검색창 옆에 해시태그 필터 영역
#필터을 온/오프할 수 있는 토글 버튼을 추가하여, 태그 개수가 늘어나 창을 많이 차지하는 시각적 피로감을 개선했습니다. - 필터 상태 영속화: 접힘/펼침 상태가
localStorage를 통해 브라우저 캐시에 영속적으로 저장되어, 앱 재실행 및 새로고침 시에도 이전 설정이 그대로 복원됩니다. - app.js 구문 오류 수정: 토글 스크립트 결합 시 발생하던 괄호 구문 에러를 해결하여 런타임 안정성을 확보했습니다.
- 해시태그 필터 토글: 대시보드 메인 화면 상단 검색창 옆에 해시태그 필터 영역
v1.3.19 (2026-06-08)
- 신규 편의 기능 3종 구현 완료:
- 글로벌 퀵 캡처 HUD (데스크톱 전용):
Ctrl+Shift+Space단축키로 정중앙에 미니 글래스모피즘 입력창을 띄워 1초 만에 새 메모를 기록하는 퀵 캡처 팝업 기능을 추가했습니다. - 위키링크 관계 그래프 뷰 (데스크톱 전용): Vis.js 기반 물리 엔진을 연동하여, 메모들 간의 위키링크(
[[대상]]) 참조 관계를 연결선(Edge)과 노드(Node) 형태의 시각적 인터랙티브 맵으로 제공합니다. 노드 더블클릭 시 해당 메모 창이 즉시 열립니다. - AI 스마트 태그 추천 & 한 줄 요약 (데스크톱/모바일 공통): AI 분석을 통해 본문 내용에 부합하는 해시태그를 자동 추천하고, 50자 내외의 요약문(
summary필드)을 생성 및 저장합니다. 대시보드 카드 뷰에서 한 줄 요약 이탤릭 배지를 표시하며, 데스크톱과 모바일 간 완벽히 동기화됩니다.
- 글로벌 퀵 캡처 HUD (데스크톱 전용):
v1.3.18 (2026-06-07)
- 타 기기 실행 오류 및 호환성 대폭 개선:
- WebView2 런타임 누락 예외 처리: Windows 10/11 환경에서 Microsoft Edge WebView2 Runtime이 미설치/손상되어 앱이 즉시 종료되던 문제를 보완하여, 구동 실패 시 알림창을 띄우고 설치 페이지로 바로 연결해주는 네이티브 다운로드 가이드를 추가했습니다.
- 64비트 Windows 크래시(Access Violation) 방지: 64비트 OS에서
SetWindowLongWAPI 호출 시 핸들 포인터(HWND)가 절단되어 프로그램이 비정상 종료되던 버그를 자동 아키텍처 판별을 통해SetWindowLongPtrW호출로 교체하여 해결했습니다. - PyInstaller hiddenimports 누락 보완:
webview.platforms.winforms,pystray,PIL,ctypes,winreg등 런타임 렌더링 드라이버 및 필수 모듈들을 실행 바이너리에 확실히 동봉하여 환경 제약 없는 구동을 확보했습니다. - 하드코딩된 개발자 계정 경로 제거: 가이드 내 특정 개인화 경로를 플레이스홀더 및 동적 계정명 감지(API 브릿지
get_secrets_path()) 형태로 변경하여 가독성을 높였습니다.
v1.3.17 (2026-06-07)
- 작은 메모 크기에서의 확인창(오버레이) 잘림 현상 해결:
- 메모 창의 높이가 대폭 작아진 상태에서 잠금 해제 비밀번호 입력 오버레이나 삭제 확인 팝업 등이 뜰 때, 하단의 확인/취소 버튼이 창 하단부 밖으로 밀려나 보이지 않던 잘림 버그를 수정했습니다.
- 창의 높이가 240px 이하가 되면 팝업 상자의 여백(padding/gap), 글꼴 크기, 아이콘 크기 등을 대폭 슬림하게 조정하는 반응형 미디어 쿼리를 추가하고, 스크롤 가능하도록 레이아웃을 보완했습니다.
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 및 이벤트 구조를 그대로 이식 및 활용하여 설정 변경사항이 로컬 메모, 매니저, 개별 메모 윈도우에 실시간으로 즉시 동기화됩니다.
- 기존 메모 매니저(Dashboard) 내부 레이어 모달로 띄우던 설정 창을 독립된 별도 외부 팝업 창(크기
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)을 수정하였습니다.
- 위키링크 복사 시 기존 ID 및 제목 조합 방식(
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)를 부착했습니다.
Metadata
Release files for memobot 1.5.39
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| memobot-1.5.39.tar.gz | 3.6 MB | Without provenance | Details for memobot-1.5.39.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| memobot-1.5.39-py3-none-any.whl | Python 3 | none | any | Details for memobot-1.5.39-py3-none-any.whl |
Total release size: 7.2 MB
Release files / memobot-1.5.39.tar.gz
| Download URL | memobot-1.5.39.tar.gz |
|---|---|
| Size | 3.6 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
68baf71d5b41c6d3380c7c97e4322e54ce03b6c9a210ecbfa68c5d35bc5a6839
|
|
BLAKE2b-256 checksum How to use checksums |
b2cd073862afefe09cce22a3018ac256b6fd9e40b40759a890a036fa5b39c76b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.7
|
Release files / memobot-1.5.39-py3-none-any.whl
| Download URL | memobot-1.5.39-py3-none-any.whl |
|---|---|
| Size | 3.6 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1d656cb78c4d974a2bcaf6546edbbed3d6f9a2d543abfffa6779da5dabd26022
|
|
BLAKE2b-256 checksum How to use checksums |
93bda55a3d7ecafc194fd803f87175deca387d260de49f9d74544e00329603d0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.7
|
Security for memobot 1.5.39
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.