<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Solo.dev</title>
    <link>https://talk7053.tistory.com/</link>
    <description>혼자 개발하는 여정을 적는 블로그입니다. 쉽지 않네요</description>
    <language>ko</language>
    <pubDate>Mon, 29 Jun 2026 22:24:32 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Solo.dev</managingEditor>
    <image>
      <title>Solo.dev</title>
      <url>https://tistory1.daumcdn.net/tistory/7376675/attach/6d2cfc1eb1b94d0c95b60dc64137b4d1</url>
      <link>https://talk7053.tistory.com</link>
    </image>
    <item>
      <title>new project - app_base +mcp (1)</title>
      <link>https://talk7053.tistory.com/197</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Gemini CLI와 MCP 서버 연동 실험 후기&lt;/title&gt;
    &lt;link href=&quot;https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;700&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;
    &lt;style&gt;
        :root {
            --primary-color: #4A90E2; /* Blue */
            --secondary-color: #50E3C2; /* Teal */
            --text-color: #333;
            --light-text-color: #666;
            --background-color: #F8F9FA;
            --card-background: #FFFFFF;
            --border-color: #E0E0E0;
            --shadow-color: rgba(0, 0, 0, 0.08);
        }

        body {
            font-family: 'Noto Sans KR', sans-serif;
            line-height: 1.6;
            color: var(--text-color);
            max-width: 960px;
            margin: 30px auto;
            padding: 0 20px;
            background-color: var(--background-color);
            -webkit-font-smoothing: antialiased;
            -moz-osx-font-smoothing: grayscale;
        }

        h1 {
            font-size: 2.5em;
            color: var(--primary-color);
            text-align: center;
            margin-bottom: 40px;
            padding-bottom: 15px;
            border-bottom: 3px solid var(--primary-color);
            letter-spacing: -0.5px;
        }

        h2 {
            font-size: 1.8em;
            color: var(--primary-color);
            margin-top: 40px;
            margin-bottom: 20px;
            padding-bottom: 8px;
            border-bottom: 1px solid var(--border-color);
        }

        h3 {
            font-size: 1.3em;
            color: var(--text-color);
            margin-top: 25px;
            margin-bottom: 10px;
        }

        .section {
            background-color: var(--card-background);
            border-radius: 12px;
            padding: 30px;
            margin-bottom: 30px;
            box-shadow: 0 6px 15px var(--shadow-color);
            transition: transform 0.2s ease-in-out;
        }

        .section:hover {
            transform: translateY(-5px);
        }

        ul {
            list-style-type: none; /* Remove default bullet */
            padding-left: 0;
            margin-left: 0;
        }

        ul li {
            position: relative;
            padding-left: 25px;
            margin-bottom: 10px;
            color: var(--light-text-color);
        }

        ul li::before {
            content: '•'; /* Custom bullet */
            color: var(--secondary-color);
            font-size: 1.2em;
            position: absolute;
            left: 0;
            top: 0;
        }

        ul ul {
            margin-top: 5px;
            margin-left: 20px;
        }

        ul ul li::before {
            content: '—'; /* Custom sub-bullet */
            color: var(--primary-color);
            font-size: 1em;
        }

        ol {
            padding-left: 20px;
            color: var(--light-text-color);
        }

        ol li {
            margin-bottom: 8px;
        }

        code {
            background-color: #F0F0F0;
            padding: 3px 6px;
            border-radius: 5px;
            font-family: 'Fira Code', 'Consolas', monospace;
            font-size: 0.9em;
            color: #C0392B;
        }

        strong {
            color: var(--primary-color);
            font-weight: 700;
        }

        a {
            color: var(--primary-color);
            text-decoration: none;
            transition: color 0.2s ease-in-out;
        }

        a:hover {
            color: var(--secondary-color);
            text-decoration: underline;
        }

        .note {
            background-color: #EBF5FB;
            border-left: 6px solid var(--primary-color);
            padding: 20px;
            margin-top: 40px;
            border-radius: 8px;
            color: var(--light-text-color);
            font-style: italic;
        }

        .note p {
            margin: 0;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;h1&gt;Gemini CLI와 MCP 서버 연동 실험 후기&lt;/h1&gt;

    &lt;div class=&quot;section&quot;&gt;
        &lt;h2&gt;실험 과정 요약&lt;/h2&gt;
        &lt;p&gt;
            실험은 다음과 같은 단계로 진행되었습니다:
        &lt;/p&gt;
        &lt;ol&gt;
            &lt;li&gt;
                &lt;strong&gt;MCP 서버 설정 확인 및 실행 시도:&lt;/strong&gt;
                &lt;code&gt;GEMINI.md&lt;/code&gt; 파일에 명시된 MCP Filesystem, Git, Commands 서버 실행 명령어를 확인하고, 이를 백그라운드에서 실행하는 것을 시도했습니다.
            &lt;/li&gt;
            &lt;li&gt;
                &lt;strong&gt;Gemini CLI 기능과 MCP 서버 기능 비교:&lt;/strong&gt;
                이 과정에서 Gemini CLI가 이미 파일 읽기/쓰기, 셸 명령어 실행, Git 관리 등 MCP 서버와 유사한 기능들을 자체적으로 제공하고 있음을 확인했습니다.
            &lt;/li&gt;
            &lt;li&gt;
                &lt;strong&gt;결론 도출:&lt;/strong&gt;
                현재로서는 Gemini CLI가 제공하는 내장 기능만으로도 충분히 많은 작업을 수행할 수 있어, MCP 서버를 직접 연동하여 사용하는 것이 필수적이지 않다는 결론에 도달했습니다.
                다만, Gemini CLI의 내장 기능으로는 불가능한, 특정 MCP 서버만이 제공하는 특화된 기능(예: 특정 외부 서비스 연동, 실시간 데이터 스트리밍 등)이 있다면 그 활용 가치는 충분할 것입니다.
            &lt;/li&gt;
        &lt;/ol&gt;
    &lt;/div&gt;

    &lt;div class=&quot;section&quot;&gt;
        &lt;h2&gt;향후 방향&lt;/h2&gt;
        &lt;p&gt;
            이번 실험을 통해 Gemini CLI의 강력한 자체 기능을 재확인할 수 있었습니다.
            앞으로는 MCP 서버와의 직접적인 연동보다는, Gemini CLI의 기존 기능을 활용하면서 다른 유용한 개발 도구들과의 연계에 더욱 집중하여 개발 생산 생산성을 높이는 방안을 모색할 예정입니다.
            만약 Gemini CLI의 내장 기능으로 대체할 수 없는 독점적인 기능을 제공하는 MCP 서버가 있다면, 해당 서버와의 연동을 적극적으로 고려할 것입니다.
        &lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;note&quot;&gt;
        &lt;p&gt;이 문서는 Gemini CLI와 MCP 서버 연동 실험에 대한 요약입니다. Gemini CLI의 내장 기능과 MCP 서버의 역할을 비교하고, 향후 개발 방향에 대한 인사이트를 제공합니다.&lt;/p&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>app_base</category>
      <author>Solo.dev</author>
      <guid isPermaLink="true">https://talk7053.tistory.com/197</guid>
      <comments>https://talk7053.tistory.com/197#entry197comment</comments>
      <pubDate>Sat, 9 Aug 2025 03:28:49 +0900</pubDate>
    </item>
    <item>
      <title>new project - app_base +mcp (개요)</title>
      <link>https://talk7053.tistory.com/196</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Project Overview: app_base&lt;/title&gt;
    &lt;link href=&quot;https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@300;400;700&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;
    &lt;style&gt;
        :root {
            --primary-color: #4A90E2; /* Blue */
            --secondary-color: #50E3C2; /* Teal */
            --text-color: #333;
            --light-text-color: #666;
            --background-color: #F8F9FA;
            --card-background: #FFFFFF;
            --border-color: #E0E0E0;
            --shadow-color: rgba(0, 0, 0, 0.08);
        }

        body {
            font-family: 'Noto Sans KR', sans-serif;
            line-height: 1.6;
            color: var(--text-color);
            max-width: 960px;
            margin: 30px auto;
            padding: 0 20px;
            background-color: var(--background-color);
            -webkit-font-smoothing: antialiased;
            -moz-osx-font-smoothing: grayscale;
        }

        h1 {
            font-size: 2.5em;
            color: var(--primary-color);
            text-align: center;
            margin-bottom: 40px;
            padding-bottom: 15px;
            border-bottom: 3px solid var(--primary-color);
            letter-spacing: -0.5px;
        }

        h2 {
            font-size: 1.8em;
            color: var(--primary-color);
            margin-top: 40px;
            margin-bottom: 20px;
            padding-bottom: 8px;
            border-bottom: 1px solid var(--border-color);
        }

        h3 {
            font-size: 1.3em;
            color: var(--text-color);
            margin-top: 25px;
            margin-bottom: 10px;
        }

        .section {
            background-color: var(--card-background);
            border-radius: 12px;
            padding: 30px;
            margin-bottom: 30px;
            box-shadow: 0 6px 15px var(--shadow-color);
            transition: transform 0.2s ease-in-out;
        }

        .section:hover {
            transform: translateY(-5px);
        }

        ul {
            list-style-type: none; /* Remove default bullet */
            padding-left: 0;
            margin-left: 0;
        }

        ul li {
            position: relative;
            padding-left: 25px;
            margin-bottom: 10px;
            color: var(--light-text-color);
        }

        ul li::before {
            content: '•'; /* Custom bullet */
            color: var(--secondary-color);
            font-size: 1.2em;
            position: absolute;
            left: 0;
            top: 0;
        }

        ul ul {
            margin-top: 5px;
            margin-left: 20px;
        }

        ul ul li::before {
            content: '—'; /* Custom sub-bullet */
            color: var(--primary-color);
            font-size: 1em;
        }

        ol {
            padding-left: 20px;
            color: var(--light-text-color);
        }

        ol li {
            margin-bottom: 8px;
        }

        code {
            background-color: #F0F0F0;
            padding: 3px 6px;
            border-radius: 5px;
            font-family: 'Fira Code', 'Consolas', monospace;
            font-size: 0.9em;
            color: #C0392B;
        }

        strong {
            color: var(--primary-color);
            font-weight: 700;
        }

        a {
            color: var(--primary-color);
            text-decoration: none;
            transition: color 0.2s ease-in-out;
        }

        a:hover {
            color: var(--secondary-color);
            text-decoration: underline;
        }

        .note {
            background-color: #EBF5FB;
            border-left: 6px solid var(--primary-color);
            padding: 20px;
            margin-top: 40px;
            border-radius: 8px;
            color: var(--light-text-color);
            font-style: italic;
        }

        .note p {
            margin: 0;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;h1&gt;Project Overview: app_base&lt;/h1&gt;

    &lt;div class=&quot;section&quot;&gt;
        &lt;h2&gt;1. 프로젝트 목표&lt;/h2&gt;
        &lt;p&gt;이 프로젝트는 React Native와 Expo로 구축된 모바일 애플리케이션입니다. 백엔드 서비스에는 Firebase를 사용하며 TypeScript로 작성되었습니다. 이 프로젝트의 궁극적인 목표는 &lt;strong&gt;모든 새로운 모바일 앱 개발의 견고한 기본 베이스를 구축&lt;/strong&gt;하는 것입니다. 이를 통해 앱 아이디어가 생길 때마다 이 베이스에 필요한 기능만 추가하여 빠르고 효율적으로 개발할 수 있도록 합니다. 특히, UI 및 백엔드 통합을 위해 Model Context Protocol (MCP)을 실험적으로 도입하여, 앱 개발의 초기 설정을 최소화하고 핵심 기능 구현에 집중할 수 있는 환경을 마련하는 것을 목표로 합니다.&lt;/p&gt;
    &lt;/div&gt;

    &lt;div class=&quot;section&quot;&gt;
        &lt;h2&gt;2. 기술 스택&lt;/h2&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;strong&gt;프레임워크&lt;/strong&gt;: React Native with Expo&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;언어&lt;/strong&gt;: TypeScript&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;내비게이션&lt;/strong&gt;: React Navigation&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;백엔드&lt;/strong&gt;: Firebase&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;폰트&lt;/strong&gt;: @expo-google-fonts/roboto&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/div&gt;

    &lt;div class=&quot;section&quot;&gt;
        &lt;h2&gt;3. 프로젝트 구조&lt;/h2&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;code&gt;index.ts&lt;/code&gt;: 애플리케이션의 진입점.&lt;/li&gt;
            &lt;li&gt;&lt;code&gt;src/&lt;/code&gt;: 주요 소스 코드 포함.
                &lt;ul&gt;
                    &lt;li&gt;&lt;code&gt;App.tsx&lt;/code&gt;: Firebase 및 메인 내비게이터를 초기화하는 애플리케이션의 루트 컴포넌트.&lt;/li&gt;
                    &lt;li&gt;&lt;code&gt;components/&lt;/code&gt;: 재사용 가능한 UI 컴포넌트 디렉토리.&lt;/li&gt;
                    &lt;li&gt;&lt;code&gt;config/&lt;/code&gt;: Firebase 설정(&lt;code&gt;firebaseConfig.ts&lt;/code&gt;)을 포함한 설정 파일.&lt;/li&gt;
                    &lt;li&gt;&lt;code&gt;navigation/&lt;/code&gt;: React Navigation을 사용한 내비게이션 설정.
                        &lt;ul&gt;
                            &lt;li&gt;&lt;code&gt;AppNavigator.tsx&lt;/code&gt;: 앱의 메인 스택 내비게이터 정의.&lt;/li&gt;
                        &lt;/ul&gt;
                    &lt;/li&gt;
                    &lt;li&gt;&lt;code&gt;screens/&lt;/code&gt;: 애플리케이션의 다양한 화면 포함.
                        &lt;ul&gt;
                            &lt;li&gt;&lt;code&gt;HomeScreen.tsx&lt;/code&gt;: 앱 실행 후 표시되는 메인 화면.&lt;/li&gt;
                            &lt;li&gt;&lt;code&gt;DetailScreen.tsx&lt;/code&gt;: 상세 정보를 표시하기 위한 화면.&lt;/li&gt;
                            &lt;li&gt;&lt;code&gt;SettingsScreen.tsx&lt;/code&gt;: 애플리케이션 설정을 위한 화면.&lt;/li&gt;
                        &lt;/ul&gt;
                    &lt;/li&gt;
                &lt;/ul&gt;
            &lt;/li&gt;
            &lt;li&gt;&lt;code&gt;package.json&lt;/code&gt;: 프로젝트 의존성 및 스크립트 목록.&lt;/li&gt;
            &lt;li&gt;&lt;code&gt;tsconfig.json&lt;/code&gt;: TypeScript 컴파일러 설정.&lt;/li&gt;
            &lt;li&gt;&lt;code&gt;app.json&lt;/code&gt;: Expo 설정 파일.&lt;/li&gt;
            &lt;li&gt;&lt;code&gt;assets/&lt;/code&gt;: 이미지 및 아이콘과 같은 정적 자산.&lt;/li&gt;
            &lt;li&gt;&lt;code&gt;android/&lt;/code&gt; 및 &lt;code&gt;ios/&lt;/code&gt;: 네이티브 프로젝트 디렉토리 (Expo에서 관리).&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/div&gt;

    &lt;div class=&quot;section&quot;&gt;
        &lt;h2&gt;4. 실행 방법&lt;/h2&gt;
        &lt;ol&gt;
            &lt;li&gt;의존성 설치: &lt;code&gt;npm install&lt;/code&gt;&lt;/li&gt;
            &lt;li&gt;개발 서버 시작: &lt;code&gt;npm start&lt;/code&gt;&lt;/li&gt;
            &lt;li&gt;Android에서 실행: &lt;code&gt;npm run android&lt;/code&gt;&lt;/li&gt;
            &lt;li&gt;iOS에서 실행: &lt;code&gt;npm run ios&lt;/code&gt;&lt;/li&gt;
        &lt;/ol&gt;
    &lt;/div&gt;

    &lt;div class=&quot;section&quot;&gt;
        &lt;h2&gt;5. 오늘의 작업 및 목표 (2025년 8월 5일 화요일)&lt;/h2&gt;
        &lt;p&gt;현재 기초 UI 작업을 진행 중이며, 여기에 &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt;을 실험적으로 통합하려는 시도를 하고 있습니다.&lt;/p&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;strong&gt;MCP 연구 진행&lt;/strong&gt;:
                &lt;ul&gt;
                    &lt;li&gt;&lt;a href=&quot;https://github.com/modelcontextprotocol&quot;&gt;modelcontextprotocol&lt;/a&gt; (MCP의 기초 서버 예시) 및 &lt;a href=&quot;https://github.com/modelcontextprotocol/servers&quot;&gt;servers&lt;/a&gt; (기존 MCP 서버 모음) 두 가지 GitHub 저장소를 탐색했습니다.&lt;/li&gt;
                    &lt;li&gt;&lt;code&gt;servers&lt;/code&gt; 저장소에 있는 기존 MCP 서버를 활용하여 UI 관련 MCP 및 Firebase MCP를 &lt;code&gt;app_base&lt;/code&gt;에 통합할 계획입니다.&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Figma 관련 이슈&lt;/strong&gt;:
                &lt;ul&gt;
                    &lt;li&gt;Figma Dev Mode (유료 기능)가 MCP 관련 접근에 필요하다는 것을 확인했습니다.&lt;/li&gt;
                    &lt;li&gt;현재로서는 이 부분을 &lt;strong&gt;보류&lt;/strong&gt;하고 있습니다.&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;최종 목표&lt;/strong&gt;:
                &lt;ul&gt;
                    &lt;li&gt;UI 관련 MCP와 Firebase MCP를 &lt;code&gt;app_base&lt;/code&gt;에 통합하여, UI와 간단한 백엔드를 미리 구성해두는 것입니다.&lt;/li&gt;
                    &lt;li&gt;이를 통해 새로운 앱 아이디어가 생겼을 때, 이 &lt;code&gt;app_base&lt;/code&gt;를 기본으로 삼아 필요한 기능만 추가하여 빠르게 개발할 수 있도록 할 예정입니다.&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/li&gt;
        &lt;/ul&gt;
    &lt;/div&gt;

    &lt;div class=&quot;note&quot;&gt;
        &lt;p&gt;이 문서는 프로젝트의 목적, 기술 스택, 구조 및 실행 방법을 명확하고 간결하게 요약하여 프로젝트를 쉽게 이해할 수 있도록 돕습니다. 또한, 오늘 진행된 작업 내용과 향후 목표를 포함하여 프로젝트의 현재 상태를 반영합니다.&lt;/p&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <author>Solo.dev</author>
      <guid isPermaLink="true">https://talk7053.tistory.com/196</guid>
      <comments>https://talk7053.tistory.com/196#entry196comment</comments>
      <pubDate>Wed, 6 Aug 2025 00:01:22 +0900</pubDate>
    </item>
    <item>
      <title>DateP 업데이트 (2025 07 13)</title>
      <link>https://talk7053.tistory.com/194</link>
      <description>&lt;p data-end=&quot;166&quot; data-start=&quot;71&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;일자:&lt;/b&gt; 2025.07.13&lt;br /&gt;&lt;b&gt;버전:&lt;/b&gt; Android 2.0 / iOS 1.5&lt;br /&gt;&lt;b&gt;상태:&lt;/b&gt; Android, iOS 테스트 완료 / 프로덕션 배포 준비 중&lt;/p&gt;
&lt;hr data-end=&quot;171&quot; data-start=&quot;168&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;181&quot; data-start=&quot;173&quot; data-ke-size=&quot;size26&quot;&gt;변경 사항&lt;/h2&gt;
&lt;h3 data-end=&quot;200&quot; data-start=&quot;183&quot; data-ke-size=&quot;size23&quot;&gt;1. 에러 알림 개선&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;258&quot; data-start=&quot;201&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;236&quot; data-start=&quot;201&quot;&gt;주요 기능 사용 중 에러 발생 시 Alert 메시지 개선&lt;/li&gt;
&lt;li data-end=&quot;258&quot; data-start=&quot;237&quot;&gt;메시지 문구 및 시각적 구성 다듬음&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;284&quot; data-start=&quot;260&quot; data-ke-size=&quot;size23&quot;&gt;2. 광고 보기 안내 이미지 추가&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;344&quot; data-start=&quot;285&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;314&quot; data-start=&quot;285&quot;&gt;광고 시청 화면에 &amp;lsquo;광고 안내용 이미지&amp;rsquo; 추가&lt;/li&gt;
&lt;li data-end=&quot;344&quot; data-start=&quot;315&quot;&gt;사용자가 광고를 더 명확히 인지할 수 있도록 개선&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-end=&quot;370&quot; data-start=&quot;346&quot; data-ke-size=&quot;size23&quot;&gt;3. Free Plan 구조 변경&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;423&quot; data-start=&quot;371&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;404&quot; data-start=&quot;371&quot;&gt;Free Plan 3 &amp;rarr; Free Plan 2로 변경&lt;/li&gt;
&lt;li data-end=&quot;423&quot; data-start=&quot;405&quot;&gt;관련 로직 및 UI 수정 완료&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot; data-start=&quot;346&quot; data-end=&quot;370&quot;&gt;4. basic ,premium plan 가격 변경&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;371&quot; data-end=&quot;423&quot;&gt;
&lt;li data-start=&quot;371&quot; data-end=&quot;404&quot;&gt;basic 5usd -&amp;gt; 3usd&lt;/li&gt;
&lt;li data-start=&quot;405&quot; data-end=&quot;423&quot;&gt;premium 10usd -&amp;gt; 6usd 로 변경&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;428&quot; data-start=&quot;425&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;437&quot; data-start=&quot;430&quot; data-ke-size=&quot;size26&quot;&gt;기타&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;482&quot; data-start=&quot;438&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;464&quot; data-start=&quot;438&quot;&gt;Android, iOS 모두 테스트 완료&lt;/li&gt;
&lt;li data-end=&quot;482&quot; data-start=&quot;465&quot;&gt;현재 프로덕션 배포 준비 중&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>DateP</category>
      <author>Solo.dev</author>
      <guid isPermaLink="true">https://talk7053.tistory.com/194</guid>
      <comments>https://talk7053.tistory.com/194#entry194comment</comments>
      <pubDate>Sun, 13 Jul 2025 17:20:09 +0900</pubDate>
    </item>
    <item>
      <title>✅ DateP Android 및 iOS 광고 설정 및 빌드 제출</title>
      <link>https://talk7053.tistory.com/193</link>
      <description>&lt;h3 data-end=&quot;138&quot; data-start=&quot;118&quot; data-ke-size=&quot;size23&quot;&gt;  &lt;b&gt;오늘 진행한 작업&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;379&quot; data-start=&quot;139&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;257&quot; data-start=&quot;139&quot;&gt;&lt;b&gt;Android&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;257&quot; data-start=&quot;157&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;175&quot; data-start=&quot;157&quot;&gt;버전 &lt;b&gt;1.7&lt;/b&gt;로 업데이트&lt;/li&gt;
&lt;li data-end=&quot;210&quot; data-start=&quot;179&quot;&gt;Free 플랜에서 &lt;b&gt;광고 3개 출력 테스트 완료&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;257&quot; data-start=&quot;214&quot;&gt;개발 빌드까지 확인 &amp;rarr; 내일 프로덕션 빌드에서 최종 광고 노출 테스트 예정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;379&quot; data-start=&quot;259&quot;&gt;&lt;b&gt;iOS&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;379&quot; data-start=&quot;273&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;313&quot; data-start=&quot;273&quot;&gt;버전 &lt;b&gt;1.3.1&lt;/b&gt;로 Free Plan 사용량 &lt;b&gt;3회로 증가&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;327&quot; data-start=&quot;317&quot;&gt;심사 제출 완료&lt;/li&gt;
&lt;li data-end=&quot;379&quot; data-start=&quot;331&quot;&gt;내일 심사 상태 확인 후 문제 없으면 광고 붙여서 &lt;b&gt;1.4 버전으로 빌드 예정&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-end=&quot;384&quot; data-start=&quot;381&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;407&quot; data-start=&quot;386&quot; data-ke-size=&quot;size23&quot;&gt;⚠️ &lt;b&gt;현재 확인된 문제점&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;501&quot; data-start=&quot;408&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;501&quot; data-start=&quot;408&quot;&gt;&lt;b&gt;Premium Plan&lt;/b&gt; 사용 시:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;501&quot; data-start=&quot;435&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;469&quot; data-start=&quot;435&quot;&gt;간헐적으로 추천 결과가 아무것도 없을 때 &lt;b&gt;에러 발생&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;501&quot; data-start=&quot;472&quot;&gt;사용자 경험 문제 및 잔여 크레딧 낭비 우려 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;506&quot; data-start=&quot;503&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;525&quot; data-start=&quot;508&quot; data-ke-size=&quot;size23&quot;&gt;  &lt;b&gt;내일 할 일&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;785&quot; data-start=&quot;526&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;589&quot; data-start=&quot;526&quot;&gt;&lt;b&gt;Android&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;589&quot; data-start=&quot;544&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;567&quot; data-start=&quot;544&quot;&gt;프로덕션 빌드에서 광고 노출 최종 확인&lt;/li&gt;
&lt;li data-end=&quot;589&quot; data-start=&quot;571&quot;&gt;이상 없으면 스토어 배포 준비&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;649&quot; data-start=&quot;591&quot;&gt;&lt;b&gt;iOS&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;649&quot; data-start=&quot;605&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;615&quot; data-start=&quot;605&quot;&gt;심사 상태 확인&lt;/li&gt;
&lt;li data-end=&quot;649&quot; data-start=&quot;619&quot;&gt;승인되면 광고 로직 포함한 &lt;b&gt;1.4 빌드&lt;/b&gt; 제출&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;785&quot; data-start=&quot;651&quot;&gt;&lt;b&gt;에러 안전장치&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;785&quot; data-start=&quot;669&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;723&quot; data-start=&quot;669&quot;&gt;&lt;b&gt;Premium Plan 결과가 없을 때 &amp;rarr; 사용자의 크레딧 자동으로 복원&lt;/b&gt;하는 로직 추가&lt;/li&gt;
&lt;li data-end=&quot;785&quot; data-start=&quot;727&quot;&gt;Firebase Functions의 검색 접두사 개선해서 &lt;b&gt;결과가 거의 무조건 나오도록&lt;/b&gt; 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-end=&quot;790&quot; data-start=&quot;787&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;815&quot; data-start=&quot;792&quot; data-ke-size=&quot;size23&quot;&gt;✅ &lt;b&gt;추가로 진행할 코드 작업&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1010&quot; data-start=&quot;816&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;904&quot; data-start=&quot;816&quot;&gt;gptHandler.ts 또는 searchPlacesHandler.ts에 &lt;b&gt;결과 length 체크&lt;/b&gt; 후 empty이면 크레딧 복원 로직 삽입&lt;/li&gt;
&lt;li data-end=&quot;974&quot; data-start=&quot;905&quot;&gt;functions 내 Google Places API 쿼리 수식어를 더 다양화하여 검색 결과가 항상 나오도록 수정&lt;/li&gt;
&lt;li data-end=&quot;1010&quot; data-start=&quot;975&quot;&gt;심사 통과 후 Gluestack UI로 광고 영역 UI 정리&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>DateP</category>
      <author>Solo.dev</author>
      <guid isPermaLink="true">https://talk7053.tistory.com/193</guid>
      <comments>https://talk7053.tistory.com/193#entry193comment</comments>
      <pubDate>Tue, 24 Jun 2025 23:11:12 +0900</pubDate>
    </item>
    <item>
      <title>DateP Free Plan 수정 및 광고 삽입</title>
      <link>https://talk7053.tistory.com/192</link>
      <description>&lt;h3 data-end=&quot;92&quot; data-start=&quot;76&quot; data-ke-size=&quot;size23&quot;&gt;  &lt;b&gt;작업 요약&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;117&quot; data-start=&quot;94&quot; data-ke-size=&quot;size16&quot;&gt;1️⃣ &lt;b&gt;Free Plan 정책 변경&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;202&quot; data-start=&quot;118&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;144&quot; data-start=&quot;118&quot;&gt;기존: Free Plan 사용 횟수 월 기준&lt;/li&gt;
&lt;li data-end=&quot;202&quot; data-start=&quot;145&quot;&gt;변경: Free Plan은 &lt;b&gt;하루 3회 사용 가능&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;202&quot; data-start=&quot;180&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;202&quot; data-start=&quot;180&quot;&gt;매일 자정에 사용 횟수 자동 초기화됨&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;223&quot; data-start=&quot;204&quot; data-ke-size=&quot;size16&quot;&gt;2️⃣ &lt;b&gt;광고 보기 기능 추가&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;334&quot; data-start=&quot;224&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;334&quot; data-start=&quot;224&quot;&gt;사용자가 &lt;b&gt;광고를 시청하면&lt;/b&gt;&lt;br /&gt;  &lt;b&gt;프리미엄 기능 1회 사용 가능&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;334&quot; data-start=&quot;274&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;306&quot; data-start=&quot;274&quot;&gt;즉, 광고 시청으로 하루 1회 추가 프리미엄 기능 제공&lt;/li&gt;
&lt;li data-end=&quot;334&quot; data-start=&quot;309&quot;&gt;Free Plan 사용 횟수와 별도로 동작&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;358&quot; data-start=&quot;336&quot; data-ke-size=&quot;size16&quot;&gt;3️⃣ &lt;b&gt;결제 모달 노출 조건 변경&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;450&quot; data-start=&quot;359&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;450&quot; data-start=&quot;359&quot;&gt;Free Plan &lt;b&gt;3회 모두 사용한 경우에만&lt;/b&gt;&lt;br /&gt;  결제 모달 표시하여 업그레이드 유도
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;450&quot; data-start=&quot;417&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;450&quot; data-start=&quot;417&quot;&gt;즉, 사용 가능 횟수가 남아있으면 결제 모달은 뜨지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;455&quot; data-start=&quot;452&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;473&quot; data-start=&quot;457&quot; data-ke-size=&quot;size23&quot;&gt;⚡️ &lt;b&gt;핵심 정리&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;항목내용
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 73px;&quot; border=&quot;1&quot; data-end=&quot;617&quot; data-start=&quot;475&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;617&quot; data-start=&quot;497&quot;&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;528&quot; data-start=&quot;497&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;513&quot; data-start=&quot;497&quot;&gt;&lt;b&gt;Free Plan&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-end=&quot;528&quot; data-start=&quot;513&quot; data-col-size=&quot;sm&quot;&gt;하루 3회 사용 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;575&quot; data-start=&quot;529&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;541&quot; data-start=&quot;529&quot;&gt;&lt;b&gt;광고 보기&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-end=&quot;575&quot; data-start=&quot;541&quot; data-col-size=&quot;sm&quot;&gt;광고 시청 시 프리미엄 기능 하루 1회 추가 사용 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;617&quot; data-start=&quot;576&quot;&gt;
&lt;td style=&quot;height: 21px;&quot; data-col-size=&quot;sm&quot; data-end=&quot;588&quot; data-start=&quot;576&quot;&gt;&lt;b&gt;결제 모달&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot; data-end=&quot;617&quot; data-start=&quot;588&quot; data-col-size=&quot;sm&quot;&gt;Free Plan 3회 모두 사용 시에만 표시&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DateP</category>
      <author>Solo.dev</author>
      <guid isPermaLink="true">https://talk7053.tistory.com/192</guid>
      <comments>https://talk7053.tistory.com/192#entry192comment</comments>
      <pubDate>Tue, 24 Jun 2025 00:59:19 +0900</pubDate>
    </item>
    <item>
      <title>  DateP 광고 테스트 실패 (2025-06-22)</title>
      <link>https://talk7053.tistory.com/191</link>
      <description>&lt;h2 data-end=&quot;93&quot; data-start=&quot;55&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h3 data-end=&quot;111&quot; data-start=&quot;95&quot; data-ke-size=&quot;size23&quot;&gt;✅ &lt;b&gt;시도한 작업&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;299&quot; data-start=&quot;112&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;188&quot; data-start=&quot;112&quot;&gt;Free Plan을 &lt;b&gt;1회 &amp;rarr; 3회&lt;/b&gt;로 변경하여, 하루에 한 번 광고를 보고 프리미엄 기능을 체험할 수 있도록 설계하려고 함.&lt;/li&gt;
&lt;li data-end=&quot;243&quot; data-start=&quot;189&quot;&gt;이를 위해 &lt;b&gt;AdMob 설정 완료&lt;/b&gt;, 광고 로드 함수 제작, 광고 UI 구성까지 마무리함.&lt;/li&gt;
&lt;li data-end=&quot;299&quot; data-start=&quot;244&quot;&gt;&lt;b&gt;광고가 정상 출력되는지&lt;/b&gt; 테스트하려 했으나 &lt;b&gt;로드 자체가 안되어 광고가 보이지 않음&lt;/b&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;304&quot; data-start=&quot;301&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;322&quot; data-start=&quot;306&quot; data-ke-size=&quot;size23&quot;&gt;⚠️ &lt;b&gt;현재 문제&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;397&quot; data-start=&quot;323&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;354&quot; data-start=&quot;323&quot;&gt;광고 로드 실패 &amp;rarr; 광고 노출 안됨 &amp;rarr; 테스트 불가.&lt;/li&gt;
&lt;li data-end=&quot;397&quot; data-start=&quot;355&quot;&gt;iOS는 마케팅 웹사이트를 변경해야 AdMob 승인 및 인식 가능함.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;402&quot; data-start=&quot;399&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;425&quot; data-start=&quot;404&quot; data-ke-size=&quot;size23&quot;&gt; ️ &lt;b&gt;내일 해야 할 일&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;693&quot; data-start=&quot;426&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;569&quot; data-start=&quot;426&quot;&gt;&lt;b&gt;광고 로드 실패 원인 분석&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;569&quot; data-start=&quot;453&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;470&quot; data-start=&quot;453&quot;&gt;Ad Unit ID 확인&lt;/li&gt;
&lt;li data-end=&quot;497&quot; data-start=&quot;474&quot;&gt;Expo &amp;amp; Native 설정 확인&lt;/li&gt;
&lt;li data-end=&quot;524&quot; data-start=&quot;501&quot;&gt;AdMob 정책 및 승인 상태 확인&lt;/li&gt;
&lt;li data-end=&quot;569&quot; data-start=&quot;528&quot;&gt;iOS는 app.config.js의 marketingUrl 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;641&quot; data-start=&quot;570&quot;&gt;&lt;b&gt;Free Plan &amp;rarr; 3회 사용으로 확정&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;641&quot; data-start=&quot;603&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;641&quot; data-start=&quot;603&quot;&gt;하루에 1회 광고 시청 &amp;rarr; 프리미엄 기능 사용 가능하게 논리 완성&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;693&quot; data-start=&quot;642&quot;&gt;&lt;b&gt;앱 버전&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;693&quot; data-start=&quot;657&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;693&quot; data-start=&quot;657&quot;&gt;1.3.1로 빌드해서 AdMob 재승인 요청 후 배포 예정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-end=&quot;698&quot; data-start=&quot;695&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;716&quot; data-start=&quot;700&quot; data-ke-size=&quot;size23&quot;&gt;  &lt;b&gt;계획 요약&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;794&quot; data-start=&quot;717&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;737&quot; data-start=&quot;717&quot;&gt;Free Plan &amp;rarr; 3회&lt;/li&gt;
&lt;li data-end=&quot;768&quot; data-start=&quot;738&quot;&gt;하루에 한 번 광고 &amp;rarr; 프리미엄 기능 사용 가능&lt;/li&gt;
&lt;li data-end=&quot;794&quot; data-start=&quot;769&quot;&gt;광고 문제 해결 후 기능 완성 및 배포&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>DateP</category>
      <author>Solo.dev</author>
      <guid isPermaLink="true">https://talk7053.tistory.com/191</guid>
      <comments>https://talk7053.tistory.com/191#entry191comment</comments>
      <pubDate>Mon, 23 Jun 2025 00:47:52 +0900</pubDate>
    </item>
    <item>
      <title>DateP 출시 후 광고 붙이기 계획 .</title>
      <link>https://talk7053.tistory.com/190</link>
      <description>&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;h2 data-end=&quot;141&quot; data-start=&quot;102&quot; data-ke-size=&quot;size26&quot;&gt;✅   &lt;b&gt;Free Plan 광고 기반 장소 정보 제공 모달&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-end=&quot;163&quot; data-start=&quot;143&quot; data-ke-size=&quot;size23&quot;&gt;1️⃣ &lt;b&gt;모달 제목 제안&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;259&quot; data-start=&quot;164&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;190&quot; data-start=&quot;164&quot;&gt;  &lt;b&gt;&amp;ldquo;프리미엄 장소 추천 이용하기&amp;rdquo;&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;226&quot; data-start=&quot;191&quot;&gt; ️ &lt;b&gt;&amp;ldquo;Google 추천 장소 정보 잠금 해제하기&amp;rdquo;&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;259&quot; data-start=&quot;227&quot;&gt;  &lt;b&gt;&amp;ldquo;잠깐 광고 보고 특별 장소 정보 받기!&amp;rdquo;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;295&quot; data-start=&quot;261&quot; data-ke-size=&quot;size16&quot;&gt;  추천: &lt;b&gt;&amp;ldquo;광고 보고 Google 장소 정보 열기&amp;rdquo;&lt;/b&gt;&lt;/p&gt;
&lt;hr data-end=&quot;300&quot; data-start=&quot;297&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;322&quot; data-start=&quot;302&quot; data-ke-size=&quot;size23&quot;&gt;2️⃣ &lt;b&gt;모달 내용 예시&lt;/b&gt;&lt;/h3&gt;
&lt;blockquote data-end=&quot;429&quot; data-start=&quot;323&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;429&quot; data-start=&quot;325&quot; data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;프리미엄 사용자만 이용 가능한 Google Maps 기반 실시간 장소 추천을 광고 시청 후 1회 사용해보세요!&lt;br /&gt;오늘 하루 3회까지 광고를 통해 무료로 체험할 수 있어요.&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr data-end=&quot;434&quot; data-start=&quot;431&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;457&quot; data-start=&quot;436&quot; data-ke-size=&quot;size23&quot;&gt;3️⃣ &lt;b&gt;버튼 텍스트 예시&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;521&quot; data-start=&quot;458&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;479&quot; data-start=&quot;458&quot;&gt;&lt;b&gt;&amp;ldquo;광고 시청하고 잠금 해제&amp;rdquo;&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;498&quot; data-start=&quot;480&quot;&gt;&lt;b&gt;&amp;ldquo;광고 보고 이용하기&amp;rdquo;&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;521&quot; data-start=&quot;499&quot;&gt;&lt;b&gt;&amp;ldquo;광고 보고 장소 추천 받기&amp;rdquo;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;526&quot; data-start=&quot;523&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;552&quot; data-start=&quot;528&quot; data-ke-size=&quot;size26&quot;&gt;✅   &lt;b&gt;Free Plan 정책&lt;/b&gt;&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;항목현재변경
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;754&quot; data-start=&quot;554&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;754&quot; data-start=&quot;594&quot;&gt;
&lt;tr data-end=&quot;628&quot; data-start=&quot;594&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;613&quot; data-start=&quot;594&quot;&gt;Free Plan 일일 사용량&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;618&quot; data-start=&quot;613&quot;&gt;1회&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;628&quot; data-start=&quot;618&quot;&gt;&lt;b&gt;3회&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;659&quot; data-start=&quot;629&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;637&quot; data-start=&quot;629&quot;&gt;추가 사용&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;653&quot; data-start=&quot;637&quot;&gt;광고 시청 시 1회 추가&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;659&quot; data-start=&quot;653&quot;&gt;유지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;689&quot; data-start=&quot;660&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;668&quot; data-start=&quot;660&quot;&gt;광고 로직&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;683&quot; data-start=&quot;668&quot;&gt;플러팅 AI 코드 참고&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;689&quot; data-start=&quot;683&quot;&gt;유지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;754&quot; data-start=&quot;690&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;696&quot; data-start=&quot;690&quot;&gt;API&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;748&quot; data-start=&quot;696&quot;&gt;Google Places Text Search Enterprise + Atmosphere&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;754&quot; data-start=&quot;748&quot;&gt;유지&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;759&quot; data-start=&quot;756&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;781&quot; data-start=&quot;761&quot; data-ke-size=&quot;size26&quot;&gt;✅   &lt;b&gt;다음 빌드 계획&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;961&quot; data-start=&quot;783&quot; data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;Free Plan: 하루 3회 기본 제공&lt;/b&gt;&lt;br /&gt;✅ &lt;b&gt;광고 모달 &amp;rarr; 광고 1회 시청 = 1회 장소 정보 제공&lt;/b&gt;&lt;br /&gt;✅ &lt;b&gt;Basic / Premium은 무제한&lt;/b&gt;&lt;br /&gt;✅ &lt;b&gt;광고 로직: 플러팅 AI에서 쓰던 Codex Ads 설정 활용&lt;/b&gt;&lt;br /&gt;✅ &lt;b&gt;Firebase에 유저 크레딧 &amp;amp; 광고 시청 기록 저장&lt;/b&gt;&lt;/p&gt;
&lt;hr data-end=&quot;966&quot; data-start=&quot;963&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;984&quot; data-start=&quot;968&quot; data-ke-size=&quot;size26&quot;&gt;✅   &lt;b&gt;추가 팁&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1146&quot; data-start=&quot;986&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1035&quot; data-start=&quot;986&quot;&gt;모달 컴포넌트: Gluestack UI Modal + Button 그대로 활용&lt;/li&gt;
&lt;li data-end=&quot;1100&quot; data-start=&quot;1036&quot;&gt;광고: expo-ads-admob or react-native-google-mobile-ads 활용 가능&lt;/li&gt;
&lt;li data-end=&quot;1146&quot; data-start=&quot;1101&quot;&gt;크레딧 관리: Firestore user.plan.credits 필드 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1151&quot; data-start=&quot;1148&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1161&quot; data-start=&quot;1153&quot; data-ke-size=&quot;size26&quot;&gt;✅ ✅ ✅&lt;/h2&gt;
&lt;p data-end=&quot;1284&quot; data-start=&quot;1163&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;오늘 정리:&lt;/b&gt;&lt;br /&gt;Free Plan &amp;rarr; 하루 3회 기본 + 광고 1회 시청 시 추가 1회 제공!&lt;br /&gt;Basic / Premium은 제한 없음.&lt;br /&gt;광고 로직은 플러팅 AI 참고해서 Codex Ads로 구현.&lt;/p&gt;</description>
      <category>DateP</category>
      <author>Solo.dev</author>
      <guid isPermaLink="true">https://talk7053.tistory.com/190</guid>
      <comments>https://talk7053.tistory.com/190#entry190comment</comments>
      <pubDate>Tue, 17 Jun 2025 22:09:49 +0900</pubDate>
    </item>
    <item>
      <title>2025 06 11 DateP 홍보 계획 및 작업</title>
      <link>https://talk7053.tistory.com/189</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;오늘의 작업 정리&lt;/title&gt;
    &lt;style&gt;
        body {
            font-family: Arial, sans-serif;
            margin: 20px;
            line-height: 1.6;
        }
        h1 {
            color: #333;
        }
        ul {
            list-style-type: none;
            padding: 0;
        }
        li {
            margin-bottom: 10px;
        }
        .task {
            background-color: #f9f9f9;
            padding: 10px;
            border-radius: 5px;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;h1&gt;2025년 6월 11일 작업 정리&lt;/h1&gt;
    &lt;ul&gt;
        &lt;li class=&quot;task&quot;&gt;
            &lt;strong&gt;1. DateP 프리미엄 테스트&lt;/strong&gt;
            &lt;ul&gt;
                &lt;li&gt;프리미엄 기능으로 테스트 진행&lt;/li&gt;
                &lt;li&gt;영상 및 사진 수집 완료&lt;/li&gt;
                &lt;li&gt;수집한 자료를 GPT에 넘겨 홍보 이미지 생성&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/li&gt;
        &lt;li class=&quot;task&quot;&gt;
            &lt;strong&gt;2. Sora 작업&lt;/strong&gt;
            &lt;ul&gt;
                &lt;li&gt;Sora로 장면 생성 중&lt;/li&gt;
                &lt;li&gt;작업 시간 오래 소요로 오늘 완료 불가&lt;/li&gt;
                &lt;li&gt;홍보 이미지 완성 후 인스타그램, 틱톡 업로드로 마무리&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/li&gt;
    &lt;/ul&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>DateP</category>
      <author>Solo.dev</author>
      <guid isPermaLink="true">https://talk7053.tistory.com/189</guid>
      <comments>https://talk7053.tistory.com/189#entry189comment</comments>
      <pubDate>Wed, 11 Jun 2025 23:37:43 +0900</pubDate>
    </item>
    <item>
      <title>2025 06 10 DateP 작업</title>
      <link>https://talk7053.tistory.com/188</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;오늘 작업 요약 및 다음 계획&lt;/title&gt;
    &lt;style&gt;
        body {
            font-family: 'Arial', sans-serif;
            line-height: 1.6;
            margin: 20px;
            background-color: #f4f4f4;
            color: #333;
        }
        .container {
            max-width: 800px;
            margin: auto;
            background: #fff;
            padding: 20px;
            border-radius: 8px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
        }
        h1, h2 {
            color: #0056b3;
            border-bottom: 2px solid #0056b3;
            padding-bottom: 5px;
            margin-bottom: 15px;
        }
        h1 {
            text-align: center;
            margin-bottom: 30px;
        }
        h2 {
            margin-top: 25px;
        }
        ul {
            list-style: disc;
            margin-left: 20px;
            padding-left: 0;
        }
        li {
            margin-bottom: 10px;
        }
        strong {
            color: #003366;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div class=&quot;container&quot;&gt;
        &lt;h1&gt;오늘 작업 요약 및 다음 계획&lt;/h1&gt;

        &lt;h2&gt;✅ 오늘 진행한 작업 요약&lt;/h2&gt;
        &lt;ul&gt;
            &lt;li&gt;
                &lt;strong&gt;추천 데이트 코스 UI 개선 (모달 내 Footer 부분):&lt;/strong&gt;
                &lt;ul&gt;
                    &lt;li&gt;기존의 단순 텍스트 나열 방식에서 벗어나, GPT 추천 데이트 코스 부분을 &lt;strong&gt;시각적으로 구분된 타임라인 형태의 UI&lt;/strong&gt;로 변경했습니다.&lt;/li&gt;
                    &lt;li&gt;각 장소(Place 1, Place 2 등)를 명확히 분리하고, 장소 이름, 설명, 방문 시간, 소요 시간 등의 정보를 개별 블록으로 표시하도록 `renderParsedGPTCourse` 함수와 관련 스타일(`gptCourseTimeline...`)을 수정했습니다.&lt;/li&gt;
                    &lt;li&gt;GPT 응답에서 도입부와 마무리 글을 분리하여 코스 설명 전후에 자연스럽게 표시되도록 파싱 로직(`parseGPTResponse`)을 개선했습니다.&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/li&gt;
            &lt;li&gt;
                &lt;strong&gt;GPT 프롬프트 수정 (`getGPTanalysis.ts`):&lt;/strong&gt;
                &lt;ul&gt;
                    &lt;li&gt;GPT가 데이트 코스 응답을 좀 더 일관되고 파싱하기 쉬운 구조(장소별 이름, 설명, 시간 정보 명시)로 생성하도록 프롬프트를 조정했습니다.&lt;/li&gt;
                    &lt;li&gt;마크다운 형식 사용을 금지하고, 지정된 언어로만 응답하도록 강조하여 파싱 오류 가능성을 줄였습니다.&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/li&gt;
        &lt;/ul&gt;

        &lt;h2&gt;  다음 단계: 앱 홍보 자료 제작&lt;/h2&gt;
        &lt;ul&gt;
            &lt;li&gt;
                &lt;strong&gt;주요 기능 스크린샷 촬영:&lt;/strong&gt;
                &lt;ul&gt;
                    &lt;li&gt;앱의 핵심 기능(장소 검색, 구독 플랜 안내, 특히 개선된 추천 데이트 코스 UI)을 보여주는 고품질 스크린샷을 확보합니다.&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/li&gt;
            &lt;li&gt;
                &lt;strong&gt;스크린샷 기반 홍보 콘텐츠 아이디어 구상 (GPT 활용 준비):&lt;/strong&gt;
                &lt;ul&gt;
                    &lt;li&gt;촬영된 스크린샷을 활용하여 홍보 문구, 짧은 영상 시나리오 등의 아이디어를 GPT에게서 얻을 계획입니다.&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/li&gt;
            &lt;li&gt;
                &lt;strong&gt;GPT를 활용한 홍보 영상/콘텐츠 제작:&lt;/strong&gt;
                &lt;ul&gt;
                    &lt;li&gt;GPT가 생성한 아이디어를 바탕으로 실제 홍보 영상 또는 이미지 슬라이드쇼 형태의 홍보 콘텐츠를 제작합니다.&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/li&gt;
        &lt;/ul&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>DateP</category>
      <author>Solo.dev</author>
      <guid isPermaLink="true">https://talk7053.tistory.com/188</guid>
      <comments>https://talk7053.tistory.com/188#entry188comment</comments>
      <pubDate>Wed, 11 Jun 2025 23:37:02 +0900</pubDate>
    </item>
    <item>
      <title>AI 숏츠 비디오 자동 생성기: 2025년 6월 8일 전체 요약</title>
      <link>https://talk7053.tistory.com/187</link>
      <description>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;AI 숏츠 비디오 자동 생성기: 2025년 6월 8일 전체 요약&lt;/title&gt;
    &lt;link href=&quot;https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;600&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;
    &lt;link href=&quot;https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism.min.css&quot; rel=&quot;stylesheet&quot; /&gt;
    &lt;style&gt;
        body {
            font-family: 'Noto Sans KR', sans-serif;
            line-height: 1.6;
            max-width: 1000px;
            margin: 0 auto;
            padding: 40px 20px;
            color: #333;
            background: linear-gradient(135deg, #e0f7fa, #b2ebf2);
            min-height: 100vh;
            overflow-x: hidden;
        }
        .section-title {
            font-size: 32px;
            color: #fff;
            background: linear-gradient(90deg, #0288d1, #4fc3f7);
            padding: 15px 20px;
            border-radius: 10px;
            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
            margin-bottom: 30px;
            animation: slideInLeft 1s ease-in-out, pulse 2s infinite;
        }
        .sub-title {
            font-size: 24px;
            color: #0277bd;
            margin: 40px 0 20px;
            position: relative;
            padding-left: 15px;
            transition: color 0.3s ease, transform 0.3s ease;
            animation: fadeInUp 0.8s ease-in-out;
        }
        .sub-title::before {
            content: '';
            position: absolute;
            left: 0;
            top: 50%;
            width: 5px;
            height: 0;
            background: #0288d1;
            border-radius: 5px;
            animation: growBar 1s ease forwards;
        }
        .sub-title:hover {
            color: #01579b;
            transform: translateX(10px);
        }
        .content-list {
            margin: 15px 0 25px 20px;
            padding-left: 20px;
        }
        .content-list--unordered li {
            list-style-type: none;
            margin-bottom: 12px;
            position: relative;
            padding-left: 15px;
            animation: bounceIn 0.6s ease-in-out;
            animation-fill-mode: both;
        }
        .content-list--unordered li::before {
            content: '●';
            color: #4fc3f7;
            position: absolute;
            left: 0;
            font-size: 10px;
            top: 50%;
            transform: translateY(-50%);
            animation: spin 1.5s infinite linear;
        }
        .content-list--ordered li {
            list-style-type: decimal;
            margin-bottom: 12px;
            position: relative;
            padding-left: 15px;
            animation: bounceIn 0.6s ease-in-out;
            animation-fill-mode: both;
        }
        .content-list li:hover {
            transform: translateX(5px);
            transition: transform 0.3s ease;
        }
        .code-block {
            background: #ffffff;
            padding: 20px;
            border-radius: 10px;
            font-size: 15px;
            line-height: 1.5;
            overflow-x: auto;
            box-shadow: 0 6px 15px rgba(0, 0, 0, 0.1);
            border-left: 5px solid #0288d1;
            margin: 15px 0;
            transition: transform 0.3s ease, box-shadow 0.3s ease;
            animation: fadeInRight 1s ease-in-out;
        }
        .code-block:hover {
            transform: scale(1.02);
            box-shadow: 0 8px 20px rgba(0, 0, 0, 0.15);
        }
        pre[class*=&quot;language-&quot;] {
            margin: 0;
            padding: 0;
            background: transparent;
            border: none;
            box-shadow: none;
        }
        code[class*=&quot;language-&quot;] {
            font-family: 'Fira Code', monospace;
            font-size: 15px;
        }
        .inline-code {
            font-family: 'Fira Code', monospace;
            background: #e1f5fe;
            padding: 3px 8px;
            border-radius: 5px;
            color: #0277bd;
        }
        .highlight {
            color: #d81b60;
            font-weight: 600;
            text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1);
            animation: wiggle 0.5s infinite;
        }
        @keyframes slideInLeft { from { opacity: 0; transform: translateX(-100px); } to { opacity: 1; transform: translateX(0); } }
        @keyframes fadeInUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } }
        @keyframes fadeInRight { from { opacity: 0; transform: translateX(50px); } to { opacity: 1; transform: translateX(0); } }
        @keyframes bounceIn { 0% { opacity: 0; transform: scale(0.3); } 50% { opacity: 1; transform: scale(1.05); } 70% { transform: scale(0.95); } 100% { transform: scale(1); } }
        @keyframes growBar { from { height: 0; } to { height: 80%; } }
        @keyframes spin { from { transform: translateY(-50%) rotate(0deg); } to { transform: translateY(-50%) rotate(360deg); } }
        @keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.05); } 100% { transform: scale(1); } }
        @keyframes wiggle { 0% { transform: rotate(0deg); } 25% { transform: rotate(2deg); } 75% { transform: rotate(-2deg); } 100% { transform: rotate(0deg); } }
        .content-list li:nth-child(1) { animation-delay: 0.2s; }
        .content-list li:nth-child(2) { animation-delay: 0.4s; }
        .content-list li:nth-child(3) { animation-delay: 0.6s; }
        .content-list li:nth-child(4) { animation-delay: 0.8s; }
        @media (max-width: 600px) {
            body { padding: 20px 10px; }
            .section-title { font-size: 26px; padding: 10px 15px; }
            .sub-title { font-size: 20px; }
            .code-block { font-size: 13px; padding: 15px; }
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;h1 class=&quot;section-title&quot;&gt;  AI 숏츠 비디오 자동 생성기: 2025년 6월 8일 전체 요약&lt;/h1&gt;
    
    &lt;h2 class=&quot;sub-title&quot;&gt;✅ 완료된 작업 (기존 + 신규)&lt;/h2&gt;
    
    &lt;h3&gt;스크립트 생성 (script_generator.py)&lt;/h3&gt;
    &lt;ul class=&quot;content-list content-list--unordered&quot;&gt;
        &lt;li&gt;OpenAI API (gpt-4o-mini 등)를 사용하여 사용자 입력(주제, 핵심 내용, 장면 수, 캡션 언어, 비디오 스타일 가이드) 기반으로 각 장면에 대한 &lt;span class=&quot;inline-code&quot;&gt;image_prompt&lt;/span&gt;(영문 이미지 생성용)와 &lt;span class=&quot;inline-code&quot;&gt;caption&lt;/span&gt;(선택 언어, 내레이션/자막용) 생성.&lt;/li&gt;
        &lt;li&gt;&lt;span class=&quot;inline-code&quot;&gt;image_prompt&lt;/span&gt; 생성 지침을 매우 상세하게 업데이트하여 SDXL과 같은 이미지 생성 AI가 더 나은 품질의 이미지를 만들도록 유도. (Main Subject, Action, Background, Mood &amp; Style, Composition, Lighting, Quality Boost 등 상세 항목 포함)&lt;/li&gt;
        &lt;li&gt;출력: JSON 형식, 각 장면은 &lt;span class=&quot;inline-code&quot;&gt;image_prompt&lt;/span&gt;와 &lt;span class=&quot;inline-code&quot;&gt;caption&lt;/span&gt; 키 포함.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h3&gt;이미지 생성 (image_generator.py)&lt;/h3&gt;
    &lt;ul class=&quot;content-list content-list--unordered&quot;&gt;
        &lt;li&gt;&lt;span class=&quot;inline-code&quot;&gt;script_generator.py&lt;/span&gt;에서 생성된 &lt;span class=&quot;inline-code&quot;&gt;image_prompt&lt;/span&gt;를 사용.&lt;/li&gt;
        &lt;li&gt;Stability AI SDXL 1.0 API를 연동하여 각 장면에 맞는 이미지 생성.&lt;/li&gt;
        &lt;li&gt;&lt;span class=&quot;inline-code&quot;&gt;negative_prompt&lt;/span&gt; 지원 추가.&lt;/li&gt;
        &lt;li&gt;&lt;span class=&quot;inline-code&quot;&gt;cfg_scale&lt;/span&gt;, &lt;span class=&quot;inline-code&quot;&gt;steps&lt;/span&gt;, &lt;span class=&quot;inline-code&quot;&gt;style_preset&lt;/span&gt; 등 주요 파라미터 조절 기능 구현.&lt;/li&gt;
        &lt;li&gt;생성된 이미지는 &lt;span class=&quot;inline-code&quot;&gt;assets/generated_temp/&lt;/span&gt; 폴더에 저장 (예: &lt;span class=&quot;inline-code&quot;&gt;scene_XX_image.png&lt;/span&gt;).&lt;/li&gt;
        &lt;li&gt;품질 관련 현재 상황:
            &lt;ul class=&quot;content-list content-list--unordered&quot;&gt;
                &lt;li&gt;&lt;span class=&quot;highlight&quot;&gt;가격&lt;/span&gt;: 이미지 당 약 0.1달러 수준으로 비용은 만족.&lt;/li&gt;
                &lt;li&gt;&lt;span class=&quot;highlight&quot;&gt;품질&lt;/span&gt;: 특히 인물 표현에서 기대보다 낮은 퀄리티 (손, 발, 얼굴 등).&lt;/li&gt;
                &lt;li&gt;&lt;span class=&quot;highlight&quot;&gt;고민&lt;/span&gt;: 프롬프트 엔지니어링 및 파라미터 최적화를 통해 현재 모델의 한계를 극복할지, 또는 상위 모델/다른 API로 전환할지 검토 중.&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/li&gt;
    &lt;/ul&gt;

    &lt;h3&gt;TTS 파일 생성 (text_to_speech.py)&lt;/h3&gt;
    &lt;ul class=&quot;content-list content-list--unordered&quot;&gt;
        &lt;li&gt;생성된 &lt;span class=&quot;inline-code&quot;&gt;caption&lt;/span&gt;을 &lt;span class=&quot;inline-code&quot;&gt;text_to_speech.py&lt;/span&gt;로 전달.&lt;/li&gt;
        &lt;li&gt;ElevenLabs API를 사용해 각 &lt;span class=&quot;inline-code&quot;&gt;caption&lt;/span&gt;에 해당하는 TTS 오디오 파일 생성.&lt;/li&gt;
        &lt;li&gt;오디오 파일은 &lt;span class=&quot;inline-code&quot;&gt;assets/generated_temp/&lt;/span&gt; 폴더에 저장 (예: &lt;span class=&quot;inline-code&quot;&gt;scene_XX_audio.wav&lt;/span&gt;).&lt;/li&gt;
        &lt;li&gt;오디오 길이(초)를 반환하여 자막 및 비디오 클립 동기화에 활용.&lt;/li&gt;
        &lt;li&gt;파일 저장 시 &lt;span class=&quot;inline-code&quot;&gt;Permission denied&lt;/span&gt; 오류 대응을 위한 재시도 로직 추가.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h3&gt;자막 생성 (subtitle_handler.py)&lt;/h3&gt;
    &lt;ul class=&quot;content-list content-list--unordered&quot;&gt;
        &lt;li&gt;&lt;span class=&quot;inline-code&quot;&gt;caption&lt;/span&gt;과 TTS 오디오 길이를 기반으로 MoviePy &lt;span class=&quot;inline-code&quot;&gt;TextClip&lt;/span&gt; (자막 클립) 생성.&lt;/li&gt;
        &lt;li&gt;자막 스타일은 &lt;span class=&quot;inline-code&quot;&gt;configs/&lt;/span&gt; 폴더의 .json 설정 파일 (예: &lt;span class=&quot;inline-code&quot;&gt;groovy_vlog_moviepy_params.json&lt;/span&gt;)에서 로드하여 적용 (폰트, 크기, 색상, 위치 등).&lt;/li&gt;
        &lt;li&gt;ImageMagick 경로 설정의 중요성 인지 및 &lt;span class=&quot;inline-code&quot;&gt;main.py&lt;/span&gt;에 설정 코드 반영.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h3&gt;메인 실행 스크립트 (main.py) 통합&lt;/h3&gt;
    &lt;ul class=&quot;content-list content-list--unordered&quot;&gt;
        &lt;li&gt;사용자 입력 처리 (주제, 핵심 내용, 장면 수, 캡션 언어, 비디오 스타일 선택).&lt;/li&gt;
        &lt;li&gt;&lt;span class=&quot;inline-code&quot;&gt;ScriptGenerator&lt;/span&gt;, &lt;span class=&quot;inline-code&quot;&gt;ImageGenerator&lt;/span&gt;, &lt;span class=&quot;inline-code&quot;&gt;generate_audio_elevenlabs&lt;/span&gt;, &lt;span class=&quot;inline-code&quot;&gt;create_subtitle_clips&lt;/span&gt; 모듈 순차 호출 및 데이터 전달 로직 구현.&lt;/li&gt;
        &lt;li&gt;각 장면의 이미지, 오디오, 자막 클립을 MoviePy를 사용하여 하나의 비디오 클립으로 합성.&lt;/li&gt;
        &lt;li&gt;모든 장면 클립을 이어붙여 최종 비디오 파일 (&lt;span class=&quot;inline-code&quot;&gt;final_video_output.mp4&lt;/span&gt;) 생성 및 &lt;span class=&quot;inline-code&quot;&gt;assets/generated_temp/&lt;/span&gt;에 저장.&lt;/li&gt;
        &lt;li&gt;비디오 생성 과정의 디버깅 로그 및 오류 처리 강화.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h2 class=&quot;sub-title&quot;&gt;  현재 상태&lt;/h2&gt;
    
    &lt;h3&gt;완료된 모듈&lt;/h3&gt;
    &lt;ul class=&quot;content-list content-list--unordered&quot;&gt;
        &lt;li&gt;&lt;span class=&quot;highlight&quot;&gt;script_generator.py&lt;/span&gt;: OpenAI API로 스크립트 및 이미지 프롬프트 생성.&lt;/li&gt;
        &lt;li&gt;&lt;span class=&quot;highlight&quot;&gt;image_generator.py&lt;/span&gt;: Stability AI API로 이미지 생성.&lt;/li&gt;
        &lt;li&gt;&lt;span class=&quot;highlight&quot;&gt;text_to_speech.py&lt;/span&gt;: ElevenLabs API로 TTS 오디오 생성.&lt;/li&gt;
        &lt;li&gt;&lt;span class=&quot;highlight&quot;&gt;subtitle_handler.py&lt;/span&gt;: MoviePy &lt;span class=&quot;inline-code&quot;&gt;TextClip&lt;/span&gt; (자막 클립) 생성.&lt;/li&gt;
        &lt;li&gt;&lt;span class=&quot;highlight&quot;&gt;main.py&lt;/span&gt;: 사용자 입력부터 스크립트, 이미지, TTS, 자막 클립 생성 후 최종 비디오 파일 생성까지의 전체 워크플로우 기본 골격 완성.&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h3&gt;미완성/개선 필요 모듈&lt;/h3&gt;
    &lt;ul class=&quot;content-list content-list--unordered&quot;&gt;
        &lt;li&gt;&lt;span class=&quot;highlight&quot;&gt;video_processor.py&lt;/span&gt; (별도 파일 대신 &lt;span class=&quot;inline-code&quot;&gt;main.py&lt;/span&gt;에 통합됨): 현재는 기본적인 이미지+오디오+자막 합성이지만, 고급 편집 기능(전환 효과, 배경음악 정교한 믹싱 등)은 추가 개발 필요.&lt;/li&gt;
        &lt;li&gt;&lt;span class=&quot;highlight&quot;&gt;audio_processor.py&lt;/span&gt; (별도 파일 대신 &lt;span class=&quot;inline-code&quot;&gt;main.py&lt;/span&gt; 및 &lt;span class=&quot;inline-code&quot;&gt;text_to_speech.py&lt;/span&gt;에 일부 기능 분산): 배경음악, 효과음 통합 등은 아직 미구현.&lt;/li&gt;
        &lt;li&gt;&lt;span class=&quot;highlight&quot;&gt;utils.py&lt;/span&gt;: 공용 유틸리티 함수 (필요시 생성).&lt;/li&gt;
    &lt;/ul&gt;

    &lt;h2 class=&quot;sub-title&quot;&gt;  다음 단계 및 주요 과제&lt;/h2&gt;
    &lt;ol class=&quot;content-list content-list--ordered&quot;&gt;
        &lt;li&gt;
            &lt;h3&gt;&lt;span class=&quot;highlight&quot;&gt;이미지 품질 개선 (가장 시급)&lt;/span&gt;&lt;/h3&gt;
            &lt;ul class=&quot;content-list content-list--unordered&quot;&gt;
                &lt;li&gt;&lt;span class=&quot;highlight&quot;&gt;SDXL 1.0 최적화&lt;/span&gt;: 프롬프트 엔지니어링 (더욱 상세하고 구조화된 프롬프트, 다양한 키워드 조합 테스트), 네거티브 프롬프트 강화, &lt;span class=&quot;inline-code&quot;&gt;cfg_scale&lt;/span&gt; 및 &lt;span class=&quot;inline-code&quot;&gt;steps&lt;/span&gt; 파라미터 정밀 튜닝.&lt;/li&gt;
                &lt;li&gt;&lt;span class=&quot;highlight&quot;&gt;대안 모델/API 연구&lt;/span&gt;: DALL·E 3, Midjourney API (사용 가능 여부 및 비용 확인), 또는 LoRA 적용이 가능한 다른 플랫폼/API 탐색.&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/li&gt;
        &lt;li&gt;
            &lt;h3&gt;자막 렌더링 문제 해결&lt;/h3&gt;
            &lt;ul class=&quot;content-list content-list--unordered&quot;&gt;
                &lt;li&gt;&lt;span class=&quot;highlight&quot;&gt;한국어 자막 표시 문제&lt;/span&gt;: 현재 영어 자막은 정상적으로 표시되나, 한국어 자막이 최종 비디오에 렌더링되지 않는 문제 해결. (폰트 호환성, ImageMagick 설정, MoviePy &lt;span class=&quot;inline-code&quot;&gt;TextClip&lt;/span&gt; 인코딩 등 점검)&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/li&gt;
        &lt;li&gt;
            &lt;h3&gt;비디오 편집 기능 강화 (&lt;span class=&quot;inline-code&quot;&gt;main.py&lt;/span&gt; 또는 별도 모듈)&lt;/h3&gt;
            &lt;ul class=&quot;content-list content-list--unordered&quot;&gt;
                &lt;li&gt;장면 간 전환 효과 적용 (설정 파일 기반).&lt;/li&gt;
                &lt;li&gt;배경 음악 추가 및 볼륨 조절 (자동 추천 기능은 장기 과제).&lt;/li&gt;
                &lt;li&gt;인트로/아웃트로, 워터마크 등 추가 요소 삽입 기능.&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/li&gt;
        &lt;li&gt;
            &lt;h3&gt;사용자 경험 개선&lt;/h3&gt;
            &lt;ul class=&quot;content-list content-list--unordered&quot;&gt;
                &lt;li&gt;&lt;span class=&quot;inline-code&quot;&gt;main.py&lt;/span&gt;의 사용자 입력 방식을 더 편리하게 개선 (예: &lt;span class=&quot;inline-code&quot;&gt;argparse&lt;/span&gt; 활용, 선택지 명확화).&lt;/li&gt;
                &lt;li&gt;오류 처리 및 사용자 피드백 강화.&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/li&gt;
        &lt;li&gt;
            &lt;h3&gt;테스트 코드 작성&lt;/h3&gt;
            &lt;ul class=&quot;content-list content-list--unordered&quot;&gt;
                &lt;li&gt;&lt;span class=&quot;inline-code&quot;&gt;image_generator.py&lt;/span&gt;, &lt;span class=&quot;inline-code&quot;&gt;subtitle_handler.py&lt;/span&gt; 등에 대한 단위 테스트 코드 작성.&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/li&gt;
        &lt;li&gt;
            &lt;h3&gt;문서화 업데이트&lt;/h3&gt;
            &lt;ul class=&quot;content-list content-list--unordered&quot;&gt;
                &lt;li&gt;&lt;span class=&quot;inline-code&quot;&gt;README.md&lt;/span&gt; 및 &lt;span class=&quot;inline-code&quot;&gt;TASKS.md&lt;/span&gt;를 최신 상태로 지속 업데이트.&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/li&gt;
    &lt;/ol&gt;

    &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/prism.min.js&quot;&gt;&lt;/script&gt;
    &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-jsx.min.js&quot;&gt;&lt;/script&gt;
    &lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-javascript.min.js&quot;&gt;&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</description>
      <category>A_V</category>
      <author>Solo.dev</author>
      <guid isPermaLink="true">https://talk7053.tistory.com/187</guid>
      <comments>https://talk7053.tistory.com/187#entry187comment</comments>
      <pubDate>Sun, 8 Jun 2025 22:04:46 +0900</pubDate>
    </item>
  </channel>
</rss>