Fox Data Service Overview¶
Fox Data Service 는 데이터액세스 계층의 불필요한 코드 작성을 최소화하기 위한 서비스 입니다. 특히 Fox Query 와 같은 SQL 매퍼를 사용하는 경우, 데이터액세스 계층의 코드는 단순히 매개변수 매핑하는 지루하고 귀찮은 코드가 되기 일쑤입니다. Fox Data Service 는 이러한 문제점을 해결하기 위해 코드를 작성하지 않고도 Fox Query 의 Foxml 파일을 사용하여 데이터베이스를 액세스할 수 있도록 하는 기능을 제공합니다.
서비스 개념¶
클라이언트는 호출할 쿼리의 ID 와 매개변수를 FoxDataRequest 객체에 담아 FoxDataService 의 ExecuteXXX 시리즈 메서드를 호출할 수 있습니다. 다음 코드는 ASP.NET Core Razor 페이지에서 Fox Data Service 를 사용하여 orders.foxml 파일의 get_all_orders_with_details 쿼리를 호출하여 결과를 HTML 로 렌더링하는 예를 보여줍니다.
위 예제처럼 Razor 페이지에서 Fox Data Service 를 직접 호출하는 코드의 장점은 크지 않습니다. 직접 FoxDbAccess 클래스를 통해 Fox Query 를 호출하는 코드에 비해 Fox Data Service 를 사용하는 코드가 더 효율적이거나 간결하다고 보기 어렵기 때문입니다.
하지만 Fox Web API 를 사용하여 원격 클라이언트에서 Fox Data Service 를 호출하는 경우, Fox Data Service 의 장점이 더욱 부각됩니다. 단순 조회와 같은 쿼리는 서버 측에서 코드를 전혀 작성하지 않고 SQL 문장이 담긴 Foxml 파일만 작성하여 원격 클라이언트에서 호출할 수 있습니다.
다음 JavaScript 코드는 FoxDataRequest 객체를 JSON 형태로 HTTP POST 요청의 본문에 담아 Fox Web API 를 통해 Fox Data Service 를 호출하고 그 결과를 <tbody>에 렌더링하는 예를 보여줍니다. 서버 측에 Fox Data Service 가 구성되고 .foxml 파일만 있다면 서버 측 코드 없이 클라이언트에서 데이터를 액세스할 수 있습니다.
다중 쿼리 수행¶
Fox Data Service 는 단일 쿼리 수행 뿐만 아니라 여러 쿼리를 한 번에 수행하는 기능도 제공합니다. 클라이언트는 FoxDataRequest 객체 컬렉션(FoxDataRequestCollection 객체)을 ExecuteMultiple 메서드에 전달하여 여러 쿼리를 한 번에 수행할 수 있습니다. ExecuteMultiple 메서드는 브라우저나 데스크톱 앱과 같은 원격 클라이언트와의 네트워크 왕복 횟수를 줄이는 데 유용합니다. 상세한 내용은 FoxDataService 클래스의 ExecuteMutiple 메서드 관련 항목 을 참조 하십시요.
트랜잭션 지원¶
Fox Data Service 는 Fox Query 의 쿼리를 수행할 때 트랜잭션 역시 지원합니다. FoxDataRequest 객체의 Transactsion 속성에 FoxDataTransactions 열거 타입의 값들 중 Local 혹은 Distributed 값을 설정하면 FoxDataService 클래스는 트랜잭션을 시작하며 쿼리가 트랜잭션에 참여하도록 작동합니다.
Transaction 속성은 다중 쿼리를 수행하는 ExecuteMultiple 메서드와 함께 사용할 때 특히 유용합니다. ExecuteMultiple 메서드에 전달된 여러 쿼리가 모두 트랜잭션에 참여하도록 하여, 여러 쿼리를 하나의 트랜잭션으로 묶어서 실행할 수 있습니다. 상세한 내용은 FoxDataService 클래스의 트랜잭션 관련 항목 을 참조 하십시요.
다음 코드는 2개의 쿼리를 하나의 트랜잭션으로 수행하도록 ExecuteMultiple 메서드를 사용하는 예를 보여줍니다.
진단 및 로깅¶
Fox Data Service 는 코드를 작성하지 않고 쿼리를 수행하기 때문에 쿼리 수행 시 발생하는 문제를 파악하고 해결하는데 어려움을 겪을 수 있습니다. Fox Data Service 는 이러한 문제를 해결하기 위해 다양한 진단 및 로깅 기능을 제공합니다.
FoxDataService 클래스는 쿼리를 수행하는데 소요된 시간을 응답에 포함시켜 반환하며 로그에도 기록합니다. 쿼리 수행 시 발생하는 예외는 상세한 예외 메시지와 함께 로그에 기록되며 클라이언트게게도 반환될 수 있습니다. 대규모 앱에서 대량의 로그에서 문제를 일으킨 호출에 대한 로그를 손쉽게 찾을 수 있도록 로그 ID 기능을 포함하며 이러한 모든 진단 기능은 선택적으로 켜거나 끌 수 있습니다. 상세한 내용은 FoxDataService 클래스의 로깅 관련 항목 을 참조 하십시요.
구성 설정¶
Fox Data Service 는 구성 설정을 통해 작동 방식을 제어할 수 있습니다. 예를 들어, 진단 및 로깅 기능을 켜거나 끄는 설정, 쿼리 수행 시 DB 프로파일 정보를 반환하는 설정, 성능 로그를 기록하는 설정 등이 있습니다. 다음은 진단 기능을 활성화하며 로그를 기록하는 로거의 이름을 지정하는 구성 설정의 예를 보여 줍니다.
Fox Data Service 구성 설정에 대한 상세한 내용은 FoxDataService 클래스의 구성 설정 항목을 참조 하십시요.

