서버는 이전 블로그에서 생성한 서버를 사용한다.
1. 테이블 생성
use tempdb
go
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[TodoItem](
id INT NOT NULL PRIMARY KEY,
name VARCHAR(50) NULL,
isComplete BIT NULL
)
TodoItem 테이블을 생성한다.
sp_configure 'show advanced options',1 ; --SQL 서버의 모든 환경 구성 옵션을 사용으로 설정
GO
RECONFIGURE ;
GO
sp_configure 'Ole Automation Procedures', 1 -- OLE 자동화 저장 프로시저 엑세스 활성
RECONFIGURE;
GO
위의 쿼리로 OLE Automation Procedures 기능을 활성화한다.
OLE Automation Procedures는 SQL Server에서 파일 시스템에 접근해서 파일을 읽거나 쓸 수 있도록 하며, HTTP 요청을 통해 데이터를 가져오거나 전송할 수 있도록 한다.
2. POST 요청 프로시저
CREATE PROCEDURE [dbo].[PostTodoitem]
@name nvarchar(20),
@isComplete bit
AS
BEGIN
DECLARE @contentType NVARCHAR(64); -- 요청할 HTTP 서버에 보낼 데이터의 콘텐트 타입을 정의하는 변수
DECLARE @postData NVARCHAR(2000); -- 실제 보내는 데이터를 담을 변수
DECLARE @responseText NVARCHAR(2000); -- HTTP 서버의 처리 결과를 응답하는 변수
DECLARE @responseXML NVARCHAR(2000); -- 데이터가 XML 형식일 경우 사용
DECLARE @ret INT; -- OLE 자동화 프로시저 호출 결과 리턴 값을 담을 변수 (0 : 성공, 그 외 실패)
DECLARE @status NVARCHAR(32); -- 요청 서버의 상태 값을 담는 변수
DECLARE @statusText NVARCHAR(32); -- 요청 서버의 상태 값의 상세 내용을 담는 변수
DECLARE @token INT; -- OLE 자동화 프로시저 개체 생성 토큰 값을 담을 변수
DECLARE @url NVARCHAR(256); -- HTTP 서버 URL 변수
DECLARE @sComplete NVARCHAR(10);
SET NOCOUNT ON;
IF(@isComplete = 0)
SET @sComplete = 'false'
ELSE
SET @sComplete = 'true'
BEGIN TRY
SET @contentType = 'application/json'; -- 컨텐트 타입을 JSON으로 설정
SET @postData = '{ "name":"' + @name + '", "isComplete":' + @sComplete + '}'; -- 전송할 바디데이터
SET @url = 'http://localhost:5000/api/TodoItems'; -- API URL
EXEC @ret = sp_OACreate 'MSXML2.ServerXMLHTTP',@token OUT; -- MSXML2.ServerXMLHTTP 웹 페이지를 읽는 XML 파서 개체 형식의 OLE 인스턴스 개체 생성(출력된 토큰값으로 사용)
IF @ret = 0 -- OLE 인스턴스 개체 생성 결과가 정상일 경우 실행
BEGIN
--HTTP 서버 요청
EXEC @ret = sp_OAMethod @token, 'open',NULL,'POST',@url,'false' -- 서버와의 통신 방식 정의
EXEC @ret = sp_OAMethod @token, 'setRequestHeader',NULL,'Content-type', @contentType; -- 데이터 요청 헤더 정의
EXEC @ret = sp_OAMethod @token, 'setTimeouts', NULL,1000,1000,1000,1000; -- 연결 유지 시간 정의
EXEC @ret = sp_OAMethod @token, 'send', NULL, @postData; -- 데이터 전송
-- 응답 결과 처리
EXEC @ret = sp_OAGetProperty @token, 'status',@status OUT; -- 서버 상태
EXEC @ret = sp_OAGetProperty @token, 'statusText',@statusText OUT; -- 서버 상태 내용
EXEC @ret = sp_OAGetProperty @token, 'responseText', @responseText OUT; -- 응답 내용
-- 응답 결과 확인
PRINT 'Status: ' + @status + '(' + @statusText + ')'; -- OLE 개체의 속성 상태와 내용을 출력
PRINT 'Response Text: ' + @responseText; -- 응답 결과 출력
-- 해당 토큰 값의 OLE 인스턴스 개체 소멸(소켓 클로즈)
EXEC @ret = sp_OADestroy @token;
END
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE()
END CATCH
END
EXEC PostTodoitem 'test3', 0
프로시저를 실행한다.

결과에서 상태값과 응답된 바디 데이터를 확인할 수 있다.
3. GET 요청 프로시저
USE tempdb
CREATE PROCEDURE [dbo].[GetTodoitem]
AS
BEGIN
DECLARE @contentType NVARCHAR(64); -- 요청할 HTTP 서버에 보낼 데이터의 콘텐트 타입 정의하는 변수
DECLARE @responseText NVARCHAR(2000); -- HTTP 서버의 처리 결과를 응답받을 변수
DECLARE @responseXML NVARCHAR(2000); -- 응답받을 데이터가 XML일 경우 사용
DECLARE @ret INT; -- OLE 자 동화 프로시저 호출 결과 리턴 값을 담을 변수 (0 : 성공 , 그 외는 실패)
DECLARE @status NVARCHAR(32); -- 요청 서버의 상태 값을 담는 변수
DECLARE @statusText NVARCHAR(32); -- 요청 서버의 상태 값의 상세 내용을 담는 변수
DECLARE @token INT; -- OLE 자동화 프로시저 개체 생성 토큰 값을 담을 변수
DECLARE @url NVARCHAR(256); -- HTTP 서버 URL 변수
DECLARE @isCompllete NVARCHAR(10);
SET NOCOUNT ON
BEGIN TRY
SET @contentType = 'application/json' -- 컨텐트 타입은 JSON 설정
SET @url = 'http://localhost:5000/api/TodoItems' -- API URL
-- 커넥션 생성
EXEC @ret = sp_OACreate 'MSXML2.ServerXMLHTTP',@token OUT; -- MSXML2.ServerXMLHTTP 웹페이지를 읽는 XML 파서 개체 형식의 OLE 인스턴스 개체 생성(출력된 토큰값으로 사용)
IF @ret = 0 -- OLE 인스턴스 개체 생성 결과가 정상일 경우 실행
BEGIN
-- HTTP 서버 요청
EXEC @ret = sp_OAMethod @token, 'open',NULL,'GET',@url,'false'; -- 서버와의 통신 방식 설정
EXEC @ret = sp_OAMethod @token, 'setRequestHeader',NULL,'Content-type',@contentType; -- 데이터 요청 헤더 정의
EXEC @ret = sp_OAMethod @token, 'setTimeouts',NULL,1000,1000,1000,1000; -- 연결 유지 시간 정의
EXEC @ret = sp_OAMethod @token, 'send'; -- 데이터 전송
-- 응답 결과 처리
EXEC @ret = sp_OAGetProperty @token, 'status',@status OUT; -- 서버 상태
EXEC @ret = sp_OAGetProperty @token, 'statusText', @statusText OUT; -- 서버 상태 내용
EXEC @ret = sp_OAGetProperty @token, 'responseText',@responseText OUT; -- 응답 내용
-- 응답 결과 확인
PRINT 'Status :'+ @status + '(' + @statusText + ')'; -- OLE 개체의 속성 상태와 내용을 출력
PRINT 'Response Text' + @responseText; -- 응답 결과 출력
-- 해당 토근값의 OLE 인스턴스 객체 소멸(소켓 클로즈)
EXEC @ret = sp_OADestroy @token
END
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE()
END CATCH
END
EXEC GetTodoitem

POST 요청으로 입력된 데이터를 확인할 수 있다.
Share article