본문 바로가기
cutty.dev
All posts

cutty.dev의 기술 스택 - 의도적인 선택

cutty.dev의 기반 기술과 그 이유는 무엇인가? 선전 없이: 지루하지만 안정적인 스택, EU 내 호스팅, 그리고 한 사람이 유지할 수 있는 프라이버시가 설계 단계부터 반영된 아키텍처.

대부분의 "내 기술 스택" 기사는 새로운 도구들을 자랑스럽게 나열한 목록이다. 이 글은 다른 것에 관한 것이다 — cutty.dev의 선택 뒤에 있는 철학에 관해서 말이다: 유행하는 것보다 지루하고 안정적인 것, 미국식보다 유럽식, 원칙적으로 사적인 것, 그리고 한 사람이 유지할 수 있을 만큼 간단한 것.

프레임워크: Astro (서버 사이드 렌더링)

cutty.dev는 서버 측에서 렌더링되는 Astro 애플리케이션입니다. 모든 요청은 서버를 통해 처리되며, 페이지가 동적으로 구성되고 완성된 HTML로 응답합니다.

왜냐하면: 무거운 도구 없이 서버 측 렌더링을 원했고, 프레임워크 자체에 내장된 다국어 지원과 오버헤드 없는 속도를 원했습니다. Astro는 이를 모두 제공하며 코드를 가독성 있게 유지해 줍니다. 이는 혼자 진행하는 프로젝트에서 어떤 유행하는 기능보다 더 큰 가치가 있습니다.

데이터베이스: SQLite

하나의 데이터베이스, 하나의 파일. 여기에 TypeScript 친화적인 쿼리 레이어를 더해, 데이터 구조 변경 시 프로덕션이 아닌 코드에서 즉시 오류를 확인할 수 있습니다.

이유: cutty.dev는 주로 "읽기 중심"입니다. 링크를 클릭할 때마다 데이터가 읽히고 카운터가 증가합니다. SQLite는 하루에 매우 많은 트래픽을 처리하는 데 탁월합니다. 백업은 단순히 하나의 파일을 복사하는 것일 뿐—복제 의식도 없고 복잡한 스크립트도 필요 없습니다. 여기서의 단순성은 품질을 희생한 것이 아닙니다. 이는 움직이는 부품이 적을수록 고장 날 가능성이 있는 요소가 줄어든다는 것을 의미한다는 의도적인 결정입니다.

호스팅: 유럽 연합 내 서버

  • EU 내 전용 서버, 자체 TLS 인증서, 자동 HTTPS를 지원하는 리버스 프록시, 컨테이너화된 애플리케이션

왜인가: 이것이 cutty.dev가 데이터를 대하는 방식의 핵심입니다. 데이터 위치(유럽연합 내 고객과 GDPR 준수에 중요)에 대한 완전한 통제, 단일 공급업체에 대한 의존성 부재, 대형 클라우드 플랫폼이 제공하는 미국 자동 복제 없음, 트래픽 기반 요금이 아닌 예측 가능한 비용. 편리한 서부 플랫폼은 더 빠른 시작을 제공하겠지만, 그 대가로 사용자의 데이터가 물리적으로 어디에 저장되는지의 문제를 감수해야 합니다.

번역: 로컬 AI 모델

cutty.dev는 25개 언어를 지원하며, 번역은 자체 인프라에서 실행되는 로컬 오픈소스 AI 모델을 통해 이루어집니다.

이유: 인터페이스의 어떤 텍스트도 외부로 나가지 않습니다. 우리는 이를 외부 AI 공급자에게 전송하지 않습니다. 이는 단일 번역당 비용이 제로이며 품질에 대한 완전한 통제력을 의미합니다. 필요할 때마다 번역을 갱신할 수 있습니다. 기계 번역은 항상 인간의 검수가 필요하며, 모든 언어가 이러한 검수를 거쳤습니다. 그러나 자체적으로 수행한다는 것은 프라이버시가 가격표의 옵션이 아니라 아키텍처의 속성임을 의미합니다.

CSS: 유틸리티 퍼스트 (Tailwind)

스타일 시스템 하나, CSS-in-JS 없음, 별도 스타일 파일 없음. 모든 것이 템플릿 내에서 직접 처리됩니다.

왜: 반복 속도가 중요하기 때문입니다. 클래스 이름을 짓는 데 시간을 낭비하지 않으며, 사용하지 않는 스타일은 최종 페이지에 반영되지도 않습니다. 시스템 자체가 일관된 디자인을 강제합니다. 개인에게 있어 중요한 것은 부수적인 일에 보내지 않는 매분입니다.

구현: 컨테이너

컨테이너(도커) 기반 애플리케이션으로, 반복 가능하고 이식 가능한 방식으로 배포됩니다.

이유: 로컬과 프로덕션에서 동일한 환경을 유지하여 "내 컴퓨터에서는 잘 작동했는데"라는 문제를 방지하고, 필요할 경우 30분 이내에 전체 시스템을 다른 서버로 이전할 수 있기 때문입니다. 이동성은 독립성의 한 형태입니다.

이것이 나에게 가르쳐준 것

  • 지루한 스택이 승리한다. Astro, SQLite, Tailwind, 컨테이너 — 모두 성숙하고 잘 문서화되어 있으며 안정적이다. 예상치 못한 순간에 무너지는 일은 없다.
  • EU 내 호스팅은 프로덕션 준비가 되어 있다. "진지하게 하려면 거대한 미국 클라우드를 써야 한다"는 신화는 바로 그 신화에 불과하다.
  • 로컬 AI는 현실이다. 좋은 번역을 얻기 위해 외부 API에 데이터를 넘길 필요가 없다.
  • 한 사람이 팀이 만든 것처럼 보이는 제품을 출시할 수 있다. 시간은 돈보다 더 비싼 자원이다. 따라서 여기서의 모든 선택은 시간을 보호하기 위한 것이었다.

라이브로 보기. 기술적 접근 방식에 대한 문의는 hello@cutty.dev로 해주세요. 당일 답변 드립니다.