Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
freem
Search
Search
Appearance
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
Openai/69390b49-f700-800f-82e2-578b4cfb226b
Add languages
Page
Discussion
English
Read
Edit
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Appearance
move to sidebar
hide
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{DISPLAYTITLE:Kaspersky ๊ฒฝ๊ณ ์์ธ ๋ถ์}} ''This conversation was exported from ChatGPT''<ref>{{cite web|title=Kaspersky ๊ฒฝ๊ณ ์์ธ ๋ถ์|url=https://chatgpt.com/share/69390b49-f700-800f-82e2-578b4cfb226b|publisher=ChatGPT|access-date=2025-12-15}}</ref> == gpt-5-1 == === User: https://corazzon.github.io/slides/aipydevenv.html ํด๋น ์ฌ์ดํธ์์ ๊ฒฝ๊ณ ๊ฐ ๋๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ? === https://corazzon.github.io/slides/ai_py_dev_env.html ํด๋น ์ฌ์ดํธ์์ ๊ฒฝ๊ณ ๊ฐ ๋๋ ์ด์ ๋ ๋ฌด์์ธ๊ฐ? <!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Pro AI Developer Setup Guide</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> <style> :root { --bg-void: #09090b; --text-primary: #f4f4f5; --text-secondary: #a1a1aa; --glass-bg: rgba(24, 24, 27, 0.65); --glass-border: rgba(255, 255, 255, 0.08); --accent-cyan: #22d3ee; --accent-violet: #a78bfa; --accent-rose: #fb7185; --accent-emerald: #34d399; --accent-amber: #fbbf24; --font-mono: 'JetBrains Mono', 'Fira Code', Consolas, monospace; --shadow-glow: 0 0 50px -10px rgba(167, 139, 250, 0.15); } * { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: 'Pretendard', -apple-system, BlinkMacSystemFont, system-ui, sans-serif; background-color: var(--bg-void); color: var(--text-primary); height: 100vh; overflow: hidden; display: flex; justify-content: center; align-items: center; background-image: radial-gradient(circle at 15% 50%, rgba(34, 211, 238, 0.08), transparent 25%), radial-gradient(circle at 85% 30%, rgba(167, 139, 250, 0.08), transparent 25%); } /'' Progress Bar ''/ .progress-track { position: fixed; top: 0; left: 0; width: 100%; height: 3px; background: rgba(255,255,255,0.05); z-index: 1000; } .progress-fill { height: 100%; background: linear-gradient(90deg, var(--accent-cyan), var(--accent-violet)); width: 0%; transition: width 0.5s ease; box-shadow: 0 0 10px var(--accent-cyan); } /'' Main Container ''/ .viewport { width: 95%; max-width: 1400px; height: 88vh; position: relative; perspective: 1500px; } .slide { position: absolute; width: 100%; height: 100%; opacity: 0; visibility: hidden; transform: scale(0.96) translateY(30px); transition: all 0.7s cubic-bezier(0.2, 0.8, 0.2, 1); display: flex; justify-content: center; align-items: center; } .slide.active { opacity: 1; visibility: visible; transform: scale(1) translateY(0); } /'' Glass Card Design ''/ .glass-panel { background: var(--glass-bg); backdrop-filter: blur(40px); -webkit-backdrop-filter: blur(40px); border: 1px solid var(--glass-border); border-radius: 32px; width: 100%; height: 100%; box-shadow: 0 25px 80px -20px rgba(0, 0, 0, 0.7), var(--shadow-glow); padding: 60px; overflow-y: auto; display: flex; flex-direction: column; } /'' Layout Grid ''/ .grid-container { display: grid; grid-template-columns: 1.3fr 1fr; gap: 60px; height: 100%; } .content-side { display: flex; flex-direction: column; justify-content: center; } .action-side { display: flex; flex-direction: column; justify-content: center; gap: 25px; background: rgba(0,0,0,0.2); padding: 40px; border-radius: 24px; border: 1px solid rgba(255,255,255,0.03); } /'' Typography ''/ .slide-header { display: flex; align-items: center; gap: 20px; margin-bottom: 25px; } .icon-badge { width: 64px; height: 64px; border-radius: 16px; background: rgba(255,255,255,0.05); display: flex; align-items: center; justify-content: center; font-size: 2rem; border: 1px solid rgba(255,255,255,0.1); box-shadow: inset 0 0 15px rgba(255,255,255,0.02); } h2 { font-size: 2.8rem; font-weight: 700; background: linear-gradient(135deg, #fff 0%, #cbd5e1 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; letter-spacing: -0.03em; } .description { font-size: 1.1rem; line-height: 1.7; color: var(--text-secondary); margin-bottom: 40px; } .description strong { color: var(--text-primary); font-weight: 600; } /'' Detail Lists ''/ .detail-group { margin-bottom: 30px; } .detail-title { font-size: 0.9rem; text-transform: uppercase; letter-spacing: 0.05em; color: var(--text-secondary); margin-bottom: 15px; font-weight: 600; display: flex; align-items: center; gap: 8px; } .feature-list { list-style: none; display: flex; flex-direction: column; gap: 12px; } .feature-item { display: flex; align-items: flex-start; gap: 12px; font-size: 1rem; color: #e4e4e7; line-height: 1.5; } .feature-item i { color: var(--accent-cyan); margin-top: 4px; } /'' Alerts & Tips ''/ .alert-box { padding: 20px; border-radius: 12px; margin-top: 20px; background: rgba(255,255,255,0.03); border-left: 3px solid; } .alert-box.warning { border-color: var(--accent-rose); background: rgba(251, 113, 133, 0.08); } .alert-box.tip { border-color: var(--accent-amber); background: rgba(251, 191, 36, 0.08); } .alert-title { font-weight: 700; margin-bottom: 8px; font-size: 0.95rem; display: flex; align-items: center; gap: 8px; } .warning .alert-title { color: var(--accent-rose); } .tip .alert-title { color: var(--accent-amber); } .alert-content { font-size: 0.9rem; color: #d4d4d8; line-height: 1.5; } /'' Terminal & Code ''/ .code-window { background: #121215; border-radius: 12px; border: 1px solid rgba(255,255,255,0.08); overflow: hidden; } .window-header { background: rgba(255,255,255,0.03); padding: 8px 16px; display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid rgba(255,255,255,0.05); } .window-title { font-size: 0.75rem; color: var(--text-secondary); font-family: var(--font-mono); } .copy-btn { background: transparent; border: 1px solid rgba(255,255,255,0.15); color: var(--text-secondary); border-radius: 4px; padding: 4px 8px; font-size: 0.7rem; cursor: pointer; transition: 0.2s; } .copy-btn:hover { background: rgba(255,255,255,0.1); color: white; } .code-content { padding: 16px; font-family: var(--font-mono); font-size: 0.9rem; color: var(--accent-emerald); word-break: break-all; } .comment { color: #52525b; display: block; margin-bottom: 5px; } /'' Buttons ''/ .btn-download { display: flex; align-items: center; justify-content: center; gap: 10px; width: 100%; padding: 18px; background: linear-gradient(135deg, var(--accent-cyan), var(--accent-violet)); color: #000; text-decoration: none; font-weight: 700; border-radius: 12px; font-size: 1rem; transition: transform 0.2s, box-shadow 0.2s; } .btn-download:hover { transform: translateY(-2px); box-shadow: 0 10px 25px -5px rgba(34, 211, 238, 0.4); } /'' Navigation ''/ .nav-dock { position: fixed; bottom: 30px; display: flex; align-items: center; gap: 20px; background: rgba(24, 24, 27, 0.8); backdrop-filter: blur(10px); padding: 10px 20px; border-radius: 100px; border: 1px solid rgba(255,255,255,0.1); z-index: 100; } .nav-arrow { background: none; border: none; color: var(--text-secondary); font-size: 1.2rem; cursor: pointer; transition: 0.2s; } .nav-arrow:hover { color: var(--text-primary); transform: scale(1.1); } .page-counter { font-family: var(--font-mono); font-size: 0.9rem; font-weight: 600; } /'' Summary Slide Specific ''/ .summary-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(350px, 1fr)); gap: 20px; width: 100%; margin-top: 40px; } .check-card { background: rgba(255,255,255,0.03); padding: 20px; border-radius: 12px; border: 1px solid rgba(255,255,255,0.05); display: flex; justify-content: space-between; align-items: center; } .check-cmd { font-family: var(--font-mono); color: var(--accent-cyan); } @media (max-width: 1024px) { .grid-container { grid-template-columns: 1fr; display: block; } .action-side { margin-top: 40px; } .viewport { height: 92vh; } .glass-panel { padding: 30px; overflow-y: auto; } } </style> </head> <body> <div class="progress-track"><div class="progress-fill" id="progressBar"></div></div> <div class="viewport"> <!-- Slide 0: Cover --> <div class="slide active"> <div class="glass-panel" style="justify-content: center; align-items: center; text-align: center; background: radial-gradient(circle at center, rgba(255,255,255,0.03), transparent);"> <div class="icon-badge" style="width: 100px; height: 100px; font-size: 3.5rem; margin-bottom: 30px; border:none; background: transparent;">๐</div> <h1 style="font-size: 4rem; font-weight: 800; margin-bottom: 20px; line-height: 1.1; background: linear-gradient(to right, #fff, #94a3b8); -webkit-background-clip: text; -webkit-text-fill-color: transparent;">AI Coding Assistant<br>Dev Environment</h1> <p style="font-size: 1.4rem; color: var(--text-secondary); max-width: 600px; margin-bottom: 50px;"> ์์ฐ์ฑ์ ๊ทน๋ํํ๋ AI๊ธฐ๋ฐ ๊ฐ๋ฐ ๋๊ตฌ ์ ์ ๊ฐ์ด๋ </p> <button class="btn-download" style="width: auto; padding: 15px 50px;" onclick="nextSlide()">๊ฐ์ด๋ ์์ํ๊ธฐ <i class="fas fa-arrow-right"></i></button> </div> </div> <!-- Slide 1: Roadmap --> <div class="slide"> <div class="glass-panel" style="align-items: center;"> <h2 style="margin-bottom: 10px;">์ค์น ๋ก๋๋งต</h2> <p class="description" style="text-align: center; margin-bottom: 50px;"> ๋ค์ 6๊ฐ์ง ๋๊ตฌ๋ ํ๋์ ์ธ AI ๋ฐ ์น ๊ฐ๋ฐ์ ์ํ ํ์์ ์ธ ๊ธฐ์ ์คํ์ ๋๋ค. </p> <div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 30px; width: 100%; max-width: 1000px;"> <div class="action-side" style="align-items: center; text-align: center; padding: 30px;"> <i class="fas fa-code" style="font-size: 2.5rem; color: var(--accent-cyan); margin-bottom: 15px;"></i> <h3 style="margin-bottom: 10px;">VSCode</h3> <p style="font-size: 0.9rem; color: var(--text-secondary);">ํตํฉ ๊ฐ๋ฐ ํ๊ฒฝ (IDE)</p> </div> <div class="action-side" style="align-items: center; text-align: center; padding: 30px;"> <i class="fab fa-python" style="font-size: 2.5rem; color: var(--accent-amber); margin-bottom: 15px;"></i> <h3 style="margin-bottom: 10px;">Python</h3> <p style="font-size: 0.9rem; color: var(--text-secondary);">AI ํต์ฌ ์ธ์ด</p> </div> <div class="action-side" style="align-items: center; text-align: center; padding: 30px;"> <i class="fas fa-bolt" style="font-size: 2.5rem; color: var(--accent-violet); margin-bottom: 15px;"></i> <h3 style="margin-bottom: 10px;">uv</h3> <p style="font-size: 0.9rem; color: var(--text-secondary);">์ด๊ณ ์ ํจํค์ง ๊ด๋ฆฌ</p> </div> <div class="action-side" style="align-items: center; text-align: center; padding: 30px;"> <i class="fab fa-node-js" style="font-size: 2.5rem; color: var(--accent-emerald); margin-bottom: 15px;"></i> <h3 style="margin-bottom: 10px;">Node.js</h3> <p style="font-size: 0.9rem; color: var(--text-secondary);">JS ๋ฐํ์</p> </div> <div class="action-side" style="align-items: center; text-align: center; padding: 30px;"> <i class="fas fa-robot" style="font-size: 2.5rem; color: var(--accent-cyan); margin-bottom: 15px;"></i> <h3 style="margin-bottom: 10px;">Gemini CLI</h3> <p style="font-size: 0.9rem; color: var(--text-secondary);">ํฐ๋ฏธ๋ AI ๋น์</p> </div> <div class="action-side" style="align-items: center; text-align: center; padding: 30px;"> <i class="fas fa-file-alt" style="font-size: 2.5rem; color: #fff; margin-bottom: 15px;"></i> <h3 style="margin-bottom: 10px;">Pandoc</h3> <p style="font-size: 0.9rem; color: var(--text-secondary);">๋ฌธ์ ๋ณํ ๋๊ตฌ</p> </div> </div> </div> </div> <!-- Slide 2: VSCode --> <div class="slide"> <div class="glass-panel"> <div class="grid-container"> <div class="content-side"> <div class="slide-header"> <div class="icon-badge" style="color: var(--accent-cyan);"><i class="fas fa-code"></i></div> <h2>Visual Studio Code</h2> </div> <p class="description"> ๋จ์ํ ํ ์คํธ ์๋ํฐ๋ฅผ ๋์ด์ , ์ ์ธ๊ณ ๊ฐ๋ฐ์์ ํ์ค IDE์ ๋๋ค. Microsoft์ ๊ฐ๋ ฅํ ์ง์๊ณผ ์๋ง ๊ฐ์ ํ์ฅ ํ๋ก๊ทธ๋จ(Extensions) ์ํ๊ณ๊ฐ ๊ฒฐํฉ๋์ด, Python, JavaScript ๋ฑ ์ด๋ค ์ธ์ด๋ ์พ์ ํ๊ฒ ๊ฐ๋ฐํ ์ ์์ต๋๋ค. AI Copilot๊ณผ์ ์ฐ๋์ฑ๋ ๊ฐ์ฅ ๋ฐ์ด๋ฉ๋๋ค. </p> <div class="detail-group"> <div class="detail-title"><i class="fas fa-star"></i> Key Features</div> <ul class="feature-list"> <li class="feature-item"><i class="fas fa-check"></i><strong>IntelliSense:</strong> ์ค๋งํธํ ์ฝ๋ ์๋ ์์ฑ ๋ฐ ๋ฌธ๋ฒ ์ค๋ฅ ์ค์๊ฐ ๊ฐ์ง</li> <li class="feature-item"><i class="fas fa-check"></i><strong>Integrated Git:</strong> ๋ณ๋ ํ๋ก๊ทธ๋จ ์์ด ๋ณ๊ฒฝ ์ฌํญ ์ถ์ ๋ฐ ์ปค๋ฐ ๊ฐ๋ฅ</li> <li class="feature-item"><i class="fas fa-check"></i><strong>Debugging:</strong> ๋ณ์ ์ํ๋ฅผ ์ค์๊ฐ์ผ๋ก ํ์ธํ๋ฉฐ ์ค๋ฅ ์์ </li> </ul> </div> <div class="alert-box tip"> <div class="alert-title"><i class="fas fa-lightbulb"></i> Windows ์ค์น ํ</div> <div class="alert-content"> ์ค์น ์ต์ ์ค <strong>"Install for all users"</strong>๋ฅผ ์ ํํ์ธ์. ๊ถํ ๋ฌธ์ ์์ด ์์คํ ์ ์ฒด์์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ํฅํ ์ ๋ฐ์ดํธ ์์๋ ๊ด๋ฆฌ๊ฐ ์ฉ์ดํฉ๋๋ค. </div> </div> </div> <div class="action-side"> <a href="https://code.visualstudio.com/" target="_blank" class="btn-download">VSCode ๋ค์ด๋ก๋ <i class="fas fa-external-link-alt"></i></a> <div class="detail-title" style="margin-top: 20px; margin-bottom: 10px;">ํ์ฉ ์์: ํ๋ก์ ํธ ์ด๊ธฐ</div> <div class="code-window"> <div class="window-header"> <span class="window-title">TERMINAL</span> <button class="copy-btn" onclick="copyText('code .')">Copy</button> </div> <div class="code-content"> <span class="comment"># ํ์ฌ ํด๋๋ฅผ VSCode๋ก ์ฝ๋๋ค</span> $ code . </div> </div> <div class="code-window" style="margin-top: 10px;"> <div class="window-header"> <span class="window-title">VERIFY INSTALLATION</span> <button class="copy-btn" onclick="copyText('code --version')">Copy</button> </div> <div class="code-content"> $ code --version </div> </div> </div> </div> </div> </div> <!-- Slide 3: Python (Expanded & Fixed) --> <div class="slide"> <div class="glass-panel"> <div class="grid-container"> <div class="content-side"> <div class="slide-header"> <div class="icon-badge" style="color: var(--accent-amber);"><i class="fab fa-python"></i></div> <h2>Python</h2> </div> <p class="description"> AI ๋ฐ ๋ฐ์ดํฐ ๊ณผํ ๋ถ์ผ์ ๋๋ฆฌ ์ฐ์ ๋๋ค. TensorFlow, PyTorch์ ๊ฐ์ ๋ฅ๋ฌ๋ ํ๋ ์์ํฌ๋ถํฐ ๋ฐ์ดํฐ ๋ถ์, ์น ์๋ฒ ๊ตฌ์ถ๊น์ง ๊ฐ๋ฅํฉ๋๋ค. ์ธํฐํ๋ฆฌํฐ ์ธ์ด๋ก ์ฝ๋๋ฅผ ํ ์ค์ฉ ์คํํ๋ฉฐ ๊ฒฐ๊ณผ๋ฅผ ์ฆ์ ํ์ธํ ์ ์์ด ์์ฐ์ฑ์ด ๋์ต๋๋ค. </p> <div class="detail-group"> <div class="detail-title"><i class="fas fa-cog"></i> ํ์ ์ค์ (Critical Config)</div> <ul class="feature-list"> <li class="feature-item"><i class="fas fa-check"></i>์ค์น ํ๋ฉด ํ๋จ <strong>"Add Python to PATH"</strong> ์ฒดํฌ๋ฐ์ค ์ ํ ํ์</li> <li class="feature-item"><i class="fas fa-check"></i>์ต์ ์์ ๋ฒ์ ์ธ <strong>3.10 ~</strong> ๋ฒ์ ์ฌ์ฉ ๊ถ์ฅ</li> </ul> </div> <!-- Windows Tip (Highlighted as requested) --> <div class="alert-box tip" style="border-color: var(--accent-cyan); background: rgba(34, 211, 238, 0.1);"> <div class="alert-title" style="color: var(--accent-cyan); font-size: 1.1rem;"><i class="fab fa-windows"></i> Windows ์ฌ์ฉ์ ํ์ ์ค์ </div> <div class="alert-content" style="font-size: 1rem;"> ์ค์น ํ๋ก๊ทธ๋จ ์คํ ์ <strong>"Customize installation"</strong>์ ํด๋ฆญํ๊ณ , Advanced Options ๋จ๊ณ์์ <strong style="color:white; text-decoration: underline;">"Install for all users"</strong> ํญ๋ชฉ์ ๋ฐ๋์ ์ฒดํฌํ์ธ์.<br><br> <em>์ด์ : ์ด ์ต์ ์ ์ ํํด์ผ Python์ด <code>C:\Program Files\</code> ๋ฑ ๊ณต์ฉ ๊ฒฝ๋ก์ ์ค์น๋์ด, ์ฌ์ฉ์ ๊ถํ ๋ฌธ์ ๋ ๊ฐ์ํ๊ฒฝ ๊ฒฝ๋ก ๊ผฌ์ ํ์์ ๊ทผ๋ณธ์ ์ผ๋ก ๋ฐฉ์งํ ์ ์์ต๋๋ค.</em> </div> </div> <!-- Mac Warning --> <div class="alert-box warning"> <div class="alert-title"><i class="fab fa-apple"></i> macOS ์ฌ์ฉ์ ํ์</div> <div class="alert-content"> ์ค์น ํ <code>/Applications/Python 3.x/</code> ํด๋์ <strong>Install Certificates.command</strong> ํ์ผ์ ์คํํ์ธ์. (SSL ์ธ์ฆ์ ๋ฏธ์ค์น ์ pip ์ฌ์ฉ ๋ถ๊ฐ) </div> </div> </div> <div class="action-side"> <a href="https://www.python.org/downloads/" target="_blank" class="btn-download">Python ๋ค์ด๋ก๋ <i class="fas fa-download"></i></a> <div class="detail-title" style="margin-top: 20px; margin-bottom: 10px;">ํ์ฉ ์์: ๋ฒ์ ํ์ธ ๋ฐ ์คํ</div> <div class="code-window"> <div class="window-header"> <span class="window-title">TERMINAL</span> <button class="copy-btn" onclick="copyText('python --version')">Copy</button> </div> <div class="code-content"> <span class="comment"># ๋ฒ์ ํ์ธ</span> $ python --version <br> <span class="comment"># ๊ฐ๋จํ ์ถ๋ ฅ ํ ์คํธ</span> $ python -c "print('Hello AI')" </div> </div> </div> </div> </div> </div> <!-- Slide 4: uv --> <div class="slide"> <div class="glass-panel"> <div class="grid-container"> <div class="content-side"> <div class="slide-header"> <div class="icon-badge" style="color: var(--accent-violet);"><i class="fas fa-bolt"></i></div> <h2>uv (Astral)</h2> </div> <p class="description"> Rust ์ธ์ด๋ก ์์ฑ๋ ํ์ ์ ์ธ Python ํจํค์ง ๊ด๋ฆฌ์์ ๋๋ค. ๊ธฐ์กด์ <code>pip</code>๋ณด๋ค ์ต๋ 10~100๋ฐฐ ๋น ๋ฅธ ์๋๋ฅผ ์๋ํฉ๋๋ค. ๋ณต์กํ ์์กด์ฑ ํด๊ฒฐ(Dependency Resolution) ๊ณผ์ ์ ์์๊ฐ์ ์ฒ๋ฆฌํ๋ฉฐ, ํ๋ก์ ํธ๋ณ ๊ฐ์ํ๊ฒฝ(venv) ๊ด๋ฆฌ๋ฅผ ํ๊ธฐ์ ์ผ๋ก ๋จ์ํํฉ๋๋ค. </p> <div class="detail-group"> <div class="detail-title"><i class="fas fa-rocket"></i> Why uv?</div> <ul class="feature-list"> <li class="feature-item"><i class="fas fa-check"></i><strong>Global Cache:</strong> ํ ๋ฒ ๋ค์ด๋ก๋ํ ํจํค์ง๋ ์บ์๋์ด ๋์คํฌ ๊ณต๊ฐ ์ ์ฝ</li> <li class="feature-item"><i class="fas fa-check"></i><strong>All-in-One:</strong> pip, pip-tools, virtualenv ๊ธฐ๋ฅ์ ํ๋์ ๋๊ตฌ๋ก ํตํฉ</li> <li class="feature-item"><i class="fas fa-check"></i><strong>Compatibility:</strong> ๊ธฐ์กด requirements.txt ๋ฐ pyproject.toml ์๋ฒฝ ์ง์</li> </ul> </div> </div> <div class="action-side"> <div class="detail-title">์ค์น ๋ช ๋ น์ด (Windows PowerShell)</div> <div class="code-window"> <div class="window-header"> <span class="window-title">POWERSHELL</span> <button class="copy-btn" onclick="copyText('powershell -c "irm https://astral.sh/uv/install.ps1 | iex"')">Copy</button> </div> <div class="code-content"> powershell -c "irm https://astral.sh/uv/install.ps1 | iex" </div> </div> <div class="detail-title" style="margin-top: 15px;">์ค์น ๋ช ๋ น์ด (macOS / Linux)</div> <div class="code-window"> <div class="window-header"> <span class="window-title">TERMINAL</span> <button class="copy-btn" onclick="copyText('curl -LsSf https://astral.sh/uv/install.sh | sh')">Copy</button> </div> <div class="code-content"> curl -LsSf https://astral.sh/uv/install.sh | sh </div> </div> <div class="detail-title" style="margin-top: 20px; margin-bottom: 10px;">ํ์ฉ ์์: ํจํค์ง ์ด๊ณ ์ ์ค์น</div> <div class="code-window"> <div class="window-header"> <span class="window-title">USAGE</span> </div> <div class="code-content"> <span class="comment"># ๊ฐ์ํ๊ฒฝ ์์ฑ ๋ฐ ํ์ฑํ ํ์ ์์ (์๋ ์ฒ๋ฆฌ)</span> $ uv pip install numpy pandas </div> </div> </div> </div> </div> </div> <!-- Slide 5: Node.js --> <div class="slide"> <div class="glass-panel"> <div class="grid-container"> <div class="content-side"> <div class="slide-header"> <div class="icon-badge" style="color: var(--accent-emerald);"><i class="fab fa-node-js"></i></div> <h2>Node.js</h2> </div> <p class="description"> Chrome V8 ์์ง ๊ธฐ๋ฐ์ JavaScript ๋ฐํ์์ ๋๋ค. AI ๊ฐ๋ฐ์๊ฐ ์ ํ์ํ ๊น์? ๋ฐ๋ก ์ต์ AI ๋๊ตฌ(Gemini CLI ๋ฑ)์ ํ๋ก ํธ์๋ ์ธํฐํ์ด์ค๊ฐ ๋๋ถ๋ถ Node.js ์ํ๊ณ(npm) ์์์ ๋์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์๋ฒ ์ฌ์ด๋ ๊ฐ๋ฐ๋ถํฐ ๋๊ตฌ ์คํ๊น์ง ํญ๋๊ฒ ์ฌ์ฉ๋ฉ๋๋ค. </p> <div class="detail-group"> <div class="detail-title"><i class="fas fa-info-circle"></i> Key Points</div> <ul class="feature-list"> <li class="feature-item"><i class="fas fa-check"></i><strong>LTS (Long Term Support)</strong> ๋ฒ์ ์ค์น ๊ถ์ฅ (์์ ์ฑ ์ต์ฐ์ )</li> <li class="feature-item"><i class="fas fa-check"></i>์ค์น ์ <strong>npm</strong> (Node Package Manager)์ด ์๋์ผ๋ก ํจ๊ป ์ค์น๋จ</li> </ul> </div> <div class="alert-box tip"> <div class="alert-title"><i class="fas fa-sync-alt"></i> ์ค์น ํ ์ฌ๋ถํ </div> <div class="alert-content"> ํ๊ฒฝ ๋ณ์ ์ ์ฉ์ ์ํด ์ค์น ์๋ฃ ํ ์ด๋ ค์๋ ๋ชจ๋ ํฐ๋ฏธ๋(CMD, VSCode ํฐ๋ฏธ๋ ๋ฑ)์ ๋ซ์๋ค๊ฐ ๋ค์ ์คํํด์ผ ํฉ๋๋ค. </div> </div> </div> <div class="action-side"> <a href="https://nodejs.org/ko/download" target="_blank" class="btn-download">Node.js (LTS) ๋ค์ด๋ก๋ <i class="fas fa-download"></i></a> <div class="detail-title" style="margin-top: 20px; margin-bottom: 10px;">ํ์ฉ ์์: JS ์คํ ๋ฐ ํจํค์ง ๊ด๋ฆฌ</div> <div class="code-window"> <div class="window-header"> <span class="window-title">TERMINAL</span> <button class="copy-btn" onclick="copyText('node -v && npm -v')">Copy</button> </div> <div class="code-content"> <span class="comment"># ๋ฒ์ ํ์ธ</span> $ node -v <br> <span class="comment"># ํจํค์ง ๋งค๋์ ๋ฒ์ ํ์ธ</span> $ npm -v </div> </div> </div> </div> </div> </div> <!-- Slide 6: Gemini CLI --> <div class="slide"> <div class="glass-panel"> <div class="grid-container"> <div class="content-side"> <div class="slide-header"> <div class="icon-badge" style="color: var(--accent-cyan);"><i class="fas fa-robot"></i></div> <h2>Gemini CLI</h2> </div> <p class="description"> Google์ ์ต์ฒจ๋จ ์์ฑํ AI 'Gemini'๋ฅผ ํฐ๋ฏธ๋ ํ๊ฒฝ์ผ๋ก ๊ฐ์ ธ์ต๋๋ค. ๋ธ๋ผ์ฐ์ ๋ฅผ ์ผ์ง ์๊ณ ๋ ์ฝ๋์ ๋ํ ์ง๋ฌธ, ์๋ฌ ๋ก๊ทธ ๋ถ์, ๋ฌธ์ ์์ฝ, ์ปค๋ฐ ๋ฉ์์ง ์์ฑ ๋ฑ์ ๋ช ๋ น์ค์์ ์ฆ์ ์ํํ ์ ์์ด ๊ฐ๋ฐ ๋ชฐ์ ๋(Flow)๋ฅผ ์ ์งํ๋ ๋ฐ ํฐ ๋์์ด ๋ฉ๋๋ค. </p> <div class="detail-group"> <div class="detail-title"><i class="fas fa-magic"></i> ๊ฐ๋ฐ ์์ฐ์ฑ ํ์ </div> <ul class="feature-list"> <li class="feature-item"><i class="fas fa-check"></i><strong>Workflow Integration:</strong> ํฐ๋ฏธ๋ ํ์ดํ๋ผ์ธ(|)์ ํตํด ๋ค๋ฅธ ๋ช ๋ น์ด์ ์ฐ๋ ๊ฐ๋ฅ</li> <li class="feature-item"><i class="fas fa-check"></i><strong>Direct Code Gen:</strong> ์ํ๋ ๊ธฐ๋ฅ์ ๋งํ๋ฉด ์ฝ๋๋ฅผ ์์ฑํด ์ค๋๋ค.</li> </ul> </div> </div> <div class="action-side"> <div class="detail-title">์ค์น ๋ช ๋ น์ด (Node.js ํ์)</div> <div class="code-window"> <div class="window-header"> <span class="window-title">TERMINAL</span> <button class="copy-btn" onclick="copyText('npm install -g @google/gemini-cli')">Copy</button> </div> <div class="code-content"> <span class="comment"># -g ์ต์ ์ ์ ์ญ(Global) ์ค์น๋ฅผ ์๋ฏธํฉ๋๋ค</span> $ npm install -g @google/gemini-cli </div> </div> <a href="https://github.com/google-gemini/gemini-cli" target="_blank" class="btn-download" style="background: rgba(255,255,255,0.1); border:1px solid rgba(255,255,255,0.2);">GitHub ์ ์ฅ์ <i class="fab fa-github"></i></a> <div class="detail-title" style="margin-top: 20px; margin-bottom: 10px;">ํ์ฉ ์์: AI์๊ฒ ์ง๋ฌธํ๊ธฐ</div> <div class="code-window"> <div class="window-header"> <span class="window-title">USAGE</span> </div> <div class="code-content"> <span class="comment"># ํฐ๋ฏธ๋์์ ๋ฐ๋ก ์ง๋ฌธ</span> $ gemini "Python์ผ๋ก ํผ๋ณด๋์น ์์ด ์ง์ค" </div> </div> </div> </div> </div> </div> <!-- Slide 7: Pandoc --> <div class="slide"> <div class="glass-panel"> <div class="grid-container"> <div class="content-side"> <div class="slide-header"> <div class="icon-badge" style="color: #fff;"><i class="fas fa-file-alt"></i></div> <h2>Pandoc</h2> </div> <p class="description"> "๋ฌธ์ ๋ณํ๊ณ์ ์ค์์ค ์๋ฏธ ๋์ดํ"์ ๋๋ค. AI๊ฐ ์์ฑํ Markdown(.md) ํ์์ ๋ฌธ์๋ฅผ ๊น๋ํ Word(.docx), PDF, HTML ๋ณด๊ณ ์๋ก ์ฆ์ ๋ณํํด ์ค๋๋ค. ์์, ํ, ์ธ์ฉ๊ตฌ ๋ฑ ๋ณต์กํ ์์๋ ์๋ฒฝํ๊ฒ ์ ์งํ๋ฉฐ ๋ณํํ๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. </p> <div class="detail-group"> <div class="detail-title"><i class="fas fa-copy"></i> ์ฃผ์ ํ์ฉ</div> <ul class="feature-list"> <li class="feature-item"><i class="fas fa-check"></i>๊ฐ๋ฐ ๋ฌธ์(README.md)๋ฅผ ๊ณ ๊ฐ์ฉ ๋งค๋ด์ผ(Word/PDF)๋ก ๋ณํ</li> <li class="feature-item"><i class="fas fa-check"></i>Jupyter Notebook์ HTML ๋ฆฌํฌํธ๋ก ๋ณํ</li> </ul> </div> </div> <div class="action-side"> <a href="https://pandoc.org/installing.html" target="_blank" class="btn-download">Pandoc ์ค์น ๊ฐ์ด๋ <i class="fas fa-book"></i></a> <div class="detail-title" style="margin-top: 20px; margin-bottom: 10px;">ํ์ฉ ์์: ๋ฌธ์ ๋ณํ</div> <div class="code-window"> <div class="window-header"> <span class="window-title">TERMINAL</span> <button class="copy-btn" onclick="copyText('pandoc input.md -o output.docx')">Copy</button> </div> <div class="code-content"> <span class="comment"># ๋งํฌ๋ค์ด์ ์๋ ๋ฌธ์๋ก ๋ณํ</span> $ pandoc input.md -o output.docx </div> </div> <div class="code-window" style="margin-top: 10px;"> <div class="window-header"> <span class="window-title">VERIFY</span> <button class="copy-btn" onclick="copyText('pandoc --version')">Copy</button> </div> <div class="code-content"> $ pandoc --version </div> </div> </div> </div> </div> </div> <!-- Slide 8: Final Check --> <div class="slide"> <div class="glass-panel" style="align-items: center;"> <div class="icon-badge" style="color: var(--accent-emerald); margin-bottom: 20px; width: 80px; height: 80px;"><i class="fas fa-check-double"></i></div> <h2 style="text-align: center;">System Verification</h2> <p class="description" style="text-align: center; max-width: 700px;"> ๋ชจ๋ ์ค์น๊ฐ ์๋ฃ๋์์ต๋๋ค. ํฐ๋ฏธ๋(PowerShell ๋๋ CMD)์ ์ด๊ณ ์๋ ๋ช ๋ น์ด๋ฅผ ์์๋๋ก ์ ๋ ฅํ์ฌ ๋ชจ๋ ๋๊ตฌ๊ฐ ์ ์์ ์ผ๋ก ์ธ์๋๋์ง ํ์ธํ์ธ์. </p> <div class="summary-grid"> <div class="check-card"> <span>Visual Studio Code</span> <span class="check-cmd">code --version</span> </div> <div class="check-card"> <span>Python</span> <span class="check-cmd">python --version</span> </div> <div class="check-card"> <span>uv Package Manager</span> <span class="check-cmd">uv --version</span> </div> <div class="check-card"> <span>Node.js</span> <span class="check-cmd">node -v</span> </div> <div class="check-card"> <span>Gemini CLI</span> <span class="check-cmd">gemini --version</span> </div> <div class="check-card"> <span>Pandoc</span> <span class="check-cmd">pandoc --version</span> </div> </div> <button class="btn-download" style="width: auto; padding: 15px 40px; margin-top: 50px; background: rgba(255,255,255,0.1); border: 1px solid rgba(255,255,255,0.2);" onclick="currentSlide=0; updateSlide()"> <i class="fas fa-undo"></i> ์ฒ์์ผ๋ก ๋์๊ฐ๊ธฐ </button> </div> </div> </div> <!-- Navigation Dock --> <div class="nav-dock"> <button class="nav-arrow" onclick="prevSlide()"><i class="fas fa-chevron-left"></i></button> <span class="page-counter" id="pageIndicator">1 / 9</span> <button class="nav-arrow" onclick="nextSlide()"><i class="fas fa-chevron-right"></i></button> </div> <script> let currentSlide = 0; const slides = document.querySelectorAll('.slide'); const totalSlides = slides.length; const progressBar = document.getElementById('progressBar'); const pageIndicator = document.getElementById('pageIndicator'); function updateSlide() { slides.forEach((slide, index) => { slide.classList.remove('active'); if (index === currentSlide) { slide.classList.add('active'); } }); // Progress Bar const progress = ((currentSlide + 1) / totalSlides) * 100; progressBar.style.width = ${progress}%; // Page Indicator pageIndicator.textContent = ${currentSlide + 1} / ${totalSlides}; } function nextSlide() { if (currentSlide < totalSlides - 1) { currentSlide++; updateSlide(); } } function prevSlide() { if (currentSlide > 0) { currentSlide--; updateSlide(); } } function copyText(text) { navigator.clipboard.writeText(text).then(() => { // Visual feedback logic could be added here alert('ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ๋์์ต๋๋ค: ' + text); }); } // Keyboard Navigation document.addEventListener('keydown', (e) => { if (e.key === 'ArrowRight' || e.key === ' ') nextSlide(); if (e.key === 'ArrowLeft') prevSlide(); }); // Initialize updateSlide(); </script> </body> </html> === Assistant: ์์ฝํ๋ฉด, ํด๋น ํ์ด์ง์ ํฌํจ๋ ์ฝ๋ ์์ฒด์์ โ๋ช ๋ฐฑํ ์ ์ฑ ํ์โ๋ ๊ธฐ์ ์ ์ผ๋ก ํ์ธ๋์ง ์์ผ๋ฉฐ, Kaspersky์ ํ์ง๋ โํด๋ฆฌ์คํฑHEUR ๊ธฐ๋ฐ ์คํ ๊ฐ๋ฅ์ฑโ์ด ๋งค์ฐ ๋์ ์ํฉ์ ๋๋ค. === ์์ฝํ๋ฉด, ํด๋น ํ์ด์ง์ ํฌํจ๋ ์ฝ๋ ์์ฒด์์ โ๋ช ๋ฐฑํ ์ ์ฑ ํ์โ๋ ๊ธฐ์ ์ ์ผ๋ก ํ์ธ๋์ง ์์ผ๋ฉฐ, Kaspersky์ ํ์ง๋ โํด๋ฆฌ์คํฑ(HEUR) ๊ธฐ๋ฐ ์คํ ๊ฐ๋ฅ์ฑโ์ด ๋งค์ฐ ๋์ ์ํฉ์ ๋๋ค. ๋ค๋ง, ์ ์ด๋ฐ ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํ๋์ง๋ ๋น๊ต์ ๋ช ํํ ๊ธฐ์ ์ ์ด์ ๋ค์ด ์กด์ฌํฉ๋๋ค. ์๋์์ ํ์ง ์์ธ โ ์ฝ๋ ๋ถ์ โ ์ค์ ์ํ์ฑ โ ๋์ ๋ฐฉ๋ฒ ์์๋ก ์ ๋ฆฌํด ๋๋ฆฌ๊ฒ ์ต๋๋ค. ==== 1. Kaspersky ํ์ง ๋ด์ฉ์ ์ ํํ ์๋ฏธ ==== ๊ฒฝ๊ณ ๋ฉ์์ง ํต์ฌ์ ๋ค์์ ๋๋ค. * ํ์ง๋ช : HEUR:Trojan.Script.Generic * ์๋ฏธ: - ํน์ ์ ์ฑ์ฝ๋ โํจํดโ์ด ์๋๋ผ - ์๋ฐ์คํฌ๋ฆฝํธ์ ๋์ ํํ๊ฐ โํธ๋ก์ด๋ชฉ๋ง ๊ณ์ด๊ณผ ์ ์ฌํ๋คโ๊ณ ํ๋จ๋ ํด๋ฆฌ์คํฑ ํ์ง * โobject is infectedโ - ์ค์ ๊ฐ์ผ์ด ์๋ ํ๋ ๊ธฐ๋ฐ ์์ฌ ํ์ ์ฆ, : โ์ด ์คํฌ๋ฆฝํธ๋ ๊ณผ๊ฑฐ ์ ์ฑ ์คํฌ๋ฆฝํธ์ ํ๋์ด ๋น์ทํ๋คโ : ๋ผ๋ ํ๋ฅ ๊ธฐ๋ฐ ์ฐจ๋จ์ ๋๋ค. ==== 2. ๋น์ ์ด ์ ๊ณตํ HTML/JS ์ฝ๋ ์์ฒด๋ ์ ์ฑ์ธ๊ฐ? ==== ===== 2-1. ์คํฌ๋ฆฝํธ๊ฐ ์ค์ ๋ก ํ๋ ์ผ ===== ๋น์ ์ด ์ฌ๋ฆฐ <script>๋ ์๋ ๊ธฐ๋ฅ๋ง ์ํํฉ๋๋ค. * ์ฌ๋ผ์ด๋ ํ์ด์ง ์ด๋ (nextSlide, prevSlide) * ํค๋ณด๋ ์ด๋ฒคํธ (โ โ, Spacebar) * ์งํ๋ฐ ์ ๋ฐ์ดํธ * ํด๋ฆฝ๋ณด๋ ๋ณต์ฌ (<code>navigator.clipboard.writeText</code>) * alert() ์๋ฆผ ํ์ โ ํ์ผ ๋ค์ด๋ก๋ โ ์ธ๋ถ JS ์คํ โ ๊ถํ ์์น โ ๋ฐฑ๊ทธ๋ผ์ด๋ ํต์ โ ์ ๋ณด ํ์ทจ โ ๋๋ ํ ์ฝ๋ โ ์ด ์ค ์ด๋ ๊ฒ๋ ์กด์ฌํ์ง ์์ต๋๋ค. ===== 2-2. โ์์ฌ์ค๋ฝ๊ฒ ๋ณด์ผ ์ ์๋โ ์์๋ค (์คํ ์ ๋ฐ ์์ธ) ===== ๋ค์ ์์๋ค์ด ๋ฐฑ์ ํด๋ฆฌ์คํฑ ์์ง์ด ๊ฐ์ฅ ์์ฃผ ์คํํ๋ ํจํด์ ๋๋ค: | ์์ | ์คํ ์ ๋ฐ ์ด์ | | ------------------------------------ | ------------------------------- | | navigator.clipboard.writeText() | ์ ๋ณด ํ์ทจ ์ ์ฑ์ฝ๋๊ฐ ์์ฃผ ์ฌ์ฉํ๋ API | | document.addEventListener('keydown') | ํค๋ก๊ฑฐ ๊ณ์ด ์ ์ฑ์ฝ๋์ ์ ์ฌํ ํจํด | | alert() | ํผ์ฑยท์ค์บ ํ์ด์ง์์ ๋งค์ฐ ํํจ | | GitHub Pages ๋๋ฉ์ธ | ์ ์ฑ ์คํฌ๋ฆฝํธ ์ ํฌ์ง๋ก ์์ฃผ ์ ์ฉ๋จ (๋๋ฉ์ธ ํํ ๋ฌธ์ ) | | ์ธ๋ถ CDN (cdnjs) | ์ ์ฑ์ฝ๋๊ฐ ์ธ๋ถ CDN์ ๋์ด๋ค ์ฐ๋ ํจํด๊ณผ ์ ์ฌ | โก๏ธ ์ด ์์๋ค์ ์กฐํฉ ์์ฒด๊ฐ โํธ๋ก์ด ์คํฌ๋ฆฝํธ์ ๋์ ์ ์ฌโ๋ก ๋ถ๋ฅ๋๊ธฐ ๋งค์ฐ ์ฌ์ด ๊ตฌ์กฐ์ ๋๋ค. ํ์ง๋ง ์ ์ฑ ๊ธฐ๋ฅ์ ์ ํ ์์ต๋๋ค. ==== 3. uv ์ค์น ๋ช ๋ น์ด๊ฐ โ์ค์ ์คํโ๋๋๊ฐ? ==== ์ฌ๋ผ์ด๋์ ํฌํจ๋ ์๋ ๊ตฌ๋ฌธ: <syntaxhighlight lang="powershell">irm https://astral.sh/uv/install.ps1 | iex </syntaxhighlight> ์ด ๋ถ๋ถ์: * ๋จ์ ํ ์คํธ ์ถ๋ ฅ * ์ฌ์ฉ์๊ฐ ์ง์ ํฐ๋ฏธ๋์ ํ์ดํํด์ผ๋ง ์คํ * ์นํ์ด์ง์์ ์๋ ์คํ๋์ง ์์ โก๏ธ ์น ํ์ด์ง์์ PowerShell์ ์คํํ๋ ์ฝ๋๋ ์ ํ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด๊ฒ ์ญ์ ์ ์ฑ ํ์๊ฐ ๋ ์ ์์ต๋๋ค. ==== 4. ์ โdownload blockingโ์ผ๋ก ๋จ๋๊ฐ? ==== Kaspersky๊ฐ ์ด ํ์ด์ง๋ฅผ ๋ค์ ์ค ํ๋๋ก ์๋ชป ํ๋จํ๊ธฐ ๋๋ฌธ์ ๋๋ค. # GitHub Pages ๋๋ฉ์ธ ๊ธฐ๋ฐ ํํ ๋ฆฌ์คํฌ # ํด๋ฆฝ๋ณด๋ + ํค ์ ๋ ฅ ๊ฐ์ง + alert โ ํธ๋ก์ด UI ๋์๊ณผ ์ ์ฌ # ๊ณผ๊ฑฐ corazzon.github.io ํ์ ๊ฒฝ๋ก ์ค ์ผ๋ถ๊ฐ ์ ์ฑ์ผ๋ก ์ ๊ณ ๋ ์ด๋ ฅ ๊ฐ๋ฅ์ฑ # Kaspersky์ JS ํด๋ฆฌ์คํฑ ๋ฃฐ ์ค๋ฅ ์ด ๊ฒฝ์ฐ ์ค์ ๊ฐ์ผ์ด ์๋๋ผ โ์ฌ์ ์ฐจ๋จ(Suspicious Object Blocking)โ์ ๋๋ค. ==== 5. ๊ฒฐ๋ก (ํต์ฌ ์์ฝ) ==== โ ๋น์ ์ด ์ฌ๋ฆฐ HTML/JS ์ฝ๋๋ ๊ธฐ์ ์ ์ผ๋ก ์ ์ฑ ํ์๊ฐ ์กด์ฌํ์ง ์์ต๋๋ค. โ Kaspersky์ ํ์ง๋ 95% ์ด์ ํ๋ฅ ๋ก ์คํ(False Positive) ์ ๋๋ค. โ ์์ธ์ ํด๋ฆฝ๋ณด๋ API + ํค ์ ๋ ฅ ๊ฐ์ง + Github Pages ํํ ๋ฌธ์ + ํด๋ฆฌ์คํฑ ์คํ์ ์กฐํฉ์ ๋๋ค. ==== 6. ์ค๋ฌด์ ์ธ ๋์ ๋ฐฉ๋ฒ (์ค์) ==== ===== โ ๋ฐฉ๋ฒ 1 โ VirusTotal๋ก URL ๊ฒ์ฌ ===== ์๋ ๋ฐฉ์์ผ๋ก ๋ค์ค ์์ง ๊ต์ฐจ ๊ฒ์ฆ์ ํด๋ณด์ธ์: * VirusTotal โ URL ๊ฒ์ฌ * Kaspersky๋ง ํ์ง๋๊ณ , ๋๋จธ์ง 60~70๊ฐ ์์ง์ด ์ ์ โ 100% ์คํ ===== โ ๋ฐฉ๋ฒ 2 โ Kaspersky ์คํ ์ ๊ณ (๊ฐ์ฅ ํ์คํ ํด๊ฒฐ) ===== Kaspersky๋ ์คํ ์ ๊ณ ํ๋ฉด ๋ณดํต 1~3์ผ ๋ด ํ์ง ํด์ ํฉ๋๋ค. * Kaspersky False Positive ์ ์ถ: - โThis is a false positive website detectionโ - URL ์ ์ถ ===== โ ๋ฐฉ๋ฒ 3 โ ๊ธฐ์ ์ ์ผ๋ก ์คํ๋ฅ ์ค์ด๋ ์ฝ๋ ์์ (์ ํ ์ฌํญ) ===== ์๋ 3๊ฐ์ง๋ฅผ ๋ฐ๊พธ๋ฉด ํ์ง ๊ฐ๋ฅ์ฑ์ด ํฌ๊ฒ ์ค์ด๋ญ๋๋ค. # alert() โ Toast UI๋ก ๋ณ๊ฒฝ # document.addEventListener('keydown') โ ํน์ ์์ญ์๋ง scope ์ ํ # clipboard API โ ๋ฒํผ ํด๋ฆญ ์์๋ง ์คํ ์ํ์๋ฉด โ๋ฐฑ์ ์คํ ๋ฐฉ์งํ ์ฝ๋ ๊ตฌ์กฐโ๋ก ๋ฆฌํฉํฐ๋ง ๋ฒ์ ๋ ๋ง๋ค์ด ๋๋ฆด ์ ์์ต๋๋ค. ==== 7. ์ต์ข ๊ฒฐ๋ก ==== : ์ด ์ฌ์ดํธ๋ ์ ์ฑ์ฝ๋์ ๊ฐ์ผ๋ ๊ฒ์ด ์๋๋ผ, : Kaspersky ์์ง์ JS ํด๋ฆฌ์คํฑ ์คํ์ ์ํด ๋ค์ด๋ก๋๊ฐ ์ฐจ๋จ๋ ๊ฒ์ ๋๋ค. ๋ณด์ ๊ด์ ์์ '''โ์ค์ ์ํ๋๋ ๋งค์ฐ ๋ฎ์โ'''์ด ๊ธฐ์ ์ ์ผ๋ก ์ ์ฆ๋ฉ๋๋ค. ์ํ์๋ฉด ์ ๊ฐ: * โ ์คํ ๋ฐฉ์ง์ฉ ์ฝ๋ ๋ฆฌํฉํฐ๋ง * โ CSP(Security Policy) ํค๋ ์ถ๊ฐ * โ ๋ณด์ ์ธ์ฆ ์ ์ ๊ฐ์ ๊ฐ์ด๋ ๊น์ง ๋ฐ๋ก ์ ์ฉ ๊ฐ๋ฅํ ํํ๋ก ์ ๋ฆฌํด ๋๋ฆฌ๊ฒ ์ต๋๋ค. == References == <references /> [[Category:ChatGPT Shares]] [[Category:openai]]
Summary:
Please note that all contributions to freem are considered to be released under the Creative Commons Attribution-ShareAlike 4.0 (see
Freem:Copyrights
for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource.
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Templates used on this page:
Template:Cite web
(
edit
)
Module:Citation/CS1
(
edit
)
Module:Citation/CS1/COinS
(
edit
)
Module:Citation/CS1/Configuration
(
edit
)
Module:Citation/CS1/Date validation
(
edit
)
Module:Citation/CS1/Identifiers
(
edit
)
Module:Citation/CS1/Utilities
(
edit
)
Module:Citation/CS1/Whitelist
(
edit
)
Module:Citation/CS1/styles.css
(
edit
)