Contents

6년간의 토이프로젝트 여정을 마무리하며 - 기술블로그 구독서비스 회고록

  계속하던 것을 그만둔다는 건, 시작하는 것보다 더 어려운 결정을 요구할 때가 많다. ‘왜 그만둬야 할까?’라는 물음 앞에 서면 수많은 이유와 핑계가 머릿속에서 충돌하고, 그 과정에서 내면의 깊숙한 갈등과 마주하게 된다. 2018년부터 6년 동안 꾸준히 운영해온 기술 블로그 구독 서비스의 종료를 결심한 지금 역시 마찬가지다.

 처음엔 단지 작은 불편을 해결하려던 단순한 프로젝트였지만, 어느 순간 수천 명의 사용자들의 아침에 만나는 루틴으로 자라 있었다. 사용자들이 보내는 감사의 메시지는 일상의 피로를 잊게 만들었고, 이 서비스가 세상 어딘가의 누군가에게 작게나마 변화를 주고 있다는 사실은 내 마음을 계속 움직이게 했다. 하지만 그 이면에서는, 늘어나는 책임과 운영의 부담 그리고 빠르게 변화하는 기술 환경 속에서 이 서비스의 존재 이유를 끊임없이 자문해야 하는 상황이 펼쳐지고 있었다.

 그 고민의 시간은 몇 년간 이어졌다. 오픈소스로 남겨둘 수도 있었고, 다른 이의 손에 넘길 수도 있었으며, 최소한의 기능만 남겨 놓고 유지하는 선택도 있었다. 그러나 결국, 더는 내 마음이 닿지 않는 곳에서 무책임하게 살아 숨 쉬는 서비스를 바라볼 자신이 없었다. 깔끔하게 정리하고 떠나는 것이, 이 서비스에 대한 마지막 애정의 표현이자 책임이라는 생각이 들었다.

 이 글은 그 6년간의 여정을 천천히 되돌아보며 써 내려간 기록이다. 시작의 설렘에서부터 성장의 기쁨과 아픔, 기술적 도전에서 얻은 배움, 그리고 ‘끝’이라는 쉽지 않은 결정까지. 이 이야기가 비슷한 고민 앞에 선 누군가에게 작은 위안과 용기가 되고, 새롭게 토이프로젝트를 시작하려는 사람에게 현실적인 안내가 되기를 진심으로 바란다. 무언가를 끝낸다는 건 실패가 아니라, 또 다른 출발을 위한 가장 정직한 준비다. 때로는 멈출 줄 아는 용기가 있어야, 새로운 길을 마주할 힘도 생긴다.

토이프로젝트 관련 글

시작

 ‘글 쓰는 개발자가 되자!‘는 생각이 머릿속을 가득 채우던 시절이 있었다. 단지 좋은 개발자가 되는 것뿐만 아니라, 내가 아는 것을 공유하고 나누며 기술 생태계에 작게나마 기여하며 영향력 있는 사람이 되고 싶다는 열망이었다. 그래서 시작한 기술 블로그는 어느새 개발자로서의 정체성 일부가 되었고, 조금씩 늘어나는 방문자 수는 내게 큰 보람을 주었다. 그러나 글을 쓰고 나서 늘 아쉬움이 남았다. 정성껏 작성한 글이 많은 사람들에게 닿았으면 좋겠다는 바람도 있었지만, 한편으로는 다른 개발자들이 작성한 좋은 글들을 여기저기 분산된 채로 찾아다녀야 하는 불편함이 마음에 걸렸다. 이러한 단순하고도 순수한 마음에서 출발한 아이디어 하나를 떠올렸다. “매일 아침, 어제 하루 동안 올라온 기술 블로그 글들을 자동으로 수집해서 이메일로 보내주면 어떨까?” 하루를 시작하며 좋은 글을 읽는 습관이 개발자로서 성장하는 데 큰 힘이 되었기에, 이 서비스가 나와 같은 고민을 가진 많은 개발자들에게도 도움이 될 거라 믿었다. 처음에는 단순한 아이디어였지만, 실제로 구현하기 위해서는 생각보다 많은 기술적 도전이 필요했다.

/images/toy-project-retrospective-6-years-journey/first.png
첫 발송! 그때는 도메인도 없었어서 무료 도메인을 사용했었다.

 가볍게 무료로 운영할 방법을 고민하면서 Heroku에서 시작했으나, 제한된 자원과 운영방식의 문제로 Raspberry Pi를 거쳐야 했다. 그 과정에서 소규모 서버 운영에 대한 여러 시행착오를 겪었지만, 이것조차도 즐거운 경험이었다. 그러던 중 서버 개발자였던 나에게 한줄기 빛처럼 찾아온 것이 AWS 프리티어였다. AWS는 무료로 일정 기간 서버 인프라를 제공해줬고, 덕분에 부담 없이 조금 더 안정적인 환경을 구축할 수 있었다. Java를 중심으로 개발 경력을 쌓아왔던 나에게, 이 프로젝트는 새로운 언어를 탐색할 완벽한 기회이기도 했다. 오랜 시간 마음속에서만 궁금했던 언어인 Python을 선택했고, Python 특유의 간결한 문법과 빠른 개발 속도는 이 프로젝트에 꼭 맞는 선택이었다.

 그렇게 하나씩 기능을 추가하고 문제를 해결해 나가는 과정에서, 내 자신도 개발자로서의 시야와 역량이 넓어지는 것을 느꼈다. 처음엔 단지 개인적인 호기심과 작은 불편함을 해결하기 위한 프로젝트였는데, 어느새 수천 명이 매일 아침 나와 같은 메일을 기다리게 될 줄은 꿈에도 몰랐다. 작은 아이디어 하나가 얼마나 큰 파급력을 가질 수 있는지, 그리고 개발자로서 성장한다는 것이 얼마나 다채로운 방식으로 이루어질 수 있는지를 깨달은 순간이었다.

다양한 시도

 모든 일이 그렇듯, 이 토이프로젝트의 여정도 결코 순탄하지만은 않았다. 처음에는 단순한 아이디어였지만, 서비스 구현을 위해 awesome-devblog 관리자로부터 기술블로그 작성자들의 RSS 주소를 사용해도 되는지 허락을 구하는 것부터 시작했다. 사용자 수가 점점 늘어나면서 또 다른 문제가 생겼다. 기존에 사용하던 구글 API의 메일 발송 건수 제한에 부딪히게 된 것이다. 결국 이를 해결하기 위해 비용을 감수하면서도 AWS SES를 도입하게 되었다.

 매일 오전 10시를 목표로 메일을 발송했지만, 데이터 수집과 메일 발송 로직이 함께 실행되는 구조로 인해 발송이 지연되는 일이 잦았다. 고민 끝에 수집과 발송의 로직을 완전히 분리해 지연을 줄였고, 그럼에도 불구하고 늘어나는 구독자 수로 인해 발송 시간이 계속 느려지자 결국 스레드를 활용해 병렬로 발송하는 로직까지 추가하게 되었다. 메일 발송 시간을 오전 11시를 넘기지 않기 위해, 보이지 않는 치열한 싸움을 벌였던 기억이 난다. 그러던 중 마침 매년 개최되는 파이콘(파이썬 컨퍼런스)에 참석할 기회가 생겼다. 첫날 행사에서 5분 내외로 진행되는 발표 세션인 라이트닝 토크 세션에 지원하여, 처음으로 많은 사람들 앞에서 나의 프로젝트를 소개할 수 있는 뜻깊은 경험을 얻기도 했다.

/images/toy-project-retrospective-6-years-journey/pycon.png
파이콘 발표시절(아아.. 세월이여)

 한편, 구독자 수가 늘어나면서 수익화에 대한 고민도 자연스레 따라왔다. 이런 고민을 어떻게 알았는지 여러 곳에서 사업 제안이 들어왔지만, 현실적인 여러 가지 이유로 인해 결국 진행하지 못하고 정중하게 거절할 수밖에 없었다. 서비스 역시 단순히 어제 작성된 글을 모아 보내던 초기 모습에서 점점 발전해 나갔다. 사용자가 주로 선택한 글의 로그를 분석해 매주 인기 글을 선정해 보여주기도 하고, 본문 내용을 분석하여 주요 키워드를 태그로 추출해 메일에 함께 담아 발송하는 등 다양한 시도들을 더했다.

 그야말로 ‘토이 프로젝트’였다. 말 그대로 부담 없이 장난감처럼 만들어가며 새로운 기술과 아이디어를 자유롭게 실험하고 경험하는 것이 목적이었다. 하지만 시간이 흐를수록 구독자는 100명을 넘고, 500명을 넘어서 급기야는 약 7,500명에 이르는 사용자들이 매일 내가 보내는 메일을 기다리게 되었다. 그것도 벌써 6년째. 사용자들이 많아질수록, 그만큼 그들에게 더 나은 가치를 제공해야 한다는 책임감과 부담감도 점점 커져갔다. 그러다 결국, ‘운영의 한계’라는 현실적 벽을 마주하게 된다.  

운영의 한계

 AWS EC2를 처음 발급받아 운영할 땐 모든 게 완벽해 보였다. 단지 crontab에 스크립트 하나 걸어두고, 아침 8시쯤 글을 수집해 10시에 메일을 발송하면 끝이었다. 그러나 현실은 늘 계획보다 드라마틱하다. 구독자가 늘어나 메일 발송 속도가 느려지자, 병렬 처리를 위해 스레드를 도입했는데, 그 결과 메모리 소비량이 폭발적으로 늘어났다. 그러다 종종 서버가 먹통이 되는 경우 생겼다. 그럴 때면 급히 현실 세계(회사 업무, 개인 일정 등)를 핑계 삼아 AWS 콘솔에서 EC2 인스턴스를 ‘수동으로’ 재시작했다. 가끔 메일을 확인하지 못할 때는, 일주일 내내 서버가 식물인간 상태로 방치되기도 했다. 물론 여력이 있었다면 로직 개선이나, 최소한 메모리를 늘리는 간단한 스케일업이라도 했을 텐데, 비용 문제 앞에서 서버 개발자로서의 유난한 자존심(‘최소의 성능으로 최고의 결과를 내보자!’)이 더 앞서곤 했다.

 AWS 프리티어가 제공되는 첫 1년은 부담 없이 잘 버텼지만, 무료의 행복은 정확히 1년 뒤 끝이 났다. 한 달에 약 44달러의 비용이 발생했는데, 처음엔 “개발 생태계에 이 정도는 기부지!“라는 여유로운 마음이었다. 하지만 환율이 올라 최대 월 7만원씩 결제될 때면 슬슬 ‘기부’의 뜻을 다시 검색해보게 됐다. 총 6년 중 무료였던 1년을 빼고, 나머지 5년을 매달 5만원씩만 잡아도 약 300만원이라는 비용이 들었다. 돌이켜보면 ‘토이 프로젝트’라고 부르기엔 지나치게 비싼 장난감이었다. 광고를 붙일 수도 없는 메일 기반의 서비스였고, 작은 ‘후원’ 버튼 하나만 조용히 달아놓았는데, 놀랍게도 6년간 딱 두 분이 만 원 정도를 후원해 주셨다. (이 자리를 빌려 그 두 분께 다시 한번 진심으로 감사의 말씀을 전한다.)

 

/images/toy-project-retrospective-6-years-journey/cost-explorer.png
최근 3년간의 AWS 비용

 비용만이 문제가 아니었다. 내가 만든 서비스를 예상치 못한 방향으로 ‘창의적’으로 활용(?)하는 사람들도 나타났다. 내 서비스와 너무나도 흡사한 기능을 웹사이트 버전으로 만드신 분도 있었고, 본인의 글이 메일 최상단에 나오지 않는다며 ‘공정성’을 따지는 항의 메일을 보내는 분도 계셨다. 심지어 블로그 조회수를 높이려고 일부러 선정적인 제목을 달아 메일 발송 리스트에 끼워넣는 사례도 있었다. 결정타는 지금에 와서야 고백하는 DDoS 공격이었다. 누군가의 열정적인 공격 덕분에 하루 만에 서버 비용이 평소 대비 2~3배 뛰는 놀라운 경험을 했고, 덕분에 공격을 차단하는 기술적 대응법을 ‘돈 주고’ 배울 수 있는 귀한 기회까지 얻었다. ‘토이 프로젝트’라는 이름이 무색할 만큼, 내 프로젝트는 현실적이고도 치열한 경험을 안겨주었다. 하지만 그 모든 사건과 경험이 결국 개발자로서의 나를 한 단계 성장시키는 값비싼 영양제가 되었던 것 같다. (지갑이 가벼워진 만큼, 경험은 확실히 무거워졌다.)

6년의 수확

 이렇게 긴 여정을 지나 돌아보니, 얻은 것이 적지 않다. 수천 명의 구독자, 수많은 기술적 도전과 문제 해결의 경험, 처음으로 사람들 앞에서 발표했던 소중한 기억들까지. 특히 서비스 운영이라는 책임감 속에서 이전에는 경험해보지 못했던 다양한 역량이 자연스레 길러졌다. 예를 들어, 작은 서버 하나의 메모리와 CPU 자원을 효율적으로 관리하는 기술적 노하우, 예외 상황에 신속히 대응하는 위기 관리 능력, 그리고 무엇보다도 ‘끝까지 책임지는 자세’라는 개발자의 근본적인 태도를 깨닫게 되었다.

 이 프로젝트를 통해, 기술은 단지 기능 구현의 도구가 아니라 사람들의 일상과 연결된다는 점을 뚜렷하게 인식하게 됐다. 수많은 사용자들이 매일 아침 습관처럼 이 서비스를 기다렸다는 사실은 기술의 본질과 개발자로서 내가 추구해야 할 방향을 고민하게 만든 가장 큰 수확이었다. 무엇보다, 개인의 작은 아이디어 하나가 충분히 많은 사람들에게 긍정적인 영향을 줄 수 있다는 자신감을 얻었다. 규모는 작아도 명확한 목표를 가지고 꾸준히 운영한다면, 세상을 조금은 더 나은 곳으로 바꿀 수 있다는 믿음을 얻었다. 6년의 긴 여정이었지만, 투자한 시간과 비용보다 훨씬 큰 성취와 배움을 얻었기에 결코 후회되지 않는다. 이 경험들이 앞으로 나의 삶과 커리어에 어떤 방식으로든 밑거름이 될 것임을 확신한다.

마치며

 모든 일에는 끝이 있기 마련이다. 하지만 중요한 것은 그 끝을 어떻게 마무리하느냐에 따라 의미가 달라진다는 점이다. ‘기술 블로그 구독 서비스’라는 나의 토이 프로젝트를 종료하며 느낀 건, 끝이라는 결정이 생각보다 어렵고 힘들지만 그만큼 값진 과정이라는 사실이다.

/images/toy-project-retrospective-6-years-journey/good-bye.png
그동안 고마웠어!
Drawn with chatGPT

 끝을 인정하는 순간, 그동안 보지 못했던 새로운 길이 보이기 시작했다. 오랫동안 운영에 매몰되어 놓쳤던 개인적인 성찰과 앞으로 내가 어떤 개발자가 되고 싶은지에 대한 고민이 비로소 가능해졌다. 이제는 새로운 아이디어와 더 큰 도전을 위한 공간이 생겼고, 이 프로젝트가 나에게 가르쳐준 교훈들을 바탕으로 더 단단하고 성숙한 개발자가 되려 한다. 지금 비슷한 고민을 하고 있는 누군가에게 하고 싶은 말은, 무언가를 끝낸다는 것이 결코 실패가 아니라는 점이다. 오히려 끝내는 용기를 가질 때, 비로소 다음 단계의 성장이 시작된다. 나 역시 이 프로젝트를 종료하며 또 다른 출발점 위에 서 있음을 느낀다.

 마지막으로 이 프로젝트와 함께했던 모든 사용자들에게 깊은 감사를 전한다. 덕분에 성장할 수 있었다. 이제 나는 더 큰 꿈과 새로운 시작을 향해 한 걸음 내딛는다. 이 기록이 누군가에게 작게나마 영감과 용기를 주기를 바라며 이 글을 마친다.