macOS 클립보드 관리자, Swift·Tauri·Electron 중 무엇으로 만들까?
클립보드 관리자를 만들겠다고 하면 첫 질문은 대개 "UI를 뭘로 짤까"입니다. React가 익숙하면 Electron이나 Tauri, 네이티브가 좋으면 SwiftUI를 떠올립니다. 그런데 이 앱의 화면은 검색창 하나와 목록 하나가 거의 전부입니다. 나머지는 운영체제와 주고받는 일입니다.
클립보드 관리자를 만들겠다고 하면 첫 질문은 대개 "UI를 뭘로 짤까"입니다. React가 익숙하면 Electron이나 Tauri, 네이티브가 좋으면 SwiftUI를 떠올립니다. 그런데 이 앱의 화면은 검색창 하나와 목록 하나가 거의 전부입니다. 나머지는 운영체제와 주고받는 일입니다.
Vultr 인스턴스와 다른 ISP 회선에 있는 서버 사이에서 패킷이 하루에 몇 번씩 사라졌습니다. 한 번 시작되면 1분에서 15분 동안 4080%가 손실됐고, 손대지 않아도 다시 멀쩡해졌습니다. 원인은 두 회사 망이 만나는 중간 구간에 있었고, 그 구간은 제 손이 닿지 않는 곳이었습니다.
「체스, 지뢰찾기, 스티커 메모를 빼면 앱이 가벼워지고 빨라질까?」 웹 데스크톱에 메모 앱을 하나 더 붙인 뒤 이 질문이 나왔습니다. 기능이 늘수록 첫 화면이 무거워지는 건 당연해 보였고, 가장 쉬운 답은 덜 쓰는 앱을 지우는 것이었습니다.
배포 버튼을 누르고 얼마 뒤 모니터링에 502 가 몇 개 찍힙니다. 새 버전은 헬스체크를 통과했고, 옛 버전은 로드밸런서에서 뺐습니다. 순서대로 했는데 요청이 끊겼습니다. 같은 시각 브라우저 콘솔에는 ChunkLoadError 가 뜹니다. 방금 받은 페이지가 존재하지 않는 자바스크립트 파일을 달라고 한 것입니다.
구글과 네이버에 서브도메인 열세 개를 등록하고 사이트맵까지 낸 뒤 Bing 등록을 시작하고 나니, 할 일이 끝났다는 기분이 들었습니다. 콘솔마다 「성공」이 떴고 발견된 페이지 수도 나왔습니다. 그런데 네이버 수집요청 가이드에 이런 문장이 있었습니다.
서브도메인 열세 개를 검색엔진에 등록하는 데 구글은 DNS 레코드 한 줄이었고, 네이버는 같은 일을 열세 번 반복해야 했습니다. 두 도구의 기능 목록은 비슷합니다. 사이트맵을 받고, 소유를 확인하고, 수집 현황을 보여 줍니다. 갈리는 것은 무엇을 사이트 하나로 세는가였습니다.
서브도메인 사이트맵을 본진 사이트에 넣었더니 네이버가 받지 않았습니다. https://duolabs.co.kr 로 등록해 둔 사이트의 사이트맵 제출 칸에 https://cdn.duolabs.co.kr/sitemap.xml 을 넣고 확인을 누르자, 화면 아래에 빨간 띠가 떴습니다.
듀오랩스 본진의 llms.txt를 다시 읽어 봤습니다. AI가 사이트를 이해하도록 요약해 두는 파일입니다. 서비스 상세로는 웹 개발 페이지 하나가 올라 있었습니다. 그런데 듀오랩스 이름으로 돌아가는 형제 앱은 스무 개입니다. 업무 시스템, AI 자동화, 3D, ERP 같은 데모까지, AI가 "듀오랩스는 무엇을 만드나"를…
형제 앱 하나의 운영 사이트맵을 열었더니 비어 있었습니다. <urlset> 태그만 있고 주소가 하나도 없었습니다. 코드에는 공개 경로 목록을 읽어 사이트맵을 만드는 sitemap.ts가 있었습니다. 목록도 비어 있지 않았습니다.
"기업 맞춤 소프트웨어 개발, 듀오랩스 / 무료로 상담받기." 금색 버튼이 달린 이 상담 카드가 형제 앱 여섯 곳의 리포에 각각 복사돼 있었습니다. 처음 만든 앱에서 잘 동작하니 다음 앱에 복사했고, 그다음 앱에도 복사했습니다. 여섯 벌은 조금씩 달랐습니다. 링크 주소가 다르고, 창 안에서의 동작이 다르고, 모바일에서 …