🚀 2026 스타트업 컨퍼런스

클라우드 맹신하지 마세요. 당신의 서비스가 '랜선' 뽑히는 순간, 깡통이 된다면 이미 늦었습니다.

클라우드 맹신하지 마세요. 당신의 서비스가 '랜선' 뽑히는 순간, 깡통이 된다면 이미 늦었습니다.

Poooling·2026년 1월 6일·3

클라우드 네이티브의 함정과 데이터 주권을 되찾는 Local-First 아키텍처의 중요성. 서버 의존성을 넘어 지속 가능한 소프트웨어를 만드는 개발자의 태도를 다룹니다.

솔직히 고백하자면, 저도 불과 몇 년 전까지는 '클라우드 네이티브(Cloud Native)'가 정답인 줄 알았습니다. 스타트업에서 "서버리스가 미래다", "모든 건 SaaS로 해결하자"라며 팀원들을 설득하고 다녔죠. 그런데 최근 대기업으로 이직해 복잡한 레거시와 거대한 트래픽을 마주하며, 그리고 'Local-First'라는 개념을 깊게 파고들면서 뒤통수를 세게 맞은 기분이 들었습니다. 우리가 당연하게 여기던 그 아키텍처가, 사실은 사용자의 데이터 주권을 볼모로 잡고 있는 형태일지도 모른다는 사실 때문입니다. 오늘은 최근 읽은 도발적인 에세이를 통해, 우리가 흔히 오해하고 있는 'Local-First'의 진짜 의미와 개발자로서 가져야 할 태도에 대해 이야기해 보려 합니다.

우리는 흔히 'Local-First'라고 하면 단순히 오프라인 모드를 지원하는 앱 정도로 생각합니다. 저 역시 그랬습니다. "인터넷 끊기면 로컬 DB에 저장했다가 나중에 동기화하면 되는 거 아니야?"라고 가볍게 생각했죠. 하지만 현업에서 겪은 수많은 '무한 스피너(Spinner)'의 악몽을 떠올려보면 문제는 그리 단순하지 않습니다. 스타트업 시절, 외부 SaaS 장애로 인해 우리 서비스의 대시보드가 하염없이 로딩만 돌던 그 순간을 잊을 수 없습니다. 그때 우리는 아무것도 할 수 없었습니다. 데이터는 저쪽 서버에 있었고, API가 응답하지 않으면 우리 앱은 그저 멍청한 껍데기에 불과했으니까요.

최근 접한 글에서는 마틴 클레프만(Martin Kleppmann)의 정의를 빌려 이 문제를 아주 날카롭게 지적합니다. "다른 컴퓨터(서버)의 가용성 여부가 당신의 작업을 방해해서는 안 된다." 이것이 Local-First의 핵심입니다. 즉, 인터넷 선을 뽑아도, 혹은 서비스를 만든 회사가 망해서 서버를 내려도, 내 앱과 내 데이터는 멀쩡하게 작동해야 한다는 것입니다. 여기서 중요한 지점은 '서버를 쓰지 말라'는 게 아닙니다. 저도 동기화나 백업을 위해 iCloud 같은 서비스가 필요하다는 데 동의합니다. 하지만 서버는 '필수'가 아니라 '선택'이어야 합니다. 서버가 없어도 앱은 돌아가야 하고, 서버가 다시 연결되면 그때 더 풍부한 경험(동기화, 협업)을 제공하는 방식이어야 하죠.

개발자로서 가장 뼈아팠던 부분은 '웹(Web)'에 대한 지적이었습니다. 우리는 브라우저 위에서 돌아가는 앱을 만드는 데 익숙합니다. 하지만 웹앱은 태생적으로 URL을 통해 서버에 '전화(Phone home)'를 걸어야만 시작됩니다. 쿠키, 로컬 스토리지, 캐시 등을 아무리 잘 써도, 결국 브라우저라는 환경은 서버 의존적일 수밖에 없습니다. 글쓴이는 이를 두고 "달나라에 가져갈 앱으로는 최악의 설계"라고 비판하더군요. 2025년이 된 지금, 우리는 고성능 스마트폰을 주머니에 넣고 다니면서도 정작 소프트웨어 아키텍처는 20년 전의 메인프레임 타임쉐어링(Timesharing) 시절로 퇴보한 것일지도 모릅니다. 모든 로직과 데이터를 서버에 맡겨두고, 우리는 그저 단말기만 들고 있는 셈이니까요.

심지어 우리가 매일 쓰는 협업 도구들도 예외는 아닙니다. 리니어(Linear)나 슬랙(Slack), 노션(Notion) 같은 도구들이 어느 날 갑자기 서비스를 종료한다면 어떻게 될까요? CSV로 데이터를 내보내 준다고 한들, 그 데이터를 가지고 예전처럼 업무를 이어갈 수 있을까요? 불가능합니다. 소프트웨어가 사라지면 데이터의 맥락도 함께 사라지기 때문입니다. 진정한 Local-First 소프트웨어라면, 벤더가 망해도 오픈 소스 서버를 직접 띄우거나, 최소한 로컬에 있는 앱만으로도 작업의 연속성을 보장해야 합니다. 이것이 바로 '데이터 소유권'의 진짜 의미입니다.

물론, 기업 입장에서 Local-First는 달갑지 않습니다. 구독 모델(SaaS)로 돈을 벌어야 하는데, 사용자가 소프트웨어와 데이터를 온전히 통제한다면 락인(Lock-in) 효과가 사라지니까요. 하지만 개발자인 우리는 비즈니스 논리에만 매몰되어서는 안 됩니다. 사용자의 경험, 그리고 소프트웨어의 지속 가능성을 고민해야 합니다. "스피너는 멋지지 않다"는 말처럼, 네트워크 지연 없이 즉각 반응하고, 내 데이터가 내 기기에 안전하게 있다는 믿음을 주는 소프트웨어를 만드는 것이야말로 AI 시대에 우리가 지향해야 할 장인 정신이 아닐까 싶습니다.

앞으로 여러분이 새로운 사이드 프로젝트를 시작하거나, 회사에서 아키텍처를 설계할 때 한 번쯤 자문해 보셨으면 좋겠습니다. "이 서버가 내일 당장 폭파된다면, 사용자는 작업을 계속할 수 있는가?" 만약 대답이 '아니오'라면, 여러분의 서비스는 그저 '인터넷이 연결된 깡통'일지도 모릅니다. 저 역시 이번 주말에는 습관적으로 만들던 Next.js 웹앱 대신, 로컬 DB(SQLite, PGlite)를 중심으로 한, 진짜 '내 것'이 되는 앱을 끄적여볼 생각입니다. 비록 당장 돈은 안 될지라도, 그 과정에서 얻는 인사이트는 연봉 이상의 가치가 있을 테니까요.

Poooling
PooolingAuthor

Poooling님의 다른 글

댓글 0

첫 번째 댓글을 남겨보세요!