์‹ฌ๋ฒŒ ๋งˆํฌ

Curify์— ๊ฐ€์ž…ํ•˜์—ฌ ๊ท€ํ•˜์˜ ๋น„๋””์˜ค๋ฅผ ์„ธ๊ณ„ํ™”ํ•˜์„ธ์š”

๋˜๋Š”

Curify๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ ์‚ฌํ•ญ์— ๋™์˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
์„œ๋น„์Šค ์•ฝ๊ด€ ๊ทธ๋ฆฌ๊ณ  ๊ฐœ์ธ ์ •๋ณด ๋ณดํ˜ธ ์ •์ฑ…

๐Ÿ—๏ธ QA ๋ด‡์—์„œ ์ž‘์—… ์—์ด์ „ํŠธ๊นŒ์ง€: ์•„ํ‚คํ…์ฒ˜ ๊ฐ€์ด๋“œ

TL;DR: ์งˆ๋ฌธ์—๋งŒ ๋‹ตํ•˜๋Š” ์ฑ—๋ด‡์€ ๊ทธ๋งŒ ๋งŒ๋“ค๊ณ , ์‹ค์ œ๋กœ ์ผ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—… ์—์ด์ „ํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜์„ธ์š”.

์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” ๊ตฌ์ฒด์ ์ธ ์ฝ”๋“œ ์˜ˆ์ œ์™€ ์˜คํ”ˆ ์†Œ์Šค ์ฐธ์กฐ๋ฅผ ํ†ตํ•ด ์ •์  ๊ทœ์น™, ๋™์  ๊ธฐ์ˆ  ๋ฐ ๊ฒฐ์ •์  ํ›„ํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋†€๋ฆฌ์‹ QA ๋ด‡์—์„œ ์ž‘์—… ์—์ด์ „ํŠธ๋กœ์˜ ์•„ํ‚คํ…์ฒ˜ ์ „ํ™˜์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์–‘ํ•œ ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ„์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ๋ณด์—ฌ์ฃผ๋Š” ์ž‘์—… ์—์ด์ „ํŠธ ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ๊ทธ๋ฆผ

1. ํ•ต์‹ฌ ์ „ํ™˜: QA ๋ด‡ โ†’ ์ž‘์—… ์—์ด์ „ํŠธ

์˜ค๋Š˜๋‚  ๋Œ€๋ถ€๋ถ„์˜ AI ์‹œ์Šคํ…œ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์ƒํ™ฉ์— ๋งž๋Š” QA ๋ด‡์ž…๋‹ˆ๋‹ค.

โ€ข ์งˆ๋ฌธ์— ์ž˜ ๋‹ต๋ณ€ํ•ด์ค๋‹ˆ๋‹ค.

โ€ข ์••๋ฐ•๊ฐ์— ํ™˜๊ฐ์„ ๋А๋‚€๋‹ค

โ€ข ์‹คํ–‰, ์•ˆ์ „, ์ผ๊ด€์„ฑ์— ๋Œ€ํ•œ ๋ณด์žฅ์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ์ฃผ์š” ํ†ต์ฐฐ๋ ฅ: ์ปจํ…์ŠคํŠธ๋ฅผ ํ™•์žฅํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๊ตฌ์กฐํ™”ํ•˜์„ธ์š”.

2. 3๊ณ„์ธต ์•„ํ‚คํ…์ฒ˜

๐Ÿงฑ 1. ์ •์  ์ปจํ…์ŠคํŠธ โ€” ๊ทœ์น™(ํ•ญ์ƒ ์ผœ์ง)

  • โ€ข์ •์‹  ๋ชจ๋ธ: ์ง์› ํ•ธ๋“œ๋ถ
  • โ€ขํ•ญ์ƒ ๋กœ๋“œ๋จ
  • โ€ข์‹ ์›, ์ฝ”๋”ฉ ํ‘œ์ค€, ํ–‰๋™ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • โ€ขํ™˜๊ฐ๊ณผ ์Šคํƒ€์ผ ๋“œ๋ฆฌํ”„ํŠธ๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • โ€ข์ž‘๊ณ  ์•ˆ์ •์ ์ด๋ฉฐ ์‚ฌ๋žŒ์ด ํŽธ์ง‘ ๊ฐ€๋Šฅ

๐Ÿ› ๏ธ 2. ๋™์  ์ปจํ…์ŠคํŠธ โ€” ๊ธฐ์ˆ (์ฃผ๋ฌธํ˜•)

  • โ€ข์ •์‹  ๋ชจ๋ธ: ๋„๊ตฌ ์ƒ์ž
  • โ€ขํ•„์š”ํ•  ๋•Œ๋งŒ ๋กœ๋“œ๋จ
  • โ€ข๊ฐ ๊ธฐ์ˆ ์€ ๋…๋ฆฝ์ ์ธ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.
  • โ€ข์ปจํ…์ŠคํŠธ ์ฐฝ์„ ๊นจ๋—ํ•˜๊ฒŒ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

โšก 3. ๊ฒฐ์ •๋ก ์  ํ›„ํฌ - ๊ฐ€๋“œ๋ ˆ์ผ

  • โ€ข์ •์‹  ๋ชจ๋ธ: ๋ณด์•ˆ + ๊ทœ์ • ์ค€์ˆ˜ ๊ณ„์ธต
  • โ€ขํ™•๋ฅ ์ ์ด์ง€ ์•Š์Œ
  • โ€ขLLM ์ถ”๋ก  ์ „/ํ›„์— ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
  • โ€ข๊ฒฐ์ฝ” ์‹คํŒจํ•ด์„œ๋Š” ์•ˆ ๋˜๋Š” ๊ทœ์น™์„ ์‹œํ–‰ํ•ฉ๋‹ˆ๋‹ค.

3. ๊ถŒ์žฅ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

๋‚ด ์ž‘์—… ์—์ด์ „ํŠธ/
โ”œโ”€โ”€.cursorrules
โ”œโ”€โ”€ main.py
โ”œโ”€โ”€ ๋„๊ตฌ/
โ”‚ โ””โ”€โ”€ linear_mcp.py
โ””โ”€โ”€ README.md

4. ์ •์  ์ปจํ…์ŠคํŠธ ์˜ˆ:.cursorrules

# ์—ญํ• 
๊ท€ํ•˜๋Š” ์ƒ์‚ฐ ๋“ฑ๊ธ‰ ์‹œ์Šคํ…œ์— ์ฃผ๋ ฅํ•˜๋Š” ์ˆ˜์„ Python ์—”์ง€๋‹ˆ์–ด์ž…๋‹ˆ๋‹ค.

# ๊ทœ์น™
- ๋””๋ฒ„๊น…์„ ์œ„ํ•ด ์ ˆ๋Œ€๋กœ print()๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”.
- ํ•ญ์ƒ ์œ ํ˜• ํžŒํŠธ ๊ธฐ๋Šฅ
- 3๊ฐœ ์ด์ƒ์˜ ํŒŒ์ผ์„ ํ„ฐ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ ๊ณ„ํš ์ œ์•ˆ

# ํ–‰๋™
- ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•˜์„ธ์š”
- ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ช…ํ™•ํ•œ ์งˆ๋ฌธ์„ ํ•˜์„ธ์š”.

์ฐธ์กฐ: https://github.com/PatrickJS/awesome-cursorrules

5. ๋‹ค์ด๋‚˜๋ฏน ์Šคํ‚ฌ ์˜ˆ์‹œ(MCP)

mcp.server.fastmcp์—์„œ FastMCP ๊ฐ€์ ธ์˜ค๊ธฐ

mcp = FastMCP("DevTools")

@mcp.tool()
def create_linear_ticket(title: str, ์šฐ์„ ์ˆœ์œ„: str = "low") -> str:
    ticket_id = f"LIN-{hash(title) % 10000}"
    f"์šฐ์„ ์ˆœ์œ„๊ฐ€ {priority}์ธ ์ƒ์„ฑ๋œ ํ‹ฐ์ผ“ {ticket_id}"์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

__name__ == "__main__"์ธ ๊ฒฝ์šฐ:
    mcp.run()

์ฐธ์กฐ: https://github.com/modelcontextprotocol/python-sdk

6. ๊ฒฐ์ •์  ํ›„ํฌ ์˜ˆ

def compliance_check_hook(state):
    user_input = state["messages"][-1].content.lower()
    if "password" in user_input or "api_key" in user_input:
        return {"error": "๋ณด์•ˆ ์œ„๋ฐ˜์ด ๊ฐ์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค"}
    return agent_node(state)

์ฐธ๊ณ : https://langchain-ai.github.io/langgraph/

์ƒ๋‹ด์›์ด ์งˆ๋ฌธ์—๋งŒ ๋‹ต๋ณ€ํ•œ๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ์ฑ—๋ด‡์ž…๋‹ˆ๋‹ค. ์•ˆ์ •์ ์œผ๋กœ ์ž‘์—…์„ ์‹คํ–‰ํ•œ๋‹ค๋ฉด ํƒœ์Šคํฌ ์—์ด์ „ํŠธ์ž…๋‹ˆ๋‹ค.

Related Articles