메모장 하나 만들었습니다
윈도우11 업그레이드 한뒤 메모장이 너무 마음에 들더군요
메모장을 실행하면 항상 마지막 메모가 막바로 보인다는 것이 아주 간단한건데 너무 편하네요
근데 문제는 이게 데스크탑PC에서만 쓸 수 있다는거죠. 클라우드 앱이 아니라서 모바일앱과 연결이 안됩니다
어떻게든 윈도우 메모장을 클라우드화 시켜보려고 했는데 쉽지 않더군요
그래서 직접 만들었죠

데스크탑PC 윈도우 작업표시줄에서, 모바일 폰에서 앱을 실행하면
즉시 메모 내용을 확인하고 편집 가능합니다
저장할 필요없이 자동으로 클라우드에 동기화 됩니다
앱을 실행하면 항상 마지막 메모 내용이 즉시 나타납니다
https://stockmental.duckdns.org 로 접속해서 앱설치한 뒤 사용하세요

cpu 0.0% mem 1.7% (16mb)
코더는 gemini cli
프론트엔드는 caddy + sveltekit (PWA)
백엔드는 go gin + oracle cloud sql db
통신은 websocket, https
인증은 google oauth2 - jwt - HttpOnly 쿠키
처음에는 프론트엔드를 vercel에 배포하고 백엔드는 원래 쓰는 오라클 클라우드에서 서빙했는데
앱을 실행하자 마자 메모가 딱 튀어나와야 되는데 3-4단계를 거치다 보니까 빠르지가 못해요
jwt 를 웹브라우저 로컬에 저장하거나 html header로 보내면 XSS 토큰탈취를 막을 수가 없어요
보안을 위해서는 HttpOnly쿠키 방식을 사용해야 되는데 이게 같은 인터넷 도메인 상에 있지 않으면 곤란하더라구요
그래서 프론트와 백을 하나의 서버/도메인에 둬야지만 보안 문제를 해결할 수 있기에
부랴부랴 이제껏 API 서버로만 쓰던 오라클 클라우드 ubuntu에
sveltekit 으로 빌드한 정적파일들을 웹서빙 하기 위해서 caddy 라는 웹/프록시 서버를 설치했습니다
기존에 설치된 go프로그램들과 포트 충돌 일어나서 그거 잡는다고 기존의 go 프로그램 코드도 다시 만지고..
이렇게 하면 사용자가 한번만 인터넷 접속을 하면 그 다음부터는 서버내부 IP를 통해서 지연이 줄어듭니다
caddy는 예전에 letsencrypt할때 슬쩍 본 애인데 오라클 클라우드 평생무료티어의
1cpu 1gb ram 인스턴스의 극도로 제한된 리소스에서는 nginx 조차도 버거워서 이용을 안하고 있었는데
caddy는 그것보다 좀 더 가볍다고 해서 설치했습니다
nginx는 event기반이고 .conf파일 설정하는 것도 까다롭고 미세하게 조정할 수 있는 옵션도 상당히 많은데
caddy는 goroutine 기반이고 caddyFile 설정하는 것도 상당히 쉽고 https는 자동설정 되서 편하네요
컴퓨팅 자원만 충분하다면 caddy도 상당한 고성능 웹/프록시 서버라는 것을 알았습니다
동기화 로직 때문에 아직 완벽하게 매끄러운건 아니지만
어쨋든 만드는데 1.5일 걸렸고, 배포(프론트를 vercel에서 oracle cloud로 이사)하는데 1일 걸렸네요
무료 gemini cli는 claude cli보다 답답하고 부족한 면이 있습니다. 아직 에러가 좀 더 많고요. 코딩 기술이 조금은 부족하구요.
근데 이것도 도구니까 2개가 성격과 사용법이 조금씩 다른 면이 있으니까 좀 더 사용해 봐야겠습니다