Azure SQL Database에서 Azure OpenAI 호출 설정 절차서
요약
본 문서는 Azure SQL Database 환경에서 T-SQL을 사용하여 Azure OpenAI의 Chat Completions API를 호출하는 구체적인 절차와 설정 방법을 안내합니다. 사용자 데이터베이스에 자격 증명 및 권한을 설정하고, 외부 REST 연결 대상 허용 목록과 네트워크 경로 검증이 필수적입니다.
핵심 포인트
- Azure SQL Database에서 T-SQL로 Azure OpenAI API 호출 가능
- 외부 REST 연결 시 *.openai.azure.com 도메인 확인 필요
- SQL Server 2025와 Azure SQL Database의 설정 차이점 존재
- SSMS 연결과 DB->OpenAI 연결은 별개 경로 검증 필수
SQL Beginners Day T-SQL에서 LLM을 호출해 보기 2
작성일 2026년 10월 7일 / 주요 절차 API 키 인증
본 문서는 Azure SQL Database의 사용자 데이터베이스에 자격 증명과 권한을 설정하고, T-SQL에서 Azure OpenAI의 Chat Completions API로 짧은 질문을 보내는 절차를 보여줍니다. SQL Server 2025에서는 다른 설정이 필요하며, 각 절차의 주의사항과 마지막 비교표에 기재합니다.
연결 확인 완료 조건은 HTTP 200, 호출 반환값 0, 공백이 아닌 답변을 얻는 것입니다. 생성된 SQL의 자동 실행은 본 문서의 대상이 아닙니다. 실제 Azure 환경에 대한 연결 검증은 미실시입니다.
| 항목 | 준비할 내용 |
|---|---|
| Azure SQL Database | 검증용 사용자 데이터베이스. 예 LlmSqlDemo |
| ... | |
| 데이터베이스가 생성되지 않았다면, Azure 포털에서 SQL Database를 생성하고 논리 서버, 인증, 연결원으로부터의 네트워크 경로를 설정해야 합니다. API 키를 사용하는 경우, Azure OpenAI 측에서 키 인증이 활성화되어 있는지 확인하는 것도 필요합니다. |
Azure OpenAI의 배포 화면에서 리소스의 엔드포인트, 배포명(deployment name), API 키를 가져옵니다. 본 문서에서는 다음 URL 형식을 사용합니다. 배포명은 model에 전달됩니다.
리소스 URL
호출 URL
...
v1 API에서는 날짜 형식의 api-version을 붙이지 않습니다. model에는 Azure에서 지정한 배포명을 명시합니다. Foundry 화면에서 가져온 URL이라도 실제 호스트명과 API 종류를 확인해야 합니다.[2]
Azure SQL Database에는 외부 REST 연결 대상에 대한 허용 목록이 있습니다. *.openai.azure.com은 대상이지만, api.openai.com은 대상이 아닙니다. Foundry라는 제품명이 아니라 호출 대상 도메인으로 판단합니다. 대상이 아닌 API는 허용 대상의 Azure API Management 등을 거치도록 설계가 필요합니다.[1]
SQL Server 2025와의 차이점 공식에 따라 연결 대상 목록은 Azure SQL Database와 Managed Instance에 적용됩니다. SQL Server 2025에는 이 Azure 서비스의 허용 목록이 적용되지 않습니다. HTTPS, 인증, 네트워크 도달 가능성 조건이 필요합니다.
SSMS에서 DB로의 연결과, DB에서 Azure OpenAI로의 연결은 별개의 경로입니다. PC에서 Azure OpenAI를 호출할 수 있어도, DB에서 호출할 수 있다는 증거가 되지는 않습니다. SQL 측의 연결원 IP 규칙, OpenAI 측의 네트워크 제한을 각각 확인해야 합니다.
본 문서의 최소 데모는 도달 가능한 Public HTTPS 엔드포인트를 전제로 합니다. 기존 Private Endpoint 구성이나 선택된 네트워크 구성을 변경하지 않고, DB로부터의 경로를 별도로 검증합니다. 제한된 환경에서는 API Management 등의 중계 구성을 설계합니다.
SSMS의 연결 속성에서 LlmSqlDemo를 지정하고 새 쿼리를 엽니다. 관리자로서 다음을 실행하여 연결 대상을 확인합니다.[4]
SELECT DB_NAME() AS DatabaseName,
USER_NAME() AS DatabaseUser,
@@VERSION AS EngineVersion;
기대 결과는 DatabaseName이 LlmSqlDemo입니다. Azure SQL Database에서는 USE로 다른 DB로 전환하지 않고, 대상 DB에 다시 연결합니다.
SQL Server 2025와의 차이점
SQL Server 2025에서는 USE LlmSqlDemo로 DB를 전환할 수 있습니다. Azure SQL Database용 절차에는 USE master나 서버 설정을 섞지 않습니다.
Azure SQL Database에서 외부 REST 기능은 기본적으로 활성화되어 있어, sp_configure를 통한 활성화는 필요하지 않습니다.[1]
SQL Server 2025와의 차이점
SQL Server 2025에서는 기본적으로 비활성화되어 있습니다. 관리자가 다음을 실행합니다. Azure SQL Database에서는 실행하지 않습니다.
EXEC sys.sp_configure 'external rest endpoint enabled', 1;
RECONFIGURE WITH OVERRIDE;
이후는 대상 사용자 데이터베이스에 연결한 설정 담당자가 실행합니다. DB 마스터 키는 자격 증명의 SECRET을 암호화합니다. 마스터 키의 보호 비밀번호와 Azure OpenAI의 API 키는 별개입니다.[3]
-- 마스터 키의 유무를 확인
SELECT name FROM sys.symmetric_keys
WHERE name = N'##MS_DatabaseMasterKey##';
...
Azure SQL Database는 자격 증명(credential) 생성 시 DMK(Database Master Key)를 자동으로 생성할 수 있습니다. 본 문서는 키의 역할을 명확히 하기 위해 존재 확인과 명시 생성을 채택합니다. 기존 키는 삭제하거나 재작성하지 않습니다.[3]
HTTPEndpointHeaders 방식에서는 자격 증명 이름을 유효한 URL로 사용합니다. 호출 URL, 스키마(scheme), 호스트 이름이 일치해야 하며, 경로는 같거나 상위여야 합니다. 쿼리 문자열은 자격 증명에 포함하지 않습니다. Azure SQL Database의 경우 도메인도 허용 목록 대상이어야 합니다.[1]
예시의 YOUR-RESOURCE는 생성 시, 권한 부여 시, 호출 시 모든 위치에서 동일한 값으로 대체합니다. SECRET은 헤더 이름 api-key를 포함하는 플랫(flat) JSON입니다. 실제 키를 문서, Git, 화면 공유용 SQL에 남기지 않습니다.
자격 증명 생성은 관리자가, API 호출은 전용 사용자가 역할을 분담하도록 합니다. 대상 DB에 기존 사용자가 있는 경우 그 이름을 이용합니다. 아래는 검증용 포함 사용자(包含ユーザー)를 SQL 인증으로 생성하는 예시입니다. Entra 인증만 사용하는 환경에서는 기존의 Entra 사용자를 사용합니다.
-- 관리자가 대상 DB에서 실행. 미생성 시에만.
CREATE USER [LlmDemoUser]
WITH PASSWORD = 'REPLACE_WITH_STRONG_USER_PASSWORD';
...
CREATE USER는 재실행할 필요가 없습니다. API를 호출하기만 한다면, 업무 테이블의 SELECT 권한이나 db_owner는 부여하지 않습니다. REFERENCES는 이 자격 증명을 이용하는 권한이며, API 키를 표시하는 권한이 아닙니다.[1]
대상 DB를 지정하고 LlmDemoUser로 새 연결을 엽니다. 관리자의 쿼리 화면에서는 실행 사용자의 권한 확인이 되지 않습니다.
SELECT DB_NAME() AS DatabaseName,
USER_NAME() AS DatabaseUser,
HAS_PERMS_BY_NAME(DB_NAME(), 'DATABASE',
...
기대 결과는 DatabaseUser가 LlmDemoUser이고, CanCallRest와 CanUseCredential이 모두 1인 것입니다.
SQL Server 2025와의 차이점은 외부 REST 실행 권한과 자격 증명의 REFERENCES는 공통적입니다. SQL Server 2025에서는 사용자의 연결에 서버 로그인 생성이나 매핑을 사용하는 구성도 있습니다.
-- 키를 로테이션(rotation)했을 경우. 관리자가 실행.
ALTER DATABASE SCOPED CREDENTIAL
[https://YOUR-RESOURCE.openai.azure.com]
...
같은 이름의 자격 증명이 이미 있는 경우에는 CREATE를 반복하지 않고 내용을 확인하여 ALTER를 사용합니다.
실행 사용자 연결로 다음을 실행합니다. YOUR-RESOURCE와 YOUR_DEPLOYMENT를 대체합니다. temperature는 모델 간 호환성을 위해 지정하지 않습니다. 첫 시도에는 재시도가 없으므로 오류를 관찰합니다.
DECLARE @url nvarchar(4000) =
N'https://YOUR-RESOURCE.openai.azure.com/openai/v1/chat/completions';
DECLARE @response nvarchar(max), @rc int;
...
정상일 때는 ReturnCode가 0이고, HttpCode가 200이며, Answer에 답변이 있습니다. finish_reason도 확인합니다. length나 content_filter인 경우 잘렸거나 제한된 답변으로 처리합니다. 예외 발생 시에는 HTTP 결과와 별개로 SQL 오류의 전문(全文)을 확인합니다.
응답 본체는 $result 아래에 있습니다. 장문(長文)을 추출하기 위해 OPENJSON의 nvarchar(max)를 사용합니다. 일반적인 JSON_VALUE는 4,000자를 초과하는 값에 적합하지 않습니다.[6]
| 증상 | 확인 위치 |
|---|---|
| DB에 연결할 수 없음 | DB 이름, 인증, 연결 측의 SQL 방화벽 규칙 |
| ... | |
| RawResponse, ReturnCode, SQL 오류를 저장합니다. API 키는 출력하지 않습니다. API 쪽을 다른 클라이언트로 확인할 경우에도 URL과 요청 JSON을 맞추어야 합니다. |
재시도(retry)를 추가하려면 @retry_count를 작은 값으로 설정합니다. @timeout은 재시도를 포함한 누적 시간입니다. 외부 API 호출을 트랜잭션 내부로 넣지 마세요.
보충 절차. API 키 방식과 혼합하지 말고, 최초 연결 완료 후에 전환합니다. Azure SQL 논리 서버 ID를 활성화하고, 사용되는 ID에 Azure OpenAI 리소스의 Cognitive Services OpenAI User 역할을 부여합니다.[1]
-- 관리자가 기존 API 키 자격 증명을 변경한다.
ALTER DATABASE SCOPED CREDENTIAL
[https://YOUR-RESOURCE.openai.azure.com]
...
호출 측의 @credential과 URL은 유지합니다. 사용자 할당 ID가 있는 경우, 논리 서버의 기본(primary) ID 설정을 확인합니다. ID 권한 반영 후, 동일한 연결 SQL을 다시 실행합니다.
SQL Server 2025와의 차이점. SQL Server 2025에서는 Azure Arc 등의 ID 구성에 더해 allow server scoped db credentials를 활성화해야 합니다. Azure SQL Database에는 이 sp_configure 설정이 포함되어 있지 않습니다.
| 항목 | Azure SQL Database | SQL Server 2025 |
|---|---|---|
| 외부 REST 활성화 | 기본적으로 활성화됨 | 기본적으로 비활성화됨. sp_configure로 활성화 |
| ... | ||
| 대상 DB에 연결하고, 자격 증명 이름과 URL의 일치 여부, 전용 사용자 권한, HTTP 200 및 응답 수신을 확인합니다. 데모 자료에서 실제 키와 비밀번호를 제거합니다. 운영 환경 설계는 전송 데이터 범위, API 비용, 감사(audit), 동시성, 장애 시 동작 등을 별도로 결정해야 합니다. |
사양 확인일 2026년 10월 7일. 네트워크 제한이나 서비스 사양은 실제 환경에서 발표 전에 확인해야 합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기