Microsoft Word - 03_WebtoB_Ap_Dev_41.doc
|
|
- 병기 음
- 5 years ago
- Views:
Transcription
1 Application 개발안내서 Copyright 2005 Tmax Soft Co., Ltd. All Rights Reserved.
2 Application 개발안내서 Copyright Notice Copyright 2005 Tmax Soft Co., Ltd. All Rights Reserved. Tmax Soft Co., Ltd. 대한민국서울시강남구대치동 글라스타워 18 층우 ) Restricted Rights Legend This software and documents are made available only under the terms of the Tmax Soft 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 Tmax Soft Co., Ltd. 이프로그램과문서는 TmaxSoft 라이선스동의하에서만만들거나, 사용되거나, 복사될수있습니다. TmaxSoft Co., Ltd. 의허락없이이문서의일부분이나전체를전자적, 기계적, 광학적, 수작업등어떤방법으로든복사, 재생산, 번역등을할수없습니다. Trademarks Tmax,, WebT, and JEUS are registered trademarks of Tmax Soft Co., Ltd. All other product names may be trademarks of the respective companies with which they are associated. Tmax,, WebT, JEUS 는 TmaxSoft Co., Ltd. 의등록상표입니다. 기타모든제품들과회사이름은각각해당소유주의상표로서참조용으로만사용됩니다. Document info Document name: Application 개발안내서 Document date: Manual release version: 4.1 Software Version: TmaxSoft
3 Application 개발안내서 차 례 About This Guide... 4 일러두기... 6 제품별기능 Introduction to the 의개념과특징 의소개 의특징 Caching WBAPI Webtob Application HTML HTML의이용 HTML example CGI CGI의이용 CGI Example C 를이용한게시판구현 PERL 를이용한 sample program PHP PHP의이용 PHP Example SSI SSI의이용 에서의 SSI의사용 SSI Commands Servlet Servlet의이용 와 JEUS 연동 Servlet example TmaxSoft 2
4 Application 개발안내서 3 WBAPI WBAPI 의개념 WBAPI List INIT/DONE API ALLOC API GET API PUT/SET API SEND API COOKIE API ETC API Configuration for WBAPI 환경파일설정 WBAPI 프로그램의 Compile WBAPI의시작및응용 WBAPI를이용한 Application의제작 WBAPI 를이용한 CGI Application 의전환 Multinode and Load Balancing wsracd Multi-Node 환경설정 Multi-Node상에서의 기동과종료 Load Balancing TmaxSoft
5 Application 개발안내서 About This Guide 본매뉴얼은 system 을이용하여사이트를개발하려고하는개발자및웹서버관리자를대상으로한다. 즉개발자가 에서제공하는각종 WBAPI 를이용하여효율적으로웹사이트를개발할수있도록여러가지의개발방법론에대해설명한다. system 을이용하여제공할수있는모든웹서비스들에대해환경설정및개발방법에대해설명하고 에서제공하고있는 WBAPI 를소개하고그개념및특성에대해설명하고있다. 그리고위의 API 를이용하여웹상에서구현하고그환경을설정하는방법에대해예제프로그램을소개하면서자세하게설명할것이다. 본매뉴얼에기술되어있는내용은 Unix/Linux, Windows 환경에서테스트및검증되었다. 본매뉴얼은 System 을사용하는환경이 UNIX 라고가정하고있고, 사용자가 UNIX 환경및현재사용되고있는각 UNIX 기종의특성들에기본지식이있다는가정하에작성되었다. 만약사용자가 UNIX 의명령어나유틸리티사용법등에관한기본지식이없다면, 관련서적을참고하거나시스템매뉴얼을참고해야한다. 본매뉴얼은크게 4 개의장으로구성되어있으며그내용은다음과같다. Chapter 1 본장에서는 Web Server 가무엇인지, 왜필요한지, 왜만들어졌는지의기본적인질문에대해설명한다. 또한이외에도다른웹서버에서는볼수없는 만의새로운독자적인기능에대해서설명한다. Chapter 2 Web Server 에서사용할수있는 Application 의종류에대해기술하고각 Web programming 언어를사용하여 에서서비스를할수있도록하기위한환경설정및웹페이지개발방식에대하여설명한다. TmaxSoft 4
6 Application 개발안내서 Chapter 3 에서독자적으로제공하고있는 WBAPI 에대한개념및 WBAPI 를구성하고있는함수들을소개한다. 또한 시스템을적용해서 WBAPI 프로그램을개발할있도록각종함수를실제프로그램예제를통하여자세하게설명하고있다. Chapter 4 를하나의노드가아닌멀티노드상에서시스템을구성하였을때의환경설정및 시스템의기동및종료에대하여설명한다. 특히본매뉴얼에서는멀티노드상에서의웹서비스방식과췝사이트개발방법에대하여예제프로그램을통하여자세하게설명하게될것이다. 관련매뉴얼 관리자안내서 WBAPI Reference Manual 5 TmaxSoft
7 Application 개발안내서 일러두기 표기예 내용 텍스트본문, 12 포인트, 바탕체 Times New Roman 텍스트 본문강조 CTRL+C CTRL 과동시에 C 를누름 public class myclass { Java 코드 <system-config> XML 문서 참조 : / 주의 :` Configuration 메뉴를연다 WEBTOBDIR 참조사항과주의할사항 GUI 의버튼같은컴포넌트 가실제설치된디렉토리 예 )c:\tmaxsoft\4.1 wsboot [ 파라미터 ] 콘솔명령어와문법 옵션파라미터 < xyz > < 와 > 사이의내용이실제값으로변경됨 선택사항. 예 ) A B: A 나 B 중하나 파라미터등이반복되어서나옴?, +, * 보통 XML 문서에각각 없거나, 한번, 한번이상, 없거나, TmaxSoft 6
8 Application 개발안내서 여러번 을나타낸다.... XML 이나코드등의생략 <<FileName.ext>> 코드의파일명 그림 1. 그림이름이나표이름 제품별기능 제품구분 Base 제공기능 HTML, CGI, PHP, SSI, SSL, WBAPI Standard Base 제공기능, Multi-Node, JSP/Servlet, Load Balancing, Fail-Over 7 TmaxSoft
9 Application 개발안내서 연락처 Korea Tmax Soft Co., Ltd 18F Glass Tower, 946-1, Daechi-Dong, Kangnam-Gu, Seoul South Korea Tel: Fax: Web (Korean): USA Tmax Soft, Inc. 560 Sylvan Ave, Englewood Cliffs NJ USA Tel: FAX: Web (English): Japan Tmax Soft Japan Co., Ltd. 6-7 Sanbancho, Chiyoda-ku, Tokyo Japan Tel: FAX: Web (Japanese): China Beijing Silver Tower, RM 1507, 2# North Rd Dong San Huan, Chaoyang District, Beijing, China, Tel: Fax: info@tmaxchina.com.cn Web (Chinese): TmaxSoft 8
10 Application 개발안내서 9 TmaxSoft
11 Application 개발안내서 1 Introduction to the 1.1 의개념과특징 의소개 는기존 Web Server 와는다른구조를가지고있다. Apache 로대변되는기존 Web Server 들은대부분 NCSA 사의 Httpd 의구조를가지고있다. 이는, 사용자가그리많지않던환경하에서이용되던것으로, 사용자의증가에유연하게대처하지못하는단점을지니고있다. 에선이런문제를가장먼저해결하고자하였다. 따라서, 최우선적으로고려한것이사용자가계속증가하는경우에대한대처방식이었다. 기존의 Web Server 들은사용자의 request 가들어오면일대일방식으로연결을맺는구조로되어있다. 따라서만약사용자가증가하는경우, 결국 Server Process 가그수만큼동시에늘어나야 Service 를할수있었다. 그러나, 이러한방식은사용자가증가하면할수록, Server 에걸리는부하도따라서증가하기때문에많은문제점을야기한다. 물론, 사용자가늘어나면 Server 에걸리는부하가적을수는없다. 더많은 Memory 와 CPU Overhead 를감수하여야하는것은당연한일이다. 하지만사용자가늘어난다고해서 Server 에걸리는부하가이와비례해서계속크게늘어나, 더많은 Hardware 를추가로구입하여야하는일이발생한다면이는적절한해답이되지못한다. 즉, 사용자가늘어난다고해도 Server 자체에서적절히대응하여사용자가늘어나도일정수준까지는무리없이 Service 를가능하게하는구조가되어야무한하게확장하는 Web 에대응할수있는것이다. 현재세계적으로가장많이사용되는 Web Server 는 Apache 이다. 이는오랜역사와함께상용이아니라는배경에힘입은바가크다. 물론, 성능역시만족할만한수준을유지하고있으며, 오랜기간동안검증된안정성역시타 Web Server 에비해서가장좋다고할수있다. TmaxSoft 10
12 Application 개발안내서 그러나 Apache 는오로지소규모나중급정도규모를가지고있는 ( 대략 1000 명이내동시사용자를가지는 ) 곳에권장한다. 이정도의규모라면자유로이쓸수있고동시에안정적이고뛰어난 Apache 서버가적격일것이다. 그러나훨씬더큰규모의인터넷사업이거나, 또는안정성의요구가절대적이거나, 또는현재는규모가크지않으나가까운장래에이용자가기하급수적으로증가할우려가있거나, 현재그러한상황에처한사용자라면 를써야한다고주장한다. 사용고객의폭발적인증가는운영자로서는반가운일이아닐수없으나이에신속하게대응하지못하거나서비스의품질 ( 접속자가느끼는품질이란안정성과속도가되겠다 ) 에문제가생겨서는안된다는것은고객뿐아니라운영자의바람이기도할것이다. 이러한상황이라면최고성능의상용서버 를권장하며그이유는다음과같다. 초창기 Web Server 인 Httpd 의구조를그대로계승하는덕에 Apache 는가장일반적인 Process per Request 형태를취하고있다. 즉, 사용자 Request 마다 Process 가발생하여처리하는구조인것이다. 따라서, 앞에서언급한대로사용자가증가하면서 Process 가같이비례하게증가하여사용자수가일정수이상이되면, Service 에많은무리가생긴다. 이는각시스템마다 Process 의수가한정되어있고, Process 가늘어나면너무많은 Memory 를차지하는등의 Overhead 도같이늘어나기때문이다. 이에의해새로운상업 Web Server 들이등장하면서, 무한히확장하고있는 Web 환경에대처하기위하여새로운구조를채택하였다. 가장일반적인것이 Multi-Thread 기술을이용한것이다. 이는 Process 보다 Overhead 가적은 Thread 를이용하여 Service 를하는것으로기존 Process 방식에비하여월등히좋은성능을나타내었다. Thread 는 Process 내부에서여러개를동시에이용할수있기때문에 Overhead 도적고, 차지하는 Memory 도 Process 방식에비하여상당히적기때문이다. 그러나이러한방식도문제를가지고있다. Thread 기술이상당히우수한기술임에는틀림없지만, 내부에서자신들간의영역싸움으로인하여 DeadLock 등의문제가빈번하게발생하기때문이다. 이것은특히안정성에있어치명적이다. Thread 구조에서 DeadLock 이발생하면, 자체 Thread 가 Service 를수행하지못함은물론, 자칫하면전체시스템이 Down 되어 Service 불능상태가될수있다. 이는, 성능뿐아니라, 안정성도중요한요소가되는 Web Server 에치명적인결함이될수있다. 11 TmaxSoft
13 Application 개발안내서 위에서언급한두가지방식은서로장단점이있다. 성능과안정성면에서서로양극단을달리고있다고보면될정도로차이가있다. 하지만, 성능과안정성모두 Web Server 에게있어서는놓쳐서는안될아주중요한고려사항이다. 둘중의하나만충족되지않아도원만한 Service 가되지않기때문이다. 이에, 티맥스소프트에서는 를개발하면서, 성능과안정성을모두충족시키기위하여많은구조를검토하고연구하였다. 에서는안정성을위하여 Thread 구조를배제하고 Process 구조를채택하였다. 그리고, 성능을위하여각 Process 를독립적으로만들지않고, 각각의특별한기능을하는 Process 를두어역할을분담하였다. 또한, 각 Process 마다만약의경우를대비하여여분의보조 Process 를두는것이가능하게하여, 안정성에치중하였다. Web Server 에서 Service 를하는방식은아래의그림과같다. 에서 Web service 하는방식 의특징 Caching 일반적으로많은 Web Server 들이 Caching 기능을제공하고있다. 그러나, 이들은대부분 Disk 에대한 Caching 으로서, 필요한 Data 들을 TmaxSoft 12
14 Application 개발안내서 다른 Machine 에서자신의 Machine 으로가져와서, Disk 에저장하여두고, 사용자가 Request 를하면, 이를보내주는방법이다. 주로 Proxy 라는개념으로, 많이이용되는 Apache 역시 ( 세계 Web Server 의약 67% 를차지 ) 이기능을가지고있으며, 이는성능향상에많은도움을준다. 를통하여사용자가 Request 를보내면, 가자주 이용되는 Resource 들을선별하여이를 Memory 에상주시켜놓는 시스템이다. 현재 Web Service 를하고있는많은회사들은상당히고가의장비를이용한다. 이들은대부분막강한능력의 CPU 를여러개탑재하고있으며, 또한, 수 GB 에이르는엄청난양의 Memory 를가지고있다. 그러나, 실제 Service 를시행하게되면, CPU 의처리능력에의해성능의제약이오게된다. 따라서, 수 GB 에이르는 Memory 를효율적으로이용하지못하는경우가많게된다. 즉, 대부분의경우 Memory 의모든영역을쓰지는못하고, CPU 의처리능력에의해서, Memory 의 70~80% 정도만이용하는실정이다. 이에, 에서제공하는 Memory Caching 기능은이여분의 Memory 에자주이용되는 Resource 들을미리상주시켜두어, 성능향상을돕는다. 보통 Disk 에비해서 Memory 가약수십배가량처리속도가빠르기때문에, 이것을적절히활용하면대단히큰성능향상을가져온다. 또한, 저장용량을임의로조정할수있어 Memory 가부족한경우, 이를줄일수있으며, 만약여분의 Memory 가충분하다면, 이의크기를더늘일수있다. 실제연구결과를보면, 사용자의 Request 의대부분이특정한 Resource 에몰려있게된다. 따라서작은용량의 Memory Caching 이라할지라도, 이들을이용하게되면, 엄청난성능향상을보일수있게된다 WBAPI 는 WBAPI 라는내부함수를제공한다. 이는 에서만제공하는것으로다양한용도로적용될수있다. 우선, 기존 CGI Program 들을변환하는데이용할수있다. 기존 CGI Program 은상당히비효율적으로설계되어있어서구현은간단하지만성능면에서워낙문제가많기때문에사용자가많은곳에서는적용하기힘들었다. 기존 Site 중 CGI Program 으로 Application 을개발하고 Service 를하던중갑자기사용자가늘어나는경우에는본래이용하던 CGI Program 으로는감당하기힘들게되는경우가많이있다. 이경우현재까지의해결방법은 CGI Program 과같은기능을하는다른 13 TmaxSoft
15 Application 개발안내서 Application 을완전히새로개발하거나, Hardware 를무한정늘리는방법외에는다른수가없었다. 이에 에서는 WBAPI 를제공하여기존 CGI Program 을 의 Service 형태로변환하는것을가능하게한다. 이는기존 CGI Program 의단점을모두개선한형태로, 현재많이이용되는 Servlet 이나기타다른 Script Language 등과같은성능을제공한다. 이는또한 에서 TP-Monitor 의 Service Routine 을호출하는데이용되기도한다. TmaxSoft 14
16 Application 개발안내서 2 Webtob Application 일반적으로 Web Server 를생각하면가장흔하게보는것이 HTML 이나 CGI 에대한처리일것이다. 역시 Web Server 이기때문에당연히이러한기능들을기본적으로제공한다. 에서는현재 HTML, CGI, PHP, SSI 등을제공한다. 이네가지서비스들이가장일반적인것들이며 Web Server 를이용하여웹서비스를하는경우가장많이쓰는서비스들이다. 이외에도 에서는기존 CGI 문제점등을보안한새로운형태의 WBAPI 를제공하고있다. 2.1 HTML HTML 의이용 HTML 이란 Hyper Text Makeup Language 의약자로 Hyper Text( 하이퍼텍스트 ) 기능을가진문서를만드는언어이다. Hyper Text( 하이퍼텍스트 ) 란하나의 Text( 문서 ) 로두는것이아니라문서와문서를서로연결시켜, 도시의복잡한도로처럼상호연결하여접근방식을다양화시킨문서를가리킨다. HTML 언어는 Tag 의집합으로이루어져있으며. 서비스제공자가 Tag 를이용해해당 service 를작성하게되면 Netscape 나 Explorer 는 Tag 의내용을해석해일반사용자들이 HTML 문서를보기쉬운형태로보여주는것이다. HTML 은단순히여러정적인문서를 Web 환경에서보여주는 service 방식이다 HTML example 여기서간단한 HTML 을작성하여 에서 HTML service 를이용할수있도록설정해보도록하겠다. 순서는아래와같다. 환경파일을아래의예제환경파일을참조하여작성한다. 아래의예제환경파일은 HTML service 를하기위해설정해주어야하는최소한의설정항목이다. 15 TmaxSoft
17 Application 개발안내서 sample.m *DOMAIN webtob1 *NODE webmain WEBTOBDIR = "/usr/local/webtob", SHMKEY = DOCROOT = "/usr/local/webtob/docs", PORT = "80", LOGGING = log1, ERRORLOG = log2, *SVRGROUP htmlg NODENAME = webmain, SvrType = HTML *SERVER html SVGNAME = htmlg, MinProc = 1, MaxProc = 5 *LOGGING log1 Format = DEFAULT, FileName = /usr/local/webtob/log/access.log, OPTION = Sync log2 Format = ERROR, FileName = /usr/local/webtob/log/error.log, OPTION = Sync 작성한 hello.html 문서를 DOCROOT 로옮긴다. 를기동한후, 브라우저를띄우고 HTML service 를호출해본다 /hello.html (IP address 는현재 가구동되고있는 machine 의것을쓴다.) 실행한화면은다음와같다. TmaxSoft 16
18 Application 개발안내서 Browser 에서 로 HTML service 를요청한결과 위의화면에나타나는 HTML 문서다음과같이작성하여 Hello.html 로환경파일에서 DOCROOT 로설정한디렉토리에저장해두면된다. Hello.html <html> <head> <title>hello</title> </head> <body> <h4><b>hello, World</b></h4> </body> </html> 2.2 CGI CGI 의이용 CGI 는 Common Gateway Interface 의약자이다. WWW 에서는 HTML 에의해여러가지정보를처리한다. HTML 은홈페이지를만드는기초가되는언어이다. 하지만 HTML 만으로모든정보를다처리할수없다. 단방향식의정보제공역할만할따름이다. 이것을보충하기위해서여러가지방법이마련되어왔다. 그중하나가외부프로그램을수행하여그것의결과를 HTML 형태로보여주는방식이다. 이때이외부프로그램과 Web Server 간의연결역할을하는것이 CGI 이다. 또는넓은의미로 CGI 를수행하는외부프로그램을포함하여말하기도한다. 예를들어, 홈페이지에방문객들의 comment 를받을 17 TmaxSoft
19 Application 개발안내서 수있는방명록을만들려고할때, 웹에서구현하는 HTML 만으로는해결할수없다. 그래서외부프로그램이필요한데, 이때외부프로그램과 Web Server 간에서로주고받을수있는규약을 CGI 라고하고, 그때사용하는프로그램을흔히 CGI 프로그램 ( 혹은 CGI 스크립트 ) 이라고한다. 이 CGI 프로그램은통상적으로 C/C++ 나 PERL 혹은 UNIX Shell, Tcl/Tk 등을사용하여구현한다. 홈페이지를 interative 한형태로만들수있는 CGI 프로그램의종류는매우다양하다. 방문객카운터나방명록뿐만아니라웹게시판, 웹대화방, 검색엔진, 다양한배너보여주기, 업로드가가능한자료실, 폼을이용하여메일을띄우는폼메일 (Form Mail) 등이루헤아릴수없이많다. 현재이러한 CGI 들은표준화되어있다고봐도된다. 또한, 이것은외부프로그램이수행되는방식이기때문에, 프로그램자체에문제가없다면다른곳에서로이식하는데에도아무문제가없다. 즉, 어떤 Web Server 에서무리없이돌아가는 CGI 라면다른 Web Server 에거의무난하게이식이가능하다는것이다. Web Server 역시다른 Web Server 와같은방식으로처리하기때문에 CGI 수행에는전혀지장이없다. CGI 를제작하는방법은매우다양하고, 여러가지방법이있으므로본서에서깊은내용을언급하지는않을것이다. CGI 프로그램을제작하는것은시중에책으로많이나와있고, 또한, 온라인상에서도많은자료를구할수있다 CGI Example 단순히보여주기위한 HTML 에서진일보한형태인 CGI 의동작과정은다음과같다. HTML 문서중사용자에대해동적으로반응해야하는부분이있다면, 이부분은마치 C 언어의함수처럼특정한방식으로응용프로그램을호출하게된다. 이응용프로그램은필요한동작을수행하고그결과를다시보내주면, 이결과가화면에나타나마치웹페이지가원하는요구를알아서처리해준것처럼보이는것이다. 게시판을예로들어보자. 우리가글을남길수있는웹상의게시판들은우리가쓴글을데이터로받은다음이데이터를이용해다시 HTML 문서를만들어브라우저에게전달해준다. 즉, 게시판에있어서 CGI 의역할은우리가자판으로치는문자를 HTML 문서로변환하는역할을하는것이다. 브라우저는이미작성된 HTML 을보여주는역할만하는것이므로, 미리작성하여준화면만을보여줄수밖에없는데 CGI 를통해우리는이것에실시간으로접근하여 TmaxSoft 18
20 Application 개발안내서 글을남길수있는것이다. 즉, 게시판프로그램은웹페이지에직접쓸수있는 연필 과같은기능을하는것이다. 본장에서는 C 를이용한게시판과 Perl 을이용한간단한 sample 을예제로하여웹에서의 CGI 를이용한서비스를구현해보도록하겠다 C 를이용한게시판구현 유닉스환경하에서 C 를이용한게시판작성을예제로하였다. 간단한글과주소를남길수있는이웹페이지는 board.html 에서 board.cgi 를호출함으로써구현한다. 순서는아래와같다. 환경파일을아래의예제환경파일을참조하여작성한다. 다음의예제환경파일은 HTML service 및 CGI service 를하기위해설정해주어야하는최소한의설정항목이다. Sample.m *DOMAIN webtob1 *NODE webmain WEBTOBDIR = "/usr/local/webtob", SHMKEY = DOCROOT = "/usr/local/webtob/docs", PORT = "80" LOGGING = log1 ERRORLOG = log2 *SVRGROUP htmlg cgig NODENAME = webmain, SvrType = HTML NODENAME = webmain, SvrType = CGI *SERVER html SVGNAME = htmlg, MinProc = 1, MaxProc = 5 cgi SVGNAME = cgig, MinProc = 1, MaxProc = 5 *URI uri1 Uri = "/cgi-bin/", Svrtype = CGI 19 TmaxSoft
21 Application 개발안내서 *ALIAS alias1 URI = "/cgi-bin/", RealPath = "/usr/local/webtob/cgi-bin/" *LOGGING log1 Format = DEFAULT, FileName = /usr/local/webtob/log/access.log, OPTION = Sync log2 Format = ERROR, FileName = /usr/local/webtob/log/error.log, OPTION = Sync 서비스하려고하는 HTML 문서를다음의예제프로그램을참조하여 board.html 로작성한뒤 DOCROOT 로옮긴다. Board.html <HTML> <HEAD> <TITLE>WebToB Board</TITLE> </HEAD> <BODY> <H2><big>WebToB Board Upload</big></H2> <HR WIDTH=500 ALIGN=left> <BR> <FORM METHOD=post ACTION="/cgi-bin/board.cgi"> <TABLE WIDTH=500 BORDER=0> <TR> <TD>Writer</TD> <TD><INPUT NAME=writer SIZE=20></TD> </TR> <TR> <TD>Title</TD> <TD><INPUT NAME=title SIZE=50></TD> </TR> <TR><TD COLSPAN=2><B>Contents</B></TD></TR> <TR><TD COLSPAN=2> <TEXTAREA NAME=doc COLS=60 ROWS=10></TEXTAREA> </TD> </TR> <TR> <TD> </TD> <TD><INPUT NAME= SIZE=40></TD> </TR> <TR> <TD>Home Page</TD> TmaxSoft 20
22 Application 개발안내서 <TD><INPUT NAME=homepage SIZE=40 VALUE=" </TR> </TABLE> <BR> <INPUT TYPE=submit VALUE=" Submit "> <INPUT TYPE=reset VALUE=" Clear "> </FORM> </BODY> </HTML> 위에서소개된예제 HTML 문서에서와같이 board.html 의 ACTION= /cgi-bin/board.cgi 부분이자신의환경에서 board.cgi 가있는곳을가리키도록한다. board.c 및 qdecoder.h, qdecoder.c 를 cgi 가구동되는 Directory 로옮긴다. 실제 cgi 로변환되는 board.c 는다음의예제프로그램과같이작성하면된다. board.c #include "qdecoder.h" int strcheck(char *str) { /* 문자열이 NULL 이거나길이가 0 인지체크 */ if (str == NULL) return 0; if (strlen(str) == 0) return 0; return 1; int main(void) { char *name, *title, *doc; char * , *homepage; /* 입력값들을얻어냄 */ name = qvalue("writer"); title = qvalue("title"); doc = qvalue("doc"); = qvalue(" "); 21 TmaxSoft
23 Application 개발안내서 homepage = qvalue("homepage"); /* 입력값들이올바른지검사 */ if (!strcheck(name)) qerror("type Your Name!"); if (!strcheck(title)) qerror("type Title!"); if (!strcheck(doc)) qerror("write Your Messages!"); if (strcheck( )) if (!qcheck ( )) qerror("type Your !"); if (strcheck(homepage)) if (!qcheckurl(homepage)) qerror("type Your Homepage URL!"); /* 여기서게시판에추가합니다. */ /* 처리결과출력 - 입력확인 */ qcontenttype("text/html"); printf("<html>\n\n"); printf("<head> <TITLE> CGI Board TEST </TITLE> </HEAD>\n\n"); printf("<body>\n"); printf("<h2> CGI Board TEST </H2>\n"); printf("<hr WIDTH=600 ALIGN=left>\n<BR>"); if (strcheck( )) printf("<a HREF=\"mailto:%s\">%s</A>", , name); else printf("%s", name); if (strcheck(homepage)) printf("<small>(<a HREF=\"%s\">%s</A>)</SMALL>", homepage, homepage); printf("wrote<br><br>\n"); printf("<table WIDTH=600 BORDER=1>\n"); printf("<tr><td><b>title</b> : %s</td></tr>\n", title); printf("<tr><td>%s</td></tr>\n", doc); TmaxSoft 22
24 Application 개발안내서 printf("</table>\n\n<br>upload Successful!\n"); printf("</body>\n\n</html>"); qfree(); board.c 를컴파일한다. (cc 또는 gcc 가깔려있어야한다.) $ cc o board.cgi board.c qdecoder.c 또는 $ gcc board.c qdecoder.c o board.cgi ( board.cgi 생성 ) 생성된 board.cgi 의퍼미션을 755 로해둔다. $ chmod 755 board.cgi 를기동한후, 브라우저를띄우고게시판을호출해본다. ( IP address 는현재 webtob 가구동되고있는 machine 의것을쓴다. ) 실행한화면은아래와같다. board.html 실행화면 위와같이내용을입력하고 submit 버튼을누르면 board.cgi 호출되어아래와같이게시판에입력된화면을만들어준다. 가 23 TmaxSoft
25 Application 개발안내서 board.cgi 가호출되어실행된결과를리턴한모습 게시판을만드는데필요한파일은아래와같다. 환경파일인 sample.m 과 HTML 문서인 board.html, 그리고 C 로된 board.c 이다 PERL 를이용한 sample program Perl 이란언어는스크립팅언어이다. 따라서컴파일과정이필요없이바로수행이가능하기때문에프로그램의작성과디버깅이매우쉽다. 이런이유로스크립팅언어가선호된다. Perl 은무료로다운로드가능하다. Perl 을사용하기위한기초준비작업은여기서다루지는않겠다. 여기서는 에서 Perl 을기동하기위한환경파일과간단한 sample program 을살펴보면서 에서 Perl 을이용한서비스를구현해보도록하겠다. Perl 을기동할수있는기본환경이갖추어진상태에서다음순서대로해보자. 에서 Perl 을이용한 web service 를하기위해서필요한환경설정은 CGI 를위한환경설정과같으므로앞에서소개된 CGI 의 sample.m 을참조하여각시스템에맞게수정한다. perl 의 path 를알아놓는다. $which perl TmaxSoft 24
26 Application 개발안내서 hello.pl 를편집창을열어다음의예제프로그램과같이 perl 의 path 를시스템에맞게수정한다. #!/usr/local/bin/perl print "Content-type:text/html\n\n"; $message="hello, World\n"; print $message; hello.pl 를 CGI 가구동되는 Directory 로옮기고 755 로퍼미션을준다. $chmod 755 hello.pl 시스템을기동한후, 아래와같이테스트를해본다. 브라우저에서 실행된화면은아래와같다. hello.pl(perl) 실행화면 위와같은화면이뜬다면 hello.pl 것이다. 의실행이정상적으로이루어진 2.3 PHP PHP 의이용 PHP 는 Perl 과유사한형태의 Script 로간편성과괜찮은성능으로인하여많이이용되고있다. 속도, 개발편의성, 여러가지확장기능으로볼때기존의펄 (Perl) 보다한수위인언어로 LINUX 나 25 TmaxSoft
27 Application 개발안내서 UNIX 계열뿐만아니라, WIN32 용바이너리파일을제공해마이크로소프트계열의 Web Server 에서도사용이가능해운영체제에독립적인웹프로그램개발이가능한것이큰장점이다. 가장기본적인레벨에서, PHP 는 CGI 프로그램에서할수있는모든것을할수있다. form data 를가져오고, 동적인웹페이지를만들거나, Cookie 를보내고받을수도있다. 에서 PHP 를이용하기위해서는약간의설치작업이필요하다. 이는 HTML 이나 CGI 를이용하는것과거의유사하기때문에쉽게적용할수있을것이다. 먼저, SVRGROUP 절에 php 에관련된 Group 을설정하고이를 Server 절에서다시정의하면된다. 이때, SVRGROUP 에 ScriptLoc 라는항목이추가되는데, 이는 php 의실제실행모듈이있는곳을말한다. 이는보통 cgi-bin/ Directory 에추가하는데 에서도이를권장한다. 아래는이에대한간단한예이다. sample.m *DOMAIN webtob1 *NODE webmain WEBTOBDIR = "/usr/local/webtob", SHMKEY = DOCROOT = "/usr/local/webtob/docs", PORT = "80", LOGGING = log1, ERRORLOG = log2 *SVRGROUP htmlg NODENAME = webmain, SvrType = HTML phpg NODENAME = webmain, SvrType = PHP, ScriptLoc = /cgi-bin/php *SERVER html SVGNAME = htmlg, MinProc = 1, MaxProc = 5 php SVGNAME = phpg, MinProc = 1, MaxProc = 5 *LOGGING log1 Format = DEFAULT, FileName = /usr/local/webtob/log/access.log, TmaxSoft 26
28 Application 개발안내서 OPTION = Sync log2 Format = ERROR, FileName = /usrlocal/webtob/log/error.log, OPTION = Sync *EXT php3 SvrType = PHP MimeType = application/x-httpd-php3, PHP 모듈이있는곳의경로는 WEBTOBDIR 이하의상대경로위치만적어주면된다. 즉, 위의예제환경파일에서 ScriptLoc 에설정된모듈경로는절대경로가아니라, 가설치된 DIR 이하에 /cgibin/php 가위치한다는의미이다. 위와같이설정을하면 PHP 를사용할수있다. php3 모듈을사용하는경우에는부가적인설정이필요하다. 다른버전과는달리 php3 의경우는, 확장자가.php3 인파일을이용하기위해서이를 EXT 절에추가하여주어야한다. php4 는기본적으로 php 라는확장자를이용하기때문에추가설정을요하지않으나, php3 는확장자가.php3 이기때문에이는 EXT 절에추가해주어야동작한다. 아래예를참조하자 PHP Example PHP 를이용한간단한낙서장만들기예제를보자. PHP 를사용하려면 PHP 가설치되어있어야한다. 이 PHP 의설치에대해서는여기서는자세히설명하지않겠다. 최신버전의모듈을다운받아설치하면된다. PHP 를사용할수있는환경이라는가정하에아래와같은순서로예제를실행하면된다. memo.php3 <html> <head> <title> 메모장 </title> <style> body { color:black; font-size:9pt; font-family: 굴림체 table { color:black; font-size:9pt; font-family: 굴림체 a:link { color:#003366; text-decoration:none; font-size:9pt; font-family: 굴림체 a:visited { color:#003366; text-decoration:none; font-size:9pt; font-family: 굴림체 27 TmaxSoft
29 Application 개발안내서 a:active { color:red; text-decoration:none; font-size:9pt; fontfamily: 굴림체 a:hover { color:#336699; text-decoration:none; font-size:9pt; font-family: 굴림체 </style> </head> <body> <?php // 변수선언 $cgi_dir = "/usr/local/webtob/docs/"; // 계정주소부분에메모장이 설치된절대주소 $data_dir = $cgi_dir."memo_data/"; function message($var) { echo (" <script> window.alert('$var') history.go(-1) </script> "); exit; function page_refresh($url) { echo (" <meta http-equiv='refresh' content='0; URL=$url'> "); if ($mode == "input") { if ((!$content) (!$writer)) message(" 이름과내용을입력하셨는지 확인하세요."); $filename = $data_dir.date("u").".mdt"; $data = date("y/m/d"); $fp = fopen($filename,'w'); fwrite($fp,$content." ".$writer." ".$data); TmaxSoft 28
30 Application 개발안내서 fclose($fp); page_refresh($php_self); $memo_dir = dir($data_dir); $memo_file = array(); $i = 0; while ($filename = $memo_dir->read()) { if (strstr($filename,".mdt")) { $memo_file[$i] = $data_dir.$filename; $i++; rsort($memo_file); $total = count($memo_file); $list_num = 10; $link_num = 10; $total_page = intval(($total-1)/$list_num)+1; if (!$page) $page = 1; $start_list_num = ($page-1)*$list_num; $start_link_num = intval(($page-1)/$link_num)*$link_num+1; echo " <table border=0 cellpadding=3 cellspacing=1 bordercolor=# align=center width=600> <tr align=center bgcolor=# style='color:white'> <td width=30> 번호 </td> <td width=65> 등록일 </td> <td width=80> 이름 </td> <td> 메모 </td> </tr> "; for ($i=0;$i<$list_num&&$i+$start_list_num<$total;$i++) { $filename = $memo_file[$i+$start_list_num]; 29 TmaxSoft
31 Application 개발안내서 if (file_exists($filename)) { $fp = fopen($filename,'r'); $buffer = fread($fp,filesize($filename)); fclose($fp); $file_content = explode(" ",$buffer); $no = $total - $i - $start_list_num; $memo = nl2br(stripslashes($file_content[0])); $name = nl2br(stripslashes($file_content[1])); $date = $file_content[2]; echo " <tr> <td align=center>$no</td> <td align=center>$date</td> <td align=center>$name</td> <td>$memo</td> </tr> "; echo " </table> <div align=center> <form method=post> 이름 : <input type=text name=writer size=10 maxlength=15 style='border:1 solid black'> 내용 : <input type=text name=content size=40 maxlength=100 style='border:1 solid black'> <input type=submit name=up value= 올리기 style='border:1 solid black'> <input type=hidden name=mode value=input> </form> "; if ($start_link_num>$link_num) { $prev = $start_link_num - 1; TmaxSoft 30
32 Application 개발안내서 echo "<a href=$php_self?page=$prev> [prev] </a>"; $i = 0; while (($i<$link_num)&&($start_link_num + $i<=$total_page)) { $page_link = $start_link_num + $i; if ($page_link==$page) echo "$page"; else echo "<a href=$php_self?page=$page_link> [$page_link] </a>"; $i++; if ($page_link<$total_page) { $next = $page_link + 1; echo "<a href=$php_self?page=$next> [next] </a>"; echo "</div>";?> </body> </html> 위에소개된프로그램은이름과메모의내용을쓰고올리기버튼을누르면위의표에작성한메모가남는형식의간단한메모장예제프로그램이다. 우선위와같이 memo.php3 를작성한후이파일을환경파일에서 DOCROOT 로설정해놓은디렉토리인 /$WEBTOBDIR/docs/ 에갖다놓는다. /$WEBTOBDIR/docs/ 에 memo_data 디렉토리의퍼미션을 777 로준다. 라는디렉토리를만들어놓고그 $> mkdir memo_data $> chmod 777 memo_data 브라우저에서호출하여실행 /memo.php3 실행화면은아래와같다. 31 TmaxSoft
33 Application 개발안내서 2.4 SSI SSI 의이용 SSI 는다이나믹한문서를만드는데있어매우유용하다. 예를들면헤더파일등을 HTML 문서에포함시킬수도있고마지막수정일 (Last Modified) 을자동으로조절할수있는기능들을문서에포함시킬수도있다. 이것은 CGI 와같이사용할수있으나복잡하지않으며, 프로그래밍또는스크립트의기능같은것은가지고있지않다. SSI 는간단하게나마다이나믹한문서를만들수있는것이다. SSI 는 HTML 문서에 'command' 를삽입하여사용할수있으며, Server 에서는 SSI 문서를읽어들이고, SSI 명령어를찾아보고그에맞는기능을수행한다. 예를들면 Last modification time 을수정하는 SSI 명령어가문서에포함되어있으면서버는파일로부터명령어들을읽어들여명령을수행하여시간을수정한다 에서의 SSI 의사용 SSI 는참고자료를구하는것이쉽지가않다. 대부분 CGI 프로그램작성란에참고로들어가거나, 혹은간단한예제로넘기는경우가대부분이다. 따라서여기에서간단하나마기본적인 SSI 의설정과문법을알아보도록하자. 에서기본설정은 HTML 파일안에 SSI 명령어를포함하고있지않다. 왜냐하면, HTML 파일을매일액세스하는곳에서는이로인하여 html 이오히려느리게작동하기때문이다. SSI 가필요해서사용하기원한다면 환경파일안에 TmaxSoft 32
34 Application 개발안내서 SSI 를위한 Server 를추가로포함시켜주어야한다. 이렇게하는것이성능향상에더유리한구조이다. 아래에소개되는예제환경파일을참조하여각시스템에맞게환경파일을수정해준후 ***.shtml 의 SSI 문서를 DOCROOT 에설정된디렉토리아래에갖다놓으면 SSI Service 를사용할수있다. 다음의환경파일은 에서 SSI 를사용할수있도록하는최소한의환경설정파일이다. 그러므로다음의예제환경파일을참조하여각시스템에맞게설정해주면 SSI 서비스를제공할수있다. sample.m *DOMAIN webtob1 *NODE webmain WEBTOBDIR = "/usr/local/webtob", SHMKEY = DOCROOT = "/usr/local/webtob/docs", PORT = "80", LOGGING = log1, ERRORLOG = log2 *SVRGROUP htmlg ssig NODENAME = webmain, SvrType = HTML NODENAME = webmain, SvrType = SSI *SERVER html SVGNAME = htmlg, MinProc = 1, MaxProc = 5 ssi SVGNAME = ssig, MinProc = 1, MaxProc = 5 *LOGGING log1 Format = DEFAULT, FileName = /usr/local/webtob/log/access.log, OPTION = Sync log2 Format = ERROR, FileName = /usr/local/webtob/log/error.log, OPTION = Sync 33 TmaxSoft
35 Application 개발안내서 SSI Commands 모든 SSI 명령어는 HTML 문서안에 HTML comments 형식으로저장되어야한다. SSI 사용방법은아래와같다. <!--#flastmod file="nextel.html" --> 위예에서사용된 flastmod 명령어는수정시간을출력하라는뜻이고 Value 로는 nextel.html 이쓰인다. 명령어전체는 comment <!-- and --> 로처리되어져야한다. 일반적으로, 모든명령어는다음형식을따른다. <!--#command arg1="value1 arg2="value > 여기서 arg1,arg2 는인수고나머지 value1, value2 는인수의값을나타낸다. flastmod 예에서, 'file' 은인수가되는것이고 'nextel.html' 은값이되는것이다. 흔히명령어는인수의이름에따라다르게실행되어질수있다. 예를들어본다면 <!--#flastmod virtual="/" --> 서버의홈페이지마지막수정시간을얻을수있다. ( 이것은다른파일명을가지고 Access 될때유용하게사용할수있다.) SSI 명령어가실행될때 'environment variables' 값이설정이된다. 이것은 CGI variables 을포함하고있고 (REMOTE_HOST etc), DOCUMENT_NAME 그리고 LAST_MODIFIED 등을가지고있다. 또다른예로 echo 명령어로도출력할수있다. <!--#echo var="last_modified" --> 2.5 Servlet Servlet 의이용 Java Servlet 은 Java 2 Platform Enterprise Edition(J2EE) API 에서제공하는엔터프라이즈기술의하나로 Sun Microsystems 를위시한산업계의영향력있는업체들이같이참여해웹환경개발및수행환경의표준으로 specification 작업에참여하고있고, 지원하는서블릿 TmaxSoft 34
36 Application 개발안내서 컨테이너와어플리케이션서버들을제공하고있다. 현재 Java Servlet 2.4 API specification 이제공된다. Java Servlet 은웹서버 ( 정확히 Servlet Contanier) 상에서실행되는자바 Class 다. 일반 Java Application 에서할수있는모든일을수행한다. 예를들어파일 I/O 라든가, 어떤서버와도자유로이통신할수있고, 다른프로그램을실행시킨다든가외부라이브러리를호출하는등의일들을모두자유롭게수행할수있다. 또한서버프로토콜에구애받지않고 FTP, DHCP, HTTP 등여러가지 Application Layer 의 Protocol 을사용할수있다. 그러나현재웹환경에서는 HTTP 서비스를주로사용하고있으므로, 주로 HTTP/CGI 프로토콜기반에서 CGI 서비스를확장한형태로 HTTP 서블릿을구현한다. Java Servlet 은기본적으로 Java Technology 가제공하는장점을다가지고있어서어떠한서버에서든 JVM 만지원된다면실행가능하므로웹서버플랫폼에독립적이고, 서버기능확장이쉽다. 또한클라이언트의요청에대해 Servlet Container 에의해독립된 Thread 기반으로서비스가되는 Multiple Thread 서비스가기본적으로제공이되어프로세스기반의서비스에비해수행속도가빠르다. 와같은 Web Server 에서는 HTML, CGI, SSI 등의 Service 들을제공한다. 물론이런 Service 를가지고간단한전자상거래및기타사업들을충분히구현가능하나많은 Data 를처리하거나 Transaction 및 DataBase 에대한연결들을필요로하는것에는 만의기능으로는부족하다고할수있다. 이에, JEUS 라는 Web Application Server 를이용하여 에서미처제공하지못하는기능들을이용할수있다. 와 JEUS 를연동하면정적인페이지와 CGI,SSI,PHP 등의 Service 는 가처리하고 Servlet 이나 JSP 등의 Service 등의요청이들어왔을때는 가 JEUS 에게요청을넘겨주고그결과를받아 Client 측으로전송하여준다. 현재 JEUS 에서는 Java Servlet Specification 2.2 와여기서설정되어있는 API 들을구현하였다. Java Servlet Specification 2.2 에서는웹어플리케이션개념및웹어플리케이션아카이브파일 (war) 을도입하고, 응답버퍼링과분산 Servlet 을도입하여보다더엔터프라이즈환경에적합한기능들을제공한다. 참고로 살펴보면 Servlet 에대한자세한정보는참조할수있다. 35 TmaxSoft
37 Application 개발안내서 와 JEUS 연동 먼저 에서 Servlet 및 JSP 를이용하기위해서는 JEUS 를설치하고 와의연결을위한설정을해준다음기동시켜야한다. JEUS 설치방법은 Administration Guide 를참조하도록한다. 와의 JEUS 의연결설정을위해서는두가지환경파일이필요하다. 하나는 의환경파일인 sample.m 이고또다른하나는웹컨테이너의환경파일인 WEBMain.xml 이다. 일반적으로 는환경파일인 sample.m 이 /$WEBTOBDIR/config/ 경로에존재하지만, JEUS 의경우는서블릿엔진을기동하기위한환경이 JEUS 설치시자동으로셋업되는것이아니기때문에수동으로설정해주어야한다. 아래와같은디렉토리를만들고, 그경로에원하는 WEBMain.xml 파일을작성한다. /($JEUS_HOME)/config/(nodename)/(nodename)_servlet_(enginename)/ 디렉토리명은 JEUSMain.xml 파일설정시정해주었던값들과연관이있는데, nodename 은 <NodeName> 노드명 </NodeName> 에지정했던값, enginename 은 <Name> 엔진명 </Name> 에지정해주었던값과동일해야한다. 즉, 예를들어 JEUS 가설치된디렉토리가 /user/tmaxsoft 이고, 노드명은 tmaxhost, 서블릿엔진명은 engine1 이라면 WEBMain.xml 의위치경로는 /user/tmaxsoft/tmaxhost/tmaxhost_servlet_engine1 이된다. 다음은 sample.m 과 WEBMain.xml 에대한설정의예이다. sample.m *DOMAIN webtob1 *NODE webmain WEBTOBDIR="/usr/local/webtob", SHMKEY = 54000, DOCROOT="/usr/local/webtob", PORT = "10000", LOGGING = "log1", ERRORLOG = "log2", HTH=1, JsvPort = 9900 *SVRGROUP htmlg jsvg NODENAME = "webmain", SvrType = HTML NODENAME = "webmain", SVRTYPE = JSV TmaxSoft 36
38 Application 개발안내서 *SERVER html SVGNAME = htmlg, MinProc = 1, MaxProc = 2 JeusServer SVGNAME = jsvg, MinProc = 2, MaxProc = 4 *URI uri2 Uri = "/examples/", SvrType = JSV *LOGGING log1 Format = "DEFAULT", FileName = "/usr/local/webtob/log/access.log", Option = "sync" log2 Format = "ERROR", FileName = "/usr/local/webtob/log/error.log", Option = "sync" *EXT htm MimeType = "text/html", SvrType = HTML jsp SvrName = JeusServer, SvrType = JSV MimeType = "application/jsp", 우선용어상유의해야할부분은 에서사용하는 서버 라는단어는특정작업을처리할프로세스를말한다. 예를들어 HTML 페이지들을처리한다면 HTML 서버, servlet 요청을처리한다면 JSV 서버, CGI 를처리하기위한 CGI 서버등이있다. 위의예제환경파일을살펴보면 NODE 부분에서실제웹브라우저와연결을맺는포트는 PORT 라는속성이고 JSVPORT 는웹컨테이너와연결을맺을포트로서실제웹브라우저로터요청을받는포트와는무관하다. JsvPort 번호는기본적으로 9900 로설정되어있고, JEUS 에서도이값으로설정되어있다. 그러나, 만약사용자가다른 Port 를이용하고싶다면이 sample.m 파일의 JsvPort 항목을수정하면된다. 마찬가지로 JEUS 에서는 Configuration File 로 WEBMain.xml 파일을이용하는데이곳에 와연동을위한 Port 가있다. 이것을 에서설정한것과같은값으로설정하면된다. 그리고 HTH 에설정된값은 에서 HTH 라는프로세스의 개수로서이값과 WEBMain.xml 의 ConnectionPortNum 은반드시 일치하여야한다. 37 TmaxSoft
39 Application 개발안내서 SVRGROUP 부분에서는웹컨테이너와연결을맺어작업을할서버들의그룹에대한설정으로예에서는서버그룹의이름으로 jsvg, NODE 이름으로 node1, 서버의종류로서 JSV 를설정하였다. 여기서 JSV 라는것이 Java Servlet 에대한요청을처리함을나타낸다. SERVER 부분에서는실제로웹컨테이너와연결하여작업을할서버를설정하는데위의예에서서버의이름으로 JeusServer 이고서버그룹의이름은 SVRGROUP 부분에서설정한 jsvg 이다. MinProc 은웹컨테이너와의최소연결개수이고 MaxProc 은웹컨테이너와의최대연결개수이다. 이개수들은쓰레드풀의 MinThread 와 MaxThread 와각각일치하거나커야한다. URI 부분은어떤 URI 가요청이되었을때어떤서버를수행시킬지를지정하는것으로위의예에서 /examples/ URI 에대해 JSV 서버, 즉 JesuServer 이라는서버를수행시키도록설정되어있다. EXT 부분에서는어떤확장자를가진파일의요청에어떤서버를수행시킬지를지정하는것으로위의예에서는 jsp 라는확장자에대해 JSV 서버를실행시키도록설정되어있다. 다음의예제파일은 WEBMain.xml 이다. WEBMain.xml <?xml version="1.0"?> <web-container xmlns=" <context-group> <group-name>mygroup</group-name> <group-docbase>webapps</group-docbase> <print-error-to-browser>true</print-error-to-browser> <webserver-connection> <webtob-listener> <webtob-home>/data2/wbqam/webtob</webtob-home> <listener-id>webtob1</listener-id> <port>9900</port> <output-buffer-size>8192</output-buffer-size> <thread-pool> <min>4</min> <max>10</max> <step>1</step> <max-idle-time>30000</max-idle-time> </thread-pool> <webtob-address>localhost</webtob-address> TmaxSoft 38
40 Application 개발안내서 <registration-id>mygroup</registration-id> </webtob-listener> </webserver-connection> </context-group> <session-cluster> <session-routing>false</session-routing> </session-cluster> </web-container> 위의 WEBMain.xml 을살펴보면, 와연결을관리할리스너의종류는 WebtobListener 이고포트는 9900 번으로설정되어있는데이것은 sample.m 에설정된 JSVPORT 와일치해야한다. webtob-address 에는연결을맺을 의어드레스를지정해준다. 그리고 registration-id 의값은 와처음연결을맺을때등록과정중사용할등록 ID 로서 sample.m 의 SERVER 부분의서버이름 (JeusServer) 과같아야한다. ConnectionPortNum 은 의 HTH 개수로서 sample.m 에서 NODE 부분의 HTH 설정값과일치해야한다. 예에서는양쪽다 1 개로설정되어있다. 그리고쓰레드풀에대한설정은내장 Web Server 와의연결과같다. Sample.m 과 WEBMain.xml 위와같이수정하면 JEUS 의 Servlet Engine 을이용하기위한설정이끝난셈이다. 그리고 와 JEUS 를 Boot up 하면된다. 이때중요한것이 Booting 하는순서이다. 현재구조상 가 JEUS 에서연결을맺으려하는것을 Listen 하는상태이므로, 반드시 가먼저 Booting 되어야한다. 가 Booting 되어 JEUS 와연결을위한 Port 에서 Listen 상태로되어있고, JEUS 가 Booting 되면서 와연결을맺는다. 연결이성공하면연결이성공되었다는 Message 가나오게되고, 이후에 Servlet 이나 JSP 등 JEUS 의 Servlet Engine 을이용해야하는사용자의요구는모두이 Port 를통해서 JEUS 에전달되어처리된다 Servlet example 위와같이 와 JEUS 를연동하기위한설정들을끝마쳤다. 이젠간단한 Servlet 을작성하여 Servlet service 를이용할수있도록하겠다. HelloTest.java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; 39 TmaxSoft
41 Application 개발안내서 public class HelloTest extends HttpServlet { public void doget(httpservletrequest req, HttpServletResponse res) throws ServletException, IOException { //header 설정한다. res.setcontenttype("text/html"); PrintWriter out = res.getwriter(); //HEAD 이면, 초기에 return 한다. if(req.getmethod().equals("head")) return; String[] name = req.getparametervalues("name"); out.println("<html>"); out.println("<head><title>hello, "+name[0]+ "</title></head>"); out.println("<body>"); out.println("hello, " +name[0]); out.println("</body></html>"); out.close(); public void dopost(httpservletrequest req, HttpServletResponse res) throws ServletException, IOException { doget(req,res); 위의예제프로그램은 HelloTest.java 로사용자로부터이름을입력받아서 Hello message 를브라우저에표시해주는간단한프로그램이다. 우선 Servlet code 를 compile 한다. - Servlet 코드는다른 java 프로그램과마찬가지로 javac 로컴파일한다. 이때신경쓸일은 servlet 코드에사용된패키지들의경로를 javac 의 classpath 옵션으로지정해주어야한다는것이다. 이 servlet 코드는 J2EE 의 API 들만사용하고개발자가개별적으로만든 class 파일들은사용하지않았으므로 classpath 에 jeus 디렉토리내의 classes 디렉토리만지정해주면된다. 즉, $> Javac classpath (JEUS 의 classes 디렉토리경로 ) HelloTest.java 를이용해컴파일을한다. 만약 JEUS 가 D 드라이브의 Jeus 라는디렉토리에설치되어있다면 JEUS 의 classes 디렉토리경로는 D:/Jeus/classes/ 가된다. TmaxSoft 40
42 Application 개발안내서 Servlet 클래스등록한다. - 이렇게생성된 servlet 클래스파일을 JEUS 에서실행시키기위해서는이 servlet 을 JEUS 에등록해야한다. 여기서는간단히 servlet 을실행시키기위해현재존재하는컨텍스트의설정에이 HelloTest servlet 을추가해보기로하겠다. 즉, 다음과같은단계를거쳐서 servlet 을등록한다. JEUS 를설치한디렉토리의 /webhome/servlet_home/webapps /examples/web-inf/classes 디렉토리에이 servlet 의 class 파일을넣어둔다. 우리는 examples 컨텍스트에이 HelloTest 을추가할것이다. 바로상위디렉토리인 WEB-INF 의 web.xml 을열어서다음의예제 web.xml 파일과같이굵은글씨부분과같이내용을추가한다. Web.xml <web-app> <servlet> <servlet-name>servletcontexttest</servlet-name> <servlet-class>servletcontexttest</servlet-class> <init-param> <param-name>color</param-name> <param-value>blue</param-value> </init-param> <init-param> <param-name>age</param-name> <param-value>20</param-value> </init-param> <load-on-startup>-1</load-on-startup> </servlet> <servlet> <servlet-name>hello</servlet-name> <servlet-class>hellotest</servlet-class> </servlet> <servlet> <servlet-name>requestheadertest</servlet-name> <servlet-class>requestheadertest</servlet-class> <load-on-startup>-1</load-on-startup> </servlet> 아래의 input.html HTML 문서와같이이름값을입력받는간단한 html 문서를작성해서 DOCROOT 에옮긴다. 41 TmaxSoft
43 Application 개발안내서 input.html <html> <head> <title>introductions</title> </head> <body> <form method=post action="/examples/hello"> If you don't mind me asking, what is your name? <input type=text name = "name"><p> <input type=submit> </form> </body> </html> 와 JEUS 를구동시킨다음, 브라우저를띄우고 HTML service 와 Servlet Service 를호출해본다. 실행화면은다음과같다. Browser 에서 로 HTML service 를요청한결과 TmaxSoft 42
44 Application 개발안내서 앞의그림에서이름값을입력하여 Servlet Service 를요청한결과 43 TmaxSoft
45 Application 개발안내서 3 WBAPI 3.1 WBAPI 의개념 는기존 CGI 방식의 Application Program 들의문제점을해결하기위하여새로운 만의 API 를제공한다. 기존의 CGI 방식은사용자의요구에따라서그때마다새로운 Process 가시작되어사용자의요구를처리한다. 이는결국사용자가새로운요구를하면그순간에시스템의운영체제가그프로그램에해당하는 Process 를 Fork 하는작업을수행하게한다. 이때새로운 Process 를 Fork 하는작업은시스템자체에부하를걸게되고, 이런일이많아지게되면시스템은많은부담을안게된다. 이런문제점때문에기존 CGI 사용자들은점차새로운 Application 으로눈을돌리게되었고, Servlet, PHP, ASP, JSP 등이등장하였다. 그러나이들은모두 C 로만들어진프로그램이아니라 Java 나 Script 등을이용한새로운형태의프로그램들이다. 따라서, 새로운개발에는용이할지몰라도기존 C Style 로 CGI 프로그램들을개발하여운영해온사람들에게는기존프로그램들을모두폐기하고새로만들어야하는부담을안겨주고있다. 이에, CGI 개발자들은자신들이운영하던 CGI 를버리고완전히새로운프로그램을도입할것인지, 아니면기존프로그램을운영하되 Server 를늘려서 CGI 의부담을줄일것인지큰고민에싸이게되었다. 이에 에서는기존 CGI 개발자들의고민을덜고자새로운형태의 API 를개발하였다. 이는 C Style 의프로그램을위한 API 로서, CGI 프로그램의부담을획기적으로덜고기존 CGI 프로그램의수정은최소화한것이다. 이를통하여기존 CGI 프로그램을통하여 Service 를해오던많은사용자들은부담도덜고, 성능도얻는획기적인결과를얻을수있는것이다. TmaxSoft 44
46 Application 개발안내서 CGI 방식은위에서언급한대로사용자가요구할때마다매순간새로운프로그램이 Fork 되고처리가끝나는순간 exit 되는일을반복한다. 이는시스템에서볼때굉장히큰부담이아닐수있다. 다른처리를해야할시간에새로운 Process 를 Memory 에 Load 하고 Scheduling 을해야하는등의많은작업을해야하기때문이다. 아래그림은아파치 Web Server 에서의 CGI 를사용하는모습을 나타낸다. 위그림을보면매순간 CGI 가 fork 되는로드가늘생길수밖에없다는것을알수있다. 에서제공하는 WBAPI 는우선 CGI 의이런점을개선하였다. 즉, 사용자가요구를보내는매순간에 Process 를 Fork 하는것이아니라, Web Server 가 Boot Up 되는시점에이러한프로그램들을미리 Fork 하여 Memory 에올려놓는것이다. 또한, 사용자의요구에대한처리가끝난시점에서도 Exit 되는것이아니라, 계속 Memory 에상주하여다음요구를기다리는것이다. 결국매순간 Process 가 Fork 되고 Exit 되는부담이줄어들게되는것이다. 또한, 단순히이러한부담을줄이는외에도, 이 WBAPI 로설계된프로그램의관리를 가하게된다. 따라서만약사용자의부주의나설계오류로프로그램이죽거나문제가생겼을때, 즉각새로운프로그램을다시실행할수있게하는등의기능이추가되었다. 또한이러한프로그램들의수를조정할수있게하여만약특정프로그램에대한요구가많다고판단되면이를많이미리 45 TmaxSoft
47 Application 개발안내서 실행시켜놓게할수도있다. 의 WBAPI 의호출을그림으로나타내면아래와같다. 그리고또하나주의할점은앞에서도언급했지만, WBAPI 는 main() 등으로시작하는일반함수와는다르다는것이다. 이는, WBAPI 로작성한프로그램들이독립된 Process 로발생하기는하지만, 실제 의내부와연결된 Process 로동작하기때문이다. 따라서함수의시작이일반적인 main() 이아닌, Service Name 이라는것으로시작하게된다. 따라서, 함수의시작되는이름이반드시 Service Name 이되어야하고, 이는 의환경파일에등록이되어있어야한다. 3.2 WBAPI List 는다양한 WBAPI 를제공한다. 위의개념에서알수있듯이 WBAPI 를이용하여 Program 을작성하면, 사용자가만족할만한충분한성능을얻을수있다. 이장에서는 가제공하는 API 의목록과각각의기능에대해서알아볼것이다. TmaxSoft 46
48 Application 개발안내서 WBAPI 는각각 INIT/DONE API, ALLOC API, GET API, PUT/SET API, SEND API, COOKIE API, ETC API 의일곱가지종류로구성되어있다. 이들은각각의기능별로나누어진것이다. INIT/DONE API 는시용자가 WBAPI 로작성한서버프로그램이기동및종료시에수행해야할작업들을구현해놓을수있는함수들이다. ALLOC API 는 의서비스프로그램에서포인터변수에메모리를할당하고해제하는함수이다. GET API 는사용자가 Request 한것에대한자료를읽어들이는것으로사용자의 Request 의 Data, Method 등을읽어들이는것이가능하다. PUT/SET API 는 WBAPI 에서처리한값을출력하기위한용도로쓰이는것으로 CGI 에익숙한사람이라면출력값을나타내기위하여 C 언어의 printf 함수나 Perl 의 print script 를이용하는것과같다고보면된다. SEND API 는사용자의 request 에대한응답으로 PUT 계열함수를사용하여 WBSVCINFO 구조체에서비스처리결과를저장한것을브라우저에리턴하는함수이다. COOKIE API 는 HTTP 스타일의 Cookie 를생성하고, 읽고처리하기위한작업을수행한다. ETC API 는 WebtobB 에 File Upload 수행하거나 Error Number 를얻을수있다. 그리고 WBAPI 는차후에 Multi thread 기능을제공할예정이다. 이를위하여각각의함수마다특정 Data Structure 를선언하는것이필요하다. 처음 WBAPI 프로그램을작성하게되면 Service Name 을등록하게되는데이때 WBSVCINFO 라는구조를선언하게되어있다. 이를 WBAPI 내부의각각의함수의앞에반드시적어주어야한다. 따라서, 한 WBAPI 프로그램내부의모든 WBAPI 함수는 Service Name 시에선언된구조를함수의첫번째인자로가지고있어야한다. 그러면각각의 API 에대해서간단하게소개하도록하겠다. 보다자세한설명을보기를원한다면 에서제공하는 WBAPI Reference Manual 을참조하기바란다. 47 TmaxSoft
49 Application 개발안내서 INIT/DONE API WBAPI 로작성된서버가기동되면서그리고종료되면서서버를초기화하고사용하던리소스를반환하는역할을하는함수들이다. 함수이름기능 wbsvrinit() 서버를초기화한다. wbsvrdone() 의반환을알리는함수 ALLOC API 에서제공하는버퍼타입의메모리를할당및해제할때사용하는함수들이다. 함수이름기능 wbmalloc() wbfree() 사용자가설정한 SIZE 만큼의메모리를할당한다. wbmalloc() 에의해할당된메모리를제거 (free) GET API 사용자가 Request 한것에대하여사용자의정보를읽어들이는것으로사용자의 Request 의 Data, Method 정보등을가져올수있다. 함수이름기능 wbgetauthtype() 사용자의인증방식을얻어낸다. TmaxSoft 48
50 Application 개발안내서 WbGetContentLength() Client 가보낸 Content 의크기를얻어낸다. WbGetDocumentRoot() 의 Home 디렉토리의값을얻어낸다. wbgethdr() request 의 header 에서특정 key 에해당하는값을얻는다. wbgetdatehdr() Data 를표현하는 Header 를얻는다. wbgetinthdr() 지정된 Header 값을정수형태로얻는다. wbgetnthhdr() WbGetHdrCount() wbgetdata() wbgetnthkey() Header 에서 N 번째에해당하는 Header 값을얻는다. 사용자가보낸 request 의 Header 의총개수를얻는다. request 의 Data Field 에서 key 에해당하는값을얻는다. request 에서 N 번째의 key 에대한 data 를얻는다. wbgetnthdata() request 의 data 에서 N 번째 data 를얻는다. wbgetdatacount() wbgetvalue() request 에서입력으로들어온 data 의숫자를얻는다. request 에서특정 key 값의 N 번째 data 를얻는다. wbkeyoccur() request 들어온 data 에서 key 값의 수를 얻는다. wbgetmethod() request 로들어온 HTTP Method 를정수형으로읽어들인다. 49 TmaxSoft
51 Application 개발안내서 wbgetparseduri() Client 로부터 Request 가들어온 URI 정보를얻어낸다. wbgetpathinfo() request 와관계된상대경로정보를얻어낸다. wbgetpathtranslated() request 와관계된절대경로정보를얻어낸다. WbGetQueryString() request URL 로부터질의어문자열을얻어낸다. wbgetprotocol() request 와관계된 Protocol 정보를얻어낸다. wbgetremoteuser() request 하는사용자의이름을얻어낸다. wbgetrequesturi() request 의 URI 를얻어낸다. wbgetremoteaddr() request 한 Remote Host 의 IP 를얻어낸다. wbgetremotehost() request 하는 Remote Host 의이름을얻어낸다. wbgetremoteident() Server 로부터검색된사용자의 name 을얻어내는데사용된다. wbgetreqline() request 에들어온 line 의첫번째 line pointer 를얻는다. wbgetfilename() 파일의이름을알아낸다. wbgetfilelen() 파일의크기를알아낸다. wbgetscheme() reqeust 된서비스의 Protocol 정보를얻어낸다. wbgetscriptfilename() request 한 WBAPI 서비스가실행되는절대경로를얻어낸다 wbgetscriptname() request 한서비스가실행되는경로를얻어낸다. TmaxSoft 50
52 Application 개발안내서 wbgetservername() 서버의 hostname 을얻어낸다. wbgetserverport() 서버의 port 번호를얻어낸다. wbgetserversoftware() 서버의 Software 정보를얻어낸다. wbgettranslateduri() request 된서비스의 URI 를해석하여실제경로를얻어낸다. wbgetrequesturl() request URL 값을얻어낸다 PUT/SET API 사용자의 request 에대한응답으로 WBAPI 에서처리한값을출력하기위한용도로쓰이는함수이다. WBAPI 에서는 request 에대한처리를한후그결과를 WBSVCINFO 라는구조체에저장하여그구조체를브라우저에넘기는데이 WBSVCINFO 구조체에응답으로보낼데이터를저장하는역할을해주는함수들이다. PUT 계열함수를이용할때는몇가지주의사항이있다. PUT 관련함수들은약간의순서를지켜주어야한다. 먼저, 다른 PUT 계열함수들보다먼저수행되어야하는함수가있다. 이는 wbputprotocolstatus(wbsvcinfo *rqst, int n, char *reason) 함수로이는 Response Header 를먼저작성하기위함이다. 마찬가지로 PUT 관련함수중에서 Header 를작성하는함수들이 Data Field 를작성하는함수들보다먼저선언되어야한다. 이러한순서를지켜주어야 WBAPI 가문제없이수행된다. 함수이름기능 wbputhdr() response 의 Header 를설정한다. wbputinthdr() Response 의 Header 를추가한다. wbsetstatus() request 의 status 의값을설정한다. wbputstr() string 값을출력한다. 51 TmaxSoft
53 Application 개발안내서 wbput() 특정 size 만큼의 data 를출력한다. WbPrint() 사용자가지정한내용을출력한다. wbputfile() wbputpartialfile() file download 를위한함수, 특정파일을읽어들여모두브라우저로보내준다. file download 를위한함수로특정파일의 일부분 을읽어서브라우저로보내준다. File 의 offset 부터 size 만큼읽어서들여보내준다. size 가 0 이면파일끝까지읽어보내준다 SEND API 사용자의 request 에대한응답으로 PUT 계열함수를사용하여 WBSVCINFO 구조체에서비스처리결과를저장한것을브라우저에리턴하는함수이다. 함수이름기능 wbflush() 현재 buffer 에있는모든내용을모두 write 하게한다. wbsenderror() 상태코드의 Error 여부를확인한다. WbSendRedirect() 지정된주소로응답을되돌려준다. wbreturn() 의반환을알리는함수 COOKIE API 함수이름기능 wbcreatecookie () 새로운 cookie 를만든다. wbgetcookie() 브라우저에의해보내진 cookie 중에서 TmaxSoft 52
54 Application 개발안내서 원하는 cookie 를리턴한다. wbputcookie() 지정된 cookie 에응답을덧붙인다. wbcookiegetdomain() 지정된 cookie 에서도메인을리턴한다. wbcookiegetname() 지정된 cookie 의 Name 을리턴한다. wbcookiegetpath() cookie 의경로를리턴한다. wbcookiegetvalue() cookie 의값을리턴한다. wbcookiegetversion() cookie 의버전을리턴한다. wbcookiesetcomment() cookie 의주석필트를설정한다. wbcookiesetdomain() cookie 의 Domain 을설정한다. wbcookiesetmaxage() cookie 의수명시간을설정한다. wbcookiesetpath() cookie 를위한경로를설정한다. wbcookiesetsecure() cookie 가 SSL 과같이보호되는프로토콜에서전송되어야하는지를설정. wbcookiesetvalue() cookie 에새로운값을설정한다. wbcookiesetversion() cookie 에새로운버전을설정한다 ETC API 함수이름기능 wbgeterrmo() 의 Error number 를얻어낸다. wbsavefile() 파일의 upload 를위한함수이다. 53 TmaxSoft
55 Application 개발안내서 3.3 Configuration for WBAPI 환경파일설정 에서 WBAPI 를쓰기위해서는위와같은함수들을사용하여 logic 을구현하는것과함께 의환경설정이필요하다. 즉, 에 WBAPI 를이용하여프로그램을개발하였고, 이는이렇게이용하겠다는식의등록을한다는것이다. 의환경파일을예로들어설명하겠다. 의환경파일은 DOMAIN, NODE, SVRGROUP, SERVER 절이필수절로있어야한다. 여기에서는 에서 WBAPI 를사용하기위한기본적인환경파일을소개하겠다. sample.m *DOMAIN webtob1 *NODE webmain WEBTOBDIR = "/usr/local/webtob", SHMKEY = 99000, DOCROOT = "/usr/local/webtob/docs", APPDIR = "/usr/local/webtob/ap", HOSTNAME = "webmain.tmax.co.kr", PORT = "80" *SVRGROUP htmlg wbapg NODENAME = webmain, SVRTYPE = HTML NODENAME = webmain, SVRTYPE = WEBSTD *SERVER html SVGNAME = htmlg, MinProc = 5, MaxProc = 10 wbaps SVGNAME = wbapg, MinProc = 2, MAXProc = 5 *SERVICE write_board SVRNAME = wbaps *URI uri1 Uri = /wbapi/, SVRTYPE = WEBSTD TmaxSoft 54
56 Application 개발안내서 위의설정파일에서진한색으로처리된부분이실제 WBAPI 를쓰기위한기본설정이다. SVRGROUP 절에다음과같은항목이있음을알수있다. wbapg NODENAME = webmain, SVRTYPE = WEBSTD 이는 webmain 라는이름을 Host Machine 에 wbapg 라는 Server Group 을설정하고, 이것이 WBAPI 를쓰기위한 WEBSTD 라는 Server Type 을가짐을나타낸것이다. 그리고이후 SERVER 절에다음과같은항목이있음을알수있다. wbaps SVGNAME = wbapg, MinProc = 2, MAXProc = 5 이는앞의 SVRGROUP 절에설정된 wbapg 에있는것이 wbaps 라는 SERVER 로정의되어있음을나타낸다. 여기까지가항상설정되어야할기본이다. 이는대부분의환경에서 Host Machine 의이름만다를뿐별차이가없다. 그러나실제 Service 를응용하기위해서는각 Service 에대한설정이추가로필요하게된다. 이는다음과같다. *SERVICE write_board SVRNAME = wbaps 위의 SERVICE 절은 WBAPI 로개발된프로그램의등록을하는것이다. 이는실제프로그램의이름과도같은데, 위의 WBAPI 로개발된프로그램이일반 C Style 과달리 write_board() 로시작하는것과같다. 즉, 이함수시작이름이 Service 의이름이되는것이다. 따라서, 등록시이이름으로등록을한다. 이항목은 SERVER 절다음에추가하면된다. SERVICE 절에실제서비스이름을등록했으면이제는실제브라우저에서 WBAPI type 의서비스를호출할때이것이 WEBSTD type 의서비스라는것을알리기위한 URI 절의설정이필요하다. 이는다음과같다. *URI uri1 Uri = /wbapi/, SVRTYPE = WEBSTD 위의 URI 절은사용자가브라우저에서입력한 request line 에서 URI 에 /wbapi/ 라는단어가나오면이는 WEBSTD type 의서비스임을 55 TmaxSoft
57 Application 개발안내서 나타낸다는것을지정하는것이다. 즉어떤 Uri 와 server type 과의 mapping 을의미한다. 여기에서 Uri 항목은원하는다른이름으로바꿀수있다. 이를가지고또하나의작업을수행하여야한다. 보통 를 Booting 하기위해서는 wscfl 을통해서 Compile 을하면그만이었으나, 이 WBAPI 를쓰기위해서는 Service Table 을만들어야한다. 이는 bin/ Directory 안에있는 wsgst 라는유틸리티를이용하여만든다. wsgst 를수행하면, 는 WBAPI 를쓰기위한 _svctab.c 라는확장자를가진 Service Table 을지정된 Path 에만들어낼것이다. 이로써 WBAPI 를사용하기위한모든준비가끝났다. 이제 WBAPI 로 개발된프로그램을 Compile 하여실행파일을만들고이를위와같은 형식으로 등록하여 주면 된다. 이에 대한 항목은 다음 절에서 설명한다 WBAPI 프로그램의 Compile WBAPI 로개발된프로그램은 C 에서기본적으로제공되는 Library 외에도 에서제공하는특수한 Library 및앞에서설명한 Service Table 파일을이용하여야하기때문에이를 Compile 시에연결하여주어야한다. 아래는 Compile 을위한두개의파일의예이다. Makefile 과 Makefile.common 으로구성되어있다. Makefile 에서 Makefile.common 을 include 하는형식으로되어있다. #Makefile include $(WEBTOBDIR)/make/cflags LIBS = $(LIB_FLAG) -laps CFLAGS =$(CFLAGS_COMMON) $(SUN_FLAG) -z muldefs include Makefile.common #Makefile.common TARGET= webaps WSSDLFILE = test.v APOBJS= ap.o WEBTOB_INCDIR = $(WEBTOBDIR)/usrinc WEBTOB_BINDIR = $(WEBTOBDIR)/bin TmaxSoft 56
58 Application 개발안내서 WEBTOB_LIBDIR = $(WEBTOBDIR)/lib OBJS = $(APOBJS) $(SVCTOBJ) SVCTOBJ = $(TARGET)_svctab.o.SUFFIXES :.v.c.o: $(CC) $(CFLAGS) -c $< wbaps: $(APOBJS) svct $(CC) $(CFLAGS) -L$(WEBTOB_LIBDIR) -o $(TARGET) $(OBJS) $(LIBS) $(USERLIBS) svct: cp $(WEBTOBDIR)/svct/$(TARGET)_svctab.c. $(CC) $(CFLAGS) -I$(WEBTOB_INCDIR) c $(TARGET)_svctab.c WBAPI 의시작및응용 모든작업이순조롭게끝나면 가 booting 시에이 WBAPI 로개발된프로그램을같이실행시켜, Process 형태로 Memory 에 Load 함을볼수있을것이다. 또한 CGI 를변환하는것은 WBAPI 의기능중의일부임을꼭기억하기바란다. 기존 CGI 의변환외에도 C Style 에능숙한사람들은새로운 Application 을개발할때이 WBAPI 를이용하면개발의편이성및성능향상에도많은도움이될것이다. Tmax Soft 에서는지속적으로 WBAPI 를제공하고또향상할것이므로차후의확장성이나지원등에서무리가없을것이다. 그리고이 WBAPI 를통해서기존 TP-Monitor 에서제공한 Service 기능들을이용하는것도가능하다. 이는다음장에서설명할것이다. 3.4 WBAPI 를이용한 Application 의제작 이제까지 에서제공하는 WBAPI 의개념및함수설명, WBAPI 로작성된 Application program 의구조및환경설정등에대하여살펴보았다. 그러면이제는이러한기본지식들을바탕으로하여 에서 WBAPI 를이용하여실제로 Application 프로그램을작성해보면서그개발과정에대해설명하도록하겠다. 이번에 57 TmaxSoft
59 Application 개발안내서 소개할예제프로그램은실제 web site 에서주로사용하고있는기능인 File upload/download 프로그램을 WBAPI 로구성한프로그램이다. 이프로그램은사용자가 upload 할파일을입력받는 HTML 문서와실제 upload/download 기능을하는 WBAPI 프로그램으로구성되어있다. 우선이러한서비스를사용하기위한 환경파일을살펴보도록하겠다. sample.m *DOMAIN webtob1 *NODE webmain WEBTOBDIR="/usr/local/webtob", SHMKEY = 68000, DOCROOT = "/usr/local/webtob/docs", APPDIR = "/usr/local/webtob/ap", PORT = "80", LOGGING = "log1", ERRORLOG = "log2", HTH = 1 *SVRGROUP htmlg wbapig NODENAME = "webmain", SVRTYPE = HTML NODENAME = "webmain", SVRTYPE = WEBSTD *SERVER html SVGNAME = htmlg, MinProc = 1, MaxProc = 2 File SVGNAME = wbapig, MinProc = 1, MaxProc = 2 *SERVICE download Filelist upload SVRNAME = File SVRNAME = File SVRNAME = File *URI uri2 Uri = "/svct/", Svrtype = WEBSTD *LOGGING log1 Format = "DEFAULT", FileName = "/user/gwyneth/webtob/log/access.log", TmaxSoft 58
60 Application 개발안내서 Option = "sync" log2 Format = "ERROR", FileName = "/user/gwyneth/webtob/log/error.log", Option = "sync" 사용자의입력을받아야하는문서가 HTML 문서로이루어져있으므로 HTML server 가기동되어있어야하고 WBAPI 를이용한 File upload/download 프로그램을작성할계획이므로 WEBSTD type 의서버프로세스를정의해두었다. 그리고실제로작성할 WEBSTD type 의서버프로그램에는 Filedl, FilePartial, Fileup 이라는세개의서비스로구성되어있다. 그리고 URI 절에서는서비스를호출할때 WEBSTD type 임을알려주는 URI 를정의해두고사용자가사용할수있도록설정하였다. 이제위의환경파일을실제시스템에맞게약간수정을하고컴파일 / 서비스테이블을생성하고나면모든서비스를이용할환경설정은끝난셈이다. 그러면이제실제로사용자의입력을받는 HTML 문서를살펴보자. Upload.html <HTML> <TITLE> File Upload Test </TITLE> <BODY> <H2 align=center> UPLOAD TEST </H2> <FORM METHOD=post ACTION="/svct/upload" enctype='multipart/formdata'> <h3 align=center><b> FILE UPLOAD </B></h3> <TABLE WIDTH=400 BGCOLOR=#DDDDDD align=center> <TR> <TD><B>FILE</B> <INPUT TYPE=file NAME=upfile SIZE=35></TD> </TR> <TR> <TD><INPUT TYPE=submit VALUE="UPLOAD"></td> </form> <td> <form method=post action="/svct/filelist"> <INPUT TYPE=submit VALUE="DOWNLOAD"></TD> 59 TmaxSoft
61 Application 개발안내서 </form> </TABLE> </BODY> </HTML> 사용자로부터 upload 할파일의경로및이름을입력받은후 submit 버튼을클릭하면 POST method 로 WBAPI 의서비스가호출된다. 여기에서호출되는 WBAPI 서비스는세가지인데 File upload/download 및 upload 된파일리트스를보여주는서비스이다. 다음에소개되는예제프로그램은위의세가지서비스를 WBAPI 를이용하여구현한것이다. File.c #include <sys/types.h> /* required for some of our prototypes */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <usrinc/atmi.h> #include <usrinc/wbapi.h> wbsvrinit(int argc, char *argv[]){ fprintf(stdout, "SVR[%s] START\n", argv[0]); wbsvrdone(){ fprintf(stdout, "SVR DOWN\n"); download(wbsvcinfo *rqst) { int dcount,i; char *file, key[20],data[20]; char line[50]; char ppp[200]="/usr/local/webtob/sample/data/"; dcount = wbgetdatacount(rqst); for(i=1; i<=dcount; i++) { strcpy(key, wbgetnthkey(rqst, i)); strcpy(data, wbgetnthdata(rqst, i)); TmaxSoft 60
62 Application 개발안내서 file = wbgetnthkey(rqst, 1); strcat(ppp, file); memset(line, 0x00, sizeof(line)); wbputhdr(rqst, "content-type", "application/octetstream"); sprintf(line, "attachment; filename=%s", file); wbputhdr(rqst, "content-disposition", line); wbputfile(rqst, ppp); wbputstr(rqst,"the end"); wbreturn(rqst, WBSUCCESS); Filelist(WBSVCINFO *rqst) { char *temp, *filedata, *filename, path[255]; long filelen; int k, count, rtn, dc; char fname,c,real[30],cc; int N; int i=0, data, j,l,num=0; FILE *fd; char str1[200] = "/usr/local/webtob/sample/data/", strl2[200], name[20], rfile[200]=" ", end[20]="\n"; FILE *fp; FILE *info; FILE *writer; wbprint(rqst, "<HTML><HEAD><TITLE> WBAPI download Test </TITLE></HEAD><BODY>"); wbprint(rqst,"<h1 align=center> File DownLoad</h1><br>"); wbprint(rqst,"<h2 align=center><a href=\"../fileup.html\">file Upload</a></h2><br>"); wbprint(rqst,"<h2 align=center> UPLOAD TEST </H2>"); if((fd = fopen("/usr/local/webtob/sample/data/data.dat","r"))!= NULL) 61 TmaxSoft
63 Application 개발안내서 { wbprint(rqst,"<tr>\n"); while((c = getc(fd))!= EOF) { if(c!='\n') { ++i; fgets(real,30, fd); Data</small>\n"); if(i==0) { wbprint(rqst,"<tr><td colspan=6>\n"); wbprint(rqst,"<small> No wbprint(rqst,"</td></tr>\n"); else strcat(str1, real); wbprint(rqst,"<form method=post action=\"../svct/download\" align=center>"); wbprint(rqst,"<table border width=400 height=30 cellspacing=0 cellpadding=5 align=center>"); if(i%2!=1) { wbprint(rqst,"<tr align = center>\n"); wbprint(rqst, "<td width=50><b>%d</b></td>",++num); wbprint(rqst, "<td width=200><b>%s</b></td>",real); wbprint(rqst, "<td width=200><input type=submit name=%s value=down></td></tr>",real,real); fprintf(stdout, "%s\n",real); else { wbprint(rqst,"<tr align = center bgcolor=#eeeeee width=400 height=30>\n"); TmaxSoft 62
64 Application 개발안내서 wbprint(rqst, "<td width=50><b>%d</b></td>",++num); wbprint(rqst, "<td width=200><b>%s</b></td>",real); wbprint(rqst, "<td width=200><input type=submit name=%s value=down></td></tr>",real,real); fprintf(stdout, "%s\n",real); wbprint(rqst, "</table>"); wbprint(rqst,"</tr>\n"); wbprint(rqst, "\n"); wbprint(rqst, "</form>"); fclose(fd); wbprint(rqst, "</BODY></HTML>"); wbreturn(rqst,wbsuccess); upload(wbsvcinfo *rqst) { char *temp, *filedata, *filename, path[255], rfilename[30]; long filelen; int k, count, rtn, dc; char fname,c,real[30],cc, ckc; int N; int i=0, data, j,l,dd=0, num=0; FILE *fd; char str1[200] = "/user/gwyneth/webtob/sample/data/", strl2[200], name[20], rfile[200] = " ", end[20]="\n"; FILE *fp; FILE *info; FILE *writer; time_t t; struct tm *tp; t = time(null); tp = localtime(&t); dc = 0; 63 TmaxSoft
65 Application 개발안내서 wbprint(rqst, "<HTML><HEAD><TITLE> WBAPI upload Test</TITLE></HEAD><BODY>"); count = wbgetdatacount(rqst); fprintf(stdout, "1\n"); for(k=1; k<=count; k++) { temp = wbgetnthkey(rqst, k); if((filename=wbgetfilename(rqst, temp))!= NULL) { strcpy(rfilename, filename); strcat(rfile, filename); strcat(filename, end); if((writer=fopen("/usr/local/webtob/sample/data/data.dat","r"))!= NULL) { while((c = getc(writer))!= EOF) { if(c!= '\n') { ++dc; fgets(name,20,writer); if(!strcmp(name, filename)) { if((fd = fopen("/user/gwyneth/webtob/sample/data/data.dat","r"))!= NULL) { wbprint(rqst,"<h1 align=center>data Bank</h1>"); wbprint(rqst,"<h1 align=center>aleady exist</h1><br>"); wbprint(rqst,"<h2 align=center><a href=\"../fileup.html\">file Upload</a></h2><br>"); fclose(fd); TmaxSoft 64
66 Application 개발안내서 wbreturn(rqst,wbsuccess); close(writer); if((info = fopen("/user/gwyneth/webtob/sample/data/data.dat", "a")) == NULL) { printf("feopne error \n"); wbreturn(rqst, TPSUCCESS); fprintf(stdout, "1\n"); if(strlen(rfile) <= 4) { wbputprotocolstatus(rqst, 302, NULL); wbputhdr(rqst, "Location", " wbprint(rqst, "<h1 align=center>please Select file<br>"); wbprint(rqst,"<h2 align=center><a href=\"../fileup.html\">file Upload</a></h2><br>"); wbreturn(rqst, WBSUCCESS); printf("%s\n", rfile); fprintf(info,"%s\n",rfile); printf("%s\n", rfile); filelen = wbgetfilelen(rqst, temp); sprintf(path, "/user/gwyneth/webtob/sample/data/%s", rfilename); unlink(path); rtn = wbsavefile(rqst, temp, path); 65 TmaxSoft
67 Application 개발안내서 fprintf(stdout, "1\n"); else { filedata=wbgetdata(rqst, temp); fprintf(stdout,"key=%s\n",temp); fprintf(stdout,"data=%s\n\n",filedata); fclose(info); if((fd = fopen("/user/gwyneth/webtob/sample/data/data.dat","r"))!= NULL) { while((c = getc(fd))!= EOF) { if(c == '\n') { ++i; wbprint(rqst,"<h1 align=center>data Bank</h1>"); wbprint(rqst, "<h1><td>%d-%d-%d (%d.%d.%d)</td></tr><br></h1>",tp->tm_year+1900, tp->tm_mon+1, tp->tm_mday,tp ->tm_hour, tp->tm_min, tp->tm_sec); wbprint(rqst, "<h2>total data %d</h2><br>", i); fclose(fd); if((fd = fopen("/user/gwyneth/webtob/sample/data/data.dat","r"))!= NULL) { wbprint(rqst,"<h2 align=center><a href=\"../fileup.html\">file Upload</a></h2><br>"); wbprint(rqst,"<tr>\n"); while((c = getc(fd))!= EOF) { if(c!='\n') { ++i; TmaxSoft 66
68 Application 개발안내서 fgets(real,30, fd); Data</small>\n"); if(i==0) { wbprint(rqst,"<tr><td colspan=6>\n"); wbprint(rqst,"<small> No wbprint(rqst,"</td></tr>\n"); else strcat(str1, real); wbprint(rqst,"<form method=post action=\"../svct/download\" align=center>"); wbprint(rqst,"<table border width=400 height=30 cellspacing=0 cellpadding=5 align=center>"); if(i%2!=1) { wbprint(rqst,"<tr align = center>\n"); wbprint(rqst, "<td width=50><b>%d</b></td>",++num); wbprint(rqst, "<td width=200><b>%s</b></td>",real); wbprint(rqst, "<td width=200><input type=submit name=%s value=down></td></tr>",real,real); else { wbprint(rqst,"<tr align = center bgcolor=#eeeeee width=400 height=30>\n"); wbprint(rqst, "<td width=50><b>%d</b></td>",++num); wbprint(rqst, "<td width=200><b>%s</b></td>",real); wbprint(rqst, "<td width=200><input type=submit name=%s value=down></td></tr>",real,real); wbprint(rqst, "</table>"); 67 TmaxSoft
69 Application 개발안내서 wbprint(rqst,"</tr>\n"); wbprint(rqst, "\n"); wbprint(rqst, "</form>"); fclose(fd); wbprint(rqst, "</BODY></HTML>"); wbreturn(rqst,wbsuccess); TmaxSoft 68
70 Application 개발안내서 69 TmaxSoft
71 Application 개발안내서 3.5 WBAPI 를이용한 CGI Application 의전환 WBAPI 에서제공하는 API 를이용하여기존의 CGI 프로그램을변환할때어떤방식으로이루어지는지알아보겠다. 여기에서는 [2.2 CGI] 장의 CGI programming 에서작성해보았던게시판작성하는프로그램을예로들어 WBAPI 를사용하여 의 Service program 으로전환하는방법을설명하도록하겠다. [2.2 CGI] 장에소개된프로그램은간단한게시판을구현하는것이다. 이를보면알수있듯이대부분의 CGI 프로그램의구조는간단하고단순하다. QUERY_STRING 을통해서전달된사용자의입력값을바탕으로특정한작업을수행한후, 이를 HTML 문서와같은형태로다시전달하는것이다. HTML 형태의문서를만드는것은주로 printf 함수를통하여이루어진다. 위의프로그램에있는여러함수들은거의 C 언어에서기본적으로제공하는것이고, qvalue 나 strcheck 등의처리함수들은입력변수의값을읽어오거나, 변수값이맞는것인지분석하는함수들이다. 이역시간단한 Library 형태로지원된다. TmaxSoft 70
72 Application 개발안내서 [2.2 CGI] 장의 CGI 프로그램을분석하면다음과같다. 이 CGI 프로그램에서는 writer, title, doc, , homepage 란변수를이용한다. 따라서사용자는이들변수의값을전달해줄것이다. 아래의프로그램은사용자가전달한값을 CGI 프로그램에서인식하기위하여분리하는과정이다. 각각의변수에 qvalue 라는함수를이용하여값을읽어냄을알수있다. name = qvalue("writer"); title = qvalue("title"); doc = qvalue("doc"); = qvalue(" "); homepage = qvalue("homepage"); 위에서각각의변수값을읽어낸후, 아래의 strcheck 함수를통해서각각의변수값이모두입력되었는지확인한다. if (!strcheck(name)) qerror(" 이름을입력하세요."); if (!strcheck(title)) qerror(" 글제목을입력하세요."); if (!strcheck(doc)) qerror(" 본문을입력하셔야죠."); if (strcheck( )) if (!qcheck ( )) qerror(" 주소를정확히입력하세요."); if (strcheck(homepage)) if (!qcheckurl(homepage)) qerror("homepage URL 을정확히입력하세요."); 위의함수들을모두정상적으로수행하였다면 CGI 로전달된사용자의변수값이모두이상이없다는것일것이다. 이제게시판의값을올리고출력형태를만들어야한다. 아래의함수는이 CGI 프로그램이제공하는출력형태가 HTML 임을나타내고있다. qcontenttype("text/html"); 그리고 printf 함수를통하여결과값을만들어내는작업을수행한다. 이는 HTML 문서를실제로 Editing 하는것과거의같다. 다음을보면 printf 함수를통해서 HTML Tag 를만들어냄을알수있다. printf("<html>\n\n"); printf("<head> <TITLE> Bestbook 게시판 - 글올리기확인 </TITLE> <HEAD>\n\n"); printf("<body>\n"); 71 TmaxSoft
73 Application 개발안내서 printf("<h2> Bestbook 게시판 - 글올리기확인 </H2>\n"); printf("<hr WIDTH=600 ALIGN=left>\n<BR>"); if (strcheck( )) printf("<a HREF=\"mailto:%s\">%s</A>", , name); else printf("%s", name); if (strcheck(homepage)) printf("<small>(<a HREF=\"%s\">%s</A>)</SMALL>", homepage, homepage); printf(" 님께서올리신글은다음과같습니다.<BR><BR>\n"); printf("<table WIDTH=600 BORDER=1>\n"); printf("<tr><td><b> 제목 </B> : %s</td></tr>\n", title); printf("<tr><td>%s</td></tr>\n", doc); printf("</table>\n\n<br> 이글이정상적으로게시판에올려졌습니다.\n"); printf("</body>\n\n</html>"); 이제, 이프로그램과똑같은기능을하는 WBAPI 프로그램을만들어보자. 구조적인것은 CGI 프로그램과같다. 먼저, 각각의변수에대한값을읽어내야한다. 위에서는 qvalue 라는함수를통하여이루어졌는데, WBAPI 에서는 wbgetdata 라는함수를통하여이루어진다. 아래의함수들은위의 CGI 에서 qvalue 를통해서수행된것을그대로수행하는것이다. 결국각각의변수값을읽어들이게된다. writer = wbgetdata(rqst, "writer"); title = wbgetdata(rqst, "title"); doc = wbgetdata(rqst, "doc"); = wbgetdata(rqst, " "); homepage = wbgetdata(rqst, "homepage"); 위에서읽어들인값을 check 하는것은 strcheck 를이용하면된다. 위의상황과같기때문에생략하겠다. 그리고 WBAPI 에서는사용자의환경변수뿐만아니라, Header 에전송된값도읽어들일수있다. 이것은아래와같은 wbgethdr 함수를통하여이루어진다. 아래의것은 Content-Length 값을읽어들이는것이다. hd = wbgethdr(rqst, "Content-Length"); 일련의작업들이끝났다면, 이제출력을위한문서를만들어야한다. 이는위에서는 printf 함수로처리된것이었다. WBAPI 에서는 wbprint 라는함수로처리된다. 결국기존의 CGI 에서 printf 함수를썼던부분을모두 wbprint 로처리하면된다는것이다. 아래의 2 번은위의것을변환한예이다. 결과형태가약간달라질수있지만이는출력 TmaxSoft 72
74 Application 개발안내서 형태인 HTML Tag 가약간변화한것일뿐게시판을만든다는것에는변화가없다. 단, 위에서 printf 를통하여만들어진 Header 정보는이곳에서는 wbputhdr 를통해서만들어진다. 결국 HTML 안에포함되는것만 wbprint 를이용하고 Header 정보는 wbputhdr 를이용하는것이다. 아래의 1 번은 Header 를만들어내며, 2 번은 HTML Tag 를만들어내는것이다. 1 번 wbputhdr( ContentType: text/html"); 2 번 wbprint(rqst, "<HTML>\n\n"); wbprint(rqst, "<HEAD> <TITLE> webtob Write Board </TITLE> <HEAD>\n\n"); wbprint(rqst, "<BODY>\n"); wbprint(rqst, "<H2> Bestbook</H2>\n"); wbprint(rqst, "<H3>Writer is%s </H3> \n",writer); wbprint(rqst, "<H3>Title is%s </H3> \n",title); wbprint(rqst, "<HR>\n"); wbprint(rqst, "<H2> %s </H2> \n",doc); wbprint(rqst, "<H3> newvalue :%s%d</h3> \n",hd,rt); wbprint(rqst, "<HR ALIGN=left>\n<BR>"); wbprint(rqst, ".<BR><BR>\n"); wbprint(rqst, "<TABLE WIDTH=600 BORDER=1>\n"); wbprint(rqst, "</TABLE>\n\n<BR>.\n"); wbprint(rqst, "</BODY>\n\n</HTML>"); 위의모든작업이끝나면결과가끝났다는것을마지막에 return 대신에 wbreturn 을수행하는것으로 에전달한다. wbreturn(rqst, TPSUCCESS); 괄호안의 TPSUCCESS 나타낸다. 는결과가성공적으로수행되었다는것을 이에대한프로그램을모두기술하면다음과같다. 73 TmaxSoft
75 Application 개발안내서 #include<usrinc/atmi.h> #include<usrinc/wbapi.h> extern int _my_spri; write_board(wbsvcinfo *rqst) { int i, n; char *dp, *obuf, *env; char *writer; char *title; char *doc; char buf[2000]; char *hd; int rt; writer = wbgetdata(rqst, "writer"); title = wbgetdata(rqst, "title"); doc = wbgetdata(rqst, "doc"); hd = wbgethdr(rqst, "Content-Length"); wbprint(rqst, "<HTML>\n\n"); wbprint(rqst, "<HEAD> <TITLE> webtob Write Board </TITLE> <HEAD>\n\n"); wbprint(rqst, "<BODY>\n"); wbprint(rqst, "<H2> Bestbook</H2>\n"); wbprint(rqst, "<H3>Writer is%s </H3> \n",writer); wbprint(rqst, "<H3>Title is%s </H3> \n",title); wbprint(rqst, "<HR>\n"); wbprint(rqst, "<H2> %s </H2> \n",doc); wbputhdr(rqst, "Content-type: text/html"); hd = wbgethdr(rqst, "Content-Length"); wbprint(rqst, "<HR ALIGN=left>\n<BR>"); wbprint(rqst, ".<BR><BR>\n"); wbprint(rqst, "<TABLE WIDTH=600 BORDER=1>\n"); wbprint(rqst, "</TABLE>\n\n<BR>.\n"); wbprint(rqst, "</BODY>\n\n</HTML>"); env = wbgethdr(rqst, "User-Agent"); wbreturn(rqst, TPSUCCESS); TmaxSoft 74
76 Application 개발안내서 4 Multinode and Load Balancing 대규모의사용자를처리하기위해서는 를하나만설치하여이용하기보다는여러개의 Web Server 를설치하여동시에이들을통하여사용자의요구를처리하게된다. 하나의 Web Server 만으로도어느정도성능을내는것은가능하지만, 수많은사람의요구를처리하여야하는경우에는가급적여러개를설치하여동시에서비스하는것이바람직하다. 이는사용자에게안정적인서비스와빠른서비스를가능하게하기때문이다. 이에본장에서는여러개의 를설치하고이들을동시에 booting 하여관리하는방법에대하여알아볼것이다. 대규모사용자를관리하기위해서는일반적으로 시스템은여러 Node 로구성되며이에대한중앙관리가필요하다. 중앙관리를위해서 시스템에서는 wsracd 를사용한다. 즉, 각 Node 에 wsracd 를미리설치해둠으로써한 Node 에서전체 시스템을관리할수있다. 즉, 환경파일컴파일, 시스템기동및종료, 동적환경파일변경등의동작을한번의명령으로가능케한다. 결국이 wsracd 라는 Process 를통해서 Multi Node 상의 를 Booting 하거나 Down 시키고관리하는것이다. 이 wsracd 에대한설명은다음과같다. 4.1 wsracd wsracd 는 Web Server Remote Access Control Daemon 의여러개의 Node 를하나의도메인으로써 시스템을구축하였을경우한 Node 에서 시스템을집중관리하기위해각각의 Node 에서미리기동되는 Daemon 프로세스이다. 도메인내의한 Node 에서 wsadmin 을통하여전체 Node 를관리하거나, 또는환경파일을도메인내의모든 Node 에동일한내용으로적용가능하도록처리하는프로세스이다. wsracd 는다음과같이실행시킨다. $> wsracd k 75 TmaxSoft
77 Application 개발안내서 wsracd 를기동시키기위해서는시스템환경변수에 WEBTOB_RAC_PORT 를설정해주어야하며, 환경변수로설정해줄때에는환경파일에 RacPort 를같은 port 로설정해준다. WEBTOB_RAC_PORT=3333; export WEBTOB_RAC_PORT (Korn shell 의경우.profile) 환경변수를참조하지않고부팅하기위해서는 "wsracd -k" 로실행하여 wsracd 가사용될 port 를 가지정하는것으로서중앙관리를위한준비를한다. 이때설정되는 port 는 default port 로설정되어있는 3333 port 이다. 이렇게 wsracd 를이용해 를 Multi node 에서설정하면동시에여러개의 를 booting 시켜서각각의 Node 의 wsracd 를통해서정보가전달된다. 그리고, 이들 Node 들은모두하나의 Domain 이라는개념에속하게된다. 즉, 다음의그림과같이하나의 Domain 에여러개의 Node 가속하는개념으로되는것이다. wsracd process 에대한설정이끝났다면이제 Multi Node 환경하에서환경파일작성과 Compile 에대해서설명하겠다. 그이후실제로 시스템의기동 (wsboot) 과종료 (wsdown) 방법에대하여설명하겠다. 4.2 Multi-Node 환경설정 를여러 Node 에서이용하게되는경우, 각각의 Node 에서모두같은환경파일을가지고있어야한다. 즉, 각 Node 에서하나의환경파일을가지고있고, 이환경파일내에모든 Node 들의정보가 TmaxSoft 76
78 Application 개발안내서 포함되어있다. 따라서, 각 Node 에어떠한것이필요하고존재하는지다른 Node 들도알수있고, 다른 Node 에문제가발생하는경우원활하게처리하는것도가능하게된다. 먼저, 다음의환경파일을참조하여해당시스템의환경에맞게설정해준다. 지금까지의환경파일은하나의노드만을위한환경파일이었으므로 NODE 절에하나의노드만이정의되어있었다. Multinode 환경설정은 NODE 절에하나의도메인을구성하고있는여러개의노드를정의해두고같은환경파일을한도메인내의모든노드에서가지고있으면된다. sample.m *DOMAIN Webmain *NODE node1 WEBTOBDIR="/usr/local/webtob", SHMKEY = 69000, DOCROOT="/usr/local/webtob/docs", PORT = "5469". RacPort = 3333 node2 WEBTOBDIR="/usr/local/webtob", SHMKEY = 69000, DOCROOT="/usr/local/webtob/docs", PORT = "5469", RacPort = 3333 node3 WEBTOBDIR="/usr/local/webtob", SHMKEY = 69000, DOCROOT="/usr/local/webtob/docs", PORT = "5469", RacPort = 3333 *SVRGROUP htmlg1 NODENAME = node1, SVRTYPE = HTML, COUSIN = htmlg2, htmlg3 cgig1 NODENAME = node1, SVRTYPE = CGI, COUSIN = cgig2, cgig3 77 TmaxSoft
79 Application 개발안내서 htmlg2 cgig2 NODENAME = node2, SVRTYPE = HTML NODENAME = node2, SVRTYPE = CGI htmlg3 cgig3 NODENAME = node3, SVRTYPE = HTML NODENAME = node3, SVRTYPE = CGI *SERVER html1 cgi1 SVGNAME = htmlg1 SVGNAME = cgig1 위의예제파일을보면, Node 절에 node1 외에 node2 와 node3 가추가된것을알수있을것이다. 위와같이각노드에대한정보를 NODE 절에정의해두면된다. 그리고, SVRGROUP 절을보면, 각 node 들에대한 Server Group 들이각각선언되어있음을알수있다. 이때주의할점은 Multi Node 를사용하는경우에는반드시 COUSIN 항목을설정해주어야한다는것이다. COUSIN 항목은그항목에설정해준서버그룹은모두현재의서버그룹과모든환경을동일시하라는의미이다. 그러므로이후의 SERVER 절에서는 가기본적으로제공하는 System Server(HTML, SSI, CGI, PHP) 의경우에는모든 Node 에서설정하지않고 COUSIN 을사용한 SVRGROUP 에해당하는 SERVER 만을설정한다. 위와같이환경파일을작성해주었다면환경파일을컴파일해야한다. 이때 wsracd 가미리기동되어있다면한번 wscfl 을실행함으로한도메인내의모든노드에동시에중앙관리노드에서작성한환경파일이복사되고각노드에서컴파일이된다. 만약관리자가특별한이유가있어서하나의 Node 에서만이 wscfl 을수행하고싶다면, 이때다음과같이 n Option 을이용하면된다. $> wscfl i test.m n node1 이제 wscfl 을끝냈으면, 를 booting 하기위한모든준비가끝난것이다. Multi-node 환경설정에대해좀더자세하게알고자한다면 Administration Guide 를참조하기바란다. 이젠실제 booting 하는것에대해서알아보겠다. 4.3 Multi-Node 상에서의 기동과종료 를 Booting 하는작업도앞에서설명한 wscfl 과유사한논리로전개된다. 즉, wsboot 라는명령어를입력하면, 이때 process 가 TmaxSoft 78
80 Application 개발안내서 wsracd 를통하여각각의 Node 에이정보를모두보내서모든 Node 에서동시에 가 booting 되는것이다. 만약특정 node 에서만 를기동시키거나종료시켜야할필요가있다면다음과같이 n 옵션을사용하여기동 / 종료시키면된다. $> wsboot n node1 $> wsdown n node1 이러한 Multi Node 에서의설정은각 Node 를동시에설정하여 를동시에 booting 시킬수있다는장점도장점이지만, 특히 의 Load Balancing 이나 Fail-Over 기능을이용할때더욱큰영향을발휘하게된다. 즉, 여러 Node 에각각 를설치하고, 이들을이용하여사용자에게서비스를하는경우, 사용자의요구들을각각의 에나누어줄수있게된다. 그렇게되면하나의 로서비스하던것을여러 가나누어하게되어많은사용자가동시에들어와서서비스를요구하여도, Network 환경만어느정도갖추어진다면큰무리없이서비스를처리할수있을것이다. 따라서많은사용자를받아들여야하는대용량의사이트를운영하는경우, 이런환경을갖추는것은필수적이다. 이어지는장에서는이러한 Multi Node 환경하에서 Load Balancing 을구현하는방법과알고리즘에대해서설명할것이다. 따라서실제 Multi Node 를이용하여 Load Balancing 을구현하기위해선다음에이어지는장을반드시이해하여야한다. 4.4 Load Balancing 현재인터넷기반의 World Wide Web 은날이거듭될수록사용자의수가급속히증가되고있으며모든업무에있어서인터넷혹은인트라넷의의존도가점점높아지고있다. 이러한인터넷의확산으로인하여많은사람들이정보화시대에많은정보를쉽게얻을수있으나, 이로인해인터넷 traffic 또한지속적으로증가되어, 이는사용자와 Server 간의응답시간을지연시키는문제를발생하게되었다. 이러한문제를해결하는데는여러가지방법이있겠지만 에서는하나의해결책으로 Load Balancing 을제공하고있다. 본매뉴얼에서는 에서 Load Balancing 기능을이용하는데필요한환경설정및예제프로그램등을다룰것이므로 Load Balancing 의기술적인자세한내용을보고자한다면 Administration Guide 를참조하기바란다. 79 TmaxSoft
81 Application 개발안내서 에서 Load Balancing 기능을이용하기위한환경은 Multi-node 환경설정과매우유사하다. 다음의환경파일을살펴보자. multinode.m *DOMAIN Webmain *NODE node1 WEBTOBDIR="/usr/local/webtob", SHMKEY = 69000, DOCROOT="/usr/local/webtob/docs", PORT = "5469". RacPort = 3333 node2 WEBTOBDIR="/usr/local/webtob", SHMKEY = 69000, DOCROOT="/usr/local/webtob/docs", PORT = "5469", RacPort = 3333 node3 WEBTOBDIR="/usr/local/webtob", SHMKEY = 69000, DOCROOT="/usr/local/webtob/docs", PORT = "5469", RacPort = 3333 *SVRGROUP htmlg1 NODENAME = node1, SVRTYPE = HTML, COUSIN = htmlg2, htmlg3, LOAD = 3 cgig1 NODENAME = node1, SVRTYPE = CGI, COUSIN = cgig2, cgig3, LOAD = 3 htmlg2 NODENAME = node2, SVRTYPE = HTML, LOAD = 2 cgig2 NODENAME = node2, SVRTYPE = CGI, LOAD = 2 htmlg3 NODENAME = node3, SVRTYPE = HTML, LOAD = 2 cgig3 NODENAME = node3, SVRTYPE = CGI, LOAD = 2 *SERVER html1 SVGNAME = htmlg1 TmaxSoft 80
82 Application 개발안내서 cgi1 SVGNAME = cgig1 위의예제환경파일에서도볼수있는것과같이 Multi-node 의환경설정에각노드에대한 LOAD 항목만설정해주면된다. LOAD 항목은브라우저에서각각의 request 가들어올경우이항목에설정된값의비율로각노드에 request 를분산하겠다는의미이다. 즉위와같은환경설정이라면 html service, cgi service 에대한 request 를 node1 : node2 : node 3 = 3: 2:2 으로분배하겠다는의미이다. 그러면실제로간단한 HTML 문서를가지고 load balancing 이되는경우를살펴보도록하겠다. 다음은 를설치하고처음기동시켰을때첫화면으로브라우저에보여지는간단한 HTML 문서이다. index.html <HTML> <HEAD> <TITLE>Test Page for Installation on Web Site</TITLE> </HEAD> <!-- Background white, links blue (unvisited), navy (visited), red (active) --> <BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#000080" ALINK="#FF0000" > <H1 ALIGN="CENTER"> Web Server is successfully Installed on this Web Site! </H1> <P> If you can see this page, then the people who own this domain have just installed the <A HREF=" Web server</a> software successfully. </P> <DIV ALIGN="CENTER"> <IMG SRC="top2-1.gif"> </DIV> 81 TmaxSoft
83 Application 개발안내서 </BODY> </HTML> 우선각노드에 wsracd 를실행시켜놓고위의예제환경파일을각시스템에맞게수정한후컴파일한다. Wsracd 가정상적으로기동이되었다면아래와같은메시지를남기면서동시에세개의노드에서컴파일이될것이다. -i multinode.m Current configuration: Number of client handler(hth) = 1 Supported maximum user per node = 1001 Supported maximum user per handler = 1001 CFL is done successfully for node(node1) CFL: rcfl start for rnode (node2) Current configuration: Number of client handler(hth) = 1 Supported maximum user per node = 4073 Supported maximum user per handler = 4073 CFL is done successfully for node(node2) CFL: rcfl start for rnode (node3) Current configuration: Number of client handler(hth) = 1 Supported maximum user per node = 1001 Supported maximum user per handler = 1001 CFL is done successfully for node(node3) 위와같은메시지와함께모든노드에서에러없이환경파일의컴파일이끝났다면 를기동시킨다. 그리고브라우저에서위의 index.html 을여러번호출하여브라우저에 index.html 이호출할때마다화면이갱신되는지확인한다. TmaxSoft 82
84 Application 개발안내서 load balancing 이되는것을 에서제공하는 wsadmin 이라는 시스템모니터링 tool 을통하여확인할수있다. 다음의그림에서보면 html service 에대해 request 가많이들어오면서환경파일에설정한 LOAD 값에따라 webmain : node1 : node2 = 3 : 2 : 2 로분산되는것을볼수있다. tmaxsoft@node1:/usr/local/webtob/config>wsadmin WSADMIN for rnode (node2): starting to connect to RAC WSADMIN for rnode (node3): starting to connect to RAC --- Welcome to Admin (Type "quit" to leave) --- $$1 node1 (wsadm): st -s HTH 0: svc_name count avg cq_count aq_count q_avg status html RDY 83 TmaxSoft
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 informationMicrosoft 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 informationMicrosoft 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 informationPowerPoint 프레젠테이션
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.
JEUS 6 & WebtoB 4.1 관리자 2015.09 Ⅰ Ⅱ Ⅲ JEUS 설정 WebtoB 연동설정 Tibero 연동설정 Ⅰ JEUS 설정 컨테이너생성 Application 디플로이 컨테이너생성 관리자화면접속 http://ip-address:9744/webadmin 접속 ID : administrator PW : 설치단계에서설정한관리자암호 3/36 컨테이너생성
More information14-Servlet
JAVA Programming Language Servlet (GenericServlet) HTTP (HttpServlet) 2 (1)? CGI 3 (2) http://jakarta.apache.org JSDK(Java Servlet Development Kit) 4 (3) CGI CGI(Common Gateway Interface) /,,, Client Server
More information다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");
다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp"); dispatcher.forward(request, response); - 위의예에서와같이 RequestDispatcher
More informationWebtob( 멀티도메인 ) SSL 인증서갱신설치가이드 본문서는주식회사한국기업보안에서 SSL 보안서버인증서설치를위해작성된문서로 주식회사한국기업보안의동의없이무단으로사용하실수없습니다. [ 고객센터 ] 한국기업보안. 유서트기술팀 Copyright 201
Webtob( 멀티도메인 ) SSL 인증서갱신설치가이드. [ 고객센터 ] 한국기업보안. 유서트기술팀 02-512-9375 멀티및와일드인증서의경우포트번호를동일하게설정이가능하다. (https 통신으로 443 으로통일가능 ) 1. 발급받으신인증서를해당 SSL 폴더에업로드또는저장합니다. [root@localhost New]$ cp star.ucert.co.kr* /webtob/ssl
More informationWebtoB.hwp
WebtoB Web Server SSL 설정방법 - Ver 1.0-2008. 6 개정이력 버전개정일개정내용 Ver 1.0 2008 년 6 월 WebtoB Web Server SSL 설명서최초작성 본문서는정보통신부 한국정보보호진흥원의 보안서버구축가이드 를참고하여작성되었습니다. 본문서내용의무단도용및사용을금합니다. < 목차 > 1. 개인키및 CSR 생성방법 4 2.
More information<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D313939392D382E687770>
i ii iii iv v vi 1 2 3 4 가상대학 시스템의 국내외 현황 조사 가상대학 플랫폼 개발 이상적인 가상대학시스템의 미래상 제안 5 웹-기반 가상대학 시스템 전통적인 교수 방법 시간/공간 제약을 극복한 학습동기 부여 교수의 일방적인 내용전달 교수와 학생간의 상호작용 동료 학생들 간의 상호작용 가상대학 운영 공지사항,강의록 자료실, 메모 질의응답,
More informationI T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r
I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r Jakarta is a Project of the Apache
More informationMicrosoft Word - 02_WebtoB_Admin_Guide_41.doc
WebtoB 관리자안내서 Copyright 2005 Tmax Soft Co., Ltd. All Rights Reserved. Copyright Notice Copyright 2005 Tmax Soft Co., Ltd. All Rights Reserved. Tmax Soft Co., Ltd. 대한민국서울시강남구대치동 946-1 글라스타워 18 층우 )135-708
More information2장 변수와 프로시저 작성하기
Chapter. RequestDispatcher 활용 요청재지정이란? RequestDispatcher 활용 요청재지정구현예제 Chapter.9 : RequestDispatcher 활용 1. 요청재지정이란? 클라이언트로부터요청받은 Servlet 프로그램이응답을하지않고다른자원에수행흐름을넘겨다른자원의처리결과를대신응답하는것또는다른자원의수행결과를포함하여응답하는것을요청재지정이라고한다.
More informationPowerPoint 프레젠테이션
Network Programming Jo, Heeseung Network 실습 네트워크프로그래밍 멀리떨어져있는호스트들이서로데이터를주고받을수있도록프로그램을구현하는것 파일과는달리데이터를주고받을대상이멀리떨어져있기때문에소프트웨어차원에서호스트들간에연결을해주는장치가필요 이러한기능을해주는장치로소켓이라는인터페이스를많이사용 소켓프로그래밍이란용어와네트워크프로그래밍이랑용어가같은의미로사용
More informationAPI 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 informationInterstage5 SOAP서비스 설정 가이드
Interstage 5 Application Server ( Solaris ) SOAP Service Internet Sample Test SOAP Server Application SOAP Client Application CORBA/SOAP Server Gateway CORBA/SOAP Gateway Client INTERSTAGE SOAP Service
More information혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가
혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가웹페이지내에뒤섞여있어서웹페이지의화면설계가점점어려워진다. - 서블릿이먼저등장하였으나, 자바내에
More informationC# 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 informationchapter1,2.doc
JavaServer Pages Version 08-alpha copyright2001 B l u e N o t e all rights reserved http://jspboolpaecom vesion08-alpha, UML (?) part1part2 Part1 part2 part1 JSP Chapter2 ( ) Part 1 chapter 1 JavaServer
More informationMicrosoft 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 informationJavaGeneralProgramming.PDF
, Java General Programming from Yongwoo s Park 1 , Java General Programming from Yongwoo s Park 2 , Java General Programming from Yongwoo s Park 3 < 1> (Java) ( 95/98/NT,, ) API , Java General Programming
More informationPowerPoint 프레젠테이션
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 informationPowerPoint Template
JavaScript 회원정보 입력양식만들기 HTML & JavaScript Contents 1. Form 객체 2. 일반적인입력양식 3. 선택입력양식 4. 회원정보입력양식만들기 2 Form 객체 Form 객체 입력양식의틀이되는 태그에접근할수있도록지원 Document 객체의하위에위치 속성들은모두 태그의속성들의정보에관련된것
More informationuntitled
Push... 2 Push... 4 Push... 5 Push... 13 Push... 15 1 FORCS Co., LTD A Leader of Enterprise e-business Solution Push (Daemon ), Push Push Observer. Push., Observer. Session. Thread Thread. Observer ID.
More informationMicrosoft PowerPoint - chap06-2pointer.ppt
2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.
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 informationSSL 접속테스트 본문서에서 WebtoB 가설치된디렉토리는 [WEBTOBDIR] 로표기하겠습니다.. 윈도우계열과리눅스 / 유닉스계열모두명령은동일하므로윈도우를기준으로설명하도록하겠습니다. 1. WebtoB 설정 1.1 Test 용인증서생성 SSL 접속테스트를위해 Webto
개발및운영 SSL 접속테스트 Console 을통한 SSL 접속테스트 2014. 06. 27 SSL 접속테스트 본문서에서 WebtoB 가설치된디렉토리는 [WEBTOBDIR] 로표기하겠습니다.. 윈도우계열과리눅스 / 유닉스계열모두명령은동일하므로윈도우를기준으로설명하도록하겠습니다. 1. WebtoB 설정 1.1 Test 용인증서생성 SSL 접속테스트를위해 WebtoB
More informationAPI 매뉴얼
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<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>
리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1
More informationPHP & ASP
단어장프로젝트 프로젝트2 단어장 select * from address where address like '% 경기도 %' td,li,input{font-size:9pt}
More information[ 마이크로프로세서 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 information1. 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임베디드시스템설계강의자료 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 informationTmax
관리자안내서 Copyright 2000 Tmax Soft Co., Ltd. All Rights Reserved. Copyright Notice Copyright 2005 Tmax Soft Co., Ltd. All Rights Reserved. Tmax Soft Co., Ltd. 대한민국서울시강남구대치동 946-1 글라스타워 18 층우 )135-708 Restricted
More information금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include
More information11장 포인터
Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함
More informationMicrosoft 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 informationMicrosoft 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 informationThe Pocket Guide to TCP/IP Sockets: C Version
인터넷프로토콜 5 장 데이터송수신 (3) 1 파일전송메시지구성예제 ( 고정크기메시지 ) 전송방식 : 고정크기 ( 바이너리전송 ) 필요한전송정보 파일이름 ( 최대 255 자 => 255byte 의메모리공간필요 ) 파일크기 (4byte 의경우최대 4GB 크기의파일처리가능 ) 파일내용 ( 가변길이, 0~4GB 크기 ) 메시지구성 FileName (255bytes)
More informationISP 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 informationPowerPoint 프레젠테이션
(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 information6주차.key
6, Process concept A program in execution Program code PCB (process control block) Program counter, registers, etc. Stack Heap Data section => global variable Process in memory Process state New Running
More informationMicrosoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx
To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 Eclipse (IDE) JDK Android SDK with ADT IDE: Integrated Development Environment JDK: Java Development Kit (Java SDK) ADT: Android Development Tools 2 JDK 설치 Eclipse
More informationMicrosoft PowerPoint - Java7.pptx
HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)
More informationiii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.
Eclipse 개발환경에서 WindowBuilder 를이용한 Java 프로그램개발 이예는 Java 프로그램의기초를이해하고있는사람을대상으로 Embedded Microcomputer 를이용한제어시스템을 PC 에서 Serial 통신으로제어 (Graphical User Interface (GUI) 환경에서 ) 하는프로그램개발예를설명한다. WindowBuilder:
More informationMicrosoft 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슬라이드 1
-Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역
More information<4D F736F F F696E74202D20B5A5C0CCC5CDBAA3C0CCBDBA5F3130C1D6C2F75F31C2F7BDC32E >
Chapter 8 데이터베이스응용개발 목차 사용자인터페이스와도구들 웹인터페이스와데이터베이스 웹기초 Servlet 과 JSP 대규모웹응용개발 ASP.Net 8 장. 데이터베이스응용개발 (Page 1) 1. 사용자인터페이스와도구들 대부분의데이터베이스사용자들은 SQL을사용하지않음 응용프로그램 : 사용자와데이터베이스를연결 데이터베이스응용의구조 Front-end Middle
More informationEclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 11 년 10 월 26 일수요일
Eclipse 와 Firefox 를이용한 Javascript 개발 발표자 : 문경대 Introduce Me!!! Job Jeju National University Student Ubuntu Korean Jeju Community Owner E-Mail: ned3y2k@hanmail.net Blog: http://ned3y2k.wo.tc Facebook: http://www.facebook.com/gyeongdae
More informationPowerPoint 프레젠테이션
실습문제 Chapter 05 데이터베이스시스템... 오라클로배우는데이터베이스개론과실습 1. 실습문제 1 (5 장심화문제 : 각 3 점 ) 6. [ 마당서점데이터베이스 ] 다음프로그램을 PL/SQL 저장프로시져로작성하고실행해 보시오. (1) ~ (2) 7. [ 마당서점데이터베이스 ] 다음프로그램을 PL/SQL 저장프로시져로작성하고실행해 보시오. (1) ~ (5)
More informationData Sync Manager(DSM) Example Guide Data Sync Manager (DSM) Example Guide DSM Copyright 2003 Ari System, Inc. All Rights reserved. Data Sync Manager
Data Sync Manager (DSM) Example Guide DSM Copyright 2003 Ari System, Inc. All Rights reserved. Data Sync Manager are trademarks or registered trademarks of Ari System, Inc. 1 Table of Contents Chapter1
More informationPowerPoint 프레젠테이션
Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi
More informationchap 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슬라이드 1
/ 유닉스시스템개요 / 파일 / 프로세스 01 File Descriptor file file descriptor file type unix 에서의파일은단지바이트들의나열임 operating system 은파일에어떤포맷도부과하지않음 파일의내용은바이트단위로주소를줄수있음 file descriptor 는 0 이나양수임 file 은 open 이나 creat 로 file
More informationResearch & Technique Apache Tomcat RCE 취약점 (CVE ) 취약점개요 지난 4월 15일전세계적으로가장많이사용되는웹애플리케이션서버인 Apache Tomcat에서 RCE 취약점이공개되었다. CVE 취약점은 W
Research & Technique Apache Tomcat RCE 취약점 (CVE-2019-0232) 취약점개요 지난 4월 15일전세계적으로가장많이사용되는웹애플리케이션서버인 Apache Tomcat에서 RCE 취약점이공개되었다. CVE-2019-0232 취약점은 Windows 시스템의 Apache Tomcat 서버에서 enablecmdlinearguments
More informationvi 사용법
네트워크프로그래밍 6 장과제샘플코드 - 1:1 채팅 (udp 버전 ) 과제 서버에서먼저 bind 하고그포트를다른사람에게알려줄것 클라이언트에서알려준포트로접속 서로간에키보드입력을받아상대방에게메시지전송 2 Makefile 1 SRC_DIR =../../common 2 COM_OBJS = $(SRC_DIR)/addressUtility.o $(SRC_DIR)/dieWithMessage.o
More informationvar answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");
자바스크립트 (JavaScript) - HTML 은사용자에게인터페이스 (interface) 를제공하는언어 - 자바스크립트는서버로데이터를전송하지않고서할수있는데이터처리를수행한다. - 자바스크립트는 HTML 나 JSP 에서작성할수있고 ( 내부스크립트 ), 별도의파일로도작성이가능하다 ( 외 부스크립트 ). - 내부스크립트 - 외부스크립트
More informationMicrosoft PowerPoint 웹 연동 기술.pptx
웹프로그래밍및실습 ( g & Practice) 문양세강원대학교 IT 대학컴퓨터과학전공 URL 분석 (1/2) URL (Uniform Resource Locator) 프로토콜, 호스트, 포트, 경로, 비밀번호, User 등의정보를포함 예. http://kim:3759@www.hostname.com:80/doc/index.html URL 을속성별로분리하고자할경우
More information슬라이드 1
마이크로컨트롤러 2 (MicroController2) 2 강 ATmega128 의 external interrupt 이귀형교수님 학습목표 interrupt 란무엇인가? 기본개념을알아본다. interrupt 중에서가장사용하기쉬운 external interrupt 의사용방법을학습한다. 1. Interrupt 는왜필요할까? 함수동작을추가하여실행시키려면? //***
More informationA 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로거 자료실
redirection 매뉴얼 ( 개발자용 ) V1.5 Copyright 2002-2014 BizSpring Inc. All Rights Reserved. 본문서에대한저작권은 비즈스프링 에있습니다. - 1 - 목차 01 HTTP 표준 redirect 사용... 3 1.1 HTTP 표준 redirect 예시... 3 1.2 redirect 현상이여러번일어날경우예시...
More information2009년 상반기 사업계획
웹 (WWW) 쉽게배우는데이터통신과컴퓨터네트워크 학습목표 웹서비스를위한클라이언트 - 서버구조를살펴본다. 웹서비스를지원하는 APM(Apache, PHP, MySQL) 의연동방식을이해한다. HTML 이지원하는기본태그명령어와프레임구조를이해한다. HTTP 의요청 / 응답메시지의구조와동작원리를이해한다. CGI 의원리를이해하고 FORM 태그로사용자입력을처리하는방식을알아본다.
More information1217 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서블릿의라이프사이클 뇌를자극하는 JSP & Servlet
서블릿의라이프사이클 뇌를자극하는 JSP & Servlet Contents v 학습목표 서블릿클래스로부터서블릿객체가만들어지고, 서블릿객체가초기화되어서서블릿이되고, 서블릿이사용되고, 최종적으로소멸되기까지의전과정을서블릿의라이프사이클이라고한다. 이장에서는서브릿의라이프사이클에관련된프로그래밍기술을배워보자. v 내용 서블릿의라이프사이클 서블릿클래스의 init 메서드의 destroy
More informationC 프로그래밍 언어 입문 C 프로그래밍 언어 입문 김명호저 숭실대학교 출판국 머리말..... C, C++, Java, Fortran, Python, Ruby,.. C. C 1972. 40 C.. C. 1999 C99. C99. C. C. C., kmh ssu.ac.kr.. ,. 2013 12 Contents 1장 프로그래밍 시작 1.1 C 10 1.2 12
More informationJ2EE Concepts
! Introduction to J2EE (1) - J2EE Servlet/JSP/JDBC iseminar.. 1544-3355 ( ) iseminar Chat. 1 Who Are We? Business Solutions Consultant Oracle Application Server 10g Business Solutions Consultant Oracle10g
More informationPowerPoint 프레젠테이션
Reasons for Poor Performance Programs 60% Design 20% System 2.5% Database 17.5% Source: ORACLE Performance Tuning 1 SMS TOOL DBA Monitoring TOOL Administration TOOL Performance Insight Backup SQL TUNING
More information02 C h a p t e r Java
02 C h a p t e r Java Bioinformatics in J a va,, 2 1,,,, C++, Python, (Java),,, (http://wwwbiojavaorg),, 13, 3D GUI,,, (Java programming language) (Sun Microsystems) 1995 1990 (green project) TV 22 CHAPTER
More informationIntro to Servlet, EJB, JSP, WS
! Introduction to J2EE (2) - EJB, Web Services J2EE iseminar.. 1544-3355 ( ) iseminar Chat. 1 Who Are We? Business Solutions Consultant Oracle Application Server 10g Business Solutions Consultant Oracle10g
More information목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate
ALTIBASE HDB 6.1.1.5.6 Patch Notes 목차 BUG-39240 offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG-41443 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate 한뒤, hash partition
More informationSena 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 informationPowerPoint 프레젠테이션
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 informationBMP 파일 처리
BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)
More informationMicrosoft 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 informationPowerPoint 프레젠테이션
WEB SERVER PORTING 1 Jo, Heeseung 웹서버포팅 HBE-SM5-S4210 를임베디드웹서버로사용할수있도록웹서버를올리는작업 임베디드서버에널리쓰이는웹서버들중 GoAhead 라는웹서버를포팅 CGI 프로그램을이용하여웹에서 HBE-SM5-S4210 의 LED, 7- Segment, TextLCD 를제어실습 2 Goahead webserver 소스를다운받거나제공된
More information슬라이드 1
NeoDeveloper 설치가이드 차례 1. 환경 3 2. 설치 3 2.1 웹서버설치 3 Tomcat 7 3 JDK 1.6 3 2.2 NeoDeveloper 설치 3 Neo Developer 서버구성 3 Demo용 User Application 구성 4 Neo Developer 서버 Data File 4 Client 개발 Tool 설치 4 3. 설정 5 3.1
More informationAPI 매뉴얼
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 informationMicrosoft PowerPoint 세션.ppt
웹프로그래밍 () 2006 년봄학기 문양세강원대학교컴퓨터과학과 세션변수 (Session Variable) (1/2) 쇼핑몰장바구니 장바구니에서는사용자가페이지를이동하더라도장바구니의구매물품리스트의내용을유지하고있어야함 PHP 에서사용하는일반적인변수는스크립트의수행이끝나면모두없어지기때문에페이지이동시변수의값을유지할수없음 이러한문제점을해결하기위해서 PHP 에서는세션 (session)
More information/chroot/lib/ /chroot/etc/
구축 환경 VirtualBox - Fedora 15 (kernel : 2.6.40.4-5.fc15.i686.PAE) 작동 원리 chroot유저 ssh 접속 -> 접속유저의 홈디렉토리 밑.ssh의 rc 파일 실행 -> daemonstart실행 -> daemon 작동 -> 접속 유저만의 Jail 디렉토리 생성 -> 접속 유저의.bashrc 의 chroot 명령어
More informationSK Telecom Platform NATE
SK Telecom Platform NATE SK TELECOM NATE Browser VER 2.6 This Document is copyrighted by SK Telecom and may not be reproduced without permission SK Building, SeRinDong-99, JoongRoGu, 110-110, Seoul, Korea
More information개요오라클과티베로에서 JDBC 를통해접속한세션을구분할수있도록 JDBC 접속시 ConnectionProperties 를통해구분자를넣어줄수있다. 하나의 Node 에다수의 WAS 가있을경우 DB 에서 Session Kill 등의동작수행시원하는 Session 을선택할수있다.
설치및환경설정 JDBC 접속세션구분 / 확인 2013. 11. 01 개요오라클과티베로에서 JDBC 를통해접속한세션을구분할수있도록 JDBC 접속시 ConnectionProperties 를통해구분자를넣어줄수있다. 하나의 Node 에다수의 WAS 가있을경우 DB 에서 Session Kill 등의동작수행시원하는 Session 을선택할수있다. 사용하기 JEUS 에서설정방법
More informationPowerPoint 프레젠테이션
Chapter 10 포인터 01 포인터의기본 02 인자전달방법 03 포인터와배열 04 포인터와문자열 변수의주소를저장하는포인터에대해알아본다. 함수의인자를값과주소로전달하는방법을알아본다. 포인터와배열의관계를알아본다. 포인터와문자열의관계를알아본다. 1.1 포인터선언 포인터선언방법 자료형 * 변수명 ; int * ptr; * 연산자가하나이면 1 차원포인터 1 차원포인터는일반변수의주소를값으로가짐
More informationDocsPin_Korean.pages
Unity Localize Script Service, Page 1 Unity Localize Script Service Introduction Application Game. Unity. Google Drive Unity.. Application Game. -? ( ) -? -?.. 준비사항 Google Drive. Google Drive.,.. - Google
More informationrmi_박준용_final.PDF
(RMI) - JSTORM http://wwwjstormpekr (RMI)- Document title: Document file name: Revision number: Issued by: Document Information (RMI)- rmi finaldoc Issue Date: Status:
More information제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호
제이쿼리 () 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호 CSS와마찬가지로, 문서에존재하는여러엘리먼트를접근할수있다. 엘리먼트접근방법 $( 엘리먼트 ) : 일반적인접근방법
More information금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음
More informationInterstage4 설치가이드
Interstage Application Server V501 Operation Guide Internet 1 1 1 FJApache FJApache (WWW (WWW server) server) - - file file - - 2 2 InfoProviderPro InfoProviderPro (WWW (WWW server) server) - - file file
More information<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제1장 Unix란 무엇인가?
1 12 장파이프 2 12.1 파이프 파이프원리 $ who sort 파이프 3 물을보내는수도파이프와비슷 한프로세스는쓰기용파일디스크립터를이용하여파이프에데이터를보내고 ( 쓰고 ) 다른프로세스는읽기용파일디스크립터를이용하여그파이프에서데이터를받는다 ( 읽는다 ). 한방향 (one way) 통신 파이프생성 파이프는두개의파일디스크립터를갖는다. 하나는쓰기용이고다른하나는읽기용이다.
More informationA 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슬라이드 1
Pairwise Tool & Pairwise Test NuSRS 200511305 김성규 200511306 김성훈 200614164 김효석 200611124 유성배 200518036 곡진화 2 PICT Pairwise Tool - PICT Microsoft 의 Command-line 기반의 Free Software www.pairwise.org 에서다운로드후설치
More information< 목차 > Ⅰ. 개요 3 Ⅱ. 실시간스팸차단리스트 (RBL) ( 간편설정 ) 4 1. 메일서버 (Exchange Server 2007) 설정변경 4 2. 스팸차단테스트 10
(https://www.kisarbl.or.kr) < 목차 > Ⅰ. 개요 3 Ⅱ. 실시간스팸차단리스트 (RBL) ( 간편설정 ) 4 1. 메일서버 (Exchange Server 2007) 설정변경 4 2. 스팸차단테스트 10 Ⅰ. 개요 실시간스팸차단리스트 (RBL) 는메일서버를운영하는누구나손쉽게효과적으로스팸수신을차단하는데이용할수있도록한국인터넷진흥원 (KISA)
More informationuntitled
시스템소프트웨어 : 운영체제, 컴파일러, 어셈블러, 링커, 로더, 프로그래밍도구등 소프트웨어 응용소프트웨어 : 워드프로세서, 스프레드쉬트, 그래픽프로그램, 미디어재생기등 1 n ( x + x +... + ) 1 2 x n 00001111 10111111 01000101 11111000 00001111 10111111 01001101 11111000
More informationMicrosoft 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 informationKYO_SCCD.PDF
1. Servlets. 5 1 Servlet Model. 5 1.1 Http Method : HttpServlet abstract class. 5 1.2 Http Method. 5 1.3 Parameter, Header. 5 1.4 Response 6 1.5 Redirect 6 1.6 Three Web Scopes : Request, Session, Context
More informationChap7.PDF
Chapter 7 The SUN Intranet Data Warehouse: Architecture and Tools All rights reserved 1 Intranet Data Warehouse : Distributed Networking Computing Peer-to-peer Peer-to-peer:,. C/S Microsoft ActiveX DCOM(Distributed
More informationJSP 의내장객체 response 객체 - response 객체는 JSP 페이지의실행결과를웹프라우저로돌려줄때사용되는객체이다. - 이객체는주로켄텐츠타입이나문자셋등의데이터의부가정보 ( 헤더정보 ) 나쿠키 ( 다음에설명 ) 등을지정할수있다. - 이객체를사용해서출력의방향을다른
JSP 의내장객체 response 객체 - response 객체는 JSP 페이지의실행결과를웹프라우저로돌려줄때사용되는객체이다. - 이객체는주로켄텐츠타입이나문자셋등의데이터의부가정보 ( 헤더정보 ) 나쿠키 ( 다음에설명 ) 등을지정할수있다. - 이객체를사용해서출력의방향을다른 URL로바꿀수있다. 예 ) response.sendredirect("http://www.paran.com");
More informationC++ Programming
C++ Programming 연산자다중정의 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 연산자다중정의 C++ 스타일의문자열 2 연산자다중정의 연산자다중정의 단항연산자다중정의 이항연산자다중정의 cin, cout 그리고 endl C++ 스타일의문자열 3 연산자다중정의 연산자다중정의 (Operator
More information