이 빠른 시작에서는 비즈니스 논리 설명자를 통해 개발자가 SQL, ORM(Object-Relational 매핑) 프레임워크 또는 데이터베이스에서 직접 구현된 복잡한 애플리케이션 논리를 이해하고 작업하는 방법을 알아봅니다. 도우미는 SQL 코드, ORM 모델 또는 기존 데이터베이스 스키마를 분석하여 기본 비즈니스 규칙을 설명하고 실행 가능한 설명서를 제공합니다.
시작하기
데이터베이스에 연결되어 있고 MSSQL 확장으로 활성 편집기 창이 열려 있는지 확인합니다. 이 연결을 사용하면 채팅 참가자가 @mssql
데이터베이스 환경의 컨텍스트를 이해할 수 있으므로 정확하고 컨텍스트 인식 제안을 사용할 수 있습니다. 데이터베이스 연결이 없으면 채팅 참가자는 의미 있는 응답을 제공하는 스키마 또는 데이터 컨텍스트가 없습니다.
다음 예제에서는 AdventureWorksLT2022
홈페이지에서 다운로드할 수 있는 샘플 데이터베이스를 사용합니다.
최상의 결과를 위해 사용자 고유의 환경에 맞게 테이블 및 스키마 이름을 조정합니다.
@mssql
접두사가 채팅에 포함되어 있는지 확인하세요. 예를 들어, @mssql
을 입력한 후에 질문이나 프롬프트를 작성합니다. 이렇게 하면 채팅 참가자가 SQL 관련 지원을 요청하는 것을 이해할 수 있습니다.
GitHub Copilot를 사용하여 비즈니스 논리 이해
GitHub Copilot는 데이터베이스 코드, ORM 모델 및 애플리케이션 쿼리에 포함된 비즈니스 규칙을 이해하고 설명하는 데 도움이 될 수 있습니다. 저장 프로시저에서 LINQ 쿼리 및 Sequelize 식에 이르기까지 GitHub Copilot는 복잡한 논리에 더 쉽게 액세스할 수 있도록 자연어 인사이트를 제공합니다.
다음은 채팅 참가자를 통해 요청할 수 있는 일반적인 사용 사례 및 예제입니다.
T-SQL 논리 설명
GitHub Copilot를 사용하여 저장 프로시저에서 인라인 조건문에 이르기까지 T-SQL 논리를 이해하고 설명합니다. 할인 규칙, 절차 논리 또는 최적화 조건을 검토하든 GitHub Copilot는 T-SQL에서 구현된 비즈니스 규칙을 분석하고 문서화할 수 있습니다.
- 저장 프로시저가
SalesLT.uspGetCustomerOrderHistory
수행하는 작업을 설명하고 최적화하는 방법을 제안합니다. - 저장 프로시저를
SalesLT.uspGetTopSellingProducts
디버그하고 개선 사항을 제안합니다. - 현재 데이터베이스에서 다음
SQL
코드 조각을 분석합니다. 자격 조건, 할인율 조정 및 할인 금액에 적용되는 제한을 포함하여 이 할인 신청 프로세스에서 구현된 비즈니스 규칙을 문서화합니다. 또한 필요한 경우 명확성 또는 성능을 향상시키기 위해 실행 가능한 인사이트 또는 제안을 제공합니다.
DECLARE @OrderTotal AS DECIMAL (10, 2) = 1500.00;
DECLARE @DiscountCode AS NVARCHAR (20) = 'DISCOUNT10';
DECLARE @DiscountPct AS DECIMAL (5, 2) = CASE WHEN @OrderTotal > 1000.00 THEN 5.0 ELSE 0.0 END;
IF @DiscountCode = 'DISCOUNT10'
BEGIN
SET @DiscountPct = CASE WHEN @DiscountPct < 10.0 THEN 10.0 ELSE @DiscountPct END;
END
DECLARE @DiscountAmount AS DECIMAL (10, 2) = (@OrderTotal * @DiscountPct / 100.0);
IF @DiscountAmount > 200.00
BEGIN
SET @DiscountAmount = 200.00;
END
SELECT @OrderTotal AS OrderTotal,
@DiscountPct AS DiscountPercentage,
@DiscountAmount AS DiscountAmount;
ORM 논리 설명
- 다음 SQLAlchemy 쿼리가 수행하는 작업을 설명합니다.
from sqlalchemy import func
top_customers = (
session.query(SalesOrderHeader.CustomerID, func.count().label("OrderCount"))
.group_by(SalesOrderHeader.CustomerID)
.order_by(func.count().desc())
.limit(10)
)
- 이 Entity Framework LINQ 쿼리는 무엇을 합니까? 총 구매에 따라 계층별로 고객을 그룹화하는 방법을 설명합니다.
var customerTiers = context.SalesOrderHeaders
.GroupBy(o => o.CustomerID)
.Select(g => new {
CustomerID = g.Key,
TotalSpent = g.Sum(o => o.TotalDue),
Tier = g.Sum(o => o.TotalDue) >= 10000 ? "Gold" :
g.Sum(o => o.TotalDue) >= 5000 ? "Silver" : "Bronze"
});
- 이 Prisma 쿼리의 논리를 분석하고 "낮은 인벤토리"로 간주되는 제품을 결정하는 방법을 설명합니다.
const lowInventoryProducts = await prisma.product.findMany({
where: {
SafetyStockLevel: {
lt: 50
}
},
select: {
ProductID: true,
Name: true,
SafetyStockLevel: true
}
});
- 이 Sequelize 쿼리가 수행하는 작업을 검토하고 설명합니다. 인라인 주석을 추가하여 고객당 총 수익을 계산하는 방법과 상당한 지출을 가진 고객의 필터를 명확하게 합니다.
const results = await SalesOrderHeader.findAll({
attributes: ['CustomerID', [sequelize.fn('SUM', sequelize.col('TotalDue')), 'TotalSpent']],
group: ['CustomerID'],
having: sequelize.literal('SUM(TotalDue) > 5000')
});
SQLAlchemy를 사용하여 정렬되지 않은 제품을 나열하는 쿼리를 생성하고 GitHub Copilot에 조인 논리 및 필터링 동작을 설명하도록 요청합니다.
Prisma에서 지난 30일 동안 주문을 한 고객을 검색하는 쿼리를 작성합니다. 다음 Prisma 쿼리가 수행하는 작업을 설명합니다. 인라인 주석을 추가하여 날짜 필터링의 작동 방식과 최근 주문이 결정되는 방식을 명확하게 설명합니다.
쿼리를 통한 비즈니스 의도 이해
GitHub Copilot는 개발자가 쿼리의 작동 방식뿐만 아니라 쿼리가 존재하는 이유를 이해하는 데 도움이 됩니다. 여기에는 데이터 필터, 그룹화 및 집계의 실제 용도가 포함됩니다. 이러한 설명은 온보딩하는 동안 특히 유용하므로 개발자는 SQL 및 ORM 코드에 포함된 보고서, 논리 게이트 또는 시스템 메트릭 뒤에 있는 목표를 파악할 수 있습니다.
- 다음 SQL 쿼리의 비즈니스 목표를 설명합니다. 어떤 인사이트를 표시하려고 합니까?
SELECT TOP 10 CustomerID,
COUNT(*) AS OrderCount
FROM SalesLT.SalesOrderHeader
GROUP BY CustomerID
ORDER BY OrderCount DESC;
- 비즈니스 관점에서 이 쿼리의 용도를 요약합니다.
SELECT ProductID,
SUM(LineTotal) AS TotalSales
FROM SalesLT.SalesOrderDetail
GROUP BY ProductID
HAVING SUM(LineTotal) > 10000;
SalesLT.uspGetCustomerOrderHistory
저장 프로시저를 분석하고 그것이 구현한 비즈니스 논리를 설명합니다.이 Entity Framework LINQ 쿼리를 설명하고 구현하는 비즈니스 논리를 설명합니다.
var highValueCustomers = context.SalesOrderHeaders
.Where(o => o.TotalDue > 1000)
.GroupBy(o => o.CustomerID)
.Select(g => new { CustomerID = g.Key, OrderCount = g.Count() })
.OrderByDescending(x => x.OrderCount)
.Take(10)
.ToList();
-
Sequelize
를 사용하여 이 쿼리가 수행하는 작업을 설명하고 비즈니스 가정을 기술하세요.
const customerRevenue = await SalesOrderHeader.findAll({
attributes: ['CustomerID', [sequelize.fn('SUM', sequelize.col('TotalDue')), 'TotalSpent']],
group: ['CustomerID'],
having: sequelize.literal('SUM(TotalDue) > 5000')
});
피드백: 비즈니스 논리 설명자
MSSQL 확장에 대한 GitHub Copilot를 구체화하고 개선하는 데 도움이 되도록 다음 GitHub 문제 템플릿을 사용하여 피드백을 제출합니다. GitHub Copilot 피드백
피드백을 제출할 때 다음을 포함하는 것이 좋습니다.
테스트된 시나리오 – 스키마 만들기, 쿼리 생성, 보안, 지역화와 같이 집중한 영역을 알려주세요.
잘 작동하는 기능 – 원활하거나 도움이 되거나 예상을 초과한 모든 경험을 설명합니다.
문제 또는 버그 – 문제, 불일치 또는 혼란스러운 동작을 포함합니다. 스크린샷 또는 화면 녹화는 특히 유용합니다.
개선 제안 - 유용성 향상, 적용 범위 확장 또는 GitHub Copilot의 응답 향상을 위한 아이디어를 공유합니다.
관련 콘텐츠
- Visual Studio Code용 MSSQL 확장용 GitHub Copilot
- 빠른 시작: 채팅 및 인라인 GitHub Copilot 제안 사용(미리 보기)
- 빠른 시작: 코드 생성(미리 보기)
- 빠른 시작: 스키마 탐색기 및 디자이너 사용(미리 보기)
- 빠른 시작: 스마트 쿼리 작성기 사용(미리 보기)
- 빠른 시작: 쿼리 최적화 도우미(미리 보기)
- 빠른 시작: Security Analyzer(미리 보기)
- 빠른 시작: 지역화 및 서식 도우미(미리 보기)
- 빠른 시작: 테스트 및 모의를 위한 데이터 생성(미리 보기)
- 제한 사항 및 알려진 문제