서버는 이전 블로그에서 생성한 서버를 사용한다.
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