Choviet

베트남 당근마켓 Choviet 빌드 로그

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

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

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

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

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

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

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

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

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

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

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

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

Choviet 빌드 로그 6화: 대화가 시작된다

중고거래의 핵심은 뭘까. 물건? 가격? 아니다. 대화다. “이거 아직 있어요?” “네, 있어요. 언제 만날까요?” 이 대화가 없으면 거래도 없다. 실시간 채팅 보통 채팅은 어렵다. WebSocket, 서버 설정, 복잡한 구조. 하지만 Rails 7에는 Turbo Streams가 있다. 새로고침 없이, 메시지가 실시간으로 나타난다. 마법 같지만, 사실은 Rails가 알아서 해주는 것이다. 구조 Conversation — 대화방 Message — 메시지 판매자와

Choviet 빌드 로그 6화: 대화가 시작된다 더 읽기"

Choviet 빌드 로그 5화: 못생긴 앱을 예쁘게

기능은 만들었다. 하지만 못생겼다. 기본 Rails 화면. 회색, 검정, 링크 파란색. 아무도 쓰고 싶지 않은 모습이다. Tailwind CSS CSS 프레임워크. 클래스 이름만 붙이면 디자인이 된다. <button class=”bg-blue-500 text-white px-4 py-2 rounded”> 버튼 </button> 이렇게 쓰면, 파란 배경에 흰 글씨, 둥근 모서리 버튼이 나온다. 디자이너 없이도 만들 수 있다. 홈 화면 거래글 카드를 나열한다. 사진은 왼쪽,

Choviet 빌드 로그 5화: 못생긴 앱을 예쁘게 더 읽기"

Choviet 빌드 로그 4화: 첫 번째 코드

드디어 코드를 친다. 터미널을 열고, 명령어를 입력한다. rails new choviet -d postgresql 그렇게 프로젝트가 시작됐다. 첫 번째 벽: 데이터베이스 PostgreSQL. 이름부터 어렵다. 설치하고, 설정하고, 연결하고. 에러가 났다. 다시 했다. 또 에러. 삽질이라는 건 이런 거구나. 결국 됐다. 몇 시간 걸렸는지 모르겠다. 사용자 인증: Devise 회원가입, 로그인. 직접 만들면 일주일이다. 그래서 Devise를 쓴다. gem ‘devise’ rails

Choviet 빌드 로그 4화: 첫 번째 코드 더 읽기"

Choviet 빌드 로그 3화: 코드 전에 그림을 그린다

코드를 치기 전에, 그림을 그려야 한다. 와이어프레임. 설계도 같은 것이다. 집을 지을 때 청사진 없이 벽돌부터 쌓지 않듯, 앱도 마찬가지다. 4개 화면, 하나씩 그려본다 1. 홈 화면 거래글이 카드 형태로 쭉 나열된다. 사진, 제목, 가격, 위치. 스크롤하면 더 나온다. 단순하게. 직관적으로. 2. 글쓰기 사진 올리고, 제목 쓰고, 가격 적고, 설명 넣는다. 버튼 하나 누르면 끝.

Choviet 빌드 로그 3화: 코드 전에 그림을 그린다 더 읽기"

Choviet 빌드 로그 2화: 4개 화면, 1개 동네

MVP. Minimum Viable Product. “최소한으로 작동하는 제품.” 처음엔 이 말이 와닿지 않았다. 최소한이라니. 제대로 만들어야 하는 거 아닌가. 하지만 깨달았다. 완벽한 건 영원히 안 나온다. 10개 기능을 다 만들다가 1년이 지나고, 결국 아무것도 세상에 못 내놓는다. 그게 더 무섭다. 그래서 정했다. 4개 화면으로 시작한다. 홈 화면 — 거래글 목록 글쓰기 — 물건 올리기 상세 페이지

Choviet 빌드 로그 2화: 4개 화면, 1개 동네 더 읽기"

Choviet 빌드 로그 1화: 다섯 개의 벽

앱을 만들기 전에, 먼저 문제를 봐야 한다. 한국에 사는 베트남 사람들. 그들이 중고거래를 할 때 부딪히는 벽은 무엇인가. 나는 다섯 가지를 발견했다. 1. 언어의 벽 당근마켓은 한국어다. 번역기를 돌려도 어색하다. “직거래 가능하세요?” “네고 되나요?” 이런 말들이 그들에겐 외계어다. 언어가 막히면, 거래도 막힌다. 2. 신뢰의 벽 서로 얼굴을 모른다. 사기를 당해도 어디에 말할 수 없다. 한국인끼리도

Choviet 빌드 로그 1화: 다섯 개의 벽 더 읽기"