<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>심플리디벨로 (Simplidevelo) - AI로 앱개발하기</title>
    <link>https://simplidevelo.tistory.com/</link>
    <description>1) 특허기술분류 AI 서비스 개시!
2) 코딩 초보의 게임 개발기
출시게임 [닷디펜스] https://play.google.com/store/apps/details?id=com.SimpliDevelo.DOTDefense</description>
    <language>ko</language>
    <pubDate>Thu, 28 May 2026 22:45:49 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>simplidevelo</managingEditor>
    <image>
      <title>심플리디벨로 (Simplidevelo) - AI로 앱개발하기</title>
      <url>https://tistory1.daumcdn.net/tistory/7835567/attach/38571339383649149e3ca183d3858cf9</url>
      <link>https://simplidevelo.tistory.com</link>
    </image>
    <item>
      <title>AI로 특허 기술 분류하기!</title>
      <link>https://simplidevelo.tistory.com/17</link>
      <description>&lt;div class=&quot;container&quot;&gt;
&lt;div class=&quot;hero&quot;&gt;
&lt;div class=&quot;hero-eyebrow&quot;&gt;특허 사무소를 위한 AI 도구&lt;/div&gt;
&lt;h1&gt;특허 1,000건 분류,&lt;br /&gt;직접하면 &lt;i&gt;며칠걸릴 작업, &lt;/i&gt;&lt;/h1&gt;
&lt;h1&gt;&lt;i&gt;AI로 빠르게 해결하세요!&lt;/i&gt;&lt;/h1&gt;
&lt;p class=&quot;hero-lead&quot; data-ke-size=&quot;size16&quot;&gt;특허 작업 파일 그대로 업로드하세요. 노이즈 제거부터 기술 분류까지!&amp;nbsp; 원하는 기준 그대로, 판단 사유까지 함께 정리해 엑셀파일로 전달합니다. 최종 리뷰만 하면 끝.&lt;/p&gt;
&lt;div class=&quot;hero-actions&quot;&gt;&lt;a class=&quot;btn-primary&quot; href=&quot;https://ai-classifier.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;무료로 체험하기 &amp;rarr;&lt;/a&gt; &lt;span class=&quot;btn-ghost&quot;&gt;특허 20건까지 무료제공이니 바로 결과를 테스트 해보세요!&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;stats&quot;&gt;
&lt;div class=&quot;stats-grid&quot;&gt;
&lt;div class=&quot;stat-item&quot;&gt;&lt;span class=&quot;stat-number&quot;&gt;80%&lt;/span&gt;
&lt;div class=&quot;stat-desc&quot;&gt;검토 시간 단축&lt;br /&gt;수일 &amp;rarr; 수시간&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;stat-item&quot;&gt;&lt;span class=&quot;stat-number&quot;&gt;1/10&lt;/span&gt;
&lt;div class=&quot;stat-desc&quot;&gt;비용 절감&lt;br /&gt;외부 인력 대비&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;stat-item&quot;&gt;&lt;span class=&quot;stat-number&quot;&gt;99%&lt;/span&gt;
&lt;div class=&quot;stat-desc&quot;&gt;일관된 기준&lt;br /&gt;사람마다 다르지 않게&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;section&gt;
&lt;div class=&quot;section-label&quot;&gt;문제 인식&lt;/div&gt;
&lt;h2 class=&quot;section-title&quot; data-ke-size=&quot;size26&quot;&gt;특허 분류, 지금 어떻게 하고 계신가요?&lt;/h2&gt;
&lt;p class=&quot;section-body&quot; data-ke-size=&quot;size16&quot;&gt;IP 실사, 포트폴리오 분석, 기술 동향 조사 &amp;mdash; 이 모든 업무의 시작은 특허 분류입니다. 하지만 수백, 수천 건의 특허를 한 건씩 읽고 판단하는 수작업 방식은 시간도, 비용도 너무 많이 소모합니다.&lt;/p&gt;
&lt;div class=&quot;compare-grid&quot;&gt;
&lt;div class=&quot;compare-card before&quot;&gt;
&lt;div class=&quot;compare-label&quot;&gt;기존 방식&lt;/div&gt;
&lt;ul class=&quot;compare-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;직접 한 건씩 수작업 검토&lt;/li&gt;
&lt;li&gt;사람마다 분류 기준이 달라짐&lt;/li&gt;
&lt;li&gt;판단 근거 문서화에 별도 시간 소요&lt;/li&gt;
&lt;li&gt;대량 건 처리 시 외부 인력 필요&lt;/li&gt;
&lt;li&gt;업무 몰림 시 오류율 상승&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;compare-card after&quot;&gt;
&lt;div class=&quot;compare-label&quot;&gt;AI Classifier&lt;/div&gt;
&lt;ul class=&quot;compare-list&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;목록 업로드만으로 AI가 즉시 처리&lt;/li&gt;
&lt;li&gt;사용자 기준 그대로 일관되게 분류&lt;/li&gt;
&lt;li&gt;판단 사유 자동 정리 &amp;rarr; 리뷰만 진행&lt;/li&gt;
&lt;li&gt;외부 인력 없이 저렴하게 처리&lt;/li&gt;
&lt;li&gt;대량 건도 정확도 동일하게 유지&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;section&gt;
&lt;div class=&quot;section-label&quot;&gt;작동 방식&lt;/div&gt;
&lt;h2 class=&quot;section-title&quot; data-ke-size=&quot;size26&quot;&gt;4단계로 끝납니다&lt;/h2&gt;
&lt;p class=&quot;section-body&quot; data-ke-size=&quot;size16&quot;&gt;복잡한 설정 없이, 기존 파일 형식 그대로 사용하세요.&lt;/p&gt;
&lt;div class=&quot;flow&quot;&gt;
&lt;div class=&quot;flow-step&quot;&gt;
&lt;div class=&quot;flow-num&quot;&gt;1&lt;/div&gt;
&lt;div class=&quot;flow-text&quot;&gt;&lt;b&gt;특허 목록 업로드&lt;/b&gt; &lt;span&gt;엑셀, CSV 등 보유한 형식 그대로 업로드하면 됩니다. 별도 변환 불필요.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;
&lt;div class=&quot;flow-num&quot;&gt;2&lt;/div&gt;
&lt;div class=&quot;flow-text&quot;&gt;&lt;b&gt;분류 기준 설정&lt;/b&gt; &lt;span&gt;원하는 기술 분류 체계를 직접 정의합니다. 업무마다 다른 기준도 그대로 적어주세요.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;
&lt;div class=&quot;flow-num&quot;&gt;3&lt;/div&gt;
&lt;div class=&quot;flow-text&quot;&gt;&lt;b&gt;AI 자동 처리&lt;/b&gt; &lt;span&gt;입력한 기준에 따라 노이즈 특허 제거, 기술 분류, 판단 사유 정리까지 자동으로 완료됩니다.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;
&lt;div class=&quot;flow-num&quot;&gt;4&lt;/div&gt;
&lt;div class=&quot;flow-text&quot;&gt;&lt;b&gt;담당자 빠른 리뷰 &amp;amp; 완료&lt;/b&gt; &lt;span&gt;결과물과 판단 사유를 보며 빠르게 검토 후 승인. 전체 공수가 대폭 줄어듭니다.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;section&gt;
&lt;div class=&quot;section-label&quot;&gt;실제 결과물&lt;/div&gt;
&lt;h2 class=&quot;section-title&quot; data-ke-size=&quot;size26&quot;&gt;&amp;lt;예시&amp;gt; 이런 형태로 결과를 받아보세요&lt;/h2&gt;
&lt;p class=&quot;section-body&quot; data-ke-size=&quot;size16&quot;&gt;특허별 노이즈, 기술 분류, 그리고 AI가 판단한 사유까지 &amp;mdash; 한 눈에 확인하고 바로 리뷰!&lt;/p&gt;
&lt;div class=&quot;table-wrap&quot;&gt;
&lt;div class=&quot;table-header&quot;&gt;&lt;span class=&quot;dot dot-r&quot;&gt;&lt;/span&gt; &lt;span class=&quot;dot dot-y&quot;&gt;&lt;/span&gt; &lt;span class=&quot;dot dot-g&quot;&gt;&lt;/span&gt; &amp;nbsp;AI Classifier 처리 결과 샘플 (배터리 기술 포트폴리오 분석)&lt;/div&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;특허번호&lt;/th&gt;
&lt;th&gt;노이즈 판단&lt;/th&gt;
&lt;th&gt;분류&lt;/th&gt;
&lt;th&gt;판단 사유&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;KR10-2021-00XXXX&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge badge-keep&quot;&gt;유효&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge badge-a&quot;&gt;배터리 소재&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;리튬이온 양극재 조성 관련 청구항 포함
&lt;div class=&quot;reason&quot;&gt;청구항 1, 3항에서 구체적 소재 범위 명시. 핵심 기술 범주에 해당.&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KR10-2019-00XXXX&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge badge-noise&quot;&gt;노이즈&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&amp;mdash;&lt;/td&gt;
&lt;td&gt;분류 기준 외 기술 영역
&lt;div class=&quot;reason&quot;&gt;청구 범위가 반도체 공정에 한정. 배터리 기술과 무관하여 제외.&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KR10-2022-01XXXX&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge badge-keep&quot;&gt;유효&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge badge-b&quot;&gt;BMS 제어&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;배터리 관리 시스템(BMS) 알고리즘 특허
&lt;div class=&quot;reason&quot;&gt;충전/방전 제어 알고리즘 청구항 다수. BMS 제어 분류에 부합.&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KR10-2023-00XXXX&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge badge-keep&quot;&gt;유효&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge badge-a&quot;&gt;배터리 소재&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;전해질 첨가제 관련 신규 조성물
&lt;div class=&quot;reason&quot;&gt;청구항 2항 전해질 안정화 성분 범위 광범위. 핵심 특허 후보.&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KR10-2021-01XXXX&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge badge-keep&quot;&gt;유효&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span class=&quot;badge badge-amber&quot;&gt;열관리&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;배터리팩 냉각 구조 설계 특허
&lt;div class=&quot;reason&quot;&gt;청구항 전반이 셀 배열 및 냉각 채널 구조에 집중. 열관리 분류 적합.&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class=&quot;quote-block&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;예전엔 500건 분류하는 데 이틀이 걸렸습니다. 지금은 AI Classifier로 하루 안에 초안을 완성하고, 담당자가 2시간만에 검토를 끝냅니다.&quot;&lt;/p&gt;
&lt;div class=&quot;quote-attr&quot;&gt;&amp;mdash; 국내 특허법인 IP 분석 담당자&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;section&gt;
&lt;div class=&quot;section-label&quot;&gt;활용 분야&lt;/div&gt;
&lt;h2 class=&quot;section-title&quot; data-ke-size=&quot;size26&quot;&gt;이런 업무에 바로 쓸 수 있습니다&lt;/h2&gt;
&lt;p class=&quot;section-body&quot; data-ke-size=&quot;size16&quot;&gt;특허 분류가 필요한 모든 업무에 적용할 수 있습니다.&lt;/p&gt;
&lt;div class=&quot;flow&quot;&gt;
&lt;div class=&quot;flow-step&quot;&gt;
&lt;div class=&quot;flow-num&quot; style=&quot;background: var(--green-light); color: var(--green);&quot;&gt;✓&lt;/div&gt;
&lt;div class=&quot;flow-text&quot;&gt;&lt;b&gt;IP 실사 (Due Diligence)&lt;/b&gt; &lt;span&gt;M&amp;amp;A&amp;middot;투자 시 대상 기업의 특허 포트폴리오를 빠르게 분석하고 핵심 자산을 선별합니다.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;
&lt;div class=&quot;flow-num&quot; style=&quot;background: var(--green-light); color: var(--green);&quot;&gt;✓&lt;/div&gt;
&lt;div class=&quot;flow-text&quot;&gt;&lt;b&gt;특허 포트폴리오 정리&lt;/b&gt; &lt;span&gt;보유 특허를 기술 분야별로 구조화하고, 유지&amp;middot;포기 대상을 효율적으로 선정합니다.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;
&lt;div class=&quot;flow-num&quot; style=&quot;background: var(--green-light); color: var(--green);&quot;&gt;✓&lt;/div&gt;
&lt;div class=&quot;flow-text&quot;&gt;&lt;b&gt;기술 동향 분석&lt;/b&gt; &lt;span&gt;특정 기술 분야의 특허를 대량 수집&amp;middot;분류해 경쟁사 동향과 기술 트렌드를 파악합니다.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;flow-step&quot;&gt;
&lt;div class=&quot;flow-num&quot; style=&quot;background: var(--green-light); color: var(--green);&quot;&gt;✓&lt;/div&gt;
&lt;div class=&quot;flow-text&quot;&gt;&lt;b&gt;선행기술 조사&lt;/b&gt; &lt;span&gt;출원 전 관련 선행특허를 빠르게 분류하고 핵심 문헌을 추려냅니다.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/section&gt;
&lt;div class=&quot;cta-section&quot;&gt;
&lt;div class=&quot;section-label&quot;&gt;지금 바로 시작하세요&lt;/div&gt;
&lt;h2 class=&quot;section-title&quot; data-ke-size=&quot;size26&quot;&gt;특허 20건, 무료로 체험해 보세요&lt;/h2&gt;
&lt;p class=&quot;section-body&quot; data-ke-size=&quot;size16&quot;&gt;별도 설치 없이 브라우저에서 바로 시작할 수 있습니다.&lt;br /&gt;첫 분류 결과를 받아보는 데 걸리는 시간, 기대 이상으로 빠를 겁니다.&lt;/p&gt;
&lt;div class=&quot;cta-buttons&quot;&gt;&lt;a class=&quot;btn-primary&quot; style=&quot;font-size: 16px; padding: 14px 36px;&quot; href=&quot;https://ai-classifier.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt; ai-classifier.com 무료 체험 &amp;rarr; &lt;/a&gt; &lt;span class=&quot;free-note&quot;&gt;20건까지 무료 &amp;middot; 즉시 시작&lt;/span&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;style&gt;
  *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

  :root {
    --ink: #0f0e0d;
    --ink-2: #3a3835;
    --ink-3: #7a7670;
    --paper: #faf8f4;
    --paper-2: #f0ece4;
    --paper-3: #e4ddd1;
    --accent: #1a4a8a;
    --accent-light: #e8f0fb;
    --accent-mid: #3a6abf;
    --green: #0f6e56;
    --green-light: #e1f5ee;
    --red: #a32d2d;
    --red-light: #fcebeb;
    --amber: #854f0b;
    --amber-light: #faeeda;
    --purple: #534ab7;
    --purple-light: #eeedfe;
    --serif: 'Noto Serif KR', Georgia, serif;
    --sans: 'Noto Sans KR', sans-serif;
  }

  html { scroll-behavior: smooth; }

  body {
    font-family: var(--sans);
    background: var(--paper);
    color: var(--ink);
    line-height: 1.7;
    font-size: 16px;
  }

  nav {
    position: sticky;
    top: 0;
    z-index: 100;
    background: rgba(250,248,244,0.92);
    backdrop-filter: blur(8px);
    border-bottom: 1px solid var(--paper-3);
    padding: 0 2rem;
    display: flex;
    align-items: center;
    justify-content: space-between;
    height: 56px;
  }

  .nav-logo {
    font-family: var(--serif);
    font-size: 16px;
    font-weight: 700;
    color: var(--accent);
    letter-spacing: -0.01em;
    text-decoration: none;
  }

  .nav-cta {
    background: var(--accent);
    color: #fff;
    font-size: 13px;
    font-weight: 500;
    padding: 7px 18px;
    border-radius: 4px;
    text-decoration: none;
    transition: background 0.2s;
  }
  .nav-cta:hover { background: var(--accent-mid); }

  .container {
    max-width: 780px;
    margin: 0 auto;
    padding: 0 2rem;
  }

  .hero {
    padding: 5rem 0 4rem;
    border-bottom: 1px solid var(--paper-3);
    animation: fadeUp 0.7s ease both;
  }

  .hero-eyebrow {
    display: inline-block;
    font-size: 11px;
    font-weight: 500;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--accent);
    background: var(--accent-light);
    padding: 4px 12px;
    border-radius: 2px;
    margin-bottom: 1.5rem;
  }

  .hero h1 {
    font-family: var(--serif);
    font-size: clamp(28px, 5vw, 42px);
    font-weight: 900;
    line-height: 1.25;
    color: var(--ink);
    margin-bottom: 1.5rem;
    letter-spacing: -0.02em;
  }

  .hero h1 em {
    font-style: normal;
    color: var(--accent);
    border-bottom: 3px solid var(--accent);
    padding-bottom: 1px;
  }

  .hero-lead {
    font-size: 17px;
    color: var(--ink-2);
    max-width: 580px;
    line-height: 1.8;
    margin-bottom: 2.5rem;
  }

  .hero-actions {
    display: flex;
    align-items: center;
    gap: 1.25rem;
    flex-wrap: wrap;
  }

  .btn-primary {
    background: var(--accent);
    color: #fff;
    font-size: 15px;
    font-weight: 500;
    padding: 12px 28px;
    border-radius: 4px;
    text-decoration: none;
    transition: background 0.2s, transform 0.15s;
    display: inline-block;
  }
  .btn-primary:hover { background: var(--accent-mid); transform: translateY(-1px); }

  .btn-ghost {
    font-size: 14px;
    color: var(--ink-3);
  }

  .stats {
    padding: 3.5rem 0;
    border-bottom: 1px solid var(--paper-3);
  }

  .stats-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 2px;
    background: var(--paper-3);
    border: 1px solid var(--paper-3);
    border-radius: 6px;
    overflow: hidden;
  }

  .stat-item {
    background: var(--paper);
    padding: 2rem 1.5rem;
    text-align: center;
  }

  .stat-number {
    font-family: var(--serif);
    font-size: 42px;
    font-weight: 900;
    color: var(--accent);
    display: block;
    line-height: 1;
    margin-bottom: 0.5rem;
  }

  .stat-desc {
    font-size: 13px;
    color: var(--ink-3);
    line-height: 1.5;
  }

  section {
    padding: 4rem 0;
    border-bottom: 1px solid var(--paper-3);
  }

  .section-label {
    font-size: 11px;
    font-weight: 500;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--ink-3);
    margin-bottom: 0.75rem;
  }

  .section-title {
    font-family: var(--serif);
    font-size: 26px;
    font-weight: 700;
    color: var(--ink);
    margin-bottom: 1rem;
    letter-spacing: -0.01em;
    line-height: 1.35;
  }

  .section-body {
    font-size: 15px;
    color: var(--ink-2);
    line-height: 1.8;
    max-width: 600px;
    margin-bottom: 2.5rem;
  }

  .compare-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 16px;
    margin-top: 2rem;
  }

  .compare-card {
    border-radius: 6px;
    padding: 1.5rem;
    border: 1px solid;
  }

  .compare-card.before {
    background: var(--red-light);
    border-color: #f7c1c1;
  }

  .compare-card.after {
    background: var(--green-light);
    border-color: #9fe1cb;
  }

  .compare-label {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    margin-bottom: 1rem;
  }

  .before .compare-label { color: var(--red); }
  .after  .compare-label { color: var(--green); }

  .compare-list { list-style: none; }

  .compare-list li {
    font-size: 14px;
    color: var(--ink-2);
    padding: 6px 0;
    border-bottom: 1px solid rgba(0,0,0,0.06);
    display: flex;
    align-items: flex-start;
    gap: 10px;
    line-height: 1.5;
  }

  .compare-list li:last-child { border-bottom: none; }

  .compare-list li::before {
    content: '';
    width: 6px;
    height: 6px;
    border-radius: 50%;
    flex-shrink: 0;
    margin-top: 5px;
  }

  .before .compare-list li::before { background: var(--red); }
  .after  .compare-list li::before { background: var(--green); }

  .flow {
    margin-top: 2rem;
    border: 1px solid var(--paper-3);
    border-radius: 6px;
    overflow: hidden;
  }

  .flow-step {
    display: flex;
    gap: 1.25rem;
    align-items: flex-start;
    padding: 1.25rem 1.5rem;
    border-bottom: 1px solid var(--paper-3);
    background: var(--paper);
    transition: background 0.2s;
  }

  .flow-step:last-child { border-bottom: none; }
  .flow-step:hover { background: var(--paper-2); }

  .flow-num {
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background: var(--accent-light);
    color: var(--accent);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 13px;
    font-weight: 700;
    flex-shrink: 0;
    font-family: var(--serif);
  }

  .flow-text strong {
    font-size: 14px;
    font-weight: 700;
    color: var(--ink);
    display: block;
    margin-bottom: 3px;
  }

  .flow-text span {
    font-size: 13px;
    color: var(--ink-3);
    line-height: 1.6;
  }

  .table-wrap {
    margin-top: 2rem;
    border: 1px solid var(--paper-3);
    border-radius: 6px;
    overflow: hidden;
  }

  .table-header {
    background: var(--paper-2);
    padding: 10px 16px;
    font-size: 12px;
    color: var(--ink-3);
    font-weight: 500;
    display: flex;
    align-items: center;
    gap: 6px;
    border-bottom: 1px solid var(--paper-3);
  }

  .dot { width: 9px; height: 9px; border-radius: 50%; display: inline-block; }
  .dot-r { background: #E24B4A; }
  .dot-y { background: #EF9F27; }
  .dot-g { background: #639922; }

  table { width: 100%; border-collapse: collapse; font-size: 13px; }

  thead th {
    background: var(--paper-2);
    padding: 10px 14px;
    text-align: left;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--ink-3);
    border-bottom: 1px solid var(--paper-3);
  }

  tbody td {
    padding: 11px 14px;
    border-bottom: 1px solid var(--paper-3);
    color: var(--ink-2);
    vertical-align: top;
    line-height: 1.5;
  }

  tbody tr:last-child td { border-bottom: none; }
  tbody tr:hover td { background: var(--paper-2); }

  .badge {
    display: inline-block;
    font-size: 11px;
    font-weight: 600;
    padding: 2px 9px;
    border-radius: 3px;
    white-space: nowrap;
  }

  .badge-keep   { background: var(--green-light); color: var(--green); }
  .badge-noise  { background: var(--red-light); color: var(--red); }
  .badge-a      { background: var(--accent-light); color: var(--accent); }
  .badge-b      { background: var(--purple-light); color: var(--purple); }
  .badge-amber  { background: var(--amber-light); color: var(--amber); }

  .reason {
    font-size: 12px;
    color: var(--ink-3);
    margin-top: 4px;
    line-height: 1.55;
  }

  .quote-block {
    margin: 2.5rem 0 0;
    padding: 2rem 2rem 2rem 2.5rem;
    border-left: 4px solid var(--accent);
    background: var(--accent-light);
    border-radius: 0 6px 6px 0;
  }

  .quote-block p {
    font-family: var(--serif);
    font-size: 18px;
    color: var(--ink);
    line-height: 1.65;
    font-style: italic;
    margin-bottom: 0.75rem;
  }

  .quote-attr {
    font-size: 13px;
    color: var(--ink-3);
    font-style: normal;
  }

  .cta-section {
    padding: 4.5rem 0 5rem;
    text-align: center;
  }

  .cta-section .section-title { font-size: 30px; margin-bottom: 1rem; }
  .cta-section .section-body { margin: 0 auto 2.5rem; text-align: center; }

  .cta-buttons {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 1rem;
  }

  .free-note { font-size: 13px; color: var(--ink-3); }

  footer {
    border-top: 1px solid var(--paper-3);
    padding: 2rem;
    text-align: center;
    font-size: 13px;
    color: var(--ink-3);
  }

  footer a { color: var(--accent); text-decoration: none; }

  @keyframes fadeUp {
    from { opacity: 0; transform: translateY(18px); }
    to   { opacity: 1; transform: translateY(0); }
  }

  @media (max-width: 620px) {
    .compare-grid { grid-template-columns: 1fr; }
    .stats-grid { grid-template-columns: 1fr; }
    table { font-size: 12px; }
    thead th, tbody td { padding: 8px 10px; }
    .hero h1 { font-size: 26px; }
  }
&lt;/style&gt;
&lt;/div&gt;</description>
      <category>AI분류</category>
      <category>IP랜드스케이프</category>
      <category>기술분류</category>
      <category>기술분류자동화</category>
      <category>노이즈제거</category>
      <category>문서분류</category>
      <category>특허맵</category>
      <category>특허모니터링</category>
      <category>특허분석 #AI특허분석</category>
      <category>특허사무소</category>
      <author>simplidevelo</author>
      <guid isPermaLink="true">https://simplidevelo.tistory.com/17</guid>
      <comments>https://simplidevelo.tistory.com/17#entry17comment</comments>
      <pubDate>Sun, 19 Apr 2026 12:34:30 +0900</pubDate>
    </item>
    <item>
      <title>기본 구성 만들기</title>
      <link>https://simplidevelo.tistory.com/16</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;코딩에 대해서는 아는게 없어 AI로 개발하는 것이 주수단인만큼,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 Android studio에서 플러터 프로젝트를 생성한 후에,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Android studio에 떠 있는 gemini를 불러서 식물관리앱을 만들어 달라고 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;꽤나 그럴싸하게 만들어줘서 놀랐는데, 실제로 작동하는 버튼은 많지 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 gemini가 짜준 main.dart 파일을 구독중인 chat gpt에 넣어서 기능을 추가했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;식물추가 방식이나, 정보 등을 구체화하여 지시했더니 어느 정도 모양을 갖춘 앱이 만들어졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[Cursor AI] 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 에서 어느정도 틀을 만든 후에 cursor ai를 사용해보기 위해 설치 및 가입을 진행한 후,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Cursor AI에서 해당 프로젝트를 불러왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안드로이드 앱용인데 잘되려나 싶었는데, 문제없이 불러와졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;불러온 후에는 &quot;현재 개발 중인 앱이야.&quot;라고 한마디만 했을 뿐인데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앱에 대한 이해도 정확하고, 제안하는 부분도 내가 원했던 내용과 일치했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;774&quot; data-origin-height=&quot;813&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b09KAk/btsOLox0k0y/kvvhqTptdDQETdhTBkdNL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b09KAk/btsOLox0k0y/kvvhqTptdDQETdhTBkdNL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b09KAk/btsOLox0k0y/kvvhqTptdDQETdhTBkdNL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb09KAk%2FbtsOLox0k0y%2FkvvhqTptdDQETdhTBkdNL1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;커서AI를 활용한 식물관련 앱개발&quot; loading=&quot;lazy&quot; width=&quot;774&quot; height=&quot;813&quot; data-origin-width=&quot;774&quot; data-origin-height=&quot;813&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가 개발 방향으로 제안해주는 내용에 대해서도 바로 적용하고 직접 테스트도 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원리는 잘 모르지만, 제안한 내용에 대해 Run 버튼을 누르니, 오잉? 같이 켜두었던 안드로이드 스튜디오 에뮬레이터에서 돌아간다;;&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;face&quot; data-emoticon-name=&quot;003&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/face/large/003.png&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/face/large/003.png&quot; width=&quot;80&quot; /&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cursor로 앱에 몇 가지 기능을 추가해보고 다음에 다시 정리해봐야지~!&lt;/p&gt;</description>
      <category>식물관리앱</category>
      <category>1인개발자</category>
      <category>ai앱개발</category>
      <category>cursorai</category>
      <category>vibecoding</category>
      <category>바이브코딩</category>
      <category>심플리디벨로</category>
      <category>커서ai</category>
      <category>플러터</category>
      <author>simplidevelo</author>
      <guid isPermaLink="true">https://simplidevelo.tistory.com/16</guid>
      <comments>https://simplidevelo.tistory.com/16#entry16comment</comments>
      <pubDate>Sat, 21 Jun 2025 13:05:38 +0900</pubDate>
    </item>
    <item>
      <title>3번째 앱개발 시작</title>
      <link>https://simplidevelo.tistory.com/15</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이번에는 식물관리앱을 만들어 볼 예정이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(집에 있는 식물들이 하나하나 말라 죽어가는 걸 보면서 일단 나부터 필요한 앱임)&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignLeft&quot; data-emoticon-type=&quot;friends2&quot; data-emoticon-name=&quot;041&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends2/large/041.png&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends2/large/041.png&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앱스토어에서 찾아보니 유사한 앱들이 몇 개 보이는데,&amp;nbsp;구성이나 기능 측면에서 참고해봐야 할 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 앱에서 구현하지 않는 기능들을 생각하면서 어떻게 앱을 차별화해야 할 지도 생각해봐야 할 것 같고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금 생각하고 있는 몇 가지 아이디어가 있는데, 구현 가능할지가 문제 ㅎㅎㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇게 몇 주동안 생각만 하고 있다가 이러다가는 시작도 못할 것 같아서 일단 컴퓨터 앞에 앉아봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자, 코딩을 시작한 첫날! 가장 먼저 고민한 것은 개발 언어.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째 앱은 안드로이드 스튜디오 코틀린으로 했고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두번째 앱(게임)은 유니티로 개발해서 딱히 친숙한 언어는 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 앱은 조금 더 공을 들일 예정이기 때문에 확장 가능성을 고려해서 안드로이드와 아이폰에서 모두 가능하게 만들고 싶음..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런저런 사정을 GPT님께 아뢰었더니 이번 개발 언어는 Flutter로 하라신다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ㅇㅋ 근데 어떻게 하냐고 물어보니 안드로이드 스튜디오에 플러그인을 추가하면 된다네?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에 안드로이드 스튜디오는 깔려 있었기 때문에 이것저것 시키는대로 모두 깔아봤다 ㅎㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 페이지를 참고해서 Flutter SDK를 설치(디렉토리는 %사용자/dev/flutter/..)하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안드로이드 스튜디오에서도 flutter 플러그인을 추가 설치했다. (셋팅만 1시간이 지나감...)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.flutter.dev/get-started/install/windows/mobile&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.flutter.dev/get-started/install/windows/mobile&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1750431415620&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Start building Flutter Android apps on Windows&quot; data-og-description=&quot;Configure your system to develop Flutter mobile apps on Windows.&quot; data-og-host=&quot;docs.flutter.dev&quot; data-og-source-url=&quot;https://docs.flutter.dev/get-started/install/windows/mobile&quot; data-og-url=&quot;https://docs.flutter.dev/get-started/install/windows/mobile&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/8VDJD/hyY7XRiaKL/jRNwrh2NmDYVDufplWSNN0/img.png?width=320&amp;amp;height=320&amp;amp;face=0_0_320_320&quot;&gt;&lt;a href=&quot;https://docs.flutter.dev/get-started/install/windows/mobile&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.flutter.dev/get-started/install/windows/mobile&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/8VDJD/hyY7XRiaKL/jRNwrh2NmDYVDufplWSNN0/img.png?width=320&amp;amp;height=320&amp;amp;face=0_0_320_320');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Start building Flutter Android apps on Windows&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Configure your system to develop Flutter mobile apps on Windows.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.flutter.dev&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모두 설치하고 나니, 안드로이드 스튜디오에서 New project를 해보면 New Flutter Project가 뜬다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;항상 나같은 초보는 셋팅이 가장 힘든데 일단 뭔가 돌아가고는 있는 것 같아 다행스 ㅠㅠ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;그럼 내일부터 제대로 코딩 시작해보기로!&lt;/span&gt;&lt;/p&gt;</description>
      <category>식물관리앱</category>
      <category>1인개발</category>
      <category>flutter설치</category>
      <category>바이브코딩</category>
      <category>식물관리앱</category>
      <category>심플리디벨로</category>
      <category>안드로이드스튜디오</category>
      <category>앱개발</category>
      <category>플러터</category>
      <author>simplidevelo</author>
      <guid isPermaLink="true">https://simplidevelo.tistory.com/15</guid>
      <comments>https://simplidevelo.tistory.com/15#entry15comment</comments>
      <pubDate>Sat, 21 Jun 2025 00:04:56 +0900</pubDate>
    </item>
    <item>
      <title>타워 업그레이드 시스템 만들기</title>
      <link>https://simplidevelo.tistory.com/14</link>
      <description>&lt;p data-end=&quot;251&quot; data-start=&quot;145&quot; data-ke-size=&quot;size16&quot;&gt;디펜스 게임은 기본적으로 적이 점점 강해지므로, 플레이어도 그에 맞춰 &lt;b&gt;강화할 수 있는 시스템&lt;/b&gt;이 필요하다.&lt;br /&gt;기본 스탯 업그레이드부터 구성했다.&lt;/p&gt;
&lt;p data-end=&quot;353&quot; data-start=&quot;276&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;398&quot; data-start=&quot;355&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;369&quot; data-start=&quot;355&quot;&gt;&lt;b&gt;공격력 증가&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;385&quot; data-start=&quot;370&quot;&gt;&lt;b&gt;공격속도 증가&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;398&quot; data-start=&quot;386&quot;&gt;&lt;b&gt;사거리 증가&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;470&quot; data-start=&quot;400&quot; data-ke-size=&quot;size16&quot;&gt;세 가지 중 어떤 걸 먼저 올릴지는 플레이어가 선택할 수 있도록 하고, 밸런스를 맞추는 것이 중요하다.&lt;/p&gt;
&lt;h2 data-end=&quot;492&quot; data-start=&quot;477&quot; data-ke-size=&quot;size26&quot;&gt;UI 구성과 비용 로직&lt;/h2&gt;
&lt;p data-end=&quot;577&quot; data-start=&quot;494&quot; data-ke-size=&quot;size16&quot;&gt;버튼 3개를 만들고, 각각의 스탯을 강화할 수 있게 연결했다.&lt;br /&gt;강화에는 골드가 필요하고, &lt;b&gt;업그레이드할수록 비용이 점점 늘어나도록&lt;/b&gt;&amp;nbsp;한다.&lt;/p&gt;
&lt;p data-end=&quot;696&quot; data-start=&quot;579&quot; data-ke-size=&quot;size16&quot;&gt;ChatGPT에게 &amp;ldquo;업그레이드마다 비용이 증가하는 로직&amp;rdquo;을 요청하여 간단히 작성했다.&lt;br /&gt;비용이 늘어나는 방식은 baseCost에 일정 계수를 곱하는 방식을 제안 받았으나&lt;br /&gt;난 조금 더 직관적으로, &lt;b&gt;+10씩 증가하는 방식&lt;/b&gt;을 채택했다.&lt;/p&gt;
&lt;pre id=&quot;code_1749561782013&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public void UpgradeDamage()
{
    int cost = GetEffectiveCost(damageUpgradeCost);
    if (gold &amp;gt;= cost)
    {
        gold -= cost;
        attackDamage += 1;
        damageUpgradeCost += 10;
        UpdateUI();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-end=&quot;995&quot; data-start=&quot;933&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;995&quot; data-start=&quot;933&quot; data-ke-size=&quot;size16&quot;&gt;비용은 GetEffectiveCost()로 계산되는데,&lt;br /&gt;향후 게임 컨셉인 스킬트리를 고려하여 스킬 효과에 따라 할인율이 적용되도록 만들었다.&lt;/p&gt;
&lt;p data-end=&quot;995&quot; data-start=&quot;933&quot; data-ke-size=&quot;size16&quot;&gt;(여기서 만들었다는건 GPT에게 향후 이런 스킬도 적용할 수 있도록 만들어 놓으라고 하는 것이다..ㅎㅎ)&lt;/p&gt;
&lt;p data-end=&quot;1108&quot; data-start=&quot;1021&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1108&quot; data-start=&quot;1021&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1108&quot; data-start=&quot;1021&quot; data-ke-size=&quot;size16&quot;&gt;타워 스탯을 볼 수 있도록 화면 아래에 현스탯을 표시하고, 업그레이드를 하면 스탯 숫자가 UI에 즉시 반영되도록 한다.&lt;br /&gt;공격력은 &amp;ldquo;기본 + 보너스&amp;rdquo; 형태로 표시했는데, 보너스는 향후 만들 스킬트리를 고려한 것이다.&lt;br /&gt;사거리는 범위 원으로 표시되는데, 업그레이드 시 바로 갱신되도록 했다.&lt;/p&gt;
&lt;p data-end=&quot;1159&quot; data-start=&quot;1110&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1264&quot; data-start=&quot;1175&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1339&quot; data-start=&quot;1266&quot; data-ke-size=&quot;size16&quot;&gt;ChatGPT와 작업하면서 &amp;ldquo;설계는 직접하고, GPT를 코딩 어시스턴트로 쓰는 방식&amp;rdquo;에 대한 감각이 생기기 시작했던 것 같다.&lt;/p&gt;</description>
      <category>DOT Defense</category>
      <category>1인개발</category>
      <category>AI코딩</category>
      <category>닷디펜스</category>
      <category>디펜스게임</category>
      <category>바이브코딩 #ai앱개발 #ai게임개발</category>
      <category>유니티</category>
      <author>simplidevelo</author>
      <guid isPermaLink="true">https://simplidevelo.tistory.com/14</guid>
      <comments>https://simplidevelo.tistory.com/14#entry14comment</comments>
      <pubDate>Tue, 10 Jun 2025 22:29:14 +0900</pubDate>
    </item>
    <item>
      <title>적 스폰 시스템 만들기</title>
      <link>https://simplidevelo.tistory.com/13</link>
      <description>&lt;p data-end=&quot;266&quot; data-start=&quot;170&quot; data-ke-size=&quot;size16&quot;&gt;게임에서 적이 자연스럽게 등장하는 흐름을 만들기 위해서 이번에는 &lt;b&gt;적 스폰 시스템&lt;/b&gt;을 구현했다.&lt;/p&gt;
&lt;p data-end=&quot;266&quot; data-start=&quot;170&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;376&quot; data-start=&quot;287&quot; data-ke-size=&quot;size16&quot;&gt;디펜스 게임에서 가장 중요한 흐름 중 하나는&lt;br /&gt;&lt;b&gt;적이 어느 타이밍에, 어떤 위치에서, 어떻게 나오는가&lt;/b&gt;이다.&lt;br /&gt;이걸 통제하는 스폰 매니져가 필요했다.&lt;/p&gt;
&lt;hr data-end=&quot;381&quot; data-start=&quot;378&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;400&quot; data-start=&quot;383&quot; data-ke-size=&quot;size26&quot;&gt;내가 원하는 구조는 이랬다&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;532&quot; data-start=&quot;402&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;428&quot; data-start=&quot;402&quot;&gt;웨이브마다 적이 일정 수만큼 등장한다.&lt;/li&gt;
&lt;li data-end=&quot;464&quot; data-start=&quot;429&quot;&gt;적은 &lt;b&gt;화면 바깥에서 랜덤한 방향&lt;/b&gt;으로부터 등장한다.&lt;/li&gt;
&lt;li data-end=&quot;497&quot; data-start=&quot;465&quot;&gt;시간이 지나면서 점점 더 많은 적이 나오게 한다.&lt;/li&gt;
&lt;li data-end=&quot;532&quot; data-start=&quot;498&quot;&gt;5웨이브마다 &lt;b&gt;보스&lt;/b&gt;를 한 마리씩 등장시킨다.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-end=&quot;537&quot; data-start=&quot;534&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;555&quot; data-start=&quot;539&quot; data-ke-size=&quot;size26&quot;&gt;GPT 코딩은 이렇게&lt;/h2&gt;
&lt;p data-end=&quot;736&quot; data-start=&quot;557&quot; data-ke-size=&quot;size16&quot;&gt;ChatGPT에게 &amp;ldquo;랜덤한 가장자리에서 적을 생성하고 싶다&amp;rdquo;고 했더니&lt;/p&gt;
&lt;p data-end=&quot;736&quot; data-start=&quot;557&quot; data-ke-size=&quot;size16&quot;&gt;먼저 EnemySpawner.cs라는 클래스를 만들어서 &lt;b&gt;맵의 4방향(상, 하, 좌, 우)&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;중 하나에서 적이 생성되도록 했다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Random.Range()를 활용해서 방향을 정하고, 그에 맞는 좌표를 반환하는 로직을 제안해줬다.&lt;/p&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1747920341129&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public Vector3 GetRandomSpawnPosition()
{
    int edge = Random.Range(1, 5);
    Vector3 spawnPosition = Vector3.zero;
    switch (edge)
    {
        case 1: // 위
            spawnPosition = new Vector3(Random.Range(-spawnWidth / 2, spawnWidth / 2), spawnHeight / 2, 0f);
            break;
        case 2: // 아래
            spawnPosition = new Vector3(Random.Range(-spawnWidth / 2, spawnWidth / 2), -spawnHeight / 2, 0f);
            break;
        case 3: // 왼쪽
            spawnPosition = new Vector3(-spawnWidth / 2, Random.Range(-spawnHeight / 2, spawnHeight / 2), 0f);
            break;
        case 4: // 오른쪽
            spawnPosition = new Vector3(spawnWidth / 2, Random.Range(-spawnHeight / 2, spawnHeight / 2), 0f);
            break;
    }
    return spawnPosition;
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;1580&quot; data-start=&quot;1577&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1597&quot; data-start=&quot;1582&quot; data-ke-size=&quot;size26&quot;&gt;웨이브 흐름도 추가했다&lt;/h2&gt;
&lt;p data-end=&quot;1692&quot; data-start=&quot;1599&quot; data-ke-size=&quot;size16&quot;&gt;WaveManager.cs를 따로 만들어서 웨이브 단위로 적을 나오게 했다.&lt;br /&gt;이 클래스는 일정 시간마다 다음 웨이브를 준비하고, 위에서 만든 enemySpawner를 이용해서 지정된 수의 적을 스폰한다.&lt;/p&gt;
&lt;p data-end=&quot;1731&quot; data-start=&quot;1694&quot; data-ke-size=&quot;size16&quot;&gt;또, &lt;b&gt;5의 배수 웨이브&lt;/b&gt;마다 보스를 등장시키는 기능도 넣었다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1747920413231&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if (waveNumber % 5 == 0)
{
    SpawnBoss();
}
else
{
    for (int i = 0; i &amp;lt; enemiesPerWave; i++)
    {
        enemySpawner.SpawnEnemy();
        yield return new WaitForSeconds(1f / waveNumber + 0.3f);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2015&quot; data-start=&quot;1960&quot; data-ke-size=&quot;size16&quot;&gt;웨이브 수가 올라갈수록 적이 더 빨리 등장하게 만들어서&lt;br /&gt;게임이 점점 어려워지는 구조로 만들었다.&lt;/p&gt;
&lt;hr data-end=&quot;2020&quot; data-start=&quot;2017&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2045&quot; data-start=&quot;2022&quot; data-ke-size=&quot;size26&quot;&gt;ChatGPT 활용&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GPT를 활용하면 일반적으로 시스템을 쪼개서 코드를 만들어준다.(예, 적스폰매니져, 웨이브매니져 등등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나 같은 초보는 각 파일들이 어떤 역할을 하는 지 잘 기억해두고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;할 수 있다면 파일을 어떻게 쪼개서 가져갈 지 미리 생각해두는 것이 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나중에 실제로 게임 완성 후에는 코드 파일이 수십개가 되어서 각 파일들의 역할을 한 번에 파악하기가 쉽지 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 자신만의 구조를 가지고 있거나, 폴더별로 관리하는 방식이 유용한 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 나는 각 씬별로 폴더를 따로 만들어 관리했더니 그나마 보기 편했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 여기까지!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2177&quot; data-start=&quot;2047&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DOT Defense</category>
      <category>1인개발자</category>
      <category>AI코딩</category>
      <category>닷디펜스</category>
      <category>바이브코딩</category>
      <category>웨이브매니저</category>
      <category>유니티</category>
      <category>적스폰</category>
      <author>simplidevelo</author>
      <guid isPermaLink="true">https://simplidevelo.tistory.com/13</guid>
      <comments>https://simplidevelo.tistory.com/13#entry13comment</comments>
      <pubDate>Thu, 22 May 2025 22:32:49 +0900</pubDate>
    </item>
    <item>
      <title>인앱결제 시 구글 수수료 15% 적용하기</title>
      <link>https://simplidevelo.tistory.com/12</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;구글은 개발자가 인앱결제 기능을 사용하면 수수료로 30% 떼어간다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 내가 테스트 목적으로 구매해본 내역이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대략 1000원 구매 시 700원 정도만 주는 것을 알 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;519&quot; data-origin-height=&quot;459&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bz2lCn/btsNS8BOQxL/7GpdTsnhIT8GvKtqB20fg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bz2lCn/btsNS8BOQxL/7GpdTsnhIT8GvKtqB20fg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bz2lCn/btsNS8BOQxL/7GpdTsnhIT8GvKtqB20fg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbz2lCn%2FbtsNS8BOQxL%2F7GpdTsnhIT8GvKtqB20fg0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;378&quot; height=&quot;334&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;519&quot; data-origin-height=&quot;459&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다행히 21년부터 구글에서 매년 첫 100만달러 수익까지는 수수료를 15%로 낮춘 상태다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나 같은 1인 개발자가 100만달러/년 수익이 날 가능성은 매우 낮으니 15%로 낮춰준 것으로 봐도 무방할 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중요한 것은 이게 저절로 적용되는 것이 아니라 따로 요청을 해야된다는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출시 후 몇 주간 이 부분을 모르고 있어서, 지금까지 판매된 상품이 모두 30%의 수수료가 적용되어 있었다..ㅠㅠ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요청방법은 의외로 간단하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 아래와 같이 플레이콘솔에 접속해서 - 설정 - 결제 프로필에 들어간다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;520&quot; data-origin-height=&quot;749&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDS2P6/btsNSK82QZo/3jwK4xLebYhB9JT4WwFyKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDS2P6/btsNSK82QZo/3jwK4xLebYhB9JT4WwFyKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDS2P6/btsNSK82QZo/3jwK4xLebYhB9JT4WwFyKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDS2P6%2FbtsNSK82QZo%2F3jwK4xLebYhB9JT4WwFyKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;구글 낮은 수수료 적용 설정 화면&quot; loading=&quot;lazy&quot; width=&quot;520&quot; height=&quot;749&quot; data-origin-width=&quot;520&quot; data-origin-height=&quot;749&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 결제 프로필에 보면 15% 수수료 프로그램에 등록하라는 배너가 위에 떠있다. 배너를 누른다. (현재 가입하고 나니 사라져있음..)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 연결된 개발자 계정으로 들어가지는데, 내가 가진 개발자 계정을 모두 연결하라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나 같은 경우는 현재 개발자 계정이 1개 뿐이므로, 추가 등록 없이 몇 가지 간단한 질문에 답하니 등록이 완료되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(아마도 모든 계정의 수익을 합쳐 100만달러로 제한하기 위해 확인하는 것으로 생각된다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;988&quot; data-origin-height=&quot;438&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/y77le/btsNS98ypLs/8tOMgiyu8pbjH8U09dlwy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/y77le/btsNS98ypLs/8tOMgiyu8pbjH8U09dlwy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/y77le/btsNS98ypLs/8tOMgiyu8pbjH8U09dlwy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fy77le%2FbtsNS98ypLs%2F8tOMgiyu8pbjH8U09dlwy1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;988&quot; height=&quot;438&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;988&quot; data-origin-height=&quot;438&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) 15% 수수료 적용 약관 동의가 뜨는데 밑에 동의하기 버튼을 누르면 끝.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;15% 적용이 완료되면 아래처럼 등록한 프로그램 및 서비스에 15%서비스수수료가 뜨는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;681&quot; data-origin-height=&quot;590&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dynF5u/btsNRiGkZNx/M8DNlpjA3jfRz8j3nAuKb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dynF5u/btsNRiGkZNx/M8DNlpjA3jfRz8j3nAuKb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dynF5u/btsNRiGkZNx/M8DNlpjA3jfRz8j3nAuKb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdynF5u%2FbtsNRiGkZNx%2FM8DNlpjA3jfRz8j3nAuKb0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;15% 수수료가 설정된 화면&quot; loading=&quot;lazy&quot; width=&quot;681&quot; height=&quot;590&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;681&quot; data-origin-height=&quot;590&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘의 개발 기록 끝!&lt;/p&gt;</description>
      <category>DOT Defense</category>
      <category>15%수수료</category>
      <category>1인개발</category>
      <category>게임개발</category>
      <category>구글결제수수료</category>
      <category>연결된개발자계정</category>
      <category>인앱결제</category>
      <category>인앱결제수수료인하</category>
      <category>플레이스토어수수료</category>
      <category>플레이콘솔</category>
      <author>simplidevelo</author>
      <guid isPermaLink="true">https://simplidevelo.tistory.com/12</guid>
      <comments>https://simplidevelo.tistory.com/12#entry12comment</comments>
      <pubDate>Sat, 10 May 2025 15:33:45 +0900</pubDate>
    </item>
    <item>
      <title>플레이 스토어 국가별 앱정보 수정</title>
      <link>https://simplidevelo.tistory.com/11</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;구글 플레이콘솔에서는 게임 출시 전 스토어 정보를 입력한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게임에 대한 소개, 업데이트 내용, 스크린샷 등 게임에 대한 모든 정보가 담기는 페이지이므로 신경쓸 것이 은근히 많다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 국가별 스토어 정보를 어떻게 만들지 고민해 보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단, (모든 번역은 GPT가 했지만) 닷디펜스의 경우, 영어/한국어/일본어를 지원하도록 개발했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 스토어 정보도 마찬가지로 영어, 한국어, 일어로 각각 작성한 상태다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 스토어 정보는 플레이콘솔의 아래 메뉴에서 확인/수정 가능하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1021&quot; data-origin-height=&quot;274&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhzhP0/btsNMA51tCQ/1pfMuhub0K3btuXkYXa99K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhzhP0/btsNMA51tCQ/1pfMuhub0K3btuXkYXa99K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhzhP0/btsNMA51tCQ/1pfMuhub0K3btuXkYXa99K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhzhP0%2FbtsNMA51tCQ%2F1pfMuhub0K3btuXkYXa99K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1021&quot; height=&quot;274&quot; data-origin-width=&quot;1021&quot; data-origin-height=&quot;274&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 위 앱 저보 메뉴 바로 아래에 보면, 스토어 실적 - 등록정보 전환 분석이라는 메뉴가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분은 아마도 실제로 스토어에 들어왔던 사람 중에 게임을 다운로드 받은 사람을 카운트 해주는 것으로 보인다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;263&quot; data-origin-height=&quot;146&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbUVL2/btsNLbznkQe/c6Ub1RiUZh7dYEMRofybrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbUVL2/btsNLbznkQe/c6Ub1RiUZh7dYEMRofybrk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbUVL2/btsNLbznkQe/c6Ub1RiUZh7dYEMRofybrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbUVL2%2FbtsNLbznkQe%2Fc6Ub1RiUZh7dYEMRofybrk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;263&quot; height=&quot;146&quot; data-origin-width=&quot;263&quot; data-origin-height=&quot;146&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;574&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cko6t6/btsNLqDd4Nc/3RYlyewacpfTk2aFyTs8D1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cko6t6/btsNLqDd4Nc/3RYlyewacpfTk2aFyTs8D1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cko6t6/btsNLqDd4Nc/3RYlyewacpfTk2aFyTs8D1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcko6t6%2FbtsNLqDd4Nc%2F3RYlyewacpfTk2aFyTs8D1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;823&quot; height=&quot;574&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;574&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;위에 국가별로 전환율이 나와 있는데, 일본에서 11명이나 들어왔던 것을 확인했다. 반면 다운은 0명..&lt;/p&gt;
&lt;figure style=&quot;color: #333333; text-align: center;&quot; contenteditable=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/035.gif&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-name=&quot;035&quot; data-emoticon-type=&quot;friends1&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;emoticon&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/035.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;어떻게 하면 찾아 들어온 사람들이 다운로드 받게 할 수 있을까?&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;일단 게임 자체가 재밌어야 겠지만..이 부분은 다른 이슈이므로 차치하고, &lt;/s&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;스토어 등록정보에서 수정할 부분을 찾아보기로 했다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;일단 눈에 띈 점은 게임 스크린샷! 대부분 게임에 들어가면 가장 먼저 보게되는 부분인데..&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;스크린샷 게임화면이 영어로 설정된 상태의 스크린샷이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;아마도 일본인이라면 일본어로 되어있어야 눈에 들어올테니..이부분을 먼저 수정해보자.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;다행히 구글에서는 언어별로 다른 스크린샷을 제공할 수 있도록 만들어져 있다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;방법은 아까 처음에 언급한 스토어 등록정보로 들어가서 아래처럼 등록정보 언어를 일본어로 변경한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;530&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ss8mt/btsNL2WdzrK/nNQWqmUzcacPzKw4xlSLC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ss8mt/btsNL2WdzrK/nNQWqmUzcacPzKw4xlSLC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ss8mt/btsNL2WdzrK/nNQWqmUzcacPzKw4xlSLC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSs8mt%2FbtsNL2WdzrK%2FnNQWqmUzcacPzKw4xlSLC1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;940&quot; height=&quot;530&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;530&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그 후 아래처럼 스크린샷을 일본어 모드로 다시 찍어 새로 업로드한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mODC3/btsNMbyGD93/MKQfUPDrbSSXyueA76Iz90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mODC3/btsNMbyGD93/MKQfUPDrbSSXyueA76Iz90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mODC3/btsNMbyGD93/MKQfUPDrbSSXyueA76Iz90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmODC3%2FbtsNMbyGD93%2FMKQfUPDrbSSXyueA76Iz90%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;936&quot; height=&quot;350&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;350&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하는 김에 한국어 버전도 새로 스크린샷을 찍었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음에 들어오는 일본분은 꼭 다운로드 해주시길 바라며...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 외에 추가로 게임 영상을 올리는 것도 효과적일 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;닷디펜스는 그래픽이 너무 단순해서 스크린샷만 보면 조금 밋밋해 보이기 때문에,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무래도 플레이 영상이 있어야 더 호기심을 자극할 것 같다고 생각된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 다음 단계는 게임 플레이 영상을 잘 편집해서 유투브에 업로드 하여 연결해볼 예정이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘의 개발일지 끝.&lt;/p&gt;</description>
      <category>DOT Defense</category>
      <category>1인게임개발</category>
      <category>국가별앱정보</category>
      <category>다국어</category>
      <category>닷디펜스</category>
      <category>디펜스게임개발</category>
      <category>스토어등록정보</category>
      <category>유니티</category>
      <category>플레이스토어</category>
      <author>simplidevelo</author>
      <guid isPermaLink="true">https://simplidevelo.tistory.com/11</guid>
      <comments>https://simplidevelo.tistory.com/11#entry11comment</comments>
      <pubDate>Mon, 5 May 2025 22:20:54 +0900</pubDate>
    </item>
    <item>
      <title>게임출시 닷디펜스 DOT Defense!</title>
      <link>https://simplidevelo.tistory.com/10</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;현재 블로그에 작성 중인 닷디펜스가 출시되어 플레이스토어 링크를 올립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.SimpliDevelo.DOTDefense&amp;amp;pcampaignid=web_share&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://play.google.com/store/apps/details?id=com.SimpliDevelo.DOTDefense&amp;amp;pcampaignid=web_share&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1746446799416&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;닷디펜스 (DOT Defense) - Google Play 앱&quot; data-og-description=&quot;우주를 가로지르는 끊임 없는 적의 파도로부터 DOT를 보호하세요.&quot; data-og-host=&quot;play.google.com&quot; data-og-source-url=&quot;https://play.google.com/store/apps/details?id=com.SimpliDevelo.DOTDefense&amp;amp;pcampaignid=web_share&quot; data-og-url=&quot;https://play.google.com/store/apps/details?id=com.SimpliDevelo.DOTDefense&amp;amp;hl=ko&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/gmRBw/hyYMQq763q/wfyQgkKg9xx6NfkJmkCMSK/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/caB32q/hyYPrXZYdB/ZwBEnV7w8HBYakKH9IUV2k/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300,https://scrap.kakaocdn.net/dn/ejTbBE/hyYL6nE8TG/RKgBvYu2lxgfxKMnNdVXY0/img.png?width=240&amp;amp;height=240&amp;amp;face=0_0_240_240&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.SimpliDevelo.DOTDefense&amp;amp;pcampaignid=web_share&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://play.google.com/store/apps/details?id=com.SimpliDevelo.DOTDefense&amp;amp;pcampaignid=web_share&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/gmRBw/hyYMQq763q/wfyQgkKg9xx6NfkJmkCMSK/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/caB32q/hyYPrXZYdB/ZwBEnV7w8HBYakKH9IUV2k/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300,https://scrap.kakaocdn.net/dn/ejTbBE/hyYL6nE8TG/RKgBvYu2lxgfxKMnNdVXY0/img.png?width=240&amp;amp;height=240&amp;amp;face=0_0_240_240');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;닷디펜스 (DOT Defense) - Google Play 앱&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;우주를 가로지르는 끊임 없는 적의 파도로부터 DOT를 보호하세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;play.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DOT Defense</category>
      <category>1인게임개발</category>
      <category>AI코딩</category>
      <category>게임출시</category>
      <category>닷디펜스</category>
      <category>디펜스게임</category>
      <category>유니티</category>
      <category>인디게임</category>
      <author>simplidevelo</author>
      <guid isPermaLink="true">https://simplidevelo.tistory.com/10</guid>
      <comments>https://simplidevelo.tistory.com/10#entry10comment</comments>
      <pubDate>Mon, 5 May 2025 21:07:16 +0900</pubDate>
    </item>
    <item>
      <title>타워 만들기 &amp;ndash; ChatGPT로 기본 공격을 구현</title>
      <link>https://simplidevelo.tistory.com/9</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;빈 유니티 화면에서 가장 먼저 구현하고 싶었던 것은 &lt;b&gt;타워 공격 기능&lt;/b&gt;이었다.&lt;br /&gt;게임의 기본이 되는 핵심 시스템이기 때문에, 최대한 간단하고 확실하게 만드는 것을 목표로 삼았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타워는 적이 일정 범위 안에 들어오면 자동으로 공격해야 했다.&lt;br /&gt;이 구조를 어떻게 짤지 막막했지만, ChatGPT에게 질문하면서 방향을 잡을 수 있었다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 기본 설계&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 타워가 해야 할 일은 명확했다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;주변에 적이 있는지 탐색한다.&lt;/li&gt;
&lt;li&gt;가장 가까운 적을 찾는다.&lt;/li&gt;
&lt;li&gt;공격 쿨타임이 지나면 총알을 발사한다.&lt;/li&gt;
&lt;li&gt;총알은 적에게 도달하면 데미지를 입히고 사라진다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 과정을 반복하는 구조로 만들기로 했다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. ChatGPT 의 응답&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 ChatGPT에게 물어본 결과&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;Unity로 적이 범위 안에 들어오면 공격하는 타워를 만들고 싶어&quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ChatGPT는 FindClosestEnemy()라는 함수를 제안해줬다.&lt;br /&gt;이 함수로 현재 장면(Scene)에 존재하는 모든 적을 검색하고, 타워와의 거리를 비교해 가장 가까운 적을 선택하는 방식이었다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 실제 구현한 흐름&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;타워 오브젝트&lt;/b&gt;를 만들기&lt;/li&gt;
&lt;li&gt;**공격 범위(attackRange)**를 설정&lt;/li&gt;
&lt;li&gt;매 프레임마다 주변 적을 탐색하고, 가장 가까운 적을 찾기&lt;/li&gt;
&lt;li&gt;공격 쿨타임(attackCooldown)이 지난 경우, 총알을 발사하는 로직을 추가&lt;/li&gt;
&lt;li&gt;총알은 적을 맞추면 데미지를 입히고 비활성화되도록 처리&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ChatGPT가 제안한 기본 구조를 바탕으로, 조금씩 수정하도록 시켰다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 작성한 주요 코드&lt;/h2&gt;
&lt;pre class=&quot;properties&quot;&gt;&lt;code&gt;Enemy FindClosestEnemy()
{
    Enemy[] enemies = FindObjectsByType&amp;lt;Enemy&amp;gt;(FindObjectsSortMode.None);
    Enemy closest = null;
    float minDist = attackRange;
    foreach (Enemy enemy in enemies)
    {
        float dist = Vector3.Distance(transform.position, enemy.transform.position);
        if (dist &amp;lt; minDist)
        {
            minDist = dist;
            closest = enemy;
        }
    }
    return closest;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 함수는 타워 주변에 있는 모든 적을 순회하면서, &lt;b&gt;가장 가까운 적&lt;/b&gt;을 찾는 역할을 한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 단순한 기능 하나 만드는 것도 생각보다 시간이 오래 걸렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 유니티 자체를 처음 접해본 나 같은 경우, 메뉴가 어디있는 지도 모르기 때문에,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유니티의 사용법도 물어가며 새로운 유니티 사용법 세션을 만들어 활용하는 것도 좋은 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;거리 계산, 쿨타임 관리, 총알 발사까지 하나하나 직접 만들면서 많은 것을 배울 수 있었다.&lt;br /&gt;무엇보다 ChatGPT 덕분에 처음 시작은 쉽지만, 중간중간 커스터마이즈 하는 것이 초보자에게는 쉽지 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주석을 잘 달아달라고 하는 것도 중요하고, 이해가 안되는 부분은 바로 물어보는 것이 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DOT Defense</category>
      <category>ai로게임개발</category>
      <category>닷디펜스</category>
      <category>디펜스게임</category>
      <category>바이브코딩</category>
      <category>유니티</category>
      <author>simplidevelo</author>
      <guid isPermaLink="true">https://simplidevelo.tistory.com/9</guid>
      <comments>https://simplidevelo.tistory.com/9#entry9comment</comments>
      <pubDate>Mon, 28 Apr 2025 21:07:02 +0900</pubDate>
    </item>
    <item>
      <title>앱출시 후에도 (사전체험판)이 계속 떠있는 문제</title>
      <link>https://simplidevelo.tistory.com/8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;개인개발자가 안드로이드에서 앱을 출시하는 과정은 꽤나 험난하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순히 개발만 완료되면 되는 것이 아니라,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글이 요구하는 비공개테스트(12명 이상의 유저가 14일간 사용 필요)를 통과해야하기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분은 다들 많이 다루고 있으니 넘어가도록 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇게 어렵게 어렵게 프로덕션(출시)한 게임을 기존에 테스트에 참여해준 테스터들에게 먼저 공개하게 될텐데..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제는 정식 출시를 했음에도 구글플레이 링크에 들어가보면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앱이름에 테스트 버전에 붙는 &quot;사전체험판&quot;이라는 단어가 붙어있다는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것저것 해보다가 겨우겨우 아래와 같이 문제를 해결했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;** 비공개테스트를 중단한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;플레이콘솔에 비공개테스트를 중단하고, 테스터를 모두 해제한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1062&quot; data-origin-height=&quot;612&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dYnmjt/btsNBur0tZ4/wD33Mh2O8G8ZsD1OsrHA0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dYnmjt/btsNBur0tZ4/wD33Mh2O8G8ZsD1OsrHA0K/img.png&quot; data-alt=&quot;테스트 트랙 중지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dYnmjt/btsNBur0tZ4/wD33Mh2O8G8ZsD1OsrHA0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdYnmjt%2FbtsNBur0tZ4%2FwD33Mh2O8G8ZsD1OsrHA0K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1062&quot; height=&quot;612&quot; data-origin-width=&quot;1062&quot; data-origin-height=&quot;612&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;테스트 트랙 중지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1015&quot; data-origin-height=&quot;661&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QNjOs/btsNzzn9HhG/AIJSwkQcZZzS5FTNRchbX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QNjOs/btsNzzn9HhG/AIJSwkQcZZzS5FTNRchbX1/img.png&quot; data-alt=&quot;테스터해제&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QNjOs/btsNzzn9HhG/AIJSwkQcZZzS5FTNRchbX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQNjOs%2FbtsNzzn9HhG%2FAIJSwkQcZZzS5FTNRchbX1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1015&quot; height=&quot;661&quot; data-origin-width=&quot;1015&quot; data-origin-height=&quot;661&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;테스터해제&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 되면 테스터들에게 더 이상 테스트 버전의 앱이 제공되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 그럼에도 불구하고 몇몇 테스터에게는 여전히 &quot;사전체험판&quot;이란 문구가 앱이름에 붙어있는 경우가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 경우 앱리뷰를 달아주려고 해도 사전체험판이라는 이유로 앱리뷰 작성이 불가능한 문제도 생긴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;**해결방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알고보니 문제는 개발자에게 있는 것이 아니라 테스트에 참여해준 지인의 캐시문제였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하게 해결할 수 있었는데, 바로 테스터인 지인이 구글플레이스토어 앱의 저장공간 메뉴로 들어가서 데이터 및 캐시를 삭제하는 것이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 구글플레이스토어 아이콘을 꾹~눌러서 애플리케이션 정보에 들어가, 저장공간을 선택한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;258&quot; data-origin-height=&quot;598&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9l9Un/btsNBBLd2bu/BIeI3XIahyQncyC4BhVgUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9l9Un/btsNBBLd2bu/BIeI3XIahyQncyC4BhVgUK/img.png&quot; data-alt=&quot;구글플레이스토어 앱정보 - 저장공간 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9l9Un/btsNBBLd2bu/BIeI3XIahyQncyC4BhVgUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9l9Un%2FbtsNBBLd2bu%2FBIeI3XIahyQncyC4BhVgUK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;258&quot; height=&quot;598&quot; data-origin-width=&quot;258&quot; data-origin-height=&quot;598&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;구글플레이스토어 앱정보 - 저장공간 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저장공간의 화면 하단에 있는 데이터 삭제, 캐시 삭제를 진행한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;354&quot; data-origin-height=&quot;548&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dZR5zP/btsNAeDI8Zg/fTKfNRDC9qxiQlWhLV2Zkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dZR5zP/btsNAeDI8Zg/fTKfNRDC9qxiQlWhLV2Zkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dZR5zP/btsNAeDI8Zg/fTKfNRDC9qxiQlWhLV2Zkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdZR5zP%2FbtsNAeDI8Zg%2FfTKfNRDC9qxiQlWhLV2Zkk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;354&quot; height=&quot;548&quot; data-origin-width=&quot;354&quot; data-origin-height=&quot;548&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요렇게 한 후에 다시 구글 플레이 스토어에서 앱을 찾아 들어가면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;사전체험판&quot;이 사라진 것을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘의 팁 끝~!&lt;/p&gt;</description>
      <category>DOT Defense</category>
      <category>베타테스터삭제</category>
      <category>비공개테스트</category>
      <category>사전체험판</category>
      <category>사전체험판제거</category>
      <category>사전체험판제거하는방법</category>
      <category>앱개발</category>
      <category>앱제목</category>
      <category>정식출시후에도사전체험판</category>
      <category>프로덕션</category>
      <category>플레이스토어</category>
      <author>simplidevelo</author>
      <guid isPermaLink="true">https://simplidevelo.tistory.com/8</guid>
      <comments>https://simplidevelo.tistory.com/8#entry8comment</comments>
      <pubDate>Fri, 25 Apr 2025 22:06:23 +0900</pubDate>
    </item>
  </channel>
</rss>