Microsoft Word - Tmax TCP IP Gateway Guide.doc

Size: px
Start display at page:

Download "Microsoft Word - Tmax TCP IP Gateway Guide.doc"

Transcription

1 Tmax TCP IP Gateway Guide Copyright 2000 TmaxSoft Co., Ltd. All Rights Reserved

2 Copyright Notice Copyright 2000 TmaxSoft Co., Ltd. All Rights Reserved. TmaxSoft Co., Ltd. 대한민국서울시강남구대치동 글라스타워 18 층우 ) Restricted Rights Legend This software and documents are made available only under the terms of the TmaxSoft License Agreement and may be used or copied only in accordance with the terms of this agreement. No part of this document may be reproduced, transmitted, or translated in any form or by any means, electronic, mechanical, manual, or optical, without the prior written permission of TmaxSoft Co., Ltd. 소프트웨어및문서는오직 TmaxSoft Co., Ltd. 와의사용권계약하에서만이용이가능하며, 사용권계약에따라서사용하거나복사할수있습니다. 또한이매뉴얼에서언급하지않은정보에대해서는보증및책임을지지않습니다. 이매뉴얼에대한권리는저작권에보호되므로발행자의허가없이전체또는일부를어떤형식이나, 사진녹화, 기록, 정보저장및검색시스템과같은그래픽이나전자적, 기계적수단으로복제하거나사용할수없습니다. Trademarks Tmax, WebtoB, WebT, and JEUS are registered trademarks of TmaxSoft Co., Ltd. All other product names may be trademarks of the respective companies with which they are associated. Tmax, WebtoB, WebT, JEUS 는 TmaxSoft Co., Ltd. 의등록상표입니다. 기타모든제품들과회사이름은각각해당소유주의상표로서참조용으로만사용됩니다. Tmax TCP/IP Gateway Guide Document Edition Date Version TMTGW Aug 2, 2005 Tmax 4.00 Tmax 제품은아래표와같습니다. 본서는 Tmax Standard 와옵션중에굵게기울임꼴로인쇄되어있는내용을포함하고있습니다. 1 Tmax TCP IP Gateway Guide

3 Tmax Standard Tmax Options TP Function + 2 Phase Commit Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host-Link, Power Builder Interface Module, SERIAL Gateway, TCP/IP Service Gateway, TCP/IP Thread Gateway 이책에관하여 TCP/IP Gateway Development Guide 는 TCP/IP Gateway 를사용하여 Tmax 시스템을개발하는경우의시스템적인측면과개발자측면에서의요구사항및주의사항에대한내용을언급한다. TCP/IP Gateway 는리모트노드와 Tmax 를연결하면서복잡한프로그래밍은 TCP/IP Gateway 라이브러리에서담당하고, 각사이트마다 customizing 을해야할부분은 TCP/IP Gateway 에서제공하는 custom.h, custom.c 에서수정하면되므로간단하게 TCP/IP Gateway 를작성할수있다. 이에 Tmax 에서 TCP/IP Gateway 를사용할수있도록환경파일을설정하는부분과 custom.h, custom.c 을어떻게수정해야하는지를살펴보고, 실질적인예를제시하여개발자의이해를돕는다. 누구를위한책인가? 이책은 TCP/IP 를통하여타시스템과연결을해야하는시스템을구축하는개발자들을위한책이다. 이를활용하면개발자들이좀더편리하게 TCP/IP 로연결된시스템을손쉽게구축할수있다. 이책의완전한활용을위해서는 TCP/IP, Tmax Server Programming, Unix C 등에관련된프로그래밍능력을필요로한다. 어떻게사용하는가? TCP/IP Gateway 의개요에대해알아본다. TCP/IP Gateway 서비스의유형에대해알아본다. TCP/IP Gateway 를사용하기위한환경파일과 custom.h, custom.c 의작성에대해알아본다. TCP/IP Gateway 의사용예제를알아본다. 관련서 Tmax Administration Guide 규약 규약설명 Tmax TCP IP Gateway Guide 2

4 [ ] ( ) Numeric String Literal 필수항목옵션항목지정된여러개의값중배타적인선택구분자디폴트값숫자 abc 형태의문자열 abc 형태의문자열 3 Tmax TCP IP Gateway Guide

5 차례 1 TCP/IP Gateway 의개요 개요 TCP/IP Gateway 서비스의유형 동기형 TCPGW 서비스블록형방식 서비스 NON 블록형방식 리모트동기형호출방식 비동기형 TCPGW TMAX단에서서비스요청방식 리모트단에서서비스요청방식 서버 TCPGW 클라이언트 TCPGW TCP/IP Gateway 환경설정 Tmax 환경구성 TCPGW의사용옵션 서버 / 클라이언트 TCPGW의환경파일 서비스블록형 TCPGW의환경파일 서비스 NON-블록형 TCPGW의환경파일 리모트동기형과비동기형 TCPGW 환경파일 재연결 TCPGW 환경파일 여러리모트노드와연결을맺는클라이언트 TCPGW 사용자헤더환경설정및사용방법 사용자헤더환경파일 사용자헤더사용방법 Gateway 기타기능 Gateway 헤더 다중응답처리 Tmax TCP IP Gateway Guide 4

6 3.3.3 서비스명을찾는순서 사용자임의의채널지정 코드변환 TCP/IP Gateway 사용자프로그램 (custom.h, custom.c) custom.h 수정 custom.c 수정 register.c 수정 예제 OUTBOUND TCPGW 예제 개요및프로그램내용 프로그램구성 동기 TCPGW 예제 ( INBOUND ) 개요및프로그램내용 NON 블록킹 TCPGW 예제 부록 CUSTOM INFO 구조체 CUSTOM INFO Flags TCPGW 에러코드 Tmax TCP IP Gateway Guide

7 1 TCP/IP Gateway 의개요 1.1 개요 TCP/IP Gateway( 이하 TCPGW 라칭함 ) 는 Tmax 서버와 Non Tamx 서버 ( 리모트노드라칭함 ) 간의 Interface 를담당하는 Tmax 에서제공되는 Gateway 이다. 이 TCPGW 는 Tmax 서버의한종류로써 TCP/IP 로연결되어있는 Unix/Windows 서버등과의 Gateway 역할을한다. TCPGW 는 Tmax 서버의한종류로서 Tmax 환경파일에서버로등록해야만사용할수있다. 하지만일반다른서버들을만드는방식과는다르게생성해주어야한다. 일반서버는 TCS 나 UCS 용서버라이브러리를이용하여서버를생성하나, TCPGW 는외부와통신을담당하는라이브러리 (libtcpgw.a, libtcpgw.so) 와사용자가작성한프로그램 (custom.c) 과 Link 하여서버를생성한다. Non Tmax 에서보내온메세지를 TCPGW 는해당서비스를 tpacall() 하며, 서비스결과는처음요청한 Non Tmax 서버로전송한다. 반대로 Tmax 서비스에서 TCPGW 를 tpcall() 이나기타다른방식으로서비스를요청하면 TCPGW 는 Non Tmax 로요청메시지를보낸후응답이오면자신을 call 한서비스로 tpreturn() 한다. 이와같이복잡하게타시스템과 TCP/IP 로연결하기위해필요한작업들, 예를들어 socket 을열고메시지를주고받는일등은모두 TCP/IP Gateway 에서처리해주고, 개발자는업무로직만을작성하면되므로개발자들은손쉽게타시스템과연결할수있다. TCPGW 의대략적인동작구조는다음과같다. Tmax TCP IP Gateway Guide 6

8 그림 1-1 TCPGW 동작구조 TCPGW 는위의그림에서보듯이리모트노드로부터서비스요청을받아서처리할수있고 ( 그림 1-1 에서실선표시 ), Tmax 클라이언트는서비스로부터서비스요청을받아서리모트노드로서비스요청을할수도있다 ( 그림 1-1 에서점선표시 ). 이와같이리모트노드로부터서비스요청을받아서처리하는것을 OUTBOUND 서비스라하고, Tmax 클라이언트로부터서비스요청을받아서리모트노드로서비스요청을하는것을 INBOUND 서비스라한다. 그림 1-2 동기 / 비동기 TCPGW 동작구조 Tmax 클라이언트나서비스에서 TCPGW 를바로호출하고응답이올때까지기다리는동기적인호출방식 ( 그림 1-2 에서점선표시 ) 이있다. 이와는달리비동기적인호출방식은 Tmax 클라이언트가 Tmax 서비스를호출하면그서비스에서 TCPGW 로제어권이넘어가서해당서비스는다른서비스요청을받을수있게되고, TCPGW 가리모트노드로부터 7 Tmax TCP IP Gateway Guide

9 응답을받게되면응답을처리하는서비스로요청을넘겨주는방식으로동작하게된다 ( 그림 1-2 에서실선표시 ). 이러한여러가지동작방식에대해서는 2 장. TCP/IP Gateway 서비스의유형에서좀더상세히설명하도록한다. 이러한여러가지유형에맞추어 TCPGW 를작성하기위해서는 Tmax 환경을적절히설정하고프로그램 (custom.c, custom.h) 을작성해야하므로더자세한사항은본메뉴얼의 3 장. TCP/IP Gateway 의구성과 4 장. 예제에서더상세히설명하도록한다. Tmax TCP IP Gateway Guide 8

10 2 TCP/IP Gateway 서비스의유형 TCPGW 는 Tmax 에서제공하는라이브러리 (libtcpgw.a, libtcpgw.so) 와개발자가작성하는 custom.c, custom.h 를함께링크하여만들어진다. 이렇게만들어진 TCPGW 는리모트노드와통신을하며, Tmax 클라이언트의요청을리모트노드로보내기도하고리모트노드의요청을 Tmax 서비스에서처리하도록중간역할을해준다. TCPGW 는크게동작하는방식에따라동기형 TCPGW 와비동기형 TCPGW 로나눌수있고, 기동하는방법에따라서버 TCPGW 와클라이언트 TCPGW 로나눌수있다. 여기서설명하는서버와클라이언트모드는리모트노드와 TCPGW 사이에연결시어떤쪽에서먼져연결을시도하는지에따른모드이다. 일단상대방과연결되면서버나클라이언트모드는의미가없다. 어느쪽에서나먼저서비스를요청할수있기때문이다. 이제이 4 가지의 TCPGW 의서비스유형에대해서설명하도록한다. 2.1 동기형 TCPGW 여기서설명하는동기형방식은 Tmax 의클라이언트나서버에서서비스를요청하고응답이서비스를요청한클라이언트나서버로오는방식을말한다. 반대로리모트노드에서서비스를요청하면 TCPGW 는 Tmax 의서비스를요청하고그결과를서비스를요청한리모트노드에되돌려주는방식이다. 전자인경우리모트노드로서비스를요청한 Tmax 서비스가블록되는가, 또는블록되지않는가에따라 TCPGW 는다르게동작한다. 또한, 후자인경우에는리모트노드에서요청한처리결과를돌려줄때요청한채널로돌려주는방식이다. Tmax 단의클라이언트나서버에서리모트노드로동기형방식으로서비스를요청할경우에는반드시 TCPGW 와리모트노드간에 UID(Unique Id.) 를서로공유해야한다. 9 Tmax TCP IP Gateway Guide

11 2.1.1 서비스블록형방식 이방식은 Tmax 의서버나클라이언트에서 TCPGW 로서비스를요청하고, 그결과가올때까지기다리는가장일반적인방식이다. 아래그림처럼 Tmax 클라이언트의요청을받은서비스에서 TCPGW 로서비스로 tpcall 을하면리모트노드에서처리결과를송신할때까지 Tmax 서비스 (SVC1) 가블럭되어있게된다. 그림 2-1 블록형동기 TCPGW TCPGW 와리모트노드는연결되어있는상태이다. Tmax 클라이언트는 Tmax 서비스를 tpcall 한다. Tmax 서비스에서는클라이언트의요청을받아들여 TCPGW 로서비스를 tpcall 한다. TCPGW 는연결되어있는리모트노드에서비스를요청한다. 리모트노드에서결과가오면에러인지아닌지를판단하여 TCPGW 서비스를호출한 Tmax 서비스로 tpreturn 한다. Tmax TCP IP Gateway Guide 10

12 결과를받은 Tmax 서비스는 Tmax 클라이언트로 tpreturn 한다. 이와같은방식으로 TCPGW 를동작시키게되면 Tmax 클라이언트에서호출한 Tmax 서비스는 TCPGW 를호출한후에결과를받을때까지블럭이되어있게된다. (tpacall() 을한경우도 tpgetrply() 로응답을받는곳에서블럭이되기때문에 tpcall() 과마찬가지로블럭이되게된다.) 따라서많은수의요청을받아들이기위해서는블럭이되는시간까지감안하여많은수의서버를실행해야한다. 이는대외기관통신에서는대외기관의장애 ( 머신, 네트워크 ) 에따라서많은수의서버가필요로하기때문이다 서비스 NON 블록형방식 이방식은 Tmax 클라이언트에서직접 TCPGW 를요청하는방식에서는사용할수없고, TCPGW 에서비스를요청하고결과를수신하는서버를중간에두어서처리하는방식이다. 즉, TCPGW 앞에송신서비스와수신서비스를두고 Tmax 클라이언트는송신서비스를호출하고, 송신서비스는 TCPGW 로서비스를 forward 하고서비스를종료한다. TCPGW 는리모트노드로서비스를요청하여그결과를수신하면, 해당결과를수신서비스에게전달한다. 수신서비스는 TCPGW 로부터결과를수신받아클라이언트에게전달하면서비스사이클이종료되는방식이다. 결과적으로클라이언트는서비스를요청하고결과를받는동기방식이나서버는요청을전달하고종료하는비동기방식처럼동작한다. 그림 2-2 NON 블록형동기 TCPGW TCPGW 와리모트노드는연결되어있는상태이다. 11 Tmax TCP IP Gateway Guide

13 Tmax 클라이언트는 Tmax 서비스를 tpcall 한다. Tmax 서비스에서는클라이언트의요청을받아들여 TCPGW 서비스를 tpforward 한다. TCPGW 는연결되어있는리모트노드에메세지를전송한다. 리모트노드에서결과가오면에러인지아닌지를판단하여 tprelay 서비스로 tprelay 한다. 할 TCPGW 서비스로부터결과를받은서비스 (Tmax 클라이언트로부터 tprelay 할서비스로지정된서비스 ) 는 Tmax 클라이언트로 tpreturn 한다. 이와같이동작하는 TCPGW 는블록형방식에서수행하는방식보다도적은서버로도많은처리를할수있다. 블록형방식은서비스가 TCPGW 를호출하고블록되기때문에동시에많은처리를위해서는보다많은서버프로세스를실행해야하나, NON 블록형방식에서는자신의일만처리하고서비스를종료하기때문에적은서버프로세스로도많은일을할수있다. 따라서대외기간간에통신을처리하는경우에는 NON 블록형방식이보다효율적이라고할수있다 리모트동기형호출방식 이방식은리모트노드에서 TCPGW 로먼저서비스를요청하는방식이다. TCPGW 는리모트노드에서요청한서비스를호출하고그결과를받아서해당서비스를요청한채널로결과를전송한다. 리모트노드는동시에 TCPGW 로 Tmax Config 에정의되어있는 MAXSACALL 개수를초과하여호출할수없다. Tmax TCP IP Gateway Guide 12

14 그림 2-3 리모트요청동기형 TCPGW TCPGW 와리모트노드는연결되어있는상태이다. 리모트노드는 TCPGW 와연결된채널로메세지를전송한다. TCPGW 는 tpacall() 로 Tmax 서비스를호출한다. 서비스처리결과를 TCPGW 는받아서메세지를요청한채널을찾는다. 해당채널이정상적으로연결되어있으면결과를전송한다. 이와같은동작방식은리모트노드에서 Tmax 단의서비스를호출하는가장보편적인방식이다. TCPGW 는리모트노드의채널정보를보관하였다가서비스로부터결과를수신받으면, 보관하고있는채널중에서해당채널을찾아서결과를전송한다. 이때해당채널로결과를되돌려주기전에다른요청은얼마든지가능하다. 즉, TCPGW 는리모트노드에서요청한채널은블록시키지않고다음요청을받을수있도록처리하기때문에 TCPGW 를어떻게운영하는방식에따라서다르게처리할수있다. 2.2 비동기형 TCPGW 비동기형호출방식은 Tmax 단의클라이언트나서버, 또는리모트노드에서 TCPGW 서비스를요청만하고, 그결과는받지않거나또는 13 Tmax TCP IP Gateway Guide

15 서비스를요청한곳이아닌다른프로그램에서처리하는방식을말한다. 먼저 Tmax 단의서비스에서 TCPGW 로서비스를요청하고그결과는다른서비스로받을수있다. 그러나클라이언트인경우에는비동기형으로처리할때는 tpacall 로써응답을받지않는경우에만가능하다. 반대로, 리모트노드에서서비스를먼저요청하는경우에위에서와같이서비스만요청하고결과를받지않을수도있고, 서비스를요청하고결과는다른채널로돌려주는방식이비동기형방식이다 TMAX 단에서서비스요청방식 이방식은 Tmax 단의서비스에서 TCPGW 로 tpacall 에 TPNOREPLY 로요청하고해당서비스는종료한다. TCPGW 는리모트노드로요청를보내고해당결과가수신되면 Tmax 단의다른서비스를 tpacall 에 TPNOREPLY 로호출하여결과를처리하게하는방식이다. 그림 2-4 비동기형 TCPGW 1 Tmax 서비스에서 TCPGW 로서비스를요청한다 (tpacall 에 TPNOREPLY) 2 TCPGW 는리모트노드로데이터를전송한다. 3 TCPGW 는리모트노드로부터데이터를수신한다. Tmax TCP IP Gateway Guide 14

16 4 TCPGW 는 Tmax 단의다른서비스를호출한다. (tpacall 에 TPNOREPLY) 리모트단에서서비스요청방식이방식은리모트노드에서먼저서비스를 TCPGW 로요청하면, TCPGW 는 tpacall 로 Tmax 서비스를요청한다. Tmax 단의서비스처리가완료되면 TCPGW 는리모트노드와연결된채널중에서사용가능한채널중아무채널에처리결과를전송한다. 그림 2-5 비동기형 TCPGW 1 리모트노드에서 TCPGW 로서비스를요청한다. 2 TCPGW 는 Tmax 의서비스를 tpacall 로요청한다. 3 Tmax 의서비스를처리결과를 TCPGW 에전달한다. 4 TCPGW 는리모트노드와연결된채널중에서채널테이블에서채널을검색하여결과를전송한다. 15 Tmax TCP IP Gateway Guide

17 2.3 서버 TCPGW 서버 TCPGW 와클라이언트 TCPGW 는연결을맺을때만차이가있고연결이맺어진이후에는기능상차이가없다. 서버 TCPGW 는 TCPGW 에서 Listen 하고있으면리모트노드에서 Connect 하게된다. 서버 TCPGW 는클라이언트 TCPGW 와마찬가지로리모트노드와 Tmax 클라이언트어디서든지서비스요청을할수있다. 그림 2-3 서버 TCPGW TCPGW 는 Tmax boot 시에리모트노드에서연결할수있도록연결을기다리고 (listen 하고 ) 있는다. 리모트노드에서는 TCPGW 로연결 (connect) 을한다. 2.4 클라이언트 TCPGW 클라이언트 TCPGW 는리모트노드에서 listen 하는 port 로 connect 를맺으면서기동된다. 서버 TCPGW 는클라이언트 TCPGW 와마찬가지로리모트노드와 Tmax 클라이언트어디서든지서비스요청을할수있다. Tmax TCP IP Gateway Guide 16

18 그림 2-4 클라이언트 TCPGW 리모트노드에서는 TCPGW 가연결할수있도록연결을기다리고 (listen 하고 ) 있는다. TCPGW 는 Tmax boot 시에리모트노드와연결 (connect) 을한다. 17 Tmax TCP IP Gateway Guide

19 3 TCP/IP Gateway 환경설정 TCPGW 서버가구성되려면다음과같은파일들이존재하여야한다. UNIX Directory 파일명 lib libtcpgw.a, libtcpgw.so libtmaxgw.a libtmaxgw.so lib64 libtcpgw.a, libtcpgw.so libtmaxgw.a libtmaxgw.so Windows Directory bin lib 파일명 tcpgw.dll tmaxgw.dll tcpgw.lib tmaxgw.lib 위의파일 (TCPGW 라이브러리 ) 들은 Tmax 인스톨시에각디렉토리아래에만들어지지만 custom.c 나 custom.h 는따로제공되므로필요시기술지원담당자에게요청해야한다. TCPGW 라이브러리와적절하게구현한 custom.c, custom.h 를컴파일하여 TCPGW 를생성하게된다. Tmax TCP IP Gateway Guide 18

20 3.1 Tmax 환경구성 TCPGW 를사용하기위해서는 Tmax 환경파일에 TCPGW 를서버로서등록해야한다. Tmax 서버중 UCS 형서버와등록방법이비슷한데, 차이점은 SVRTYPE 이 UCS 에서 CUSTOM_GATEWAY 라는차이밖에없다. 등록하는방법은아래와같다. *DOMAIN tmax SHMKEY = 88000, MINCLH = 1, MAXCLH=1, TPORTNO=8800 *NODE tmax1 TMAXDIR="/home/tmax", APPDIR="/home/tmax/appbin" *SVRGROUP svg1 NODENAME=tmax1 *SERVER tcpgw SVGNAME=svg1, MIN=1, MAX=1, 7 CPC=10, SVRTYPE=CUSTOM_GATEWAY, CLOPT="-- -P N 10 -k 71673" *SERVICE TCPGW1 TCPGW2 SVRNAME=tcpgw, SVCTIME=20 SVRNAME=tcpgw, SVCTIME=25 TCPGW 를사용하기위해 Tmax 환경파일을수정할때는 SERVER, SERVICE 절만적절히설정하면된다. MIN : TCPGW의프로세스개수를지정하는항목으로써이항목의값이 1보다클경우에 TCPGW가서버모드인지, 클라이언트모 19 Tmax TCP IP Gateway Guide

21 드인지에따라서사용하는포트번호가다르다. 서버모드 MIN 값이 2 이상이면두개이상의프로세스에서같은포트를 Listen 할수없으므로 TCPGW 는아래에설명하는옵션중 P 옵션으로입력하는포트번호에자신의서버번호를사용한다. 예를들어포트번호가 5050 이면첫번째프로세스는 5050 포트번호를, 두번째프로세스는 5051 를이런식으로 1 씩증가되면서프로세스개수만큼포트를사용한다. 그러므로프로세스수가 2 개이상이면지정한프로세스수만큼포트번호가사용가능한지확인해야한다. 클라이언트모드 클라이언트로동작할경우에는세가지방식으로사용할수있다. 첫번째는리모트노드에서하나의포트번호를 Listen 하고, 모든 TCPGW 프로세스는리모트노드에서 Listen 하고있는포트로연결하는방식이다. 두번째는 C 옵션을사용하여서버모드처럼포트번호를 TCPGW 프로세스별로다르게사용할수있다. p 옵션으로지정한포트번호에서버번호를더해서리모트노드에연결을시도한다. 이경우에리모트노드는여러개의포트번호를 Listen 하고있어야한다. 또한프로세스수만큼지정한포트가사용가능해야한다. 세번째는 f 옵션을사용하여여러개의리모트노드에연결하는방식으로연결하고자하는리모트노드의정보를별도의파일에등록하고 f 옵션을사용하여해당파일명을지정하면 TCPGW 는해당파일의정보를로드하여리모트클라이언트와연결한다. CPC : CPC 항목은 Tmax engine 과 TCPGW 간의채널수를지정 하는항목으로써, Tmax 의클라이언트나서비스에서리모트노드 로요청하는경우에는동시에요청하는수만큼 CPC 수를지정해 Tmax TCP IP Gateway Guide 20

22 야한다. 이경우에도 NON 블록형인경우에는동시요청수만큼 지정할필요가없이적당한수만큼만지정하면된다. 반대인경우 에는 TCPGW 는 Tmax engine 으로 tpacall 로요청하므로많은채 널을사용할필요는없다. CLOPT: 아래설명참조 SVCTIME: TCPGW 는하나의서버프로세스에여러개의서비스를지정하여서비스마다 SVCTIME 값을다르게적용할수있다. 이를위해서 *SERVICE 절에여러개의서비스를지정하고, 서비스마다 SVCTIME 값을다르게지정하면 TCPGW 는해당요청한서비스별로지정한서비스 Time 값을사용한다 TCPGW 의사용옵션 TCPGW 는 Tmax config 파일에등록할수있는항목이제안되어있는관계로 CLOPT 항목에많은옵션을설정할수있다. 아래에설명하는옵션에따라서 TCPGW 이동작방식이다르므로아래의설명을정확히이해해야한다. 서버모드로 TCPGW 가동작할경우에 Listen 하고자하는 IP 주소를지정하는옵션이다. 이항목은지정한 IP 주소에대해서만연결을받아들이고자하는경우에사용한다. R 클라이언트모드로 TCPGW 가동작하는경우 -M 옵션을같이사용하여동작모드를변경하여 TCPGW 가연결하고자하는리모트노드의 IP 를지정할수있다. 예를들어옵션을 -R P 8080 r p 8081 M 1 N 10 n 10 지정하면 TCPGW 는들어오는채널에대해서는 IP 주소에 8080 포트로 10 개의채널을연결하고, 나가는채널에대해서는 IP 주소에 8081 포트로 10 개의채널을연결한다. 이와같이클라이언트로동작하는경우에리모트노드의 IP 주소를따로지정할수있다.. 21 Tmax TCP IP Gateway Guide

23 TCPGW 가클라이언트모드로동작할경우리모트노드의 IP 주소를지정하는옵션이다. 이옵션은클라이언트모드에서백업기능및멀티서버채널정보설정을위해서다음과같이문법이강화되었다. r -r mainaddr[:mainport][/backupaddr[:backupport]][(type)][,...] mainaddr, backupaddr 은 IP 주소이며, mainport, backupport 는포트번호이다. type 은 I(IN CHANNEL), O(OUT CHANNEL), A(ANY CHANNEL) 로설정할수있다. I 일경우는 IN CHANNEL 이 -N 옵션으로지정된수만큼생성되며, O 일경우는 OUT CHANNEL 이 -n 옵션으로지정된수만큼생성되고, A 일경우는 IN CHANNEL 이 -N 옵션, OUT CHANNEL 이 -n 옵션으로지정된수만큼생성된다. P 서버모드인경우에는 Listen 하고자하는포트번호이다. 해당포트번호는다른프로세스에서사용하지않은포트번호이어야한다. 클라이언트모드인경우에는 -R 옵션에서설명한것처럼클라이언트포트번호로도사용할수있다. p 리모트노드가 Listen 하고있는포트번호를설정한다. 해당포트번호는다른프로세스에서 Listen 하지않은포트번호이어야한다. M 서버모드로입력한 IP 주소와포트번호를클라이언트모드로바꾸는옵션이다. -R P 옵션으로입력한값은서버모드의 IP 주소와포트번호인데, 이를리모트노드에연결하고자하는리모트노드의 IP 주소와포트번호로바뀌도록하는옵션이다. -M 0 의미는기본적인 TCPGW 의모드값이다. 그러나 -M 1 로하면서버모드에서클라이언트모드로변경된다. (Default: 0) Tmax TCP IP Gateway Guide 22

24 m TCPGW 와통신하는리모트노드의코드체계가다를경우에데이터를변환하는옵션이다. 이옵션은송수신데이터를 ASCII EBCDIC, 조합형한글 완성형한글로변환한다. 이옵션을사용할경우에사용자는송수신데이터의 map 파일을등록해야한다. 코드변환에대해서는아래의설명을참조하십시오.(Default: 변환하지않음 ) N 리모트노드에서 TCPGW 로들어오는채널수를지정하는옵션이다. 이옵션은서버모드나클라이언트모드에관계없이사용하는옵션이다. n TCPGW 에서리모트노드로나가는채널수를지정하는옵션이다. 이옵션은 TCPGW 가클라이언트로동작하는경우에만의미가있다. k 이옵션은사용자가공유메모리를확보하여위에서설명한 -N n 으로주어진채널의상태를사용자가저장할수있도록공유메모리의키값을입력하는옵션이다. TCPGW 는이옵션으로미리공유메모리를확보하지않고전적으로사용자에게전달하여사용자가임의로사용하도록전달하는역할만한다. 보통이옵션은 TCPGW 가최초실행시사용자 Routine(init_remote_info) 를호출할때넘겨주어서사용자가공유메모리를확보하는데사용한다. F 이옵션은특수용도록사용하는옵션으로 CLOPT 항목의옵션으로위에서설명한 IP 주소나포트번호를입력하지않고 Config 파일에등록하여사용하는옵션이다. 이옵션은특수용도록사용함으로일반사용자는사용할수없다. 23 Tmax TCP IP Gateway Guide

25 f 이옵션은 TCPGW 를 Client 로사용하는경우에사용하는옵션으로 r p 옵션이하나의리모트노드의 ip 와연결하는것이라면 f 옵션은여러리모트노드와의연결을맺기위한옵션이다. 이경우에연결하고자하는리모트정보를별도의파일에등록하고 f 옵션을사용하여해당파일명을지정하면 TCPGW 는해당파일의정보를로드하여리모트노드와연결한다. 이옵션은 r, p 옵션과함께사용할수없으며또한 TCPGW 를서버로사용하는경우에는사용할수없다. 단지클라이언트모드에서만사용가능하다. 그리고매요청시마다리모트노드에연결하는 E 옵션도사용할수없다. f 옵션을사용하면리모트노드와항상연결을맺고있어야한다. C 이옵션은 TCPGW 가클라이언트모드로동작하면서동시에같은 TCPGW 프로세스가 2 개이상 (MIN=2) 실행시리모트노드와연결하는포트번호를지정하는옵션이다. 이옵션을지정하면 TCPGW 는 -p 으로지정한포트번호에서버번호를더한포트번호로리모트노드에연결을시도한다. 예를들어 -p 8080 C 옵션을사용하고 MIN=3 으로했을경우첫번째 TCPGW 프로세스는 8080 포트번호를, 두번째 TCPGW 프로세스는 8081 포트번호를, 세번째는 8082 포트번호를사용한다. 이옵션은리모트노드와통신시 TCPGW 로들어오는채널과나가는채널을분리하여사용하고자하는경우에사용한다. 또는이옵션은요청이 Tmax 단에서리모트노드로발생할경우에만의미가있다. c TCPGW 는이옵션이지정되면 Tmax 단에서들어온요청을나가는채널로전송한다. 그리고리모트노드로부터나가는채널로데이터가수신되면이를이전에전송한데이터의 ACK 응답으로처리하고, 요청에대한응답은들어오는채널로수신한다. 즉, TCPGW 와리모트노드사이에요청한데이터에대해서잘받았다는 ACK 정보를주고받고자하는경우에사용하는옵션이다. 반대로요청에대한 ACK 는보내지않는다. Tmax TCP IP Gateway Guide 24

26 이옵션은 NON 블록킹모드로 TCPGW 를사용하거나또는비동기방식으로사용하고자할때 TCPGW 가요청할서비스명을등록하는옵션이다. S NON 블록킹모드로사용할때 Tmax 단의송신서비스는 TCPGW 로 tpforward 하고, 리모트노드에서수신한응답을 TCPGW 는수신 서비스에게 tprelay 하기위해서 relay 될서비스명을등록한다. 또한, 비동기통신방식에서 Tmax 클라이언트나서비스는 TCPGW 로 서비스를요청 (tpacall with TPNOREPLY) 하고끝난다. 이후에리모트 노드에서 수신받은 응답은 일반적으로는 TPNOREPLY 로 호출했으므로 데이터를 버리게 되는데, 이 옵션에 서비스명을 지정하면 TCPGW 는지정한서비스에 tpacall 로응답데이터를 전달한다. 이옵션으로지정한서비스는반드시등록되어있는서비스명이어야한다. H 이옵션은 Tmax 클라이언트나서비스와 TCPGW 사이에사용자정보데이터를주고받고자하는경우에사용한다. 이옵션으로지정한데이터는리모트노드로전송하지않고임시 TCPGW 에서보관하였다가응답이수신되면사용자정보데이터에응답데이터를붙여서호출한서비스에게전달하고자하는경우에사용하다. 보통이옵션은 NON 블록킹모드로사용할때, 송신서비스와수신서비스가분리되어있어송신서비스에서수신서비스에게데이터를전달하고자하는경우에많이사용한다. (Default: 0) h 위의 -H 옵션과동일한옵션이다. 위의옵션은동기방식이나비동기방식모두에적용하는옵션인데반해이옵션은단지 tpforward 에 tprelay 로사용하는호출에대해서만적용된다. (Default: 0) 25 Tmax TCP IP Gateway Guide

27 d 이옵션은리모트노드에서 Tmax 단의서비스를호출하고응답데이터를리모트노드에전송시전송하는채널을선택하는방법을지정하는옵션이다. 이옵션을지정하면리모트노드에서요청한응답은반드시요청한채널에전송하게된다. 이옵션을지정하지않으면리모트노드와연결된채널중임의의사용가능한채널을선택하여전송한다. 이옵션은추후확장을위하여임의의값을설정해주어야한다. 예를들어 -d 0 와같이사용하며, 현재설정된값은무시된다. E 이옵션은 TCPGW 가클라이언트모드로동작시매요청마다채널을연결하고해제하고자하는경우에사용한다. 이옵션을사용하면리모트노드와의연결된채널이없기때문에리모트노드에서먼저서비스를요청할수없다. 또한이옵션을사용하면매번채널이연결되고해제되므로처리속도가감소된다. a u 이옵션은 TCPGW 사용하는옵션이다. 를비동기통신방식으로사용하고자할때 위에서설명한것처럼비동기통신방식은서비스를요청하고종료하는형태이다. 서비스에대한응답도 TCPGW 는다른서비스에대한요청으로간주한다. Tmax 클라이언트나서비스에 TCPGW 로리모트노드에서비스를요청할때사용자가채널을지정할수있도록사용하는옵션이다. 이옵션을사용하기위해서는사용자는 -k 옵션을사용하여채널에대한상태정보를보관하고있어야한다. 만약사용자가지정한채널이사용할수없으면 TCPGW 는에러를반환한다. Tmax TCP IP Gateway Guide 26

28 w 리모트노드와 TCPGW 간의통신시둘사이에는많은통신장비나또는방어벽이있을수있다. 이경우에특정장비나방어벽에둘사이의채널이일정시간동안사용하지않으면일방적으로채널을끊을수있다. 채널이끊어진경우보통은 TCPGW 나리모트노드의프로세스에서이를감지하여채널을다시연결할수있으나, 그러나끊어진것을감지하지못하는경우가종종발생한다. 이를위해서 TCPGW 에서이옵션으로지정한시간 ( 초 ) 동안해당채널이사용되지않으면무조건채널을끊고다시연결을맺도록설정하고자하는경우에사용하는옵션이다. 이옵션은리모트노드에서 Tmax 단의서비스를요청한이후에서비스는정상적으로처리되었으나결과를리모트노드에전송할수없는경우, 이전에처리한서비스에대해서취소처리를할수있도록복구서비스를지정하는옵션이다. 즉, 리모트노드에서 Tmax 단의서비스를호출한이후에리모트노드와세션이모두끊어지면서비스처리결과는리모트노드로전송하지않고버려지게된다. 이경 Y 우에서비스는정상처리하였으나리모트노드입장에서는오류로보기때문에문 제가발생할수있다. 이런경우에사용자가이옵션에서비스명을지정하면 Gateway 는리모트로결과를전송할수없는경우에리모트노드로전송할데이터를 지정한서비스로호출하게된다. 27 Tmax TCP IP Gateway Guide

29 t TCPGW 가클라이언트모드로동작하는경우에 TCPGW 는먼저리모트노드와연결을맺게되는데만약리모트노드와맺어진연결이끊어지거나또는연결이맺어지지않는경우에이옵션을설정해주지않으면일정시간 (3 초 ) 이나서비스요청이오는경우에다시연결을맺게된다. 이럴경우잦은리모트노드와의연결시도때문에시스템에부하가발생하게된다. 이를해결하기위해리모트노드와의연결을시도하는시간간격 ( 초 ) 을정해준후 t 옵션으로이시간을지정해주면 TCPGW 는이시간간격으로리모트노드와의연결을시도하게된다. i 리모트노드로부터데이터수신시데이터의끝을나타내는특정문자혹은비트스트림이존재할경우에필요한옵션이다. 이옵션을지정하면데이터수신시사용자의 chk_end_msg 가호출된다. x 채널장애여부감지 (TCP 레벨의 PING/PONG) 기능을활성화시킨다. 인자로 0 을줄경우 (-x 0), 메인채널장애복구가감지되면바로메인채널로전환된다. 인자로 1 을줄경우 (-x 1), 메인채널장애복구가감지되더라도안전한시점 ( 채널비사용시 ) 에메인채널로전환된다. (Default: 0) 이옵션은 set_ping_msg 및 chk_pong_msg 함수와함께사용된다. y UID 로활용될수있는메시지번호 (sequence number) 의최대값을설정하는옵션이다. 기본값은 이며최대 까지지정가능하다. Tmax TCP IP Gateway Guide 28

30 3.1.2 서버 / 클라이언트 TCPGW 의환경파일 서버 / 클라이언트 TCPGW 의환경설정은아래와같다. *DOMAIN... *NODE... *SVRGROUP... *SERVER testtcpgw SVGNAME=svg1, MIN=1, MAX=1, CPC=10, SVRTYPE=CUSTOM_GATEWAY, # 클라이언트 TCPGW 의경우 1 CLOPT="-- -r p n 5 -k " # 서버 TCPGW 의경우 2 #CLOPT="-- -P N 5 -k 71673" *SERVICE TESTTCPGW SVRNAME=testtcpgw 위와같이환경파일을작성한경우 testtcpgw 라는이름의 TCPGW 는 1 개가 Tmax boot 시에 boot 되게된다. Testtcpgw 의서비스명은 TESTTCPGW 이고 Timeout 값은설정되어있지않으므로무한대기이다. 1 은 TCPGW 는클라이언트로리모트노드의 IP 주소는 이고, 리모트노드의 Listen 포트번호는 5050 이된다. testtcpgw 는기동시에리모트노드와 5 개의연결을맺는다. 2 의환경설정은서버로동작하는것으로서 Listen 포트번호는 5050 이고리모트노드와 testtcpgw 는 5 개의연결을맺게된다. 29 Tmax TCP IP Gateway Guide

31 -k 옵션으로지정한값은 custom.c 의함수 (init_remote_info()) 의인자로전달되어사용자가저장해야할내용등을이 key 를이용하여공유메모리에저장할수있다 서비스블록형 TCPGW 의환경파일 TCPGW 는일단리모트노드와연결이이루어진이후에는서버 / 클라이언트의미가없이동기형 / 비동기형모두사용할수있으므로여기서는서버 / 클라이언트모드를별도로설명하지않는다. *DOMAIN... *NODE... *SVRGROUP... *SERVER testtcpgw SVGNAME=svg1, MIN=1, MAX=1, CPC=10, SVRTYPE=CUSTOM_GATEWAY, # 클라이언트 TCPGW 의경우 CLOPT="-- -r p n 5 -k d 0" # 서버 TCPGW 의경우 #CLOPT="-- -P N 5 -k d 0" *SERVICE TESTTCPGW SVRNAME=testtcpgw, SVCTIME=30 위와같이환경파일을작성한경우 testtcpgw 라는이름의 TCPGW 는 1 개가 Tmax boot 시에 boot 되게된다. testtcpgw 의서비스명은 TESTTCPGW 이고 Timeout 30 초이므로 30 초이내에응답이없으면 Timeout 을반환한다. 단, Timeout 은 Tmax 의클라이언트나서비스에서리모트노드로요청한것에대해서만 Timeout 을 check 하고, 리모트노드에서요청한서비스에대해서는요청한해당서비스에서 Timeout 을설정해야한다. Tmax TCP IP Gateway Guide 30

32 첫째, Tmax 의클라이언트나서버에서리모트노드에서비스요청시 TCPGW 는 UID 를사용한다. UID 는메세지별유일한값으로써요청에대한응답시반드시 TCPGW 에넘겨주어야해당서비스를요청한서비스나클라이언트에게돌려주게된다. 둘째리모트노드에서서비스요청시 TCPGW 는요청에대한응답을요청한채널에전송한다. 단, 요청한채널이끊어진경우에데이터는소멸된다 서비스 NON- 블록형 TCPGW 의환경파일 이형식의 TCPGW 는일반적으로 Tmax 의서비스에서리모트노드로서비스를요청하는경우에주로사용한다. 그래서일반 Tmax 클라이언트에서는직접이방식으로서비스를호출할수없다. 즉, Tmax 클라이언트에서직접사용할수있는방식은블록형방식이나비동기방식만사용가능하다. *DOMAIN... *NODE... *SVRGROUP... *SERVER testtcpgw SVGNAME=svg1, MIN=1, MAX=1, CPC=5, SVRTYPE=CUSTOM_GATEWAY, # 클라이언트 TCPGW 의경우 CLOPT="-- -r p n 5 -k S RECVSVC -H 20 -d 0" # 서버 TCPGW 의경우 #CLOPT="-- -P N 5 -k S RECVSVC -H 20 d 0" sendsvr MIN=1, MAX=1 secvsvr MIN=1, MAX=1 *SERVICE 31 Tmax TCP IP Gateway Guide

33 TESTTCPGW SENDSVC SVRNAME=sendsvr RECVSVC SVRNAME=recvsvr SVRNAME=testtcpgw, SVCTIME=30 위와같이환경파일을작성한경우 testtcpgw 라는이름의 TCPGW 는 1 개가 Tmax boot 시에 boot 되게된다. testtcpgw 의서비스명은 TESTTCPGW 이고 Timeout 30 초이므로 30 초이내에응답이없으면 Timeout 을반환한다. Tmax 의클라이언트나서버에서먼저 SENDSVC 서비스를호출하면 SENDSVC 에서사전작업을수행한후에 TESTTCPGW 서비스로컨트롤을넘긴다.(tpforward). TCPGW 는일단 Tmax engine 에채널해제메시지를전송한후에리모트노드로서비스를요청하고, 서비스에응답을수신시 -S 옵션에지정한서비스로결과를전달 (tprelay) 한다. RECVSVC 는처리결과에대한작업을수행후리턴하면원래 SENDSVC 를호출한클라이언트나서비스에게로응답이전달된다. 이방식을사용하면적은수의서비스 ( 여기서는 SENDSVC) 를가지고보다많은처리를할수있다. 여기서도블록형처럼반드시 UID 는사용해야한다. 리모트노드의응답이지정한시간 (30 초 ) 를초과하면 TCPGW 는 Timeout 을 RECVSVC 에전달 (tprelay) 한다. 그래서 RECVSVC 서비스에서는반드시 tpurcode 값을확인하여값이 0 보다크면오류가발생한경우이므로이에대한적절한처리를하여야한다. Timeout 뿐만아니라모든오류에대해서 tpurcode 에값이전달됨으로오류의종류는부록에서설명하는오류코드명세를참조하기바랍니다 리모트동기형과비동기형 TCPGW 환경파일 리모트노드에서요청하는서비스에대한동기형비동기형구분은 -d 옵션을사용하느냐에따라서결정되거나, 또는사용자정의함수 (get_msg_info) 에서 flags 에 TPNOREPLY 를설정하면된다. 전자의경우 -d 옵션을사용하지않으면서비스에대한응답은다른채널로전송될수있다. 후자인경우에는리모트노드로응답을전송하지않는다. *DOMAIN... *NODE Tmax TCP IP Gateway Guide 32

34 ... *SVRGROUP... *SERVER testtcpgw SVGNAME=svg1, MIN=1, MAX=1, CPC=5, SVRTYPE=CUSTOM_GATEWAY, # 비동기형 CLOPT=" -- -P N 5 -k 71673" # 동기형 #CLOPT="-- -P N 5 -k d 0" *SERVICE TESTTCPGW SVRNAME=testtcpgw -d 옵션을지정하였을경우에도사용자정의함수 (get_msg_info) 에서 flags 에 TPNOREPLY 를설정하면서비스응답은리모트노드에전송되지않는다. 리모트노드에서 Tmax 의서비스요청시 TCPGW 는 tpacall 를사용함으로응답을받지않고동시에 tpacall 를사용할수있는개수가제한되어있다 (default 8 개 ). 동시에요청이 8 개이상인경우에는 *DOMAIN 절에 MAXSACALL 개수를적당하게지정해야한다 재연결 TCPGW 환경파일 보통리모트노드와통신시두채널사이에는복잡한통신장비를거쳐서통신이이루어지거나또는방어벽을사이에두는경우가많다. 이러한경우에둘사이의채널이일정시간동안사용하지않으면통신장비나또는방어벽에서해당채널을끊어서둘사이에통신이이루어지지않는경우가발생한다. 이를방지하기위해둘사이에일정간격으로 signal 를주고받을수도있으나이를위해서는 TCPGW 뿐만아니라상대방의프로그램을감안해야하기때문에이방법을사용하지않고일정시간동안해당채널을사용하지않으면채널을끊고다시연결하는방법을사용한다. 33 Tmax TCP IP Gateway Guide

35 *DOMAIN... *NODE... *SVRGROUP... *SERVER testtcpgw SVGNAME=svg1, MIN=1, MAX=1, CPC=5, SVRTYPE=CUSTOM_GATEWAY, # 비동기형 CLOPT=" -- -P N 5 -k w 600" # 동기형 #CLOPT="-- -P N 5 -k w 600" *SERVICE TESTTCPGW SVRNAME=testtcpgw 위와같이설정하면 TCPGW 는 600 초 (10 분 ) 간격으로 600 초동안한번도사용하지않은채널은연결을끊고다시연결을맺는다 여러리모트노드와연결을맺는클라이언트 TCPGW 여러노드의 ip 아래와같다. 와연결을맺는클라이언트 TCPGW 의환경설정은 *DOMAIN... *NODE... *SVRGROUP... *SERVER testtcpgw SVGNAME=svg1, Tmax TCP IP Gateway Guide 34

36 MIN=1, MAX=1, CPC=10, SVRTYPE=CUSTOM_GATEWAY, CLOPT="-- -f config -n 5 -k " *SERVICE TESTTCPGW SVRNAME=testtcpgw *config 파일 # tcpgw_no ip_addr port_no in_channel out_channel config 파일의각항목에대한설명은아래와같다. tcpgw_no TCPGW process number. 0 부터시작함 ip_addr remote hostname or ip address port_no remote port number in_channel input channel number out_channel output channel number 3.2 사용자헤더환경설정및사용방법 TCPGW 는서버 / 클라이언트모드, 동기형 / 비동기형방식모두에서사용자헤더를설정하여사용할수있다. 사용자헤더는 Tmax 클라이언트나서비스에서리모트노드로서비스를요청하는경우에만사용가능하고, 그반대인경우에는사용할수없다. 사용자헤더로지정한데이터는리모트노드로전송되지않고임시 TCPGW 에서 UID 별로보관하였다가응답이오면응답데이터에서 UID 를찿아서해당 UID 의사용자헤더데이터와응답데이터를전달하게된다. 사용자헤더데이터의길이는최대 (256 Bytes) 까지만사용할수있다. 35 Tmax TCP IP Gateway Guide

37 3.2.1 사용자헤더환경파일 사용자헤더는어떤모드에서도사용할수있는옵션이다. 사용자헤더는두가지로나누어서지정할수있는데, tpforward 방식으로사용할때 (NON 블록킹 ) 와그외의다른서비스 ( 블록형, 비동기형 ) 를사용하는경우사용자헤더길이를다르게지정할수있다. *DOMAIN... *NODE... *SVRGROUP... *SERVER testtcpgw SVGNAME=svg1, MIN=1, MAX=1, CPC=10, SVRTYPE=CUSTOM_GATEWAY, # 클라이언트 TCPGW 의경우 CLOPT="-- -r p n 5 -H 9 -h 10" # 서버 TCPGW 의경우 2 #CLOPT="-- -P N 5 -H 9 -h 10" *SERVICE TESTTCPGW SVRNAME=testtcpgw -H 옵션은모든종류의서비스요청에대해서사용자헤더를지정할때사용하는옵션이다. 그에반해 -h 옵션은단지 tpforward 방식 (NON 블록킹 ) 에서만사용할수있는옵션이다. TCPGW 는사용자헤더가지정되었을경우리모트노드로전송하는데이터중에서처음부터일반서비스는 9 Bytes, tpforward 인경우에는 10 Bytes 를보관하고나머지데이터만리모트노드에전송한다.( 위의 config 인경우 ) 리모트노드로부터응답을수신받으면보관되어있는사용자헤더와응답데이터를붙여서리턴한다. Tmax TCP IP Gateway Guide 36

38 3.2.2 사용자헤더사용방법 사용자헤더는여러가지방법으로사용할수있다. 사용자헤더는사용자가임의로사용할수있는데이터이므로여기서는여러사이트에서사용하는일반적인방법을설명한다. tprelay 나비동기서비스명지정 사용자헤더에 NON 블록형방식으로사용할경우 tprelay 될서비스를지정할수있다. 이경우에 -S 옵션으로지정한것보다우선한다. 즉사용자헤더에도서비스를지정하고, -S 옵션으로서비스를지정하였을경우 TCPGW 는먼저사용자헤더에서사용자함수 (get_service_name) 를호출하여서비스를찾고, 여기에서서비스를찾지못한경우 -S 옵션으로지정한서비스를사용한다. 비동기형방식 (tpacall 에 TPNOREPLAY) 로호출하였을경우에도응답데이터에대해서위와동일하게처리한다. Key 데이터보관 NON 블록킹모드로사용할경우송신과수신서비스로분리되는데송신서비스에서 DB 에적절한작업을처리하고리모트노드로데이터를전송하고송신서비스는종료된다. 나중에수신서비스에서송신서비스에서처리한 DB 의 Key 정보를알고자하는경우나, 또는수신서비스에리모트노드에서오류가발생한경우 DB 를되돌려놓기위한중요한데이터를보관하고자하는경우에많이사용한다. 3.3 Gateway 기타기능 Gateway 헤더 TCPGW 는 Tmax 클라이언트나서버에서호출시 Gateway 헤더를사용할수있다. 이를사용하기위해서는 TCPGW 의다른라이브러리를사용해야한다. 보통은 (libtcpgw.a, libtcpgw.so) 를사용하나 Gateway 헤더를사용하고자하는경우에는 libtcpgw.gwh.a 나 libtcpgw.gwh.so 를사용해야한다. Gateway 헤더는모든데이터버퍼의가장처음 Offset 에위치해야 37 Tmax TCP IP Gateway Guide

39 한다. 즉, 사용자헤더를사용할경우에 Gateway 헤더다음에사용자헤더가와야한다. Gateway 헤더는여러가지다목적으로사용하는데, TCPGW 에서는여러항목중에서 svc 항목만사용가능하다. 이항목은 NON 블록킹모드로사용하는경우나비동기방식으로사용할때응답데이터에대해처리할서비스명을지정하고자하는경우에사용한다. Gateway 헤더는보통사용자헤더를사용하지않을경우에응답을처리할서비스를메세지별로처리하고자하는경우에사용한다. TCPGW 는응답을처리할서비스를찾는순서는가장먼저 Gateway 헤더, 두번째는사용자헤더, 세번째는 -S 옵션으로지정한순서대로찾는다 다중응답처리 일반적인 TCPGW 처리방식은한번의요청에대해서하나의응답을받는형태이다. 그러나때에따라서여러번의응답이올수있는데이를처리하기위해서 TCPGW 는 custom.c 의 get_msg_info 함수의호출을통해서이를처리한다. 여러번의응답이오는경우에매번 get_msg_info 함수가호출되는데, 사용자는수신받은데이터가마지막데이터인지를판단하여적절한값을리턴해주면된다. 연속데이터인경우에리턴값으로 3 을리턴해주면 TCPGW 는다음데이터가있다고판단하여서비스를요청한클라이언트나서비스에응답을주지않고다음데이터를기다린다. 사용자는마지막데이터를수신한경우에 REPLY 값 (1) 를리턴해주면 TCPGW 는이전에저장한데이터와마지막데이터를서비스를요청한클라이언트나서비스에돌려준다 서비스명을찾는순서 NON 블록형 TCPGW 나또는비동기형 TCPGW 인경우리모트노드에서온요청이나응답을처리할 Tmax 의서비스가있어야한다. TCPGW 는이서비스명을알수가없으므로사용자가적당한서비스명을지정해야하는데 TCPGW 는 3 가지방식으로서비스명을찾는다. 아래에서설명하는서비스명은반드시 Tmax config 파일에등록되어있어야한다. Tmax TCP IP Gateway Guide 38

40 첫째, Gateway 헤더를사용할경우에만가능하다. Tmax 클라이언트나서비스에서 TCPGW 를요청할때 Gateway 헤더에서비스명을넣어서 TCPGW 를호출하면 TCPGW 는가장우선적으로이서비스명을사용한다. 둘째, 사용자헤더에서서비스명을찾는다. Tmax 클라이언트나서비스에서 TCPGW 를요청할때사용자헤더에서비스명을넣은후에사용자함수 get_service_name 에서서비스명을얻을수있다. 셋째, CLOPT 의 -S 옵션에지정한서비스를이용한다. 이런경우에는모든메시지에대해서동일한서비스가적용된다. 이와같은순서로 TCPGW 는서비스명을찾는다. 단, 리모트노드에서최초로서비스를요청할경우에는위의방식을따르지않고사용자가 get_msg_info 에서서비스명을지정해야한다 사용자임의의채널지정 완전한비동기방식으로 TCPGW 를구성한경우에사용자는리모트노드로전송할채널을지정할수있다. CLOPT 절에 -a 를사용한다. 완전한비동기방식은서로간에응답이없다. 응답데이터도서비스요청형식으로전달되어야한다. 예를들어 Tmax 의클라이언트나서비스에서 TCPGW 로 tpacall 에 TPNOREPLY 로호출하면 TCPGW 는서비스요청에대한 UID 와어떤정보데이터도보관하지않고리모트노드로데이터를전송하고해당서비스를종료한다. 나중에리모트노드로부터응답에대한메시지를수신받았을경우에도이를서비스요청으로처리한다. 반대인경우에 ( 리모트노드에서먼저요청 ) 도동일하게처리한다. 위와같은경우에사용자는리모트노드로전송할채널번호를지정할수있다. CLOPT 절에 -u 옵션을사용한다. 채널지정은두가지경우가있는데첫째, Tmax 에서먼저서비스를리모트노드로요청한경우 TCPGW 는 get_channel_num 함수를호출하는데사용자는전송데이터를분석하여채널을지정할수있다. 두번째는리모트노드에서먼저요청한경우인데, 리모트노드에서서비스요청시 get_msg_info 함수에서리모트노드에서요청한채널을데이터에보관하여 Tmax 서비스를호출한다. Tmax 서비스는결과를리모트노드로전송하기위해 tpacall 에 TPNOREPLY 로다시 TCPGW 로서비스를보낸다. 사용자는 get_channel_num 에서이전에보관한채널을사용하여리모트노드로 39 Tmax TCP IP Gateway Guide

41 응답을전송할수있다. 이방식을사용함으로써 TCPGW 와 Tmax engine 간의채널이블록되지않고서비스를요청한채널로응답을전송할수있다 코드변환 TCPGW 가실행되는 Machine 는모두 ASCII 코드 ( 한글은완성형 ) 를사용한다. 그러나리모트노드는사용하는코드가다른 Machine 에있어이들과메시지를주고받기위해서는코드를일치시켜야한다. 이러한코드변환은리모트에서할수도있고, 아니면 TCPGW 에서할수도있다. TCPGW 는모든코드를변환하지않고 ASCII EBCDIC, 조합형 완성형코드만을서로변환한다. TCPGW 에서리모트노드로메시지를전송하는경우에는 ASCII 에서 EBCDIC, 완성형에서조합형으로코드를변환하고, 리모트에서수신하는경우에는 EBCDIC 에서 ASCII, 조합형에서완성형으로코드를변환한다. TCPGW 는코드변환을서비스처리단위별로변환한다. 다시말해, TCPGW 는서비스단위별로송수신 Format 를등록 (Map 파일 ) 하여변환한다. 사용자는 TCPGW 와리모트노드간에코드를변환하려면모든서비스에대해서 Map 파일을등록해야한다. 또한 TCPGW 에서코드변환기능을이용하려면반드시 Gateway 헤더를사용해야만한다. 왜냐하면리모트로전송하는서비스에대해서 TCPGW 는서비스명을알수가없으므로 Gateway 헤더를사용하여 TCPGW 에리모트서비스명을전달해야하기때문이다. Gateway 헤더중 pgmname 항목에리모트서비스명을주고, TCPGW 는이항목의값으로 Map 파일을로드하여코드를변환한다. TCPGW 는 Tmax 클라이언트나서비스에서리모트로서비스요청시에는 Gateway 헤더의 pgmname 항목의값으로 Map 파일을로드하고, 리모트노드에서 Tmax 로서비스를요청하는경우에는 get_msg_info 함수에서지정한서비스명으로 Map 파일을로드한다. 여기서는사용자가 Map 파일을등록하는방법에대해서설명한다. Map 파일은사용자가텍스트파일로지정한형식에맞게등록해주면된다. # COMMSIZE 는 INPUT/OUTPUT 에서같이사용해야함으로 INPUT/OUTPUT 중 # 큰 size 의값을입력해야합니다. *COMMSIZE Tmax TCP IP Gateway Guide 40

42 1024 *INPUT # # item-name length data-type # data-type: CHAR, NUMERIC(UNPACK), KOREAN, BINARY, USER-TYPE # a 10 CHAR b 10 KOREAN c 5 NUMERIC d 10 BINARY *OUTPUT a 10 CHAR b 10 KOREAN c 5 NUMERIC d 10 BINARY e 3 USER1 e1 6 CHAR e2 10 KOREAN /e3 8 BINARY COMMSIZE 이항목은리모트노드와송수신하는데이터의길이를지정하는항목이다. 이항목은모든서비스메시지 ( 송수신포함 ) 중가장큰메시지의길이를입력해야한다. INPUT 이항목은 TCPGW 에서리모트노드로전송하는메시지에대해서등록하는항목이다. TCPGW 에서리모트노드로서비스를요청하는경우에이항목에리모트노드로요청하는메시지의 Format 를등록하고, 반대로리모트노드에서 Tmax 로서비스를요청하는경우에는 Tmax 서비스의처리결과에대한 Format 을등록한다. OUTPUT 41 Tmax TCP IP Gateway Guide

43 이항목은리모트노드에서 TCPGW 로수신받은메시지에대해서등록하는항목이다. TCPGW 에서리모트노드로서비스를요청하는경우에는리모트노드에서처리한결과를수신받는메시지의 Format 를등록하고, 반대로리모트노드에서 Tmax 로서비스를요청하는경우에는 Tmax 로서비스를요청하는메시지에대해서 Format 을등록한다. 항목명 이이름은단순히사용자가참조용으로만사용하는이름이다. TCPGW 는항목명으로인식하고내부에서는사용하지않는다. 항목길이 송수신데이터의각항목의실제길이를나타낸다. 각항목의길이만표현하면 TCPGW 내부에서 Offset 로변환하여사용한다. Offset 는항상 0 부터시작한다. 데이터타입 송수신각항목의데이터타입을지정한다. CHAR : 이타입은데이터가모든문자 ( 영문자, 숫자, 한글 ) 을포함할수있는항목을나타낸다. NUMERIC : 이타입은데이터가숫자만을나타내는경우이다. 이타입의코드변환은 CHAR 타입과동일하게코드를변환한다. 타입 NUMERIC 라해서 Integer 를나타내는것은아니다. KOREAN: 이타입의데이터는모두한글을경우에사용한다. TCPGW 는이타입의데이터는항상 2 Bytes 단위로코드를변환한다. CHAR 에서한글이포함된경우에한글과다른코드 ( 영문자, 숫, 특수문자 ) 사이에한글의시작과끝문자가포함되는데반해이타입의데이터는모두한글문자로인식하기때문에처음과끝에만한글시작과끝문자가포함된다. Tmax TCP IP Gateway Guide 42

44 BINARY: 이타입의데이터는코드를변환하지않는다. 사용자는데이터중코드를변환하지않고자하는경우에는이타입으로지정하면된다. USER-TYPE: 이타입의데이터는 Array 형식의데이터타입을지정하고자할경우에사용한다. 예를들어화면에여러개의항목이반복하서여러번나올경우에각항목을반복횟수만큼등록해야하는번거로움이있다. 또는반복횟수를데이터로표현하는경우에는몇번의반복이되는지를알수없어코드변환이어렵다. 이를위해서사용자는사용자정의타입을지정하여 Array 형태의데이를쉽게변환할수있다. 위의 Map 파일에서 USER1 는사용자가지정한사용자정의타입이다. 타입이름은사용자가임의로지정하면된다. 사용자정의타입의데이터는 Array 데이터의반복을나타내는항목이므로반드시숫자로이루어져야한다. TCPGW 는사용자정의타입을만나면이를 Array 의횟수로인식한다. Array 의끝은마지막항목의이름을 / 로시작하면된다. 위의경우에는 e1, e2, e3 을 Array 항목으로인식해서 e 항목으로지정한횟수만큼코드를변환한다. Array 횟수는 Map 파일에등록하지않고 TCPGW 와리모트노드사이에데이터전문에표현한다. 3.4 TCP/IP Gateway 사용자프로그램 (custom.h, custom.c) Tmax 의환경을설정하여 TCPGW 를등록한후에 TCPGW 를사용하기위해해야할일은 custom.h, custom.c 를적절히수정하는일이다. 먼저 custom.h 에서해야할일은 msg_header_t 구조체를 TCPGW 를사용하고자하는목적에맞게수정하는일이다. TCP/IP 는가변길이의데이터를처리하기가곤란하다. 왜냐하면데이터의끝을알수가없으므로언제데이터수신을종료해야할지모르기때문이다. 그래서 TCPGW 는 msg_header_t 구조체를사용하여리모트노드와메세지헤더를설정하여실데이터의길이를구할수있는구조로되어있다. 이구조체의정보는 43 Tmax TCP IP Gateway Guide

45 TCPGW 와리모트노드사이에메세지헤더를지정하는구조체이므로해당리모트노드와통신시사용하는메세지헤더를등록해주면된다. TCPGW 는리모트노드로부터데이터수신시먼저 msg_header_t 의길이만큼데이터를수신받고 msg_header_t 의구조체에서실데이터의길이를얻은후에실데이터를수신받는다. 그러므로 msg_header_t 는정확하게등록해야만둘사이의통신이원활히이루어진다. 사용자가정의한 msg_header_t 의정보는 TCPGW 와리모트노드의통신에서만사용하고서비스호출시에는전달되지않는다. custom.h 를수정한이후에는 custom.c 를적절하게수정해야한다. custom.c 에는여러가지사용자정의함수가있는데각각에대해서는아래설명을참조하기바란다. 이렇게수정한 custom.h, custom.c 와 TCPGW 라이브러리및 register.c 를링크하여컴파일하면 TCPGW 가완성된다. 이때생성된실행파일명은 Tmax 환경파일의 SERVER 절에등록된이름과동일해야한다 custom.h 수정 custom.h 는 TCPGW 에서사용되는 msg_info_t 구조체를포함하는파일로서사용자가리모트노드와 TCPGW 간에통신해야할기타메시지구조체나헤더들을수정할수있다. 그러나 msg_info_t 구조체는 TCPGW 라이브러리내부와사용자함수사이에사용하므로멤버변수나타입, 길이등을수정해서는안된다. TCPGW 에서사용되는 msg_info_t 구조체는다음과같다. typedef struct msg_info char svc[20]; int err; int len; int uid; int flags; /* flags 를설정한다. (TPNOREPLY 등 ) */ int msgtype; int channel_id; msg_info_t; Tmax TCP IP Gateway Guide 44

46 이구조체는 TCPGW 라이브러리내부와사용자가수정해야하는 custom.c 파일의함수에서사용된다. custom.c 파일에서는리모트노드로부터메시지를수신한직후불리우는 get_msg_info() 함수에서이구조체에값을적절히설정을해야한다. 또한리모트노드로메시지를송신하기직전에불리우는함수인 put_msg_info() 함수에서이구조체의값으로리모트노드로송신한데이터를적절히구성해야한다. get_msg_info() 와 put_msg_info() 의수정사항에대한좀더자세한내용은 custom.c 수정에서설명하도록한다. 또한 custom.h 에는리모트노드와 TCPGW 사이에서메세지헤더데이터구조를정의해주어야한다. TCPGW 에서일반적으로사용되는메세지헤더 (msg_header_t) 구조체는다음과같다 typedef struct msg_header int length; msg_header_t; custom.c 수정 custom.c 는개발자가리모트노드와 TCPGW 가통신하기위해구현해야하는것으로 TCPGW 라이브러리 (libtcpgw.a, libtcpgw.so) 와함께컴파일해서사용해야한다. 이 custom.c 는정의된형식에맞게구현해야하며그형식은다음과같다. custom.c 에는아래와같은변수를정의해주어야한다. 변수명 : msg_header_size 설명 : 이변수는라이브러리내부에서사용자가정의한메시지헤더의사이즈로인식되어사용된다. 따라서이변수는아래의사용법처럼사용자정의메시지헤더사이즈로설정해주어야한다. 45 Tmax TCP IP Gateway Guide

47 사용법 : int msg_header_size = sizeof(msg_header_t); 변수명 : comm_header_size 설명 : 사용법 : 이변수는만약 msg_header_size 가 0 으로설정된경우이변수가 msg_header_size 와같은용도로쓰이게된다. 만약 msg_header_size 변수와함께정의가된경우는 msg_header_size 값을사용하게된다. int comm_header_size = 0; 또한 custom.c 에는아래와같은함수를구현해주어야한다. 함수명 : init_remote_info 설명 : 사용법 : 이함수는리모트노드와연결을맺기에앞서호출된다. 즉 TCPGW 가자신의초기화작업을마친후에곧바로호출되는함수이다. 이함수는한번만호출된다. Tmax 환경파일의 CLOPT 절에 k 옵션으로공유메모리키를설정한경우연결에대한정보등을저장하기위해공유메모리를생성하는로직을구현할수있다. 이부분은경우에따라내부로직을구현하지않아도된다. int init_remote_info(char *myname, int mynumber, int num_channel, int key) myname TCPGW 서버명이다. mynumber 같은 TCPGW 가동시에여러개실행될경우에각각의프로세스를구분할수있는 TCPGW 프로세스번호이다. Tmax TCP IP Gateway Guide 46

48 이값은 0 부터시작한다. num_channel TCPGW 가연결하고있는 max 채널수이다. Tmax 환경파일에 -n, -N 옵션으로설정한값의합이다. key Tmax 환경파일에서 k 옵션으로설정한공유메모리키값이다. 함수명 : remote_connected 설명 : 사용법 : 이함수는리모트노드와연결을맺은후호출되는함수이다. 만약리모트노드와연결을맺은후해야할작업이있다면이함수에서하도록한다. 이함수는채널수만큼호출된다. 또한도중에채널이해제되었다가다시연결될때도호출된다. int remote_connected(int index, int addr, int type, int fd) index TCPGW 가 -n 또는 -N 옵션으로여러개의 channel 을연결하고있는경우각각의채널에대한자신의 index 값이다. addr 리모트노드의주소이다. type 리모트노드와연결된채널타입이다. IN_CHANNEL 또는 OUT_CHANNEL 인지를나타낸다. fd 리모트노드와연결된 socket 번호이다. 47 Tmax TCP IP Gateway Guide

49 함수명 : remote_closed 설명 : 사용법 : 이함수는리모트노드와연결을종료한후호출되는함수이다. 만약리모트노드와연결이끊어진후에해야할작업이있다면이함수에서하도록한다. init_remote_info 함수에서 shared memory 를생성하는로직을구현한경우이함수에서해제하는작업로직을구현한다. 이함수도채널수만큼호출된다. int remote_closed(int index, int type) index TCPGW 가 -n 또는 -N 옵션으로여러개의채널을연결하고있는경우각각의채널에대한자신의 index 값이다. type 리모트노드와연결된채널타입이다. IN_CHANNEL 또는 OUT_CHANNEL 인지를나타낸다. 함수명 : get_msg_length 설명 : 사용법 : 이함수는리모트노드으로부터요청이나응답이도착하여, 해당채널에서 msg_header_t 부분만을 recv(msg_header_size 또는 comm_header_size 에서지정한값만큼을읽는다.) 한후호출하는함수로여기에서 return 된값만큼, 실데이터를다시 read 하게된다. int get_msg_length(msg_header_t *hp) hp 개발자가 custom.h 에정의할수있는 msg_header_t 구조체의포인터이다. 일반적으로, 해당채널로부터 Tmax TCP IP Gateway Guide 48

50 데이터를읽는경우, 정해진헤더의크기만큼데이터를읽은후에헤더에설정되어있는데이터길이값을얻어서이를바탕으로다음실데이터를읽을수있도록되어있다. 이 hp 는 TCPGW 가리모트노드로부터읽은헤더데이터를넘겨준다. 리턴값 : 리모트노드로부터실데이터의길이를리턴한다. 이함수의리턴값으로 TCPGW 는실데이터를리모트노드에서읽게된다. 함수명 : get_msg_info 설명 : 사용법 : 이함수는리모트노드으로부터요청이나응답이도착하여데이터를읽은후이데이터를 Tmax 서비스프로그램으로다시요청이나응답를전송하기전에해당데이터값을가공하거나, 정보전송을위한여러정보 (uid, len, flags, service 명등 ) 들을 TCP/IP Gateway library 와 custom.c 와의 interface 역할을하는 info 를참조, 또는가공하는함수이다. int get_msg_info(msg_header_t *hp, char *data,msg_info_t *info) hp 리모트노드로부터읽어온메시지헤더데이터대한포인터이다. get_msg_length 에서사용한구조체와동일하다. data 리모트노드로부터읽은데이터부분이다. info TCP/IP Gateway library(libtcpgw.a, libtcpgw.so) 와 custom.c 와 interface 역할을해주는 structure 구조이다. 사용자가수신받은데이터를기초로해서 info 49 Tmax TCP IP Gateway Guide

51 구조체의항목에각종정보를이함수에서설정한다. 리턴값 : Tmax 서비스로보낼 type 을정의한다. TCPGW 는이값을바탕으로 Tmax 로어떤처리를할것인지를판단한다. 예를들어, REMOTE_REQUEST 는리모트노드로부터 Request 가발생한것으로판단하며, REMOTE_REPLY 는 Tmax 서비스로부터 Request 가발생하여리모트노드로부터 Response 가오는경우리턴하는값이다. REMOTE_REPLY_CONT 는 Response 메시지가이어서올경우리턴하는값이며, REMOTE_SENDTOCLI 는비요청메시지일경우리턴하는값이다. 리모트노드로부터응답을수신한경우에는반드시 UID 값을 info 구조체의 uid 항목에지정해주어야한다. 그리고기타다른값들상황에맞게주어야한다. 함수명 : get_channel_num 설명 : 사용법 : Tmax 서비스나클라이언트로부터요청한데이터를리모트노드에전송할때사용자가채널을선택할수있도록하는함수이다. 사용자는주어진데이터의특성에따라서전송할채널을지정할수있다. 단여기서지정하는것은리모트노드와연결된 socket 번호가아니라단순한채널번호이다. TCPGW 는사용자가지정한채널을사용할수없으면오류를반환한다. int get_channel_num(char *data) data 리모트노드로보내기위한데이터이다. 리턴값 : 채널번호를반환한다. Tmax TCP IP Gateway Guide 50

52 함수명 : put_msg_info 설명 : 사용법 : 이함수는리모트노드로메시지를전송하고자할때호출되는함수이다. 동기형통신인경우에는사용자가이함수에서 UID 를메시지에 Save 하여야한다. UID 는 info 구조체의 uid 항목의값을사용해도되고, 또는사용자가임의의 UID 를만들어서사용한후에 info 의 uid 항목에넣어주면된다. 또한, 사용자는이함수에서 msg_header_t 의구조체의각각의항목에적절한값을저장해야한다. 이구조체는사용자가임으로설정할수있는항목이기때문에 TCPGW 에서는 msg_header_t 의구조체항목에어떤값도저장하지않는다. int put_msg_info(msg_header_t *hp, char *data, msg_info_t *info) hp 리모트노드로보낼메시지의헤더이다. data 리모트노드로보낼데이터이다. info 리모트노드로보낼데이터의정보이다. 리턴값 : 사용자는이함수에서실제적으로리모트노드에전송할데이터의전체길이를반환해야한다. 즉메시지헤더와실데이터를더한길이를반환한다. 함수명 : put_msg_complete 설명 : 51 Tmax TCP IP Gateway Guide

53 사용법 : 이함수는리모트노드로메시지를전송한후에호출되는함수이다. 데이터가완전히리모트노드에전송되었다는것을알려주기위해서호출되는함수이다. int put_msg_complete(msg_header_t *hp, char *data, msg_info_t *info) hp 리모트노드로보낸메시지의헤더이다. data 리모트노드로보낸데이터이다. info 리모트노드로보낸데이터의정보이다. 함수명 : get_service_name 설명 : Tmax에서리모트노드로요청을보낼때요청을보내는서버와결과를받는서버를달리하는 NON 블록형이나비동기형 TCPGW를구성하는경우, tpreply() 나 tpacall() 을할서비스의이름을오류코드에따라서설정한다. 사용법 : int get_service_name(char *header, int err, char *svc) header -H 또는 -h 옵션으로설정한, TCPGW 에서저장하고있는사용자헤더의포인터이다. err 오류코드이다. svc tpreply() 나 tpacall() 를받는서비스의이름을설정한다. Tmax TCP IP Gateway Guide 52

54 함수명 : prepare_shutdown 설명 : 이함수는이 TCPGW가종료하기직전에 call되는함수로서, 일반적으로 init_remote_info() 함수에서생성한공유메모리를해제하는일등을이함수에서한다. 사용법 : int prepare_shutdown(int code) code shutdown code 로써현재는사용되지않는다. 함수명 : set_service_timeout 설명 : 사용법 : 이함수는서비스타임아웃이발생하였을경우사용자가호출할수있는함수이다. int set_service_time_out(int uid, char *header) uid header 서비스타임아웃이발생한거래의 unique id 서비스타임아웃이발생한거래의 header 함수명 : chk_end_msg 설명 : 53 Tmax TCP IP Gateway Guide

55 사용법 : 이함수는리모트노드로부터데이터수신시데이터의끝을나타내는특정문자혹은비트스트림이존재할경우사용자가호출할수있는함수이다. int chk_end_msg(int len, char *data) len 리모트노드로부터읽은데이터길이이다. data 리모트노드로부터읽은데이터부분이다. 함수명 : inmsg_recovery 설명 : 사용법 : 이함수는리모트노드로부터요청을 tpacall(..., TPBLOCK) 로처리했을경우서버가떠있지않으면에러가돌아오게되는데, 이러한때에호출된다. 사용자는함수내에서적당히새로운데이터를만들고, 데이터의크기를반환한다. int inmsg_recovery(char *data, msg_info_t *info) data 리모트노드로부터읽은데이터부분이다. info 리모트노드로부터읽은데이터의정보이다. 이중의미있는값은다음과같다. info->svc : tpacall() 했었던서비스이름 info->len : tpacall() 한데이터길이 info->err : 에러시 tperrno Tmax TCP IP Gateway Guide 54

56 info->uid : 이전 get_msg_info() 시에생성되었던 UID 값 리턴값 : 사용자는이함수에서새로운데이터의길이를반환해야한다. 데이터의길이가 0 보다클경우, info->svc 에값이존재하면해당서비스로 tpacall(..., TPNOREPLY) 하고, 그외에는리모트노드로응답을보낸다. 데이터의길이가음수일경우데이터를버린다. 함수명 : outmsg_recovery 설명 : 이함수는리모트노드로요청을보낼때에러가발생할경우호출된다. 사용자는함수내에서적당히새로운데이터를만들고원하는서비스이름및 UID 등을설정하고, 데이터의크기를반환한다. 사용법 : int outmsg_recovery(char *data, msg_info_t *info) data 리모트노드로보낼데이터이다. info 리모트노드로보낼데이터의정보이다. 이중의미있는값은다음과같다. info->len : 데이터길이 info->uid : TCPGW 가임의로생성한 UID 값 info->msgtype : 1000 이상이면외부로응답을보내다에러발생 에러발생 1000 미만이면외부로요청을보내다 55 Tmax TCP IP Gateway Guide

57 info->err : TPECLOSE 이면응답을기다리다채널이끊어진경우 그외에는요청을보내려다에러가발생한경우 리턴값 : 사용자는이함수에서새로운데이터의길이를반환해야한다. 데이터의길이가 0 보다클경우, info->svc 에값이존재하면해당서비스로 tpacall(..., TPNOREPLY) 하고, 그외에는 info->msgtype 이 1000 이상이면데이터를버리고 info->msgtype 이 1000 미만이면데이터를 call 한쪽으로되돌려준다. 함수명 : get_extmsg_info 설명 : 사용법 : 이함수는 get_msg_info 와기본적으로기능은동일하다. 단, 데이터버퍼를더블포인터형으로넘겨서사용자가버퍼의메모리를재할당 (realloc) 할수있다. 이함수는 get_msg_info 와동시에사용될수없으며, 사용을위해서는 TCPGW 컴파일시 -D_TCPGW_USE_EXTMSG 플래그를설정해야한다. int get_extmsg_info(msg_header_t *hp, char **data, int asize, msg_info_t *info) hp 리모트노드로부터읽어온메시지헤더데이터대한포인터이다. get_msg_length 에서사용한구조체와동일하다. data 리모트노드로부터읽은데이터버퍼의주소값이다. asize 리모트노드로부터읽은데이터버퍼에할당된메모리 Tmax TCP IP Gateway Guide 56

58 크기이다. info TCP/IP Gateway library(libtcpgw.a, libtcpgw.so) 와 custom.c 와 interface 역할을해주는 structure 구조이다. 사용자가수신받은데이터를기초로해서 info 구조체의항목에각종정보를이함수에서설정한다. 리턴값 : Tmax 서비스로보낼 type 을정의한다. TCPGW 는이값을바탕으로 Tmax 로어떤처리를할것인지를판단한다. 예를들어, REMOTE_REQUEST 는리모트노드로부터 Request 가발생한것으로판단하며, REMOTE_REPLY 는 Tmax 서비스로부터 Request 가발생하여리모트노드로부터 Response 가오는경우리턴하는값이다. REMOTE_REPLY_CONT 는 Response 메시지가이어서올경우리턴하는값이며, REMOTE_SENDTOCLI 는비요청메시지일경우리턴하는값이다. 리모트노드로부터응답을수신한경우에는반드시 UID 값을 info 구조체의 uid 항목에지정해주어야한다. 그리고기타다른값들상황에맞게주어야한다. 함수명 : put_extmsg_info 설명 : 사용법 : 이함수는 put_msg_info 와기본적으로기능은동일하다. 단, 데이터버퍼를더블포인터형으로넘겨서사용자가버퍼의메모리를재할당 (realloc) 할수있다. 이함수는 put_msg_info 와동시에사용될수없으며, 사용을위해서는 TCPGW 컴파일시 -D_TCPGW_USE_EXTMSG 플래그를설정해야한다. int put_extmsg_info(msg_header_t *hp, char **data, int asize, msg_info_t *info) 57 Tmax TCP IP Gateway Guide

59 hp 리모트노드로보낼메시지의헤더이다. data 리모트노드로보낼데이터버퍼의주소값이다. asize 리모트노드로보낼데이터버퍼에할당된메모리크기이다. info 리모트노드로보낼데이터의정보이다. 리턴값 : 사용자는이함수에서실제적으로리모트노드에전송할데이터의전체길이를반환해야한다. 즉메시지헤더와실데이터를더한길이를반환한다. 함수명 : set_ping_msg 설명 : 사용법 : 이함수는채널장애감시를위해서보내어질메시지설정및주기, 타임아웃등을설정할수있는사용자함수이다. x 옵션을지정할경우반드시설정해주어야한다. int set_ping_msg(msg_header_t *hp, int *interval, int *binterval, int *timeout, int *mode) hp 채널장애감시를위해서주기적으로보내지는메시지이다. 사용자는이메시지를설정해야한다. interval 채널장애감시주기이다. ( 단위 : 초 ) 0 일경우, 채널장애감지기능은비활성화된다. Tmax TCP IP Gateway Guide 58

60 binterval 백업채널모드일때, 메인채널의상태를체크주기이다. ( 단위 : 초 ) 0 일경우, 메인채널의상태체크기능은비활성화된다. timeout 채널장애감시타임아웃이다. 타임아웃내에응답이오지않으면채널은끊어진다. ( 단위 : 초 ) 0 일경우, PING 메시지만보내고 PONG 메시지에대해서는신경쓰지않는다. (Half Duplex 장애감지 ) mode 장애감시할채널종류를지정한나. 0 은 OUT 채널, 1 은 IN 채널, 2 는모든채널을의미한다. 리턴값 : 에러발생시음수값을반환해야하며, 이경우장애감시기능은비활성화된다. 함수명 : chk_pong_msg 설명 : 사용법 : 이함수는채널장애감시응답메시지여부를체크하는사용자함수이다. int chk_pong_msg(msg_header_t *hp) hp 리모트단으로부터수신된메시지이다. 리턴값 : 59 Tmax TCP IP Gateway Guide

61 채널장애감시응답메시지이면서정상적일경우양수값을반환하며, 비정상적일경우음수값을반환한다. 채널장애감시응답메시지가아닐경우는 0 을반환한다. 음수값을반환할경우, 채널은끊어진다. 이절에서설명한함수들의사용예제는 4 장. 예제에서설명하도록한다 register.c 수정 사용자함수등록파일로서, 사용자가등록한함수들만게이트웨이라이브러리에서호출된다. 게이트웨이컴파일시, 반드시 register.c 를포함시켜야한다. 사용하지않는함수는 NULL 등록하면된다. <register.c> #include <stdio.h> #include "custom.h" extern int init_remote_info(char *myname, int mynumber, int num_channel, int key); extern int prepare_shutdown(int code); extern int remote_connected(int index, int addr, int portno, int type, int fd); extern int remote_closed(int index, int type); extern int get_msg_length(msg_header_t *hp); extern int get_msg_info(msg_header_t *hp, char *data, msg_info_t *info); extern int put_msg_info(msg_header_t *hp, char *data, msg_info_t *info); extern int put_msg_complete(msg_header_t *hp, char *data, msg_info_t *info); extern int get_channel_num(char *data); extern int get_service_name(char *header, int err, char *svc); extern int set_service_timeout(int uid, char *header); extern int get_msg_security(char **data, int asize, int len); extern int put_msg_security(char **data, int asize, int len); Tmax TCP IP Gateway Guide 60

62 extern int chk_end_msg(int len, char *data); extern int get_extmsg_info(msg_header_t *hp, char **data, int asize, msg_info_t *info); extern int put_extmsg_info(msg_header_t *hp, char **data, int asize, msg_info_t *info); extern int inmsg_recovery(char *data, msg_info_t *info); extern int outmsg_recovery(char *data, msg_info_t *info); extern int set_ping_msg(msg_header_t *hp, int *interval, int *bintrval, int *timeout, int *mode); extern int chk_pong_msg(msg_header_t *hp); /*************************************************************** * int * _register_custom() * * returns no used * [function number] * 1. init_remote_info * 2. prepare_shutdown * 3. remote_connected * 4. remote_closed * 5. get_msg_length * 6. get_msg_info * 7. put_msg_info * 8. put_msg_complete * 9. get_channel_num * 10. get_service_name * 11. set_service_timeout * 12. get_msg_security * 13. put_msg_security * 14. chk_end_msg * 15. get_extmsg_info * 16. put_extmsg_info * 17. inmsg_recovery * 18. outmsg_recovery * 19. set_ping_msg * 20. chk_pong_msg 61 Tmax TCP IP Gateway Guide

63 ***************************************************************/ int _register_custom() _tcpgw_regfn(1, init_remote_info); _tcpgw_regfn(2, prepare_shutdown); _tcpgw_regfn(3, remote_connected); _tcpgw_regfn(4, remote_closed); _tcpgw_regfn(5, get_msg_length); _tcpgw_regfn(6, get_msg_info); _tcpgw_regfn(7, put_msg_info); _tcpgw_regfn(8, put_msg_complete); _tcpgw_regfn(9, get_channel_num); _tcpgw_regfn(10, get_service_name); _tcpgw_regfn(11, set_service_timeout); _tcpgw_regfn(12, get_msg_security); _tcpgw_regfn(13, NULL); _tcpgw_regfn(14, chk_end_msg); _tcpgw_regfn(15, NULL); _tcpgw_regfn(16, NULL); _tcpgw_regfn(17, NULL); _tcpgw_regfn(18, NULL); _tcpgw_regfn(19, NULL); _tcpgw_regfn(20, NULL); return 1; Tmax TCP IP Gateway Guide 62

64 4 예제 본장에서는 2 장에서설명한 TCPGW 의각역할에대한예제에대해설명하도록한다. 4.1 OUTBOUND TCPGW 예제 개요및프로그램내용 TCPGW 가 Tmax 기동시에 boot 되어있다가리모트노드의요청이수신되면, 사용자가지정한서비스를호출한후에다시리모트노드로처리결과를주는예제이다. TCPGW 의클라이언트 / 서버방식에관계가없다. 그리고리모트노드의상황에맞게 custom.c 를수정하여 TCPGW 를구성한다. 그림 4-1 OUTBOUND TCP/IP Gateway 63 Tmax TCP IP Gateway Guide

65 4.1.2 프로그램구성 Config file TCPGW Server Remote Node : tcpgw.m : custom.c, custom.h : svr.c : rclient.c, custom.h <tcpgw.m> *DOMAIN res SHMKEY = 88000, MINCLH = 1, MAXCLH = 1, TPORTNO = 8888 *NODE node1 TMAXDIR="/home/tmax", APPDIR="/home/tmax/appbin" *SVRGROUP svg1 NODENAME = node1 *SERVER tcpgw SVGNAME = svg1, MIN = 1, MAX = 1, CPC = 5, SVRTYPE = CUSTOM_GATEWAY, CLOPT = "-- -P N 2 d 0" svr SVGNAME = svg1, MIN = 1, MAX = 1 *SERVICE TOUPPER SVRNAME = svr Tmax TCP IP Gateway Guide 64

66 <custom.h> #ifndef _CUSTOM_H_ #define _CUSTOM_H_ /* */ /* Fixed structures and macros */ #define MSG_MAGIC "Tmax" #define REMOTE_REQUEST 0 #define REMOTE_REPLY 1 #define SVC_NAME_LENGTH 20 /* 이 msg_info_t 는개발자가재정의하면안되는구조체이다. */ typedef struct msg_info char svc[svc_name_length]; int err; int len; int uid; int flags; int msgtype; int channel_id; msg_info_t; /* */ /* Modifiable structures and macros */ /* 이 msg_header_t 와 msg_body_t 는개발자가재정의가능한구조체이다. */ typedef struct msg_header int len; msg_header_t; typedef struct msg_body char name[16]; char data[100]; msg_body_t; 65 Tmax TCP IP Gateway Guide

67 #endif <custom.c> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <sys/types.h> #include <sys/timeb.h> #include "custom.h" /* msg_header_size 와 comm_header_size 는 TCPGW 라이브러리내에서사용되기때문에정의해주어야한다. */ int msg_header_size = sizeof(msg_header_t); int comm_header_size = 0; /* 아래의함수들은필요하지않은경우내부로직은구현하지않아도된다. */ /* 그러나 TCPGW 라이브러리내에서사용되기때문에정의는해주어야한다. */ int init_remote_info(char *myname, int mynumber, int num_channel, int key) return 1; int remote_connected(int index, int addr, int type, int fd) return 1; int get_msg_length(msg_header_t *hp) if (hp == NULL hp->len <= 0) return -1; /* 실제데이터의길이를리턴한다. */ /* 여기서리턴하는값으로리모트노드에서오는데이터를읽는다. */ Tmax TCP IP Gateway Guide 66

68 return ntohl(hp->len); int get_msg_info(msg_header_t *hp, char *data, msg_info_t *info) msg_body_t *body; if ((info == NULL) (hp == NULL) (data == NULL)) return -1; body = (msg_body_t *)data; info->len = ntohl(hp->len); info->err = 0; info->flags = 0; memset(info->svc, 0x00, SVC_NAME_LENGTH); strncpy(info->svc, body->name, 8); /* 리모트노드에서요청이들어오므로 REMOTE_REQUEST 를반환한다. */ return REMOTE_REQUEST; int get_service_name(char *header, int err, char *svc) return -1; int put_msg_info(msg_header_t *hp, char *data, msg_info_t *info) msg_body_t *body; if ((info == NULL) (hp == NULL) (data == NULL)) return -1; hp->len = htonl(info->len); body = (msg_body_t *)data; 67 Tmax TCP IP Gateway Guide

69 /* body->name 을이용하여에러유무전송 */ if (info->err) /* error */ strcpy(body->name, "Fail"); else strcpy(body->name, "Success"); /* 리모트노드로요청에대한결과를전송하기위한데이터길이를반환한다. */ return (info->len + sizeof(msg_header_t)); int get_channel_num(char *data) return -1; int put_msg_complete(char *hp, char *data, msg_info_t *info) return 1; int remote_closed(int index, int type) return 1; int prepare_shutdown(int code) return 1; int set_service_timeout(int uid, char *header) return 1; Tmax TCP IP Gateway Guide 68

70 int chk_end_msg(int len, char *data) return len; int outmsg_recovery(char *data, msg_info_t *info) return -1; int inmsg_recovery(char *data, msg_info_t *info) return -1; 69 Tmax TCP IP Gateway Guide

71 <Makefile> # 이 Makefile 은 ibm 32bit 용이다. #TARGET 은 Tmax 환경파일에서정의한 SERVER 이름과같아야한다. TARGET = tcpgw APOBJS = $(TARGET).o #TCPGW 를생성하기위해서는 libtcpgw.a 혹은 libtcpgw.so 를링크시켜야한다. LIBS = -ltcpgw -ltmaxgw OBJS = custom.o register.o CFLAGS = -q32 -O -I$(TMAXDIR) -D_DBG LDFLAGS = -brtl APPDIR = $(TMAXDIR)/appbin LIBDIR = $(TMAXDIR)/lib.SUFFIXES :.c.c.o: $(CC) $(CFLAGS) $(LDFLAGS) -c $< $(TARGET): $(OBJS) $(CC) $(CFLAGS) $(LDFLAGS) -L$(LIBDIR) -o $(TARGET) $(OBJS) $(LIBS) mv $(TARGET) $(APPDIR)/. rm -f $(OBJS) $(APOBJS): $(TARGET).c $(CC) $(CFLAGS) $(LDFLAGS) -c $(TARGET).c Tmax TCP IP Gateway Guide 70

72 <svr.c> #include <stdio.h> #include <string.h> #include <usrinc/atmi.h> TOUPPER(TPSVCINFO *msg) int i; printf("toupper service is started!\n"); printf("input : len=%d, data='%s'\n", msg->len, msg->data); for (i = 0; i < msg->len; i++) msg->data[i] = toupper(msg->data[i]); printf("output: len=%d, data='%s'\n", strlen(msg->data), msg- >data); tpreturn(tpsuccess,0,(char *)msg->data, msg->len, 0); 71 Tmax TCP IP Gateway Guide

73 <rclient.c> ( 이예제프로그램은테스트를위한리모트노드의클라이언트프로그램이다. 테스트를위해서는 TCPGW 가기동된후이프로그램을기동시켜야한다.) #include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #include "custom.h" #define SERV_ADDR " " #define SERV_PORT 5050 int main(int argc, char *argv[]) int n, i, fd, ilen, olen; msg_header_t *header; msg_body_t *body, *result; /* 1 TCPGW 로연결을맺는다. */ if ( (fd = network_connect()) < 0 ) perror("network connect error:"); return -1; #ifdef _DBG printf("connected to TCP/IP Gateway: fd = %d \n", fd); #endif /* 2 전문을구성한다. */ /* Message Header */ header = (msg_header_t *)malloc(sizeof(msg_header_t)); memset(header, 0x00, sizeof(msg_header_t)); header->len = sizeof(msg_body_t); #ifdef _DBG printf("dbg : header->len = %d\n", header->len); Tmax TCP IP Gateway Guide 72

74 #endif /* Message Body */ body = (msg_body_t *)malloc(sizeof(msg_body_t)); memset(body, 0x00, sizeof(msg_body_t)); strncpy(body->name,"toupper", 16); for (i = 0; i < 1; i++) /* 3 TCPGW 로데이터를송신한다. */ if ( (n = send(fd, (char *)header, sizeof(msg_header_t), 0)) < 0 ) perror("network write error:"); close(fd); return -1; printf("msg header send!\n"); /* Message Body */ strncpy(body->data, argv[1], 100); #ifdef _DBG printf("name = %s\n", body->name); printf("msg body sending! [name:'%s', data='%s']\n", body- >name, body->data); #endif if ( (n = send(fd, (char *)body, sizeof(msg_body_t), 0)) <= 0 ) perror("network write error:"); close(fd); return -1; /* 4 TCPGW 로데이터를수신한다. */ if ( (n = recv(fd, (char *)&olen, 4, 0)) < 0 ) perror("network read error:"); close(fd); return -1; 73 Tmax TCP IP Gateway Guide

75 #ifdef _DBG printf("\n\nreturn len = %d \n", olen); #endif result = (msg_body_t *)malloc(olen); memset((char *)result, 0x00, olen); if ( (n = recv(fd, (char *)result, olen, 0)) <= 0 ) perror("network read error:"); close(fd); return -1; #ifdef _DBG printf("return [name = '%.*s', data = '%.*s']\n\n", sizeof(result->name), result->name, sizeof(result->data), result- >data); #endif /* 5 TCPGW 와연결을끊는다. */ close(fd); return 1; int network_connect() struct sockaddr_in serv_addr; int fd; memset((char *)&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = inet_addr(serv_addr); serv_addr.sin_port = htons((unsigned short)serv_port); if ((fd = socket(af_inet, SOCK_STREAM, 0)) < 0) #ifdef _DBG Tmax TCP IP Gateway Guide 74

76 printf("socket init error"); #endif return -1; if (connect(fd, (struct sockaddr *) &serv_addr,sizeof(serv_addr)) >= 0) return fd; close(fd); return -1; 75 Tmax TCP IP Gateway Guide

77 4.2 동기 TCPGW 예제 ( INBOUND ) 개요및프로그램내용 Tmax 클라이언트에서 ( 또는 Tmax 서비스에서 ) TCPGW 의서비스인 TCPGW 를 tpcall 하면 TCPGW 는리모트노드로데이터를전송한다. 리모트노드에서처리결과가수신되면해당클라이언트에게결과를리턴한다. Tmax 클라이언트에서리모트노드로서비스를요청할때중요한점은 UID 를설정하는일이다. 이 UID 는 TCPGW 라이브러리내부에서지정하는값 (info->uid) 을 put_msg_info 에서전문내용에저장하거나또는사용자가 UID 를만들어서전문내용에저장한후에 UID 값을 uid 항목에넣어주면된다. 이렇게 UID 를전문에저장하고리모트노드로요청을보내면리모트노드에서는해당 UID 를변경하지말고그대로되돌려주어야한다. TCPGW 는응답을수신한후에 get_msg_info 함수를호출하여 UID 값을가져와누가 TCPGW 를호출했는지를판단하여응답을리턴한다. 아래의예제는 TCPGW 가클라이언트로기동되는것이므로 Tmax 환경파일의 CLOPT 절에 -r, -p, -n 옵션을설정해준다. 그리고리모트노드의상황에맞게 custom.c 를수정하여 TCPGW 를구성한다. Tmax TCP IP Gateway Guide 76

78 그림 4-1 동기 INBOUND TCP/IP Gateway 프로그램구성 Config file TCPGW Remote Node Client : tcpgw.m : custom.c, custom.h : rserver.c, network.c, custom.h : cli_tcpgw.c, custom.h 77 Tmax TCP IP Gateway Guide

Tmax

Tmax Tmax Gateway Guide (TCP/IP) Tmax v5.0 SP1 Copyright 2009 TmaxSoft Co., Ltd. All Rights Reserved. Copyright Notice Copyright 2009 TmaxSoft Co., Ltd. All Rights Reserved. 대한민국경기도성남시분당구서현동 263 분당스퀘어 (AK 프라자

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Network Programming Jo, Heeseung Network 실습 네트워크프로그래밍 멀리떨어져있는호스트들이서로데이터를주고받을수있도록프로그램을구현하는것 파일과는달리데이터를주고받을대상이멀리떨어져있기때문에소프트웨어차원에서호스트들간에연결을해주는장치가필요 이러한기능을해주는장치로소켓이라는인터페이스를많이사용 소켓프로그래밍이란용어와네트워크프로그래밍이랑용어가같은의미로사용

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 얇지만얇지않은 TCP/IP 소켓프로그래밍 C 2 판 4 장 UDP 소켓 제 4 장 UDP 소켓 4.1 UDP 클라이언트 4.2 UDP 서버 4.3 UDP 소켓을이용한데이터송싞및수싞 4.4 UDP 소켓의연결 UDP 소켓의특징 UDP 소켓의특성 싞뢰할수없는데이터젂송방식 목적지에정확하게젂송된다는보장이없음. 별도의처리필요 비연결지향적, 순서바뀌는것이가능 흐름제어 (flow

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 인터넷프로토콜 5 장 데이터송수신 (3) 1 파일전송메시지구성예제 ( 고정크기메시지 ) 전송방식 : 고정크기 ( 바이너리전송 ) 필요한전송정보 파일이름 ( 최대 255 자 => 255byte 의메모리공간필요 ) 파일크기 (4byte 의경우최대 4GB 크기의파일처리가능 ) 파일내용 ( 가변길이, 0~4GB 크기 ) 메시지구성 FileName (255bytes)

More information

vi 사용법

vi 사용법 네트워크프로그래밍 6 장과제샘플코드 - 1:1 채팅 (udp 버전 ) 과제 서버에서먼저 bind 하고그포트를다른사람에게알려줄것 클라이언트에서알려준포트로접속 서로간에키보드입력을받아상대방에게메시지전송 2 Makefile 1 SRC_DIR =../../common 2 COM_OBJS = $(SRC_DIR)/addressUtility.o $(SRC_DIR)/dieWithMessage.o

More information

API 매뉴얼

API 매뉴얼 PCI-DIO12 API Programming (Rev 1.0) Windows, Windows2000, Windows NT and Windows XP are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations mentioned

More information

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc NTAS and FRAME BUILDER Install Guide NTAS and FRAME BUILDER Version 2.5 Copyright 2003 Ari System, Inc. All Rights reserved. NTAS and FRAME BUILDER are trademarks or registered trademarks of Ari System,

More information

Microsoft PowerPoint - Lecture_Note_5.ppt [Compatibility Mode]

Microsoft PowerPoint - Lecture_Note_5.ppt [Compatibility Mode] TCP Server/Client Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 TCP Server Program Procedure TCP Server socket() bind() 소켓생성 소켓번호와소켓주소의결합 listen() accept() read() 서비스처리, write()

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

11장 포인터

11장 포인터 Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함

More information

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수

More information

2009년 상반기 사업계획

2009년 상반기 사업계획 소켓프로그래밍활용 IT CookBook, 유닉스시스템프로그래밍 학습목표 소켓인터페이스를활용한다양한프로그램을작성할수있다. 2/23 목차 TCP 기반프로그래밍 반복서버 동시동작서버 동시동작서버-exec함수사용하기 동시동작서버-명령행인자로소켓기술자전달하기 UDP 프로그래밍 3/23 TCP 기반프로그래밍 반복서버 데몬프로세스가직접모든클라이언트의요청을차례로처리 동시동작서버

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 1 목포해양대해양컴퓨터공학과 UDP 소켓 네트워크프로그램설계 4 장 2 목포해양대해양컴퓨터공학과 목차 제 4장 UDP 소켓 4.1 UDP 클라이언트 4.2 UDP 서버 4.3 UDP 소켓을이용한데이터송신및수신 4.4 UDP 소켓의연결 3 목포해양대해양컴퓨터공학과 UDP 소켓의특징 UDP 소켓의특성 신뢰할수없는데이터전송방식 목적지에정확하게전송된다는보장이없음.

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,

More information

제1장 Unix란 무엇인가?

제1장  Unix란 무엇인가? 1 소켓 2 1 소켓 클라이언트 - 서버모델 네트워크응용프로그램 클리이언트 - 서버모델을기반으로동작한다. 클라이언트 - 서버모델 하나의서버프로세스와여러개의클라이언트로구성된다. 서버는어떤자원을관리하고클라이언트를위해자원관련서비스를제공한다. 3 소켓의종류 소켓 네트워크에대한사용자수준의인터페이스를제공 소켓은양방향통신방법으로클라이언트 - 서버모델을기반으로프로세스사이의통신에매우적합하다.

More information

Microsoft Word - AnyLink Introduction v3.2.3.doc

Microsoft Word - AnyLink Introduction v3.2.3.doc Copyright 2007 Tmax Soft Co., Ltd. All Rights Reserved. AnyLInk Copyright Notice Copyright 2007 Tmax Soft Co., Ltd. All Rights Reserved. Tmax Soft Co., Ltd. 대한민국서울시강남구대치동 946-1 글라스타워 18 층우 )135-708 Restricted

More information

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2 제 17 장동적메모리와연결리스트 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다.

More information

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D> 리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - chap10-함수의활용.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 중 값에 의한 전달 방법과

More information

Microsoft PowerPoint - chap06-5 [호환 모드]

Microsoft PowerPoint - chap06-5 [호환 모드] 2011-1 학기프로그래밍입문 (1) chapter 06-5 참고자료 변수의영역과데이터의전달 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 자동변수 지금까지하나의함수안에서선언한변수는자동변수이다. 사용범위는하나의함수내부이다. 생존기간은함수가호출되어실행되는동안이다.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 KeyPad Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 에는 16 개의 Tack Switch 를사용하여 4 행 4 열의 Keypad 가장착 4x4 Keypad 2 KeyPad 를제어하기위하여 FPGA 내부에 KeyPad controller 가구현 KeyPad controller 16bit 로구성된

More information

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures 단일연결리스트 (Singly Linked List) 신찬수 연결리스트 (linked list)? tail 서울부산수원용인 null item next 구조체복습 struct name_card { char name[20]; int date; } struct name_card a; // 구조체변수 a 선언 a.name 또는 a.date // 구조체 a의멤버접근 struct

More information

Microsoft PowerPoint - 13 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 2.ppt

Microsoft PowerPoint - 13 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 2.ppt 13 장소켓을이용한통신 (2) 소켓을이용한통신 (2) 함수 - recvfrom - sendto - uname - gethostname - gethostbyname - gethostbyaddr 1 1. 서론 소켓을사용하여비연결형모델로통신을하기위한함수와그외의함수 함수 의미 recvfrom 비연결형모델에서소켓을통해메시지를수신한다. sendto 비연결형모델에서소켓을통해메시지를송신한다.

More information

API 매뉴얼

API 매뉴얼 PCI-TC03 API Programming (Rev 1.0) Windows, Windows2000, Windows NT, Windows XP and Windows 7 are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations

More information

C# Programming Guide - Types

C# Programming Guide - Types C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든

More information

bn2019_2

bn2019_2 arp -a Packet Logging/Editing Decode Buffer Capture Driver Logging: permanent storage of packets for offline analysis Decode: packets must be decoded to human readable form. Buffer: packets must temporarily

More information

ISP and CodeVisionAVR C Compiler.hwp

ISP and CodeVisionAVR C Compiler.hwp USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler http://www.avrmall.com/ November 12, 2007 Copyright (c) 2003-2008 All Rights Reserved. USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler

More information

untitled

untitled Step Motor Device Driver Embedded System Lab. II Step Motor Step Motor Step Motor source Embedded System Lab. II 2 open loop, : : Pulse, 1 Pulse,, -, 1 +5%, step Step Motor (2),, Embedded System Lab. II

More information

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning C Programming Practice (II) Contents 배열 문자와문자열 구조체 포인터와메모리관리 구조체 2/17 배열 (Array) (1/2) 배열 동일한자료형을가지고있으며같은이름으로참조되는변수들의집합 배열의크기는반드시상수이어야한다. type var_name[size]; 예 ) int myarray[5] 배열의원소는원소의번호를 0 부터시작하는색인을사용

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 인터넷프로토콜 03 장 도메인네임시스템과주소 패밀리 (IPv4-IPv6 서비스 ) 1 목차 제 3 장도메인네임시스템과주소패밀리 3.1 도메인네임주소를숫자주소로매핑하기 3.2 IP 버전에무관한주소-범용코드의작성 3.3 숫자주소에서도메인네임주소획득하기 2 getaddrinfo() 를활용한주소 범용 (Generic) 코드 주소범용 (Generic) 코드란? 주소버전

More information

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher( 실행할페이지.jsp); 다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp"); dispatcher.forward(request, response); - 위의예에서와같이 RequestDispatcher

More information

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint - chap03-변수와데이터형.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num %d\n", num); return 0; } 1 학습목표 의 개념에 대해 알아본다.

More information

11장 포인터

11장 포인터 누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 (Host) set up : Linux Backend RS-232, Ethernet, parallel(jtag) Host terminal Target terminal : monitor (Minicom) JTAG Cross compiler Boot loader Pentium Redhat 9.0 Serial port Serial cross cable Ethernet

More information

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770> 연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.

More information

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Microsoft PowerPoint - chap13-입출력라이브러리.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 스트림의 기본 개념을 알아보고,

More information

Microsoft Word - Tmax Programming Guide _ UCS _.doc

Microsoft Word - Tmax Programming Guide _ UCS _.doc Tmax Programming Guide ( UCS ) Copyright 2000 TmaxSoft Co., Ltd. All Rights Reserved Copyright Notice Copyright 2000 TmaxSoft Co., Ltd. All Rights Reserved. TmaxSoft Co., Ltd. 대한민국서울시강남구대치동 946-1 글라스타워

More information

Frama-C/JESSIS 사용법 소개

Frama-C/JESSIS 사용법 소개 Frama-C 프로그램검증시스템소개 박종현 @ POSTECH PL Frama-C? C 프로그램대상정적분석도구 플러그인구조 JESSIE Wp Aorai Frama-C 커널 2 ROSAEC 2011 동계워크샵 @ 통영 JESSIE? Frama-C 연역검증플러그인 프로그램분석 검증조건추출 증명 Hoare 논리에기초한프로그램검증도구 사용법 $ frama-c jessie

More information

Microsoft Word doc

Microsoft Word doc TCP/IP 구조 1. I.P 구조설명 2. ARP 구조설명 3. TCP 구조설명 4. UDT 구조설명 5. RIP 구조설명 6. BOOTP 구조설명 7. TFTP 구조설명 destination addr source addr type data CRC 6 6 2 46-1500 4 type 0X0800 IP datagram 2 46-1500 type 0X0806

More information

Microsoft Word - Network Programming_NewVersion_01_.docx

Microsoft Word - Network Programming_NewVersion_01_.docx 10. Unix Domain Socket 105/113 10. Unix Domain Socket 본절에서는 Unix Domain Socket(UDS) 에대한개념과이에대한실습을수행하고, 이와동시에비신뢰적인통신시스템의문제점에대해서분석하도록한다. 이번실습의목표는다음과같다. 1. Unix Domain Socket의사용법을익히고, IPC에대해서실습 2. TCP/IP의응용계층과전달계층의동작을구현및실습

More information

Microsoft Word - KPMC-400,401 SW 사용 설명서

Microsoft Word - KPMC-400,401 SW 사용 설명서 LKP Ethernet Card SW 사용설명서 Version Information Tornado 2.0, 2.2 알 림 여기에실린내용은제품의성능향상과신뢰도의증대를위하여예고없이변경될수도있습니다. 여기에실린내용의일부라도엘케이일레븐의사전허락없이어떠한유형의매체에복사되거나저장될수없으며전기적, 기계적, 광학적, 화학적인어떤방법으로도전송될수없습니다. 엘케이일레븐경기도성남시중원구상대원동

More information

게시판 스팸 실시간 차단 시스템

게시판 스팸 실시간 차단 시스템 오픈 API 2014. 11-1 - 목 차 1. 스팸지수측정요청프로토콜 3 1.1 스팸지수측정요청프로토콜개요 3 1.2 스팸지수측정요청방법 3 2. 게시판스팸차단도구오픈 API 활용 5 2.1 PHP 5 2.1.1 차단도구오픈 API 적용방법 5 2.1.2 차단도구오픈 API 스팸지수측정요청 5 2.1.3 차단도구오픈 API 스팸지수측정결과값 5 2.2 JSP

More information

<4D F736F F F696E74202D E20B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D62E >

<4D F736F F F696E74202D E20B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D62E > 웹프로그래밍및실습 ( g & Practice) 문양세강원대학교 IT 대학컴퓨터과학전공 소켓 (Socket) (1/2) Socket 이란? 서버와클라이언트가서로특정한규약을사용하여데이터를전송하기위한방식 서버와클라이언트는소켓연결을기다렸다가소켓이연결되면서로데이터를전송 현재네트워크상에서의모든통신의근간은 Socket 이라할수있음 Page 2 1 소켓 (Socket) (2/2)

More information

Windows 8에서 BioStar 1 설치하기

Windows 8에서 BioStar 1 설치하기 / 콘텐츠 테이블... PC에 BioStar 1 설치 방법... Microsoft SQL Server 2012 Express 설치하기... Running SQL 2012 Express Studio... DBSetup.exe 설정하기... BioStar 서버와 클라이언트 시작하기... 1 1 2 2 6 7 1/11 BioStar 1, Windows 8 BioStar

More information

Microsoft PowerPoint - 04-UDP Programming.ppt

Microsoft PowerPoint - 04-UDP Programming.ppt Chapter 4. UDP Dongwon Jeong djeong@kunsan.ac.kr http://ist.kunsan.ac.kr/ Dept. of Informatics & Statistics 목차 UDP 1 1 UDP 개념 자바 UDP 프로그램작성 클라이언트와서버모두 DatagramSocket 클래스로생성 상호간통신은 DatagramPacket 클래스를이용하여

More information

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 비트연산자 1 1 비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 진수법! 2, 10, 16, 8! 2 : 0~1 ( )! 10 : 0~9 ( )! 16 : 0~9, 9 a, b,

More information

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100 2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack

More information

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7> 제14장 동적 메모리 할당 Dynamic Allocation void * malloc(sizeof(char)*256) void * calloc(sizeof(char), 256) void * realloc(void *, size_t); Self-Referece NODE struct selfref { int n; struct selfref *next; }; Linked

More information

슬라이드 1

슬라이드 1 / 유닉스시스템개요 / 파일 / 프로세스 01 File Descriptor file file descriptor file type unix 에서의파일은단지바이트들의나열임 operating system 은파일에어떤포맷도부과하지않음 파일의내용은바이트단위로주소를줄수있음 file descriptor 는 0 이나양수임 file 은 open 이나 creat 로 file

More information

Microsoft PowerPoint - additional01.ppt [호환 모드]

Microsoft PowerPoint - additional01.ppt [호환 모드] 1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능

More information

제1장 Unix란 무엇인가?

제1장  Unix란 무엇인가? 1 12 장파이프 2 12.1 파이프 파이프원리 $ who sort 파이프 3 물을보내는수도파이프와비슷 한프로세스는쓰기용파일디스크립터를이용하여파이프에데이터를보내고 ( 쓰고 ) 다른프로세스는읽기용파일디스크립터를이용하여그파이프에서데이터를받는다 ( 읽는다 ). 한방향 (one way) 통신 파이프생성 파이프는두개의파일디스크립터를갖는다. 하나는쓰기용이고다른하나는읽기용이다.

More information

일반적인 네트워크의 구성은 다음과 같다

일반적인 네트워크의 구성은 다음과 같다 W5200 Errata Sheet Document History Ver 1.0.0 (Feb. 23, 2012) First release (erratum 1) Ver 1.0.1 (Mar. 28, 2012) Add a solution for erratum 1, 2 Ver 1.0.2 (Apr. 03, 2012) Add a solution for erratum 3

More information

C++ Programming

C++ Programming C++ Programming 예외처리 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 예외처리 2 예외처리 예외처리 C++ 의예외처리 예외클래스와객체 3 예외처리 예외를처리하지않는프로그램 int main() int a, b; cout > a >> b; cout

More information

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600 균형이진탐색트리 -VL Tree delson, Velskii, Landis에의해 1962년에제안됨 VL trees are balanced n VL Tree is a binary search tree such that for every internal node v of T, the heights of the children of v can differ by at

More information

PowerPoint Template

PowerPoint Template JavaScript 회원정보 입력양식만들기 HTML & JavaScript Contents 1. Form 객체 2. 일반적인입력양식 3. 선택입력양식 4. 회원정보입력양식만들기 2 Form 객체 Form 객체 입력양식의틀이되는 태그에접근할수있도록지원 Document 객체의하위에위치 속성들은모두 태그의속성들의정보에관련된것

More information

윤성우의 열혈 TCP/IP 소켓 프로그래밍

윤성우의 열혈 TCP/IP 소켓 프로그래밍 C 프로그래밍프로젝트 Chap 22. 구조체와사용자정의자료형 1 2013.10.10. 오병우 컴퓨터공학과 구조체의정의 (Structure) 구조체 하나이상의기본자료형을기반으로사용자정의자료형 (User Defined Data Type) 을만들수있는문법요소 배열 vs. 구조체 배열 : 한가지자료형의집합 구조체 : 여러가지자료형의집합 사용자정의자료형 struct

More information

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - ch07 - 포인터 pm0415 2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자

More information

Tablespace On-Offline 테이블스페이스 온라인/오프라인

Tablespace On-Offline 테이블스페이스 온라인/오프라인 2018/11/10 12:06 1/2 Tablespace On-Offline 테이블스페이스온라인 / 오프라인 목차 Tablespace On-Offline 테이블스페이스온라인 / 오프라인... 1 일반테이블스페이스 (TABLESPACE)... 1 일반테이블스페이스생성하기... 1 테이블스페이스조회하기... 1 테이블스페이스에데이터파일 (DATA FILE) 추가

More information

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 (   ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각 JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.

More information

C++ Programming

C++ Programming C++ Programming 연산자다중정의 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 연산자다중정의 C++ 스타일의문자열 2 연산자다중정의 연산자다중정의 단항연산자다중정의 이항연산자다중정의 cin, cout 그리고 endl C++ 스타일의문자열 3 연산자다중정의 연산자다중정의 (Operator

More information

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 2012.11.23 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Document Distribution Copy Number Name(Role, Title) Date

More information

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode] Unix Process Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 유닉스기반다중서버구현방법 클라이언트들이동시에접속할수있는서버 서비스를동시에처리할수있는서버프로세스생성을통한멀티태스킹 (Multitasking) 서버의구현 select 함수에의한멀티플렉싱 (Multiplexing)

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 7-Segment Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 6-Digit 7-Segment LED controller 16비트로구성된 2개의레지스터에의해제어 SEG_Sel_Reg(Segment

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 7-Segment Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 6-Digit 7-Segment LED Controller 16비트로구성된 2개의레지스터에의해제어 SEG_Sel_Reg(Segment

More information

UI TASK & KEY EVENT

UI TASK & KEY EVENT T9 & AUTOMATA 2007. 3. 23 PLATFORM TEAM 정용학 차례 T9 개요 새로운언어 (LDB) 추가 T9 주요구조체 / 주요함수 Automata 개요 Automata 주요함수 추후세미나계획 질의응답및토의 T9 ( 2 / 30 ) T9 개요 일반적으로 cat 이라는단어를쓸려면... 기존모드 (multitap) 2,2,2, 2,8 ( 총 6번의입력

More information

1217 WebTrafMon II

1217 WebTrafMon II (1/28) (2/28) (10 Mbps ) Video, Audio. (3/28) 10 ~ 15 ( : telnet, ftp ),, (4/28) UDP/TCP (5/28) centralized environment packet header information analysis network traffic data, capture presentation network

More information

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D313939392D382E687770>

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D313939392D382E687770> i ii iii iv v vi 1 2 3 4 가상대학 시스템의 국내외 현황 조사 가상대학 플랫폼 개발 이상적인 가상대학시스템의 미래상 제안 5 웹-기반 가상대학 시스템 전통적인 교수 방법 시간/공간 제약을 극복한 학습동기 부여 교수의 일방적인 내용전달 교수와 학생간의 상호작용 동료 학생들 간의 상호작용 가상대학 운영 공지사항,강의록 자료실, 메모 질의응답,

More information

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074> SIMATIC S7 Siemens AG 2004. All rights reserved. Date: 22.03.2006 File: PRO1_17E.1 차례... 2 심벌리스트... 3 Ch3 Ex2: 프로젝트생성...... 4 Ch3 Ex3: S7 프로그램삽입... 5 Ch3 Ex4: 표준라이브러리에서블록복사... 6 Ch4 Ex1: 실제구성을 PG 로업로드하고이름변경......

More information

chap 5: Trees

chap 5: Trees 5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경

More information

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Example 3.1 Files 3.2 Source code 3.3 Exploit flow

More information

Microsoft Word - Armjtag_문서1.doc

Microsoft Word - Armjtag_문서1.doc ARM JTAG (wiggler 호환 ) 사용방법 ( IAR EWARM 에서 ARM-JTAG 로 Debugging 하기 ) Test Board : AT91SAM7S256 IAR EWARM : Kickstart for ARM ARM-JTAG : ver 1.0 ( 씨링크테크 ) 1. IAR EWARM (Kickstart for ARM) 설치 2. Macraigor

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음

More information

Chapter #01 Subject

Chapter #01  Subject Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned

More information

Sena Technologies, Inc. HelloDevice Super 1.1.0

Sena Technologies, Inc. HelloDevice Super 1.1.0 HelloDevice Super 110 Copyright 1998-2005, All rights reserved HelloDevice 210 ()137-130 Tel: (02) 573-5422 Fax: (02) 573-7710 E-Mail: support@senacom Website: http://wwwsenacom Revision history Revision

More information

Microsoft PowerPoint - 12 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 1.ppt

Microsoft PowerPoint - 12 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 1.ppt 12 장 소켓을이용한통신 (1) 함수 - inet_addr - inet_ntoa - socket - bind - listen - accept - connect - recv -send 1 서론 파이프를사용하여통신을하기위한시스템호출 / 표준라이브러리함수 함수 의미 inet_addr 문자열형태의인터넷주소를바이너리형태로변환한다. inet_ntoa 바이너리형태의인터넷주소를문자열형태로변환한다.

More information

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070> #include "stdafx.h" #include "Huffman.h" 1 /* 비트의부분을뽑아내는함수 */ unsigned HF::bits(unsigned x, int k, int j) return (x >> k) & ~(~0

More information

Tmax COBOL Guide : TMCG : Tmax 3.8 : July 31, 2003 : Sep 20, 2003

Tmax COBOL Guide : TMCG : Tmax 3.8 : July 31, 2003 : Sep 20, 2003 Tmax COBOL Guide : TMCG-0731-03-380 : Tmax 3.8 : July 31, 2003 : Sep 20, 2003 Tmax COBOL Guide Tmax 3.8 Tmax COBOL Guide Tmax COBOL Guide Tmax COBOL Guide 1. 1.1... 7 1.2 Sample file... 8 1.2.1 Sample

More information

BMP 파일 처리

BMP 파일 처리 BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)

More information

Microsoft Word - src.doc

Microsoft Word - src.doc IPTV 서비스탐색및콘텐츠가이드 RI 시스템운용매뉴얼 목차 1. 서버설정방법... 5 1.1. 서비스탐색서버설정... 5 1.2. 컨텐츠가이드서버설정... 6 2. 서버운용방법... 7 2.1. 서비스탐색서버운용... 7 2.1.1. 서비스가이드서버실행... 7 2.1.2. 서비스가이드정보확인... 8 2.1.3. 서비스가이드정보추가... 9 2.1.4. 서비스가이드정보삭제...

More information

Webtob( 멀티도메인 ) SSL 인증서갱신설치가이드 본문서는주식회사한국기업보안에서 SSL 보안서버인증서설치를위해작성된문서로 주식회사한국기업보안의동의없이무단으로사용하실수없습니다. [ 고객센터 ] 한국기업보안. 유서트기술팀 Copyright 201

Webtob( 멀티도메인 ) SSL 인증서갱신설치가이드 본문서는주식회사한국기업보안에서 SSL 보안서버인증서설치를위해작성된문서로 주식회사한국기업보안의동의없이무단으로사용하실수없습니다. [ 고객센터 ] 한국기업보안. 유서트기술팀 Copyright 201 Webtob( 멀티도메인 ) SSL 인증서갱신설치가이드. [ 고객센터 ] 한국기업보안. 유서트기술팀 02-512-9375 멀티및와일드인증서의경우포트번호를동일하게설정이가능하다. (https 통신으로 443 으로통일가능 ) 1. 발급받으신인증서를해당 SSL 폴더에업로드또는저장합니다. [root@localhost New]$ cp star.ucert.co.kr* /webtob/ssl

More information

1. Windows 설치 (Client 설치 ) 원하는위치에다운받은발송클라이언트압축파일을해제합니다. Step 2. /conf/config.xml 파일수정 conf 폴더에서 config.xml 파일을텍스트에디터를이용하여 Open 합니다. config.xml 파일에서, 아

1. Windows 설치 (Client 설치 ) 원하는위치에다운받은발송클라이언트압축파일을해제합니다. Step 2. /conf/config.xml 파일수정 conf 폴더에서 config.xml 파일을텍스트에디터를이용하여 Open 합니다. config.xml 파일에서, 아 LG U+ SMS/MMS 통합클라이언트 LG U+ SMS/MMS Client Simple Install Manual LG U+ SMS/MMS 통합클라이언트 - 1 - 간단설치매뉴얼 1. Windows 설치 (Client 설치 ) 원하는위치에다운받은발송클라이언트압축파일을해제합니다. Step 2. /conf/config.xml 파일수정 conf 폴더에서 config.xml

More information

0. 들어가기 전

0. 들어가기 전 컴퓨터네트워크 14 장. 웹 (WWW) (3) - HTTP 1 이번시간의학습목표 HTTP 의요청 / 응답메시지의구조와동작원리이해 2 요청과응답 (1) HTTP (HyperText Transfer Protocol) 웹브라우저는 URL 을이용원하는자원표현 HTTP 메소드 (method) 를이용하여데이터를요청 (GET) 하거나, 회신 (POST) 요청과응답 요청

More information

SMB_ICMP_UDP(huichang).PDF

SMB_ICMP_UDP(huichang).PDF SMB(Server Message Block) UDP(User Datagram Protocol) ICMP(Internet Control Message Protocol) SMB (Server Message Block) SMB? : Microsoft IBM, Intel,. Unix NFS. SMB client/server. Client server request

More information

본 강의에 들어가기 전

본 강의에 들어가기 전 C 기초특강 종합과제 과제내용 구조체를이용하여교과목이름과코드를파일로부터입력받아관리 구조체를이용하여학생들의이름, 학번과이수한교과목의코드와점수를파일로부터입력 학생개인별총점, 평균계산 교과목별이수학생수, 총점및평균을계산 결과를파일에저장하는프로그램을작성 2 Makefile OBJS = score_main.o score_input.o score_calc.o score_print.o

More information

Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft PowerPoint - chap01-C언어개요.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 프로그래밍의 기본 개념을

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 7-SEGMENT DEVICE CONTROL - DEVICE DRIVER Jo, Heeseung 디바이스드라이버구현 : 7-SEGMENT HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 디바이스드라이버구현 : 7-SEGMENT 6-Digit 7-Segment LED

More information

C++-¿Ïº®Çؼ³10Àå

C++-¿Ïº®Çؼ³10Àå C C++. (preprocessor directives), C C++ C/C++... C++, C. C++ C. C C++. C,, C++, C++., C++.,.. #define #elif #else #error #if #itdef #ifndef #include #line #pragma #undef #.,.,. #include #include

More information

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - [2009] 02.pptx 원시데이터유형과연산 원시데이터유형과연산 원시데이터유형과연산 숫자데이터유형 - 숫자데이터유형 원시데이터유형과연산 표준입출력함수 - printf 문 가장기본적인출력함수. (stdio.h) 문법 ) printf( Test printf. a = %d \n, a); printf( %d, %f, %c \n, a, b, c); #include #include

More information

1. What is AX1 AX1 Program은 WIZnet 사의 Hardwired TCP/IP Chip인 iinchip 들의성능평가및 Test를위해제작된 Windows 기반의 PC Program이다. AX1은 Internet을통해 iinchip Evaluation

1. What is AX1 AX1 Program은 WIZnet 사의 Hardwired TCP/IP Chip인 iinchip 들의성능평가및 Test를위해제작된 Windows 기반의 PC Program이다. AX1은 Internet을통해 iinchip Evaluation 1. What is AX1 AX1 Program은 WIZnet 사의 Hardwired TCP/IP Chip인 iinchip 들의성능평가및 Test를위해제작된 Windows 기반의 PC Program이다. AX1은 Internet을통해 iinchip Evaluation Board(EVB B/D) 들과 TCP/IP Protocol로연결되며, 연결된 TCP/IP

More information

T100MD+

T100MD+ User s Manual 100% ) ( x b a a + 1 RX+ TX+ DTR GND TX+ RX+ DTR GND RX+ TX+ DTR GND DSR RX+ TX+ DTR GND DSR [ DCE TYPE ] [ DCE TYPE ] RS232 Format Baud 1 T100MD+

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 10 포인터 01 포인터의기본 02 인자전달방법 03 포인터와배열 04 포인터와문자열 변수의주소를저장하는포인터에대해알아본다. 함수의인자를값과주소로전달하는방법을알아본다. 포인터와배열의관계를알아본다. 포인터와문자열의관계를알아본다. 1.1 포인터선언 포인터선언방법 자료형 * 변수명 ; int * ptr; * 연산자가하나이면 1 차원포인터 1 차원포인터는일반변수의주소를값으로가짐

More information

Microsoft Word - FunctionCall

Microsoft Word - FunctionCall Function all Mechanism /* Simple Program */ #define get_int() IN KEYOARD #define put_int(val) LD A val \ OUT MONITOR int add_two(int a, int b) { int tmp; tmp = a+b; return tmp; } local auto variable stack

More information

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O Orange for ORACLE V4.0 Installation Guide ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE...1 1....2 1.1...2 1.2...2 1.2.1...2 1.2.2 (Online Upgrade)...11 1.3 ORANGE CONFIGURATION ADMIN...12 1.3.1 Orange Configuration

More information

Cloud Friendly System Architecture

Cloud Friendly System Architecture -Service Clients Administrator 1. -Service 구성도 : ( 좌측참고 ) LB(LoadBlancer) 2. -Service 개요 ucloud Virtual Router F/W Monitoring 개념 특징 적용가능분야 Server, WAS, DB 로구성되어 web service 를클라우드환경에서제공하기위한 service architecture

More information