전체 글 63

커플 앱 만들기 (3) — 첫 놀이 룰렛, 그리고 소켓 삽질

이 앱의 핵심 놀이는 룰렛이다. "오늘 뭐 먹지"를 둘이 같이 정하는 거. 근데 그냥 돌림판 돌리는 건 심심하니까, 틴더처럼 카드를 넘기면서 각자 맘에 드는 걸 고르고, 둘 다 좋아한 걸로 정해지는 방식으로 잡았다. 하트 시그널이라고 이름 붙였다.문제는 여기서 내가 욕심을 부렸다는 거다."실시간이면 멋있겠는데?"둘이 같이 고르는 거니까, 실시간으로 하면 좋겠다는 생각이 들었다. 상대가 지금 카드를 넘기는 게 보이고, 둘이 동시에 같은 걸 좋아하면 그 순간 "찌릿!" 하고 매칭 이펙트가 뜨고. 상상하니까 멋있었다.그래서 Socket.IO를 붙였다.접속할 때 JWT로 인증하고커플을 하나의 "방(room)"으로 묶고카드 덱은 서버가 들고 있고둘이 동시에 같은 카드에 Like 하면 매칭 신호를 쏘고양쪽 다 끝나..

커플 앱 만들기 (2) — 두 사람을 하나로 묶기

1화에서 화면부터 목업으로 다 만들었다고 했는데, 이제 그 뒤에 진짜를 붙일 차례다. 커플 앱에서 제일 먼저 풀어야 하는 문제는 명확하다. 두 사람을 어떻게 한 쌍으로 묶느냐. 이게 안 되면 나머지가 다 의미 없다.로그인은 일단 대충소셜 로그인(카카오, 애플)은 나중에 붙이기로 하고, 개발 단계에선 닉네임만 넣으면 계정이 생기는 개발용 로그인으로 갔다. 여기에 목매달 이유가 없다. 어차피 나중에 갈아끼울 거고, 지금 중요한 건 "로그인 된 사용자"라는 상태만 있으면 되니까. 토큰은 JWT로 발급하고, 앱에선 shared_preferences에 저장해뒀다가 다음에 켤 때 자동 로그인시켰다. 이거 하나 해두니까 개발하면서 매번 로그인하는 짜증이 사라졌다. 작지만 삶의 질이 확 올라가는 부분.진짜 문제는 페..

커플 앱 만들기 (1) — 왜 하필 커플 앱이었나 [1인 개발 개발일지]

결론부터 말하면, 나는 커플 앱을 하나 만들었다. 이름은 룸메이트. 이게 최종 결과물이다. 기획부터 디자인, 프론트, 백엔드, 실제 지도 API 연동까지 전부 혼자 했다. 이 시리즈는 이걸 어떻게 만들었는지, 그리고 만들면서 커플 앱이라는 제품에 대해 뭘 배웠는지를 정리하는 개발 일지다. 기능을 열 개 넘게 붙이고, 중간에 방향을 크게 한 번 틀었던 과정까지 담을 거다. 일단 1화는 어쩌다 이걸 만들기 시작했는지부터.시작은 "뭐 먹지"였다커플이 제일 자주 하는 싸움이 뭘까. 나는 "오늘 뭐 먹지"라고 본다. 진짜 별거 아닌데 서로 "아무거나~" 하다가 은근히 신경전 되는 그거. 어디 갈지, 주말에 뭐 할지도 마찬가지고.이걸 앱으로 풀면 재밌겠다는 생각이 출발점이었다. 근데 시중에 커플 앱은 이미 많다. ..

[Midnight 스터디 카페 #15] 배포 웹에서 바로 실행 가능한 스터디카페 (무료)

🌧️ 비 오는 밤, 같이 공부하는 스터디 카페웹에서 바로 실행 · 설치 없이 접속▶ Midnight 스터디 카페 접속하기 내 컴퓨터 밖으로모든 게 준비됐는데 딱 하나가 남아 있었습니다. 지금까지 만든 이 게임은 오직 제 컴퓨터 안에서만 돌아갔어요. 브라우저 주소창에 적힌 건 남에게는 아무 의미 없는 로컬 주소였습니다. 친구에게 보내도 열리지 않아요. 세상에 없는 것과 마찬가지였습니다.마지막 관문은 배포였어요. 인터넷 어딘가의 컴퓨터에 이 게임을 올리고, 누구나 접속할 수 있는 진짜 주소를 붙이는 일. 이 편은 그 과정에서 만난 세 번의 막힘과, 그걸 하나씩 풀어 마침내 공개 주소를 손에 넣은 이야기입니다.한 덩어리로 올리기로이 프로젝트는 클라이언트와 서버가 나뉘어 있습니다. 보통은 이 둘을 각각 다른 ..

[Midnight 스터디 카페 #14] 거대 앱과 싸우지 않고 이기는 법 — 빈자리, 그룹 락인, 그리고 인증 카드

이길 수 없는 상대와 마주 서다안쪽을 단단하게 다지고 나니, 이제 냉정하게 봐야 할 것이 남았습니다. 이 카페가 서 있는 골목에는 이미 거대한 가게들이 있어요. 시간을 아주 정밀하게 재주는 가게, 카메라를 켜고 서로 감시하는 가게, 나무를 키우며 혼자 집중하게 하는 가게. 저마다 수백만 명의 단골을 데리고 있고, 손님들의 기록과 친구가 그 안에 차곡차곡 쌓여 있습니다.이런 상대와 같은 방식으로 겨루는 건 어리석은 일이에요. 시간 측정이 더 정확하다고, 감시가 더 빡세다고 외쳐봐야 이미 익숙해진 가게를 떠날 이유가 되지 못하니까요. 그래서 저는 질문을 바꿨습니다. 이 거대한 가게들이 안 하는 것, 못 하는 것은 무엇인가.정면 승부를 피한다는 건 도망이 아닙니다. 상대가 세워둔 강점의 축을 슬쩍 비켜서, 내..

[Midnight 스터디 카페 #13] 혼자선 멀쩡한데 같이 두면 2배가 된다 — 유령 버그, 오염된 장부, 그리고 호이스팅

혼자선 멀쩡한데 같이 두면 이상해진다카페가 제법 단단해졌다 싶어, 점검 항목을 여러 개 만들어 한꺼번에 돌려보던 날이었습니다. 그런데 이상한 걸 봤어요. 점검을 하나만 돌리면 아무 문제 없이 통과하는데, 전부 함께 돌리면 실패하는 겁니다.연속 출석이 2가 나와야 할 자리에 4가, 그룹 합계가 75가 나와야 할 자리에 150이 찍혔어요. 정확히 두 배. 이 숫자가 첫 번째 단서였습니다. 무언가가 두 배라는 건, 보통 같은 일이 두 번 일어났다는 뜻이니까요. 어딘가에서 기록이 중복으로 쌓이고 있었습니다. 범인이 누구냐, 그게 문제였어요.버그를 잡는 일은 종종 추리와 닮았습니다. 눈앞의 이상한 현상은 결과일 뿐이고, 진짜 원인은 전혀 엉뚱한 곳에 숨어 있거든요. 이번 사건이 딱 그랬습니다.첫 번째 용의자 — ..

[Midnight 스터디 카페 #12] 두꺼비집을 내려도 기억은 남는다 — 크래시, 60초 저장, 그리고 SIGKILL

가장 무서운 건 손님이 아니었다진상 손님을 다 막고 나니 마음이 놓이는 듯했습니다. 그런데 곰곰이 생각해보니, 이 카페에서 가장 끔찍한 사고는 나쁜 손님이 아니었어요. 아무 잘못 없이 두 시간을 성실하게 앉아 공부하던 손님이, 어느 순간 자기 기록이 통째로 사라진 걸 발견하는 것. 그게 진짜 재앙이었습니다.서버는 언젠가 반드시 죽어요. 새 기능을 올리다가, 메모리가 부족해서, 클라우드가 서버를 옮기면서. 문제는 죽느냐 마느냐가 아니라 죽는 순간에 무엇을 잃느냐였습니다. 카페로 치면 갑자기 정전이 됐을 때, 손님들이 오늘 쌓아온 게 촛불 꺼지듯 사라지느냐 마느냐의 문제였어요.이번 편의 목표는 딱 하나였습니다. 언제 불이 꺼져도 손님의 하루가 남아 있게 만들 것. 그리고 저는 이걸 말로만 다짐하지 않고, 실..

[Midnight 스터디 카페 #11] 손님의 말은 믿지 않는다 — 순간이동, 이름표 도둑, 그리고 도배범

카페에 진상 손님이 나타났다기능이 어느 정도 쌓이자 문득 무서운 상상이 하나 들었습니다. 이 카페에 나쁜 마음을 먹은 손님이 들어오면 어떻게 될까. 공부 시간이 곧 순위이고 재화인 이 게임에서, 누군가 그 숫자를 마음대로 부풀릴 수 있다면 성실하게 앉아 있던 사람들은 전부 바보가 되어버리잖아요.그래서 저는 잠시 개발자를 멈추고 진상 손님이 되어보기로 했습니다. 이 카페를 어떻게 하면 망가뜨릴 수 있을까. 상상해보니 손님이 세 명 떠올랐어요. 순간이동하는 사람, 남의 자리를 훔치는 사람, 그리고 고래고래 소리 지르는 사람. 이번 편은 이 셋을 하나씩 문 앞에서 돌려보내는 이야기입니다.이 게임의 규칙은 딱 한 줄로 정리됩니다. 손님이 하는 말은 일단 안 믿는다. 앉았다고 하면 정말 앉았는지 확인하고, 여기까..

[Midnight 스터디 카페 #10] 내일 또 오게 만드는 법 — 스트릭, 칭호, 그리고 서사

오늘 재밌었다고, 내일 오는 건 아니다지난 편에서 재화에 쓰는 재미를 붙였습니다. 그런데 게임을 만들다 보면 잔인한 진실을 하나 마주하게 돼요. 오늘 두 시간 재밌게 논 사람이, 내일은 그냥 안 옵니다. 재미와 재방문은 별개거든요.스터디 앱이라면 이건 더 치명적입니다. 공부는 원래 하기 싫은 거고, 하루 빠지면 그다음 날 다시 앉기가 두 배로 힘드니까요. 그래서 이번 편의 숙제는 명확했습니다. 사람을 매일 돌아오게 만드는 것. 리텐션이라고 부르는, 사실상 서비스의 진짜 싸움이요.끊기면 아까운 것 — 스트릭리텐션 장치 중에 검증된 최강자가 있습니다. 연속 출석, 스트릭이에요. 듀오링고가 이거 하나로 먹고산다고 해도 과언이 아니고, 열품타 유저들도 연속 기록 끊기는 게 무서워서 자정 직전에 접속합니다.원리는..

[Midnight 스터디 카페 #9] 싸이월드 도토리에서 배운 것 — 재화를 쓰는 재미

시즌 2를 시작하며지난 편으로 시즌 1이 끝났습니다. 로컬에서 완전히 돌아가는 스터디 카페가 완성됐죠. 앉아서 공부하고, 원두를 벌고, 옆 사람과 순위를 다투는 것까지요.시즌 2는 이 카페를 진짜 서비스로 키우는 이야기입니다. 배포도 그중 하나지만, 그건 좀 뒤로 미뤘어요. 실제로 인터넷에 올려보고 나서 후기를 써야 진짜배기가 나오니까요. 대신 시즌 2는 다른 질문에서 출발합니다. 사람들이 이걸 계속 쓰게 만들려면 뭐가 필요한가.그 첫 번째 답이 오늘 이야기입니다. 재화를 쓰는 재미요.벌기만 하는 게임은 시든다지금까지 원두는 쌓이기만 했습니다. 좌석 업그레이드에 조금 쓰긴 했지만, 그걸 다 하고 나면 원두는 그냥 늘어나는 숫자였어요. 통장 잔고가 쌓이기만 하고 쓸 데가 없으면 흥미를 잃는 것과 똑같습니다..