====== ๐Ÿ’ป Cursor AI ๊ฐœ๋ฐœ ๋„๊ตฌ ์™„์ „ ๊ฐ€์ด๋“œ ====== Cursor๋Š” AI ๊ธฐ๋ฐ˜ ์ฝ”๋”ฉ ์–ด์‹œ์Šคํ„ดํŠธ๋กœ, ๊ฐœ๋ฐœ์ž์˜ ์ƒ์‚ฐ์„ฑ์„ ํ˜์‹ ์ ์œผ๋กœ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. VS Code ๊ธฐ๋ฐ˜์˜ ๊ฐ•๋ ฅํ•œ AI ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ===== ๐Ÿ“Š Cursor ์ฃผ์š” ํŠน์ง• ๋น„๊ต ===== ^ ๊ธฐ๋Šฅ ^ Cursor ^ VS Code ^ GitHub Copilot ^ | **AI ์ฝ”๋“œ ์ƒ์„ฑ** | โญโญโญโญโญ | โญโญ | โญโญโญโญ | | **์‹ค์‹œ๊ฐ„ ๋””๋ฒ„๊น…** | โญโญโญโญโญ | โญโญโญ | โญโญโญ | | **์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง** | โญโญโญโญโญ | โญโญ | โญโญโญโญ | | **๋ฌธ์„œํ™”** | โญโญโญโญ | โญโญโญ | โญโญโญ | | **๋ฉ€ํ‹ฐ ์–ธ์–ด ์ง€์›** | โญโญโญโญโญ | โญโญโญโญ | โญโญโญโญ | | **์ปจํ…์ŠคํŠธ ์ดํ•ด** | โญโญโญโญโญ | โญโญ | โญโญโญ | ===== ๐ŸŽฏ ๋ชจ๋ธ๋ณ„ ์„ฑ๋Šฅ ๋น„๊ต ===== ^ ํ‰๊ฐ€ ํ•ญ๋ชฉ ^ GPT-4o ^ Claude 3.5 ^ Gemini 2.0 ^ | **์ฝ”๋“œ ์ƒ์„ฑ ํ’ˆ์งˆ** | โญโญโญโญโญ | โญโญโญโญ | โญโญโญโญ | | **๋””๋ฒ„๊น… ๋Šฅ๋ ฅ** | โญโญโญโญโญ | โญโญโญโญโญ | โญโญโญโญ | | **์‘๋‹ต ์†๋„** | โญโญโญโญ | โญโญโญโญ | โญโญโญโญโญ | | **์ปจํ…์ŠคํŠธ ์ดํ•ด** | โญโญโญโญโญ | โญโญโญโญโญ | โญโญโญโญ | | **๋น„์šฉ ํšจ์œจ์„ฑ** | โญโญโญ | โญโญโญโญ | โญโญโญโญโญ | ===== ๐Ÿ”ง ํ•ต์‹ฌ ๊ธฐ๋Šฅ ===== ===== AI ์ฝ”๋“œ ์ƒ์„ฑ ==== **์‹ค์‹œ๊ฐ„ ์ฝ”๋“œ ์ƒ์„ฑ** * ์ž์—ฐ์–ด ์„ค๋ช…์œผ๋กœ ์ฝ”๋“œ ์ž๋™ ์ƒ์„ฑ * ํ”„๋กœ์ ํŠธ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ณ ๋ คํ•œ ์Šค๋งˆํŠธ ์ œ์•ˆ * ํ•จ์ˆ˜, ํด๋ž˜์Šค, ์ „์ฒด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ * ์ฃผ์„๊ณผ ๋ฌธ์„œํ™” ์ž๋™ ํฌํ•จ **์‹ค์ œ ์‚ฌ์šฉ ์˜ˆ์‹œ:** ํ”„๋กฌํ”„ํŠธ: "์‚ฌ์šฉ์ž ์ธ์ฆ์„ ์œ„ํ•œ React ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด์ค˜" Cursor ์‘๋‹ต: ```jsx import React, { useState } from 'react'; import './AuthForm.css'; const AuthForm = ({ onLogin }) => { const [formData, setFormData] = useState({ email: '', password: '' }); const [isLoading, setIsLoading] = useState(false); const handleSubmit = async (e) => { e.preventDefault(); setIsLoading(true); try { const response = await fetch('/api/auth/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(formData) }); if (response.ok) { const userData = await response.json(); onLogin(userData); } } catch (error) { console.error('Login failed:', error); } finally { setIsLoading(false); } }; return (
setFormData({...formData, email: e.target.value})} required /> setFormData({...formData, password: e.target.value})} required />
); }; export default AuthForm; ```
===== AI ๋””๋ฒ„๊น… ==== **์Šค๋งˆํŠธ ์˜ค๋ฅ˜ ๋ถ„์„** * ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ์ž๋™ ๋ถ„์„ ๋ฐ ํ•ด๊ฒฐ์ฑ… ์ œ์‹œ * ์ฝ”๋“œ ์‹คํ–‰ ํ๋ฆ„ ์ถ”์  * ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ์ง€์  ์‹๋ณ„ * ๋ณด์•ˆ ์ทจ์•ฝ์  ๊ฒ€ํ†  **๋””๋ฒ„๊น… ์˜ˆ์‹œ:** ์˜ค๋ฅ˜: "TypeError: Cannot read property 'name' of undefined" Cursor ๋ถ„์„: ์ด ์˜ค๋ฅ˜๋Š” user ๊ฐ์ฒด๊ฐ€ undefined์ผ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํ•ด๊ฒฐ์ฑ…: ์˜ต์…”๋„ ์ฒด์ด๋‹ ๋˜๋Š” ๊ธฐ๋ณธ๊ฐ’ ์„ค์ • ์ˆ˜์ •๋œ ์ฝ”๋“œ: ```javascript // ๊ธฐ์กด ์ฝ”๋“œ const userName = user.name; // ์ˆ˜์ •๋œ ์ฝ”๋“œ const userName = user?.name || 'Unknown User'; ``` ===== AI ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง ==== **์ž๋™ ์ฝ”๋“œ ๊ฐœ์„ ** * ์ฝ”๋“œ ํ’ˆ์งˆ ์ž๋™ ๋ถ„์„ * ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ œ์•ˆ * ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ * ์•„ํ‚คํ…์ฒ˜ ๊ฐœ์„  **๋ฆฌํŒฉํ† ๋ง ์˜ˆ์‹œ:** ๊ธฐ์กด ์ฝ”๋“œ: ```javascript function processData(data) { let result = []; for (let i = 0; i < data.length; i++) { if (data[i].active) { result.push(data[i].name); } } return result; } ``` Cursor ๋ฆฌํŒฉํ† ๋ง: ```javascript function processData(data) { return data .filter(item => item.active) .map(item => item.name); } ``` ===== ๐Ÿ’ฐ ๊ฐ€๊ฒฉ ์ •์ฑ… ===== ^ ํ”Œ๋žœ ^ ๊ฐ€๊ฒฉ ^ ์ฃผ์š” ๊ธฐ๋Šฅ ^ | **Free** | $0 | ๊ธฐ๋ณธ AI ๊ธฐ๋Šฅ, ์ œํ•œ๋œ ์‚ฌ์šฉ๋Ÿ‰ | | **Pro** | $20/์›” | ๋ฌด์ œํ•œ ์‚ฌ์šฉ, ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ | | **Team** | $25/์›”/์‚ฌ์šฉ์ž | ํŒ€ ํ˜‘์—…, ๊ณต์œ  ์„ค์ • | | **Enterprise** | ๋งž์ถคํ˜• | ๊ธฐ์—… ์ „์šฉ, ๋ณด์•ˆ ๊ฐ•ํ™” | ===== ๐Ÿš€ ํ™œ์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค ===== ^ ๊ฐœ๋ฐœ ์˜์—ญ ^ Cursor ํ™œ์šฉ ^ ๊ธฐ๋Œ€ ํšจ๊ณผ ^ | **์›น ๊ฐœ๋ฐœ** | React/Vue ์ปดํฌ๋„ŒํŠธ ์ž๋™ ์ƒ์„ฑ | ๊ฐœ๋ฐœ ์†๋„ 3๋ฐฐ ํ–ฅ์ƒ | | **๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ** | API ์—”๋“œํฌ์ธํŠธ ์ž๋™ ์ƒ์„ฑ | ์„œ๋ฒ„ ๊ฐœ๋ฐœ ์‹œ๊ฐ„ ๋‹จ์ถ• | | **๋ชจ๋ฐ”์ผ ๊ฐœ๋ฐœ** | React Native/Flutter ์ฝ”๋“œ | ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๊ฐœ๋ฐœ | | **๋ฐ์ดํ„ฐ ๊ณผํ•™** | Python ๋ถ„์„ ์Šคํฌ๋ฆฝํŠธ | ๋ฐ์ดํ„ฐ ๋ถ„์„ ์ž๋™ํ™” | ===== ๐Ÿ”ง ์„ค์ • ๋ฐ ์ตœ์ ํ™” ===== ^ ์„ค์ • ์˜์—ญ ^ ์ตœ์ ํ™” ๋ฐฉ๋ฒ• ^ | **ํ”„๋กœ์ ํŠธ ์„ค์ •** | .cursorrules ํŒŒ์ผ๋กœ ์ฝ”๋”ฉ ์Šคํƒ€์ผ ์ •์˜ | | **ํ”„๋กฌํ”„ํŠธ ์ตœ์ ํ™”** | ๊ตฌ์ฒด์ ์ด๊ณ  ๋ช…ํ™•ํ•œ ์š”๊ตฌ์‚ฌํ•ญ ์ž‘์„ฑ | | **๋ชจ๋ธ ์„ ํƒ** | ํ”„๋กœ์ ํŠธ ํŠน์„ฑ์— ๋งž๋Š” AI ๋ชจ๋ธ ์„ ํƒ | | **ํŒ€ ํ˜‘์—…** | ๊ณตํ†ต ์„ค์ • ๋ฐ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ์›Œํฌํ”Œ๋กœ์šฐ | ===== ๐Ÿ”’ ๋ณด์•ˆ ๋ฐ ๊ฐœ์ธ์ •๋ณด ===== ^ ๋ณด์•ˆ ์˜์—ญ ^ Cursor ์ •์ฑ… ^ | **๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”** | ์—”๋“œํˆฌ์—”๋“œ ์•”ํ˜ธํ™”๋กœ ์ฝ”๋“œ ๋ณดํ˜ธ | | **๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ** | ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ์ตœ์†Œํ™” ๋ฐ ์ž๋™ ์‚ญ์ œ | | **์ ‘๊ทผ ์ œ์–ด** | ์—ญํ•  ๊ธฐ๋ฐ˜ ๊ถŒํ•œ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ | | **๊ฐ์‚ฌ ๋กœ๊ทธ** | ๋ชจ๋“  ํ™œ๋™ ๊ธฐ๋ก ๋ฐ ์ถ”์  | ===== ๐Ÿ”ฎ ํ–ฅํ›„ ์ „๋ง ===== ^ ๋ฐœ์ „ ๋ฐฉํ–ฅ ^ Cursor 2.0 ^ ์—…๊ณ„ ์˜ํ–ฅ ^ | **AI ๋ชจ๋ธ** | ๋” ์ •ํ™•ํ•œ ์ฝ”๋“œ ์ƒ์„ฑ | ๊ฐœ๋ฐœ์ž ์ƒ์‚ฐ์„ฑ ํ˜์‹  | | **ํ˜‘์—… ๊ธฐ๋Šฅ** | ์‹ค์‹œ๊ฐ„ ํ˜‘์—… | ํŒ€ ๊ฐœ๋ฐœ ํšจ์œจ์„ฑ ์ฆ๋Œ€ | | **๋ฉ€ํ‹ฐ๋ชจ๋‹ฌ** | ์ด๋ฏธ์ง€/์Œ์„ฑ ๊ธฐ๋ฐ˜ ์ฝ”๋”ฉ | ์ƒˆ๋กœ์šด ๊ฐœ๋ฐœ ํŒจ๋Ÿฌ๋‹ค์ž„ | | **๊ฐœ์ธํ™”** | ์‚ฌ์šฉ์ž ๋งž์ถค AI | ๊ฐœ์ธํ™”๋œ ๊ฐœ๋ฐœ ๊ฒฝํ—˜ | ---- ===== ๐Ÿ“š ๊ด€๋ จ ๋งํฌ ===== * [[wiki:it:ai:start|AI ๊ธฐ์ˆ  ๊ฐ€์ด๋“œ ๋ฉ”์ธ]] * [[wiki:it:ai:services:start|AI ์„œ๋น„์Šค ๋ฐ ํ”Œ๋žซํผ]] * [[wiki:it:ai:models:gpt|OpenAI GPT ๋ชจ๋ธ]] * [[wiki:it:ai:models:claude|Anthropic Claude ๋ชจ๋ธ]] * [[wiki:it:ai:models:gemini|Google Gemini ๋ชจ๋ธ]]