[오늘가챠] 카드 강화 시스템 설계 - 확률과 골드 소모의 밸런스
·
◈ Yermi Project/오늘가챠🃏
가챠로 카드를 뽑는 것만으로는 유저가 카드에 애착을 가지기 어렵습니다. 뽑기 → 수집으로 끝나면 금방 지루해지죠. "이 카드를 키우고 싶다"는 동기 부여가 필요했고, 그래서 카드 강화(Enhance) 시스템을 도입했습니다. 설계할 때 가장 고민했던 포인트는 두 가지입니다:확률 설계: 무조건 성공이면 긴장감이 없고, 확률이 너무 낮으면 유저가 이탈한다.경제 밸런스: 골드 소모량이 레벨에 비례해야 하지만, 초반 유저가 부담 없이 시도할 수 있어야 한다. 강화 시스템의 핵심은 딱 두 줄의 공식입니다:// 강화 비용: 현재 레벨 × 100 골드int cost = card.getLevel() * 100;// 성공 확률: 레벨이 오를수록 10%씩 감소, 최소 10% 보장double successRate = Mat..
[오늘가챠] 프론트엔드 UI/UX 디테일 다듬기 (카드 상세 및 레이드)
·
◈ Yermi Project/오늘가챠🃏
가챠(뽑기) 게임에서 가장 중요한 경험은 "카드를 획득하고 수집품을 감상하는 순간"입니다. 초기 프론트엔드 UI는 카드의 기본 정보만 단순히 텍스트로 나열하는 밋밋한 구조였습니다. 특히, 레이드 시스템과 피로도(스태미나/소진) 시스템이 추가되면서 카드의 상태를 직관적으로 유저에게 전달할 필요가 생겼습니다. React 컴포넌트(CardDetail, CardFaces, ActionSheet)를 재설계하여 정보의 밀도와 시각적 피드백을 강화했습니다.1. 카드 피로도(소진) 상태 시각화카드가 레이드에 참여하여 피로도가 소진되었을 때, 텍스트("소진됨")로만 표시하는 대신 흑백 처리나 게이지바를 도입했습니다.// CardFaces.jsx 내의 렌더링 로직 일부const isExhausted = card.isEx..
[Error Note] QueryCreationException - 레거시 컬럼 청산 후 서버가 안 뜰 때
·
◈ Study/에러노트(Error Note)🧱
초기 기획 변경으로 인해 User 엔티티의 email, Card 엔티티의 isFavorite 등 더 이상 사용하지 않는 더미 컬럼들이 방치되어 있었습니다. 기술 부채(레거시)를 청산하기 위해 엔티티에서 해당 필드들을 삭제하고, schema.sql에서도 제거한 뒤 Render에 배포를 진행했습니다. 하지만 배포 후 서버가 500 에러를 뱉으며 뜨지 않는 크리티컬 이슈가 발생했습니다.로그(Log)를 확인해 본 결과, Spring Boot 구동 중 Context Load 단계에서 아래와 같은 예외가 쏟아졌습니다.Caused by: org.springframework.data.repository.query.QueryCreationException: Could not create query for public a..
[오늘가챠] 유저 리텐션을 높이는 일일 의뢰와 쿨타임 설계
·
◈ Yermi Project/오늘가챠🃏
가챠 게임에서 가장 중요한 지표 중 하나는 리텐션(재방문율)입니다. 유저들이 매일 접속할 명분을 제공하기 위해 두 가지 시스템을 기획했습니다.무료 뽑기 쿨타임: 스태미나가 다 떨어져도 일정 시간마다 주어지는 무료 기회오늘의 의뢰(Daily Bounty): 매일 새롭게 주어지는 미션 (예: '동물 테마 사진 3장 뽑기')이러한 시간 의존적(Time-dependent) 상태들을 데이터베이스에 어떻게 저장하고, 서버와 클라이언트 간의 시차 문제를 어떻게 해결할지가 중요한 아키텍처 과제였습니다.1. 무료 뽑기 (쿨타임 기반 충전 로직)스태미나가 소진된 상태(isExhausted)를 단순히 boolean으로 관리하지 않고, 만료 일시(exhaustedUntil) 필드를 사용했습니다.// User.javapriva..
[오늘가챠] 가챠 배너 확장성 확보하기: Strategy & Factory Pattern
·
◈ Yermi Project/오늘가챠🃏
초기 오늘가챠 시스템의 뽑기(Gacha) 로직은 단일 엔드포인트와 단일 비즈니스 로직으로 구현되어 있었습니다. 모든 카드를 동일한 확률로 뽑고, 고정된 재화(Stamina)를 소모하는 형태였습니다. 하지만 서비스가 고도화되면서 다음과 같은 기획 요구사항이 추가되었습니다:일반 배너 (Normal): 전체 풀에서 뽑기소셜 배너 (Social): 친구가 올린 사진 위주의 뽑기테마 배너 (Theme): 동물, 풍경, 음식 등 특정 테마 카드만 등장하는 한정 배너이 요구사항을 기존 CardService에 if-else나 switch 문으로 전부 쑤셔넣으면 코드가 매우 비대해지고, 새로운 배너가 추가될 때마다 핵심 도메인 로직을 수정해야 하는 문제(OCP 위배)가 예상되었습니다. 이러한 문제를 해결하기 위해 객체..
[도서리뷰] 실전 AX 리포트 - AI는 도입했는데, 왜 아무도 쓰지 않을까?
·
◈ 공부모임/나는 리뷰어다🌾
한빛미디어 서평단 활동을 위해서 책을 협찬 받아 작성된 서평입니다. 챗GPT 계정은 전 직원에게 나눠줬는데, 왜 회사는 그대로일까? 요즘 저는 코드를 짤 때 AI 도구부터 켭니다. 개인 차원에서는 이미 AI 없이 일하던 시절로 돌아가기 어렵습니다. 그런데 시선을 회사 단위로 올리면 풍경이 달라집니다. 도입 공지가 올라오고 교육이 한 번 돌고 나면 그걸로 끝. 석 달 뒤 사용 현황을 열어 보면 숫자가 처참한 경우가 많습니다. SI 업계에 있다 보니 이런 장면을 회사 안팎에서 봅니다. 고객사 제안요청서에는 어느새 AI 활용이 기본 항목으로 들어와 있는데 정작 도입 이후의 이야기를 해 주는 자료는 드뭅니다. 컨설팅 보고서는 너무 높이 날고 유튜브 후기들은 개인기에 가깝습니다. 조직 단위로 AI가 자리 잡는 ..
[강의리뷰] 혼자 공부하는 바이브 코딩 with 클로드 코드 - 매일 쓰는 도구인데, 왜 절반만 쓰고 있었을까?
·
◈ 공부모임/나는 리뷰어다🌾
한빛미디어 서평단 활동을 위해서 강의를 협찬 받아 작성된 리뷰입니다. 터미널에 claude를 입력하는 사람은 많아졌는데,이 도구를 끝까지 써 본 사람은 얼마나 될까? 지난 1년 사이 제 개발 일과에서 가장 오래 머무는 창이 에디터에서 터미널로 바뀌었습니다. 클로드 코드에게 일을 맡기고 결과를 검토하는 시간이 직접 타이핑하는 시간보다 길어졌거든요. 그런데 돌아보면 쓰는 기능은 늘 쓰던 것뿐이었습니다. 대화하고 파일을 고치게 하고 커밋을 시키고. 그게 전부였어요. 이 강의는 '혼자 공부하는' 시리즈의 첫 AI 코딩 입문서인 를 쓴 조태호 님이 직접 만든 강의판입니다. 저자는 인디애나대학교 의과대학에서 일하는 의료 AI 연구자이고 『모두의 딥러닝』을 네 번 개정하며 오래 사랑받아 온 분이기도 합니다. 소개 ..