wiki:it:ai:services:cursor
๋ชฉ์ฐจ
๐ป 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 ( <form onSubmit={handleSubmit} className="auth-form"> <input type="email" placeholder="์ด๋ฉ์ผ" value={formData.email} onChange={(e) => setFormData({...formData, email: e.target.value})} required /> <input type="password" placeholder="๋น๋ฐ๋ฒํธ" value={formData.password} onChange={(e) => setFormData({...formData, password: e.target.value})} required /> <button type="submit" disabled={isLoading}> {isLoading ? '๋ก๊ทธ์ธ ์ค...' : '๋ก๊ทธ์ธ'} </button> </form> ); }; 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/services/cursor.txt ยท ๋ง์ง๋ง์ผ๋ก ์์ ๋จ: ์ ์ 127.0.0.1