{"id":68,"date":"2026-01-22T07:44:13","date_gmt":"2026-01-22T07:44:13","guid":{"rendered":"https:\/\/conpop.ai.kr\/?page_id=68"},"modified":"2026-04-21T02:20:24","modified_gmt":"2026-04-21T02:20:24","slug":"%ec%83%9d%ec%84%b1%ed%98%95-%eb%aa%a8%eb%8d%b8-%ec%9d%8c%ec%84%b1-%ec%83%9d%ec%84%b1","status":"publish","type":"page","link":"https:\/\/conpop.ai.kr\/?page_id=68","title":{"rendered":"\ud504\ub85c\uc81d\ud2b8 1 \uc0dd\uc131\ud615 \ubaa8\ub378 \uc74c\uc131 \uc0dd\uc131"},"content":{"rendered":"\n<div style=\"max-width:900px; margin:0 auto; font-family:'Pretendard', sans-serif;\">\n    \n    <div style=\"text-align:center; margin-bottom:40px;\">\n        <span style=\"background:#e0e7ff; color:#4338ca; padding:4px 12px; border-radius:20px; font-size:12px; font-weight:bold; letter-spacing:1px;\">TEST LAB<\/span>\n        <h2 style=\"margin-top:10px; font-weight:900; color:#1e1b4b; font-size:32px;\">Gemini \uc131\uc6b0 \ud14c\uc2a4\ud2b8<\/h2>\n        <p style=\"color:#6b7280; font-size:15px;\">\ub2e4\uc591\ud55c \uc131\uc6b0\ub97c \ud14c\uc2a4\ud2b8\ud558\uace0, \uc77c\uad00\uc131\uc774 \uc88b\uc740 \ubcf4\uc774\uc2a4\ub97c \ucc3e\uc544\ubcf4\uc138\uc694.<\/p>\n    <\/div>\n\n    <div style=\"background:#fff; border-radius:24px; box-shadow:0 20px 40px rgba(0,0,0,0.05); overflow:hidden; border:1px solid #eef2ff;\">\n        \n        <div style=\"background:#f8fafc; padding:25px; border-bottom:1px solid #e2e8f0; max-height: 400px; overflow-y: auto;\">\n            \n            <h3 style=\"font-size:14px; font-weight:bold; color:#be185d; margin-bottom:12px; border-bottom:2px solid #fbcfe8; padding-bottom:5px;\">\ud83d\udc69 \uc5ec\uc131\uc6b0 (Female Voices)<\/h3>\n            <div style=\"display:grid; grid-template-columns: repeat(auto-fit, minmax(110px, 1fr)); gap:10px; margin-bottom:25px;\">\n                \n                <label style=\"cursor:pointer;\">\n                    <input type=\"radio\" name=\"gemini-voice\" value=\"Kore\" style=\"display:none;\" onchange=\"updateSelected(this)\">\n                    <div class=\"voice-card\" style=\"padding:10px; border:2px solid #e2e8f0; border-radius:12px; background:#fff; text-align:center;\">\n                        <div style=\"font-size:20px;\">\ud83c\udf3f<\/div>\n                        <div style=\"font-weight:bold; font-size:13px; color:#1e293b;\">Kore<\/div>\n                    <\/div>\n                <\/label>\n                <label style=\"cursor:pointer;\">\n                    <input type=\"radio\" name=\"gemini-voice\" value=\"Aoede\" style=\"display:none;\" onchange=\"updateSelected(this)\">\n                    <div class=\"voice-card\" style=\"padding:10px; border:2px solid #e2e8f0; border-radius:12px; background:#fff; text-align:center;\">\n                        <div style=\"font-size:20px;\">\ud83c\udfb5<\/div>\n                        <div style=\"font-weight:bold; font-size:13px; color:#1e293b;\">Aoede<\/div>\n                    <\/div>\n                <\/label>\n\n                <label style=\"cursor:pointer;\">\n                    <input type=\"radio\" name=\"gemini-voice\" value=\"Zephyr\" style=\"display:none;\" onchange=\"updateSelected(this)\">\n                    <div class=\"voice-card\" style=\"padding:10px; border:2px solid #e2e8f0; border-radius:12px; background:#fff; text-align:center;\">\n                        <div style=\"font-size:20px;\">\ud83c\udf2c\ufe0f<\/div>\n                        <div style=\"font-weight:bold; font-size:13px; color:#1e293b;\">Zephyr<\/div>\n                    <\/div>\n                <\/label>\n                <label style=\"cursor:pointer;\">\n                    <input type=\"radio\" name=\"gemini-voice\" value=\"Leda\" style=\"display:none;\" onchange=\"updateSelected(this)\">\n                    <div class=\"voice-card\" style=\"padding:10px; border:2px solid #e2e8f0; border-radius:12px; background:#fff; text-align:center;\">\n                        <div style=\"font-size:20px;\">\ud83e\udda2<\/div>\n                        <div style=\"font-weight:bold; font-size:13px; color:#1e293b;\">Leda<\/div>\n                    <\/div>\n                <\/label>\n                <label style=\"cursor:pointer;\">\n                    <input type=\"radio\" name=\"gemini-voice\" value=\"Callirrhoe\" style=\"display:none;\" onchange=\"updateSelected(this)\">\n                    <div class=\"voice-card\" style=\"padding:10px; border:2px solid #e2e8f0; border-radius:12px; background:#fff; text-align:center;\">\n                        <div style=\"font-size:20px;\">\ud83c\udf0a<\/div>\n                        <div style=\"font-weight:bold; font-size:13px; color:#1e293b;\">Callirhoe<\/div>\n                    <\/div>\n                <\/label>\n                <label style=\"cursor:pointer;\">\n                    <input type=\"radio\" name=\"gemini-voice\" value=\"Autonoe\" style=\"display:none;\" onchange=\"updateSelected(this)\">\n                    <div class=\"voice-card\" style=\"padding:10px; border:2px solid #e2e8f0; border-radius:12px; background:#fff; text-align:center;\">\n                        <div style=\"font-size:20px;\">\ud83c\udfad<\/div>\n                        <div style=\"font-weight:bold; font-size:13px; color:#1e293b;\">Autonoe<\/div>\n                    <\/div>\n                <\/label>\n                <label style=\"cursor:pointer;\">\n                    <input type=\"radio\" name=\"gemini-voice\" value=\"Erinome\" style=\"display:none;\" onchange=\"updateSelected(this)\">\n                    <div class=\"voice-card\" style=\"padding:10px; border:2px solid #e2e8f0; border-radius:12px; background:#fff; text-align:center;\">\n                        <div style=\"font-size:20px;\">\ud83c\udf19<\/div>\n                        <div style=\"font-weight:bold; font-size:13px; color:#1e293b;\">Erinome<\/div>\n                    <\/div>\n                <\/label>\n                <label style=\"cursor:pointer;\">\n                    <input type=\"radio\" name=\"gemini-voice\" value=\"Achernar\" style=\"display:none;\" onchange=\"updateSelected(this)\">\n                    <div class=\"voice-card\" style=\"padding:10px; border:2px solid #e2e8f0; border-radius:12px; background:#fff; text-align:center;\">\n                        <div style=\"font-size:20px;\">\u2b50<\/div>\n                        <div style=\"font-weight:bold; font-size:13px; color:#1e293b;\">Achernar<\/div>\n                    <\/div>\n                <\/label>\n                <label style=\"cursor:pointer;\">\n                    <input type=\"radio\" name=\"gemini-voice\" value=\"Sulafat\" style=\"display:none;\" onchange=\"updateSelected(this)\">\n                    <div class=\"voice-card\" style=\"padding:10px; border:2px solid #e2e8f0; border-radius:12px; background:#fff; text-align:center;\">\n                        <div style=\"font-size:20px;\">\u2728<\/div>\n                        <div style=\"font-weight:bold; font-size:13px; color:#1e293b;\">Sulafat<\/div>\n                    <\/div>\n                <\/label>\n            <\/div>\n\n            <h3 style=\"font-size:14px; font-weight:bold; color:#1d4ed8; margin-bottom:12px; border-bottom:2px solid #dbeafe; padding-bottom:5px;\">\ud83d\udc68 \ub0a8\uc131\uc6b0 (Male Voices)<\/h3>\n            <div style=\"display:grid; grid-template-columns: repeat(auto-fit, minmax(110px, 1fr)); gap:10px;\">\n                \n                <label style=\"cursor:pointer;\">\n                    <input type=\"radio\" name=\"gemini-voice\" value=\"Fenrir\" checked style=\"display:none;\" onchange=\"updateSelected(this)\">\n                    <div class=\"voice-card active\" style=\"padding:10px; border:2px solid #6366f1; border-radius:12px; background:#fff; text-align:center;\">\n                        <div style=\"font-size:20px;\">\ud83d\udc3a<\/div>\n                        <div style=\"font-weight:bold; font-size:13px; color:#1e293b;\">Fenrir<\/div>\n                    <\/div>\n                <\/label>\n                <label style=\"cursor:pointer;\">\n                    <input type=\"radio\" name=\"gemini-voice\" value=\"Puck\" style=\"display:none;\" onchange=\"updateSelected(this)\">\n                    <div class=\"voice-card\" style=\"padding:10px; border:2px solid #e2e8f0; border-radius:12px; background:#fff; text-align:center;\">\n                        <div style=\"font-size:20px;\">\ud83e\uddda<\/div>\n                        <div style=\"font-weight:bold; font-size:13px; color:#1e293b;\">Puck<\/div>\n                    <\/div>\n                <\/label>\n                <label style=\"cursor:pointer;\">\n                    <input type=\"radio\" name=\"gemini-voice\" value=\"Charon\" style=\"display:none;\" onchange=\"updateSelected(this)\">\n                    <div class=\"voice-card\" style=\"padding:10px; border:2px solid #e2e8f0; border-radius:12px; background:#fff; text-align:center;\">\n                        <div style=\"font-size:20px;\">\ud83c\udf11<\/div>\n                        <div style=\"font-weight:bold; font-size:13px; color:#1e293b;\">Charon<\/div>\n                    <\/div>\n                <\/label>\n\n                <label style=\"cursor:pointer;\">\n                    <input type=\"radio\" name=\"gemini-voice\" value=\"Orus\" style=\"display:none;\" onchange=\"updateSelected(this)\">\n                    <div class=\"voice-card\" style=\"padding:10px; border:2px solid #e2e8f0; border-radius:12px; background:#fff; text-align:center;\">\n                        <div style=\"font-size:20px;\">\ud83e\udd85<\/div>\n                        <div style=\"font-weight:bold; font-size:13px; color:#1e293b;\">Orus<\/div>\n                    <\/div>\n                <\/label>\n                <label style=\"cursor:pointer;\">\n                    <input type=\"radio\" name=\"gemini-voice\" value=\"Sadaltager\" style=\"display:none;\" onchange=\"updateSelected(this)\">\n                    <div class=\"voice-card\" style=\"padding:10px; border:2px solid #e2e8f0; border-radius:12px; background:#fff; text-align:center;\">\n                        <div style=\"font-size:20px;\">\ud83c\udf1f<\/div>\n                        <div style=\"font-weight:bold; font-size:13px; color:#1e293b;\">Sadaltager<\/div>\n                    <\/div>\n                <\/label>\n                <label style=\"cursor:pointer;\">\n                    <input type=\"radio\" name=\"gemini-voice\" value=\"Umbriel\" style=\"display:none;\" onchange=\"updateSelected(this)\">\n                    <div class=\"voice-card\" style=\"padding:10px; border:2px solid #e2e8f0; border-radius:12px; background:#fff; text-align:center;\">\n                        <div style=\"font-size:20px;\">\ud83c\udf18<\/div>\n                        <div style=\"font-weight:bold; font-size:13px; color:#1e293b;\">Umbriel<\/div>\n                    <\/div>\n                <\/label>\n                <label style=\"cursor:pointer;\">\n                    <input type=\"radio\" name=\"gemini-voice\" value=\"Achird\" style=\"display:none;\" onchange=\"updateSelected(this)\">\n                    <div class=\"voice-card\" style=\"padding:10px; border:2px solid #e2e8f0; border-radius:12px; background:#fff; text-align:center;\">\n                        <div style=\"font-size:20px;\">\ud83d\udcdc<\/div>\n                        <div style=\"font-weight:bold; font-size:13px; color:#1e293b;\">Achird<\/div>\n                    <\/div>\n                <\/label>\n                <label style=\"cursor:pointer;\">\n                    <input type=\"radio\" name=\"gemini-voice\" value=\"Iapetus\" style=\"display:none;\" onchange=\"updateSelected(this)\">\n                    <div class=\"voice-card\" style=\"padding:10px; border:2px solid #e2e8f0; border-radius:12px; background:#fff; text-align:center;\">\n                        <div style=\"font-size:20px;\">\ud83e\ude90<\/div>\n                        <div style=\"font-weight:bold; font-size:13px; color:#1e293b;\">Iapetus<\/div>\n                    <\/div>\n                <\/label>\n                <label style=\"cursor:pointer;\">\n                    <input type=\"radio\" name=\"gemini-voice\" value=\"Rasalgethi\" style=\"display:none;\" onchange=\"updateSelected(this)\">\n                    <div class=\"voice-card\" style=\"padding:10px; border:2px solid #e2e8f0; border-radius:12px; background:#fff; text-align:center;\">\n                        <div style=\"font-size:20px;\">\u2604\ufe0f<\/div>\n                        <div style=\"font-weight:bold; font-size:13px; color:#1e293b;\">Rasalgethi<\/div>\n                    <\/div>\n                <\/label>\n                <label style=\"cursor:pointer;\">\n                    <input type=\"radio\" name=\"gemini-voice\" value=\"Schedar\" style=\"display:none;\" onchange=\"updateSelected(this)\">\n                    <div class=\"voice-card\" style=\"padding:10px; border:2px solid #e2e8f0; border-radius:12px; background:#fff; text-align:center;\">\n                        <div style=\"font-size:20px;\">\ud83c\udf0c<\/div>\n                        <div style=\"font-weight:bold; font-size:13px; color:#1e293b;\">Schedar<\/div>\n                    <\/div>\n                <\/label>\n            <\/div>\n\n        <\/div>\n\n        <div style=\"padding:30px;\">\n            <textarea id=\"gemini-text\" rows=\"4\" style=\"width:100%; padding:20px; border:2px solid #e2e8f0; border-radius:16px; font-size:16px; line-height:1.6; resize:none; outline:none; transition:0.2s;\" placeholder=\"Gemini\uac00 \uc77d\uc744 \ub0b4\uc6a9\uc744 \uc785\ub825\ud558\uc138\uc694... (\ud14c\uc2a4\ud2b8\ud560 \uc131\uc6b0\ub97c \uc704\uc5d0\uc11c \uc120\ud0dd\ud574\uc8fc\uc138\uc694)\" onfocus=\"this.style.borderColor='#6366f1'\" onblur=\"this.style.borderColor='#e2e8f0'\"><\/textarea>\n            \n            <button onclick=\"generateGeminiAudio()\" id=\"gemini-btn\" style=\"width:100%; margin-top:20px; padding:18px; background:linear-gradient(135deg, #6366f1, #4f46e5); color:white; border:none; border-radius:16px; font-size:16px; font-weight:bold; cursor:pointer; box-shadow:0 10px 20px rgba(99, 102, 241, 0.3); transition:0.2s;\">\n                \u2728 \ubcf4\uc774\uc2a4 \uc0dd\uc131 \ubc0f \ud14c\uc2a4\ud2b8\n            <\/button>\n\n            <div id=\"gemini-result\" style=\"display:none; margin-top:30px; background:#f0f9ff; padding:20px; border-radius:16px; border:1px solid #bae6fd; animation: slideUp 0.5s;\">\n                <p style=\"margin:0 0 10px 0; color:#0369a1; font-weight:bold; font-size:14px;\">\u2705 \uc0dd\uc131\uc774 \uc644\ub8cc\ub418\uc5c8\uc2b5\ub2c8\ub2e4!<\/p>\n                <audio id=\"gemini-player\" controls style=\"width:100%; height:40px;\"><\/audio>\n                <a id=\"gemini-download\" href=\"#\" download=\"gemini_voice.wav\" style=\"display:block; text-align:center; margin-top:10px; color:#0284c7; text-decoration:none; font-size:13px; font-weight:bold;\">\u2b07\ufe0f \ud30c\uc77c \ub2e4\uc6b4\ub85c\ub4dc<\/a>\n            <\/div>\n        <\/div>\n    <\/div>\n<\/div>\n\n<style>\n    @keyframes slideUp { from { opacity:0; transform:translateY(10px); } to { opacity:1; transform:translateY(0); } }\n    .voice-card:hover { transform:translateY(-2px); box-shadow:0 5px 15px rgba(0,0,0,0.05); }\n    \/* \uc2a4\ud06c\ub864\ubc14 \ucee4\uc2a4\ud140 *\/\n    ::-webkit-scrollbar { width: 8px; }\n    ::-webkit-scrollbar-track { background: #f1f1f1; }\n    ::-webkit-scrollbar-thumb { background: #c7c7c7; border-radius: 4px; }\n    ::-webkit-scrollbar-thumb:hover { background: #a8a8a8; }\n<\/style>\n\n<script>\nfunction updateSelected(input) {\n    \/\/ \ubaa8\ub4e0 \uce74\ub4dc \uc2a4\ud0c0\uc77c \ucd08\uae30\ud654\n    document.querySelectorAll('.voice-card').forEach(c => {\n        c.style.border = '2px solid #e2e8f0';\n        c.classList.remove('active');\n        c.style.backgroundColor = '#fff';\n    });\n    \/\/ \uc120\ud0dd\ub41c \uce74\ub4dc \uc2a4\ud0c0\uc77c \uc801\uc6a9\n    if(input.checked) {\n        const card = input.nextElementSibling;\n        card.style.border = '2px solid #6366f1';\n        card.style.backgroundColor = '#eef2ff';\n        card.classList.add('active');\n    }\n}\n\nasync function generateGeminiAudio() {\n    const text = document.getElementById('gemini-text').value;\n    const voiceRadio = document.querySelector('input[name=\"gemini-voice\"]:checked');\n    \n    if(!voiceRadio) return alert(\"\uc131\uc6b0\ub97c \uba3c\uc800 \uc120\ud0dd\ud574\uc8fc\uc138\uc694!\");\n    \n    const voice = voiceRadio.value;\n    const btn = document.getElementById('gemini-btn');\n    const resultDiv = document.getElementById('gemini-result');\n    const player = document.getElementById('gemini-player');\n    const download = document.getElementById('gemini-download');\n\n    if(!text) return alert(\"\ub0b4\uc6a9\uc744 \uc785\ub825\ud574\uc8fc\uc138\uc694!\");\n\n    btn.innerText = `\ud83d\udd2e [${voice}] \uc131\uc6b0\uac00 \ubaa9\uc18c\ub9ac\ub97c \ub9cc\ub4dc\ub294 \uc911...`;\n    btn.disabled = true;\n    btn.style.opacity = \"0.7\";\n    resultDiv.style.display = 'none';\n\n    try {\n        \/\/ \u2605\u2605\u2605 \uc5ec\uae30\uc5d0 Cloud Run \uc11c\ube44\uc2a4 URL\uc744 \ub123\uc5b4\uc8fc\uc138\uc694! \u2605\u2605\u2605\n        const response = await fetch('https:\/\/gemini-voice-1060238498564.us-central1.run.app', {\n            method: 'POST',\n            headers: {'Content-Type': 'application\/json'},\n            body: JSON.stringify({ text: text, voice: voice })\n        });\n\n        const data = await response.json();\n\n        if (data.audioContent) {\n            const audioUrl = \"data:audio\/wav;base64,\" + data.audioContent;\n            player.src = audioUrl;\n            download.href = audioUrl;\n            \n            \/\/ \ud30c\uc77c\uba85\uc5d0 \uc131\uc6b0 \uc774\ub984\uacfc \uc2dc\uac04 \ub123\uae30\n            const date = new Date();\n            const timeStr = `${date.getHours()}\uc2dc${date.getMinutes()}\ubd84`;\n            download.download = `Gemini_${voice}_${timeStr}.wav`;\n\n            resultDiv.style.display = 'block';\n            player.play();\n        } else {\n            alert(\"\uc624\ub958: \" + (data.error || \"\uc0dd\uc131 \uc2e4\ud328\"));\n        }\n\n    } catch (e) {\n        alert(\"\uc11c\ubc84 \uc5f0\uacb0 \uc624\ub958: \" + e);\n    } finally {\n        btn.innerText = \"\u2728 \ubcf4\uc774\uc2a4 \uc0dd\uc131 \ubc0f \ud14c\uc2a4\ud2b8\";\n        btn.disabled = false;\n        btn.style.opacity = \"1\";\n    }\n}\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>TEST LAB Gemini \uc131\uc6b0 \ud14c\uc2a4\ud2b8 \ub2e4\uc591\ud55c \uc131\uc6b0\ub97c \ud14c\uc2a4\ud2b8\ud558\uace0, \uc77c\uad00\uc131\uc774 \uc88b\uc740 \ubcf4\uc774\uc2a4\ub97c \ucc3e\uc544\ubcf4\uc138\uc694. \ud83d\udc69 \uc5ec\uc131\uc6b0 (Female Voices) \ud83c\udf3f Kore \ud83c\udfb5 Aoede \ud83c\udf2c\ufe0f Zephyr \ud83e\udda2 Leda \ud83c\udf0a Callirhoe \ud83c\udfad Autonoe \ud83c\udf19 Erinome \u2b50 Achernar \u2728 Sulafat \ud83d\udc68 \ub0a8\uc131\uc6b0 (Male Voices) \ud83d\udc3a Fenrir \ud83e\uddda Puck \ud83c\udf11 Charon \ud83e\udd85 Orus \ud83c\udf1f Sadaltager \ud83c\udf18 Umbriel \ud83d\udcdc Achird \ud83e\ude90 Iapetus \u2604\ufe0f [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-68","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/conpop.ai.kr\/index.php?rest_route=\/wp\/v2\/pages\/68","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/conpop.ai.kr\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/conpop.ai.kr\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/conpop.ai.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/conpop.ai.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=68"}],"version-history":[{"count":5,"href":"https:\/\/conpop.ai.kr\/index.php?rest_route=\/wp\/v2\/pages\/68\/revisions"}],"predecessor-version":[{"id":76,"href":"https:\/\/conpop.ai.kr\/index.php?rest_route=\/wp\/v2\/pages\/68\/revisions\/76"}],"wp:attachment":[{"href":"https:\/\/conpop.ai.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=68"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}