์ฐธ๊ณ ํญ๋ชฉ
Copilot ์ฝ๋ฉ ์์ด์ ํธ๋ ๊ณต๊ฐ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ๋ฒ์ ์ด๋ฉฐ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ์ค ๊ธฐ๋ฅ์ ์ฌ์ฉ์ GitHub ์ํํ ์ฌ์ฉ ์กฐ๊ฑด์(๋ฅผ) ๋ฐ๋ฆ ๋๋ค.
์ ์ ์กฐ๊ฑด
Copilot ์ฝ๋ฉ ์์ด์ ํธ์ ๋ํ MCP ์๋ฒ๋ฅผ ์ค์ ํ๊ธฐ ์ ์ Model Context Protocol (MCP) and GitHub Copilot coding agent์(๋ฅผ) ์ฝ์ด MCP ์๋ฒ ๋ฐ Copilot ์ฝ๋ฉ ์์ด์ ํธ์ ๋ํ ๊ฐ๋ ์ ์ดํดํด์ผ ํฉ๋๋ค.
์๊ฐ
๋ฆฌํฌ์งํ ๋ฆฌ ๊ด๋ฆฌ์๋ ๋ฆฌํฌ์งํ ๋ฆฌ ๋ด์์ ์ฌ์ฉํ MCP ์๋ฒ๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์ด ์์ ์ MCP ์๋ฒ์ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ง์ ํ๋ JSON ํ์ ๊ตฌ์ฑ์ ์ฌ์ฉํ์ฌ ์ํํฉ๋๋ค. GitHub.com์ ๋ฆฌํฌ์งํ ๋ฆฌ ์ค์ ์ JSON ๊ตฌ์ฑ์ ์ง์ ์ ๋ ฅํฉ๋๋ค.
๊ฒฝ๊ณ
MCP ์๋ฒ๋ฅผ ๊ตฌ์ฑํ๋ฉด Copilot์ด ์๋ฒ์์ ์ ๊ณตํ๋ ๋๊ตฌ๋ฅผ ์์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ์ฌ์ฉ์์ ์น์ธ์ ์์ฒญํ ํ์๊ฐ ์์ต๋๋ค.
๋ฆฌํฌ์งํ ๋ฆฌ์ MCP ๊ตฌ์ฑ ์ถ๊ฐ
๋ฆฌํฌ์งํ ๋ฆฌ ๊ด๋ฆฌ์๋ ๋ค์ ๋จ๊ณ์ ๋ฐ๋ผ MCP ์๋ฒ๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
-
GitHub์์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๊ธฐ๋ณธ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
-
๋ฆฌํฌ์งํ ๋ฆฌ ์ด๋ฆ ์๋์์ ์ค์ ์ ํด๋ฆญํฉ๋๋ค. "์ค์ " ํญ์ด ํ์๋์ง ์์ผ๋ฉด ๋๋กญ๋ค์ด ๋ฉ๋ด๋ฅผ ์ ํํ ๋ค์ ์ค์ ์ ํด๋ฆญํฉ๋๋ค.
-
์ฌ์ด๋๋ฐ์ "Code & automation" ์น์ ์์ Copilot, ์ฝ๋ฉ ์์ด์ ํธ ๋ฅผ ์ฐจ๋ก๋ก ํด๋ฆญํฉ๋๋ค.
-
MCP configuration ์น์ ์์ ๊ตฌ์ฑ์ ์ถ๊ฐํฉ๋๋ค.
์ด ๋ฌธ์์ ๋ค์ ์น์ ์์๋ ์ฌ๊ธฐ์ ์ ๋ ฅํด์ผ ํ๋ JSON ๊ตฌ์ฑ์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
-
์ ์ฅ์ ํด๋ฆญํฉ๋๋ค.
๊ตฌ์ฑ์ ์ ํจ์ฑ์ ๊ฒ์ฌํ์ฌ ์ ํฉํ ๊ตฌ๋ฌธ์ธ์ง ํ์ธํฉ๋๋ค.
-
MCP ์๋ฒ์ ํค ๋๋ ๋น๋ฐ์ด ํ์ํ ๊ฒฝ์ฐ, Copilot ํ๊ฒฝ์ ๋น๋ฐ์ ์ถ๊ฐํฉ๋๋ค.
COPILOT_MCP_
์ ๋์ฌ๋ก ์์ํ๋ ์ด๋ฆ์ด ์๋ ๋น๋ฐ๋ง MCP ๊ตฌ์ฑ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. Copilot ์ฝ๋ฉ ์์ด์ ํธ๋ฅผ ์ํ Copilot ํ๊ฒฝ ์ค์ .์ ์ฐธ์กฐํ์ธ์.
MCP ์๋ฒ์ ๋ํ JSON ๊ตฌ์ฑ ์์ฑ
ํน๋ณํ JSON ํ์์ ์ฌ์ฉํ์ฌ MCP ์๋ฒ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ์ด JSON์๋ mcpServers
๊ฐ์ฒด๊ฐ ํฌํจ๋์ด์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์ ํค๋ MCP ์๋ฒ์ ์ด๋ฆ(์: sentry
)์ด๊ณ , ๊ฐ์ ํด๋น MCP ์๋ฒ์ ๊ตฌ์ฑ์ด ์๋ ๊ฐ์ฒด์
๋๋ค.
{ "mcpServers": { "MCP SERVER 1": { "command": "VALUE", "args": [ VALUES ], ... }, "MCP SERVER 2": { "command": "VALUE", "args": [ VALUES ], ... }, ... } }
{
"mcpServers": {
"MCP SERVER 1": {
"command": "VALUE",
"args": [ VALUES ],
...
},
"MCP SERVER 2": {
"command": "VALUE",
"args": [ VALUES ],
...
},
...
}
}
๊ตฌ์ฑ ๊ฐ์ฒด์๋ ๋ค์ ํค๋ฅผ ํฌํจํ ์ ์์ต๋๋ค.
๋ก์ปฌ ๋ฐ ์๊ฒฉ MCP ์๋ฒ์ ํ์ํ ํค
tools
(string[]
): MCP ์๋ฒ์์ ์ฌ์ฉํ ๋๊ตฌ์ ๋๋ค. ๋๊ตฌ ๋ชฉ๋ก์ ์๋ฒ ๋ฌธ์๋ ์ฝ๋์์ ์ฐพ์ ์ ์์ต๋๋ค. ์์ด์ ํธ๊ฐ ์ด๋ฌํ ๋๊ตฌ๋ฅผ ์์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ณ ๋จผ์ ์น์ธ์ ์์ฒญํ์ง ์์ผ๋ฏ๋ก ํน์ ์ฝ๊ธฐ ์ ์ฉ ๋๊ตฌ๋ฅผ ํ์ฉ ๋ชฉ๋ก์ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.*
๋ฅผ ๋ฐฐ์ด์ ํฌํจํ์ฌ ๋ชจ๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋๋ก ์ค์ ํ ์๋ ์์ต๋๋ค.type
(string
): Copilot ์ฝ๋ฉ ์์ด์ ํธ๋"local"
,"http"
๋๋"sse"
๋ฅผ ํ์ฉํฉ๋๋ค.
๋ก์ปฌ MCP ํน์ ํค
command
(string
): ํ์ ์ฌํญ. MCP ์๋ฒ๋ฅผ ์์ํ๊ธฐ ์ํด ์คํํ ๋ช ๋ น์ ๋๋ค.args
(string[]
): ํ์ ์ฌํญ.command
์ ์ ๋ฌํ ์ธ์์ ๋๋ค.env
(object
): ์ ํ ์ฌํญ. ์๋ฒ์ ์ ๋ฌํ ํ๊ฒฝ ๋ณ์์ ๋๋ค. ์ด ๊ฐ์ฒด๋ MCP ์๋ฒ์ ๋ ธ์ถ๋์ด์ผ ํ๋ ํ๊ฒฝ ๋ณ์์ ์ด๋ฆ์ ๋ค์ ์ค ํ๋์ ๋งคํํด์ผ ํฉ๋๋ค.- ๊ตฌ์ฑ๋ GitHub Actions ๋น๋ฐ์ ์ด๋ฆ(
COPILOT_MCP_
๋ก ์์)์ ๋๋ค. - ๋ฌธ์์ด ๊ฐ์ ๋๋ค.
- ๊ตฌ์ฑ๋ GitHub Actions ๋น๋ฐ์ ์ด๋ฆ(
์๊ฒฉ MCP ํน์ ํค
url
(string
): ํ์ ์ฌํญ. MCP ์๋ฒ์ URL์ ๋๋ค.headers
(object
): ์ ํ ์ฌํญ. ์๋ฒ์ ๋ํ ์์ฒญ์ ์ฐ๊ฒฐํ ํค๋์ ๋๋ค. ์ด ๊ฐ์ฒด๋ ํค๋ ํค์ ์ด๋ฆ์ ๋ค์ ์ค ํ๋์ ๋งคํํด์ผ ํฉ๋๋ค.- ๊ตฌ์ฑ๋ GitHub Actions ๋น๋ฐ์ ์ด๋ฆ์ผ๋ก,
$
๋ค์์COPILOT_MCP_
๋ก ์์๋ฉ๋๋ค. - ๋ฌธ์์ด ๊ฐ
- ๊ตฌ์ฑ๋ GitHub Actions ๋น๋ฐ์ ์ด๋ฆ์ผ๋ก,
๊ตฌ์ฑ ์
์: Sentry
Sentry MCP ์๋ฒ๋ Copilot์ด Sentry์ ๊ธฐ๋ก๋ ์์ธ์ ์ธ์ฆ๋ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํฉ๋๋ค.
// If you copy and paste this example, you will need to remove the comments prefixed with `//`, which are not valid JSON. { "mcpServers": { "sentry": { "type": "local", "command": "npx", // We can use the $SENTRY_HOST environment variable which is passed to // the server because of the `env` value below. "args": ["@sentry/mcp-server@latest", "--host=$SENTRY_HOST"], "tools": ["get_issue_details", "get_issue_summary"], "env": { // We can specify an environment variable value as a string... "SENTRY_HOST": "https://contoso.sentry.io", // or refer to a GitHub Actions secret with a name starting with // `COPILOT_MCP_` "SENTRY_ACCESS_TOKEN": "COPILOT_MCP_SENTRY_ACCESS_TOKEN" } } } }
// If you copy and paste this example, you will need to remove the comments prefixed with `//`, which are not valid JSON.
{
"mcpServers": {
"sentry": {
"type": "local",
"command": "npx",
// We can use the $SENTRY_HOST environment variable which is passed to
// the server because of the `env` value below.
"args": ["@sentry/mcp-server@latest", "--host=$SENTRY_HOST"],
"tools": ["get_issue_details", "get_issue_summary"],
"env": {
// We can specify an environment variable value as a string...
"SENTRY_HOST": "https://contoso.sentry.io",
// or refer to a GitHub Actions secret with a name starting with
// `COPILOT_MCP_`
"SENTRY_ACCESS_TOKEN": "COPILOT_MCP_SENTRY_ACCESS_TOKEN"
}
}
}
}
์: Notion
Notion MCP ์๋ฒ๋ Copilot์ด Notion์ ๋ ธํธ์ ๊ธฐํ ์ฝํ ์ธ ์ ์ธ์ฆ๋ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํฉ๋๋ค.
// If you copy and paste this example, you will need to remove the comments prefixed with `//`, which are not valid JSON. { "mcpServers": { "notionApi": { "type": "local", "command": "docker", "args": [ "run", "--rm", "-i", "-e", // We can use the $NOTION_API_KEY environment variable which is passed to // the server because of the `env` value below. "OPENAPI_MCP_HEADERS={\"Authorization\": \"Bearer $NOTION_API_KEY\", \"Notion-Version\": \"2022-06-28\"}", "mcp/notion" ], "env": { // The value of the `COPILOT_MCP_NOTION_API_KEY` secret will be passed to the // server command as an environment variable called `NOTION_API_KEY` "NOTION_API_KEY": "COPILOT_MCP_NOTION_API_KEY" }, "tools": ["*"] } } }
// If you copy and paste this example, you will need to remove the comments prefixed with `//`, which are not valid JSON.
{
"mcpServers": {
"notionApi": {
"type": "local",
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
// We can use the $NOTION_API_KEY environment variable which is passed to
// the server because of the `env` value below.
"OPENAPI_MCP_HEADERS={\"Authorization\": \"Bearer $NOTION_API_KEY\", \"Notion-Version\": \"2022-06-28\"}",
"mcp/notion"
],
"env": {
// The value of the `COPILOT_MCP_NOTION_API_KEY` secret will be passed to the
// server command as an environment variable called `NOTION_API_KEY`
"NOTION_API_KEY": "COPILOT_MCP_NOTION_API_KEY"
},
"tools": ["*"]
}
}
}
์์ : Azure
Azure MCP ์๋ฒ๋ Copilot๊ณผ Azure Cosmos DB ๋ฐ Azure Storage ํ๋ซํผ๊ณผ ๊ฐ์ ์ฃผ์ Azure ์๋น์ค ๊ฐ์ ์ํํ ์ฐ๊ฒฐ์ ์์ฑํฉ๋๋ค.
Copilot ์ฝ๋ฉ ์์ด์ ํธ์ ํจ๊ป Azure MCP๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด Azure ๋ก๊ทธ์ธ ์ํฌํ๋ก ๋จ๊ณ๋ฅผ ํฌํจํ๋๋ก ๋ฆฌํฌ์งํ ๋ฆฌ์ copilot-setup-steps.yml
ํ์ผ์ ์
๋ฐ์ดํธํด์ผ ํฉ๋๋ค.
-
GitHub๋ฅผ ์ ๋ขฐํ์ฌ Microsoft Entra ์ ํ๋ฆฌ์ผ์ด์ ์์ OIDC๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. OpenID Connect๋ก Azure ๋ก๊ทธ์ธ ์์ ์ฌ์ฉ์ ์ฐธ์กฐํ์ธ์.
-
์์ง ๋ฆฌํฌ์งํ ๋ฆฌ๊ฐ ์๋ค๋ฉด,
.github/workflows/copilot-setup-steps.yml
Actions ์ํฌํ๋ก ํ์ผ์ ์ถ๊ฐํ์ธ์. -
copilot-setup-steps
์ํฌํ๋ก ์์ ์ Azure ๋ก๊ทธ์ธ ๋จ๊ณ๋ฅผ ์ถ๊ฐํฉ๋๋ค.YAML on: workflow_dispatch: permissions: id-token: write contents: read jobs: copilot-setup-steps: runs-on: ubuntu-latest permissions: id-token: write contents: read environment: copilot steps: - name: Azure login uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
on: workflow_dispatch: permissions: id-token: write contents: read jobs: copilot-setup-steps: runs-on: ubuntu-latest permissions: id-token: write contents: read environment: copilot steps: - name: Azure login uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 with: client-id: ${{ secrets.AZURE_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
์ด ๊ตฌ์ฑ์ Copilot ์ฝ๋ฉ ์์ด์ ํธ๊ฐ ์คํ๋ ๋,
azure/login
์์ ์ด ์คํ๋๋๋ก ํฉ๋๋ค. -
๋ฆฌํฌ์งํ ๋ฆฌ์ Copilot ํ๊ฒฝ์์
AZURE_CLIENT_ID
,AZURE_TENANT_ID
,AZURE_SUBSCRIPTION_ID
๋ฅผ ์ํ ๋น๋ฐ์ ์ถ๊ฐํฉ๋๋ค. -
MCP ๊ตฌ์ฑ์
azure
๊ฐ์ฒด๋ฅผ ์ถ๊ฐํ์ฌ Azure MCP ์๋ฒ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
{ "mcpServers": { "Azure": { "type": "local", "command": "npx", "args": [ "-y", "@azure/mcp@latest", "server", "start" ], "tools": ["*"] } } }
{
"mcpServers": {
"Azure": {
"type": "local",
"command": "npx",
"args": [
"-y",
"@azure/mcp@latest",
"server",
"start"
],
"tools": ["*"]
}
}
}
์: Cloudflare
Cloudflare MCP ์๋ฒ๋ ์ฒ๋ฆฌ ๋ฌธ์ ๋ฐ ๋ฐ์ดํฐ ๋ถ์์ ํฌํจํ๋ Cloudflare ์๋น์ค ๊ฐ์ ์ฐ๊ฒฐ์ ๋ง๋ญ๋๋ค.
{ "mcpServers": { "cloudflare": { "type": "sse", "url": "https://docs.mcp.cloudflare.com/sse", "tools": ["*"] } } }
{
"mcpServers": {
"cloudflare": {
"type": "sse",
"url": "https://docs.mcp.cloudflare.com/sse",
"tools": ["*"]
}
}
}
Visual Studio Code์์ MCP ๊ตฌ์ฑ ๋ค์ ์ฌ์ฉ
VS Code์์ MCP ์๋ฒ๋ฅผ ์ด๋ฏธ ๊ตฌ์ฑํ ๊ฒฝ์ฐ, Copilot ์ฝ๋ฉ ์์ด์ ํธ์ ๋ํด ์ ์ฌํ ๊ตฌ์ฑ์ ํ์ฉํ ์ ์์ต๋๋ค.
VS Code๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ๋ฆฌํฌ์งํ ๋ฆฌ์ .vscode/mcp.json
ํ์ผ์ด๋ ๋จธ์ ์ ํ๋ผ์ด๋น settings.json
ํ์ผ์์ MCP ์ค์ ์ ์ฐพ์ ์ ์์ต๋๋ค.
Copilot ์ฝ๋ฉ ์์ด์ ํธ์ ๋ํ ๊ตฌ์ฑ์ ์กฐ์ ํ๋ ค๋ฉด ๋ค์์ ์ํํด์ผ ํฉ๋๋ค.
- ๊ฐ MCP ์๋ฒ์ ๋ํด
tools
ํค๋ฅผ ์ถ๊ฐํ์ฌ Copilot์์ ์ฌ์ฉํ ์ ์๋ ๋๊ตฌ๋ฅผ ์ง์ ํฉ๋๋ค. inputs
๋ฅผ ๊ตฌ์ฑํ ๊ฒฝ์ฐ,env
๋ฅผ ์ง์ ์ฌ์ฉํ๋๋ก ์ ํํฉ๋๋ค.envFile
์ ๊ตฌ์ฑํ ๊ฒฝ์ฐ,env
๋ฅผ ์ง์ ์ฌ์ฉํ๋๋ก ์ ํํฉ๋๋ค.args
๊ตฌ์ฑ์์inputs
์ ๋ํ ๋ชจ๋ ์ฐธ์กฐ๋ฅผ ์ ๋ฐ์ดํธํ์ฌ ๋์env
์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฐธ์กฐํ๋๋ก ํฉ๋๋ค.
VS Code์ MCP์ ๋ํ ์์ธํ ๋ด์ฉ์ VS Code ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
Copilot ์ฝ๋ฉ ์์ด์ ํธ๋ฅผ ์ํ Copilot ํ๊ฒฝ ์ค์
์ผ๋ถ MCP ์๋ฒ์๋ ํค ๋๋ ๋น๋ฐ์ด ํ์ํฉ๋๋ค. Copilot ์ฝ๋ฉ ์์ด์ ํธ์์ ์ด๋ฌํ ์๋ฒ๋ฅผ ํ์ฉํ๊ธฐ ์ํด Copilot ํ๊ฒฝ์ ๋น๋ฐ์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋น๋ฐ์ด ์ ๋๋ก ์ธ์๋์ด ์ฌ์ฉ์๊ฐ ๊ตฌ์ฑํ ํด๋น MCP ์๋ฒ๋ก ์ ๋ฌ๋ฉ๋๋ค.
๋ฆฌํฌ์งํ ๋ฆฌ์ Copilot ํ๊ฒฝ์ ๊ตฌ์ฑํ๋ ค๋ฉด ๋ฆฌํฌ์งํ ๋ฆฌ ๊ด๋ฆฌ์๊ฐ ๋์ด์ผ ํฉ๋๋ค.
-
GitHub์์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๊ธฐ๋ณธ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
-
๋ฆฌํฌ์งํ ๋ฆฌ ์ด๋ฆ ์๋์์ ์ค์ ์ ํด๋ฆญํฉ๋๋ค. "์ค์ " ํญ์ด ํ์๋์ง ์์ผ๋ฉด ๋๋กญ๋ค์ด ๋ฉ๋ด๋ฅผ ์ ํํ ๋ค์ ์ค์ ์ ํด๋ฆญํฉ๋๋ค.
-
์ผ์ชฝ ์ฌ์ด๋๋ฐ์์ ํ๊ฒฝ์ ํด๋ฆญํฉ๋๋ค.
-
์ ํ๊ฒฝ์ ํด๋ฆญํฉ๋๋ค.
-
์ ํ๊ฒฝ์
copilot
์ผ๋ก ์ง์ ํ๊ณ Configure environment๋ฅผ ํด๋ฆญํฉ๋๋ค. -
"Environment secrets"์์ Add environment secret์ ํด๋ฆญํฉ๋๋ค.
-
๋น๋ฐ ์ด๋ฆ์
COPILOT_MCP_
๋ก ์์ํ๋๋ก ์ค์ ํ๊ณ , ๋น๋ฐ ๊ฐ์ ์ ๋ ฅํ ๋ค์, Add secret์ ํด๋ฆญํฉ๋๋ค.
MCP ๊ตฌ์ฑ ์ ํจ์ฑ ๊ฒ์ฌ
MCP ๊ตฌ์ฑ์ ์ค์ ํ ํ, ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ๋์๋์ง ํ ์คํธํด์ผ ํฉ๋๋ค.
- ๋ฆฌํฌ์งํ ๋ฆฌ์์ ์ด์๋ฅผ ๋ง๋ ๋ค์, ์ด๋ฅผ Copilot์ ํ ๋นํฉ๋๋ค.
- ๋ช ์ด ํ, Copilot์ ์ด์์ ๐ ๋ฐ์์ ๋จ๊น๋๋ค.
- ๋ช ์ด ํ, Copilot์์ ๋์ด์ค๊ธฐ ์์ฒญ์ ๋ง๋ญ๋๋ค. ์ด ์์ฒญ์ ์ด์์ ํ์๋ผ์ธ์ ํ์๋ฉ๋๋ค.
- ํ์๋ผ์ธ์์ ๋ง๋ ๋์ด์ค๊ธฐ ์์ฒญ์ ํด๋ฆญํ๊ณ "Copilot started work" ํ์๋ผ์ธ ์ด๋ฒคํธ๊ฐ ๋ํ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.
- View session์ ํด๋ฆญํ์ฌ Copilot ์ฝ๋ฉ ์์ด์ ํธ ๋ก๊ทธ๋ฅผ ์ฝ๋๋ค.
- ๋ก๊ทธ ๋ทฐ์ด์ ์ค๋ฅธ์ชฝ ์์ ์๋ ์ค์ํ ๋จ์ถ(...)๋ฅผ ํด๋ฆญํ ๋ค์, ์ฌ์ด๋๋ฐ์์ Copilot ์ ํด๋ฆญํฉ๋๋ค.
- Start MCP Servers ๋จ๊ณ๋ฅผ ํด๋ฆญํ์ฌ ๋ก๊ทธ๋ฅผ ํ์ฅํฉ๋๋ค.
- MCP ์๋ฒ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์์๋ ๊ฒฝ์ฐ, ๋ก๊ทธ ์๋์ชฝ์ ํด๋น ๋๊ตฌ๊ฐ ๋์ด๋ฉ๋๋ค.
MCP ์๋ฒ์ GitHub Actions ์คํ๊ธฐ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์น๋์ง ์์ ์ข
์์ฑ(์: uv
๋ฐ pipx
)์ด ํ์ํ๊ฑฐ๋ ํน๋ณํ ์ค์ ๋จ๊ณ๊ฐ ํ์ํ ๊ฒฝ์ฐ, copilot-setup-steps.yml
Actions ์ํฌํ๋ก ํ์ผ์ ๋ง๋ค์ด ์ด๋ฅผ ์ค์นํด์ผ ํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ Copilot ์ฝ๋ฉ ์์ด์ ํธ์ ๊ฐ๋ฐ ํ๊ฒฝ ์ฌ์ฉ์ ์ง์ ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
๊ธฐ๋ณธ ์ ๊ณต GitHub MCP ์๋ฒ ์ฌ์ฉ์ ์ง์
GitHub MCP ์๋ฒ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ๋๋ก ์ค์ ๋์ด ์์ผ๋ฉฐ ํ์ฌ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ํ ์ฝ๊ธฐ ์ ์ฉ ์ก์ธ์ค ๊ถํ๋ง ์๋ ํน๋ณํ ๋ฒ์๊ฐ ์ง์ ๋ ํ ํฐ์ ์ฌ์ฉํ์ฌ GitHub์ ์ฐ๊ฒฐํฉ๋๋ค.
Copilot์ด ํ์ฌ ๋ฆฌํฌ์งํ ๋ฆฌ ์ธ๋ถ์ ๋ฐ์ดํฐ์ ์ก์ธ์คํ ์ ์๋๋ก ํ์ฉํ๋ ค๋ฉด, personal access token์ ๋ ํญ๋์ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ ์ ์์ต๋๋ค.
-
์ ์ ํ ๊ถํ์ ๊ฐ์ง personal access token์ ๋ง๋ญ๋๋ค. fine-grained personal access token์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ฅผ ํตํด ํน์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ํ ํ ํฐ์ ์ก์ธ์ค ๊ถํ์ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ ํํ ์ ์์ต๋๋ค. personal access tokens์ ๋ํ ์์ธํ ๋ด์ฉ์ ๊ฐ์ธ์ฉ ์ก์ธ์ค ํ ํฐ ๊ด๋ฆฌ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.
-
GitHub์์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๊ธฐ๋ณธ ํ์ด์ง๋ก ์ด๋ํฉ๋๋ค.
-
๋ฆฌํฌ์งํ ๋ฆฌ ์ด๋ฆ ์๋์์ ์ค์ ์ ํด๋ฆญํฉ๋๋ค. "์ค์ " ํญ์ด ํ์๋์ง ์์ผ๋ฉด ๋๋กญ๋ค์ด ๋ฉ๋ด๋ฅผ ์ ํํ ๋ค์ ์ค์ ์ ํด๋ฆญํฉ๋๋ค.
-
์ฌ์ด๋๋ฐ์ "Code & automation" ์น์ ์์ Copilot, ์ฝ๋ฉ ์์ด์ ํธ ๋ฅผ ์ฐจ๋ก๋ก ํด๋ฆญํฉ๋๋ค.
-
MCP configuration ์น์ ์์ ๊ตฌ์ฑ์ ์ถ๊ฐํฉ๋๋ค.
-
์ ์ฅ์ ํด๋ฆญํฉ๋๋ค.
-
์ผ์ชฝ ์ฌ์ด๋๋ฐ์์ ํ๊ฒฝ์ ํด๋ฆญํฉ๋๋ค.
-
copilot
ํ๊ฒฝ์ ํด๋ฆญํฉ๋๋ค. -
"Environment secrets"์์ Add environment secret์ ํด๋ฆญํฉ๋๋ค.
-
๋น๋ฐ ์ด๋ฆ์
COPILOT_MCP_GITHUB_PERSONAL_ACCESS_TOKEN
์ผ๋ก ์ง์ ํ๊ณ "Value" ํ๋์ personal access token์ ์ ๋ ฅํ ๋ค์, Add secret์ ํด๋ฆญํฉ๋๋ค.
๋ค๋ฅธ ํ๊ฒฝ์์ GitHub MCP ์๋ฒ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ธํ ๋ด์ฉ์ GitHub MCP ์๋ฒ ์ฌ์ฉ์(๋ฅผ) ์ฐธ์กฐํ์ธ์.