이야기를 디버깅하는 개발자.

개발과 창작 사이에서, 사람들이 자기만의 이야기를 만들 수 있는 도구와 기록을 만듭니다.

roslyn.dev 자세히보기

만드는 기록 10

사용자가 아직 0명일 때 봐야 할 지표와 대시보드 최소 구성

사용자가 0명인 서비스의 7일 리텐션은 몇 퍼센트일까요. 계산이 되지 않습니다. 분모가 0이기 때문입니다. 그런데도 많은 개인 서비스의 관리자 화면 첫 줄에는 DAU와 리텐션 자리가 마련되어 있고, 거기에는 대개 0과 하이픈이 표시되어 있습니다.관리자 화면을 먼저 만들어두는 편이 낫다는 이야기와, 로그 다음에 필요한 것이 상태를 보는 화면이라는 이야기는 앞서 따로 쓴 적이 있습니다. 이 글은 그 다음 단계입니다. 그래서 그 화면에 정확히 무엇을 몇 개나 넣을 것인가를 목록으로 정리합니다.기준은 하나입니다. 그 숫자를 보고 내일 할 일이 바뀌는가. 바뀌지 않는 숫자는 아무리 그럴듯해도 초기에는 자리만 차지합니다. 사용자 0명 구간에서 그 조건을 만족하는 항목은 생각보다 적습니다.0명일 때 의미가 생기는 다..

"자동 생성" 대신 "이어 쓰기"를 택한 이유 — 창작 보조 도구 설계 기록

이전에 이 주제로 관점을 한 번 정리한 적이 있습니다. 자동 생성이 아니라 이어 쓰기여야 한다는 이야기였는데, 그때는 문제 제기에 가까웠습니다. 이번 글은 그 뒤의 기록입니다. 실제로 메리톡톡을 만들면서 어디서 멈출지, 무엇을 포기할지를 코드 단위로 정해야 했고, 그 결정들을 남겨둡니다.가장 먼저 확인한 것은 제 자신의 반응이었습니다. 초기 버전에서 문단 하나를 통째로 생성해 화면에 띄워봤는데, 문장은 꽤 그럴듯했는데도 손이 멈췄습니다. 고쳐 쓸지 지울지를 판단하는 동안, 원래 쓰려던 문장이 머릿속에서 사라졌습니다. 잘 쓰인 남의 문장이 내 문장을 덮어쓴 셈입니다.그때 알았습니다. 창작 보조 도구에서 진짜 위험한 것은 품질이 낮은 결과물이 아니라, 품질이 적당히 높아서 판단을 대신해버리는 결과물입니다. ..

월 1만 원으로 개인 서비스 운영하기 — 인프라 비용 다이어트

개인 서비스를 만들 때 저는 기능보다 예산 상한을 먼저 정합니다. 월 1만 원. 이 숫자에 특별한 근거가 있는 것은 아니고, 커피 두어 잔 값이라 서비스가 잘 안 되더라도 감정 없이 계속 둘 수 있는 금액이기 때문입니다. 유지비가 이 선을 넘기 시작하면 판단에 감정이 섞입니다.상한을 먼저 정하면 설계가 달라집니다. 상시 켜둘 서버가 정말 필요한지, 이미지를 서버에서 변환해야 하는지, 로그를 얼마나 오래 둘지가 전부 비용 문제로 바뀝니다. 기능을 다 만든 뒤에 요금을 줄이려 하면 대개 구조를 뜯어야 해서 잘 줄지 않습니다.이 글에서는 구체적인 가격을 적지 않습니다. 요금제는 자주 바뀌고 지역과 계정 상태에 따라서도 달라지므로, 지금 적어두면 얼마 못 가 틀린 글이 됩니다. 대신 비용이 어떤 단위로 매겨지는..

아이디어에서 배포까지 2주 — 1인 개발 프로젝트 스코프 정하는 법

제 저장소 목록을 열어 이름을 하나씩 세어봤습니다. 시작만 하고 배포까지 가지 못한 프로젝트가 열 개가 넘었습니다. 그중 절반은 로그인 화면까지는 만들어져 있었고, 몇 개는 데이터베이스 설계 문서만 남아 있었습니다. 코드를 다시 열어보니 문제는 실력이 아니었습니다.공통점이 하나 있었습니다. 전부 처음 상상한 완성본이 너무 컸습니다. 만들려던 것 자체는 단순했는데, 거기에 회원 관리와 관리자 화면과 결제와 다국어가 자동으로 따라붙었습니다. 정작 만들고 싶었던 기능은 그 뒤에 있었고, 거기까지 도달하기 전에 흥미가 먼저 식었습니다.이 글은 그 반대로 가는 방법입니다. 기간을 2주로 못박고, 거기에 들어가지 않는 것을 전부 잘라내는 순서를 정리했습니다. 2주는 임의의 숫자가 아니라 흥미가 식기 전에 결과를 보..

티스토리 글을 자동으로 백업하는 스크립트 만들기

블로그 글을 백업해야겠다고 마음먹고 오픈 API 문서부터 찾았는데, 그 문은 이미 닫혀 있었습니다. 예전에는 인증 토큰을 받아 글 목록과 본문을 정직하게 내려받을 수 있었지만 지금은 그 경로가 없습니다. 남은 것은 누구나 브라우저로 볼 수 있는 공개 경로뿐입니다.처음에는 관리자 화면의 내보내기 기능을 쓰면 되지 않느냐고 생각했습니다. 실제로 그것도 방법이지만, 사람이 직접 눌러야 하는 일은 결국 하지 않게 됩니다. 저는 3년쯤 백업을 미루다가 계정 문제로 하루 동안 블로그에 접속하지 못한 적이 있는데, 그때 처음으로 "글이 내 손에 없다"는 사실이 실감났습니다.이 글은 API 없이 공개 경로 세 가지만으로 백업 스크립트를 짠 기록입니다. 각 경로에서 무엇을 얻을 수 있고 무엇이 부족한지 비교하고, 이를 ..

플랫폼별 복붙 오류를 없애는 원고 서식 변환기 직접 만들기

한글 파일에서 5,000자를 복사해 연재 플랫폼 에디터에 붙여넣고 미리보기를 눌렀는데, 문단 사이가 전부 두 줄씩 벌어져 있었습니다. 대사 앞의 들여쓰기는 사라졌고, 큰따옴표는 어느새 모양이 다른 문자로 바뀌어 있었습니다. 결국 한 화 분량을 눈으로 훑으며 손으로 고쳤습니다.이런 일이 한두 번이면 참고 넘어갑니다. 그런데 매주 두세 편씩 올리는 사람에게는 매번 15분씩 새는 일이 됩니다. 저는 웹소설을 써서 온라인 출판까지 해본 적이 있는데, 그때 가장 짜증났던 게 원고 자체보다 이 붙여넣기 뒤처리였습니다.이 글은 그 뒤처리를 대신하는 작은 변환기를 만든 기록입니다. 무엇이 깨지는지 먼저 분류하고, 각각을 정규식 규칙으로 옮기고, 마지막에는 왜 이 도구를 서비스가 아니라 파일 하나짜리 HTML로 두는 편..

작은 서비스에서 로그 다음으로 필요한 것은 상태를 보는 화면입니다

서비스를 만들다 보면 로그를 먼저 생각하게 됩니다. 문제가 생겼을 때 원인을 찾아야 하고, 어떤 요청에서 실패했는지 확인해야 하기 때문입니다. 저도 닷넷 프로젝트를 만들 때 Serilog 같은 구조화 로깅 도구를 자주 떠올립니다. 하지만 로그를 남기기 시작하면 곧 다른 질문이 생깁니다. 로그는 문제가 생긴 뒤에 뒤져보는 기록에 가깝습니다. 그렇다면 지금 서비스가 어떤 상태인지, 오늘 어떤 일이 있었는지, 사용자가 실제로 어떤 흐름을 지나고 있는지는 어디에서 봐야 할까요. 이 지점에서 작은 대시보드나 상태 확인 화면이 필요해집니다. 거창한 분석 시스템이 아니라, 운영자가 매일 한 번쯤 열어보고 서비스의 현재 상태를 감각할 수 있는 화면입니다. 혼자 운영하는 서비스일수록 이런 화면이 생각보다 중요합니다. 로..

혼자 운영하는 서비스에서 관리자 화면을 먼저 정리하는 이유

작은 서비스를 만들 때 처음부터 관리자 화면을 신경 쓰는 일은 조금 과해 보일 수 있습니다. 사용자에게 보이는 기능도 아직 충분하지 않은데, 운영자만 보는 화면을 먼저 만든다는 것이 뒤로 미뤄도 되는 일처럼 느껴지기 때문입니다.저도 예전에는 비슷하게 생각했습니다. 우선 사용자가 보는 화면을 만들고, 데이터가 쌓이면 그때 관리자 기능을 붙이면 된다고 봤습니다. 하지만 혼자 서비스를 만들고 운영하는 시간이 길어질수록, 관리자 화면은 나중에 붙이는 부가 기능이 아니라 서비스를 오래 붙잡기 위한 기본 도구에 가깝다는 생각을 하게 됩니다.특히 메리톡톡처럼 창작자의 흐름을 돕는 서비스를 만들 때는 더 그렇습니다. 사용자가 어떤 지점에서 막히는지, 어떤 데이터가 쌓이고 있는지, 문제가 생겼을 때 어디를 먼저 봐야 하..

메리톡톡 자동화 구조를 다시 설계하며

메리톡톡을 다시 만들면서, 서비스가 스스로 상태를 점검하고 문제를 발견한 뒤, 필요하다면 개선 제안까지 할 수 있는 시스템이 필요하다는 생각이 들었습니다.단순히 장애 여부를 감시하는 모니터링 수준이 아니라, 사람의 개입을 최소화하면서도 위험한 작업은 자동으로 실행되지 않도록 막아주는 구조가 필요했습니다. 그래서 백그라운드 서비스를 몇 가지 계층으로 나누어 설계하기로 했습니다.전체 구조전체 구조는 크게 세 가지 계열로 구분했습니다.Watcher 계열, Control 계열, Communication 계열입니다. 각각의 역할은 명확하게 분리했습니다.WatcherWatcher는 말 그대로 관찰만 담당합니다.Site Health Watcher, Log Analyzer, GitHub Watcher, Content ..

메리톡톡을 다시 만들며: 왜 ASP.NET MVC에서 Nuxt를 거쳐 Next.js까지 왔나

메리톡톡은 처음부터 지금의 모습으로 시작한 서비스가 아니었다.가장 처음의 메리톡톡은 ASP.NET MVC로 만들었다. 당시의 나는 지금처럼 “글쓰기 경험”이나 “창작자의 리듬” 같은 표현을 명확히 붙잡고 있지는 못했다. 그래도 한 가지는 분명하게 알고 있었다.이 서비스는 단순한 게시판이 아니어야 했다.작품과 작가가 있고, 그 정보가 링크 하나로 외부에 공유될 수 있어야 했다.누군가 특정 작품의 링크를 SNS에 붙여 넣었을 때, 그냥 밋밋한 URL 한 줄만 보이는 것이 아니라 작품 제목, 소개, 대표 이미지가 카드처럼 보여야 했다. 작가 페이지도 마찬가지였다. 링크 하나만으로도 “이 글이 무엇인지”, “누가 쓴 글인지”, “읽어볼 만한지”가 전달되어야 했다.그래서 당시에는 서버에서 HTML을 만들어 내려주..

반응형