LOGIN • JOININ

QUERY SYSTEM

1... Query System이란...

MSSQL, MySQL 등과 같은 RDBMS나 NoSQL, Redis 같은 외부에 질의(Query)를 해와야 하는 경우가 있습니다.

혹은 HTTP를 사용하는 웹서버를 통해 인증을 해야 하는 경우도 있습니다.

이런 외부 서버나 장치들에 쿼리를 해오는 시스템이 바로 Query System입니다.



2... Querier와 Query

쿼리를 처리하는 IQuerier와 쿼리의 요청과 쿼리 결과를 담을 IQuery 객체로 나뉘어집니다.

IQuerier는 효율적인 처리를 위해 요청하려는 대상(DB 혹은 HTTP 서버)와 다중 연결을 하여 세션풀을 구성합니다.

쿼리의 내용을 담은 IQuery 객체의 요청가 IQuerier에 쿼리의 처리를 요청하면 세션풀에서 세션을 할당받아 처리를 해줍니다.

만약 남은 세션이 없다면 해당 IQuery 객체를 큐잉했다 세션이 생기면 큐잉된 IQuery를 꺼내 처리해줍니다.

Querier.png




3... 동기식 쿼리와 비동기식 쿼리

쿼리는 크게 동기식 쿼리와 비동기식 쿼리가 있습니다. 


① 동기식 쿼리 

동기식 쿼리는 RequestQuery(...)함수를 사용해 쿼리를 요청합니다.

동기식 쿼리는 쿼리의 요청 결과가 돌아 올때까지 함수가 블록킹되어 진행되지 않습니다.

따라서 완료후 결과를 받아 다른 처리를 해야할 경우 많이 사용됩니다.

하지만 성능에는 악영향을 미칩니다.


② 비동기식 쿼리

비동기식 쿼리는 PostRequestQuery(...)함수를 사용해 쿼리를 요청합니다.

쿼리를 요청하면 완료되지 않아도 바로 함수는 리턴되며 진행됩니다.

따라서 쿼리 결과의 처리는 쿼리가 완료후 호출되는 함수를 정의해 처리하도록 해줘야 합니다.

비동기식 쿼리는 함수를 블록킹하지 않기 때문에 성능에 있어 동기식 쿼리에 더 유리할 수 있습니다.


4... 일괄쿼리와 동시쿼리

비동기식 쿼리를 효율적으로 활용하도록 하기 위한 일괄쿼리(Batch Query)와 동시쿼리(Concurrent Query)도 있습니다.

여러 개의 비동기식 쿼리를 처리할 때 각 쿼리를 차례로 수행하게 하는 것을  '일괄 쿼리'라고 하며

한꺼번에 쿼리를 요청하는 것을 '동시 쿼리'라고 합니다.


CGCII에서는 다양한 '일괄쿼리' 혹은 '동시쿼리'를 위한 쿼리 객체를 지원합니다.

'일괄쿼리' 처리든 '동시쿼리' 든  모두 요청한 모든 쿼리가 완료되어야 쿼리가 완료되는 것입니다.



BatchQuery.png



'일괄쿼리' 혹은 '동시쿼리' 가 완료되었을 때 까지 블록킹하는 것, 완료되었을 때 함수를 호출해주는 것, 완료되었을 때 메시지를 쏘아주는 것 등 다양한 종류의 '일괄쿼리' 혹은 '동시쿼리' 클래스들을 지원합니다.



5... 외부 트랙젝션

프로시져 내부가 아닌 외부의 쿼리 처리과정에서 트랜잭션처리를 위원합니다.

하지만 트랜잭션의 경우 잘못 처리할 경우 DB에 심각한 문제를 발생시킬 수 있으니 되도록이면 프로시져 내에서 트랜잭션을 사용하고 그 트랜잭션을 호출하는 편이 안전합니다.

외부 트랜잭션은 꼭 필요할 경우에만 사용하시길 권장합니다.


6... 다중 결과

한번의 프로시져 호출이 여러 결과를 포함하는 경우가 있습니다.

예를 들어 프로시져 내부에 'SELECT'문을 여러 번 사용한다면 그 프로시져를 호출한다면 여러 번의 'SELECT'결과물을 돌려주게 될 것입니다.

이때 여러 결과를 처리할 수 있도록 지원해줍니다.
(Tutorial 4. SQL Multiple Result 참조)


7... 튜토리얼

Tutorial 1. Simple SQL Query (1)

Tutorial 2. Simple SQL Query (2)

Tutorial 3. SQL AllocQuery

Tutorial 4. SQL Multiple Result

Tutorial 5. Simple REDIS Query

Tutorial 6. Simple HTTP Query