SQL Server Management Studio에서 Copilot 사용
SSMS(SQL Server Management Studio) 는 T-SQL 코드 작성, 최적화 및 문제 해결에 도움이 되는 두 개의 AI 기반 코딩 도우미를 지원합니다. GitHub Copilot 는 여러 언어에서 일반적인 코딩 지원을 제공하는 반면, Copilot 는 연결된 SQL Server 인스턴스와 관련된 데이터베이스 인식 제안을 제공합니다.
두 도구 모두 큰 언어 모델을 사용하여 데이터베이스 개발을 가속화합니다. GitHub Copilot는 전체 코드베이스에서 코드 완성 및 패턴 인식에 탁월하며, Copilot는 데이터베이스 스키마, 인덱스 및 통계를 활용하여 상황에 맞는 인식 T-SQL 지원을 제공합니다.
이러한 AI 도우미를 사용하면 데이터베이스 개발에 더 쉽게 액세스할 수 있고 신규 개발자와 숙련된 개발자의 생산성이 향상됩니다. 쿼리를 작성하든, 코드를 디버깅하든, 성능을 최적화하든, AI 기반 지원은 구문을 기억하지 않고 비즈니스 문제를 해결하는 데 집중할 수 있도록 도와줍니다.
SSMS에서 GitHub Copilot 사용
SSMS의 GitHub Copilot 는 데이터베이스 개발 워크플로에 AI 기반 코드 완성 및 생성을 제공합니다. 범용 코딩 도우미인 GitHub Copilot는 입력할 때 코드를 제안하고 자연어 주석에서 전체 쿼리를 생성하여 T-SQL을 더 빠르게 작성할 수 있도록 도와줍니다.
GitHub Copilot 기능 이해
GitHub Copilot는 SQL Server 개발을 위한 몇 가지 기능을 제공합니다.
- 인라인 코드 완성: T-SQL 코드를 작성할 때 실시간 제안
- 코딩할 자연어: 의도를 설명하는 주석 작성, 작업 쿼리 가져오기
- 여러 줄 제안: 전체 쿼리 블록, 프로시저 또는 함수 생성
- 패턴 인식: 작업 영역의 코딩 스타일 및 일반적인 패턴에 대해 알아봅니다.
- 컨텍스트 인식: 현재 파일에 이미 작성한 코드를 고려합니다.
- 다중 언어 지원: 데이터베이스 프로젝트에 사용되는 T-SQL, PowerShell, Python 및 기타 언어로 작동
GitHub Copilot는 현재 파일, 열린 탭 및 작업 영역을 분석하여 관련 제안을 제공합니다. 데이터베이스에 직접 연결하지는 않지만 T-SQL 구문 패턴과 일반적인 데이터베이스 개발 사례를 인식합니다.
SSMS에서 GitHub Copilot 사용
SQL Server Management Studio에서 GitHub Copilot를 사용하려면 다음을 수행합니다.
- SSMS 19.3 이상이 설치되어 있는지 확인합니다.
- 확장 메뉴에서 GitHub Copilot 확장 설치
- 활성 GitHub Copilot 구독이 있는 GitHub 계정으로 로그인
- 도구 > 옵션 > GitHub Copilot에서 기본 설정 구성
비고
GitHub Copilot에는 유료 구독(개인, 비즈니스 또는 엔터프라이즈)이 필요합니다. 일부 조직에서는 개발 도구 라이선스의 일부로 개발자를 위해 GitHub Copilot를 제공합니다.
인라인 제안으로 코드 작성
GitHub Copilot는 입력할 때 제안을 제공합니다.
-- Start typing a query
SELECT c.CustomerName,
-- Copilot suggests: c.Email, c.Phone, c.City
-- Press Tab to accept
-- Or write a comment describing what you need:
-- Get total sales by product category for last quarter
-- Copilot generates:
SELECT
p.Category,
SUM(od.Quantity * od.UnitPrice) AS TotalSales
FROM Products p
INNER JOIN OrderDetails od ON p.ProductID = od.ProductID
INNER JOIN Orders o ON od.OrderID = o.OrderID
WHERE o.OrderDate >= DATEADD(QUARTER, -1, GETDATE())
GROUP BY p.Category
ORDER BY TotalSales DESC;
회색 유령 텍스트는 코필로트의 제안을 보여줍니다. Tab 키를 눌러 수락하거나 Esc 키를 눌러 해제합니다.
저장 프로시저 및 함수 생성
주석에서 복잡한 데이터베이스 개체를 설명합니다.
-- Create a stored procedure to calculate customer lifetime value
-- Parameters: @CustomerID int
-- Returns: @TotalValue money, @OrderCount int, @FirstOrderDate date, @LastOrderDate date
-- GitHub Copilot generates:
CREATE PROCEDURE sp_GetCustomerLifetimeValue
@CustomerID INT
AS
BEGIN
SELECT
@CustomerID AS CustomerID,
SUM(od.Quantity * od.UnitPrice) AS TotalValue,
COUNT(DISTINCT o.OrderID) AS OrderCount,
MIN(o.OrderDate) AS FirstOrderDate,
MAX(o.OrderDate) AS LastOrderDate
FROM Orders o
INNER JOIN OrderDetails od ON o.OrderID = od.OrderID
WHERE o.CustomerID = @CustomerID
GROUP BY o.CustomerID;
END;
GitHub Copilot는 절차 패턴을 이해하고 완전한 실행 코드를 생성합니다.
데이터베이스 스키마 탐색
GitHub Copilot는 쿼리를 작성하여 데이터베이스 구조를 탐색하는 데 도움이 됩니다.
-- Show all foreign key relationships for Orders table
-- Copilot suggests:
SELECT
fk.name AS ForeignKeyName,
OBJECT_NAME(fk.parent_object_id) AS TableName,
COL_NAME(fkc.parent_object_id, fkc.parent_column_id) AS ColumnName,
OBJECT_NAME(fk.referenced_object_id) AS ReferencedTable,
COL_NAME(fkc.referenced_object_id, fkc.referenced_column_id) AS ReferencedColumn
FROM sys.foreign_keys fk
INNER JOIN sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id
WHERE OBJECT_NAME(fk.parent_object_id) = 'Orders'
OR OBJECT_NAME(fk.referenced_object_id) = 'Orders';
코딩 패턴에서 알아보기
GitHub Copilot는 시간이 지남에 따라 스타일에 맞게 조정됩니다. 특정 명명 규칙, 서식 또는 패턴을 일관되게 사용하는 경우 Copilot는 이를 제안 사항으로 통합합니다.
-- If you typically write your queries like this:
SELECT
c.CustomerID
,c.CustomerName
,c.Email
FROM Customers AS c
WHERE c.IsActive = 1;
-- Copilot learns your style and suggests:
SELECT
o.OrderID
,o.OrderDate
,o.TotalAmount
FROM Orders AS o
WHERE o.Status = 'Completed';
이 개인 설정은 제안을 더 자연스럽게 느끼게 하고 수동 서식 지정의 필요성을 줄입니다.
GitHub Copilot 모범 사례 적용
GitHub Copilot의 효율성을 최대화합니다.
| 연습 | Description |
|---|---|
| 설명이 포함된 주석 작성 | 명확하고 구체적인 주석은 더 나은 코드 제안을 생성합니다. |
| 의미 있는 이름 사용 | 설명 테이블 및 열 이름은 Copilot가 컨텍스트를 이해하는 데 도움이 됩니다. |
| 복잡한 작업 나누기 | 하나의 큰 블록이 아닌 복잡한 프로시저에 대해 여러 주석 작성 |
| 모든 제안 검토 | 항상 생성된 코드의 정확성 및 보안 유효성 검사 |
| 예제 제공 | 주석에 샘플 데이터 또는 예상 출력 포함 |
| 컨텍스트를 가까이에 유지 | 관련 파일 또는 스키마를 열어 Copilot에 더 많은 컨텍스트를 제공합니다. |
| 제안 반복 | 첫 번째 제안이 제대로 작동하지 않는 경우 의견을 다시 표현해 보세요. |
SSMS에서 Copilot 사용
SSMS의 Copilot는 SQL Server 인스턴스에 직접 연결되는 데이터베이스 인식 AI 기능을 제공합니다. GitHub Copilot와 달리 Copilot는 데이터베이스 스키마, 인덱스, 통계 및 메타데이터에 액세스할 수 있으므로 보다 상황적으로 정확한 T-SQL 제안을 사용할 수 있습니다.
Copilot 기능 이해
코필로트는 데이터베이스별 기능을 제공합니다.
- 스키마 인식 제안: 정확한 테이블 구조, 열 및 데이터 형식을 알고 있습니다.
- 쿼리 최적화: 실행 계획을 분석하고 성능 향상 제안
- 자연어 쿼리: 실제 데이터베이스에 따라 질문을 T-SQL로 변환합니다.
- 쿼리 설명: 기존 쿼리가 일반 언어로 수행하는 작업을 설명합니다.
- 오류 수정: 쿼리가 실패할 때 컨텍스트 인식 제안 제공
- 인덱스 권장 사항: 데이터베이스 통계를 기반으로 인덱스 제안
Copilot는 데이터베이스에 연결되므로 수정 없이 특정 스키마에서 작동하는 코드를 생성합니다.
자연어를 사용하여 쿼리
일반 영어를 사용하여 데이터에 대해 질문합니다.
-- Ask Copilot: "Show customers who placed more than 5 orders last month"
-- Copilot generates (using your actual schema):
SELECT
c.CustomerID,
c.CustomerName,
c.Email,
COUNT(o.OrderID) AS OrderCount
FROM Customers c
INNER JOIN Orders o ON c.CustomerID = o.CustomerID
WHERE o.OrderDate >= DATEADD(MONTH, -1, GETDATE())
AND o.OrderDate < DATEADD(DAY, 1, EOMONTH(DATEADD(MONTH, -1, GETDATE())))
GROUP BY c.CustomerID, c.CustomerName, c.Email
HAVING COUNT(o.OrderID) > 5
ORDER BY OrderCount DESC;
Copilot는 정확한 테이블 및 열 이름을 알고 있으므로 쿼리가 즉시 작동합니다.
쿼리 성능 최적화
Copilot는 쿼리를 분석하고 향상된 사항을 제안합니다.
-- Select a slow query and ask: "How can I make this faster?"
-- Original query:
SELECT c.CustomerName, SUM(od.Quantity * od.UnitPrice) AS Total
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID
LEFT JOIN OrderDetails od ON o.OrderID = od.OrderID
WHERE o.OrderDate >= '2024-01-01'
GROUP BY c.CustomerName;
-- Copilot suggests:
-- 1. Change LEFT JOIN to INNER JOIN (WHERE filters out NULLs anyway)
-- 2. Add covering index: CREATE INDEX IX_Orders_Date ON Orders(OrderDate, CustomerID, OrderID)
-- 3. Consider indexed view for frequent aggregations
-- Optimized query:
SELECT c.CustomerName, SUM(od.Quantity * od.UnitPrice) AS Total
FROM Customers c
INNER JOIN Orders o ON c.CustomerID = o.CustomerID
INNER JOIN OrderDetails od ON o.OrderID = od.OrderID
WHERE o.OrderDate >= '2024-01-01'
GROUP BY c.CustomerName
OPTION (RECOMPILE);
오류 이해 및 수정
쿼리가 실패하면 Copilot에서 문제를 설명하고 수정 사항을 제공합니다.
-- Query with error:
SELECT CustomerName, SUM(TotalAmount)
FROM Orders;
-- Error: Column 'Orders.CustomerName' is invalid in the select list
-- Ask Copilot: "What's wrong with this query?"
-- Copilot explains and fixes:
/*
The error occurs because CustomerName is not in an aggregate function or GROUP BY clause.
When using aggregate functions like SUM(), all non-aggregated columns must be grouped.
*/
-- Corrected query:
SELECT CustomerName, SUM(TotalAmount) AS Total
FROM Orders
GROUP BY CustomerName;
올바른 도구 선택
두 도구 모두 SQL Server 개발에 대한 가치를 제공합니다.
| 특징 | GitHub Copilot | Copilot |
|---|---|---|
| 데이터베이스 스키마 인식 | 아니오 | Yes |
| 여러 언어 지원 | Yes | T-SQL 포커스 |
| 쿼리 최적화 | 패턴 기반 | 데이터베이스별 |
| SSMS 외부에서 작동 | Yes | 아니오 |
| 데이터베이스 연결 필요 | 아니오 | Yes |
| Subscription | GitHub Copilot | Copilot |
전체 코드베이스에서 일반적인 T-SQL 개발, 다국어 프로젝트 및 코드 완성에 GitHub Copilot 를 사용합니다. 스키마 인식, 쿼리 최적화 및 직접 데이터베이스 상호 작용이 더 나은 결과를 제공하는 데이터베이스별 작업에 는 Copilot 를 사용합니다.
많은 개발자는 특정 데이터베이스 인스턴스를 사용할 때 일상적인 코딩을 위해 GitHub Copilot와 Copilot를 모두 사용합니다. 이러한 AI 도우미는 코드 품질 및 보안 표준을 유지하면서 데이터베이스 개발을 가속화합니다.