상기 목적을 달성하기 위하여 본 발명은, 유무선 통신망을 통해 접속된 서버와 하나 이상의 클라이언트 사이의 데이터 통신을 위한 시스템 서버에 있어서, 클라이언트와의 접속을 개시하거나 중단하는 접속 모듈; 클라이언트와 데이터를 송수신하는 데이터 송수신 모듈; 쓰레드를 생성하고 할당하는 쓰레드 관리 모듈; 현재 접속 중인 클라이언트들 각각에 부여된 세션 아이디(ID)와, 해당 클라이언트가 처리를 요청한 피처리 데이터의 처리 상태를 저장하는 세션 정보 데이터베이스; 및 상기 세션 정보 데이터베이스에 저장된 피처리 데이터의 처리 상태를 갱신하고, 상기 피처리 데이터의 처리 상태를 기초로 데이터 처리가 수행되고 있지 않다고 판단되는 경우에는 해당 세션을 반납하는 세션 관리 모듈을 포함하는 시스템 서버를 제공한다.
또한, 본 발명은 유무선 통신망을 통해 접속된 서버와 하나 이상의 클라이언트 사이의 데이터 처리 방법에 있어서, (1) 클라이언트에 대한 세션을 생성하고 쓰레드를 할당하는 단계; (2) 상기 클라이언트로부터 데이터 처리 요청을 수신하는 단계; (3) 상기 클라이언트의 세션 정보를 처리 대기로서 저장하는 단계; (4) 상기 클라이언트가 처리를 요청한 피처리 데이터의 처리를 개시하는 단계; (5) 상기 클라이언트의 세션 정보를 처리 중으로서 갱신하여 저장하는 단계; (6) 상기 피처리 데이터의 처리가 종료된 경우, 상기 클라이언트의 세션 정보를 처리 완료로서 갱신하여 저장하는 단계; (7) 상기 세션 정보를 기초로 해당 세션에 있어서 데이터 처리에 소요되는 시간을 소정 시간과 비교하는 단계; 및 (8) 피처리 데이터의 처리 결과를 클라이언트로 송신하고, 상기 클라이언트의 세션을 삭제하는 단계를 포함하는 데이터 처리 방법을 제공한다.
이하 첨부된 도면을 참조하여 본 발명의 바람직한 실시예에 관하여 상세히 설명한다.
도 1은 본 발명의 일 실시예에 의한 데이터 통신 시스템을 개념적으로 도시한 블록도이다. 본 발명의 데이터 통신 시스템(200)은 서버(100)와 클라이언트(10-1, 10-2, 10-3; 이하 "10") 및 서버(100)와 클라이언트(10)를 접속하는 유무선 통신망(20)을 포함한다. 본 실시예에서, 서버(100)는 SAP, 오라클, MS-SQL 등의 기간 시스템(100-1)과 서로 다른 기종의 클라이언트(10)와 서버(100)를 연결하는 미들웨어(100-2)를 포함하는 것으로 한다.
시스템 서버(100)의 각 구성은 전용 하드웨어를 구성하여 구현할 수도 있고, 통상적인 범용 컴퓨터 시스템을 프로그래밍하여 구현하는 것도 물론 가능하다.
도 2는 본 발명의 데이터 통신 시스템(200)의 서버(100)의 구성의 제1 실시예를 도시한 블록도이다. 상기 서버(100)는 접속 모듈(110), 데이터 송수신 모듈(120), 쓰레드 관리 모듈(130), 세션 정보 데이터 베이스(140), 세션 관리 모듈(150)을 포함한다. 모듈들(110 내지 150)은 버스에 의해 상호 연결된다.
상기 접속 모듈(110)은 클라이언트(10)와 서버(100) 간의 접속을 개시하거나 종료한다. 상기 접속의 개시 또는 종료는 클라이언트(10) 또는 서버(10)의 요청 또는 지시에 따라 수행될 수도 있고, 일정한 경우에 자동으로 수행될 수도 있다. 예를 들면, 상기 접속 모듈(110)은 클라이언트(10)로부터 접속 요청이 있는 경우 이 접속 요청에 따라 접속을 개시하고, 더 이상 프로세스를 진행할 수 없거나 프로세스를 완결한 경우에는 접속을 자동으로 종료하는 것이 바람직하다. 특히, 클라이언트로부터 커밋(commit) 메시지가 수신되면 접속을 자동으로 종료하는 것이 데이터 처리 요금을 절감하는데 바람직하다.
상기 데이터 송수신 모듈(120)은 클라이언트(10)로부터 데이터를 수신하거나 클라이언트(10)로 데이터를 송신한다.
상기 쓰레드 관리 모듈(130)은 쓰레드를 생성하고 할당한다. 클라이언트(10)가 서버에 접속하면 리스너는 쓰레드 풀(thread pool)에 상기 클라이언트에 할당할 담당 쓰레드를 요청한다. 이때, 상기 쓰레드 관리 모듈(130)은, 쓰레드 풀에 현재 대기 중인 여유 쓰레드가 존재하는 경우에는 이 여유 쓰레드를 담당 쓰레드로서 할당하고, 쓰레드 풀에 현재 대기 중인 여유 쓰레드가 존재하지 않는 경우에는 동시 접속자 수를 확인한다. 만약 접속자 수가 허용가능한 최대 동시 접속자 수를 초과하지 않은 경우에는 상기 쓰레드 관리 모듈(130)이 쓰레드를 추가 생성하여 클라이언트(10)에 할당하고, 최대 동시 접속자 수를 초과한 경우에는 해당 클라이언트는 쓰레드를 할당받기 위해 대기한다.
상기 세션 정보 데이터베이스(140)는 현재 접속 중인 클라이언트(10)들 각각 에 부여된 세션 아이디(ID)와, 해당 클라이언트가 처리를 요청한 피처리 데이터의 처리 상태를 세션 정보로서 저장한다. 여기서 피처리 데이터의 처리 상태란, 예컨대, 데이터의 처리가 개시되기 전이면 "처리 대기", 처리 중이면 "처리 중", 처리가 종료되면 "처리 완료" 등으로 정의된 정보들을 의미한다. 한편, 상기 세션 아이디는 각각의 사용자마다 고유하게 설정되는 것이 바람직하다. 이와 같이 고유한 세션 아이디를 부여함으로써, 각 사용자가 어떤 장비를 이용하여 접속했는지를 추적할 수 있다.
상기 세션 관리 모듈(150)은, 상기 세션 정보 데이터베이스(140)에 저장된 피처리 데이터의 처리 상태, 즉 세션 정보를 갱신하고, 각 세션을 상기 세션 정보에 따라 분류한다. 예컨대, 상기 세션 관리 모듈(150)은 "처리 대기" 상태에 있던 피처리 데이터에 대한 처리가 개시되면 세션 정보 데이터베이스(140)에 저장된 세션 정보를 "처리 중"으로 갱신하여 저장한다. 이러한 세션 정보의 갱신은 실시간으로 이루어지는 것이 바람직하다. 또한, 세션 관리 모듈(150)은 상기 데이터 처리 상태를 기초로 데이터 처리를 수행하고 있지 않은 것으로 판단되는 경우에는 해당 세션을 반납한다. 예컨대, 상기 세션 관리 모듈(150)은 쓰레드 할당 시부터 세션의 데이터 처리 상태가 "처리 완료"가 되는데 걸리는 시간을 체크하면서 미리 정해진 시간 이상 소요되는 경우에는 해당 세션을 반납한다. 또는, 세션 정보가 갱신되는데 걸리는 시간을 체크하여 일정 시간 이상 경과해도 세션 정보가 갱신되지 않으면 데이터 처리를 수행하고 있지 아니한 것으로 보아 해당 세션을 반납해도 좋다. 이와 같이, 세션의 데이터 처리 상태를 기초로 데이터 처리를 수행하고 있지 않은 가비지 세션을 반납함으로써 서버(100)를 효율적으로 사용할 수 있다.
이러한 경우, 클라이언트(10)에 데이터 미처리 메시지를 송신하고 클라이언트가 처리되지 않은 피처리 데이터를 로컬 데이터베이스에 저장해 두었다가 처리함으로써 데이터 처리의 누락을 방지할 수 있다.
도 3은 본 발명의 데이터 통신 시스템(200)의 서버(100)의 구성의 제2 실시예를 도시한 블록도이다. 도 2에 도시된 제1 실시예와 동일한 도면 부호를 사용한 구성 요소는 제1 실시예와 그 구성 및 기능에 있어 유사하므로, 이하에서는 제1 실시예와 차이가 있는 부분에 관하여서만 설명한다. 도 3에 도시된 바와 같이, 제2 실시예는 상기 제1 실시예의 구성에 더하여, 버퍼 모듈(160) 및 데이터 처리 모듈(170)을 더 포함한다.
본 실시예에서는, "처리 대기"라는 정보가 클라이언트의 세션 정보로서 세션 정보 데이터베이스에 저장되면, 세션 관리 모듈(150)이 각 클라이언트로부터의 피처리 데이터를 순차적으로 버퍼 모듈(160)로 넘겨줌으로써, 피처리 데이터들이 버퍼 모듈(160)에 저장된다. 버퍼 모듈(160)에 저장된 피처리 데이터는 순차적으로 데이터 처리 모듈(170)로 넘겨진다. 즉, 본 실시예에서는 클라이언트 접속시 할당된 쓰레드는 서버와 클라이언트 간의 통신을 담당하고, 데이터의 처리는 별도의 데이터 처리 모듈에서 행한다는 점에서 상기한 제1 실시예와 구별된다. 데이터 처리 성능을 향상시키기 위해 상기 데이터 처리 모듈(170)은 별도의 쓰레드 풀을 갖는 것이 바람직하다.
이와 같이 버퍼 모듈(160)을 중간에 둠으로써 순간적으로 접속자가 폭주하여 많은 데이터 처리 요청이 들어오더라도 이들을 버퍼에 쌓아 순차적으로 처리할 수 있기 때문에, 기간 시스템에서의 처리가 지연되더라도 게이트웨이의 성능을 유지하는 것이 가능하다.
한편, 서버(100)는 검사 모듈(180) 및 오류데이터 관리 모듈(190)을 더 포함할 수 있다. 상기 검사 모듈(180)은 클라이언트(10)로부터 전송된 피처리 데이터에 이상이 있는지를 검사하고, 만약 이상이 있으면 클라이언트에 에러 메시지를 보내고 세션과 쓰레드를 반납함으로써 해당 프로세스를 종료한다. 이 경우에, 클라이언트(10)는 처리되지 않은 데이터를 로컬 데이터베이스에 저장해 두었다가 나중에 배치(batch) 처리하는 것이 바람직하다. 이와 같이, 서버(100)가 수신한 피처리 데이터에 이상이 있는 경우에는 클라이언트(10)의 로컬 데이터베이스에 저장해 두었다가 나중에 처리함으로써, 데이터 처리가 누락되는 것을 방지할 수 있다.
상기 검사 결과 이상이 없는 경우에는, 상기 검사 모듈(10)은 오류데이터 관리 모듈(190)에 상기 피처리 데이터와 동일한 데이터의 처리 결과가 저장되어 있는지를 확인한다. 상기 오류데이터 관리 모듈(190)은 기존에 처리가 완료되었으나 전송 단계에서 오류가 발생한 데이터를 저장한다. 상기 검사는, 예를 들면, 클라이언트(10)에서 피처리 데이터를 송신할 때 각 데이터에 고유의 아이디(ID)를 부여하고, 오류데이터 관리 모듈(190)이 저장하고 있는 기존의 데이터 중 피처리 데이터와 동일한 아이디를 갖는 것이 있는지를 서로 비교함으로써 가능하다. 상기 검사 결과, 오류데이터 관리 모듈(190)에 피처리 데이터와 동일한 데이터에 대한 처리 결과가 저장되어 있는 경우에는 오류데이터 관리 모듈(190)에 저장된 데이터를 클라이언트(10)로 전송한다.
이와 같이 이미 처리가 완료되었으나 전송 단계에서 오류가 발생한 데이터를 별도로 관리함으로써, 데이터 처리가 중복되는 것을 방지할 수 있다.
도 4는 본 발명에 의한 데이터 처리 방법의 일실시예에 있어서, 서버(100) 측의 데이터 처리 과정의 일 예를 도시한 흐름도이다.
도 4a는 프로세스 개시부터 클라이언트에 쓰레드를 할당하는 과정을 도시한다. 클라이언트로(10)부터 접속 요청을 수신(S400)하면, 접속 모듈(110)은 서버(100)와 클라이언트(10) 간의 접속을 개시(S410)하고 세션 관리 모듈(150)은 해당 클라이언트에 대한 세션을 생성(S420)한다. 이때, 각각의 사용자마다 고유한 세션 아이디(ID)를 부여함으로써, 각 사용자가 동일한 세션 아이디로 어떤 장비를 이용하여 접속하였는지를 추적하는 것이 가능하다. 다음으로, 쓰레드 풀(thread pool)에 쓰레드를 요청(S430)하면, 쓰레드 관리 모듈(130)은 쓰레드 풀에 현재 대기 중인 여유 쓰레드가 존재하는지를 판단(S440)하여, 쓰레드 풀에 현재 대기 중인 여유 쓰레드가 존재하는 경우(S440: 예)에는 이 여유 쓰레드를 해당 클라이언트(10)에 담당 쓰레드로서 할당하고, 쓰레드 풀에 현재 대기 중인 여유 쓰레드가 존재하지 않는 경우(S440: 아니오)에는 동시 접속자 수를 확인(S450)한다. 만약 접속자 수가 허용가능한 최대 동시 접속자 수를 초과하지 않은 경우(S450: 아니오)에는 쓰레드를 추가 생성(S460)하여 할당하지만(S470), 최대 동시 접속자 수를 초과한 경우(S450: 예)에는 쓰레드를 할당받기 위해 대기한다.
클라이언트(10)에 담당 쓰레드가 할당되면, 도 4b에 도시된 바와 같이, 서버의 데이터 송수신 모듈(120)은 클라이언트(10)가 처리를 요청한 피처리 데이터를 읽고(480), 이 피처리 데이터에 이상이 있는지 여부를 검사(490)한다. 만약 피처리 데이터에 이상이 있는 경우(S490: 아니오)에는 클라이언트(10)에 에러 메시지를 송신(S500)하고 프로세스를 종료한다. 앞서 살펴본 바와 같이, 에러 메시지를 수신한 클라이언트(10)는 피처리 데이터를 로컬 데이터베이스에 저장하는 것이 바람직하다.
피처리 데이터에 이상이 없는 경우(S490: 예)에는, 오류데이터 관리 모듈(190)에 피처리 데이터와 동일한 데이터의 처리 결과가 존재하는지를 확인한다(S510). 이는 앞서 살펴본 바와 같이, 클라이언트(10)에서 피처리 데이터를 송신할 때 각 데이터에 고유의 아이디(ID)를 부여하고, 오류데이터 관리 모듈(190)에 저장되어 있는 기존의 데이터 중 피처리 데이터와 동일한 ID를 갖는 것이 있는지를 서로 비교함으로써 가능하다. 만약 오류데이터 관리 모듈(190)에 피처리 데이터와 동일한 아이디를 갖는 데이터가 있으면(S510: 예), 오류데이터 관리 모듈(190)이 기존에 처리된 데이터를 클라이언트(10)로 송신(S520)하고, 송신이 정상적으로 이루어지면 해당 프로세스가 종료된다.
오류데이터 관리 모듈(190)에 피처리 데이터와 동일한 데이터가 저장되어 있지 아니한 경우(S510: 아니오)에는, 피처리 데이터의 처리가 개시된다. 이때, 처리의 개시에 앞서 "처리 대기"라는 정보가 해당 클라이언트의 세션 정보로서 세션 정보 데이터베이스(140)에 저장(S530)된다. 다음으로, 피처리 데이터는 버퍼 모듈(160)에 저장(S540)된 후, 데이터 처리 모듈(170)로 순차적으로 넘겨진다. 이와 같이 피처리 데이터를 일단 버퍼에 저장함으로써 순간적으로 접속자가 폭주하더라 도 피처리 데이터를 버퍼에 쌓아 순차적으로 데이터를 처리할 수 있고, 기간 시스템에서의 처리가 늦어지더라도 게이트웨이에서의 처리 요청을 지연시키지 않을 수 있다.
데이터 처리 모듈(170)에서 해당 피처리 데이터의 처리가 개시되면 해당 클라이언트(10)의 세션 정보는 "처리 중"으로 갱신(S550)되고, 처리가 완료되면 세션 정보가 "처리 완료"로 갱신(S560)된다.
피처리 데이터의 처리가 완료되면 해당 피처리 데이터의 처리를 요청한 클라이언트(10)로 그 결과가 송신되는데, 전송이 정상적으로 이루어지면(S570: 아니오), 클라이언트(10)가 커밋(commit) 메시지를 서버(100)로 송신한다. 커밋 메시지가 수신되면, 해당 클라이언트(10)에 할당된 쓰레드를 쓰레드 풀로 반납하고 해당 세션을 반납(S590)하는 것으로 프로세스가 종료된다.
만약 클라이언트(10)로의 데이터 송신시 오류가 발생(S570: 예)하면, 처리된 데이터는 오류데이터 관리 모듈(190)에 저장(S580)되고, 프로세스가 종료된다.
한편, 본 발명은 세션의 데이터 처리 과정을 모니터링 함으로써 데이터 처리를 수행하고 있지 아니한 세션을 반납한다. 예컨대, 쓰레드를 할당한 시점에서 데이터 처리를 개시한 시점, 데이터 처리 개시시부터 데이터 처리 완료시까지의 시간 등을 체크하고, 이 시간이 미리 정해진 기준 시간을 초과하는 경우에는 데이터 처리를 수행하고 있지 아니한 것으로 보아 세션을 반납한다. 이는 쓰레드 할당 모듈, 버퍼, 데이터 처리 모듈 등과 연동하는 세션 관리 모듈이 세션의 데이터 처리 상태를 지속적으로 모니터링 함으로써 가능하다. 이렇게 함으로써, 가비지 세션으 로 인해 시스템 자원이 낭비되는 것을 방지할 수 있다.
이 경우, 서버(100)는 클라이언트(10)에 데이터 미처리 메시지를 송신하는 것이 바람직하다. 데이터 미처리 메시지를 수신하면, 클라이언트(10)는 해당 데이터를 로컬 데이터베이스에 저장해 두었다가 후에 배치 처리함으로써 처리가 누락되는 것을 방지할 수 있다.
도 5는 본 발명에 의한 데이터 처리 방법의 일실시예에 있어서, 클라이언트(10) 측의 처리 과정을 도시한 흐름도이다.
클라이언트(10)는 서버에 접속 요청을 보내고(S1000), 접속이 정상으로 이루어지면 데이터 처리 요청을 서버(100)에 송신(S1100)하고 피처리 데이터를 로컬 데이터 베이스에 저장한다(S1200). 만약 데이터 송신이 정상적으로 이루어지지 않으면(S1300: 예) 로컬 데이터베이스에 저장해 두었다가 나중에 배치로 일괄처리한다.
데이터 송신이 정상적으로 이루어지면(S1300: 아니오), 데이터 처리 결과가 수신될 때까지 대기한다(S1400). 만약 서버(100)로부터 해당 클라이언트(10)의 세션에서 데이터 처리를 수행하지 않는다는 데이터 미처리 메시지를 수신하거나 또는 서버(100)의 데이터 처리가 종료된 후 처리된 데이터를 수신하는 과정에서 오류가 발생하면(S1500: 예), 데이터 송신시 오류가 발생한 경우와 마찬가지로 로컬 데이터베이스에 저장해 두었다가 나중에 배치로 일괄처리한다.
처리된 데이터가 정상적으로 수신(S1500: 아니오)되면, 커밋(commit) 메시지를 서버(100)로 송신(S1600)하고, 피처리 데이터를 로컬 데이터베이스로부터 삭제함으로써 프로세스를 종료(S1700)한다.
이상, 본 발명의 바람직한 실시예에 관하여 구체적으로 설명하였으나, 본 발명의 기술적 범위가 이에 국한되는 것은 아니다. 본 발명의 기술적 범위는 후술하는 특허청구범위에 의하여 결정되며, 본 발명의 기술적 범위 이내에서 상기한 실시예들의 다양한 변형 및 수정이 가능할 것이기 때문이다.