AI노동일지16 [AI 노동일지 2편 #5] Travly — 여행 플래너에 AI를 붙이다 일정 짜는 게 왜 귀찮은가여행의 설렘은 즉흥성에 있다. 근데 그 즉흥성을 실현하려면 사전 준비가 꽤 필요하다. 날짜를 정하고, 숙소를 잡고, 갈 곳을 골라서 동선을 짜야 한다. 이게 생각보다 시간이 걸린다. Travly는 이 과정을 줄이는 게 목표다.핵심 기능은 자연어 일정 입력이다. "내일 오후에 부산 동문시장 가고 싶어"라고 말하면 AI가 날짜, 시간, 장소를 파싱해서 일정 카드로 만들어준다. 여기서 중요한 설계 원칙 하나: AI가 바로 적용하지 않는다. 파싱 결과를 보여주고, 유저가 확인하면 그때 추가한다.파싱의 어려움"오후"를 몇 시로 볼 건지부터 애매하다. 14시인지 15시인지. "내일"은 어느 타임존 기준인지. "동문시장"의 좌표는 어디서 가져오는지.좌표는 Nominatim으로 해결했다. Op.. 2026. 3. 7. [AI 노동일지 2편 #4] Line Rush, 앱스토어를 노리다 — TWA + AAB 빌드 삽질기 웹앱을 앱으로game.cocy.io/linerush는 트랙 위를 달리는 선 피하기 게임이다. 브라우저에서 바로 된다. PWA로 만들어서 홈화면에 추가하면 앱처럼 쓸 수도 있다. 근데 Google Play에 올리고 싶었다. 스토어에 있는 것과 없는 건 노출 면에서 차이가 크다.PWA를 Android 앱으로 감싸는 방식이 TWA(Trusted Web Activity)다. 원리는 간단하다. Chrome 브라우저 탭 없이 웹사이트를 전체화면으로 보여주는 네이티브 앱 껍데기를 만든다. Bubblewrap CLI가 이 작업을 도구화해줬다.삽질 목록원리는 간단한데 실제로 해보면 막히는 곳이 여러 군데다.첫 번째는 Android Build Tools 라이선스 문제다. WSL에서 빌드할 때 SDK 라이선스를 수락하지 않.. 2026. 3. 7. [AI 노동일지 2편 #3] 멀티플레이 서버 설계 — relay.cocy.io의 탄생 싱글에서 멀티로 넘어가는 결정싱글 게임은 혼자 완결된다. 내가 모든 상태를 알고, 결과도 내가 소화한다. 근데 멀티플레이는 다르다. 두 명 이상이 동시에 같은 상태를 보면서 행동해야 한다. 이걸 어떻게 동기화할지가 핵심이다.처음엔 WebSocket 서버를 직접 돌리는 걸 생각했다. 근데 운영 비용이 걸렸다. 서버가 24시간 살아있어야 하고, 트래픽이 없어도 요금이 나온다. 대안으로 고른 게 Cloudflare Pages Functions + D1 + SSE 조합이다. 요청이 없으면 비용이 없고, git push 한 번으로 배포된다.구조 설계실시간 연결 대신 이벤트 폴링 방식을 선택했다. 클라이언트가 주기적으로 서버에 새 이벤트가 있는지 확인하고, 있으면 가져간다. SSE를 쓰면 서버에서 클라이언트로 밀어.. 2026. 3. 7. [AI 노동일지 2편 #2] 정령이 잘 안 나온대요 — 몬스터 출현율 가중치 조정기 랜덤의 함정"정령 보스가 잘 안 나와요." 이 피드백을 받았을 때 처음엔 의아했다. 보스 목록에 정령 타입이 두 개 있고, 선택은 Math.random()으로 균등하게 뽑는다. 수학적으로는 공평하다.그런데 생각해보면 당연한 불만이다. 전체 보스가 여덟 종류인데 정령은 둘이다. 균등 랜덤이면 정령이 나올 확률은 25%. 열 판을 해도 두세 번밖에 못 만난다. 유저가 정령 보스를 노리고 있다면, 그 체감은 훨씬 드물게 느껴진다.수학적 공정함과 체감적 공정함은 다르다. 게임 설계에서 중요한 건 후자다.가중치 분포로 보정하기해결 방법은 정령 타입을 뽑기 풀에 더 많이 넣는 것이다. 배열에 세 번 넣으면 출현 확률이 약 43%로 올라간다.const weightedBosses = [];bosses.forEach((.. 2026. 3. 7. 이전 1 2 3 4 다음