Fox Data Service Request¶
Fox Data Service 는 Fox Query 수행에 필요한 정보를 담는 FoxDataRequest 혹은 FoxDataRequestCollection 객체를 입력으로 받아 쿼리를 수행하고 그 결과를 담는 FoxDataResponse 객체 혹은 FoxDataResponseCollection 객체를 반환합니다. Fox Data Service 가 쿼리 수행 뿐만 아니라 트랜잭션 처리, 쿼리 수행 성능 측정, 진단 정보 수집 등의 다양한 기능을 제공하기 때문에 FoxDataRequest 객체도 쿼리 수행 및 결과에 필요한 정보 뿐만아니라 트랜잭션, 성능 정보, 진단 정보를 위한 다양한 정보를 담을 수 있도록 구성되어 있습니다.
FoxDataRequest 객체¶
FoxDataRequest 객체는 Fox Data Service 가 쿼리를 수행하기 위해 필요한 정보를 담는 객체입니다. Fox Data Service 는 Fox Query 를 사용하여 쿼리를 수행하기 때문에 반드시 포함되어야 할 정보로서 쿼리 ID와 매개변수(필요한 경우)를 포함해야 합니다.
기본 속성들¶
-
QueryId속성Fox Data Service 가 수행할 Fox Query 를 식별하는 문자열입니다. FoxQuery Id 는 두 부분으로 나누어 지며 앞 부분은 FoxQuery 를 찾을
.foxml파일을 나타내며 뒷 부분은.foxml파일 내에서 FoxQuery 를 찾는데 사용됩니다. 예를 들어MyQuery라는 이름의 FoxQuery 가MyQueries.foxml파일에 정의되어 있다면 QueryId 는MyQueries:MyQuery가 됩니다. 상세한 내용은 Fox Query ID 상세 정보 를 참조하십시오.JSON 형태에서
QueryId속성은queryId속성으로 표현됩니다. -
Parameters속성Fox Query 를 수행할 때 필요한 매개변수들을 담는
FoxServiceParameterCollection타입의 컬렉션입니다.FoxServiceParameterCollection컬렉션은 기본적으로 딕셔너리와 동일하게 사용할 수 있으며 이외에도null값을DBNull.Value로 변경하는 기능 등도 포함하고 있습니다.JSON 형태에서
Parameters속성은parameters객체로 표현됩니다. -
DatabaseName속성접속할 데이터베이스를 나타내는 연결 문자열 이름 입니다. 이 속성이 지정되지 않거나
null값이 사용되면 Fox Data Service 는 서비스의 구성 파일로부터 디폴트 연결 문자열을 사용합니다.JSON 형태에서
DatabaseName속성은databaseName속성으로 표현됩니다. -
ThrowException속성쿼리 수행 중 오류 발생 시 예외를 전파할 것인지 여부를 나타냅니다. 이 속성이
true이면 서비스는FoxDataServiceException예외를 발생합니다. 이 속성이false이면 서비스는 예외를 발생시키지 않고 오류 정보를FoxDataResponse객체에 담아 반환합니다. 기본값은true입니다. Fox Data Service 의 예외 처리 방식에 대한 상세한 내용은 Fox Data Service 예외 처리 항목을 참조하십시오.JSON 형태에서
ThrowException속성은throwException속성으로 표현됩니다. -
CommandTimeout속성데이터 액세스 커맨드의 타임아웃(초)을 지정하는 정수형 옵션입니다. 지정하지 않으면 서비스의 연결 문자열에 설정된 값 혹은 해당 데이터 프로바이더
Command객체에 설정된 기본값이 사용됩니다.JSON 형태에서
CommandTimeout속성은commandTimeout속성으로 표현됩니다.
ExecuteMultiple 관련 속성들¶
-
Operation속성ExecuteMultiple메서드는 호출 시에 여러 개의FoxDataRequest객체를 포함하는FoxDataRequestCollection객체를 입력으로 받습니다. 이때 각FoxDataRequest객체가 수행할 작업(ExecuteDataSet,ExecuteNonQuery)을 지정하는FoxDataOperations열거 타입 속성입니다.FoxDataOperations열거 타입은 다음과 같은 값을 가집니다.None: 아무런 작업도 수행하지 않습니다.ExecuteDataSet: Fox Query 를 수행하고 결과를DataSet객체로 반환합니다.ExecuteNonQuery: Fox Query 를 수행하고 영향받은 행의 수를 반환합니다.ExecuteScalar: Fox Query 를 수행하고 결과의 첫 번째 행의 첫 번째 열 값을 반환합니다.SaveDataTable:DataSet속성에 지정된DataTable객체를 데이터베이스에 저장합니다.
ExecuteMultiple메서드는 컬렉션에 포함된 각FoxDataRequest객체의Operation속성 값에 따라 각 쿼리를 수행하며 그 결과를FoxDataResponse객체에 담고 다시 이 객체를FoxDataResponseCollection에 추가하여 반환합니다. 만약 개별FoxDataRequest객체의Operation속성 값이 지정되지 않은 경우,ExecuteMultiple메서드는FoxDataServiceException예외를 유발합니다.JSON 형태에서
Operation속성은operation속성으로 표현됩니다. 다음 예제는 두 개의 쿼리를 수행하는FoxDataRequestCollection객체를 JSON 형태로 표현한 것입니다.Note
FoxDataRequestCollection컬렉션이 JSON 으로 직렬화되면 각FoxDataRequest객체는items배열에 포함됩니다.FoxDataRequestCollection컬렉션의 인덱서 속성을 참고하십시요.
SaveDataTable 관련 속성들¶
-
DataSet속성SaveDataTable메서드에서 저장할 데이터 테이블을 담는DataSet객체입니다. 이 속성이 지시하는DataSet객체에 여러 개의DataTable객체가 포함되어 있으면 첫번째 데이터 테이블 만이 사용됩니다.Information
이 속성이
DataTable이 아닌DataSet인 이유는 JSON 이 사용되기 이전 버전의 NeoDEEX 는 XML 기반의 직렬화만 사용되었을 때,DataTable객체 단독으로 XML 직렬화가 불가능했기 때문입니다. 호환성 이유로FoxDataRequest객체는 여전히DataSet객체를 사용하고 있습니다.JSON 형태에서
DataSet속성은dataSet속성으로 표현됩니다. -
InsertQueryId,UpdateQueryId,DeleteQueryId속성이 속성들은
SaveDataTable메서드가 데이터 테이블의 각 행을 삽입, 수정, 삭제할 때 사용할 Fox Query 를 지정합니다.JSON 형태에서
InsertQueryId,UpdateQueryId,DeleteQueryId속성은 각각insertQueryId,updateQueryId,deleteQueryId속성으로 표현됩니다. -
SaveMode속성SaveDataTable메서드가 데이터 테이블의 각 행을 삽입, 수정, 삭제할 때 사용할 쿼리 수행 방식을 지정합니다. 이 속성은FoxDataSaveMode열거 타입을 사용하며 다음과 같은 값을 가질 수 있습니다. 디폴트 값은LoopUpdate입니다.LoopUpdate: 변경된 각 행을 삭제, 수정, 삽입된 행으로 그룹화하여 반복문을 사용하여 업데이트 합니다.BatchUpdate:DataAdapter.Update메서드를 사용하여 배치 업데이트를 수행합니다.GroupedBatchUpdate: 변경된 각 행을 삭제, 수정, 삽입된 행으로 그룹화하여DataAdapter.Update메서드를 사용하여 배치 업데이트를 수행합니다.
각 모드의 상세한 작동 방식 및 고려 사항은 기본 사용법 문서의
SaveDataTable메서드 항목을 참조하십시오.JSON 형태에서
SaveMode속성은saveMode속성으로 표현됩니다.
트랜잭션 관련 속성들¶
-
Transaction속성Transaction속성은FoxDataRequest객체가 수행하는 쿼리의 트랜잭션 모드를 지정합니다. 이 속성은FoxDataTransactions열거 타입을 사용하며 다음과 같은 값을 가질 수 있습니다. 디폴트 값은None입니다.None: 트랜잭션을 사용하지 않습니다.Local: 로컬 트랜잭션을 사용합니다.Distributed:System.Transactions.TransactionScope클래스를 사용하여 분산 트랜잭션을 사용합니다.
Fox Data Service 의 트랜잭션 처리 방식에 대한 상세한 내용은 Fox Data Service 고급 사용법 문서에서 트랜잭션 항목을 참조하십시오.
JSON 형태에서
Transaction속성은transaction속성으로 표현됩니다. -
TransactionTimeout속성트랜잭션에 사용할 트랜잭션 타임 아웃(초)을 지정하는 정수형 옵션입니다. 기본 값은 60초 입니다.
JSON 형태에서
TransactionTimeout속성은transactionTimeout속성으로 표현됩니다. -
TransactionIsolation속성트랜잭션에 사용할 트랜잭션 격리 수준을 지정하는
FoxDataTransactionIsolation열거 타입 속성입니다. 기본 값은ReadCommitted입니다.JSON 형태에서
TransactionIsolation속성은transactionIsolation속성으로 표현됩니다.
기타 속성¶
-
Diagnostics속성Fox Data Service 진단을 위한 플래그 속성입니다. 이 속성은
FoxDataRequestDiagnostics열거 타입을 사용하며 다음과 같은 값을 가질 수 있습니다.None: 진단 기능을 사용하지 않습니다. 디폴트 값입니다.LogId: Fox Data Service 가 쿼리를 수행할 때 생성하는 로그 항목들에 대해 생성하는 로그 ID 를 응답 객체의LogId속성에 반환하도록 요청합니다.ServiceLog: Fox Data Service 가 쿼리를 수행할 때 생성하는 로그 항목들을 응답 객체의ServiceLog속성에 반환하도록 요청합니다.PerformanceInfo: Fox Data Service 가 쿼리를 수행할 때 수집하는 성능 정보를 응답 객체의PerformanceInfo속성에 반환하도록 요청합니다.DbProfileInfo: Fox Data Service 가 쿼리를 수행할 때 수집하는 DB Profile 정보를 응답 객체의DbProfileInfo속성에 반환하도록 요청합니다.ForceRollback: Fox Data Service 가 쿼리를 수행할 때 트랜잭션을 강제로 롤백하도록 요청합니다. 이 옵션은 테스트 용도로만 사용해야 합니다.SuppressPerfLogWrite: Fox Data Service 가 쿼리를 수행할 때 수집하는 성능 정보를 서버 측 로그에 기록하지 않도록 요청합니다.SuppressDbProfileWrite: Fox Data Service 가 쿼리를 수행할 때 수집하는 DB 프로파일 정보를 서버 측 로그에 기록하지 않도록 요청합니다.
JSON 형태에서
Diagnostics속성은diagnostics속성으로 표현됩니다. -
ClientInfo속성ClientInfo속성은 클라이언트의 컴퓨터 이름, IP, MAC 주소 등을 포함하는FoxClientInfo객체를 담는 속성입니다. 이 속성은 Fox Web API 클라이언트가 서비스를 호출할 때 원격 서비스가 클라이언트에 대한 정보를 수집할 수 있도록 제공됩니다. 이 속성 값은 읽기 전용으로FoxDataRequest객체가 생성될 때FoxClientInfo.Instance싱글톤 정적 값으로 자동으로 채워집니다.다음은 Fox Data Service 가 생성하는 로그 항목에
ClientInfo속성으로부터 수집한 클라이언트 정보를 보여 줍니다.JSON 형태에서
ClientInfo속성은clientInfo속성으로 표현됩니다.```json hl_lines="3-7" { "queryId": "MyQueries:MyQuery", "clientInfo": { "machineName": "MYHOST", "ipAddress": "172.20.96.1", "macAddress": "0-15-5D-A3-23-4C" } }
-
SerializeClientInfo속성이 속성은 Fox Web API 클라이언트가 원격 서비스를 호출할 때
ClientInfo속성에 담긴 클라이언트 정보를 직렬화하여 전송할 것인지 여부를 나타냅니다. 기본값은true입니다. 이 속성이false이면ClientInfo속성에 담긴 클라이언트 정보는 직렬화되지 않고 원격 서비스에 전달되지 않습니다.Fox Web API 클라이언트 클래스인
FoxDataServiceClient클래스는SendClientInfo속성을 통해 이 속성 값을 변경합니다. 따라서FoxDataRequest객체의SerializeClientInfo속성은FoxDataServiceClient.SendClientInfo속성 값에 따라 자동으로 설정됩니다. 즉,SerializeClientInfo속성은 Fox Web API 클라이언트를 사용할 때에는 직접 설정할 필요가 없으며FoxDataServiceClient.SendClientInfo속성을 통해 간접적으로 설정하면 됩니다.이 속성은 Fox Web API 의 클라이언트에서만 참조되고 JSON 으로 직렬화되지 않습니다.
FoxDataRequestCollection 객체¶
FoxDataRequestCollection 객체는 여러 개의 FoxDataRequest 객체를 담는 리스트 스타일(IList<T>) 컬렉션입니다. Fox Data Service 의 ExecuteMultiple 메서드는 이 컬렉션을 입력으로 받아 여러 개의 쿼리를 한 번에 수행할 수 있습니다. FoxDataRequestCollection 객체는 다음과 같은 속성들을 통해 ExecuteMultiple 메서드 수행 시에 필요한 정보를 담을 수 있습니다.
컬렉션 기본 속성들¶
-
인덱서 속성
FoxDataRequestCollection객체는IList<T>인터페이스를 구현하고 있으므로 인덱서를 통해 컬렉션에 포함된FoxDataRequest객체를 접근할 수 있습니다.ExecuteMultiple메서드는 컬렉션에 포함된 각FoxDataRequest객체를 통해 순차적으로 쿼리를 수행하므로 컬렉션 내에서 각FoxDataRequest객체의 순서가 중요합니다. 따라서 컬렉션에 포함된 각FoxDataRequest객체는 쿼리를 수행할 순서대로 추가해야 합니다.FoxDataRequestCollection객체는 다른IList<T>컬렉션과 같이 JSON 형태에서items속성의 배열로 표현됩니다. -
DatabaseName속성DatabaseName속성은ExecuteMultiple메서드 수행 시에 데이터베이스에 어떻게 연결할 것인가를 결정하는 중요한 속성입니다. 이 속성에null이 아닌 값이 사용되면,ExecuteMultiple메서드는 주어진 이름의 연결 문자열을 사용하여 데이터베이스에 연결하고 이 연결을 통해 컬렉션에 포함된 모든FoxDataRequest객체의 쿼리를 수행하고 모든 쿼리의 수행을 종료한 후에 연결을 닫습니다. 개별FoxDataRequest객체의DatabaseName속성은 무시됩니다.다음 예제 코드는
ProductDB라는 이름의 연결 문자열을 사용하여 컬렉션에 포함된 두 개의 쿼리를 수행하는 예제입니다.Note
빈 문자열("") 혹은
String.Empty값이 사용되면 서비스의 구성 설정에서 디폴트 연결 문자열을 사용합니다. 상세한 내용은 Fox DB Access 의 연결 정보 선택 항목을 참고하십시오.만약 이 속성이 지정되지 않거나
null값이 사용되면ExecuteMultiple메서드는FoxDataRequestCollection에 포함된FoxDataRequest객체의DatabaseName속성 값을 사용하여 데이터베이스에 연결하고 쿼리를 수행하며 연결을 닫습니다. 즉,FoxDataRequest객체 별로 별도의 연결을 사용합니다.다음 예제 코드는 첫 번째 쿼리는
ProductDB라는 이름의 연결 문자열을 사용하고 두 번째 쿼리는StockDB라는 이름의 연결 문자열을 사용하여 각각 별도의 연결을 통해 쿼리를 수행하는 예제입니다.이 속성의 값은
ExecuteMultiple메서드가 트랜잭션 하에서 여러 개의 쿼리를 수행할 때에도 영향을 미칩니다. 로컬 트랜잭션을 사용하고자 한다면 반드시 이 속성에null이 아닌 값을 지정하여 컬렉션에 포함된 모든 쿼리가 동일한 연결을 사용하도록 해야 합니다. 한편 분산 트랜잭션은 여러 연결이 사용되어도 트랜잭션이 적용되므로 이 속성이 반드시 값을 지정할 필요는 없습니다.JSON 형태에서
DatabaseName속성은FoxDataRequest객체와 동일하게databaseName속성으로 표현됩니다. -
ThrowException속성예외가 발생했을 때
FoxDataServiceException예외를 발생시켜 호출자에게 전파할 것인지 여부를 나타냅니다. 기본값은true입니다.이 값이
false이고 예외가 발생하면ExecuteMultiple메서드는FoxDataResponseCollection객체의Success속성을false로 설정하고ErrorInfo속성에 예외 정보를 포함하여 반환합니다. 예외 정보를 담고 있는FoxServiceErrorInfo객체의Index속성은 컬렉션 내의 몇 번째 쿼리를 수행하는 도중에 예외가 발생했는지를 나타냅니다.예외 처리에 대한 상세한 내용은 Fox Data Service 예외 처리 항목을 참조하십시오.
JSON 형태에서
ThrowException속성은FoxDataRequest객체와 동일하게throwException속성으로 표현됩니다. -
ExecuteMultiple메서드 수행 중 예외가 발생한 경우, 나머지 쿼리들을 계속 수행할 것인지 여부를 나타냅니다. 기본값은false입니다. 상세한 내용은 Fox Data Service 예외 처리에서 Continue On Error 항목을 참조하십시오.JSON 형태에서
ContinueOnError속성은continueOnError속성으로 표현됩니다.
컬렉션 트랜잭션 관련 속성들¶
-
Transaction속성Transaction속성은FoxDataRequestCollection컬렉션에 포함된 모든FoxDataRequest객체가 수행하는 쿼리의 트랜잭션 모드를 지정합니다. 이 속성은FoxDataTransactions열거 타입을 사용하며 다음과 같은 값을 가질 수 있습니다. 디폴트 값은None입니다.None: 컬렉션 전체에 적용할 트랜잭션을 지정하지 않고, 개별FoxDataRequest객체의Transaction속성 값에 따라 트랜잭션을 적용합니다.Local: 컬렉션 전체에 로컬 트랜잭션을 사용합니다.Distributed: 컬렉션 전체에System.Transactions기반 분산 트랜잭션을 사용합니다.
Fox Data Service 의 트랜잭션 처리 방식에 대한 상세한 내용은 Fox Data Service 고급 사용법 문서에서 트랜잭션 항목을 참조하십시오.
JSON 형태에서
Transaction속성은FoxDataRequest객체와 동일하게transaction속성으로 표현됩니다. -
TransactionTimeout속성컬렉션 전체에 적용되는 트랜잭션을 사용하는 경우에만 적용되는 트랜잭션 타임 아웃(초)을 지정하는 정수형 옵션입니다. 기본 값은 60초 입니다. 다수의 쿼리를 수행하는 경우, 트랜잭션에 소요되는 시간이 길어질 수 있으므로 기본값을 조정해야 할 필요가 있습니다.
JSON 형태에서
TransactionTimeout속성은FoxDataRequest객체와 동일하게transactionTimeout속성으로 표현됩니다. -
TransactionIsolation속성컬렉션 전체에 적용되는 트랜잭션을 사용하는 경우에만 적용되는 트랜잭션 격리 수준을 지정하는
FoxDataTransactionIsolation열거 타입 속성입니다. 기본 값은ReadCommitted입니다.JSON 형태에서
TransactionIsolation속성은FoxDataRequest객체와 동일하게transactionIsolation속성으로 표현됩니다.
컬렉션 기타 속성¶
-
Diagnostics속성ExecuteMultiple메서드 수행 시에 적용되는 진단 플래그 속성입니다. 이 속성은FoxDataRequest객체의Diagnostics속성과 동일하게FoxDataRequestDiagnostics열거 타입을 사용하며 기본값은None입니다.이 속성에 사용할 수있는 값들은
FoxDataRequest객체의Diagnostics속성을 참고하십시요. 또한 이 속성을 통해 로그 ID, 요청 시 로그, 요청 시 성능 정보, 요청 시 DB 프로파일 정보 등을 사용하는 상세한 방법에 대해서는 Fox Data Service 고급 사용에서 로깅 항목, 성능 측정 항목을 참조하십시오.JSON 형태에서
Diagnostics속성은diagnostics속성으로 표현됩니다. -
ClientInfo속성FoxDataRequest객체의ClientInfo속성과 동일하게 클라이언트 정보를 담는FoxClientInfo객체를 포함하는 속성입니다. 상세한 내용은FoxDataRequest객체의ClientInfo속성을 참고하십시요. -
SerializeClientInfo속성FoxDataRequest객체의SerializeClientInfo속성과 동일하게 클라이언트 정보를 직렬화하여 전송할 것인지 여부를 나타내는 속성입니다. 상세한 내용은FoxDataRequest객체의SerializeClientInfo속성을 참고하십시요.
팩터리 클래스¶
FoxDataRequest 객체와 FoxDataRequestCollection 객체는 모두 생성자를 통해 생성할 수 있습니다. 하지만 때때로 생성자만으로는 충분하지 않은 경우가 있습니다. 예를 들어 클라이언트에서 전반적인 모든 쿼리 수행에 대해 성능 측정이 필요하거나, DB 프로파일 정보를 수집해야할 수도 있습니다. 이 때 수많은 클라이언트 코드들에서 두 객체의 생성 코드에 Diagnostics 속성을 일일이 설정하는 것은 번거롭고 실수할 가능성이 있습니다.
이러한 상황에 대비하기 위해 Fox Data Service 는 FoxDataRequestFactory 클래스와 FoxDataRequestCollectionFactory 클래스를 제공합니다. 이 두 클래스에서 파생하여 Create 메서드를 오버라이드 하고 이 팩터리 객체를 FoxDataRequest.Factory 혹은 FoxDataRequestCollection.Factory 속성에 등록할 수 있습니다. 이제 FoxDataRequest.Create 메서드 혹은 FoxDataRequestCollection.Create 메서드를 사용하면 이들 팩터리 클래스를 통해 객체를 생성하게 됩니다.
다음은 FoxDataRequestFactory 클래스를 상속하여 Create 메서드를 오버라이드 하는 간단한 FoxDataRequest 팩터리를 구현한 예제입니다. SimpleRequestFactory 클래스는 진단 모드를 설정하여 팩터리를 통해 생성되는 모든 FoxDataRequest 객체에 ServiceLog, PerformanceInfo 등의 진단 플래그를 설정할 수 있도록 구성되어 있습니다.
FoxDataRequestFactory 클래스에서 파생된 팩터리는 FoxDataRequest.Factory 속성에 등록하여 FoxDataRequest.Create 메서드를 통해 생성되는 모든 요청 객체에 다음과 같이 일괄적으로 적용할 수 있습니다.
Note
물론, 다른 팩터리 패턴을 사용하여 FoxDataRequest 객체를 생성하도록 구현할 수도 있습니다. 하지만 FoxDataRequest.Create 메서드는 Fox Web API 클라이언트에서 FoxDataRequest 객체를 생성할 때 내부적으로 사용하므로 이 메서드를 통해 생성되는 모든 요청 객체에 일괄적으로 적용할 수 있습니다. 예를 들어, Fox Web API 클라이언트의 ExecuteDataSet, ExecuteNonQuery 등 메서드는 FoxDataRequest 객체 외에도 쿼리 ID, 데이터베이스 이름, 파라미터 등을 인자로 받아 내부적으로는 FoxDataRequest.Create 메서드를 호출하여 요청 객체를 생성합니다.
Summary¶
FoxDataRequest 객체와 FoxDataRequestCollection 객체는 Fox Data Service 를 호출하기 위해 다양한 정보를 포함합니다. 핵심적인 Fox Query ID, 데이터베이스 이름, 파라미터, 데이터셋 등의 정보를 포함하며, 필요에 따라 진단 정보도 설정할 수 있습니다. 이러한 객체들은 생성자뿐만 아니라 팩터리 클래스를 통해서도 생성할 수 있으며, 팩터리를 사용하면 일관된 방식으로 객체를 초기화할 수 있습니다.