빌드

창업과 자동화 기록 – 아이디어에서 실험, 실패, 수정까지

Lightsail 인스턴스 업그레이드 삽질기 — 512MB에서 2GB로, 생각보다 험난했던 여정

— 512MB에서 2GB로, 생각보다 험난했던 여정 시작은 단순했다 choviet.chat은 베트남 커뮤니티를 위한 서비스다. 당근마켓처럼 중고거래, 질문답변, 자유게시판이 있다. 그런데 서버가 512MB RAM이었다. MVP라서 작게 시작했지만, 아무리 MVP라도 512MB는 너무 작았다. 이미지 업로드, 검색, 실시간 알림까지 생각하면 최소 1~2GB는 필요했다. “업그레이드하자.” 단순한 결정이었다. 그런데 Lightsail은 단순하지 않았다. Lightsail의 불편한 진실 AWS Lightsail에서는 인스턴스를 직접 업그레이드할 수 […]

Lightsail 인스턴스 업그레이드 삽질기 — 512MB에서 2GB로, 생각보다 험난했던 여정 더 읽기"

모바일에서만 회원가입이 안 됐던 이유 — 422 에러의 진짜 원인은 SSL이었다

— 422 에러의 진짜 원인은 SSL이었다 증상은 단순했다 PC에서는 회원가입이 잘 됐다. 그런데 모바일에서 가입 버튼을 누르면 이런 메시지가 떴다. 422 Unprocessable Entity “The change you wanted was rejected.” 같은 서버, 같은 코드, 같은 폼. 왜 모바일에서만? 처음엔 흔한 용의자들을 의심했다 Rails에서 422 에러가 나면 보통 이런 것들을 먼저 본다. CSRF 토큰 문제? Turbo가 뭔가

모바일에서만 회원가입이 안 됐던 이유 — 422 에러의 진짜 원인은 SSL이었다 더 읽기"

CI는 고쳐야 할 문제가 아니라, 말을 걸어오는 방식이다

배포가 성공했다는 건, 사실 끝이 아니라 시작이다. 특히 혼자 만들고, 혼자 배포하고, 혼자 책임지는 프로젝트라면 더 그렇다. healthnote는 며칠 전 무사히 프로덕션에 올라갔다. 도메인도 붙었고, 모바일에서도 접속된다. 겉으로 보면 “이제 되는 것처럼” 보인다. 하지만 진짜 일은 그다음부터 시작됐다. CI가 말을 걸어오기 시작했기 때문이다. “로컬에서는 되는데요?” CI 에러의 시작은 늘 이 문장이다. 로컬에서는 되는데요? 이번에도 그랬다.

CI는 고쳐야 할 문제가 아니라, 말을 걸어오는 방식이다 더 읽기"

배포 이후, 앱은 살아 있었고 나는 다시 사용자로 돌아왔다

— 늦깎이 건강노트 개발일지 4화 오늘 나는 오랜만에 “이게 정말 끝났구나”라는 감각을 느꼈다. 물론, 개발은 끝나지 않았다. 하지만 ‘서버 에러와 싸우는 시간’은 끝났고, 이제는 ‘앱을 쓰는 사람’의 자리로 돌아올 수 있게 됐다. 배포는 성공했지만, 마음은 아직 안심이 안 됐다 며칠 전 Senior HealthNote는 분명히 배포에 성공했다. Kamal, Docker, PostgreSQL, Solid Cache/Cable/Queue… Rails 8이 요구하는 것들을

배포 이후, 앱은 살아 있었고 나는 다시 사용자로 돌아왔다 더 읽기"

지금, 나는 어디까지 와 있는가

— 아직 멀었지만, 분명 출발선은 지났다 이 질문을 스스로에게 던지기까지 조금 시간이 걸렸다. “지금, 나는 어디까지 와 있는가?” 이 질문은 묘하다. 잘 되고 있을 때는 잘 떠오르지 않고, 조금 지쳤을 때 조용히 고개를 든다. 완성된 서비스는 없다 먼저 솔직하게 말하자면, Senior HealthNote는 완성된 서비스가 아니다. 기능은 아직 비어 있는 곳이 많고 디자인은 계속 바뀌고 있으며

지금, 나는 어디까지 와 있는가 더 읽기"

서버 에러 속에서 깨달은 것들

— 배포가 무너질 때, 생각도 같이 무너졌다 솔직히 말하면, Senior HealthNote의 개발 과정에서 가장 많이 본 화면은 서비스 화면이 아니라 에러 로그였다. 검은 화면, 빨간 글자, 그리고 익숙해질 듯 말 듯한 영어 문장들. 처음엔 화가 났고, 그 다음엔 자괴감이 왔다. “내가 이걸 왜 하고 있지?” “지금 이 나이에 이게 맞나?” 에러는 항상 새벽에 찾아왔다 낮에는

서버 에러 속에서 깨달은 것들 더 읽기"

나는 왜 Senior HealthNote를 만들기 시작했을까

— 건강 앱이 아니라, ‘내 몸을 이해하는 노트’가 필요했던 이유 병원에서 검진 결과지를 받아 들고 나오던 날을 아직도 기억한다. 숫자는 빼곡했고, 항목은 많았지만 정작 “그래서 지금 나는 어떤 상태인가요?”라는 질문에는 아무도 답해주지 않았다. “수치는 조금 높네요.” “관리하셔야 합니다.” 그 말은 늘 같은데, 몸은 매번 다르게 반응했다. 숫자는 많은데, 맥락은 없었다 혈액검사표, 처방전, CT 결과지, 그리고

나는 왜 Senior HealthNote를 만들기 시작했을까 더 읽기"

며칠을 서버와 싸웠다 — Rails 8 배포 삽질 기록

“이번엔 금방 되겠지.” 배포는 늘 이렇게 시작된다. 그리고 늘 같은 문장으로 끝난다. “아, 또 이거네…” 이번 배포는 Senior HealthNote. 건강 기록 앱이다. 작은 서비스 하나 올리는 일이었지만, 결과적으로는 며칠간의 전쟁이었다. Rails 8, Kamal, Docker, PostgreSQL. 하나씩 나를 배신했다. 하나씩 다시 붙잡았다. 1. DATABASE_URL의 배신 URI::InvalidURIError: the scheme postgresql does not accept registry part 에러 메시지가

며칠을 서버와 싸웠다 — Rails 8 배포 삽질 기록 더 읽기"

Choviet 빌드 로그 8화: 세상에 문을 연다

만들기만 하면 뭐하나. 세상에 내놓아야 한다. 서랍 속 원고는 소설이 아니다. 서버에 안 올린 앱은 앱이 아니다. 배포 무서운 단어다. 코드가 내 컴퓨터를 떠나서, 인터넷 어딘가에 살게 된다. 누구나 접속할 수 있다. 누구나 내 실수를 볼 수 있다. 그래도 해야 한다. Render.com Heroku 무료가 사라진 뒤, 가장 좋은 대안. 무료 티어가 있다. PostgreSQL도 무료. GitHub

Choviet 빌드 로그 8화: 세상에 문을 연다 더 읽기"

Choviet 빌드 로그 7화: 안전장치를 만든다

앱이 커지면, 나쁜 사람도 온다. 사기꾼, 스팸, 불쾌한 메시지. 이걸 막을 방법이 필요하다. 신고 기능 이상한 사람을 만나면, 신고 버튼을 누른다. 신고가 쌓이면, 관리자가 확인하고 조치한다. 혼자서 모든 걸 막을 순 없다. 하지만 신고할 수 있어야 한다. 차단 기능 신고보다 간단한 해결책. 그냥 안 보이게 한다. 차단한 사람의 글은 안 보인다. 메시지도 안 온다. 내

Choviet 빌드 로그 7화: 안전장치를 만든다 더 읽기"