메리톡톡은 처음부터 지금의 모습으로 시작한 서비스가 아니었다.
가장 처음의 메리톡톡은 ASP.NET MVC로 만들었다. 당시의 나는 지금처럼 “글쓰기 경험”이나 “창작자의 리듬” 같은 표현을 명확히 붙잡고 있지는 못했다. 그래도 한 가지는 분명하게 알고 있었다.
이 서비스는 단순한 게시판이 아니어야 했다.
작품과 작가가 있고, 그 정보가 링크 하나로 외부에 공유될 수 있어야 했다.
누군가 특정 작품의 링크를 SNS에 붙여 넣었을 때, 그냥 밋밋한 URL 한 줄만 보이는 것이 아니라 작품 제목, 소개, 대표 이미지가 카드처럼 보여야 했다. 작가 페이지도 마찬가지였다. 링크 하나만으로도 “이 글이 무엇인지”, “누가 쓴 글인지”, “읽어볼 만한지”가 전달되어야 했다.
그래서 당시에는 서버에서 HTML을 만들어 내려주는 구조가 중요했다. ASP.NET MVC를 선택한 핵심 이유도 거기에 있었다. 페이지마다 제목, 설명, 이미지 같은 메타 정보를 서버에서 안정적으로 구성할 수 있었고, SNS나 검색엔진이 페이지를 읽을 때 필요한 정보를 비교적 명확하게 제공할 수 있었다.
지금 돌아보면 그 선택은 나름 합리적이었다.
문제는 시간이 지나면서 생겼다.
오래된 방식으로 계속 덧붙인 사이트
처음에는 ASP.NET MVC와 jQuery 조합이 익숙했다. 화면에서 필요한 부분을 찾아 값을 바꾸고, 버튼을 누르면 특정 영역을 보여주거나 숨기고, AJAX로 데이터를 가져와 다시 DOM에 붙이는 식이었다.
작은 기능을 만들 때는 빠르고 편했다.
하지만 기능이 늘어나자 점점 한계가 드러났다.
어느 버튼이 어떤 상태를 바꾸는지 추적하기 어려워졌고, 화면의 현재 상태와 코드의 상태가 따로 노는 느낌이 들기 시작했다. 기능을 하나 추가하면 다른 곳에서 예상하지 못한 문제가 생기기도 했다.
사이트도 느리게 느껴졌다.
정확히 말하면, jQuery 하나가 문제였다고 말하기는 어렵다. 성능 문제는 보통 하나의 원인으로 생기지 않는다. 오래된 구현 방식, 누적된 스크립트, 이미지와 리소스 최적화 부족, 서버 응답, 화면 구조 등이 함께 영향을 준다.
다만 분명한 것은 있었다.
메리톡톡은 내가 만들고 싶은 창작 공간의 모습과 점점 멀어지고 있었다.
글을 쓰고 싶은 공간이라기보다, 기능이 계속 붙은 관리형 웹사이트처럼 느껴졌다.
나는 메리톡톡을 다시 생각해야 했다.
Vue가 좋아서 시작한 Nuxt.js v2
나는 React보다 Vue를 더 좋아했다.
Vue의 문법은 직관적이었고, 컴포넌트를 작성하는 방식도 내게 더 자연스럽게 느껴졌다. 그래서 메리톡톡 v2를 구상하면서 Nuxt.js를 선택했다.
이 선택에도 이유가 있었다.
메리톡톡은 여전히 SEO와 공유 카드가 중요했다. 단순한 SPA로 만들면 화면은 현대적으로 만들 수 있을지 몰라도, 작품과 작가 페이지가 외부에서 공유될 때 메타 정보가 안정적으로 잡히지 않을 수 있었다.
Nuxt는 Vue 기반이면서도 SSR, 라우팅, 메타 태그 관리 같은 기능을 제공한다. 즉, 내가 좋아하는 Vue의 개발 경험을 유지하면서도 메리톡톡에 필요한 SEO 구조를 가져갈 수 있는 선택지처럼 보였다.
실제로 어느 정도까지는 잘 진행됐다.
화면도 이전보다 현대적으로 바뀌었고, 컴포넌트 구조도 정리되기 시작했다. “이번에는 제대로 다시 만들 수 있겠다”는 느낌도 있었다.
그런데 인증에서 문제가 생겼다.
인증서버와 OIDC, 그리고 예상보다 느렸던 로그인
메리톡톡은 별도의 인증서버를 사용한다.
서비스 자체에서 계정과 비밀번호를 직접 관리하기보다, 인증서버를 통해 로그인하고 토큰을 받아 사용하는 구조다.
기술적으로는 OIDC, 즉 OpenID Connect 기반의 인증 흐름이다.
비개발자에게 쉽게 말하면, 이런 구조다.
메리톡톡이 직접 “당신이 누구인지” 확인하는 것이 아니라, 인증을 담당하는 별도의 서버에 확인을 맡긴다. 사용자가 로그인하면 인증서버가 “이 사람은 정상적으로 로그인한 사용자다”라는 증명을 해주고, 메리톡톡은 그 결과를 바탕으로 사용자를 인식한다.
이 방식은 여러 서비스를 운영할 때 장점이 있다.
하나의 인증 체계를 여러 서비스에서 공유할 수 있고, 로그인 정책도 중앙에서 관리할 수 있다.
문제는 Nuxt.js로 구현한 v2에서 이 인증 흐름이 예상보다 느리게 느껴졌다는 점이다.
처음에는 인증서버가 느린 줄 알았다.
혹은 네트워크 문제일 수도 있다고 생각했다.
혹은 내가 코드를 잘못 작성했을 수도 있었다.
사실 지금도 Nuxt 자체의 문제였다고 단정할 수는 없다. 인증은 생각보다 많은 요소가 얽힌다. SSR 환경에서 세션을 어떻게 저장하는지, 토큰을 언제 검증하는지, 서버 미들웨어가 매 요청마다 어떤 일을 하는지, 인증서버와 몇 번 왕복하는지에 따라 체감 속도는 크게 달라질 수 있다.
그래서 나는 같은 인증 흐름을 Next.js에서 한번 구현해 보기로 했다.
결과는 의외였다.
Next.js에서는 같은 흐름이 훨씬 빠르고 안정적으로 느껴졌다.
적어도 내가 작성한 코드와 내 프로젝트 조건 안에서는 그랬다.
그 순간부터 고민이 시작됐다.
“내가 좋아하는 Vue와 Nuxt를 계속 붙잡아야 할까?”
“아니면 서비스 운영에 더 안정적으로 느껴지는 Next.js로 전환해야 할까?”
기술 취향보다 중요한 것
나는 원래 React보다 Vue를 선호했다.
그 취향은 지금도 크게 변하지 않았다.
하지만 메리톡톡은 내 취향을 증명하기 위한 프로젝트가 아니다.
사용자가 글을 쓰기 위해 들어오는 공간이다.
사용자는 내가 어떤 프레임워크를 좋아하는지 알 필요가 없다.
사용자는 로그인 후 바로 글을 쓸 수 있어야 하고, 작품 링크를 공유했을 때 자연스럽게 카드가 보여야 하며, 모바일에서도 불편하지 않게 접근할 수 있어야 한다.
결국 중요한 것은 기술의 이름이 아니라, 서비스가 사용자에게 어떤 경험을 제공하느냐였다.
그 기준으로 다시 보면 Next.js는 꽤 현실적인 선택지였다.
Next.js는 React 기반이라는 점에서 개인 취향과는 조금 거리가 있었지만, SSR, 동적 메타데이터, Open Graph 이미지, 라우팅, 서버 컴포넌트, 배포 생태계 측면에서 메리톡톡이 필요로 하는 조건과 잘 맞았다. Next.js는 App Router에서 페이지별 메타데이터를 구성할 수 있고, Open Graph 이미지도 정적 파일 또는 코드 기반으로 처리할 수 있다.
또 하나의 이유는 배포 선택지였다.
예전에는 Next.js를 특정 플랫폼에 강하게 묶인 기술처럼 느끼기도 했다. 하지만 최근에는 Cloudflare Workers에서 Next.js 앱을 운영하기 위한 가이드와 OpenNext 어댑터가 제공되고 있다. 물론 모든 기능이 모든 환경에서 아무 제약 없이 동작한다고 말할 수는 없지만, 예전보다 배포 선택지가 넓어진 것은 분명했다.
그렇게 나는 메리톡톡을 Next.js로 다시 만들기 시작했다.
결국 내가 지키고 싶었던 것
겉으로 보면 이 과정은 기술 스택의 변경처럼 보인다.
ASP.NET MVC에서 Nuxt.js로,
Nuxt.js에서 Next.js로.
하지만 내게 이 과정은 단순한 프레임워크 교체가 아니었다.
메리톡톡이 어떤 서비스여야 하는지 다시 확인하는 과정이었다.
처음 ASP.NET MVC를 선택했던 이유는 작품과 작가의 정보가 외부에 잘 전달되기를 바랐기 때문이다. 링크 하나만으로도 작품이 소개되고, 작가가 발견되고, 누군가의 글이 더 멀리 닿기를 바랐다.
Nuxt.js를 선택했던 이유는 더 현대적인 사용자 경험을 만들고 싶었기 때문이다. 오래된 방식의 화면에서 벗어나, 컴포넌트 기반으로 더 부드럽고 관리하기 쉬운 서비스를 만들고 싶었다.
Next.js로 전환한 이유는 결국 운영과 사용성의 균형 때문이었다. 로그인은 빨라야 하고, 글쓰기 화면은 안정적이어야 하며, 공유와 SEO는 여전히 중요했다.
그 과정에서 내가 지키고 싶었던 본질은 하나였다.
메리톡톡은 사용자가 글을 쓰고 싶어지는 공간이어야 한다.
화려한 AI 기능을 앞세우는 곳이 아니라,
정리되지 않은 생각도 일단 적을 수 있는 곳.
작품을 완성하지 않아도 초안을 남길 수 있고,
설정을 다 정하지 않아도 문장을 먼저 시작할 수 있고,
언젠가 그 글을 공유하고 싶어졌을 때 자연스럽게 외부로 전달될 수 있는 곳.
기술은 그 경험을 위해 존재해야 한다.
나는 여전히 완벽한 개발자는 아니다.
어떤 선택이 언제나 정답이었다고 말할 수도 없다.
ASP.NET MVC로 만들었던 첫 버전도, Nuxt.js로 만들던 v2도, Next.js로 다시 만들고 있는 지금도 각각의 이유와 한계가 있었다.
다만 이제는 조금 더 분명히 알고 있다.
내가 만들고 싶은 것은 단순히 “글쓰기 기능이 있는 웹사이트”가 아니다.
들어오자마자 한 문장을 쓰고 싶어지는 창작 공간이다.
그리고 메리톡톡의 기술 선택은 앞으로도 그 기준을 중심으로 바뀔 것이다.
사용자가 더 편하게 쓰고,
더 오래 머물고,
더 자기답게 문장을 이어갈 수 있다면.
그 선택이 지금의 메리톡톡에게는 가장 좋은 기술이라고 생각한다.