Tmax
|
|
- 덕현 창
- 6 years ago
- Views:
Transcription
1 관리자안내서 Copyright 2000 Tmax Soft Co., Ltd. All Rights Reserved.
2 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. 이프로그램과문서는 라이선스동의하에서만만들거나, 사용되거나, 복사될수있습니다. 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 는 Co., Ltd. 의등록상표입니다. 기타모든제품들과회사이름은각각해당소유주의상표로서참조용으로만사용됩니다. Document info Document name: 관리자안내서 Document date: Manual release version: 1 Software Version:
3 관리자안내서 차례 1 소개 의개요 소개 구조와동작 기존웹서버와의구조비교 의 Service 구조 특징 Caching WBAPI TP-Monitor Tmax Service 호출 Extension 관리 Log 관련 의 Tool 의디렉토리구조 환경변수 Quick Start 설정 소개 환경파일의개념
4 관리자안내서 의환경파일이란무엇인가? 환경파일의일반적인형태 환경파일의구조 DOMAIN 절 NODE 절 SVRGROUP 절 SERVER 절 간단한환경파일의작성 소개 기본설정 DOMAIN Section 설정하기 NODE Section 설정하기 SVRGROUP Section 설정하기 SERVER Section 설정하기 환경파일예제 환경파일컴파일 소개 사용목적 실행방법 기동및종료 기동 기동전점검할사항 wsboot
5 관리자안내서 6.2 종료 wsdown 환경의기본설정 DOMAIN 절의설정 필수항목 Domain Name = string NODE 절의설정 필수항목 Node Name = string WEBTOBDIR = literal SHMKEY = numeric (32768 ~ ) DOCROOT = literal 선택항목 HTH PORT User, Group 설정 (UNIX 환경 ) Admin HostName JSVPORT CheckIntval CacheSize CacheEntry KeepAliveMax KeepAliveTimeout Timeout UserDir AppDir 기본 Log 디렉토리설정 IndexName Options Method Listen DirIndex LanguagePrio Logging NodeType ErrorLog
6 관리자안내서 EnvFile SSLFLAG SSLNAME SVRGROUP 절의설정 필수항목 Server Group name NODENAME SVRTYPE SERVER 절의설정 필수항목 Server Name SVGNAME 환경의고급설정 동적컨텐츠를위한 설정 소개 CGI 설정 CGI 의이용 CGI 설정 CGI 설정및사용예 SSI 설정 SSI 의이용 SSI Commands PHP Configuration PHP 의이용 PHP 예 Virtual Hosting 설정 개요 사용예
7 관리자안내서 Mass Virtual Host DOCROOT 설정 RealPath 설정 디렉토리설정패턴에사용되는 %- 지시자 WBAPI 설정 WBAPI 의개념 WBAPI 의종류 WBAPI 의이용과예 WBAPI 를위한설정 WBAPI 프로그램의 Service Table 생성 WBAPI 프로그램의 Compile WBAPI 의시작및응용 WBAPI 를이용한 TP-Service 호출설정 TP-Service 기능의필요성 TP-Monitor Service 개념 TP-Monitor Service 의버퍼유형 TP-Monitor Service 통신유형 TP API 의사용 TP-Monitor Service 호출를위한환경구성 환경파일 (ex:.profile) 환경파일 데이터베이스사용 환경파일작성예 Client/Server 프로그램 Service Table 작성
8 관리자안내서 Client/Server 프로그램컴파일 TP-Monitor Service 의시작및응용 Tmax 와의연동 소개 Tmax 연동을위한환경파일 사용예 Logging 설정 Access Log File Error Log File Log File Format Common Log File 포맷 관리 소개 wsadmin 소개 wsadmin 을이용한시스템관리 각종정보출력 환경정보 Domain 에대한환경정보 Node 에대한환경정보 Server Group 에대한환경정보 Server 에대한환경정보 동작상태정보 Server Process 에대한정보 운용관리
9 관리자안내서 Server Process 중지및재개 적체해소 상태정보반복표시기능 환경설정값동적변경 웹브라우저연결해제 Server Process 변경 Logging 관리 Windows NT 에서의 시스템관리 Administration Tool 의소개 Administration Tool 의구조 기본 configuration 설정및컴파일방법 Configuration 설정구조 Configuration 설정방법 Configuration Compile NT 에서 기동 / 종료와시스템환경변수설정 기동 : Start (wsboot) 종료 : Stop (wsdown) Servlet Engine 기동 : Start Servlet Engine Servlet Engine 종료 : Stop Servlet Engine 시스템환경변수설정 : Settings System Editing for NT System Monitoring for NT 튜닝 소개
10 관리자안내서 10.2 HTH 설정 Server Process 설정 예제 Sample 보안 소개 인증방법 SSL (Secure Socket Layer) SSL v SSL vs. SHTTP SSL Encryption Ciphers 인증서비스 인증기관 (Certificate Authority) 인증서 (Certificate) 인증서발급정책 (Certificate Issuing Policy) Verisign 에서서버인증서발급받기 Authentication 과 SSL 의이용 Authentication wsmkpw Authentication 의설정 SSL 의설정 JEUS 와의연동 소개 와 JEUS 연동 (Base+) 와 JEUS 연동을위한설정
11 관리자안내서 환경파일의설정 JEUS 환경파일의설정 와 JEUS 연결의특징 Servlet Engine 기동및종료 예제 내장 Servlet Engine 이용방법 (Standard+) 예제 와 Servlet Engine 의 Clustering 웹서버에전용웹컨테이너를할당하는방식 웹서버가웹컨테이너를공유하는방식 Distributed Session session routing session server 혼합방식 설정 Multi-Node 사용 (Standard+) 소개 wsracd(web Server Remote Access Control Daemon) Multi-Node 환경설정 Multi-Node 상에서의 기동과종료 Multi-Node 의한 Node 에서 기동을위한 wsboot 명령어옵션 Multi-Node 의한 Node 에서 종료를위한 wsdown 명령어옵션 부하조절 -Load Balancing (Standard+) 부하조절방법
12 관리자안내서 Layer 4 Switch 를이용한부하조절 L4 switch 의개념과종류 DNS 를이용한부하조절 Front-end 를이용한부하조절 시스템성능에따른부하조절 동적부하조절 의부하조절기능설정시주의사항 정리 부록 (APPENDIX) A. 환경파일작성예 A.1 기본환경파일예 A.2 와 JEUS 연동환경설정예 A.3 NT 환경설정툴사용예 A.3.1 DOMAIN 절 A.3.2 NODE 절 A.3.3 VHOST 절 A.3.4 SVRGROUP 절 A.3.5 SERVER 절 A.3.6 SERVICE 절 A.3.7 DIRECTORY 절 A.3.8 URI 절 A.3.9 ALIAS 절
13 관리자안내서 A.3.10 DIRINDEX 절 A.3.11 LOGGING 절 A.3.12 ERRORDOCUMENT 절 A.3.13 AUTHENT 절 A.3.14 SSL 절 A.3.15 EXT 절 B. CGI 활용예 B.1 소개 B.2 C 를이용한게시판구현 B.2.1 환경파일작성 B.2.2 화면코드작성 B.2.3 CGI 소스코드작성 B.2.4 작업및결과확인 B.3 PERL 을이용한게시판구현 B.3.1 환경파일작성 B.3.2 Perl 스크립트작성 B.3.3 작업및결과확인 C WBAPI C.1 WBAPI List C.1.1 INIT/DONE API C.1.2 ALLOC API C.1.3 GET API C.1.4 PUT/SET API C.1.5 SEND API C.1.6 COOKIE API C.1.7 SESSION API
14 관리자안내서 C.1.8 WBTX API C.1.9 ETC API C.2 WBAPI 를이용한 CGI 의변환 D TP API D.1 TP API List D.1.1 XATMI API 함수 D.1.2 비표준 API 함수 D.1.3 TX 함수 D.1.4 필드버퍼관련함수 D.2 TP- 모니터서비스를위한클라이언트프로그램 D.3 TP- 모니터서비스를위한서버프로그램 D.4 클라이언트 / 서버프로그램컴파일 D.4.1 클라이언트프로그램의 Makefile D.4.2 서버프로그램의 Makefile (Makefile.pc) D.4.3 컴파일실행 D.4.4 데이터베이스사용을위한작업 D.5 TP API 실행 E Tmax 와의연동 E.1 Tmax 연동을위한클라이언트프로그램작성 E.2 클라이언트프로그램컴파일 E.3 Tmax 연동실행 F 환경설정레퍼런스 F.1 소개
15 관리자안내서 F.2 DOMAIN 절 F.2.1 개요 F.2.2 필수항목 F.2.3 선택항목 F.2.4 DOMAIN 절의사용예 F.3 NODE 절 F.3.1 개요 F.3.2 필수항목 F.3.3 선택항목 F.3.4 NODE 절의사용예 F.4 VHOST 절 F.4.1 개요 F.4.2 필수항목 F.4.3 선택항목 F.4.4 VHOST 절의사용예 F.5 SVRGROUP 절 F.5.1 개요 F.5.2 필수항목 F.5.3 선택항목 F.5.4 SVRGROUP 절의사용예 F.6 SERVER 절 F.6.1 개요 F.6.2 필수항목
16 관리자안내서 F.6.3 선택항목 F.6.4 SERVER 절의사용예 F.7 SERVICE 절 F.7.1 개요 F.7.2 필수항목 F.7.3 선택항목 F.7.4 SERVICE 절의사용예 F.8 DIRECTORY 절 F.8.1 개요 F.8.2 필수항목 F.8.3 선택항목 F.8.4 DIRECTORY 절의사용예 F.9 URI 절 F.9.1 개요 F.9.2 필수항목 F.9.3 선택항목 F.9.4 URI 절의사용예 F.10 ALIAS 절 F.10.1 개요 F.10.2 필수항목 F.10.3 선택항목 F.10.4 ALIAS 절의사용예 F.11 DIRINDEX 절
17 관리자안내서 F.11.1 개요 F.11.2 필수항목 F.11.3 선택항목 F.11.4 DIRINDEX 절의사용예 F.12 LOGGING 절 F.12.1 개요 F.12.2 필수항목 F.12.3 선택항목 F.12.4 LOGGING 절의사용예 F.13 AUTHENT 절 F.13.1 개요 F.13.2 필수항목 F.13.3 선택항목 F.13.4 AUTHENT 절의사용예 F.14 SSL 절 F.14.1 개요 F.14.2 필수항목 F.14.3 선택항목 F.14.4 CA 명령어사용 (Unix) F.14.5 SSL 절의사용예 F.15 EXT 절 F.15.1 개요 F.15.2 필수항목
18 관리자안내서 F.15.3 선택항목 F.15.4 EXT 절의사용예 F.16 ACCESS 절 F.16.1 개요 F.16.2 필수항목 F.16.3 선택항목 F.16.4 ACCESS 절의사용예 F.17 EXPIRES 절 F.17.1 개요 F.17.2 필수항목 F.17.3 선택항목 F.17.4 EXPIRES 절의사용예 F.18 ERRORDOCUMENT 절 F.18.1 개요 F.18.2 필수항목 F.18.3 선택항목 F.18.4 ERRORDOCUMENT 절의사용예 F.19 TCPGW 절 F.19.1 개요 F.19.2 필수항목 F.19.3 선택항목 F.19.4 TCPGW 절의사용예
19 관리자안내서 매뉴얼에대해서 매뉴얼의대상 본매뉴얼은 의 Web Server 제품인 의모든기능을적절히활용할수있도록돕기위해만들어졌다. 본매뉴얼의이용자는 UNIX 와 Web 에대한기초지식이있는사람으로서 Web Server 에관심이있는모든일반사용자와 Web Server 관리자를포함한다. 매뉴얼의전제조건 본매뉴얼을이해하기위해서는 Web Server 와 World Wide Web, TCP/IP, HTTP 에대한기초적인이해만있으면되고, 특별한전문지식이요구되지는않는다. 그렇지만 를 UNIX 환경에서운영하고자하는경우라면, UNIX 사용에관련한기본적인지식이요구된다. 만약 Web Container 와의연동을위해서 를사용하려고한다면, 이매뉴얼을읽는전 / 후에, 간단하게라도 Web Container 안내서를읽어봐야할것이다. 매뉴얼의구성 본매뉴얼은다음과같이 15 개장 (Chapters) 과 6 개의부록으로 구성되어져있다. 1. 소개 2. 의개요 3. Quick Start 4. 설정 5. 환경파일컴파일 17
20 관리자안내서 6. 기동및종료 7. 환경의기본설정 8. 환경의고급설정 9. 관리 10. 튜닝 11. 보안 12. JEUS 와의연동 13. Multi-Node 사용 (Standard+) 14. 부하조절 (Standard+) 15. 정리 부록 A. 환경파일작성예 B. CGI 활용예 C. WBAPI D. TP API E. Tmax 와의연동 F. 환경설정레퍼런스 부록에서제공하는내용은본문에서간단하게설명했던내용들에대해서보다상세하게다시설명한다. 그러므로이부록들은 에대해서경험이많은관리자들이좋은참고자료로사용할수있다. 18
21 관리자안내서 관련매뉴얼 본매뉴얼과관련있는것들은다음과같다. Installation Guide Web Container Guide TP API Reference Manual WBAPI Reference Manual Application Development Guide 일러두기 표기예 내용 텍스트본문, 12 포인트, 바탕체 Times New Roman 텍스트 본문강조 CTRL+C CRL 과동시에 C 를누름 public class myclass { } Java 코드 <system-config> XML 문서 참조 : / 주의 :` Configuration 메뉴를연다 JEUS_HOME 참조사항과주의할사항 GUI 의버튼같은컴포넌트 JEUS 가실제로설치된디렉토리 예 )c:\jeus42 jeusadmin nodename 콘솔명령어와문법 19
22 관리자안내서 [ 파라미터 ] 옵션파라미터 < xyz > < 와 > 사이의내용이실제값으로변경됨 선택사항. 예 ) A B: A 나 B 중하나 파라미터등이반복되어서나옴?, +, * 보통 XML 문서에각각 없거나, 한번, 한번이상, 없거나, 여러번 을나타낸다.... XML 이나코드등의생략 <<FileName.ext>> 코드의파일명 그림 1. 그림이름이나표이름 제품별기능 제품구분 Base Standard Enterprise 제공기능 HTML, CGI, PHP, SSI, SSL, Basic WBAPI Base 제공기능, Multi-Node, Load Balancing, JSP/Servlet Standard 제공기능, TP-Service 20
23 관리자안내서 연락처 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): 21
24 관리자안내서 1 소개 는차원이다른성능과안정성을갖춘차세대웹서버로서, World Wide Web 환경에서, HTTP 프로토콜을통해서전달된브라우저의 Request 를처리하는웹서버이다. 는세계유명웹서버보다월등히우수한성능을보장할뿐만아니라기존웹서버가가지고있는한계점들을완벽하게개선함으로써 Web 환경을구축하는데있어고성능과안정성이라는두가지효과를모두얻을수있다. 관리자안내서는다음과같은내용을담고있다. 의전반적인구조 환경설정및컴파일방법 기동및종료 운영관리 성능향상 보안 JEUS 와의연동 Multi-Node 와 Load Balancing 22
25 관리자안내서 2 의개요 2.1 소개 이번장에서는 의기본적인구조와개념, 그리고특징들에대해서설명한다. 2.2 구조와동작 는기존웹서버와는다른구조를가지고있다. Apache 로대변되는기존웹서버들은대부분 NCSA 사의 httpd 의구조를가지고있다. 이는사용자가그리많지않던환경하에서이용되던것으로, 사용자의증가에유연하게대처하지못하는단점을지니고있다. 에서는이런문제를가장먼저해결하고자하였다. 따라서최우선적으로고려한것이사용자가계속증가하는경우에대한대처방식이었다. 기존의웹서버들은사용자의 Request 가들어오면일대일방식으로연결을맺는구조로되어있다. 따라서사용자가증가하는경우, 결국 Server Process 가그수만큼동시에늘어나야 Service 를할수있다. 그러나이러한방식은사용자가증가하면할수록, Server 에걸리는부하도따라서증가하기때문에많은문제점을야기한다. 물론, 사용자가늘어나면 Server 에걸리는부하가적을수는없다. 더많은 Memory 와 CPU Overhead 를감수하여야하는것은당연한일이다. 하지만사용자가늘어난다고해서 Server 에걸리는부하가이와비례해서계속크게늘어나더많은 Hardware 를추가로구입하여야하는일이발생한다면, 이는적절한해답이되지못한다. 즉, 사용자가늘어난다고해도 Server 자체에서적절히대응하여일정수준까지는무리없이 Service 를가능하게하는구조가되어야무한하게확장하는 Web 에대응할수있는것이다. 그럼여기서기존의웹서버와 와의구조에대해알아보고 의구조가무한히확장하는 Web 환경에대응할수있는이유를알아보자. 23
26 관리자안내서 기존웹서버와의구조비교 초창기웹서버인 httpd 의구조를그대로계승하는덕에 Apache 는가장일반적인 Process per Request 형태를취하고있다. 즉, 사용자 Request 마다 Process 가발생하여처리하는구조인것이다. 따라서앞에서언급한대로사용자가증가하면 Process 도같이비례하여증가하게되므로, 사용자수가일정수이상이되면 Service 에많은무리가생긴다. 이는각시스템마다 Process 의수가한정되어있고, Process 가늘어나면너무많은 Memory 를차지하는등의 Overhead 도같이늘어나기때문이다. 이로인하여새로운상용웹서버들이등장하면서, 급속도로확장하고있는 Web 환경에대처하기위하여새로운구조를채택하였다. 가장일반적인것이 Multi-Thread 기술을이용한것이다. 이는 Process 보다 Overhead 가적은 Thread 를이용하여 Service 를하는것으로기존 Process 방식에비하여월등히좋은성능을나타내었다. Thread 는 Process 내부에서여러개를동시에이용할수있기때문에 Overhead 도적고, 차지하는 Memory 도 Process 방식에비하여상당히적기때문이다. 그러나이러한방식도문제를가지고있다. Thread 기술이상당히우수한기술임에는틀림없지만내부에서자신들간의영역다툼으로인하여 DeadLock 등의문제가빈번하게발생하기때문이다. 이것은특히안정성에있어치명적이다. Thread 구조에서 DeadLock 이발생하면, 자체 Thread 가 Service 를수행하지못함은물론, 자칫하면전체시스템이 Down 되어 Service 불능상태가될수있다. 이는성능뿐아니라안정성도중요한요소가되는웹서버에치명적인결함이될수있다. 위에서언급한두가지방식은서로장단점이있다. 성능과안정성면에서서로양극단을달리고있다고보면될정도로차이가있다. 하지만, 성능과안정성모두웹서버에게있어서는놓쳐서는안될아주중요한고려사항이다. 둘중의하나만충족되지않아도원만한 Service 가되지않기때문이다. 에서는 를개발하면서, 성능과안정성을모두충족시키기위하여많은구조를검토하고연구하였다. 에서는안정성을위하여 Thread 구조를배제하고 Process 구조를채택하였다. 그리고, 성능을위하여각 Process 를독립적으로만들지않고각각의특별한기능을하는 Process 를두어역할을분담하였다. 또한각 24
27 관리자안내서 Process 마다만약의경우를대비하여여분의보조 Process 를두는것을가능하게하여안정성에치중하였다 의 Service 구조 에서 Service 를하는방식은다음그림과같다. 그림 2-1. 의기본구조 2.3 특징 의대표적인특징을살펴보면다음과같다. 첫번째로 Memory Cashing, WBAPI, Dynamic Configuration 등기존의구버전에서갖고있던기능들의향상이있었으며, Web Application Server 로써의기능이대폭향상되었다는점이다. TDBC, TSP, Session Management, 타제품과의통합등 Web Application Server 가수행하는역할을 하나만으로도충분하게끔그기능이대폭증강되었다는점도들수있다 Caching 일반적으로많은 Web Server 들이 Caching 기능을제공하고있다. 그러나이들은대부분 Disk 에대한 Caching 으로서필요한 Data 들을다른 Machine 에서자신의 Machine 으로가져와서 Disk 에저장하여 25
28 관리자안내서 두고, 사용자가 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 과같은기능을하는 26
29 관리자안내서 다른 Application 을완전히새로개발하거나 Hardware 를무한정늘리는방법외에는다른수가없었다. 이에 에서는 WBAPI 를제공하여기존 CGI Program 을 의 Service 형태로변환하는것을가능하게한다. 이는기존 CGI Program 의단점을모두개선한형태로현재많이이용되는 Servlet 이나기타다른 Script Language 등과같은성능을제공한다. 이는또한 에서 TP-Monitor 의 Service Routine 을호출하는데이용되기도한다 TP-Monitor Tmax Service 호출 Browser 에서 로 Tmax Service 를호출하게되면 에서정해진형태의 Request 를보내게되는데, 일반적인형태는 CGI Request 와거의같다고보면된다. 다만사전에 내에서특정 Request 가들어오면 Tmax Service 로인식한다는설정만해주면된다. Ex] 만약, 내의 /tmax directory 에 Tmax Service 가존재한다고설정하고, 여기에 service1 이라는 service 가존재한다고할때, Browser 에서는아래와같은형태의 Request 를보내면된다. 는현재 Web 상에서바로 TP-Monitor 를사용할수있는최초의 Web Server 이며, 내에 TP-Monitor 의관리기능들이모두포함되어있으므로효율적인측면에서도아무런문제가없다 Extension 관리 일반적으로 Web Server 가기본적으로제공하는 Mime Type 은정해져있다. 이들은거의표준화되어서특정 Data 나프로그램들이전송되어져야할필요가있을때이에대한정의가 Web Server 내에서이루어져야한다. 따라서사용자가새로운형태의 Data type 을만들어서특정한지역내에서만쓰고싶다면새로운 Mime Type 을만들어야한다. 에서는이러한 Data Type 을관리자가정의하여제공할수있다. 또한자신이원하는 Data 의 Extension( 확장자 ) 를임의로설정이가능하여사용자자신만의 Extension 을만들수있다. 27
30 관리자안내서 Log 관련 Apache 에서제공하는형태의모든 Log Format 을만들수있다. 또한사용자가원하는형태의 Format 으로도조정이가능하다. 2.4 의 Tool 다음에설명되는툴들은 의엔진프로세스및서버프로세스들을관리하기위해서사용된다. wsadmin: system 의전체적인관리를위해서사용되는툴로서, 시스템정보및관리자로서의작업들을수행할수있다. wscfl: 텍스트기반의환경파일을컴파일해서바이너리파일로변환한다. wsmkpw: 사용자인증에관련된정보들을암호화해서특정파일을생성한다. 2.5 의디렉토리구조 가설치되는디렉토리를 WEBTOBDIR 로정한다. 아래의 [ 그림 2-2. 디렉토리구조 ] 는 가설치된디렉토리의구조이다. 28
31 관리자안내서 그림 2-2. 디렉토리구조 의주요디렉토리들 : bin/: 실행파일들이위치.(wsm, wscfl, wsracd, wsgst, wsboot, wsdown, etc.). cgi-bin/: CGI 파일이위치 lib/: Library 파일이위치 usrinc/ : API 의헤더파일들이위치 config/ : 의환경파일이위치 path/: 프로세스간의내부통신을위한 Named-pipe 가생성 docs/: 기본적으로설치되는 html 파일이위치 log/: Log 파일들이위치 svct/: WBAPI 의서비스테이블이위치 icons/: DIRINDEX 에서사용할아이콘이위치 ssl/: SSL 관련파일이위치 ap/: Application 파일이위치 29
32 관리자안내서 2.6 환경변수 에서사용하는환경변수로 WEBTOBDIR 이있다. 이환경변수의값으로는 의설치디렉토리가세팅되어야한다. 보다상세한정보를원한다면 설치안내서 를참조하기바란다. 30
33 관리자안내서 3 Quick Start 다음에나오는간단한절차를통해서, 를처음접하는사용자들이바로설치하여기동할수있도록안내할것이다. 아래의예에서우리는노드명을 gloria 로사용할것이다. 필요하다면, 이노드명을자신의컴퓨터이름 (HOSTNAME) 으로변경하여사용하도록한다. 가시스템에제대로설치되었다면, PATH 를비롯한시스템변수들도설정되어있을것이다. 의설치에대해서보다자세한설명을원한다면, 설치안내서를참조하기바란다. 의환경파일이설정되어있는지확인한다. WEBTOBDIR\config\ 디렉토리아래의 sample.m 파일이다음과같이되어있어야한다. *DOMAIN Webtob1 <<sample.m>> *NODE gloria WEBTOBDIR="C:/webtob", SHMKEY = 54000, DOCROOT="C:/webtob/docs", PORT = "8080", LOGGING = "log1", ERRORLOG = "log2", HTH = 1 *SVRGROUP htmlg cgig ssig NODENAME = gloria, SVRTYTE = HTML NODENAME = gloria, SVRTYPE = CGI NODENAME = gloria, SVRTYPE = SSI *SERVER 31
34 관리자안내서 html SVGNAME = htmlg, MinProc = 1, MaxProc = 2 cgi SVGNAME = cgig, MinProc = 1, MaxProc = 2 ssi SVGNAME = ssig, MinProc = 1, MaxProc =2 *URI uri1 Uri = "/cgi-bin/", Svrtype = CGI *ALIAS alias1 URI = "/cgi-bin/", RealPath = "C:/webtob/cgi-bin/" *LOGGING log1 log2 Format = "DEFAULT", FileName = "C:/webtob/log/access.log", Option = "sync" Format = "ERROR", FileName = "C:/webtob/log/error.log", Option = "sync" *EXT htm MimeType = "text/html", SvrType = HTML 1. 의환경파일컴파일툴 (wscfl) 을이용해서 sample.m 파일을컴파일한다. $ wscfl i sample.m 보다자세한설명은 4 장 설정을참조하기바란다. 2. WEBTOBDIR\config\ 디렉토리에바이너리파일인 wsconfig 가생성되었는지확인한다. 3. 지금까지의설정들을확인했으면, 를기동하기위해 명령프롬프트에서 wsboot 라고입력한다. 4. Browser 를열고, 다음과같이 URL 을입력한다. 머신의 IP]:[8080 또는사용자가지정한 PORT 번호]/ [ 그림 3-1. Test Page] 와같이 Test Page 가보여질것이다. 32
35 관리자안내서 그림 3-1. Test Page 5. Admin Tool 을띄우기위해, 새로운명령프롬프트창을열어서 wsadmin 을입력한다. 6. 해당창에서 help 나 h 를입력하면, 를모니터링하거나동작을제어할수있는명령어의리스트를확인할수있다. 7. 관리자명령어들을실제실행하여확인하였으면, 다음으로, quit 를입력하여, 해당 Admin Tool 을빠져나온다. 8. wsboot 를실행한명령프롬프트창으로바꿔서, wsdown 을입력하면, 가내려가게된다. 9. 이제 system 전체가종료되었다. 이것으로 Quick Start 를통한설명은마치고계속해서보다깊고상세하게여러가지툴과환경설정에관련한설명이이어질것이다. 만약위에서진행한각단계별로테스트가되지않는다면 설치안내서를참조해서현재의설정을확인해보기바란다. 33
36 관리자안내서 4 설정 4.1 소개 본장에서는 를구동하는데필요한정보를가지고있는설정파일에대해서설명한다. 이는본매뉴얼에서핵심이되는부분이며, 차후의설명에도반드시배경지식으로필요한것이다. 따라서 의환경파일에대한이해가부족하다면반드시이장을숙지하여야한다. 참고 : 의환경설정에대해서보다자세한정보를알고싶다면부록 [E. W ebtob 환경설정레퍼런스 ] 를참조하기바란다. 4.2 환경파일의개념 의환경파일이란무엇인가? 환경파일이란, 의환경설정에사용되는파일로서실제 기동에필요한모든정보를제공한다. 즉, 를기동하는데있어사용자가원하는바를이환경파일을통하여 에게전달하는것이다. 는실제구동시에, 이환경파일에기입된정보를바탕으로모든기능을수행하게된다. 따라서사용자가실제환경에맞는적당한정보를기입하면 는원활하게기능을수행할수있고, 만약잘못된정보를기입한다면사용자가원하는대로작동하지않거나문제가생기게된다 환경파일의일반적인형태 의환경설정파일은기본적으로 4 개의절로구성된다. DOMAIN, NODE, SVRGROUP, 그리고 SERVER 가그것이다. 각절의기본적인형태는다음과같다. * 절 34
37 관리자안내서 이름항목 1=..., 항목 2=...,... 다음은 환경파일의간단한예이다. *DOMAIN webtob1 <<http.m>> *NODE webmain WEBTOBDIR= /usr/gloria/webtob/, HTH = 1, SHMKEY = 77990, PORT = 9500, DOCROOT= /usr/gloria/webtob/docs *SVRGROUP svg1 svg2 NODENAME = webmain, SVRTYPE = HTML NODENAME = webmain, SVRTYPE = CGI *SERVER html SVGNAME = svg1, MinProc = 1, MaxProc = 2 cgi SVGNAME = svg2, MinProc = 1, MaxProc = 2 각각의절이름은별표 (*) 로시작된다. 즉, * 로시작되는항목은 가 절로 인식한다. 절의 이름으로는 DOMAIN, NODE, SVRGROUP, SERVER 가사용되며이들은모두대문자이다. 절의정의 순서는고정되어있지않다. 따라서 어느절이먼저정의되어도 상관없다. 그러나 Tree 형태로구성되어있기때문에가급적순서를 지켜주는것이나중의 편의성을위하여좋다. 또한절의정의는내용별로나누어한번이상나타날수있다. 즉, 하나의 절이여러번으로나누어정의될수있다. 예를들어, Multi Node 에서 Node 별로해당 Server Group, 업무처리 Server Process 등을 분리하여정의하고자할경우, 아래와같은 의환경파일 구성이가능하다. 이경우, 동일한이름으로같은내용이반복정의 되어서는안된다. *DOMAIN webtob1 <<http.m>> *NODE 35
38 관리자안내서 node1... *SVRGROUP... *SERVER... *NODE node2... *SVRGROUP... 각절의이름이나절의하위개체명은반드시첫번째칸에서시작되어야한다. 그이후항목들은윗줄에이어지는내용이라하더라도반드시공백을두고시작되어야한다. 각절의하위개체정의시, 하나의개체 ( 즉 Node, Server Group, Server) 를정의하는항목들은반드시콤마 (,) 로연결되어야한다. 항목정의가콤마로끝났을경우, 다음항목도현재대상개체에대한내용으로적용되지만, 콤마로이어지지않는경우현재대상개체의정의는끝난것으로인식된다. 각절의항목들은 항목이름 = 값 의형태로정의된다. 각항목은다음의 4 가지형태중하나의값으로정의될수있으며, 항목이름은값으로사용될수없다. 항목의데이터타입 : Numeric : 숫자 String : abc 형태의문자열. Literal : abc 형태의문자열 ( 에주의 ). Y / N : Yes, No 형태각절의항목들을다음과같은형태로설명하겠다. 항목 = 형태 ( 디폴트값 ) 범위또는크기 36
39 관리자안내서 내용 그러면앞에서설명한환경파일의각절에는어떠한내용이들어가는지간단하게살펴보겠다. 이절에서는우선간단한환경파일구성을위한기본적인정보만을제공할것이다. 이기본적인환경파일구성외에다른사항들, 특히특정상황에필요한기능들이나특수한기능들은앞으로이어지는장에서설명할것이다. 따라서본장에서설명할내용은 를구동하기위한최소한의정보이다. 를구동하여기본적인서비스를하기위하여필수적으로필요한절은 DOMAIN, NODE, SVRGROUP, SERVER 절이다. 따라서이장에서는이에대한간략한설명을할것이다. 그리고이어지는장에서간단한환경파일구성을설명한다. 4.3 환경파일의구조 의환경파일에는다음과같은 4개의중요한절이있다. DOMAIN 절 NODE 절 SVRGROUP 절 SERVER 절 DOMAIN 절 DOMAIN 절은독립적인 시스템전체의전반적인환경에대해정의하는부분이다. Domain 의이름은호스트이름과함께암호화되어 의 License 확인에사용된다. DOMAIN 절에서정의된내용은모든 Node 에공통적으로적용된다. 이절에서정의된내용을하위절에서재정의할수있다. 시스템전체적으로기본적인사항이 DOMAIN 절에서정의되며, Node 에서재정의된항목은해당 Node 에서우선적으로적용된다 NODE 절 NODE 절에는다음과같은내용들이정의될수있다. 시스템의홈디렉토리 37
40 관리자안내서 HTML 문서들이들어있는최상위디렉토리 실행할 Process (HTH) 의개수 공유메모리의 Key 값 Port 번호설정 Listener IP Address 설정 기타 Logging 등 를기동시키면 Node 단위별로 WSM, HTL, HTH Process 와 HTML, CGI 등의실제 Service 를수행하는 Server Process 들이기동된다. 이러한 Process 들이기동하기위해서는실행파일들이존재하는위치를알아야한다. 또한 Process 간통신에필요한디렉토리와각종 Error, 경고메시지를저장하는디렉토리도지정할수있다. 그리고각항목별로지시자들의형태가고정되어있다. 이는보통 Literal, Numeric, String 등의형태로나타나는데, 이들의형태에맞게각항목을설정하여야한다 SVRGROUP 절 를통해응용 Server Process 를접근하는경우 Server Process 의논리적인연관성에따라이들을그룹으로관리할필요가있게된다. 이절에서는이러한그룹에대한환경설정이이루어진다. Node 이름, Server 의종류, 호스트의이름등을등록한다. 이밖에 NODE 절이나 VHOST 절에서정의한내용이 Server Group 에따라새롭게정의할수있으며데이터베이스를사용하는경우데이터베이스접근과관련된정보들이정의될수있다 SERVER 절 SERVER 절에서는실질적으로제공하는 Service 들을등록한다. 는등록된 Service 만을처리하기때문에새로운 Server 프로그램이추가되는경우 Server 절의환경파일에반드시등록하여야한다. 가제공하는대부분의 Service 는 SERVER 절에서등록이가능하며비즈니스로직을 를통해직접호출하는경우에만 SERVICE 절의등록이필요하다. 각각의 Server 는위의 Server Group 절에정의된 Service 종류에따라 HTML, CGI, JSV 등으로구분되며 Server Group 이름과 Process 의가능한개수등이같이등록된다. 38
41 관리자안내서 SERVER 절에는다음과같은내용이정의된다. 각 Server Process 가속하는 Server Group Server Process 의최소개수와최대개수 4.4 간단한환경파일의작성 소개 이장에서는 를위한간단한환경파일을만드는방법에대해서알아볼것이다. 이장에서는 를기동하기위한최소한의내용을설명할것이고실제환경파일을만드는과정에대해서도설명할것이다 기본설정 가제공하는모든기능을이용하기위해서는환경파일의모든내용을파악하는것이좋다. 따라서앞장에서제공하는 환경파일의설명을탐독하여 의모든기능을파악하면 에서제공하는기능을모두이용할수있다. 에서제공하는최소한의환경파일은 DOMAIN 절, NODE 절, SVRGROUP 절, SERVER 절만이필요하다. 그럼이들을가지고최소한의환경파일을만들어보자. 예제로사용된환경파일은 에서 HTML, CGI, SSI 등의기본적인 Service 등을이용하게해주는최소한의것이다. 그럼하나하나설정된값에대해설명하겠다. ( 보통환경파일은 의 config/ Directory 에저장한다.) DOMAIN Section 설정하기 먼저, DOMAIN 절을살펴보자. DOMAIN 절은간단하게 DOMAIN name 만을설정하면된다. 이외에도추가기능들이있으나, DOMAIN 절에서는이것만으로충분히 Service 가가능하다 NODE Section 설정하기이절에서는 가 Booting 시에기본적으로가져야하는정보들에대한정의가이루어진다. NODE 절에서는 WEBTOBDIR 과 Shared Memory 를위한 SHMKEY 값그리고 index.html 등의 39
42 관리자안내서 HTML 문서가존재하는디렉토리를설정한 DOCROOT 그리고마지막으로 가 Listen 하고있는 Listen PORT 를설정한 PORT 이다. 아래예제는 가 8080 PORT 로 Listen 하고있는환경이다 SVRGROUP Section 설정하기 이는앞장에서설명한대로 에서제공하는 Server Type 별로각 Group 을설정한것이다. 아래예에서는 HTML 문서를처리하기위한것으로 HTML Server Group 을설정하고이의이름을 htmlg 를설정하였다. 마찬가지로 CGI Server Group 으로 cgig 를설정하였고, SSI Server Group 으로 ssig 를설정하였다. 위의 SVRTYPE 에정의된것이실제 Service 를정의하는것인데, 에서는현재 HTML, CGI, SSI 등을제공한다. 이와같이 Group 을설정하면, 이는이어서등장하는 SERVER 절에서이를가지고실제 Server 를운영할수있게된다. 즉, SERVER 절에서는 SVRGROUP 에서설정된하나의 Server Group 을가지고여러개의 Server 를만드는것이가능하게된다 SERVER Section 설정하기 이는 가실제로 Service 를처리하기위한것으로아래예에서는 html, cgi, ssi 등에대한것이정의되어있다. 아래환경파일에서 html 을예로들어설명하겠다. html SVGNAME = htmlg, MinProc = 1, MaxProc = 5 아래환경파일에서위와같이설정되어있는데, 이를보면, html 이라는 Server 가 htmlg 라는 Server Group 에속하여있음을알수있다. 그런데위의 SVRGROUP 절에서 htmlg 는 HTML 이라는 Server Type 을가진다고설정이되어있다. 따라서, 이 html 이라는 Server 는 HTML Service 를위한것이라는것을알수있다. SSI 나 CGI 역시이와같은원리로이루어진다. 그리고뒤에있는 MinProc 와 MaxProc 는실제 Service 할수있는 Process 의숫자이다 환경파일예제 *DOMAIN webtob1 <<http.m>> *NODE webmain WEBTOBDIR = "/usr/gloria/webtob", 40
43 관리자안내서 SHMKEY = 69000, DOCROOT = "/usr/gloria/webtob/docs", PORT = "8080" *SVRGROUP htmlg cgig ssig NODENAME = webmain, SVRTYPE = HTML NODENAME = webmain, SVRTYPE = CGI NODENAME = webmain, SVRTYPE = SSI *SERVER html SVGNAME = htmlg, MinPro c = 1, Max Proc = 5 cgi SVGNAME = cgig, MinProc = 1, MaxProc = 5 ssi SVGNAME = ssig, MinProc = 1, MaxProc = 5 41
44 관리자안내서 5 환경파일컴파일 5.1 소개 본장에서는 환경파일을작성한후, 이를실제 Web Server 에전달할수있는형태 (Binary) 로만드는컴파일툴 wscfl 의사용목적과사용법에대해설명한다. 5.2 사용목적 사용자가이해할수있는 text 형식으로된문서를정해진문법에맞추어작성하고, 이를기계가인식할수있는이진파일로변환하기위한것이다. 그리고이과정에서문법적오류나시스템설정오류를검증할수있다. 5.3 실행방법 컴파일작업은아래와같이 wscfl 명령에의해이루어진다 : wscfl [-v] [-i <config_file_name>] [-o <config_binary_file_name>] wscfl 의옵션 -i : 컴파일대상이되는환경파일이름을지정한다. -o : 컴파일을통해만들어질이진 (Binary) 환경파일이름을지정한다. 지정하지않으면 default 로 wsconfig 라는이름의파일이만들어진다. -v : 의 Version 을확인한다. 42
45 관리자안내서 컴파일작업이성공적으로이루어지면이진환경파일이생성된다. 이때 o 옵션으로만들어질이진환경파일의이름을지정하지않으면 wsconfig 라는이름이된다. 컴파일시에러가발생하는경우, 에러발생위치와 메시지를출력한다. 여러 Node 로 시스템이구축이되어있을때, 특정 Node 에서중앙관리를하고자하는경우각 Node 에 wsracd(web Server Remote Access Control Daemon) 가미리기동되어있어야한다. wsracd 는환경파일컴파일, 시스템부팅, 시스템다운, 동적환경변경등을특정 Node 에서한번의명령어로가능하게한다. 특정 Node 에서환경파일컴파일작업을수행하게되면모든 Node 에전달되며모든 Node 에이진 환경파일이생성된다. 이진 환경파일은 시스템기동과종료, Service 테이블생성등에참조되며하나의환경파일로모든 Node 가관리된다. 따라서환경파일의변경작업에는상당한주의가요구된다. sample.m Configuration File Compile ($wscfl i sample.m) wsconfig Binary File 그림 5-1. 환경파일컴파일의모식도 43
46 관리자안내서 6 We btob 기동및종료 환경구성을마친 를기동및종료하기위한명령어와각종옵션에대해알아본다. 6.1 기동 기동전점검할사항 를기동하기전, 다음과같은사항을점검해야한다. 이진 환경파일이존재하는가? 환경파일 *NODE 절의 WEBTOBDIR 항목에설정된 Directory 에 실행프로그램들 (wsm, htl, hth, cgis, ssis 등 ) 이존재하는가? Multi Node 인경우, 중앙관리를위한동작중인가? wsracd 가각 Node 에서 위의사전점검항목이확인되었다면 시스템을된것이다. 기동할준비가 wsracd 를기동시키기위해서는환경변수에 WEBTOB_RAC_PORT 를설정해주어야하며, 환경변수를참조하지않고부팅하기위해서는 wsracd k 로실행하여 wsracd 가사용될 Port 를 가지정하는것으로서중앙관리를위한준비를한다 wsboot 시스템을기동하기위해서 wsboot 라는프로그램이제공된다. 44
47 관리자안내서 명령어옵션인자 wsboot -f 이진 환경파일이름 -T 없음 -n Node 이름 -g 서버그룹이름 -A 없음 -S 서버이름 -s 서버이름 k 개수 명령어 wsboot : 를기동하기위한프로그램. W ebtob 를기동할때사용하는옵션 -f : 이미설명한바와같이 는 환경파일을토대로기동된다. 따라서참조할이진 환경파일명을지정해주어야한다. 만약파일명을지정하지않으면 default 로 wsconfig 파일이참조된다. -T : 관리프로세스들 (WSM, HTL, HTH) 만을기동시킨다. -n : 지정된 Node 에존재하는서버프로세스들을기동시킨다. Node 명은 환경파일내의 Node 절에미리정의되어있어야한다. ( 멀티 Node 의환경에서는반드시지정되어야한다 ) wsboot 후적용되는옵션 ( Process 를기동할때사용 ) 45
48 관리자안내서 -g : 지정된서버그룹에존재하는서버프로세스들을기동시킨다. 서버그룹명은 환경파일내의 SRVGROUP 절에미리정의되어있어야한다. -A : 환경파일내의 Server 절에정의된서버프로세스들을기동시킨다. 모든 -S : 지정된서버에존재하는서버프로세스들을 Min 개수만큼기동시킨다. -s : 지정된서버프로세스만을기동시킨다. 서버프로세스이름은 환경파일내의 SERVER 절에미리정의되어있어야한다. -k 옵션을함께사용하여서버프로세스개수를지정할수있다. 서버프로세스개수는현재기동되어있는개수를포함하여 Server 의 Max 항목에정의된개수를넘어서는안된다. -k 옵션을생략하면서버프로세스는 1 개만기동된다. wsboot 사용 예 $ wsboot wscon fig 환경파일을 참조하여 관리프로세스와 서비스서버프로세스들을모두기동시킨다. $ wsboot T f wsconfig2 wsconfig2 환경파일을 참조하여 관리프로세스들만을기동시킨다. $ wsboot -A wsconfig 환경파일을 참조하여 모든 서비스 서버프로세스들을기동시킨다. $ wsboot S svr1 환경파일을 참조하여 svr1 프로세스를 MIN 개수만큼 기동시킨다. $ wsboot -s svr1 k 5 -f wsconfig2 wsconfig2 환경파일을참조하여 svr1 프로세스를 5 기동시킨다. 개 46
49 관리자안내서 시스템을기동시키면먼저이진 환경파일내용이공유메모리에적재되고 (Load) 적재된환경파일 Node 마다지정된 WEBTOBDIR 디렉토리에서 기능프로세스 (WSM, HTL, HTH) 들이기동된다. 그후등록된서비스서버프로세스들이차례로기동된다. 프로세스들의기동순서를보면다음과같다. WSM HTL HTH 서버프로세스들 6.2 종료 시스템종료도 wsboot 와마찬가지로이진 환경파일을토대로이루어진다. 시스템에서사용하던공유메모리를없애고기동된 프로세스들 (WSM, HTL, HTH) 과응용서버프로세스들을종료시킨다 wsdown 시스템을종료시키기위해서는 wsdown 이라는명령을사용한다. 사용되는옵션들은 wsboot 명령과유사하다. 명 령어옵션인자 wsdown -A 없음 -S 서버이름 -s 서버 이름 k 개수 -n Node 이름 -g 서버그룹이름 -p 서버번호 -i 없음 명령어 wsdown : 를종료하기위한프로그램. 47
50 관리자안내서 옵션 -A : 모든서비스서버프로세스들을종료시킨다. -S : 현재사용중인해당서비스종료시킨다. 서버프로세스들을 -s : 해당서버프로세스만을종료시킨다. wsboot 와마찬가지로지정된개수만큼동작중인해당서버프로세스를종료시킨다. ( -k 옵션사용) -n : 해당 Node 의응용서버프로세스들을종료시킨다. 사용되는 Node 이름은 환경파일의 Node 절에정의되어야한다. ( 멀티 Node 의환경에서는반드시지정되어야한다 ) -g : 해당서버그룹의서버프로세스들을종료시킨다. 사용되는그룹이름은 환경파일의 SVRGROUP 절에정의된것이라야한다. -p : 특정서버프로세스를종료시킨다. s 옵션에의한종료와달리 wsadmin 에서 st p 명령으로확인할수있는프로세스번호 (spr_no) 를사용하여특정프로세스를종료시킬수있다. -i : wsdown 명령을즉시수행한다. 기본적으로 wsdown 명령은해당업무를모두종료하고수행되지만 -i(immediately) 옵션에의한종료는현재수행중인업무를무조건중단하기때문에신중하게사용해야한다. 48
51 관리자안내서 7 환경의기본설정 7.1 DOMAIN 절의설정 DOMAIN 절은독립적인 시스템전체의전반적인환경에대해정의하는부분이다. Domain 의이름은호스트이름과함께암호화되어 의 License 확인에사용된다. DOMAIN 절에서정의된내용은모든 Node 에공통적으로적용된다. 이절에서정의된내용을하위절에서재정의할수있다. 시스템전체적으로기본적인사항이 DOMAIN 절에서정의되며, Node 에서재정의된항목은해당 Node 에서우선적으로적용된다. 이제부터 DOMAIN 절의항목들에대해자세히살펴보겠다. DOMAIN 절의기본환경설정형식은다음과같이정의한다. Domain Name [,NliveInq] 필수항목 Domain Name = string 31 자이내의 string 형식으로정의한다. 31 자를초과하는이름을 사용할경우, 컴파일에러는나지않으나, 내부적으로 31 자까지만 인식하게된다. 31 자이내로이름을설정하게되어있는기타다른 절들의 항목에서도이점은동일하다. Domain 이름은호스트이름과 함께암호화되어시스템의 License 확인에사용된다. *DOMAIN webtob1 위의예는도메인절을정의하고있다. webtob1 은도메인의이름으로, DOMAIN 절에서정의되어야하는유일한필수항목이다. 49
52 관리자안내서 7.2 NODE 절의 설정 NODE 절에는다음과같은내용들이정의될수있다. 시스템의 홈디렉토리 HTML 문서들이들어있는최상위디렉토리 실행할 Process (HTH) 의개수 공유메모리의 Key 값 Port 번호설정 Listener IP Address 설정 기타 Logging 등 를기동시키면 Node 단위별로 WSM, HTL, HTH Process 와 HTML, CGI 등의실제 Service 를수행하는 Server Process 들이기동된다. 이러한 Process 들이기동하기위해서는실행파일들이존재하는위치를알아야하고, Process 간통신에필요한디렉토리와각종 Error, 경고메시지를저장하는디렉토리도지정해야한다. 그리고각항목별로지시자들의형태가고정되어있다. 이는보통 Literal, Numeric, String 등의형태로나타나는데, 이들의형태에맞게각항목을설정하여야한다. NODE 절의기본환경설정형식은다음과같이정의한다 : [Node name] WEBTOBDIR= -home-path, SHMKEY =shared-memory-segment-key DOCROOT = -html-root [,User][,Group][,Admin][,HostName][,Method] [,HTH][,HthQTimeout][,NodePort][,Port][,SslFlag] [,JSVPort][,RacPort][,SslName][,MaxIdleTime] [,CliChkIntval][,CacheSize][,CacheEntry] [,KeepAliveTimeout][,KeepAliveMax][,AppDir] [,PathDir][,SysLogDir][,UsrLogDi r][,userdir] [,ErrorLog][, EnvFile][, IndexName][Listen] [,DirIndex][,Options][,LanguagePrio][,Logging] 50
53 관리자안내서 [,NodeType] 필수항목 Node Name = string 31 자이내의 string 으로정의한다. 31 자를초과하는이름을사용할경우에는컴파일에러는나지않으나내부적으로 31 자까지만인식한다. Node 이름은실제등록된 Host 의이름을말한다. 예를들어 UNIX 의경우 uname n 명령으로각 Host 의이름을확인할수있다. 또한해당 Node 명은반드시 /etc/hosts 파일에등록되어있어야한다. 하나의 Dom ain 은하나이상의 Node 로이루어지므로, NODE 절에는최소한하나이상의 Node 이름이정의되어야한다 WEBTOBDIR = literal 크기 : 255 자이내. 가설치되어있는홈디렉토리의절대경로명이다. 이경로명은환경변수 WEBTOBDIR 과동일한값이정의되어야한다. 관련작업은모두 디렉토리하에서이루어진다. 이러한 bin, config, lib, docs, log, path 등의하위디렉토리구조를가지는상위디렉토리명을 WEBTOBDIR 에정의한다. SHMKEY = numeric (32768 ~ ) 공유메모리세그먼트 (Shared Memory Segment) 를가리키는값이다. 를이루는 Process 들이서로정보를공유하기위한공유메모리 Key 값을정의할필요가있다. 공유메모리 Key 값을정의하기전에이 Key 값들이다른프로그램또는다른업무에서사용되는지반드시확인해야한다. 그렇지않으면 기동시다른프로그램과충돌을일으켜서실행이되지않는다. 현재 에서정의되는 Shared Memory 의 Key 값은최소 에서최대 까지이다. 따라서이범위내에있는값을이용하면된다. DOCROOT = literal 가 Web 을통해 Service 하는모든문서를포함하는루트디렉토리의경로이다. 즉, 는 DOCROOT 가지정한디렉토리를최상위로하여문서를 Service 하게된다. Client 가요구한 URL 은 DOCROOT 의경로뒤에추가되어실제경로명을이루게된다. 는이경로를가지고파일에접근하게된다. 51
54 관리자안내서 선택항목 HTH HTH = numeric ( Default Number: 1, Max Number: 20) 에서가장중요한역할을담당하고있는 HTH (HTTP Request Handler) Process 의개수를설정한다. HTH 는실질적으로 Client Browser 와 내부 Service Process 사이를중계하는 Process 이다. 즉, Client 의요청을받아 Service 를받을수있도록적당한 Process 에넘겨주고, 다시처리된결과를수신하여 Client 에게되돌려준다. 에서는모든 Client 가이 HTH Process 에연결되도록설계되어있다. 따라서많은수의동시접속자를유지하기위해서는이수를적당히늘려주는것도필요하다. 그러나보통하나의 HTH Process 가적어도 800 개이상의 Client 를수용할수있기때문에하나의 HTH 로도큰문제는되지않을것이다. 만약 1000 명이상의동시사용자를수용하여야하는시스템에서는, 두개이상의 HTH Process 를구동하여야한다. 현재 에서는최대 20 개까지의 HTH Process 를구동하는것이가능하다. 따라서약 명의사용자를동시에처리하는것이가능하다 PORT PORT = literal (Default Port: 80) 의 HTTP Listener 포트번호를설정한다. 이는기본적으로 Web Service 를하기위해서는반드시필요한설정으로, 이항목은반드시설정해야한다. 보통일반적인 Web Server 는 80 Port 를이용한다. 그러므로이항목을설정하지않았을경우에는 default 로 80 Port 가설정된다. 그러나다른용도나 Internet 등의경우에는임의의 Port 를설정하여이용할수있다. Virtual Host 를사용하는경우, Port 번호는 VHOST 절에서재정의해야한다. 또한 의경우여러개의 Port 를동시에정의하는것도가능하다. 현재는최대 10 개의 Port 를동시에설정하는것이가능하다. 즉, PORT 의설정을통해서여러개의 Port 가동시에 Listen 하는것이가능하다는것이다. 이에대한간단한예는다음과같다. PORT = 9090, 9091 위와같은 Setting 이이루어지면, 는 9090 과 9091 Port 에서모두 Web Service 를받아들일수있다. 52
55 관리자안내서 한가지주의할점은이것은 Listen 항목과동시에운영할수없다는것이다. Listen 항목에서특정 Port 를지정하는경우이 Port 만을이용하게된다. 즉, 중요한것은 Listen 항목에서지정된 Port 가 PORT 항목에서지정된것보다우선된다는것이다. 물론 Listen 항목에서도여러개의 Port 를지정하는것이가능하다. 이에대한예는 Listen 항목의설명에서할것이다 User, Group 설정 (UNIX 환경 ) 에서는시스템의보안을위하여 의실제실행 Process 에대한권한설정을할수있게하였다. 만약 Web Server 의실행 Process 들이 root 권한으로실행되는경우, 이에문제가발생하게되면시스템전체에큰피해를주게될수도있다. 따라서, 에서는이를방지하고자 의실행 Process 들을 root 권한이아닌다른권한으로실행할수있게하였다. 그러나이러한실행권한의변환은 root 만이가능하기때문에이를설정하기위해서는반드시 root 로작업을하여야한다. 또한, 자신이설정하고자하는 user 와 group 이시스템에설정되어있어야한다. 이에대한사항은자신이운영하는운영체제의 Manual 을참조하기바란다. User = literal 설정된 User 의권한으로 는요구를수행하게된다. Client 요구실행을위해따로 User 이름을설정하는것을권장한다. 꼭필요하지않다면 root 권한설정을피하도록한다. 이항목은 NT OS 에서는지원하지않으므로 Unix 계열의 OS 에서만적용이가능하다. Group = literal 설정된 Group 의권한으로 는요구를수행하게된다. Client 요구실행을위해따로 Group 이름을설정하는것을권장한다. 꼭필요하지않다면 root 권한설정을피하도록한다. 이항목은 NT OS 에서는지원하지않으므로 Unix 계열의 OS 에서만적용이가능하다 Admin Admi n = literal 관리자의정보를나타낸다. 여기에는관리자에게연락할수있는 E- mail 주소를설정할수있다. 53
56 관리자안내서 HostName HostName = literal 이항목을설정하면 Http Response Header 의 host name Field 에기록을남겨준다. 가설치된 machine 의 Domain name 을 과같이넣어주면된다 JSVPORT JSVPort = numeric (Default Port: 9999) 와 Java Servlet 수행 Server 간의연결 Port 번호이다 CheckIntval CheckIntval = numeric (Default Number: 30 second) 에서접속한 Client 가살았나죽었나를확인할필요가있을때설정하는항목이다. 항목시간간격을설정함으로써 는 Client 의생존여부를주어진시간간격마다확인하고죽었을경우 쪽에서접속을끊는다 CacheSize CacheSize = numeric (Default Size: 128 Kbyt e) 는 Server 내부 Caching 기능을지원한다. 따라서많은 Web Application 이용이하게처리되어질수있다. 예를들어세션정보를관리해야하는경우기존의방식처럼쿠키를쓰지않고 가내부적으로제공하고있는 Cache 에정보를저장함으로써더편리하고효율적인작업을수행할수있다. 이러한내부 Cache 의사이즈를필요에따라조정할수있다. 여기서는 Cache 의한엔트리의크기로서기본단위는 Kbyte 이다 CacheEntry CacheEntry = numeric (Default Number: 128) Cache 의총 Hashing Key 엔트리개수를설정한다. 에서는 Hashing 방식을이용하기때문에이의값에따라서 Cache 기능의성능이영향을받게된다. 만약이값이적게설정되면 Hashing Key 값이적게되어 Key 는쉽게찾지만, 각 Key 에서의값을찾는문제가발생하고 Key 값이많게되면다양한 Key 에대한값이나오지만각 Entry 가적게되어쉽게찾을수있다. 의기본설정값은 128 이다. 이값을변경하여도큰영향은없지만가급적 128 개의 Hashing 값을권장하는바이다. 54
57 관리자안내서 KeepAliveMax KeepAliveMax = numeric (Default Number : 9999) 보통은하나의 Client 가한개이상의요구를연속적으로 Server 에요청하는경우가많다. 이러한경우매요구마다연결을다시맺어야한다면비효율적일것이다. 따라서일정개수의요구는처음커넥션을유지한상태로 Service 를하고커넥션을끊도록한다. 커넥션을끊기전에들어주는요구의개수를 KeepAliveMax 에서지정한다 KeepAliveTimeout KeepAliveTimeout = numeric (Default Number : 60) 하나의 Client 가불필요하게커넥션을오래잡고있는경우를막기위해서요구간, 시간간격이일정시간이상이되면커넥션을끊을수있도록설정할수있다. 이러한요구간시간간격은 KeepAliveTimeout 값으로설정한다. Default 로설정되는값은 60 이며단위는 second 이다 Timeout Timeout = numeric (Default Number : 300) 사용자가접속을하여 Data 를내려받거나, 사용자의요구를내려받는시간을지정하는것이가능하다. 이때이 Timeout Field 를이용하게되는데, 이 Field 를통해서사용자의최대접속시간을지정할수있다. 이는사용자와맺은연결이문제가생겨계속해서의미없는 Data 전송이발생할때이를방지하기위해서이용한다. Default 로설정되는값은 300 이며단위는 second 이다 UserDir UserDir = literal 를통해여러사용자를동시에서비스하려는경우필요하다. 이 때 들어가는 값은 각 사용자의 디렉토리의 이름이다. 이를 설정하면 는 각 사용자의 디렉토리를 찾아서 서비스를 시작한다 AppDir AppDir = literal 55
58 관리자안내서 를통해응용프로그램을바로호출하는경우설정이필요하다. 응용프로그램의실행파일이존재하는디렉토리의경로명을설정한다. 경로명은절대경로와 WEBTOBDIR 을기준으로한상대경로를사용할수있다 기본 Log 디렉토리설정 에서는기본적으로 Log 정보를남기기위하여반드시설정하여야하는디렉토리들이존재한다. 이는 에장애가발생하거나혹은 로특정 Service 를하였을때문제가생기는경우, 이를처리하기위하여이에대한기록을남기는것이다. 이는환경파일에서따로설정하지않아도기본적으로 WEBTOBDIR 로설정된디렉토리밑에 log 디렉토리에만들어지게되는데, 주의할점은 Webto B 의 Booting 전에반드시이에대한 Directory 가실제로존재하는지를확인하여야한다는것이다. 만약디렉토리가없다면 booting 시에이를찾다가파일을찾지못한다는에러를리턴하면서 booting 이되지않는다. 그러므로어떤오류로인하여 log Directory 가만들어지지않았다면반드시 Log 디렉토리를먼저만들어주고 를실행하여야한다. 반드시설정하여야하는디렉토리에는트랜젝션관련로그를기록하는디렉토리 (default : (WEBTOBDIR)/log/txlog) 와시스템관련로그를기록하는디렉토리 (default : (WEBTOBDIR)/log/syslog) 가있는데이들디렉토리들은 Install script 를이용하여 를설치하였다면 default 경로로자동으로생성된다. 이경로는사용자가다시재정의하여사용할수있는데그방법은아래설명하는 SysLogDir 이라는항목을설정하면된다. SysLogDir = literal (Default Path : (WEBTOBDIR)/log/syslog ) 시스템메시지가기록될 Directory 의경로명을설정한다. 경로명은절대경로와 WEBTOBDIR 을기준으로한상대경로를사용할수있다. 시스템메시지란 WSM, HTL, HTH 등 기동의핵심 Process 들이발생한메시지들과시스템내부적으로발생한메시지들을일컫는다. 이항목은오직 SysLogDir 를재정의하여사용하기위한것으로, 이항목을설정하지않는경우에는 Default Path 에 Log 가남는다. Default Path 를수정하여사용할경우주의를요한다. UsrLogDir = literal (Default Path : (WEBTOBDIR)/log/usrlog ) 56
59 관리자안내서 사용자메시지가기록될 Directory 의경로명을설정한다. 경로명은절대경로와 WEBTOBDIR 을기준으로한상대경로를사용할수있다 IndexName IndexName = literal (Default : index.html) Client 가특정파일이름을지정하지않고 Service Directory 에요구를보낼때기본적으로 Service 되는파일이름을설정한다. 따로설정하지않으면 index.html 이설정된다 Options Options = literal Client 가특정파일이름을지정하지않고 Service Directory 에요구를보낼때의동작을지정한다. 보통사용자가특정 URI 를보내고디렉토리이름만요구하였다면사용자에게 Directory 의내용을보여주는것이가능하다. 물론원하지않는다면보여주지않을수있다. 기본적인설정은보여주지않는것으로되어있다. 이때 + 나 Option 들을이용하는데, 만약디렉토리정보를보여주길원한다면 +Index 와같이설정하면된다. 이외에도그 Node 에서 CGI 를쓰고싶지않은경우 CGI 와같이설정하면 CGI 가수행되지않게된다. 즉 + 나 Option 을통해서많은 Service 들혹은기능들의수행여부를결정할수있다는것이다. 이에이부분에서설정가능한 Service 들과기능들은다음과같다. 만약 ALL 을기입하면모든기능에대한설정을하는것이다. 즉, - ALL 은모든기능을이용하지않겠다는것이고, +ALL 은모든기능을이용하겠다는것이다. Service: HTML, CGI, SSI, PHP, JSV 기능 : INDEX, INCLUDE Method Method = literal Client 가보내는 Request Method 에대한정의를할수있다. 이때기본적으로 GET, POST, HEAD 등이있어이를기본적으로지원하고만약이들중특정 Method 를쓰고싶지않은경우 Option 을이용하여제거할수있다. 57
60 관리자안내서 Listen Listen = literal 가 Booting 될때, 원하는 IP Address 에서연결을맺도록할수있다. 즉, 여러개의 IP Address 를가진 Server 에서자신이원하는 IP Address 에서만 Service 를원하는경우, 이값을정할수있다. 이때여러개를복수로설정하는것도가능하다 DirIndex DirIndex = literal 뒤의 DIRINDEX 절에서설정하는디렉토리인덱스의이름을적어준다 LanguagePrio LanguagePrio = literal 접속 Client 가사용언어를지정하지않았을경우 Server 쪽에서지정된언어순서대로 Multiview request 등의처리가이루어지도록한다 Logging Logging = literal 뒤의 Logging 절에서설정하는 Logging Name 을써준다. 이이름을가지고이 Node 에서그에해당하는 Log 를남기게되는것이다 NodeType NodeTyp e = string 는 Node 단위로 Server 에특정한역할을부여할수있다. 예를들어하나의 Node 를프락시 Server(Proxy Server) 로쓰고싶다면 NodeType 에서 Proxy 로설정하면된다 ErrorLog ErrorLog = literal 오류발생시설정하는 Logging 정보이름을써준다. 이이름또한뒤의 Logging 절에서설정하는 Logging Name 을써준다 EnvFile EnvFile = string 에서특정정보를읽어들일필요가있는경우이용된다. 즉어떤파일에변수와변수에대한정보를기록한후 기동시에 58
61 관리자안내서 이정보를읽어야할때이 EnvFile 에등록된파일을읽어들인다. 즉 가기동시에이파일을읽어서그정보를가지고있게된다 SSLFLAG SSLFLAG = string (Y N) (default : N) 에서 SSL 을이용할때반드시지정하여야하는항목이다. 이 SSLFLAG 가 Y 상태이면, 그 Node 에서 SSL 을이용하겠다는것이고, N 상태이면, 이용하지않는다는것이다. 기본설정은 SSL 을이용하지않는것으로되어있다 SSLNAME SSLNAME = string 에서 SSL 을이용하는경우, 이에대한설정을나타내는것이다. 이는반드시 SSLFLAG 가 on 이된상태에서적용되어야하며 off 나설정이되지않은상황에서는아무런의미가없다. 이때지정되는이름은반드시 SSL 절에서선언이되어있어야한다. 7.3 SVRGROUP 절의설정 Server Process 의논리적인연관성에따라이들을그룹으로관리하기위한절이다. Node 이름, Server 의종류, 호스트의이름등을등록한다. NODE 절이나 VHOST 절에서정의한내용이 Server Group 에따라새롭게정의할수있으며데이터베이스를사용하는경우데이터베이스접근과관련된정보들이정의될수있다. SVRGROUP 절에는기본적으로다음과같은내용이정의될수있다 : SVRGROUP Name NODENAME, SVRTYPE [,VhostName][,Cousin][,Backup][,Load] [,AppDir][,UsrLogDir][,AuthentName][,DBName] [,OpenInfo][,CloseInfo][,MinTms][,MaxTms] [,LOGGING][,EnvFile] 필수항목 Server Group name Server Group name = string 59
62 관리자안내서 크기 : 31 자이하 Server Group 에대한논리적인이름으로서 SVRGROUP 절내에서유일한값이어야한다. SVRGROUP 절이름은 SERVER 절의 SVGNAME 항목에서사용된다 NODENAME NODENAME = string Server Group 이존재하는 Node 를정의한다. 사용되는 NODENAME 은 NODE 절에서정의한 Node 이름이어야하며, Node 이름은유닉스명령어 uname -n 을이용해서확인해볼수있다 SVRTYPE SVRTYPE = string Server Group 의속성, 즉어떠한 Service 를제공하는가를명시한다. Server 타입으로 HTML, CGI, JSV, WEBSTD, TPSTD, SSI 등을명시할수있다. 7.4 SERVER 절의설정 는등록된서비스만을처리하기때문에새로운 Server 프로그램이추가되는경우 Server 절의환경파일에반드시등록하여야한다. 가제공하는대부분의서비스는 SERVER 절에서등록이가능하며비즈니스로직을 를통해직접호출하는경우에만 SERVICE 절의등록이필요하다. 각각의 Server 는위의 Server Group 절에정의된 Service 종류에따라 HTML, CGI, JSV 등으로구분되며 Server Group 이름과 Process 의가능한개수등이같이등록된다. SERVER 절에는다음과같은내용이정의된다. 각 Server Process 가속하는 Server Group. Server Process 의최소개수와최대개수. SERVER 절의기본형식은다음과같다 : ServerName SVGNAME=server-group-name, [,Clopt][,SeqNo][,MinProc][,MaxProc][,UsrLogDir] [,UriDir][,MaxQCount][,ASQCount][,MaxRestart] 60
63 관리자안내서 [,SvrCPC][,SVRTYPE] 필수항목 Server Name Server Name = string 크기 : 31 자이하 Server 의실행파일이름으로서일반적으로 Server 이름은유일 (Unique) 해야한다. 즉하나의 Server 이름은 SERVER 절에단한번만정의되어야한다. 같은이름을중복하여이용하면환경파일의 Compile 시에 Error 가발생하게된다 SVGNAME SVGNAME = string Server 가속해있는 Server Group 을정의한다. 여기에사용되는값은반드시 SVRGROUP 절에서정의된 Server Group 이름이어야한다. Server 와 SVRGROUP 절의연결을통해서 Server 가어떤 Node 에서동작할것인지, 어떤리소스매니저( 데이터베이스 ) 를사용하는지알수있으며. 해당리소스매니저를열때필요한파라미터를넘겨줄수있다. 61
64 관리자안내서 8 환경의고급설정 8.1 동적컨텐츠를위한 설정 소개 본장에서는앞에서살펴본기본적인설정외에특수한작업을하기위한설정에대하여알아볼것이다. 이제 Web Server 가설치되었으므로 html 을이용한서비스는가능하게되었다. 즉, 의 Document Directory 에 html 문서를두면브라우저로호출하여열람이가능하다. 이제좀더고급스러운서비스를위한동적서비스의설정을알아볼차례다. 또한가상호스트를이용한다중서버서비스의구축방법도알아보자. 본장을통해 CGI, SSI, PHP 를사용하기위한설정과간단한예제를통해그설치예를보여주고자한다. 웹을풍요롭게하는이러한 Tool 들의자세한작성법은본매뉴얼에서다룰내용은아니지만, 각각의특징을안다면웹의설계에도움이된다. 어떤서비스를무엇을사용해구현하는것이효과적일지안다면, 이후그에대한전문지식은다른서적을참고하면될것이다. 이해를돕기위해각각에대한기본적인설명과예제를담았다 CGI 설정 CGI 의이용 CGI 는 Common Gateway Interface 의약자이다. WWW 에서는 HTML 에의해여러가지정보를처리한다. HTML 은홈페이지를만드는기초가되는언어이다. 하지만 HTML 만으로모든정보를다처리할수없다. 단방향식의정보제공역할만할따름이다. 이것을보충하기위해서여러가지방법이마련되어왔다. 그중하나가외부프로그램을수행하여그것의결과를 HTML 형태로보여주는방식이다. 이때이외부프로그램과 Web Server 간의연결역할을하는것이 CGI 이다. 또는넓은의미로 CGI 를수행하는외부프로그램을포함하여말하기도한다. 예를들어, 홈페이지에방문객들의 comment 를받을 62
65 관리자안내서 수있는방명록을만들려고할때, 웹에서구현하는 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 와같은방식으로처리하기때문에 CGI 수행에는전혀지장이없다. CGI 를제작하는방법은매우다양하고, 여러가지방법이있으므로본서에서깊은내용을언급하지는않을것이다. CGI 프로그램을제작하는것은시중에책으로많이나와있고, 또한, 온라인상에서도많은자료를구할수있다 CGI 설정 CGI 사용을위해 *SVRGROUP 절에다음과같이추가한다. 이는차후에 SERVER 절에서 Server Group 을표시하는데쓰이게된다. 그리고 SVRTYPE 으로 CGI 를선언하였다. 즉, 이 Server Group 은 CGI 를위한것이라는명시를한것이다. *SVRGROUP cgig NODENAME = "tmaxh4", SVRTYPE = CGI *SERVER 절에는아래와같이 Server 프로세스에대한설정을한다. 즉, 아래와같이 cgi 라명명된 Server Process 가기동되게되는것이다. 그리고 SVGNAME 을통해서 Server Group 을 cgig 로설정한것을볼수있다. 즉, cgi 라명명된현재의 Server Process 는 cgig 라는 Server Group 에종속된다는것을알수있다. 따라서, cgig 가 SVRTYPE 이 CGI 로선언되어있기때문에이 cgi Server 는 CGI Service 를하는것이된다. 63
66 관리자안내서 *SERVER cgi SVGNAME = cgig, MinProc = 4, MaxProc = 10 *URI 절에요청들어오는특정 URI 에대해어느 Server 가처리하는지설정한다. 아래의예제는사용자의요구에서 /cgi-bin/ 이라는 URI 가발견되면 CGI 로간주하여처리한다는것이다. *URI uri1 Uri = "/cgi-bin/", Svrtype = CGI *ALIAS 절에사용자가보낸 URI 를실제로처리하게되는물리적인디렉토리를설정한다. *ALIAS alias1 URI = "/cgi-bin/", RealPath = "/data1/gloria/webtob/cgi-bin/" CGI 설정및사용예 설정은부록 [A. 환경파일작성예 ] 를참조하고사용예는부록 [B. CGI 활용예 ] 를참조한다 SSI 설정 SSI 의이용 SSI 는다이나믹한문서를만드는데있어매우유용하다. 예를들면헤더파일등을더할수도있고마지막수정일 (Last Modified) 을자동으로조절할수있는기능들을문서에포함시킬수도있다. 이것은 CGI 와같이사용할수있으나복잡하지않으며, 프로그래밍또는스크립트의기능같은것은가지고있지않다. SSI 는간단하게나마다이나믹한문서를만들수있는것이다. SSI 는 HTML 문서에 'command' 를집어넣어사용할수있으며, Server 에서는 SSI 문서를읽어들이고, SSI 명령어를찾아보고그에맞는기능을수행한다. 예를들면 Last modification time 을수정하는 SSI 명령어가문서에포함되어있으면서버는파일로부터명령어들을읽어들여명령을수행하여시간을수정한다. SSI 는참고자료를구하는것이쉽지가않다. 대부분 CGI 프로그램작성란에참고로들어가거나, 혹은간단한예제로넘기는경우가대부분이다. 따라서여기에서간단하나마기본적인 SSI 의설정과 64
67 관리자안내서 문법을알아보도록하자. 에서기본설정은 HTML 파일안에 SSI 명령어를포함하고있지않다. 왜냐하면, HTML 파일을매일액세스하는곳에서는이로인하여 html 이오히려느리게작동하기때문이다. SSI 가필요해서사용하기원한다면 환경파일안에 SSI 를위한 Server 를추가로포함시켜주어야한다. 이렇게하는것이성능향상에더유리한구조이다. *SVRGROUP ssig <<http.m>> NODENAME = webmain, SVRTYPE = SSI *SERVER ssi1 SVGNAME = ssig, MinProc = 1, MaxProc = 10 SSI Commands 모든 SSI 명령어는 HTML 문서안에 HTML comments 형식으로저장되어야한다. SSI 사용방법은아래와같다 : <!--#flastmod file="nextel.html" --> 위예에서사용된 flastmod 명령어는수정시간을출력하라는뜻이고 Value 로는 nextel.html 이쓰인다. 명령어전체는 comment <!--와 -- > 로처리되어야한다. 일반적으로, 모든명령어는다음형식을따른다 : <!--#command arg1="value1 arg2="value > 여기서 arg1, arg2 는인수고나머지 value1, value2 는인수의값을나타낸다. flastmod 예에서, 'file' 은인수가되는것이고 'nextel.html' 은값이되는것이다. 흔히명령어는인수이름에따라다르게실행되어질수있다. 예 ) <!--# flastmod virtual="/" --> 서버의홈페이지마지막수정시간을얻을수있다. ( 이것은다른파일명을가지고 Access 될때유용하게사용할수있다.) SSI 명령어가실행될때 'environment variables' 값이설정이된다. 이것은 CGI variables 을포함하고있고 (REMOTE_HOST etc), 65
68 관리자안내서 DOCUMENT_NAME 그리고 LAST_MODIFIED 등을가지고있다. 또다른예로 echo 명령어로도출력할수있다. <!--#echo var="last_modified" --> PHP Configuration PHP 는 Perl 과유사한형태의 Script 로간편성과괜찮은성능으로인하여많이이용되고있다. 속도, 개발편의성, 여러가지확장기능으로볼때기존의펄 (Perl) 보다한수위인언어로 LINUX 나 UNIX 계열뿐만아니라, WIN32 용바이너리파일을제공해 Microsoft 계열의 Web Server 에서도사용이가능하기때문에, 운영체제에독립적인웹프로그램개발이가능한것이큰장점이다. 가장기본적인레벨에서, PHP 는 CGI 프로그램에서할수있는모든것을할수있다. form data 를가져오고, 동적인웹페이지를만들거나, Cookie 를보내고받을수도있다 PHP 의이용 에서 PHP 를이용하기위해서는약간의설치작업이필요하다. 이는 HTML 이나 CGI 를이용하는것과거의유사하기때문에쉽게적용할수있을것이다. 먼저, SVRGROUP 절에 PHP 에관련된 Group 을설정하고이를 Server 절에서다시정의하면된다. 이때, SVRGROUP 에 ScriptLoc 라는항목이추가되는데, 이는 php 의실제실행모듈이있는곳을말한다. 이는보통 cgi-bin/ 디렉토리에추가하는데 에서도이를권장한다. 아래는이에대한간단한예이다 : PHP 모듈이있는곳의경로는 WEBTOBDIR 이하의상대경로위치만적어주면된다. 즉, 아래예에서 ScriptLoc 에설정된모듈경로는절대경로가아니라, 가설치된디렉토리아래에 /cgi-bin/php 가위치한다는의미이다. *SVRGROUP phpg NODENAME = webmain, <<http.m>> ScriptLoc = "/cgi-bin/php", SVRTYPE = PHP *SERVER php SVGNAME = phpg, MinProc = 1, MaxProc = 10 66
69 관리자안내서 위와같이설정을하면 PHP 를사용할수있다. php3 모듈을사용하는경우에는부가적인설정이필요하다. 다른버전과는달리 php3 의경우는, 확장자가.php3 인파일을이용하기위해서이를 EXT 절에추가하여주어야한다. php4 는기본적으로 php 라는확장자를이용하기때문에추가설정을요하지않으나, php3 는확장자가.php3 이기때문에이는 EXT 절에추가해주어야동작한다. 아래예를참조하자. *EXT php3 MimeType = "application/x-httpd-php3", SVRTYPE = PHP PHP 예 PHP 의설치및 에서의설정이정상적인지확인하기위해간단한페이지를요청해보자. $WEBTOBDIR/docs 에 phpinfo.php 를만든다. <??> Phpinfo(); << phpinfo.php >> 브라우저에서다음과같이요청한다. address>:<port>/phpinfo.php 다음과같은화면이출력됨을확인한다. 이화면은설치된 PHP 에대한각종환경정보를나타낸다. 67
70 관리자안내서 그림 8-1. PHP 테스트페이지 8.2 Virtual Hosting 설정 개요 가상호스트는현재 HTTP1.1 을지원하는브라우저에서적용할수있는 W eb Server 의기능으로하나의 Web Server 를이용하여마치여러대의 Web Server 가운영되고있는것과동일한효과를내는것이다. 에서는이가상호스팅기능을제공한다. 간단한예를들어이기능을살펴보자. 68
71 관리자안내서 당신이웹상에서새로운서비스를시작하고, 그서비스는인터넷신문사인 Times 라고가정해보자. 이서비스를하나의 IP 주소와도메인이름, 그리고한대의 Web Server 를이용해서운영할수도있다. 그러나, 당신은하나의 IP 를사용하면서도몇개의도메인이름으로분리하여서비스를제공한다면이용자도알기쉽고관리및차후확장에도용이할것이라는판단하에다음과같은몇개의서비스로분리하고자한다. webtobtimes.com: 메인페이지 so ciety.webtobtimes.com: 사회면기사를다루는섹션 sports.webtobtimes.com: 스포츠기사를다루는섹션 위와같이분리하여 HTML 문서도만들고기타서비스도제공한다. 위의주소를입력하여접근할수도있는것이다. ( 실제로많은신문사사이트를방문해보면위와같은구성으로되어있음을확인할수있다. ) Web Server 에서는위와같은설정을적용하기위해두개의 Virtual Host 를할당하여각각 society 와 sports 에적용해주면된다. 이렇게하면이들서비스는메인페이지와는다른 Web Server 에서운영되는것과같은효과를줄수있으며, 실제 Web Server 내에서도 document 문서의경로및기타모든설정들을분리하여사용할수있다. 이렇게도메인이름을분리하여하나의 IP 로서비스하는방식을 Name Based Virtual Host 라한다. 이와구별되는방식으로는 IP Address Based Virtual Host 가있는데이방식은다른 IP 를사용하므로사실상별개의도메인이라할수있어, 그설정에있어서도다른 IP 만사용하면되고또크게쓰이지않는방식이다. ( 왜냐하면한사이트가다량의 IP 를확보하기는힘들기때문이다. ) 가상호스트의구조를그림으로나타내어보면다음과같다 : 69
72 관리자안내서 Browser Web Server Main webtobtimes.com vhost1 society.webtobtimes.com Internet vhost2 sport.webtobtimes.com 그림 8-2. 가상호스트의구조위와같이하나의 IP 와한대의 Web Server 를이용해각도메인의서비스를할수있으며, 동일 IP 에다른이름으로호출된서비스를 We btob 의가상호스트가구분하여서비스하게된다 사용 예 아래의예는위의 Web Times 란가상의사이트를바탕으로구축한가상호스트의예제이다. <<http.m>> *VHOST vhost1 DOCROO T = "/usr/local/webtob/docs/vhost1_ docs", NODENAME = webtob1, HOSTNAME = "society.webtobtimes.com", PORT = "8090", Us er = " user1", Group = "group1", UsrLogDir = /usr/local/webtob/vhost1/log/usrlog", IconDir = /usr/local/webtob/vhost1/icons", UserDir = /usr/local/webtob/vhost1", EnvFile = vhost1_env, IndexName = "v1_index1.html", LOGGING = "v1_log1", 70
73 관리자안내서 ERRORLOG = "v1_log2" vhost2 DOCROOT = "/usr/local/webtob/docs/vhost2_docs", NODENAME = webtob1, HOSTNAME = "sports.webtobtimes.com", PORT = "8092", User = "user2", Group = "group2", UsrLogDir = /usr/local/webtob/vhost2/log/usrlog, IconDir = /usr/loccal/webtob/vhost2/icons", UserDir = /usr/loccal/webtob/vhost2", EnvFile = vhost2_env, IndexName = "v2_index.html", LOGGING = "v2_log1", ERRORLOG = "v2_log2" 위와같이 VHOST 가능하다. 절을적절히이용해주면효과적인웹운영이 Mass Virtual Host 대량의가상호스트를설정함에있어각각의설정이비슷한경우일일이설정하지않고보다간편하게이용할수있는설정방법이있다 DOCROOT 설정 DOCROOT = <literal> (Default : $WEBTOBDIR/docs/ ) 대량의가상호스트에있어서 DOCROOT 설정만다른경우이용할수있는기능으로, 각가상호스트의 DOCROOT 는해당서버의도메인네임값을디렉토리설정패턴에준해치환함으로서결정한다. 예를들어아래와같은설정을한경우, 클라이언트에서 로접속을하였다면이가상호스트의 DOCROOT 는 /webtob/vhost/tmax1/ 이된다. 마찬가지로 로접속하였다면 DOCROOT는 /webtob/vhost/tmax2/ 가된다. *VHOST NodeName = tmax, HostName = tmax1.tmax.co.kr HostAlias = tmax2.tmax.co.kr, tmax3.tmax.co.kr PORT = 80, 71
74 관리자안내서 DOCROOT = /webtob/vhost/% RealPath 설정 RealPath = <literal> (Default : mandatory) 여러개의가상호스트를사용함에있어 *ALIAS 절의 RealPath 를설정할때이용할수있는기능이다. 서버의도메인네임값을디렉토리설정패턴에준해치환함으로써 RealPath 경로를설정할수있다. 예를들어아래와같이설정한경우, 클라이언트에서 로접속하였다면이 ALIAS의 RealPath는 /webtob/vhost/tmax1/cgi-bin/ 이된다. 마찬가지로 로접속하였다면 RealPath는 /webtob/vhost/tmax2/cgi-bin/ 이된다. *ALIAS alias1 URI = /cgi-bin, RealPath = /webtob/vhost/%1/cgi-bin/ 디렉토리설정패턴에사용되는 %- 지시자 지시자 내 용 %p 가상호스트의포트번호로치환한다. %n hostname 이나 IP 주소의 n 번째요소로치환한다. 만약 n 을 0 으로하면전체문자열이사용된다. 마이너스표시 (-) 가앞에오면 hostname 이나 IP 주소의끝에서부터센다. 플러스표시 (+) 가뒤에오면 hostname 이나 IP 주소의나머지가사용된다. %n.m n 번째요소의 m 번째문자로치환된다. 위와같이 (-) 표시나 (+) 표시가붙을수있다. %% 단일퍼센트 (%) 표시로치환된다. 72
75 관리자안내서 8.3 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 를해오던많은사용자들은부담도덜고, 성능도얻는획기적인결과를얻을수있는것이다 WBAPI 의개념 CGI 방식은위에서언급한대로사용자가요구할때마다매순간새로운프로그램이 Fork 되고처리가끝나는순간 exit 되는일을반복한다. 이는시스템에서볼때굉장히큰부담이아닐수있다. 다른처리를해야할시간에새로운 Process 를 Memory 에 Load 하고 Scheduling 을해야하는등의많은작업을해야하기때문이다. 73
76 관리자안내서 아래그림은아파치나타낸다. Web Server 에서의 CGI 를사용하는모습을 그림 8-3. Apache 에서의 CGI 동작방식위그림을보면매순간 CGI 가 fork 되는로드가늘생길수밖에없다는것을알수있다. 에서제공하는 WBAPI 는우선 CGI 의이런점을개선하였다. 즉, 사용자가요구를보내는매순간에 Process 를 Fork 하는것이아니라, Web Server 가 Boot Up 되는시점에이러한프로그램들을미리 Fork 하여 Memory 에올려놓는것이다. 또한, 사용자의요구에대한처리가끝난시점에서도 Exit 되는것이아니라, 계속 Memory 에상주하여다음요구를기다리는것이다. 결국매순간 Process 가 Fork 되고 Exit 되는부담이줄어들게되는것이다. 또한단순히이러한부담을줄이는외에도이 WBAPI 로설계된프로그램의관리를 가하게된다. 따라서만약사용자의부주의나설계오류로프로그램이죽거나문제가생겼을때, 즉각새로운프로그램을다시실행할수있게하는등의기능이추가되었다. 또한이러한프로그램들의수를조정할수있게하여만약특정프로그램에대한요구가많다고판단되면이를미리많이실행시켜놓게할수도있다. 의 WBAPI 의호출을그림으로나타내면아래와같다. 74
77 관리자안내서 WBAPI Mechanism 그림 8-4. 에서의 WBAPI 그리고또하나주의할점은앞에서도언급했지만 WBAPI 는 main() 등으로시작하는일반함수와는다르다는것이다. 이는 WBAPI 로작성한프로그램들이독립된 Process 로발생하기는하지만, 실제 의내부와연결된 Process 로동작하기때문이다. 따라서함수의시작이일반적인 main() 이아닌 Service Name 이라는것으로시작하게된다. 따라서함수의시작되는이름이반드시 Service Name 이되어야하고, 이는 의환경파일에등록이되어있어야한다. 이를자세히알기위해서는이후에설명될 참조하기바란다. WBAPI 를위한설정절을 WBAPI 의종류 WBAPI 는각각 INIT/DONE 계열, ALLOC 계열, GET 계열, PUT/ SET 계열, SEND 계열, COOKIE 계열, SESSION 계열, WBTX 계열, ETC 계열로구성되어있다. 이들은각각의기능별로나누어진것으로각각의 API 에대한간단한설명은부록 [C.1 WBAPI List] 를참조하며, 더자세한설명은매뉴얼 [ WBAPI 레퍼런스 ] 를참조한다. 75
78 관리자안내서 WBAPI 의이용과예 WBAPI 는차후에 Multi thread 기능을제공할예정이다. 이를위하여각각의함수마다특정자료구조 (Data Structure) 를선언하는것이필요하다. 처음 WBAPI 프로그램을작성하게되면 Service Name 을등록하게되는데이때 WBSVCINFO 라는구조를선언하게되어있다. 이를 WBAP I 내부의각각의함수의앞에반드시적어주어야한다. 따라서한 WBAPI 프로그램내부의모든 WBAPI 함수는 Service Name 시에선언된구조를함수의첫번째인자로가지고있어야한다. WBAPI 를이용하여기존의 CGI 프로그램을변환할때어떤방식으로이루어지는지부록 [C.2 WBAPI 를이용한 CGI 의변환 ] 을참조한다 WBAPI 를위한설정 에서 WBAPI 를쓰기위해서는프로그램의작업과함께 의환경설정이필요하다. 즉, 에 WBAPI 를이용하여프로그램을개발하였고, 이는이렇게이용하겠다는식의등록을한다는것이다. 의환경파일을예로들어설명하겠다. 앞의 의환경파일을다룬절에서우리는 DOMAIN, NODE, SVRGROUP, SERVER 절등이있다는것을알수있었다. 이에대한간단한예를들어보이면다음과같다. *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 = "8080", JSVPORT = 9099 *SVRGROUP htmlg cgig NODENAME = webmain, SVRTYPE = HTML NODENAME = webmain, SVRTYPE = CGI jsvg NODENAME = webmain, SVRTYPE = JSV 76
79 관리자안내서 ssig wbapg NODENAME = webmain, SVRTYPE = SSI NODENAME = webmain, SVRTYPE = WEBSTD *SERVER html SVGNAME = htmlg, MinProc = 5, MaxProc = 10 cgi SVGNAME = cgig, MinProc = 1, MaxProc = 10 ssi SVGNAME = ssig, MinProc = 1, MaxProc =2 jsv1 SVGNAME = jsvg, MinProc = 1, MAXProc = 10 webaps SVGNAME = wbapg, MinProc = 2, MAXProc = 5 *SERVICE write_board SVRN AME = webaps *URI uri1 Uri = /svct/, SVRTYPE = WEBSTD, SvrName = webaps *ALIAS alias1 URI = /svct/, RealPath = /usr/local/webtob/svct/ 위의설정파일에서진한색으로처리된부분이실제 WBAPI 를쓰기위한기본설정이다. SVRGROUP 절에다음과 같은항목이있음을알수있다. wbapg NODENAME = webmain, SVRTYPE = WEBSTD 이는 webmain 라는이름을 Host Machine 에 wbapg 라는 Server Group 을설정하고, 이것이 WBAPI 를쓰기위한 WEBSTD 라는 Server Type 을가짐을나타낸것이다. 그리고이후 SERVER 절에다음과같은항목이있음을알수있다. webaps SVGNAME = wbapg, MinProc = 2, MAXProc = 5 이는앞의 SVRGROUP 절에설정된 wbapg 에있는것이 webaps 라는 SERVER 로정의되어있음을나타낸다. 여기까지가항상설정되어야할기본이다. 이는대부분의환경에서 Host Machine 의이름만다를뿐별차이가없다. 그러나실제 Service 를응용하기위해서는각 Service 에대한설정이추가로필요하게된다. 이는다음과같다. 77
80 관리자안내서 *SERVICE write_board SVRNAME = webaps 위의 SERVICE 절은 WBAPI 로개발된프로그램의등록을하는것이다. 이는실제프로그램의함수명과도같은데, 위의 WBAPI 로개발된 프로그램이일반 C Style 과달리 write_board() 로시작하는것과같다. 즉, 이함수시작이름이 Service 의이름이되는것이다. 따라서 등록시이이름으로등록을한다. 이절은 SERVER 절다음에 추가하면된다. *URI uri1 Uri = /svct/, SVRTYPE = WEBSTD, SvrName = webaps WBAPI 사용시에는 URI 절에서 SvrName 항목을반드시설정해주어야한다는것을알아두자. 즉, URI 절의선택항목인 SvrName 은 WBAPI 의사용시에는반드시명시해주어야하는필수항목이된다. 이항목의값은 SERVER 절에있는 WBAPI 담당서버중하나의이름이된다 WBAPI 프로그램의 Service Table 생성 앞에서설명된항목이설정된환경파일을가지고또하나의작업을수행하여야한다. 보통 를기동하기위해서는 wscfl 을통해서컴파일만하면되었으나이 WBAPI 를쓰기위해서는 Service Table 을만들어야한다. 이는앞에서말한설정을하고 bin/ 디렉토리안에있는 wsgst 라는함수를이용하여생성해주기만하면된다. wsgst 를수행하면 는 WBAPI 를쓰기위한 _ svctab.c 라는확장자를가진 Service Table 을지정된 Path 에만들어낼것이다. Service Table 을만드는작업은 wsgst 명령에의해이루어진다. $ wsgst [ -f config binary file name ] 옵션 -f : Service Table 을만들때참조하는아닌경우이이름을지정한다. 환경파일이 wsconfig 가 Ex) $ wsgst ( Default 로 wsconfig 를참조한다 ) $ wsgst -f wsconfig2 ( wscfl -o 를사용한경우 ) 78
81 관리자안내서 이로써 WBAPI 를사용하기위한 모든준비가끝났다. 이제 WBAPI 로 개발된프로그램을 Compile 하여실행파일을만들고이를위와같은 형식으로 등록하여 주면 된다. 이에 대한 항목은 다음 절에서 설명한다 WBAPI 프로그램의 Compile WBAPI 로개발된프로그램은 C 에서기본적으로제공되는 Library 외에도 에서제공하는특수한 Library 및앞에서설명한 Service Table 파일을이용하여야하기때문에이를컴파일시연결해주어야한다. 아래는 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 SDLCFILE = test.v APOBJS= ap.o WEBTOB_INCDIR = $(WEBTOBDIR)/usrinc WEBTOB_BINDIR = $(WEBTOBDIR)/bin 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) 79
82 관리자안내서 svct: cp $(WEBTOBDIR)/svct/$(TARGET)_svctab.c. $(CC) $(CFLAGS) -I$(WEBTOB_INCDIR) c $(TARGET)_svctab.c 가제공하는 library 를 shared library 와함께제공해야하기때문에 LD_LIBRARY_PATH 에 $WEBTOBDIR/lib 추가로필요하다. #.profile ## Using Tmax Shared Library ## LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ W2B_JEUSHOME/lib/system:$WEBTO BDIR/lib; export LD_LIBRARY_PATH WBAPI 의시작및응용 모든작업이순조롭게끝나면 가기동시에이 WBAPI 로개발된프로그램을같이실행시켜프로세스형태로메모리에 Load 함을볼수있을것이다. 이외에도추가의 API 들이프로그램의편이성및확장성을위해제공한다. 이는 Application Development Guide 에서제공될것이다. WBAPI 로다양한프로그램을개발하고싶다면 Application Development Guide 를참고하는것이많은도움이될것이다. 또한 CGI 를변환하는것은 WBAPI 의기능중의일부임을꼭기억하기바란다. 기존 CGI 의변환외에도 C Style 에능숙한사람들은새로운 Application 을개발할때이 WBAPI 를이용하면개발의편이성및성능향상에도많은도움이될것이다. 티맥스소프트에서는지속적으로 WBAPI 를제공하고또향상할것이므로차후의확장성이나지원등에서무리가없을것이다. 그리고이 WBAPI 를통해서기존 TP-Monitor 에서제공한 Service 기능들을이용하는것도가능하다. 이는다음장에서설명할것이다. 8.4 WBAPI 를이용한 TP-Serv ice 호출설정 는현재 Web 상에서바로 TP-Monitor 를사용할수있는최초의 Web Server 이며, 내에 TP-Monitor 의관리기능들이모두포함되어있어매우효율적으로동작한다. 80
83 관리자안내서 TP-Service 기능의필요성 Browser 에서 로 TP service 를호출할때 ( 만약 /webtob 디렉토리내에 TP-Monitor Service 가존재한다고설정하고, 이 TP-Service 를 Call 하기위한 service1 이라는 WBAPI service 가존재한다고할때 ) browser 에서아래와같은형태의 request 를보내면된다. Ex] Browser Browser Browser Web Server Forward TP-Monitor Service call TP- Monitor Service WebAPI Service call 그림 8-5. TP-Service 요청구조 즉, 사용자 (Browser 를이용하는사람들 ) 에겐아주간편하고편리하다. 하지만 Service 를제공하는사람들은 Web 상에서의 Transaction 을제공하기위하여약간의절차를밟아주어야한다. 우리는앞에서 WBAPI 를이용하는방법에대해서알아보았다. Web 상에서 Transaction 을제공하기위해서우리는이 WBAPI 를다시응용할수있다. 에서 TP-Service 기능을제공하는이유는모두 String 으로만이루어진 HTTP Request 에기인한것이다. 기존의 Tmax 등의 TP- Monitor 의 Service 를개발하는사람들은거의표준으로자리잡은자료구조형태를이용할것이다. 따라서사용자들도이러한자료구조에맞는 Request 를보내야만한다. 하지만 Web 상에서보내오는 Request 는전혀이러한구조와상관관계가없다. 오로지 HTTP Protocol 에 String 형태로자료를보낼 81
84 관리자안내서 뿐이다. 따라서기존 TP-Monitor 의 Service 프로그램들은이러한자료구조를이해할수가없다. 그렇다고사용자가이용하는 Browser 의구조를바꿀수도없으므로사용자가보내온 Request 를기존 TP-Monitor 가이해할수있는형태로바꾸어주는작업이필요하다. 바로이러한작업을 WBAPI 를이용한프로그램으로하는것이다. 물론기존의 CGI 등으로도충분히가능하지만 Overhead 가너무큰 CGI 를이용하는것은 TP-Monitor 의기능을전혀살릴수없기때문에 WBAPI 를제안하는것이다. WBAPI 를이용하여 TP-Monitor 의 Service 들과연동하는것은기존 TP-Monitor 를 Web 으로확장하려는사람들이나, CGI 나 Servlet 등으로비슷한기능을개발했으나성능이나기능에불만인사람들에게정말중요한일이될것이다 TP-Monitor Service 개념 TP-Monitor 의개념이대두된배경은네트워크의발달로컴퓨터환경이 C/S 환경으로분산됨에따라기업정보시스템은다양한이기종컴퓨터환경에서분산되어운용되어개발자에게는개발생산성향상을위해분산투명성을, 시스템관리자에게는이질적인환경에대한통합성과시스템안정성을제공하기위해새로운개념의미들웨어가필요했기때문이다. TP-Monitor 는 transaction application programmer 가 transaction 의 ACID 특성을쉽게구현할수있도록도움을주는프로그램으로서, 시스템자원의할당을관리하는 interface 와 procedure 들로이루어지며 transaction scheduling, queue 관리, 고장허용, 보완및정상종료되지못한 transaction 의회복기능등을지원한다. 우리는이를온라인환경에서도적용하고자 TP-Monitor Service 개념을 도입하였다. 온라인상에서의 transaction 업무를수행가능하게한다는 것은 공유하는 DB 에접근하여원하는 일, 즉데이터접속및 업데이트를 거의 동시에 처리해 주는 프로그램의 수행한다는 의미이다 TP-Monitor Service 의버퍼유형 서로다른하드웨어, 서로다른운영체제간의통신은데이터값이변할수있다. 이것은하드웨어, 운영체제마다데이터유형의 82
85 관리자안내서 길이 ( 바이트수 ) 가다르고, 메모리할당방식이다르기때문이다. 이와같이통신상의문제점을해결하기위해서, 대부분이기종간통신에서는데이터를문자형으로바꾼다. 문자형으로변환하면네트웍부하가증가되고많은시간이소요된다. Webtob 에서는 TP-Monitor 를이용함으로써네트웍부하의감소와개발자에게개발의용이성을위하여 STRING, CARRAY, X_OCTET, STRUCT, X_ COMMON, X_C_TYPE,FIELD 의버퍼유형을지원한다. STRING 버퍼는널값으로끝나는문자형의데이터통신시사용된다. CARRAY 와 X_OCTET 버퍼는길이가지정된문자형일때사용한다. 데이터를보낼때에는반드시길이를명시해주어야한다. STRUCT 와 X_C_TYPE 버퍼타입은 C 언어의구조체타입의데이터통신에사용한다. 버퍼를할당할때반드시하위유형, 즉구조체이름을제시하여야한다. X_COMMON 버퍼는 char, int and long 로한정된 C 구조체이다. FIELD 버퍼는필드키와데이터를전송할때쓰인다. 데이터의구조로구성되어있다. 버퍼는 의 TP-Monitor Service 에서는버퍼의무결성을보장하기위해표준통신형을사용한다. 통신시표준통신형은데이터타입과메모리할당방식에기준을정하는것이다. 송신하기전에버퍼의데이터를표준통신형으로변환하고수신하기전에역변환한다. 데이터의변환 / 역변환을통해, TP-Monitor Service 이용시이기종간통신시문자형뿐만아니라구조체형의버퍼도사용가능하게된다. 이렇게 TP-Monit or Service 에서표준통신형으로의변환을위해서는 wssdlc 프로그램이사용된다. wssdlc 프로그램을이용하면클라이언트쪽에는표준통신형데이터로의변환을위한정보테이블이, 서버쪽에서는표준통신형으로의변환 / 역변환프로그램이생성된다. 서버쪽의변환/ 역변환프로그램은응용서버프로그램과함께컴파일되어져야한다. 클라이언트쪽의정보테이블은사용된하드웨어와운영시스템을적응시키기위해데이터를변환한다. 결론적으로구조체버퍼를사용할때반드시반드시 wssdlc 명령을통하여클라이언트에는데이터정보테이블을, 서버에는변환 / 역변환프로그램을생성하여야한다. 83
86 관리자안내서 STRING, CARRAY, X_OCTET 버퍼는이기종머신사이의통신이라도문자형통신이이루어진다. 그래서표준버퍼형의변환이필요없다. STRUCT, X_C_TYPE, X_COMMON 는구조체버퍼이므로표준통신형으로변환되어야하고컴파일시추가되어야한다. 아래는구조체버퍼 (STRUCT, X_C_TYPE, X_COMMON) 를사용하는응용프로그램에서컴파일흐름이다. 클라이언트프로그램에서구조체 (STRUCT, X_C_TYPE, X_COMMON) 를사용하였다면 확장자. s 로끝나는구조체파일이필요하다. 여기구조체는 demo.s 이다. 그림 8-6. 구조체파일컴파일구조 위에그림을보면구조체파일을 wssdlc 명령어를이용하여미리컴파일한다. 컴파일하면구조체의각데이터가표준통신형으로변환되는데필요한정보를담은이진 (binary) 형태의파일이생성된다. 클라이언트측면에서는표준통신형데이터로변환하기위한정보테이블을생성하기위해서먼저다음과같은 Command Line 을수행한다. $> wssdlc c i demo.s 84
87 관리자안내서 이때생성되는 demo.sdl 파일은시스템환경파일에 SDLFILE 변수에정의되어야한다. 보통은처음 설치시 Default 값으로시스템환경파일에다음과같이정의된다. SDLFILE=$(WEBTOBDIR)/sample/sdl/webtob.sdl (Korn shell 의경우 ) 따라서 Default 값의 SDLFIL E 값을쓰고싶다면다음과같이 o 옵션을주어서원하는파일명으로확장자가.sdl 인바이너리파일을생성할수있다. $ > wssdlc c i demo.s o webtob.sdl 서버측면에서는표준통신형으로변환 / 역변환프로그램이생성하기위해서다음과같은 Command Line 을수행한다. $>wssdlc i demo.s 이때생성되는 demo_sdl.h, demo_sdl.c 이파일들이실제로응용프로그램실행시표준통신형으로데이터가송 / 수신되는데이용된다. 따라서위의그림에서보듯이응용서버프로그램파일컴파일시 demo_sdl.c 와같이컴파일되도록 Makefile 을수정해주어야한다. 필드버퍼는빈번하게사용하는버퍼형중의하나로 SDL 과마찬가지로필드키파일을생성하고컴파일하는일련의과정을거친다. 특히이것은구조체를배우는것과 MACRO 를사용해데이터를조정하는것보다쉽다. 필드키구조를사용하였다면.f 로끝나는필드정의파일이필요하다. 하나의필드키는필드이름및팔드 id, 필드타입으로구성되어있다. 이파일을 wsfdlc 명령어를이용하여컴파일하면, 이때필드키버퍼파일은 Key Mapping 을이용하여 필드키버퍼이름 _fdl.h 을만들어프로그램실행시사용하게된다. 기존의구조체파일과는달리사용자가원하는필드의값만을조작하고전달할수있어자원의낭비를줄일수있다. 하지만 key Mapping 하는과정에서의오버헤드도있다는점을간과해서는안될것이다. 다음은필드버퍼를이용한응용프로그램의컴파일흐름이다. $> wsfdlc c i demo.f 위의 Command Line 을수정하면 webtob. fdl 바이너리파일이생성된다. 이생성된 webtob.fdl 경로는다음과같이 시스템환경파일에정의되어있어야한다. FDLFILE=$(WEBTOBDIR)/sample/fdl/webtob.fdl(Korn shell 의경우 ) 85
88 관리자안내서 FDL 의경우 SDL 과는다르게위의방식으로클라이언트와서버응용프로그램컴파일측면을고려하지않고한번만컴파일해주면된다. 이렇게 에서 TP-Monitor S ervice 응용프로그램개발자는 에서제공하는다양한버퍼를사용함으로써업무프로그램을보다유연하게개발할수있고, 손쉽게데이터변환을할수있으며, 문자형데이터로변환하는데따르는네트워크부하를감소시키는이득이있다. 버퍼유형에관한좀더자세한사항은 Application Development Guide 에서자세하게설명할것이다 TP-Monitor Service 통신유형 시스템에서 TP-Monitor 와의통신은동기통신, 비동기통신, 대화형통신의 3가지유형이있다. 동기형통신은클라이언트가 tpcall() 이용하여서버에서비스를요청하고, 서버에서그응답이오거나 Ti me-out 이될때까지기다린다. 서비스를요청한후. 클라이언트는블럭킹상태로응답을기다린다. 비동기형통신은클라이언트가 tpacall() 을이용하여서버에서비스를요청을보낸후서버에서응답이올때까지기다리지않고다른일을계속처리할수있다. 응답을받고자할때는 tpgetrply() 를호출하여서버로부터응답을받는다. 서비스를요청한후, 클라이언트는 tpgetrply() 에응답이도착하거나타임아웃될때까지블록킹되어기다린다. 대화형통신은 tpconnect() 로서비스를연결하고 tpsend() 와 tprecv() 를호출하여데이터를주고받는다. 데이터를보내려면 tpconnect() 와 tpsend() 에서플래그값의설정으로만움직이는연결컨트롤을가져야만가능하다. 통신유형에관한좀더자세한사항은 Application Development Guide 에서자세하게설명할것이다. TP-Monitor Service 를하기위한응용프로그램의구성은 WBAPI, TP API 를이용한 Client program 과 Server program 으로구성되어있다. 그 리고여기에별도의 TP-Monitor Service 를 사용하기위한 환경설정 작업이필요하다. 86
89 관리자안내서 TP-Monitor Service 를위해필요한 TP API 들을살펴본다음 WBAPI 를이용하여 TP-Monitor Service 와의연동하는간단한응용프로그램을작성해보도록하겠다 TP API 의사용 TP API 는응용프로그래밍을위하여 에서제공한다. TP API 는 X/Open 의 XATMI 와 TX 표준을따르는함수로이루어져있다. 이함수들은데이터베이스관리, 버퍼관리, 트랜잭션범위설정, 클라이언트와서버간의통신등을제공한다. 이들함수는이기종간통신과데이터변환, 그리고분산트랜잭션처리를가능하게한다. TP API 함수들은서버라이브러리와클라이언트라이브러리로구성된 TP 라이브러리로제공된다. UNIX 환경에서는 libaps.a 가제공되어서버쪽과클라이언트쪽의응용프로그램과같이컴파일하여야한다. TP API 와관련된헤더파일은 atmi.h 와 tx.h 이다. atmi.h 는버퍼관리및통신과관련되어있으며, tx.h 는 Transaction 과 database 부분과관련된헤더파일이다. Client 프로그램과 Server 프로그램작성시필요한함수들에대한간략한리스트는부록 [D.1 TP API LIST] 를참조한다 TP-Monitor Service 호출를위한환경구성 환경파일 (ex:.profile) 에서 TP-Monitor Service 를이용하기위해서는 UNIX 환경파일 (ex:.profile) 의설정이필요하다. Unix 환경파일에는클라이언트가 에연결할때필요한사전정보를설정한다. # Unix Korn shell 인경우.profile 설정 ### Environment ### WEBTOBDIR=/user/local/webtob; export WEBTOBDIR PATH=/user/local/webtob/bin:$PATH:.; export PATH SDLFILE=/user/local/webtob/sdl/demo.s; export SDLFILE ## Using Tmax Shared Library ## LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$WEBTOBDIR/lib; export LD_LIBRARY_PATH 87
90 관리자안내서 # 분산노드로구성된시스템에서중앙집중관리를하기위한 # 포트번호 (wsracd) 사용 WEBTOB_RAC_PORT = 3333; export WEBTOB_RAC_PORT # 버퍼유형이필드키인경우 # FDLFILE=/user/local/webtob/fdl/webtob.fdl; export FDLFILE 환경파일 환경파일에 WBAPI 와 TP API 를이용하여작성한프로그램서비스를어떻게이용하겠다는설정을해야한다. 환경파일은 가사용하는자원들에대한전체시스템구성을설정하는파일이며, 관리자가작성한다. 이파일은 시스템과서버프로그램기동시참조되며, 서비스테이블작성시도참조된다 데이터베이스사용 데이터베이스에연관된서비스를제공하는경우, 환경파일에데이터베이스정보를등록할수있다. 이러한데이터베이스관리를위해서는 TMS(Transaction Management Server) 라는 기능프로세스가필요하다. TMS 프로세스는데이터베이스관리가필요할경우서버그룹별로기동되어각서버그룹의데이터베이스관리와트랜잭션처리를담당하는서버프로세스이다. 데이터베이스정보를등록함으로써, 응용프로그램에서처리하는데이터베이스 Open/Close 등리소스매니저와의연결및해제가 시스템에의해서관리되며, 분산트랜잭션처리도가능하게된다. 데이터베이스환경설정에서서버그룹은중요한의미를갖는다. 서버프로세스들이존재하는노드도서버그룹을형성하는요소가되지만, 동일한노드에존재하는서버프로세스일지라도사용하는데이터베이스의종류에따라서버그룹이구분된다. 한서버그룹내의서버프로세스들은반드시동일한데이터베이스 (DBMS) 를사용해야한다. 만일사용하는데이터베이스(DBMS) 가다르다면, 같은서버그룹이될수없다. 즉, 서버그룹은데이터베이스관리의기본단위가된다. 88
91 관리자안내서 이와같이 의데이터베이스관리기능을제공받기위해서는서버그룹이사용하는데이터베이스의 Open/Close 정보와그서버그룹과관련된 TMS 프로세스에대한정보를설정해준다. 데이터베이스환경설정과관련하여 SVRGROUP 절에항목들은다음과같다 : 정의하는 DBNAME = string ( 크기 : 63 자이내) 사용하는데이터베이스명을기술한다. 따라서이항목에사용되는값은 ORACLE, INFORMIX, SYBASE, UDB 등의 DBMS 이름이다. OPENINFO = string ( 크기 : 255 자이내 ) 서버그룹과관련된데이터베이스정보를등록하는항목이다. 앞에서도언급했듯이, 같은리소스매니저즉, 같은데이터베이스를사용하는경우한서버그룹으로관리함으로써자원 (resource) 의효율을높이고분산트랜잭션처리를가능하게할수있다. OPENINFO 형식은리소스매니저를제공하는벤더, 즉오라클이나인포믹스등데이터베이스의종류에따라다르다. 오라클데이터베이스 (Oracle DBMS) 에서는다음과같다. OPENINFO = Oracle_XA+Acc=P/scott/tiger+SesTm=60 Oracle_XA 는오라클데이터베이스 XA 인터페이스를의미하며, Acc=P/ scott/tiger 의부분은오라클데이터베이스에접근하기위한계정과암호를뜻한다. 인포믹스데이터베이스에서는다음과같다. OPENINFO= Database Name 인포믹스데이터베이스의 OPENINFO 의값은단순히데이터베이스명만을요구하므로오라클과같이복잡하지않다. 그외다른데이터베이스는해당데이터베이스의매뉴얼을참조하여등록하여야한다. CLOSEINFO = literal ( 크기 : 255 자이내 ) CLOSEINFO 항목은리소스매니저가데이터베이스를닫을때필요한정보를지정한다. 보통생략되거나 NULL 로정의된다. 인포믹스 89
92 관리자안내서 데이터베이스에서는반드시널문자열 ( ) 로지정해야하며, 오라클데이터베이스에서는생략해도된다. TMSNAME = string ( 크기 : 15 자이내 ) TMSNAME 은해당서버그룹의데이터베이스관리를담당할 TMS 프로세스이름을정의한다. 데이터베이스의 open 정보 (OPENINFO 항목 ) 를등록한경우에는반드시 TMSNAME 에대한정의가필요하다. TMS 프로세스는데이터베이스와관련된시스템에서해당서버그룹의데이터베이스관리를담당하기위하여반드시필요하다. 그러므로 시스템에서데이터베이스를관리하도록하기위해서는데이터베이스의 Open/Close 정보를등록하고, 서버그룹별로반드시 TMSNAME 을정의하여 TMS 프로세스를기동시켜야한다. TMS 프로세스는데이터베이스와연동하는 XA 로업무 (transaction) 를처리하는트렌잭션매니저이다. 이프로세스는 $WEBTOBDIR/lib 에있는 libtms.a 와 SVRGROUP 절에있는 DBNAME 의데이터베이스라이브러리를연결하여생성된다. MINTMS = numeric (2) ( 크기 : 1 10) 해당서버그룹의 TMS 프로세스기동개수를정의한다. TMS 개수는데이터베이스관리보다는트랜잭션관리에영향을주는요소이다. Default 로는서버그룹당 2 개가기동되는데, 데이터베이스관리만을원할경우한두개의 TMS 로충분히관리가가능하다. MAXTMS = n umeric (3) ( 크기 : 1 10) 동적으로더기동시킬수있는 TMS 프로세스개수를정의한다 환경파일작성예다음은실제 Sample program 에맞는 의환경파일을설정해보도록하겠다. 앞의 의환경파일을다룬절에서우리는 DOMAIN, NODE, SVRGROUP, SERVER 절등이있다는것을알수있었다. 이에대한간단한예를들어보이면다음과같다. *DOMAIN webtob1 *NODE 90
93 관리자안내서 tmaxs1 WEBTOBDIR="/user/local/webtob", SHMKEY = , DOCROOT="/user/local/webtob/docs", APPDIR = "/user/local/webtob/ap", HTH=1, PORT = "6888", LOGGING = "log1", ERRORLOG = "log2", *SVRGROUP htmlg webapg tmaxg NODENAME = "tmaxs1", SVRTYPE = HTML NODENAME = "tmaxs1", SVRTYPE = WEBSTD NODENAME = "tmaxs1", SVRTYPE = TPSTD, DBNAME = ORACLE, OPENINFO = "Oracle_XA+Acc=P/scott/tiger+SesTm=60", TMSNAME = tms_ora *SERVER html SVGNAME = htmlg, MinProc = 1, MaxProc = 2 cli ent SVGNAME = webapg, MinProc = 1, MaxProc = 2 server SVGNAME = tmaxg, MinProc = 1, MaxProc = 2 *SERVICE write_board INSERT SVRNAME = client SVRNAME = server *URI uri1 Uri = "/webapi/", SvrType = WEBSTD *ALIAS alias2 URI = "/webapi/", RealPath = "/user/local/webtob/ap/" 위의설정파일에서진한색으로처리된부분이실제 WBAPI 와 TP API 로작성된 Client program 과 Server program 를쓰기위한기본설정이다. SVRGROUP 절에다음과같은항목이있음을알수있다. webapg tmaxg NODENAME = "tmaxs1", SVRTYPE = WEBSTD NODENAME = "tmaxs1", SVRTYPE = TPSTD, DBNAME = ORACLE, TMSNAME = tms_ora, 91
94 관리자안내서 OPENINFO = "Oracle_XA+Acc=P/scott/tiger+SesTm=60" 이는 tmaxs1 라는이름을 Host Machine 에 webapg 와 tmaxg 라는 Server Group 을설정하고, 이것이 WBAPI 를쓰기위한 WEBSTD 라는 Server Type 과 TP-Monitor Service 를하기위한 TPSTD 라는 Server Type 을가짐을나타낸것이다. 또한앞부분에서데이터베이스연관한서비스의경우설정해주어야할정보들을추가로정의해주었다. TP-Monitor Service 가 XA 모드이면위와같이 Server Group 절에 OPENINFO 필드가정의되어 가모든 DB transaction 을관리하고 2 phases commit 을보장한다. 이경우는 사용자는각각의서버프로세스의 DB 연결에관여할필요가없다. 그러나 XA 모드가아닌경우에는 Server Group 절에 OPENINFO 필드가포함되지않고사용자들이각각 DB 연결을관리해야한다. 이후 SERVER 절에다음과같은항목이있음을알수있다. client SVGNAME = webapg, MinProc = 1, MaxProc = 2 server SVGNAME = tmaxg, MinProc = 1, MaxProc = 2 이는, 앞의 SVRGROUP 절에설정된 webapg 와 tmaxg 에있는것이각각 client 와 server 라는 SERVER 로정의되어있음을나타낸다. 여기까지가항상설정되어야할기본이다. 이는대부분의환경에서 Host Machine 의이름만다를뿐별차이가없다. 그러나실제 Service 를응용하기위해서는각 Service 에대한설정이추가로필요하게된다. 이는다음과같다. *SERVICE write_board INSERT SVRNAME = client SVRNAME = server 위의 SERVICE 절은 WBAPI 로개발된프로그램과 TP-Monitor Service 를위한프로그램의등록을하는것이다. 이는실제프로그램의이름과도같은데, 위의 WBAPI 로개발된클라이언트프로그램과 TP API 로개발된서버프로그램이일반 C Style 과달리 write_board( ) 와 INSERT() 로시작하는것과같다. 즉, 이함수시작이름이 Service 의이름이되는것이다. 따라서, 등록시이이름으로등록을한다. 이절은 SERVER 절다음에추가하면된다. 92
95 관리자안내서 Client/Server 프로그램 Service Table 작성우린앞에서 WBAPI 프로그램의 Service Table 생성방법을보았었다. TP-Monitor Service 를하기위해서도같은방법으로 Service Table 을만들어야한다. 이는 bin/ 디렉토리안에있는 wsgst 라는실행화일를이용하여생성해주기만하면된다. $ wsgst SVC tables are successfully generated GST is successfully done wsgst 를수행하면 는 WBAPI 와 TP API 를쓰기위한 _svctab. c 라는확장자를가진 Service Table 들을지정된 Path 에만들어낼것이다. 이로써 TP-Monitor Service 를사용하기위한모든준비가끝났다. 이제 WBAPI 와 TP API 로개발된프로그램을 Compile 하여실행파일을만들고이를위와같은형식으로등록하면된다. [ 참조 ] Client 프로그램과 Server 프로그램은부록 [D. TP API] 를참조한다 Client/Server 프로그램컴파일 WBAPI 와 TP API 로개발된프로그램은 C 에서기본적으로제공되는 Library 외에도 에서제공하는특수한 Library 및앞에서설명한 Service Table 파일을이용하여야하기때문에이를 Compile 시에연결하여주어야한다. 이에대한자세한예는부록 [D.4 클라이언트 / 서버프로그램컴파일 ] 을참조한다 TP-Monitor Service 의시작및응용 TP-Monitor Service 를사용하기위한작업순서는다음과같다. 1. 환경파일 Compile $ wscfl i board.m 2. Service Table 생성 $ wsgst 93
96 관리자안내서 3. demo_ sdl.c, demo_sdl.h 생성 $ wssd lc i demo.s 4. demo_sdl.h, webtob.sdl. file 생성 $ wssdlc c i demo.s -o webtob.sdl 5. Client 프로그램컴파일 $ compile c client 6. Server 프로그램컴파일 $ compile pc server 7. DB 연동을위한 TMS engi ne 을띄우기위해 와 Oracle 의 Library 을같이컴파일 $ make f tms_ora.mk all 8. 기동 $ wsboot 가기동시이 WBAPI 와 TP API 로개발된프로그램을같이실행시켜프로세스형태로메모리에 Load 함을볼수있을것이다. [ 참조 ] 부록 [D.5 TP API 실행 ] 는 TP-Monitor Service 가가능하게되어프로젠테이션과비즈니스로직부분을불리함으로써업무로직을쉽게관리하고업무의변화에따르는변경작업이용이한기능분할의효과, 매우복잡한응용프로그램도개발가능한기능확장의효과등을얻을수있으며시스템유연성을높이고시스템비용을절감시킬수있다. 따라서업무처리의중요도가높고일일처리량이수십만단위의금융권의인터넷뱅킹업무, ATM 업무, 증권계의사이버트레이딩업무등을비롯하여공공, 제조업등전산업에서널리활용이가능하다. 좀더다양한 TP-Monitor Servic e application 을개발하고싶다면 Application Development Guide 와 TP API Reference Manual 을참고하는것이많은도움이될것이다. 94
97 관리자안내서 8.5 Tmax 와의연동 소개 는자체 TP-Service 를제공할뿐만아니라, apsl 라이브러리를이용하여 티맥스소프트의 TP-Motinor 제품 Tmax 와의연동기능도제공한다. 대체로앞서설명한 TP API 와사용방법이같지만 의 aps 라이브러리대신 apsl 라이브러리와 Tmax 라이브러리를연결 (link) 하여컴파일해야하는것에주의한다. 또한 측에서는 WBAPI 를이용하여 Client 프로그램만작성하며 Server 프로그램은 Tmax 에있는것을사용한다. 즉, 측의 Client 프로그램에서 Tmax 의 Server 프로그램으로요청을보내고그응답을받아와서 의 Client( 웹브라우저 ) 로결과에대한응답을주는것이다 Tmax 연동을위한환경파일 Tmax 와의연동은 WBAPI 를이용하는것이므로환경파일작성방법역시그와동일하다. *DOMAIN webtob_apsl << apsl.m >> *NODE tmaxi2 WEBTOBDIR="/data3/gloria/webtob", SHMKEY = 74125, DOCROOT="/data3/gloria/webtob/docs", PORT = "8797", HTH = 1, LOGGING = "log1", APPDIR = "/data3/gloria/webtob/ap", ERRORLOG = "log2" *SVRGROUP htmlg webapg NODENAME = "tmaxi2", SVRTYPE = HTML NODENAME = "tmaxi2", SVRTYPE = WEBSTD 95
98 관리자안내서 *SERVER html SVGNAME = htmlg, MinProc = 2, MaxProc = 10 wbsvrinit SVGNAME = webapg, MinProc = 1, MaxProc = 10 wbquery SVGNAME = webapg, MinProc = 1, MaxProc = 10 wbsession SVGNAME = webapg, MinProc = 1, MaxProc = 10 *SERVICE test SVRNAME = wbsvrinit query SVRNAME = wbquery wbsession SVRNAME = wbsession *URI uri1 Uri = "/svct/", Svrtype = WEBSTD *LOGGING log1 log2 Format = "DEFAULT", FileName = "/data3/gloria/webtob/log/access.log", Option="sync" Format = "ERROR", FileName = "/data3/gloria/webtob/log/error.log", Option="sync" 사용예위에제시한 apsl.m 에해당하는 Client 프로그램과그사용에대해서부록 [E. Tmax 와의연동 ] 을참조한다. 8.6 Lo gging 설정 는 Web Service 에대한요청과그에대한제공등자신과관련된기록을모두환경파일에지정된 Log File 에저장한다. 따라서 Log File 을읽어보면누가언제무엇을요청했고또무엇을가져갔는지알수있으며 Web Server 에얼마나많은사람이왔는지가장오래보는또는가장많이보는페이지는무엇인지등을알수있다. 이러한 Log File 은위에서말한대로환경파일에명시된곳에저장되며이는 Web Server 를운영할때임의의위치에저장이가능하다. 또한 는한개가아닌여러개의 Log File 을생성할수도있는데, 이는기본적인 Access Log File 과 Error 에관련된 Error 96
99 관리자안내서 Log File 등으로나누어진다. 단, Log 를남기는과정에서시스템에약간의부하가발생한다. 이는 System 에관련된것과 Capacity 에관련된것이다. 먼저 System 에관련된것은다음과같다. 가 Log 를남기는과정에서 Disk 에 Writing 을해야하기때문에 Log 를남기지않는것에비해속도가약간느려지게된다. 에선내부적으로효율적인방법을이용하지만, 한계가있는관계로약간의속도저하는발생할수있다. 두번째로 Capacity 에대한내용으로 Log 를남기는공간에대한것이다. 접속자가적은곳에서는 Log File 이얼마남지않겠지만사용자가아주많은곳에서는하루에 Log 가몇백 Mbytes 에서수 Gbyte 에이르는 Log 를남기게된다. 이는 System 에적당한공간이남아있지않다면불가능하기때문에이에대한관리가중요하다. 그러나이들정보들은 Web Server 를관리하는사람에겐아주중요하다. 자신이운영하는 Web Server 에들어온사람들의정보를바탕으로좀더효율적인 Web Service 를구현할수도있고 Shopping Mall 등을운영하는사람들에겐고객들의정보를알수있는아주귀중한자료이다. 따라서 를이용하는운영자들은거의 Log File 을특정위치에저장할것이다. 그러면이제 에서남길수있는 Log File 에대해서알아보자. 에서는기본적으로두가지 Log File 을남길수있다. 사용자의접속및관련자료접속기록을위한 Access Log File 과시스템에혹시발생할수있는 error 를기록하는 Error Log File 이있으며각 Log File 을기록하는데있어서우선순위가존재한다. 이에대한설명은다음과같다 Access Log File Access Log File 은 Transfer Log File 이라고도한다. 일반적인사항을모두기록하며, 접속자가들어와서 Web Server 에서한행동을그대로보여줄수있다. 그러므로이정보는차후에도많은이용가치가있기때문에아주중요하다. 의 NODE, SVRGROUP, VHOST 등에모두설정이가능하며각절에모두설정했을경우접속자의접속서비스를요청에따라그우선순위가 SVRGROUP, VHOST, NODE 순서로존재하며가장우선순위가높은절에해당하는 Log File 에그내용이기록된다. 97
100 관리자안내서 Error Lo g File Error Log File 은 Web Server 에서발생하는모든에러와접속실패에대하여에러가발생한시간과에러의내용을기록한다. 이는 System 에서발생할수있는 error 에대한기록이기때문에 Web Se rver 에문제가생긴경우문제해결에큰도움이될수있는정보를제공하게된다. 따라서 Critical 한업무를수행하는경우에는이를저장하여 System 에문제가생길경우이를통하여문제해결을쉽게할수있다. Error Log File 은 NODE 에서설정가능하다 Log File Format 현재 는 Common Log File Format 외에도사용자가직접원하는설정을하여기록을할수있도록하였다. 보통운영자들이관리하는경우에대부분 CLF(Common Log File Format) 을이용한다. CLF(Common Log File Format) 는 Web Server 의원조라할수있는 NCSA 계열의 Web Server 에서사용하는파일형식으로현재대부분의 Web Server 가지원하고있다. 물론 Web Server 마다자체적으로 Log File 의형식을지원하고있지만, 대부분의 Web Server S/W 의제작사는이 CLF 라는표준 Log File 형식을지원하고있다. 현재 Apache, Netscape Enterprise, IIS 등대부분의 Web Server 들이이것을기본항목으로하여이용하고있다. 에서는이를 DEFAULT 라는항목으로설정하여기본적인것으로지정하여쓰고있다. 이에대해 W3C 에서규정하는 CLF 의형식은설명은다음과같다. Common Log File 포맷 remotehost rfc931 authuser [date] "request" status bytes 각항목은다음과같다. remotehost 리모트호스트명 ( 만약 DNS 호스명을사용할수없거나 DNSLookup 이 off 이면 IP 주소 ) 참고 : Daemon/User/Config/General.html- DNSLookup rfc931 사용자의리모트로그명 authuser 98
101 관리자안내서 인증된사용자의사용자명 [date] 요청한날짜와시간 "request" 클라이언트가요청한내용 status 클라이언트로응답한 HTTP 상태코드 참고 : bytes 전송한문서의컨텐츠길이 위와같은각각의정보를저장하여 환경파일에지정된 Log File 로위들의정보를기록하게되는것이다. 이를 에서저장하여기록한예는다음과같은형태의 Log 이다 [13/Feb/2001:16:46: ] "GET / HTTP/1.1" [13/Feb/2001:16:46: ] "GET /index_pb.gif HTTP/1.1" [13/Feb/2001:16:46: ] "GET /index.html HTTP/1.1" [13/Feb/2001:16:46: ] "GET /usage.png HTTP/1.1" [13/Feb/2001:16:46: ] "GET /usage_ html HTTP/1.1" [13/Feb/2001:16:47: ] "GET /index.html HTTP/1.1" [13/Feb/2001:16:47: ] "GET /usage.png HTTP/1.1" [13/Feb/2001:16:47: ] "GET /usage_ html HTTP/1.1" [13/Feb/2001:16:47: ] "GET /index.html HTTP/1.1" [13/Feb/2001:16:47: ] "GET /usage.png HTTP/1.1" [13/Feb/2001:16:47: ] "GET /usage_ html HTTP/1.1" 위의 Log 내용에서맨앞의것은접속한사용자의 IP Address 를나타낸것이고, 뒤의 hyphen 들은각각 rfc931 과 AuthUser 를기록하여야할곳이다. 그러나, 사용자가이에관련된정보가없기때문에이를 hyphen 으로기록한것이다. 그리고뒤에있는 [ ] 안에있는정보가사용자가접속한시간을나타낸것이고, 뒤이어등장하는 99
102 관리자안내서 안의정보는사용자가요구한 Request URL 이고뒤의숫자는그에해당하는 Response Status Code 이다. 그리고마지막으로나타나는숫자는사용자에게 Server 가전달한 Byte 수이다. 의환경파일에서아래와같다 : 위와같은 Log 정보를얻기위한설정은 *NODE webmain <<http.m>> WEBTOBDIR="/usr/local/webtob", SHMKEY = 69000, DOCROOT="/usr/local/webtob/docs", PORT = "5469", LOGGING = "log1", ERRORLOG = "log2" *LOGGING log1 log2 Format = "DEFAULT", FileName = "/usr/local/webtob/log/access.log", Option = "sync" Format = "ERROR", FileName = "/usr/local/webtob/log/error.log", Option = "sync" 우선 NODE 절을보면맨하단에 Logging 라는항목이존재함을볼수있다. 이것이바로 Access Log 를기록하기위한것이다. 이에대한설정은밑의 Logging 절에서 log1 이라는것으로설정이되어있음을볼수있다. 그리고 Error Log 는 ErrorLog 라는항목으로설정이된다. 위의예에서 NODE 절의 LOGGING 밑에 ErrorLog 라는항목으로설정이되어있음을볼수있다. 이에대한설정은역시 LOGGING 절에 log2 라는것으로설정이되어있음을볼수있다. 에서 Log Format 을정하는곳은 LOGGING 절이다. 이곳에서 FORMAT 이라는항목으로이를정할수있다. 위의예에서보면, Access Log 는 DEFAULT 로설정되어있고, Error Log 는 ERROR 라는항목으로설정되어있다. 이중 Access Log 의 DEFAULT 는위에서말한 CLF Format 을그대로준수하고있다. 또한, ERROR 항목은 에서 Error 를보기편하게정리한 Format 을가지고있다. 100
103 관리자안내서 그리고위와같은정해진형식이외에도사용자가원하는형태의정보를얻기쉽도록특정 Field 를추가하였다. 이는마치 C Language 의 printf() 함수를연상하면쉽게이해할수있다. printf 함수는내부에서 %d %l %s %c 등등으로설정된값으로변수의값을출력하게된다. 에서도이와유사한기능을제공한다. 단, 내부적으로결정된출력값은 C Language 에서제공하는것과다르기때문에주의가필요하다. 이에대한것은아래와같다. %a : remote 의 IP 주소 %u : 인증이된요청을하는사용자 %t : 요청의날짜와시간 %T : 서버가요청을처리하는데걸린시간 ( 초 ) %r : HTTP 메소드를포함한요청의첫번째줄 %U : 요청한 URL %s : HTTP 상태코드 %b : 전송된파일의크기 %{Header}i : 클라이언트요청 HTTP 헤더예 ) %{Cookie}i %v : HostName 필드에서정의된서버명 %p : 클라이언트요청을 받는 TCP 포트번호 이들을이용하여다음과같은형태의 Format 을만들어낼수있다. log2 Format = "%h %l %u %t \"%r\" %>s %b", FileName = "/log/test.log" 101
104 관리자안내서 9 관리 9.1 소개 시스템이동작하고있다면시스템의관리가필요하다. 예를들어, 시스템의종료및기동의절차를거치지않고도현재환경설정에대한정보를확인해보고이를동적으로변경할필요가있다. 또한제공되는 Service 들중특정 Service 에대하여현재처리상태즉, 몇건의 Service 를처리해왔으며, 평균처리시간이얼마나되며, 몇건의요청이대기하고있는지, 그 Service 를제공받기위해서는얼마나기다려야하는지등의정보를확인할필요가있다. 이정보에따라그 Service 를제공하는 Server Process 를더기동시켜준다든지아니면필요이상의 Server Process 가동작중일경우몇개는종료시키는등의조치도필요하다. 이러한동적인시스템관리를위하여 시스템에서는관리프로그램을제공한다. 9.2 wsadmin 소개 wsadmin 프로그램은 UNIX 환경의 shell 과비슷한 Command Interpreter 이다. 즉, 항상프롬프트상태로대기중이다가입력되는명령어를해석하여이를실행하게된다. 여러 Node 를한 Domain 으로사용하는경우 wsadmin 으로전체를중앙관리가가능하며각 Node 별로로컬에서만도관리가가능하다. 시스템을관리하기위해서 wsadmin 이라는프로그램이제공된다. 명령어 옵션내용 wsadmin -l 자신의 Node 만로컬관리 102
105 관리자안내서 명령어 wsadmin : 시스템을관리하기위한프로그램. 옵션 -l : wsracd 를통하여여러 Node 로구성된시스템을중앙에서집중관리할경우에특별히지정된 Node 만을관리하기위해서사용하는옵션이다 wsadmin 을이용한시스템관리 wsadmin 툴에서는아래의명령어들을통하여 시스템을기동시키거나종료시킬수있으며, 현재동작중인시스템의환경설정내용을조회및수정할수있다. 또한각 Server 프로세스의상태와서비스의처리상태등을확인할수있다. wsa dmin 프로그램은다음과같이실행한다. $ wsadmin 이후아래와같은메시지와함께프롬프트 (prompt) 가나타난다. 이것이 wsadmin 프로그램실행상태임을나타낸다. --- Welcome to Admin (Type "quit" to leave) --- $$1 webmain (wsadm) 또한 버전 에서부터는 wsadmin 을 Command 모드에서도사용할수있는기능이추가되었다. $ wsadmin C cmd[;cmd];quit; 실행예) $ wsadmin C st v;quit $ wsadmin C st v; st p; quit 103
106 관리자안내서 wsadmin 에서사용가능한명령어들은다음과같다. 명령어 내 용 wi ci si history 시스템정보확인접속웹브라우저확인 Server 정보확인명령어저장기능! 직전명령어반복 config (cfg) 환경설정내용조회 stat (st) Process 및 Service 상태통계 suspend 동작중인 Server Process 중지 resume 중지된 Server Process 재개 qp 큐에적체된 요청삭제 set 현재설정된환경값을동적으로변경 rbs Server 프로그램교체 ds 접속중인웹브라우저를강제로해제 logstart logging 시작 logend logging 종료 quit (q) wsadmin 종료 104
107 관리자안내서 wsadmin 툴에서는이러한명령어들을통하여 시스템을기동시키거나종료시킬수있으며, 현재동작중인시스템의환경설정내용을조회및수정할수있다. 또한각 Server Process 의상태와 Service 의처리상태등을확인할수있다. wsadmin 툴을끝내기위해서는 quit(q) 명령이사용된다. $$5 (wsadm): quit 9.3 각종 정보출력 wsadmin 수있다. 프로그램의명령어들은용도에따라크게다음과같이나눌 각종정보출력 동작관리 suspend, resume, qp (queue purge), stat (repeat mode), rbs (reboot server), set, logstart, logend 각명령어의자세한내용을알아보기로한다 환경정보 wi wi, ci, si, history,!, config, stat 현재접속된 시스템의환경정보를알려준다. 시스템버전 (version), 사용만료기한정보 ( 데모버전사용시 ) 등을확인할수있다. System Info: REAL version 3.1: expiration date = 0/0/0 node_count = 1, svgrpcount = 5, svr_count = 4, svc_alloc_count = 64 rout_groupcount = 0, rout_elemcount = 0 cousin_groupcount = 0, cousin_elemcount = 0 backup_groupcount = 0, backup_elemcount All Node Info: node_count = 1: = 0 105
108 관리자안내서 ci no name nodeport racport shmkey shmsize hth webmain 현재접속된 Web Browser 의환경정보를알려준다. 현재상태(status), 접속 IP Address, 처리건수 (count) 와같은웹브라우저의제반정보를확인할수있다. 버전 부터는 Virtual Host 별로 Client 정보를표시할수있는옵션과특정 Handler 의 Client 정보를표시하는옵션이추가되었다. 기능옵션인자 Virtual Host 별 Client 정보표시 -vh <vhostname> -s -S 특정 Handler(HTH) Client 정보표시 -h <hth 번호 > -s -S s : summary, -S : detail summary $$ 8 webmain (wsadm): ci HTH 0: cli_id status count lastin_time ipaddr usrname RDY Total Connected Clients = $$69 tmaxh4 (wsadm): ci -vh vhost1 *VHOST vhost1:
109 관리자안내서 HTH 0: RDY no status count idle local_ipaddr:port remote_ipaddr:port spri user RDY : : HTH RDY QED RUN ETC total HTH RDY QED RUN ETC total Total $$73 tmaxh4 (wsadm): ci -h 1 HTH 1: RDY no status count idle local_ipaddr:port remote_ipaddr:port spri user RDY : : HTH RDY QED RUN ETC total HTH RDY QED RUN ETC total Total
110 관리자안내서 si 현재동작중인각 Server 의정보를알려준다. 즉, 현재상태 (status, RDY: Service 가능, NRDY: Service 불능 ), 처리건수 (count), 큐잉건수 (qcount), 큐에서삭제된건수 (qpcount), 최대큐잉건수 (maxqcount) 를초과하여반환된건수 (emcount) 등을확인할수있다. $$9 webmain (wsadm): si hth svrname (svri) status count qcount qpcount emcount html ( 0) RDY cgi ( 1) RDY ssi ( 2) RDY jsv1 ( 3) NRDY history shell 에서와같이명령어를기억함으로써편리하게사용할수있다. $$15 webmain (wsadm): history 4: si 3: ci 2: st -p 1: st -s 0: ci! 직전명령어를반복하며 history 수도있다. 에서출력된번호를사용할 $$21 webmain (wsadm):!5 si HTCL Hsvri status count qcount qpcount emcount RDY RDY
111 관리자안내서 0 2 RDY RDY $$21 webmain (wsadm):! si HTCL Hsvri status count qcount qpcount emcount RDY 0 config (cfg) RDY RDY RDY 현재동작중인시스템의환경정보를알려준다. 즉, 환경파일에서정의된 Domain, Node, Server Group, Server, Service 별로 default 값까지포함한모든환경정보를확인할수있다. config 명령어에는다음과같은옵션이있다. 옵션내용 -d Domain -n <Node 이름 > Node -g < Server Group 이름 > Server Group -v <Server 이름 > Server Domain 에대한환경정보 Domain 에대한환경정보를확인하기위해서는 -d 옵션을사용한다. 이를이용하면환경파일의 DOMAIN 절과관련된모든항목내용과 Domain 에존재하는 Node 개수 (nodecount), Server Group 개수 (svgcount), 부하조절을위한복사 Server Group 의개수 (cousin_gcount: 그룹별, 109
112 관리자안내서 cousin_count: 개별 ), Node 간장애를감지하는시간간격 (nliveinq) 등의정보를확인할수있다. Note : cousin_gcount 는 COUSIN 항목이정의된그룹개수즉, 복사가이루어진그룹개수이고, cousin_count 는모든복사본 Server Group 들의개수이다. $$4 webmain ( wsadm): cfg -d domain_name = webtob1, shmkey = 77999, minhth = 1, maxhth = 5, portno = 8888, cmtret = YES, blocktime(bt) = 200, txtime(tt) = 0, nliveinq(ni) = 30, security = NONE, nodecount = 1, cousin_count = 0, cousin_ gcount = 0, svgcount = 2, relem_c ount = 0, routcount = Node 에 대한환경정보 Node 에대한환경정보를확인하기위해서는 -n 옵션이사용된다. Node 이름을지정하면그 Node 에대한정보만을 Node 이름을지정하지않으면모든 Node 에대한정보를출력한다. 이를이용하면환경파일의 NODE 절과관련된모든항목내용과시스템에서내부적으로정의된 Node 번호 (node_no), Node 내에존재하는 Server Group 개수(svgcount) 와 Server 개수 (svrcount), Service 개수 (svccount), Node 에서동작중인 HTHProc ess 개수(curHTH), 동작가능한최대 Server Process 들의개수 (maxsprs) 정보를확인할수있다. $$2 webmain (wsadm): cfg -n webmain node_name = webmain, lni d = webmain, node_no = 0 shmkey = 77999, minhth = 1, maxhth = 5, 110
113 관리자안내서 HTHqtimeout(hqt) = 0, portno = 8888, webtobdir = /usr/local/webtob/, appdir = /usr/local/webtob/server/, pathdir = /usr/local/webtob/path/, txlog_dir = /usr/local/webtob/txlog/, syslogdir = /usr/local/webtob/syslog/, usrlogdir = /usr/local/webtob/usrlog/, envfile =, svgcount = 2, svrcount = 3, svccount = 64, curhth = 1, maxsprs = 12, maxtmss = Server Group 에대한환경정보 Server Group 에대한환경정보를확인하기위해서는 -g 옵션이사용된다. Server Group 이름을지정하면그 Server Group 에대한정보만을이름을지정하지않으면모든 Server Group 에대한정보를출력한다. 이를이용하면 Server Group 별로각 Server Group 에대하여환경파일의 SVRGROUP 절과관련된모든항목내용을확인할수있다. $$ 1 webmain (wsadm): cfg -g svg2 svg_name = svg2, svg_no = 1 mintms = 2, maxtms = 3, load(ld) = 0, tms starti = 0, tms endi = Server 에대한환경정보 Server 에대한환경정보를확인하기위해서는 -v 옵션이사용된다. Server 이름을지정하면그 Server 에대한정보만을, 이름을지정하지않으면모든 Server 에대한정보를출력한다. 111
114 관리자안내서 이를이용하면 Server 별로각 Server 에대하여환경파일의 SERVER 절과관련된모든항목내용과내부적으로정의된 Server 번호 (svr_no), Server 와관련된데이터의존형 Routing 정보 (ddri) 를확인할수있다. $$3 webmain (wsadm): cfg -v kapi1 svr_name = kapi1, svr_no = 0 svgno = 0, ulogdir =, min = 5, max = 10, maxqcount(mq) = -1, asqcount(aq) = -1, restart(rs) = YES, maxrstart(mr) = 동작상태 정보 stat(st) 실질적인 시스템 동작 상태를 나타내며, 동작중인 Server Process 와 Service 에대한정보를알수있다. 즉 Server Process 의현재상태처리중인 Service 이름, 처리한 Service 개수, Service 에대한상태, Service 큐에존재하는 Service 요청 개수등과같은동적인정보를확인할수있다. stat 명령어의약어는 st 이며, 다음과같은옵션들이제공된다. 옵션내용 -p <Server Process 이름 > Server -s <Service 이름 > Service -l Local mode ( 로컬모드 ) -n <Line 수 > n 라인만큼디스플레이 112
115 관리자안내서 Server Process 에대한정보 시스템에서동작하는개별적인 Server Process 에대한정보를알수있다. 환경파일에등록된 Server 는 MIN 과 MAX 항목을사용하여여러개의동작할수있는데, 이들각각의동작상황을확인할수있다. 즉각 Server 별 Process 의 id(spr_no), 현재상태 (status: Idle, Run ning, Blo cking), 처리한 Service 개수 (count), 평균처리시간 (avg), 처리중인 Service 이름 (svc) 등이출력된다. -p 옵션을사용하여 Server 이름을지정하면해당 Server 이름의 Server Process 들에관한정보들이출력되고이름을지정하지않으면동작중인모든 Server Process 들에대한정보가출력된다. $$11 webmain (wsadm): st -p HTH 0: svr_name spr_no status count avg svc html 0 RDY html 1 RDY html 2 RDY html 3 RDY html 4 RDY cgi 10 RDY ssi 20 RDY [ 참고 ] 버전이 이상이고 Servlet Container 가 이상인경우, st p 결과에서 Jsvengine name 과 Thread id 를표시할수있는기능이추가되었다. 9.4 운용관리 Server Process 중지및재개 suspend 응용 Server 프로그램오류등으로더이상의업무처리가불가능하여이를해결하기위해동작중인 Server Process 를중지시킬필요가발생할수있다. 이와같이원인을알수없는문제로인하여 Service 113
116 관리자안내서 처리를중지시키고추가적인작업을필요로하는경우에유용하게사용할수있는기능이다. 중지된 Server Process 는현재처리중인 Service 를정상완료한후더이상의동작은중지하고, 큐에있는서비스들은대기상태가된다. 이때계속적으로요청되는 Service 들은모두큐에적체된다. Suspend 명령어에는다음과같은옵션들이제공된다. 옵션내용 -v <S erver Process 이름 > Server resume 동작중지된 Server Process 의활동을재개시킨다. 활동이재개된 Server Process 는큐에대기중이던 Service 를처리하기시작하며요청되는 Service 에대해처리가능상태가된다. resume 명령어에는다음과같은옵션들이제공된다. 옵션내용 -v <Server Process 이름 > Server 적체해소 qp(queue Purge) 업무의폭주현상이발생하여정상적으로거래를처리하지못하는경우, 현재큐에적체되어있는 Serv ice 요청을삭제하므로써원활한업무수행을유도하는기능이다. 하루에도수십만건의업무를처리하는은행이나관공서에서유용하게사용될수있는기능으로서삭제된업무는웹브라우저의재요청을통하여다시처리될수있다. 에서는 Server Process 별로큐를관리함으로써관리자는특정 Server 별로큐를삭제할수있다. 따라서특정업무별로처리가가능하며이는타업무의효과적인수행에도도움을줄수있다. 114
117 관리자안내서 $$1 webmain (wsadm): qp v sdlsel qp 는 Server 단위로가능하며다음과같은옵션들이제공된다. 옵션내용 -v [Server Process 이름 ] Server qp 를통해삭제된 Service 는 Web Browser 에게에러를반환하게되고 Web Browser 에서는 503 Service Temporarily Unavailable 이라는에러를화면에나타낸다. 따라서 Web Browser 는이에맞게적절한대처를할수있다 상태정보반복표시기능 stat(repeat Mode) 현재상태정보를일정한시간간격을두고계속모니터링하고자하는경우에사용하는기능으로서명령어는다음과같다. $$1 webmain (w sadm) : st -s -i 5 -k 30 $$1 webmain (wsadm): st -p -i 5 -f 30 첫번째명령어는 5 초간의간격을두고 st s 를 30 번수행하라는의미이며두번째명령어는 5 초간의간격을두고 st p 를 30 초간수행하라는의미이다. 반복적인명령어수행은상태정보를모니터링할뿐아니라업무수행에대한디버깅에도많은도움을줄수있다. - l 다음에 Interval 을설정하지않으면 0초로동작한다. 여러 Node 가한 Domain 으로설정된경우또는다수의 Service 와 Server Process 가존재하는경우, 한번에상태정보를관리하기란쉽지않다. 따라서로컬에있는 Service 와 Server Process 만을보기위한 - l 옵션을제공하며 -n 으로적절한라인을설정할수도있다. $$1 webmain (wsadm): st -s -l -n 24 $$1 webmain (wsadm): st -p -l -n 환경설정값동적변경 set 115
118 관리자안내서 현재설정되어있는환경파일의설정값을동적으로변경할수있는명령어로서사용법은다음과같다. 변경가능항목은 wsadmin 에서 cfg 명령어를통해서확인할수있다. 각항목중에서괄호로서약어를표시한항목이동적으로변경가능한항목이다. ( 동적설정 변경가능항목의예 ) Option Item Value -d bt block time tt ni nct tx time Nliveing NhthChkTime -n to TimeOut ce cs kto km lrb lrf lrs lsl CacheEntry CacheSize KeepAliveTimeout KeepAliveMax LimitRequestBody LimitRequestFields LimitRequestFieldSize LimitRequestLine -vh kto KeepAliveTimeout 116
119 관리자안내서 km to KeepAliveMax TimeOut -g ld load -v mq max qcount aq fc mr obs ibs mrq sct sch as qcount flowcontrol max restart HttpOutbufSize HttpInbufSize MaxRequests SvrChkTime Schedule 0:Reset, 1:Cache, 2:-Cache, opt 3:BlockListen, 4:ImageCompress -s pr prio st -tcpgw to cto svc time TimeOut ConnectTimeOut 117
120 관리자안내서 $$ set d[n,vh,g,v,s,tcpgw] Domain 명 [Node 명,ServerGroup 명,Server 명,Service 명 ] Item Value $$1 webmain (wsadm): set d webtob1 bt 300 $$1 webmain (wsadm): set n webmain to 100 $$1 webmain (wsadm): set vh vhost1 to 100 $$1 webmain (wsadm): set g svg1 ld 5 $$1 webmain (wsadm): set v kfdl1 mq 1000 $$1 webmain (wsadm): set v MyGroup opt 2 $$1 webmain (wsadm): set s SYNC pr 100 $$1 webmain (wsadm): set tcpgw tcpgw1 cto 웹브라우저연결해제 ds(disconnect Session) 현재접속되어있거나아무일도수행하지않는 Web Browser 를강제로연결해제할수있다. Web Browser 정보를얻을수있는 ci 명령어로확인후사용한다. 옵션내용 -h <HTH 번호 > 연결을끊고자하는 HTH 를설정 -n < 이름 > 연결시설정된웹브라우저이름 -i <idle time> 지정된시간 ( 초 ) 이상경과된웹브라우저 -c <Client ID> 웹브라우저에부여된 ID 번호 -f 즉시연결해제 -a 해당 HTH 에연결된웹브라우저접속해제 $$ ds [-h HTHno] -a -n -i xx -c clid [-f] 118
121 관리자안내서 $$ ds -h0 -a $$ ds -c 1 $$ ds -i 15 -f $$ ds -h2 -a f Server Process 변경 rbs(reboot Server Process) 현재사용중인 Server Process 를새로운 Process 로변경하고자하는경우에사용한다. WEBTOB_BKAPPDIR 를환경변수에지정하고새로운프로그램을지정된 Directory 에옮기고다음의명령어를수행한다. $$1 webmain (wsadm): rbs new_file old_file new_file : 변경된파일(object file) old_file : 현재실행중인파일 (object file) Logging 관리 logstart filename logend 관리자는 Administration Tool 을사용하여여러가지실시간정보를살펴볼수있다. 따라서주어진상황에맞는즉각적이고효과적인조치를취할수있다. 또한 Administration Tool 에서는통계적정보분석을위해 Administration Tool 정보데이터를로그로남길수있다. Logging 파일은현재 Directory 에만들어진다. 따라서 Windows 의경우에는항상 wsadmin 이실행되는 WEBTOBDIR/bin 에생성된다. 로그데이터를통해업무폭주시간, 불필요한 Server Process, 큐잉상태등을확인하여전반적인시스템분석이가능하다. 명령어사용은다음과같다. $$1 webmain (wsadm): logstart filename $$1 webmain (wsadm): logend logstart 명령어를통해서 log 처리를시작할수있으며 logend 명령어를통해끝낸다. logend 명령을사용하지않고 wsadmin 을종료하는경우에는, logstart 명령어로지정한파일에 log 기록을 119
122 관리자안내서 남긴후종료하도록되어있으나, 특정시스템에경우에는기록되지않는경우도있으므로, 반드시 logend 명령어를사용하여종료할것을권장한다. 9.5 Windows NT 에서의 시스템관리 Administration Tool 은 NT version 을사용하여 NT 서버에서웹서비스를하고자하는사용자를위해개발되었다. Administration Tool 은사용자가 를더욱편리하게관리할수있도록여러가지기능을 GUI 형태로제공하는 Tool 이다. 의기동과종료, Configuration 의설정과 compile, 그리고 의실행상태모니터링등의기능을제공한다 Administration Tool 의소개 본장에서는 NT 용 의작동편의를위해제공되는 Administration Tool 에대해소개하고전체적인구조와동작방법등을설명한다. 이장은 시스템관리자가 Administration Tool 을보다쉽게사용할수있도록다음과같은내용을다루고있다. Administration Tool 의소개 Administration Tool 의구조 기본 configuration 설정및컴파일방법 Configuration Manager 의구조 Configuration 설정방법 Configuration 컴파일 NT 에서의 WEBTOB 기동및종료와시스템환경변수설정 기동 : Start (wsboot) 종료 : Stop (wsdown) Servlet Engine 기동 : Start Servlet Engine Servlet Engine 종료 : Stop Servlet Engine 120
123 관리자안내서 시스템환경변수설정 : Settings Systen Editing For NT 시스템 Monitoring Administration Tool 의구조 Administration Tool 은메인메뉴를가지고있는 Frame 과 의실행상태를보여주는 Status 와 Configuration 의설정, Help 에대한트리메뉴창과선택된트리메뉴의결과를보여주는창, Administration Tool 에관련된 log 결과를볼수있는창으로구성되어있다. Webtob Status 트리메뉴를선택하면지금설정되어있는환경파일의간단한기본정보와 Webtob 와 Servlet Engine 의 ON/OFF 상태를보여준다. 그림 9-1. NT Administration Tool Status Configuration 트리메뉴를선택하면환경파일에설정할수 Section 리스트메뉴가있다. 각각의 Section 을선택하여각속성들을 insert, edit, delete 를수행할수있다. 121
124 관리자안내서 그림 9-2. NT Administration Tool Configuration Help 트리메뉴는 홈페이지로이동할수있도록하였다. 그림 9-3. NT Administration Tool Help 상단메뉴바의 File 은기본적인환경파일에대한조작하는기능과 Compile(wscfl, wsgst) 로이루어져있다. wscfl 은현재 Administration Tool 에 Open 되어있는환경파일을컴파일할수있다. 122
125 관리자안내서 wsgst 는환경파일에 SVRTYPE 에 WEBSTD 이나 TPSTD 로설정되었을경우반드시해주어야하는것으로 WBAPI 이나 TP API 를쓰기위한 _svctab.c 라는확장자를가진 service table 을 $WEBTOBDIR/svct 디렉토리밑에생성해준다. 그림 9-4. NT Administration Tool File menu 상단메뉴바에 Engine 은 와 Servlet Engine 에대한기동과종료를할수있고, 또한시스템환경변수를설정할수있도록하였다. 그림 9-5. NT Administration Tool Engine menu 상단메뉴바에 Edit 는 환경파일을메모장에서살펴보고, 수정할수있게하였다. 123
126 관리자안내서 그림 9-6. NT Administration Tool Edit menu 상단메뉴바의 Monitor 는 Start Wsadmin 이라는 SubMenu 를가지고있다. Start Wsadmin 은 가기동되었을때 의수행상태를 check 할수있게한다. 이부분은 가반드시 Booting 된상태에서수행해야하며, 그렇지않을경우에는제대로동작하지않는다. Administartion Guide 의 wsadmin 관련부분을참조하기바란다. 그림 9-7. NT Administration Tool Moniter menu 124
127 관리자안내서 기본 configuration 설정및컴파일방법 를설치하고나서가장먼저해야할작업은 Administartion Tool 의 Configuration 트리 메뉴를 사용하여 Configuration 파일을 작성하는 것이다. 설치한 이후 처음으로 Configuration 트리메뉴를선택하면거의모든 Configuration 값이 비어있는상태로창이뜰것이다. 제공하고자하는서비스의특성에 맞게 Configuration 을설정한 이후컴파일작업을마치면비로소 로웹서비스를수행할수 있게된다 Configuration 설정구조 Administration Tool 창의왼쪽 Frame 의 Configuration 트리메뉴 를 click 하면 Webtob Configuration 에서설정할수있는 11 가지의 Property 가서브트리메뉴로구성되어있다. 이 11 가지 Property List 중하나를선택하면관리자가 다시그 Section 에대한세부항목을설 정할수 있도록오른쪽 Frame 이구성되어있다. 서브트리에항목인 Property List 는 NODE, VHOST, SVRGROUP, SERVER, URI an d ALIAS, EXT, LOGGING, SECURITY, DIRECTORY, DIRINDEX, DOMAIN 으로 특성이구분되어있다. 사용자는필요한설정을기록하여 list 에등록하고이를추가, 수정, 삭제할수있게되어있다. 각 Page 에 3 가지 button, 즉 Edit, Insert, Delete 가있는것은이러한작업을위한것이다. Insert 를위해서는 해당 button 을 click 하기만하면되지만 Edit 혹은 Delete 작업을 위해서는 list 의한 item 을먼저선택하고해당 button 을 click 해야 한다. Edit 혹은 Inse rt button 을누르게되면해당 property 에따른 Dialog Box 가뜨게된다. 각 Dialog Box 는 Mandatory 라는이름으로나누어진부분과그외의 부분으로구분할수있다. Mandatory section 은새로운설정등록을 위해 반드시지정해야할항목이며, 이부분이설정이되지않으면 list 에등록이되지않는다. 그외의부분은 Optional 항목이며 관리자가특별히값을지정하지않는한 default 값으로설정이된다. 125
128 관리자안내서 그림 9-8. Configuration Manager 126
129 관리자안내서 그림 9-9. Configuration Manager Dialog Box 예제예를들어위의그림은 SVRGROU P 속성에관련된 Dialog Box 이다. NAME, NODE NAME, SVRTYPE 과같이 Mandatory section 안에설정된항목은반드시설정해야하는항목이다. VhostName, Logging, EnvFile 과같은항목은 Optional 한항목이며, 사용자가설정하지않을경우 Default Value 가설정된다. 127
130 관리자안내서 Configuration 설정방법 주의할사항은 NT 에서는 directory 의구분을위한표기로 \ 가아닌 \\ 혹은 / 를사용한다는점이다. 예를들어 C 드라이브밑에 webtob 디렉토리에 가설치되었다면 WEBTOBDIR 은다음과같이표기가되어야한다. (Ex) C:/webtob 또는 C:\\webtob 각 Property Page 를설정하는방법은먼저환경파일과그항목들을이해한다음, 필요한항목들을설정해주면된다. Administration Tool 을이용한각항목의설정페이지에대한화면자료는부록 [A.3 NT 환경설정툴사용예 ] 에있으므로이를참조하여설정하면된다. NT 서버를위한 Tool 을사용하기위해서도환경파일과그설정항목에대한이해가필요하므로이후에연결되는모든내용들을꼭읽어보는것이중요하다 Configuration Compile 컴파일작업은다음과같이 File 메뉴에서 Compile 서브메뉴를 선택하면 자동으로 수행된다. 보통 컴파일 수행시 Default 로 untitled.m 이라는환경화일명으로환경파일을설정한후컴파일하거나 자신이컴파일하고자하는해당파일을 Open 해서컴파일할수도 있다. 컴파일수행이 성공적으로이루어지면그림 9-10 과같은 결과가나온다. 128
131 관리자안내서 그림 9-10 NT Administration Tool wscfl CFL is done successfully for node 라는메시지가나오게되면성공적으로 compile 이수행된것이며 Administration Tool 통해작성된 Configuration 파일에정의된속성값들중에오류가없었다는의미이다. 129
132 관리자안내서 그림 9-11 NT Administration Tool wscfl SVRGROUP Section 에 등록된 Server Group 의 SVRTYPE 이 WEBSTD 이거나 TPSTD 의값으로설정된경우 WBAPI 혹은 TP API 를쓰기위한구조체테이블을생성하기위해환경파일을컴파일 한후다음과같은컴파일과정을거쳐야 SERVICE 절에등록된 서비스가정상적으로수행이된다. 130
133 관리자안내서 그림 9-12 NT Administration Tool wsgst 그림 9-13 NT Administration Tool wsgst 131
134 관리자안내서 NT 에서 기동 / 종료와시스템환경변수설정 본장에서는 Administration Tool 을사용하여 와 Servlet Engine 을실제구동하고종료하는작업과시스템환경변수설정에대한설명을할것이다 기동 : Start (wsboot) 환경파일을컴파일한후 Webtob Administration Tool 을사용하여 를기동하기위해서 Engine Menu 의 Start (wsboot) 를선택하거나툴바의 wsboot 아이콘버튼을 click 한다. 그림 9-14 NT Administration Tool wsboot wsboot 가성공적으로이루어지면다음의그림과같이 wsboot 가성공적으로이루어졌다는메시지창이뜬다. 132
135 관리자안내서 그림 9-15 NT Administration Tool wsboot 종료 : Stop (wsdown) Webtob Administration Tool 을사용하여 를종료하기위해서 Engine Menu 의 Stop (wsdown) 을선택하거나, 툴바에 wsdown 아이콘버튼을 click 한다. Stop 메뉴를수행하면 webtob 를 down 할것인지의여부를묻는메시지창이뜬다. 이때 예 버튼을 click 하면 wsdown 이성공적으로종료가되었는지에대한메시지창이뜬다. 133
136 관리자안내서 그림 9-16 NT Administration Tool wsdown 134
137 관리자안내서 그림 9-17 NT Administration Tool wsdown 그림 9-18 NT Administration Tool wsdown 135
138 관리자안내서 Servlet Engine 기동 : Start Servlet Engine 와 Servlet Engine 을연동하는경우콘솔에서직접 jeusadmin 을이용해서구동하거나 Administration Tool 에서 Servlet Engine 을기동시킬수있다. Note: Servlet Engine 을기동시키기전에 를먼저 Start 시켜야한다. Webtob Administration Tool 을사용하여 Servlet Engine 을기동하기위해서먼저 를 Boot up 한다음에 Engine Menu 의 Start Servlet Engine 을 click 한다. 그림 9-19 NT Administration Tool Start Servlet Engine Servlet Engine 부팅하기위해서는아래와같이인증과정을거쳐야한다. Install 시에입력한 ID 와 Password 를입력한다. 136
139 관리자안내서 그림 9-20 NT Administration Tool Start Servlet Engine Servlet Engine 에대한인증이성공적으로이루어져서 Servlet Engine 이기동이되면아래의그림과같이 Booting 이성공적으로이루어졌다는메시지창이뜬다. 그림 9-21 NT Administration Tool Start Servlet Engine 137
140 관리자안내서 Servlet Engine 종료 : Stop Servlet Engine 와 Servlet Engine 을연동하는경우콘솔에서직접 j eusadmin 을이용해서종료하거나 Administration Tool 에서 Servlet En gine 을종료시킬수있다. N ote: Servlet Engine 을종료하기경우비정상적으로종료가되기때문에먼저 Stop 한후, wsdown 을실행한다. 전에 를먼저종료할되도록이면 Servlet Engine 을 Webtob Administration Tool 을사용하여 Servlet Engine 을종료하기위해서 Engine Menu 의 Stop Servlet Engine 을 click 한다. 그림 9-22 NT Administration Tool Stop Servlet Engine Servlet Engine 이성공적으로종료가되었는지에대한메시지창이뜬다. 138
141 관리자안내서 그림 9-23 NT Administration Tool Stop Servlet Engine 시스템환경변수설정 : Settings Engine Menu 의 Setting 을메뉴을 click 하면아래그림과같은 Dialog Box 가뜬다. 이창에는 와 Servlet Engine 에관한시스템환경변수를설정할수있다. 기본적으로시스템에 default 로정의된값들을보여준다. 아래의창을보면 Use Hotspot 이란설정하는부분이있는데, 만약지금 Servlet Engine 을설치한 Machine 에 JDK version 을확인한다음, Hotspot 이깔린경우에이부분을 check 해준다. 보통 JDK1.3.1 이상 version 인경우 check 해주면된다. 139
142 관리자안내서 그림 9-24 NT Administration Tool Setting SSL 를 에서이용하기위해서는 Use SSL 이란 Checkbox 를 check 하면된다. 그러면 wsboot 시 password 를입력창이띄고, 올바른 password 를입력할경우, wsboot 가정상적으로이루어진다. 그림 9-25 NT Administration Tool Setting 140
143 관리자안내서 wsboot 시 password 를입력창이띄고, 올바른 password 를입력할경우, wsboot 가정상적으로이루어진다 System Editing for NT 그림 9-26 NT Administration Tool booting 상위 Menu 바에서 Edit 를선택한후 Edit File 을선택하면 환경파일을메모장에서확인하고수정할수있다. 141
144 관리자안내서 그림 9-27 NT Administration Tool Edit File System Monitoring for NT 는 Runtime 에서서비스상태의 monitoring 을관리자가효율적으로할수있도록 wsadmin 이라는 tool 을제공한다. Administration Tool 에서 wsadmin 을수행시켜시스템을 monitoring 할수있다. 기동방식은다음과같다. 상위 Menu 바에서 Monitor 를선택한후 Start wsadmin 을선택하면 wsadmin 이구동된다. wsadmin 은 가 Booting 된상태에서만기동되며그렇지않을경우에는에러메시지를출력하고실행되지않는다 142
145 관리자안내서 그림 9-28 NT Administration Tool Monitoring Start Wsadmin 을 click 하면다음과같은결과창이뜬다. 이곳에서 wsadmin command 를주어 webtob 에대한환경정보나상태를살펴볼수있다. wsadmin command 에대한앞장의 wsadmin 설명부분을참조하도록한다. 143
146 관리자안내서 그림 9-29 NT Administration Tool Monitoring Note: NT 환경에서환경파일을설정할때 6666~6688 사이의 Port 번호는시스템에서사용하는번호이므로, 이를제외한 Port 번호를설정해주면된다. 144
147 관리자안내서 10 튜닝 10.1소개 는상업용 Web Server 로, 대규모의전문적인웹서비스의운영을위해개발되었다. 전문가를위한서버인만큼사용자에대한자유도가높고각자의환경에맞는최적의미세조정을제공한다. 바꾸어말하면, Web Server 운영자가각자의환경에맞게서버를 Tuning 하여사용하게되면엄청난효율과성능을얻을수있다는것이다. 의이러한특징을적절히활용하여쓸수있도록본장에서는 Tuning 에있어가장중요한항목들과그적용사례를살펴보도록하자 HTH 설정 앞에서설명한바와같이 는특정 Process 에서일반 Browser 에관련된연결을모두관리하고있다. 이러한구조는하나의 Process 에서모든처리를도맡아하여빠르게작업을할수있는장점이있으나 Process 의안정성에의해시스템의성능이크게좌우되므로주의하여야할필요가있다. 의경우역시이러한구조를따르고있으며앞에서등장한 HTH 란 Process 가바로이런역할을한다. 그러나많은적용사례와수많은 Rush Test 를거치고개량하여 Process 의안정성면에서는걱정할문제가전혀없다고해도과언이아니다. 단, 이 Process 의관리가성능에영향을줄수있으므로이를적당히조절할필요가있다. 그럼 에서는어떤식으로이를설정해주어야할까? 우선대표적인 UNIX 의운영체제인 Solaris 7 의예를들어설명하여보겠다. Solaris 7 은현재많은 SUN Server 사용자들이이용하는운영체제로국내에서도많은사용자를보유하고있다. 또한일반 UNIX 사용자들이가장많이사용하는대표적인운영체제이기도하다. 145
148 관리자안내서 에서는 HTH Process 를통해서사용자의연결을관리한다고설명하였다. 즉, HTH Process 에모든사용자의연결이맺어지는형식이다. 이때한가지질문을던질수있을것이다. HTH Process 하나에몇개정도의연결을맺는것이좋은가? 이와같은질문에대한답은사람들이이용하는운영체제마다다르게될것이다. 이는각운영체제마다 Process 하나가열수있는연결의수를제한하고있기때문이다. 이제우리가가정한 Solaris 7 의경우에대한답을해보자. 이 Solaris 7 이란운영체제는사용자에게아주많은권한을부여하였다. 과거 Solaris 6 이하의 Version 에서는하나의 Process 가최대 1024 개의연결만을열수있도록운영체제에서제한하였다. 그러나 Solaris 7 부터는이에대한제약이없어졌다. 이론상으로는 40 만개이상의동시연결이가능하도록하였다. 그러나이는어디까지나이론적인수치일뿐실제적용된사이트에서는이를실제적인수치로제한할필요가있다. 과거 Solaris 6 의경우 1024 개가최대였기때문에동시사용자가 1000 명이넘는경우 HTH Process 의수를 2 개정도로늘려서처리하였다. 또한하나의 Process 에서너무많은처리를하면하나의 Process 가많은 CPU 점유를차지하게되고, 또 Process 의동작에무리를줄수있기때문에동시사용자가많은경우가급적적당한정도로분리하여실제사이트에서운영하여왔었다. 보통하나의 HTH Process 로 600 ~ 700 개정도의수를처리하도록하였다. 그러나만약 Web Server 를운영하고많은 Service 를추가로이용하는경우 HTH Process 의수를조금더늘리는것이좋다. 이러한정보는 W ebtob 를기동하면, 화면에 가자체적으로운영체제에게문의하여자신이받아들일수있는최대의동시사용자수를출력하여준다. 따라서운영자는동시사용자수의예측과이정보를바탕으로 HTH Process 의적당한수를예측하여야한다. Webto B 설정파일에서 HTH Process 의수를설정하는같다. 방법은다음과 설정예제 *DOMAIN webtob1 *NODE webmain WEBTOBDIR= /usr/local/webtob, 146
149 관리자안내서 SHMKEY=69000, DOCROOT= /usr/local/webtob/docs, APPDIR= /usr/local/webtob/ap, PORT= 5469, HTH=2, IndexName= index.html, LOGGING= log1, ERRORLOG= log2 위와같이설정하면 가두개의 HTH Process 를기동하게된다. 따라서각각의 HTH Process 를이용하여사용자의접속을처리하게된다. 각각의 HTH Process 는각 Process 에걸리는 Load 에따라서적당히사용자의요구를분배하기때문에하나의 HTH Process 가특별히일을많이하는등의문제는발생하지않는다. 10.3Server Process 설정 Apache 와같은 We b Server 는하나의 Process 에 HTML, CGI, SSI 등등의모든 Service 처리루틴이포함되어있다. 따라서사용자가접속하는경우하나의 Process 에서모든처리가끝난다. 이는각사용자의요구순간마다 Process 가접속을연결받아처리하여, 결국사용자당담당 Process 가연결되는구조에서는필연적인것이다. 이런구조에서는하나의 Process 에서모든사용자의 Request 를처리할수있다는장점은있으나, 사용자가쓰지도않는기능들이의미없이설정되어있을수도있다. 는이에대해필요한서비스들을 분리시켜제공한다. 간단한예를든다면다음과같다 예제 Sample 어느쇼핑몰사이트에서 100% 의사용자를기준으로 : 60% 가 HTML 이용자 20% 가 Servlet 이용자 10% 가 CGI 이용자 10% 가 SSI 이용자라는가정을세우자. 147
150 관리자안내서 위의가정이정확하지않을수도있지만, 대부분의경우하나혹은두개정도의 Service 에사람이몰리는경우가일반적이다. Apache 의경우운영자는 100 개의 Process 를설정하여서비스할것이다. 이는사용자가동시에 100 명정도가들어오는경우반드시필요한수치이다. 하지만이때위와같은사용자분포도를보인다면, 100 개의 Process 에서 60 개는거의 HTML 만을 Service 하고 20 개는 Servlet 을 Service 하고, 10 개가 CGI 를 Service 하고 10 개가 SSI 를 Service 를하게된다. 이때각각의 Process 에포함된다른기능들은의미없이 Memory 만차지하고있다는결론이된다. 게다가사용자가 HTML 만을반복적으로이용하는경우, 이런현상은더더욱두드러지게나타난다. 이는결국 Memory 를효율적으로운영할수없다. 이런경우에 는위와같은문제를어떻게해결하는가? 에서는각각의 HTML, CGI, SSI 등의 Service 들이별도의독립적인 Process 로설정된다. 결국하나의 Process 에서모든처리를하는것이아니라, 각각의 Service 를처리하는것을분리하여별도로각각의수치를조정할수있게하였다. 따라서위와같은경우운영자가 HTML 을사용자가많이사용한다는것을알게된다면, HTML 을처리하는 Process 들을많이설정하면된다. 그리고다른 Process 들은적게설정하여불필요한 Memory 의낭비를막을수있다. 의경우특정 Service 가분리되어있기때문에각각의서비스프로세스수를조정할수있다. 따라서위의경우에 에선 HTML 에관련된 Process 를 6 개정도띄우고 Servlet 에관련된것을 2 개정도그리고 CGI 와 SSI 를각각 1 개정도띄워준다면 System 에서가장최적인환경에서 Service 를할수있을것이다. 이를실제로 설정파일에서적용하는것은각각의 SERVER 절에서 MinProc 와 MaxProc 를통하여이루어진다. 이에대한예는다음과같다. *SERVER html SVGNAME = htmlg, MinProc = 6, MaxProc = 10 jsv1 SVGNAME = jsvg, MinProc = 2, MaxProc = 10 cgi SVGNAME = cgig, MinProc = 1, MaxProc = 10, SvrCPC = 4 ssi SVGNAME = ssig, MinProc = 1, MaxProc = 2 148
151 관리자안내서 위의예에서각 SERVER 절에있는 MinProc 가처음 가기동될때시작되는 Process 의수이다. 따라서위의경우 HTML(html) 은 6 개, Servlet(jsv1) 은 2 개, CGI(cgi) 는 1 개, SSI(ssi) 는 1 개를초기값으로설정한것이다. 뒤에있는 MaxProc 는최대로이용할수있는 Process 의수이다. 이는동적으로 를조정하는것이가능하기때문에필요한값이다. 즉, 사용자가초기값으로설정한후에, 약간의변화가생겨 Process 의조정이필요한경우 MinProc 와 MaxProc 의범위안에서조정하는것이가능하다. 이는 wsadmin 이라는관리자용 Tool 을이용하면된다. 149
152 관리자안내서 11 보안 11.1 소개 는기본적으로 Authentication 과 SSL 을지원한다. 이들은기존의다른 Web Server 들에서도기본적으로지원하는것으로 Web 상에서 Security 를보장하기위하여가장많이쓰이는방법들이다. 근본적으로 Open Network 을지향하는 Internet 에서사용자들의정보를보호하고, 자료의유출을막기위한방법들인이들은전자상거래등의거대한규모의사이트에서반드시검증하고이용하여야할방법들이다 인증방법 Authentication( 인증 ) 의방법은매우단순하다. 사용자가사용자명과패스워드를 Web Server 에보내고 Web Server 는사용자가접근권한을가지고있는지확인하기위하여이름과암호화된패스워드가있는파일을열고해당정보들을검색한다. 그리고검색된정보에서사용자명과패스워드의일치를확인하고문제가없으면사용자에게정당한권리를부여하는방식이다. 이는개인별로나누어서접근권한의설정도가능하고몇몇사람들을그룹으로묶어서접속권한을주거나거부하도록설정하는것도가능하다. 물론전체모든사용자들에대한설정도가능하다. 실제 Browser 와 Server 간의작동은다음과같다. 먼저사용자가어떤 Server 에접속하고이어서어떤자료를요청한다고하자. 이때사용자가요청한자료가 Server 가보기에중요한자료이기때문에특정사용자들만보거나실행할수있는권한이있다면, Server 는사용자에게 Authentication Required [HTTP 401] 신호를전달한다. 그러면사용자는 Web Server 에자신의사용자명과패스워드를같이보내고이를가지고 Web Server 는사용자의인증을수행한다. 이때, 사용자의사용자명과패스워드가 Internet 상으로나가게되는데만약이에대한정보를누군가중간에서볼수있다면 150
153 관리자안내서 문제가될수있다. 이에, 사용자의사용자명과패스워드를암호화하여보내는방법을취하고있다. 11.3SSL (Secure Socket Layer) 에서는현재많이퍼져나가고있고앞으로계속늘어날전자상거래사이트를위해서안전한보안방식인 Secure Socket Layer (SSL) 을제공한다. 에서구현된 SSL 을이용하기이전에먼저 SSL 에대한것을짚고넘어가자. SSL 은 Web Server 가제공하는것이기때문에 SSL 에대한내용만이해한다면, 사용하는방법은아주간단하다 SSL v3.0 Netscape 사에서개발한암호화전송프로토콜 (RC2, RC4 로암호화 ) X.509 Certificate 를이용하여서버와 Client 간의인증을한다. 40bit 키를사용하는 SSL 은보안에있어서신뢰를주지못하고, 128bit 키의 SSL 을사용하여야하며현재 SSL version 은 3.0 이다. SSL 은 Layer 를기반으로하는 Protocol 이다. 각 Layer 의 Message 는 length, description, content field 들을포함할수있다. SSL 이전송해야할 Message 를가질때, SSL 은그것을제어가능한크기의 block 으로나누고, 선택적으로 Data 압축과정을거친후, MAC 을추가하고암호화를한후, 결과를전송한다. Data 가도착하게되면복호화를하고 MAC(Message Authentication Code) 을 Verify 한후, 압축된 Data 를원상태로만들고, Block 을재배열하여얻어진 Message 를상위레벨로넘겨주게된다. SSL 을사용하기위해서는우리가흔히사용하는 URL 표기방식인 " 대신에 " 을사용해야한다. ( 물론 SSL 을지원하는 Web Serv er Port 번호 80 에연결을할경우에만가능하다 ). 보통의경우 (http) 에을사용하는데 SSL 을사용할경우 (https) 에는 Port 번호 443 을 호출하므로 하나의 브라우저를 이용하여 " 와 " 를동시에사용할수가있다. SSL 이작동하기위하여필요한사전작업들이 "handshake" 과정에서수행된다. 이작업들을정리하면다음과같다. Client 와서버가서로자신의인증서(Certificate) 를교환한다. 그리고각각은자신이받은인증서에기록되어있는유효기간, 서명을확인한다. Client 는이후에수행될암호화와메시지인증코드(MAC : Message Authentication Co de) 의생성에필요한난수 ( 비밀키 ) 를생성하여이것을서버의 151
154 관리자안내서 공개키로암호화하여서버에게전송한다. 서비스를받는동안사용할암호화알고리즘과해쉬함수의종류를결정한다. 이과정에서는 Client 는자신이받아들일수있는암호화알고리즘의리스트를서버에게제시하고이들중에서하나를서버가선택한다 SSL vs. SHTTP SSL 과 SHTTP 는가끔그관계가혼동되는데사실이두가지프로토콜은그성격이많이다른것이다. SHTTP 는 EIT(Enterprise Integration Technology) 에서개발한프로토콜로서기존의 HTTP 프로토콜에보안기능을갖게하기위하여몇가지의헤더를추가한것이다. 앞서설명한것과같이 SSL 은서비스를단위로암호화와인증을받지만 SHTTP 의경우에는전달되는메시지를단위로암호화와인증을받는다. SSL 과비슷한점이있다면 Client 가서버에게 SHTTP 를이용한커넥션을만드는과정에서다양한종류의암호화기법들중에서하나를선택할수있고암호화의정도를선택할수있다는점이다. SHTTP 가지원하는암호화기법의특징을정리하면다음과같다. 알고리즘 : RSA, Diffie-Hellman 또는 Kerberos 인증기법을사용한다. 공개키인증서 (certificate) 양식 : X.509 또는 PKCS-6 를사용한다. 디지탈서명알고리즘 : RSA 또는 DSA(Digital Signature Algorithm) 를사용한다 SSL Encryption 40bit 냐, 128bit 냐하는것은주어진 Data 를 Encoding 하는데필요한 Key 의길이이고, 이것이길수록훨씬안전하다. 보통 SSL 등을지원하는 apache-ssl 이나 Netscape, IIS 등은자체적으로 128bit 를지원하나, 이러한 128 bit Encryption 을지원하기위해서는 Server 뿐만아니라 Client 역시이를지원해야한다. 그러나미국에서만들어진대부분의소프트웨어 (IE5.0 이나 Netscpe4.5 등 ) 들은 128bit 수출금지법에의해국내에서는 40bit 로만동작하게되어, 미국에서사용하는경우라면 MS Site 에서 128bit upgrade patch 를받을수있으나, 국내에서는그사용이불가능하다. ( 일부자료실에등록되어있는경우도있다.) 따라서국내 browser 에서 128bit strong encryption 을지원하기위해서는 Browser 와독립적인국내에서제작된 128bit Gateway Software( 내부적으로는 proxy 기법을이용 ) 를이용하는것이보다보편적인추세이며이경우, 특정한국내 site 접속에는문제가 152
155 관리자안내서 없으나국제적인 Internet Banking 등을이용하기위해서는여전히한계가있다 Ciphers Ciphers 는암호화에사용되는알고리즘이고, 더욱더안전하고강력한것들을선택할수있다. 일반적으로 Ciphers 가암호화할때더많은비트를사용할수록그데이터를해독하기가더어렵고어떠한양방향암호화과정에서도양자는같은 Cipher 를사용해야한다. 이러한 Cipher 에는여러가지종류가있어서서버는가장많이알려진것을사용할수있어야하고, Client 가서버와의 SSL 접속을시작하면정보를암호화하는데선호하는 Cipher 를서버에알리게된다 인증서비스 인증기관 (Certificate Authority) 인터넷과같은개방형통신망에서일어날수있는사용자데이터의보안및사용자신원인증을위한방법으로는공개키암호화알고리즘이있다. 이알고리즘은데이터를암호화하는키와암호화된문을해독하는키가쌍으로구성된다. 비밀키는해독할사람본인이가지고있고, 공개키는공개하여, 다른사람들이비밀키의소유자에게메시지를전할때그공개키로암호화해서보내는방식이다. 이방법에서문제가되는것은그공개열쇠가정말로사용자본인의것인가아닌가하는점인데, 이를확인하기위해공개키를증명해주는기관을따로두게되며, 이를인증기관 (Certification Authority, CA) 이라한다. 이와같이메시지송신자와수신자가모두신뢰할수있는제 3 의인증기관을바탕으로그인증기관에서발행하는사용자인증서를상호교환및확인을통하여원격지상대방의신원인증및송수신되는데이터의보안을하게된다. 인증기관에서발행하는인증서에는인증기관인증서 (CA Root 인증서 ), Web Server 인증서, 사용자인증서의세종류로구분한다 인증서( Certificate) 인증서란어떤소프트웨어나어떤기관, 혹은개인을보증하는 Q 마크와같은것이다. 잘모르는신제품에대하여고객은 KS 나 Q 마크를믿고그제품을구입하게되는데인터넷에서도이와같은 153
156 관리자안내서 개념으로도입된것이인증서인것이다. 반대로상점의입장에서보면물건을사러온고객의옷차림이나생김새로믿어도좋은사람인지무엇을훔치러들어온사람인지를대략적으로알수가있고고객의신분증을보고신용카드거래를허용하는일을할수도있다. 이와같이인증서는사용하는입장에서보면 ' 서버인증서 ' 와 'Client 인증서 ' 2 가지로나누어볼수있고 tree 구조를따라보다상위기관에서그신뢰도를인증하는계층구조로이루어져있는것이보통이며사용자데이터보호와사용자신원의추가확인용으로만사용될뿐, 전자서명용으로사용할때는전자서명법에의한법적효력을갖지않는것이보다일반적이다. 이러한온라인인증서는인증하고자하는대상에관한몇가지내용을기술한문서라고볼수있는데개인적으로만들수도있고발급기관에요청할수있으며그형식은 ITU (International Telecommunication Union) 에서제정한 X.509 의양식또는 RSA Data Security 사에서제정한 PKCS-6 의양식및 PEM 을따르는인증서를사용한다. 이러한인증서는 cert.crt 와같은형식으로배포될수있으며이것은 Private Key 를제외하고배포되는 Public Key 라고생각할수있다. 다음은 PKCS-6 의예이다. Certificate: Data: Version: 0 (0x0) Serial Number: 02:41:00:00: Signature Algorithm: MD2 digest with RSA Encryption Issuer: C=US, O=RSA Data Security, Inc., OU=Secure Server Certification Authority Validity: Not Before: Wed Nov 9 15:54: Not After: Fri Dec 31 15:54: Subject: C=US, O=RSA Data Security, Inc., OU=Secure Server Certification Authority Subject Public Key Info: Public Key Algorithm: RSA Encryption Public Key: Modulus: 00:92:ce:7a:c1:ae:83:3e:5a:aa:89:83:57:ac:25: 01:76:0c:ad:ae:8e:2c:37:ce:eb:35:78:64:54:03: e5:84:40:51:c9:bf:8f:08:e2:8a:82:08:d2:16:86: 37:55:e9:b1:21:02:ad:76:68:81:9a:05:a2:4b:c9: 4b:25:66:22:56:6c:88:07:8f:f7:81:59:6d:84:07: 154
157 관리자안내서 65:70:13:71:76:3e:9b:77:4c:e3:50:89:56:98:48: b9:1d:a7:29:1a:13:2e:4a:11:59:9c:1e:15:d5:49: dd:2d:d6:c8:1e:7b Exponent: (0x10001) Signature Algorithm: MD2 digest with RSA Encryption Signature: 88:d1:d1:79:21:ce:e2:8b:e8:f8:c1:7d:34:53:3f:61:83:d: b6:0b:38:17:b6:e8:be:21:8d:8f:00:b8:8b:53:7e:44:67:1: 22:bd:97:27:e0:9c:85:cc:4a:f6:85:3b:b2:e2:be:92:d3:e: 0d:e9:af:5c:0e:0c:46:95:ff:a1:1c:5e:3e:e8:36:58:7a:7: a6:0a:f8:22:11:6b:c3:09:38:7e:26:bb:73:ef:00:bd:02:a: f3:14:0d:30:3f:61:70:7b:20:fe:32:a3:9f:b3:f4:67:52:d: b4:ee:84:8c:96:36:20:de:81:08:83:71:21:8a:0f:9e:a9 위의인증서에서, 1에서는인증서의시리얼번호를표시하였고. 2에서는인증서에서 RSA 암호화알고리즘과 MD2(Message Digest 2) 라는메시지압축알고리즘을사용하였음을나타내고. 3에서는인증서를발급한기관에관한정보를나타내었다. 여기에서 C = country, O = Organization, OU =Organization Unit 를의미한다. 4에서는이인증서의유효기간이 1994 년 11 월 9 일 15 시 54 분 17 초에서부터 1999 년 12 월 31 일 15 시 54 분 17 초까지라고표시하고있다. CA(Certificate Authority) 는인증서를발급해주는기관의서버를의미한다 인증서발급정책 (Certificate Issuing Policy) 위에서살펴본것과같이보다확실한보안통신을위해서는서버뿐만아니라 Client 입장에서의인증서가필요하다. 보다자세히설명하자면, Client 의경우에 " 정말로내가요청한서비스를해줄적법한서버인가?" 를확인하는것이필요할것이고, 서버의경우에 " 정말로서비스를요청한실체가적법한 Client 인가?" 를확인하는작업이다. 보통서버는의무적으로인증서를제공을하고, Client 에서인증서를요구할것인가하는것은발급하는정책에따라여러가지가있을수있는데, 일반적으로다음의 4가지형태로존재하게된다. 0 인증과정 필요없음. No certificate required. 155
158 관리자안내서 1 Client 는 올바른 인증서를 제공할 수도 있다. 인증서가 제공되면, 서버가 가지고 있는 인증서와 일치하는 인증기관 (Certification Authority) 에서인증한것이어야한다. 2 Client 는올바른인증서를반드시제공해야한다. 3 Client 는올바른인증서를제공할수도있다. 그러나반드시 서버의인증기관과일치할필요는없다. 일반적으로, 영화표예매나사이버증권사와같은곳에서는고객의 ID 와 Password 만있으면서버의인증서를바탕으로보안통신이 이루어지게되는 type 0 형식이고, 한국통신에서진행하는 banktown 21c 프로젝트에서는보다확실한보안을위한 type1 의형식이다. 서비스를 이용하기위해서는웹사이트에서 " 인증서제출 " 이란버튼을눌러 인증서를제출하면 ( 일반적으로는 Browser 에서이것을제공하게할 수도있다.) 전자통장이실행되고, 동시서버에서인증서를발급받아 상호간의인증 (Mutual Authentication) 을획득하게되는것이다. type0 과 같이단순히 패스워드를 입력하는방법보다는, 인증서를이용하는 방법이 인증서와 패스워드를 동시에 이용하기 때문에 더욱더 안전하다고할수있다. 우리는흔히은행의 ATM 단말기를이용할 때은행에서 발급한카드를넣고패스워드를입력한후에 현금을 인출한다. 이러한과정에서카드가인증서에해당한다고볼수있다. 따라서우리는이카드를입력함으로써은행의서버에게우리자신의 실체를 알리고카드를입력한사람이적법한사용자임을패스워드 입력을통해서밝히는것이다. 이것은디지탈서명에서사용한방법과 똑같은것이다 Veris ign 에서서버인증서발급받기 Verisign은 세계적으로 가장 유명한 사설인증 기관이다.Verisign homepage인 SSL Server Certificate를선택하면 인증서를 받을수있다. 인증서는돈을주고영구적으로권한을살 수도있고, 일정기간 (14 일 ) trial로사용해볼수도있는데, 실제로 구입하기위해서는약간더복잡한과정이필요하다. 인증서란한 마디로 말하여어떤대상을인증기관에서신용을보증하는것이기 때문에 verisign사는인증서를요청한기관이나업체에사업허가서 등의제반서류를요청하게되는데, D&B라는 Business Database에 등록되어 있다면이러한과정이훨씬간단해질수있고, 현재는주로 미국내의 기업들만이등록되어있다. 위에서가지고 설명한것외에도 SSL 은더복잡한구조와인증방법을있다. 또한, SSL(Secure Socket Layer) 은 TCP Protocol 과 HTTP 156
159 관리자안내서 Protocol Level 사이에있는 Data 를암호화할수있는 Layer 이기때문에, SSL 의암호화를통하여 Data 가 Internet 등의누구에게나 Open 된 Network 으로나간다할지라도암호를해독할가능성이거의없기때문에 Data 에대한보안성이생기게된다. 따라서이는다시한번반복하지만, 보안성이특히중요한전자상거래등에서많이쓰이게되며, 국내에서도대부분의전자상거래에서많은사용자들이이용하고있다. 하지만, 이는 TCP Protocol 과 HTTP Protocol Level 사이에서 Data 를암호화해야하기때문에, 성능상에문제점을초래할수있다. 특히 SSL 을지원하는 Apache 등타 Web Server 에서는 SSL Package 와복잡한연동문제로인하여처리속도가느려지는문제점이발생하게된다. 왜냐하면이들 Web Server 가 SSL 을외부의함수로이용하여자신들의내부 Engine 과결합성이떨어지기때문이다. 이에 에서는이들을내부 Engine 과결합하여, 성능에문제가될수있는모든요인들을제거하고효율성에초점을맞추었다. 실제 SSL 의이용은매우단순하다. 현재사용자들이많이이용하는 Browser 가거의모두 SSL 을지원하기때문에 https 로시작하는사용자요구들을스스로 SSL 로간주하여 Web Server 로보내게된다. 또한, Web Server 에서는이런요구를받아위에서설명한인증방법등을동원하여사용자를인증하게된다. 이는모두 Web Server 와사용자 Browser 내에서이루어지는일로사용자가복잡하게직접관여할필요는없다 Authentication 과 SSL 의이용 Authentication wsmkpw 에서 Authentication 을설정하는방법은앞의 Configuring 절에서설명하였다. 그러나 Authentication 을이용하기위해서는 에서의설정뿐아니라, 실제사용자의사용자명과패스워드를만들어서저장하여야할필요가있다. 를먼저설치한다음 가설치된 Directory 를보면실제실행파일들이있는 bin/ 디렉토리아래에 wsmkpw 라는실행파일이있는것을볼수있다. 이 wsmkpw 라는실행파일을통하여사용자명과패스워드를만들어낼수있다. wsmkpw 툴은다음과같이실행한다 : 157
160 관리자안내서 $ wsmkpw <file_name_path> <user_name> 옵션 file_name : 인증파일이있는전체경로 user_name : 인증에사용될사용자이름 실제수행의간단한예를보면다음과같다. wsmkpw /usr/local/webtob/bin/test newuser New Password: ***** Retype Password: ***** 위와같이하면, /usr/local/webtob/bin 아래에 test 라는파일이생기고 newuser 라는새로운사용자가저장된다. 그리고내부에는입력한패스워드가암호화되어저장된다. 이파일을 이용하여 는실제 Authentication 을수행하는것이다 Authentication 의설정 의설정작업도중 AUTHENT 라는항목을기억할것이다. 이항목에서 UserFile 이라는항목이있는데여기에 test 라는파일을등록하면 가 Authentication 을수행하는과정에서이파일을이용하여 Authentication 작업을하게된다. 앞에서설명한바와같이 wsmkpw 라는실행파일을이용하여사용자명과패스워드를등록한후, 자신의원하는항목에이것을추가하면사용자가그항목에대한요구를하는경우마다 는 Authentication 작업을수행할것이다. 이러한 Authentication 작업은 Web 의초창기에많이이용되었다. 간단한응용으로사용자의인증작업을수행할수있었기때문이다. 그러나이 Authentication 시에사용하는암호화방법이아주일반적이고도해독이가능하기때문에전자상거래를구현한 Site 등에서는많이외면되고있다. 또한사용자의패스워드가인터넷으로흘러들어가게되면서나쁜의도를가진사람들이이패스워드를중간에 capture 하여해독하는사례도발생하면서더강력한인증과암호화방법이강구되었다. 이러한문제가대두되는가운데 Netscape 사에의해서 Secure Socket Layer 라는것이이러한문제를대처하기위하여등장하였다. 이는기존암호화방법을한차원높게만든것으로비록누군가 158
161 관리자안내서 패스워드나사용자명을가져갔다하더라도암호를해독하는것이아주어렵고거의불가능하기때문에보안에완벽을기할수있는방법으로인정받고있다. 에서 Authentication 과 SSL 을이용하기위해서는 의환경파일에이를이용하기위한별도의설정이필요하다. 먼저 Authentication 을이용하기위해서는 AUTHENT 절을설정하여야한다. 이는 에서보안을위하여설정할 Authentication 에대한정의를내리는절이라고할수있다. 그리고이 AUTHENT 절에서선언한것을각각의 Server Group 에선언을해주면된다. 즉, 각 Server Group 단위로 Authentication 을설정하는것이가능하다는것이다. 만약사용자가 CGI 에대해서 Authentication 을이용하고싶다면, 이 CGI 를선언한 Server Group 에 AUTHENT 절에서선언한 Authentication 이름을선언한다. AUTHENT 절은다음과같은구조를가지고있다. *AUTHENT [AUTHENT_NAME] [TYPE], [USERFILE [,GroupFile]] AUTHENT 의이름은사용자가원하는이름을, TYPE 은사용자가이용하고싶은 Encryption 방법을적으면된다. 일반적으로이용되는방법은 Basic 과 MD5, RSA 등이있다. Version 3.0 에서는 Basic 에대한설정만을지원하고있다. 다른기타암호화방법은차후의 Version 에서제공할것이다. 그리고, USERFILE 은위의 AUTHENT 절에서설명한 wsmkpw 란것을이용하여만들어진 Password 파일을말하는것이다. 위의 AUTHENT 절에서설명한방법으로만들어진 Password 파일을이 AUTHENT 에서이용하여야하기때문에그파일의위치를적어야한다. 물론, 당연히그파일은먼저존재하여야한다. 이와같은설정방법을이용하여간단한 AUTHENT 절에대한예제를보이면다음과같다. *AUTHENT authent1 Type = Basic, UserFile = "/usr/local/webtob/bin/pwfile" AUTHENT 절에대한자세한설명은부록 [F.13 AUTHENT] 를참조하기바란다. 159
162 관리자안내서 위와같은설정을하였다면, 사용자가원하는설정으로 Authentication 을이용할기본적인준비가된것이다. 이젠이를이용하여원하는작업에이 AUTHENT 절에서정의한항목을실제로연결하기만하면된다. 이때사용자가이용하는 의환경변수는 AuthentName 이다. 이를이용하여 AUTHENT 절에선언한 Authentic ation 방법을이용하게되는것이다. 간단한예로사용자가 CGI 작업에 Authentication 을설정하고싶다면다음과같은방법으로설정하면된다. (authen1 은위의예에서설정되었다.) <<http.m>> *SVRGROUP cgig NODENAME = webmain, SVRTYPE = CGI, AuthentName = authent1 위와같은형식으로설정하면 는사용자가 CGI Service 를요청할때마다사용자에게 Authentication 작업을수행할것이다. 단, 이때주의할것은이 Authentication 작업이 Server Group 단위로이루어진다는점이다. 따라서이 CGI Group 을설정하면이에대응하는 Server 들은모두 Authentication 작업을수행할것이다. 따라서만약사용자가특정 CGI 는 Authentication 을수행하고또다른 CGI 는아니라면두개의 Server Group 을설정하여야한다. 이에대한예는다음과같다. <<http.m>> *SVRGROUP cgig NODENAME = webmain, SVRTYPE = CGI cgig_authent NODENAME = webmain, SVRTYPE = CGI, AuthentName = authent1 *SERVER cgi1 cgi2 SVGNAME = cgig SVGNAME = cgig_authent *URI uri1 Uri = /cgi-bin/, SVRTYPE = CGI, SVRNAME = cgi1 uri2 Uri = /cgi/, SVRTYPE = CGI, SVRNAME = cgi2 *ALIAS alias1 URI = /cgi-bin/, RealPath = /usr/local/webtob/cgi-bin/ 160
163 관리자안내서 alias2 URI = /cgi/, RealPath = /usr/local/webtob/cgi/ 위와같이두가지로 Group 을설정한후, Authentication 을원하는것은 cgig_authent 라는 Server Group 을이용하여 Server 를설정하고, 다른것들은 cgig 를그대로이용하여설정하면된다. 이런설정은 Server Group 절에선언될수있는모든것에적용된다 SSL 의설정 에서 SSL 을이용하기위해서는별도의설정이필요하다. 이는여타다른 Authentication 이나 Log 절의선언과마찬가지로, SSL 절을선언하여이를이용하는방식으로진행된다. 에서 SSL 을이용하기위해서는먼저 NODE 절이나, 아니면 SSL 을이용하고싶은 Virtual Host 를선언한 VHOST 절에서 SSLFLAG 를선언하여야한다. 기본적으로 는 SSL 을이용하도록되어있지않다. 따라서, 반드시 SSLFLAG 를설정하여야 SSL 을이용할수있다. 이 SSLFLAG 는 Y 와 N 으로설정하는것이가능하다. Y 라는값을기입하면, SSL 을이용한다는것이되고, N 은이와반대의역할을한다. 그러나, SSLFLAG 에대한설정이없으면, 기본적으로 SSL 을이용하는것이아니기때문에, N 은거의쓰일일이없을것이다. 다음은 SSLFLAG 의사용예이다. SSLFLA G = Y 위와같이 SSLFLAG 를 Y 로설정하여 SSL 을이용하겠다고선언한후에는, 이제 SSL 에대한설정을하여주어야한다. 이 SSL 절의형태는다음과같다 : *SSL SSL NAME Certificatefile, CertificateKeyFile, CACertificatePath, CACertificateFile, VerifyDepth, VerifyClient, RandomFile,... 이에대한자세한내용은부록 [F.14 SSL 절 ] 의 SSL 절을참조하기바란다. 이곳에서는기본적인설정에필요한정보만기술할것이다. 그리고이선언한 SSL 을 Authentication 절에서하듯이각각의 SSL 선언을필요로하는절에선언하면된다. 단, 주의할점은 Authentication 은 SVRGROUP 절에서선언하였으나 SSL 절은 Node 절이나 VHOST 절에서 SSL 을이용하는곳에서선언하여야한다. 선언하는방법은 SSLNAME 라는항목을이용한다. 즉, SSLNAME 라는 161
164 관리자안내서 항목에 SSL 절에서선언한것을적어주면된다. 이에대한사용예제는다음과같다. SSLNAME = ssl1 그러면이절에서는 ssl1 에서선언한값을토대로 SSL 을이용하겠다는것이된다. 그리고위에서밝힌바와같이 ssl1 이라는항목은 SSL 절에서이루어진다. 이에대한예는다음과같다. *SSL ssl1 CertificateFile = "/ u ser/webtob/ ssl/newcert.pem", CertificateKeyFile = "/user/webtob/ssl/newcert.pem", RandomFile = VerifyDepth = 10, "/user/webtob/bin/.rnd, 2048", RandomFilePerConnection = "/user/webtob/bin/.rnd, 512", VerifyClient = 0, FakeBasicAuth = Y 이와같이 ssl1 을선언하였고이를실제적용하는방법에대한예는다음과같다. ( 이방법은 Authentication 과거의같은방식이다.) *NODE test <<http.m>> WEBTOBDIR= /user/webtob, SHMKEY=69000, HTH=1, PORT=80, SSLFLAG=Y, SSLNAME= ssl1,... 위의예를보면, NODE 절에서 SSL 을이용하기위해서 SSLFLAG 라는항목을선언하고이어서 SSLNAME 이라는것을선언하였음을알수있다. 그리고 SSLNAME= ssl1 이라는항목에의해이 NODE 는 ssl1 에서정의된항목을통해서 SSL Service 를한다는것을알수있다. 우리는앞의설정파일의개념이라는절을통해서 DOMAIN 이나 NODE 절에서선언한값을그이후에선언되는절에서새로재정의할수있다는것을알았다. 그것은이 SSL 에서도유효하게되는데, 이때, Virtual Host 를정의하면서이와같은개념이적용된다. 즉, NODE 절에서 SSLFLAG 를 Y 로선언하면이후에선언되는 Virtual Host 를선언하는 VHOST 절에서기본적으로 SSL 이적용되게된다. 162
165 관리자안내서 따라서, 굳이 SSLFLAG=Y 라고 VHOST 절에서선언을하지않아도 SSL 을자동적으로이용할수있게된다는것이다. 이때만약사용자가특정 VHOST 에서 SSL 을이용하고싶다면 NODE 절의 SSLFLAG = N 으로하고 SSL 을사용하고자하는 VHOST 절의 SSLFLAG=Y 로선언하여 SSL 기능을추가하면된다. 이는그이후의값에는영향을미치지않는다. 즉, NODE 절에서선언한값만이그이후에영향을미치게되는것이다. 그러므로 SSL 을이용하게되는경우이러한상관관계를명확히하여설정을하여야한다. 163
166 관리자안내서 12 JEUS 와의연동 12.1 소개 는 Tmax Soft 에서제공하는차세대 Web Application Server 인 JEUS 와연동되어, 일반 Web Server 에서제공하지못하는기능들을구현할수있다. 일반적인웹서비스를포함한전자상거래에서는보안과트랜잭션등이반드시보장되어야한다. 이기능은 에서도제공하지만대용량의 Data 를다루는일이나사용자의관리등의측면에서는 Web Application Server 인 JEUS 를이용하는것이바람직하다. 설정방법에있어서, Base 이상에서제공되는 JEUS 와의연동방법과 Standard 이상에서제공되는 Servlet Engine 과의연동방법은동일하다 와 JEUS 연동 (Base+) 비교적 간단한 비즈니스 로직을 수행하는 중소규모의 온라인 서비스를 제공하고자 할 경우에는 Servlet Engine 과의 연동만으로도서비스가가능하지만, 대규모의전자상거래시스템을 구축하려한다면 와 JEUS 을연동하여이용하는것이 권장한다 와 JEUS 연동을위한설정 와 JEUS 연동을위해설정해야할파일은다음과같다 환경파일 ( 예 : sample.m) JEUS 환경파일 : WEBMain.xml 와 JEUS 연동을위해서로의값을똑같이해야하는설정은다음과같다. -JEUS 간연결포트번호 164
167 관리자안내서 HTH 수 서버이름 ( 의 JSV 설정서버이름과 JEUS 의 Registration ID ) Process 수 ( 의 MinProc/MaxProc 와 JEUS 의 thread-pool 수 ) 환경파일의설정 NODE 절에다음과같이 HTH 개수와 JEUS 와의연결을맺을 JSVPORT 를추가한다. *NODE HTH= 1, JSVPROT=9999, HTH 에설정된값은 에서 HTH 라는프로세스의개수로서이값과 JEUS 환경파일중 WEBMain.xml 의 <webtoblistener> 하위에있는 <port> 항목값과반드시일치하여야한다. JSVPORT 는웹컨테이너와연결을맺을포트로서실제웹브라우저로서요청을받는포트와는무관하다. 실제웹브라우저와연결을맺는포트는 PORT 라는속성으로설정한다. SVRGROUP 절에 SVRTYPE 이 JSV 인서버그룹을추가한다. *SVRGROUP htmlg NODENAME = webtob1, SVRTYPE = HTML jsvg NODENAME = webtob1, SVRTYPE = JSV SERVER 절에 MyGroup 서비스를추가한다. *SERVER html SVGNAME = htmlg, MinProc = 2, MaxProc = 10 MyGroup SVGNAME = jsvg, MinProc = 4, MaxProc = 10 실제로웹컨테이너와연결하여작업을할서버를설정하는데위의예에서서버의이름으로 MyGroup 이고서버그룹의이름은 SVRGROUP 부분에서설정한 jsvg 이다. MinProc 은웹컨테이너와의최소연결개수이고 MaxProc 은웹컨테이너와의최대연결개수이다. 이개수들은 JEUS 165
168 관리자안내서 환경파일중 WEBMain.xml 의 <webtob-listener> 하위에있는 <thread-pool> 설정값과각각일치하거나커야한다. URI 절에 MyGroup 서비스에대한 uri 를추가한다. *URI uri1 Uri = /examples/, SVRTYPE = JSV, SVRNAME = MyGroup URI 부분은어떤 URI 가요청이되었을 때어떤서버를 수행시킬지를 지정하는 것으로 위의 예에서 /examples/ URI 에 대해 JSV 서버, 즉 MyGroup 이라는 서버를 수행시키도록설정되어있다. 확장자가.jsp 인파일을이용하기위해서이를 EXT 절에 추가한다. *EXT jsp MimeType = application/jsp, SVRTYPE = JSV EXT 부분에서는어떤확장자를가진파일의요청에어떤서버를수행시킬지를지정하는것으로위의예에서는 jsp 라는확장자에대해 JSV 서버를실행시키도록설정되어있다 JEUS 환경파일의설정 와의연결설정을위해선아래경로에있는 WEBMain.xml 을수정해야한다. $JEUS_HOME/config/<node_name>/<node_name>_servlet_<engine_name>/ Port 값은 Servlet Engine 웹컨테이너와 와의연결을맺을 Port 를번호를설정하는것으로 sample.m 의 JSVPORT 값과일치해야한다. <webserver-connection> 내의 <webtob-listener> 하위에있는 <hthcount> 는 와연결할포트의개수로서 sample.m 에서 NODE 부분의 HTH 설정값과일치해야한다. RegistrationID 의값은 와처음연결을맺을때등록과정중사용할등록 ID 로서 sample.m 의 SERVER 부분의서버이름 (MyGroup) 과같아야한다. 이값을 default 라고하면이 166
169 관리자안내서 Connection 태그가속한 ContextGroup 의 ContextGroupName 속성값이 RegistrationID 로사용된다. <webserver-conneciton> 내의 <webtob-listener> 하위에있는 <thread-pool> 태그에 <min>, <max> 값을설정해야한다. 이값은쓰레드풀에최소한유지되어야하는쓰레드의개수를정의하는것으로다음과같이 환경파일에정의한 MyGroup server 에대한 MinProc 값과일치하거나적어야한다. <webtob-address> 에는지정해준다. 연결을맺을 의 IP 어드레스를 하나의컨텍스트그룹은여러개의웹서버연결을가질수있다. 이때지켜야할것은각각의연결마다포트번호가달라야한다는것이다. 이렇게여러개의웹서버연결을가지는것은웹서버가여러노드에존재할때나다른종류의웹서버로부터요청을받을때에사용한다. <webtob-listener> <listener-id>webtob1</listener-id> <port> 9999</ port> <webtob-address> </webtob-address> <registration-id>mygroup</registration-id> <hth-count>1</hth-count> <thread-pool> <min>10</min> <max>10</max> <step>0</step> <max-idle-time>1000</max-idle-time> </ thread-pool> </webtob-listener> 와 JEUS 연결의특징 와 JEUS 를기동할때중요한것이기동하는순서이다. 현재구조상 JEUS 에서연결을맺으려하는것을 가 Listen 하는상태이므로, 먼저 를기동시켜야한다. 가기동되어 JEUS 와의연결을위한 Port 에서 Listen 상태로되어있고, JEUS 가기동되면서 와연결을맺는다. 연결이성공하면연결이성공되었다는메세지가나오게되고이후 Servlet 이나 JSP 등 JEUS 의 Servlet Engine 을이용해야하는사용자의요구는모두이 Port 를통해서 JEUS 에전달되어처리된다. 167
170 관리자안내서 는 JEUS 웹어플리케이션서버의 default Web Server 로서기존의모든 Web Server 의처리를담당해준다. 즉정적인페이지의전송, CGI, SSI, PHP 등일반적인 Web Server 의작업을처리해주며 Servlet 이나 JSP 등의요청이왔을때 JEUS 웹컨테이너로요청을넘겨주게되고결과를받아클라이언트측으로전송해준다. 여기서주의할점은내장 Web Server 나 Apache 의연결과는다르게 의경우반드시 가먼저기동이되어있어야한다. 그것은연결을처음설정하는과정에서 가기다리는역할을하기때문이다. 하지만연결이설정된이후에는다른것과마찬가지로 가웹컨테이너의클라이언트역할을해서요청을넘겨주고결과를받는다. 또한 와 JEUS 와의연결은 persistent connection 이므로중간에네트워크오류나서버의문제가생기지않는이상은연결을끊지않고재사용한다 Servlet Engine 기동및종료 명령어모드에서다음의단계별로 와 Servlet Engine 을기동시키도록한다. Step 1 환경파일을컴파일한다. C:\ > wscfl i sample.m Step 2 를기동시킨다. C:\ >wsboot Step 3 아래명령어를사용하여 JEUS Manager 를시작한다. C:\ >jeus Note : 위의 jeus Command Line 이적용되지않으면 Java version 을확인한다. 만약 HotSpot 이설치되어있지않은경우에는아래와같은 Command Line 을수행해서 Servlet Engine Manager 를기동시킨다. C:\>jeusp JEUS Manager 는시작하면서여러개의관리자및서버 JNDI 서버, 장애관리자 (fail-over checker) - 를시작한다. JEUS Manager 는 JEUS 구조중가장하단에위치하며가장먼저수행되어야한다. 168
171 관리자안내서 종료는 jeusadmin 명령어를이용하여종료한다. Step 4 Servlet Engine 을부팅하기위해서인증과정을거쳐 jeusadmin 콘솔툴을이용한다. C:\>jeusadmin webtob1 [ErrorMsgManager] Message Manager is initialized [JeusCommander] Jeus 3.0 Jeus Manager Controller [JeusCommander] Login >administrator [JeusCommander] Password > [JeusCommander] [administrator] login successful webtob1> 여기서 webtob1 는 JEUS 를시작한노드로써해당노드에대해권한이있는 UserName 과그에따른 Password 인증과정을거쳐야 jeusadmin 명령어를이용할수있다. Note : ID 는 default 로 adminstrator 이고, Password 값은설치과정에서입력한 password 값을기억하여입력하면된다. Step 5 다음과같이 JEUS 를부팅하여 와연동시키므로써원하는서비스를이용하게된다. webtob1> boot 부팅과정은두단계로이루어진다. 먼저, JEUS 서비스를시작한후각각의엔진을시작한다. JEUS 서비스시작과정을살펴보면위명령은 JEUS Manager 로전달된다. JEUS Manager 는 config/webtob1/jeusmain.xml 을읽어온다. JeusMain.xml 에는클러스터링을구성하는노드에대한정보와백업노드에대한정보가있다. 이들정보를이용해런타임환경을구성한후, 이 webtob1 노드에있는서비스를시작한다. 만일 ser option 을사용하면 JeusMain.conf 의정보를이용해서시작한다. 만약노드가클러스터링을구성하고있다면이때클러스터링이이루어진다. 그러므로노드를시작하기위해서는반드시 JeusMain.xml 또는 JeusMain.conf 파일이반드시생성되어있어야한다. Servlet Engine 서비스가시작한후, 곧바로엔진을시작하느냐는구성파일설정의선택사항이다. 모든엔진은 169
172 관리자안내서 JEUS 서비스가시작한후, 동적으로추가가가능하기때문이다. 그러나노드를시작하면서엔진을시작하는것을권한다. 별도의엔진을시작하려면많은노력이필요하다. 특정엔진만나중에시작하기를원한다면시작엔진리스트에서제외시키기만하면된다. Step 6 JEUS 서비스와엔진을종료하고싶으면다음명령을수행한다. webtob1> down Step 7 사용자인증과정에성공한후, 다음과같은명령어를이용해 JEUS Manager 를종료한다. webtob1>jeusexit 예제부록 [A.2 와 JEUS 연동환경설정] 참조 내장 Servlet Engine 이용방법 (Standard+) Standard 이상부터제공되는 Servlet Engine 연동을위한설정은앞서설명한 JEUS 와의연동설정방법과동일하다. 단, 현재 Servlet Engine 으로제공되는버전은 JEUS 3.x 에해당하므로앞서설명한 JEUS 4.x 의설정과는다소차이가있다 예제부록 [A.2 와 JEUS 연동환경설정 ] 참조 12.4 와 Servlet Engine 의 Clustering 대규모의웹사이트에서대용량의클라이언트요청을원활히수행하기위해서는여러대의서버머신을클러스터링할필요가있다. 여기서는다수의 와다수의웹컨테이너를어떻게클러스터링하는지에대해서알아보기로하겠다. 웹어플리케이션이세션객체를사용하는경우이러한클러스터링환경에서어떻게세션객체를공유할것인지도고려해야한다. 우선은세션객체의공유는 170
173 관리자안내서 없는것으로클러스터링을설명하고그환경에서세션객체를공유하는방법에대해서기술하기로한다. [ 참고 ] 여기서는 내장 Servlet Engine 버전인 JEUS 3 에해당하는설정으로설명한다. JEUS 4 이상인별도의 JEUS 를사용하는경우 JEUS 매뉴얼을참조해야한다 웹서버에전용웹컨테이너를할당하는방식 이방식은하나의 서버에하나이상의전용서블릿엔진( 웹컨테이너와같은개념 ) 을할당하는방식이다. 서블릿엔진은물리적으로다른노드에있을수있다. 아래에이방식의예를그림으로나타내었다. 그림 23. 를이용한서블릿엔진클러스터링 이방식을사용하면, 웹컨테이너는하나의 에대한 thread pool 만가지고있으면되므로 pool 관리가간편하다. 또한, 다음절에 설명할방식에비해서 와웹 컨테이너 사이의연결 수를 상대적으로작게할수있다. 이방식에서웹컨테이너사이에세션객체를공유하려면 Session Server 에의한방식을사용해야한다. 가서비스를제공하는모든서블릿엔진과의연결을가지고있지않기때문에 session routing 에의한세션객체공유는불가능하다. session routing 기능을사용하기위해서는위그림의 load balancer 를 로사용하면 171
174 관리자안내서 가능하다. 자세한세션설정방법은본장의 Distributed Session 절을참조하도록한다. Servlet Engine 웹컨테이너내에 Servlet Engine 을하나이상설정하고자한다면, JeusMain.xml 에 EngineCommand 를추가해주어야한다. 이때, 같은 Type 의 Engine 을추가하려면, 새로운 EngineContainer 를생성한다음에추가하고자하는 EngineCommand 를추가할수있다 웹서버가웹컨테이너를공유하는방식 이방식은 서버가모든서블릿엔진과하나이상의연결을맺는방식이다. 서블릿엔진은물리적으로다른노드의 JEUS 에있거나하나의 Servlet Engine 서버에의해관리되는서블릿엔진들일수있다. 아래에이방식의예를그림으로나타내었다. 편의상 Servlet Engine 웹컨테이너는한노드에하나씩만기동되는것으로나타내었다. 가서비스를제공하는모든서블릿엔진과연결을맺고있기때문에세션객체를공유하는방법으로 session routing 을사용하는것이가능하다. Session Server 는장애가발생하는경우를대비하기위해선택적으로사용할수있다. 서블릿엔진이모든 와연결을맺어야하므로모든서블릿엔진환경파일에 Webtob Listener 를설정해야한다. 그이외의설정방법은앞절의내용과동일하다. 그림 를이용한서블릿엔진클러스터링 2 172
175 관리자안내서 Distributed Session 분산세션(Distributed Session) 이라는것은여러개의웹컨테이너가서로의세션객체를공유하기위하여클러스터링하는것을말한다. 부하조절 (load balancing) 이나장애대책을위해동일한서비스를제공하는다수의웹컨테이너를다른노드혹은, 같은노드에여러개기동시킬필요가있다. 이러한환경에서는동일한클라이언트에의한요청일지라도서로다른웹컨테이너에서서비스될수가있다. 이때, 웹컨테이너사이에세션객체가공유되지않는다면세션객체를사용하는서비스에서세션을지속적으로유지할수없기때문에원하는서비스를제공할수없다. 웹컨테이너에서는이러한분산환경에서도세션객체를공유할수있게하여세션을계속유지시킬수있는기능을제공하며이를세션클러스터링 (session clustering) 이라한다. 웹컨테이너에서는다음과같은 3가지방식의 session clustering 기법을제공한다. Session routing 기법 Session server 에의한 session clustering 위의두가지방식을결합한 session clustering 부하조절이나장애대책을위해여러노드의 Servlet Engine 을기동시킬경우, 각노드의환경변수 W2B_S_BASEPORT 값이일치하여야한다 session routing Session r outing 기법은웹컨테이너의웹서버로서 나 Apache 를사용하고웹서버에다수의웹컨테이너가연결되었을경우사용할수있는기법이다. 기본알고리즘은 Apache Web Server 와 Jserv servlet engine 사이에서제공하는 load balancing 기법과동일하다. 세션객체를최초로생성한웹컨테이너는 session 구분자인 Cookie 에자신의구분자 (servlet engine identifier) 를삽입한다. 웹서버는이 Cookie 값을조사하여세션객체가생성된웹컨테이너로클라이언트요청을 routing 해준다. 이러한방법의장점은알고리즘이간단하고시스템리소스 ( 처리시간, 메모리등 ) 를적게소비한다는것이다. 단점으로는웹컨테이너장애발생시세션객체를복구할수없다는것이다. 해당세션을처리할 173
176 관리자안내서 웹컨테이너가장애로인하여더이상서비스할수없다고판단되는경우, 웹서버는정상동작하고있는다른웹컨테이너로클라이언트요청을 routing 해준다. 이전에서비스하던세션객체는장애가발생한웹컨테이너와함께사라졌기때문에대신서비스하는웹컨테이너는새로운세션객체를생성한다. 따라서일시적으로세션이깨지는현상을막을수는없다. session routing 기능을이용하려면환경파일에여러가지설정을추가해야한다. 자세한사항은 설정부분에서살펴보도록한다 session server Session server 에의한 session clustering 기법을이용하면부하조절기능은물론, 장애발생시세션객체를복구하여장애발생전의세션정보를그대로유지해줄수가있다. 또한 Session server 는자신의 backup session server 를설정할수가있어서 session server 에장애가발생한경우에도완벽한세션정보복구가가능하다. 세션서버를사용하면웹서버는현재요청된클라이언트요청을어떤웹컨테이너로보내야할지를생각하지않아도된다. 자신의 routing 방법에따라서비스할웹컨테이너를선택하여요청을보내면된다. 백업세션서버는선택적으로사용할수있다. 백업세션서버는주 세션서버가동작하는동안은주기적으로세션서버에저장된세션 정보를백업하는역할을하다가주세션서버에 장애가발생하여웹 컨테이너들이자신에게세션정보를요청하면그때, 주세션서버 처럼동작하게된다. 백업세션서버는동작중에동적으로지정해줄 수도있으며주세션서버가다시 동작할수있게되었을때세션 서버의역할을주세션서버로넘기고자신은다시백업기능을 수행하게 된다. 자세한 설정 사항은 설정 부분에서 살펴보도록 한다 혼합방식 Session routing 에의한방식은세션객체를웹컨테이너내부에서관리하기때문에실행속도가빠르나장애가발생할경우세션이진행중인세션객체를모두잃어버려복구가불가능한단점이있다. Session server 에의한방식은모든세션객체를중앙 session server 에저장하기때문에특정웹컨테이너에장애가발생하더라도세션객체를잃어버리는경우가발생하지않는다. 특정웹컨테이너에장애가발생하더라도웹컨테이너에의해세션을지속시킬수있다. 174
177 관리자안내서 그러나서비스요청때마다세션객체를 session server 로부터가져오고세션객체가업데이트될경우다시 session server 에저장해야하므로 session routing 에의한방법보다실행속도가느리다는단점이있다. 혼합방식은이두방식의단점을보완할수있는방식이다. 두가지방식으로혼합할경우세션객체는중앙 session server 와해당세션객체를생성한웹컨테이너에도존재한다. 정상적인경우가장최근에업데이트된세션객체는그세션객체를생성시킨웹컨테이너에존재하므로 session server 로부터세션객체를가져올필요가없다. 서비스처리종료후세션객체가업데이트된경우만 session server 에업데이트하면된다. 따라서 session server 방식만사용하는경우에비해서네트워크사용량이약절반으로감소한다. Session server 에는가장최근의세션객체가저장되어있으므로특정웹컨테이너에장애가발생하더라도세션복구가가능하다 설정 session routing 또는 session server 에의한 session clustering 은웹컨테이너설정외에웹서버의설정등이부가적으로필요하다. container.xml 의설정 <DistributedSession SessionRouting="true"> <SessionServer ServerName="session1" </SessionServer> </DistributedSession> BackupServerName= session2 InitCapacity="1" MaxCapacity="3" IncrementRate="1" TimeoutMilliSec="10000"> 분산세션을설정하기위한태그는 <DistributedSession> 이다. SessionRouting 속성은이웹컨테이너가 session routing 을실시할지여부를결정한다. <SessionServer> 태그는 session server 로서사용할서버를결정한다. ServerName, MaxCapacity 속성은필수적으로설정해야한다. ServerName, BackupServerName 은 JeusMain.xml 에설정된 session server 의 export name 을기입해야한다. 175
178 관리자안내서 InitCapacity, MaxCapacity, IncrementRate, TimeoutMilliSec 는 session server 로의 socket connection pool 관련설정으로서각각초기연결수, 최대연결수, 연결을새로추가할때한번에맺을연결수, connection pool 로부터연결을가져올때의최대대기시간을의미한다. 위와같이설정하면다음과같은의미가된다. Session routing 에의한세션클러스터링이 enable 됨 Session server 에의한세션클러스터링이 enable 됨 Session server 의 export name 은 session1 이다. 백업 session server 를사용하며그 export name 은 session2 이다. Session server 다. 로의 connection pool 의초기연결개수는 1 이 Connection pool 의최대연결개수는 3이다. 연결증가율은 1 이다. Connection pool 로부터연결을가져오는데최대대기시간은 10 초이다. JeusMain.xml 의설정 세션서버는 Servlet Engine Web Container 내부에존재하지않고 Servlet Engine Server 내부에존재한다. 세션서버에의한세션클러스터링을하기위해서는 JeusMain.xml 에세션서버및백업세션서버관련설정을하여 Servlet Engine Server 가세션서버를기동시킬수있어야한다. JeusMain.xml 에대한전반적인이해는 Web Container Guide 매뉴얼을참조하기바란다. 여기서는세션서버에관련된부분만설명하기로하겠다. <SessionServer> <Resolution>60000</Resolution> <SessionManager> <SessionName>session1</SessionName> 176
179 관리자안내서 <SessionExportName>session1</SessionExportName> <PassivationTO>-1</PassivationTO> <RemovalTO>-1</RemovalTO> <FileDBPath/> <FileDBName/> <MinHole>1000</MinHole> <PackingRate>0.5</PackingRate> <CheckTO>30000</CheckTO> <OperationTO>30000</OperationTO> <BackupName>session2</BackupName> <BackupTrigger>1000</BackupTrigger> </SessionManager> </SessionServer> Resolution(optional) : 세션객체의 passivation/removal 를결정하는 thread 의체크주기. 기본값은 60000(60 초 ) 이다. (milli-second 단위 ) SessionName(required) : session server 의이름 SessionExportName(required) : session server 의 export name. Container.xml 의 ServerName/BackupServerName 속성에이이름을적어야한다. PassivationTO(optional) : cachedsession 중에이시간동안엑세스되지않은세션객체는메모리절약과빠른검색을위해 SessionStorage 로 passivation 된다. 기본값은 1 이고 passivation 을시도하지않겠다는뜻이다.(milli-second 단위 ) RemovalTO(optional) : SessionStorage 에저장된세션객체중에이시간동안엑세스되지않은세션객체는영구히제거된다. 이시간은 session timeout 값보다작아서는안된다. 기본값은 1 이고 removal 을시도하지않겠다는뜻이다.(milli-second 단위 ) FileDBPath(optional) : SessionStorage 가사용할저장파일이위치할디렉토리. 설정하지않으면기본값으로 %JEUS_HOME%\workspace 가된다. FileDBName(optional) : SessionStorage 가사용할저장파일의이름. 설정하지않으면기본값으로 SessionName.fdb 가된다. 177
180 관리자안내서 MinHole(optional) : fdb 파일검색속도를향상시키기위해 fdb 파일을재정리하는임계값이다. MinHole 에지정한숫자만큼 fdb 파일을엑세스하게되면 fdb 파일은다시정리한다. 기본값은 1000 이다. PackingRate(optional) : MinHole 과마찬가지로 fdb 파일을재정리하는임계값을나타낸다. (fdb 파일엑세스회수)/(fdb 파일에저장된세션객체의수 ) 가이값을넘으면 fdb 파일을재정리한다. 기본값은 0.5 이다. 0~1 사이의값만유효하다. CheckTO(optional) : BackupName 이지정된경우백업주기를지정한다. BackupName 이지정된경우이값은반드시 0 보다커야한다. 기본값은 30000(30 초) 이다.(millisecond 단위 ) OperationTO(optional) : session server 와 web container 사이의통신타임아웃값이다. 기본값은 30000(30 초 ) 이다. (milli-second 단위 ) BackupName( option al) : backup session server 의 export name 이다. BackupTrigger(optional) : CheckTO 시간주기로백업하거나현재백업이이루어지지않은세션객체의수가이값보다크면백업하게된다. 기본값은 1000 이다. 178
181 관리자안내서 13 Multi-Node 사용 (Standard+) 13.1 소개 대규모의사용자를처리하기위해서는 를하나만설치하여이용하기보다는여러개의 를설치하여동시에사용자의요구를처리하게된다. 이는사용자에게안정적인서비스와빠른서비스를가능하게하기때문이다. 이러한 Multi Node 에서의설정은각 Node 를동시에설정하여 를동시에기동시킬수있다는장점도있지만, 특히 의 Load Balancing 이나 Fail-Over 기능을이용할때더욱큰영향을발휘하게된다. 따라서많은사용자를받아들여야하는대용량의사이트를운영하는경우이런환경을갖추는것은필수적이다. 이때, 의 Multi Node 환경을이용한다면이러한환경을갖추는데어려움이없을것이다. 특히 에서지원하는 Load Balancing 이나 Fail-Over 기능들은막강하기때문에더욱큰이점이주어질것이다. 이에본장에서는여러개의 를설치하고이들을동시에 booting 하여관리하는방법에대하여알아볼것이다. 를실행하기위한방법은이미앞에서충분히설명이되었을것이다. 따라서본장에서는관리자가이미모든기본적인실행준비를완료하였다고가정하고설명할것이다 Daemon) wsracd(web Server Remote Access Control 대규모사용자를관리하기위해서는일반적으로 시스템은여러 Node 로구성되며이에대한중앙관리가필요하다. 중앙관리를위해서 시스템에서는 wsracd 를사용한다. 즉, 각 Node 에 wsracd 를미리설치해둠으로써한 Node 에서전체 시스템을관리할수있다. 즉, 환경파일컴파일, 시스템기동및종료, 179
182 관리자안내서 동적환경파일변경등의동작을한번의명령으로가능케한다. 결국이 wsracd 라는 Process 를통해서 Multi Node 상의 를 Booting 하거나 Down 시키고관리하는것이다. wsracd 는여러개의 Node 를하나의도메인으로써 시스템을구축하였을경우한 Node 에서 시스템을집중관리하기위해각각의 Node 에서미리기동되는 Daemon 프로세스이다. 도메인내의한 Node 에서 wsadmin 을통하여전체 Node 를관리하거나, 또는환경파일을도메인내의모든 Node 에동일한내용으로적용가능하도록처리하는프로세스이다. wsracd 에대한구동과 option 은다음과같다. Command Option Argument wsracd -k 없음 wsracd 를기동시키기위해서는환경변수에 WEBTOB_RAC_PORT 를설정해주어야하며, 환경변수로설정해줄때에는환경파일에 RacPort 를같은 port 로설정해준다. 환경변수를참조하지않고부팅하기위해서는 "wsracd -k" 로실행하여 wsracd 가사용될 port 를 가지정하는것으로서중앙관리를위한준비를한다. 이때설정되는 port 는 default port 로설정되어있는 3333 port 이다. 결국이 wsracd 란 Process 를통해서모든각 Node 의 webtob 를관리하게되는것이다. 이 wsracd 는 를설치하면 /bin directory 아래에존재한다. 물론각 Node 상에모두이 wsracd 가존재하여야한다. 또한이곳을통하여각 Node 의환경파일정보가전달되기때문에각 wsracd port 가설정되어있거나 default port 로설정된 3333 port 에대한사용권한이있어야한다. 만약이런통신에관련된설정에문제가생긴다면각 Node 간에정보가전달될수없기때문에반드시주의깊게살펴보아야한다. 이 wsracd 에대한통신을설정하는것은환경파일의 Node 절의 RacPort 라는것에대한것이다. 이 RacPort 를원하는 Port 로설정하거나, 기본 port 로놔두어도된다. ( 기본 port 는 3333 port 이다.) 이렇게 wsracd 를이용해 를 Multi node 에서설정하면동시에여러개의 를 booting 시켜서각각의 Node 의 wsracd 를통해서정보가전달된다. 그리고이들 Node 들은모두하나의 Domain 이라는개념에속하게된다. 의환경파일에서가장먼저등장하는 180
183 관리자안내서 Domain 과같다고생각하면된다. 즉, 하나의 Domain 에여러개의 Node 가속하는개념으로되는것이다. 이에대한그림은다음과같다. wsracd process 에대한설정이끝났다면이제 Multi Node 환경하에서환경파일작성과 Compile 에대해서설명하겠다. 이환경파일과환경파일의 Compile 에대한내용은이미앞에서설명한내용이므로간략하게설명하겠다. 그이후실제로 시스템의기동 (wsboot) 과종료 ( wsdown) 방법에대하여설명하겠다 Multi-Node 환경설정 를여러 Node 에서이용하게되는경우, 각각의 Node 에서모두같은환경파일을가지고있어야한다. 그래야각각의정보가서로공유되고, 차후에설명될 Load Balancing 이이루어지기때문이다. 즉, 각 Node 에서하나의환경파일을가지고있고, 이환경파일내에모든 Node 들의정보가포함되어있다. 따라서, 각 Node 에어떠한것이필요하고존재하는지다른 Node 들도알수있고, 다른 Node 에문제가발생하는경우원활하게처리하는것도가능하게된다. 먼저, 환경파일의작성에대하여설명한다. 환경파일의작성은앞절에서이미자세하게설명하였다. 따라서기본적인것은언급하지않고 Multi Node 를위한것만설명할것이다. 181
184 관리자안내서 기본적인환경파일을만드는방법은이미앞에서충분히설명이되었을것이다. 이곳에서는 Multi Node 를위한추가적인설정만을언급하겠다. 아래의파일은일반적인 One Node 에서의 의환경파일이다. *DOMAIN webtob1 *NODE node1 WEBTOBDIR="/usr/local/webtob", SHMKEY = 69000, DOCROOT="/usr/local/webtob/docs", PORT = "5469" *SVRGROUP htmlg cgig NODENAME = node1, SVRTYPE = HTML NODENAME = node1, SVRTYPE = CGI 이런환경파일에서는하나의 Node 만을위한설정이되어있다. 그러나 Multi Node 를이용하기위해서는추가로새로운 Node 들에대한정보를모두공유하고있어야한다. 따라서추가적으로각각의 Node 에대한정보를모두포함하고있어야한다. 만약우리가세개의 Node 를동시에이용하고싶다고한다면, 이세 Node 에대한정보가모두있어야한다. 따라서이에대한환경파일을작성하면다음과같다. *DOMAIN webtob1 *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 =
185 관리자안내서 node3 WEBTOBDIR="/usr/local/webtob", SHMKEY = 69000, DOCROOT="/usr/local/webtob/docs", PORT = "5469", RacPort = 3333 *SVRGROUP htmlg1 cgig1 htmlg2 cgig2 htmlg3 cgig3 NODENAME = node1, SVRTYPE = HTML, COUSIN = htmlg2, htmlg3 NODENAME = node1, SVRTYPE = CGI, COUSIN = cgig2, cgig3 NODENAME = node2, SVRTYPE = HTML NODENAME = node2, SVRTYPE = CGI NODENAME = node3, SVRTYPE = HTML NODENAME = node3, SVRTYPE = CGI *SERVER html1 cgi1 SVGNAME = htmlg1 SVGNAME = cgig1 위의파일을보면, Node 절에 node1 외에 node2 와 node3 가추가된것을알수있을것이다. 이들은다른 Node 들에대한정보를나타내는절이다. 결국, node1 외에도 node2 와 node3 라는 node1 과유사한설정을지닌다른 node 들이존재한다는것이다. ( 물론, 설정이반드시유사할필요는없다. 단지, 이곳에선설명을쉽게하고자가급적유사한설정을이용하였을뿐이다.) 그리고 SVRGROUP 절을보면각 node 들에대한 Server Group 들이각각선언되어있음을알수있다. 이때주의할점은 Multi Node 를사용하는경우에는반드시 COUSIN 항목을설정해주어야한다는것이다. 그리고이후의 SERVER 절에서는 가기본적으로제공하는 Server(HTML, SSI, CGI, PHP) 등은모든 Node 에서설정하지않고 COUSIN 을사용한 SVRGROUP 에해당하는 SERVER 만을설정한다. 183
186 관리자안내서 이렇게하나의환경파일에모든 Node 의정보를넣는이유는앞에서도언급했듯이각 Node 의설정을다른모든 Node 들에게도알려주기위해서다. 이렇게하면 Load Balancing 이나기타다른 Fail- Over 등의기능을설정하거나적용할때간단하게이루어지기때문이다. 이런설정을모든 Node 마다일일이설정해서 Compile 하는것은아니다. wsracd Process 를통해서이런일련의작업을수행할수있기때문이다. 즉, 일반적인환경파일 Compile 작업인 wscfl i test.m ( 환경파일이 test.m 인경우 ) 을수행하면이때 프로세스는 wsracd 프로세스가존재하는지확인한후, 이것이존재하면연결된모든해당 node 들에게환경파일의정보를전달하여주기때문이다. 즉, wscfl 작업후생성되는환경파일의 Binary 파일을각각의 node 에모두전달하여준다. 따라서관리자는한 node 에서만이작업을수행하면된다. 만약관리자가특별한이유가있어서하나의 node 에서만이 wscfl 을수행하고싶다면 n 옵션을이용하면된다. 즉, 환경파일이있는 Node 의이름을 n 옵션이후에넣어주면되는것이다. Ex] $ wscfl i test.m n node1 이제끝난 wscfl 을끝냈으면, 를 booting 하기위한모든준비가것이다. 이젠실제 booting 하는것에대해서알아보겠다. Multi Node 수행시주의사항 에서 Multi Node 를설정할때 wscfl, wsboot, wsdown, wsadmin 등의중앙관리를위한경우다음사항에주의하여야한다. 설정된 Node 의여러 OS 중 NT 또는 Windows 2000 을 이용하는경우파일시스템이 FAT32 인경우에는모든 중앙관리를 NT 또는 Windows 2000 에서수행하도록 한다. 에서 Multi Node 를설정할때 NODE 명을지정하는경우다음사항을주의하여야한다. 현재정의된 NODE Name 이 System 의등록되어있어야한다. Hosts File 에 184
187 관리자안내서 각 NODE 간에서로 Node Name 만으로각각의 Node 를찾을수있어야한다. 즉, 정의된 Node Name 이서로각 Node 간에서확인되어야한다. 이것은각각의다른 Node 에서상대편 Node 를찾을수있는경우에 의 Multi Node 가정상적이고안정적으로수행되기때문이다. 다음의예는 SUN 사의 Solaris 7 Operating System 에서각 Node 를확인하는방법을나타낸것이다. 물론다른 Operating System 에서도비슷한방법을통하여서로상대방 NODE 를확인하는것이가능하다. 예제 ] SUN 사의 S olaris 7 에서상대방 Node 의확인 1. Node 1 에서 Node 2 를확인하는경우, 이때 Full Domain Name 이아니라, 단지 Host Name 만으로확인하여야한다. [ node1/usr/local/webtob]$ping node2 node2 is alive 2. Node 2 에서 Node 1 을확인하는경우, 이때 Full Domain Name 이아니라, 단지 Host Name 만으로확인하여야한다. [node2/usr/local/webtob]$ping node1 node1 is alive Multi-Node 상에서의 기동과종료 시스템을기동하기위해서는앞서언급한바와같이기본환경설정이잘갖추어져있어야한다. 따라서다음과같은사항을다시한번점검해보자. 점검사항 이진 환경파일이존재하는가? 환경파일의 WEBTOBDIR 항목 (*NODE 절) 에설정된 Directory 의 /bin Directory 하에 실행프로그램들이존재하는가? 185
188 관리자안내서 환경파일의 APPDIR 항목 (*NODE 절 ) 에설정된 Directory 에 *SERVER 절에등록된서버프로그램들이존재하는가? 중앙관리를위한 wsracd 가각 Node 에서동작중인가? 를 Booting 하는작업도앞에서설명한 wscfl 과유사한논리로전개된다. 즉, wsboot 라는명령어를기입하면, 이때 process 가 wsracd 프로세스의유무를파악하여, 존재한다면각각의 Node 에이정보를모두보내서모든 Node 에서동시에 가 booting 되는것이다. 따라서사용자는 Booting 을위해서별도의설정이필요없다. 즉, 기존의 wsboot 라는명령어로충분하다. 이역시 wsracd 프로세스를통해서모든정보전달이이루어지기때문이다. 그러나만약관리자가자신의 Node 에서만 를 booting 시키고싶을때는다음과같은추가의 Option 이필요하다 Multi-Node 의한 Node 에서 기동을위한 wsboot 명령어옵션사용자가특별한사정이있어서한 node 에서만 를 booting 하고싶다면아래와같은옵션을이용하면된다. -n : 지정된 Node 에존재하는서버프로세스들을기동시킨다. Node 명은 환경파일내의 NODE 절에미리정의되어있어야한다. ( 멀티 Node 의환경에서는반드시지정되어야한다 ) Ex] $ wsboot n node Multi-Node 의한 Node 에서 종료를위한 wsdown 명령어 옵션 만약사용자가특별한사정이있어서한 node 에서만 를종료하고싶다면아래와같은옵션을이용하면된다. 시스템종료도 wsboot 와마찬가지로이진 환경파일을토대로이루어진다. 시스템에서사용하던공유메모리를없애고기동된 프로세스들과응용서버프로세스들을종료시킨다. 186
189 관리자안내서 -n : 지정된 Node 에존재하는서버프로세스들을종료시킨다. Node 명은 환경파일내의 Node 절에미리정의되어있어야한다. ( 멀티 Node 의환경에서는반드시지정되어야한다.) Ex] $ wsdown n node1 187
190 관리자안내서 14 부하조절 -Load Balancing (Standard+) 현재인터넷기반의 World Wide Web 은날이거듭될수록사용자의수가급속히증가되고있으며모든업무에있어서인터넷혹은인트라넷의의존도가점점높아지고있다. 이는자료의공급과정보공유의편이성등이주요한이유가되기때문이다. 이러한인터넷의확산으로인하여많은사람들이정보화시대에많은정보를쉽게얻을수있으나이로인해인터넷 traffic 또한지속적으로증가되었고, 이는사용자와서버간의응답시간을지연시키는문제를발생하게되었다. 이에대한해법으로하나는서버의성능을향상시켜서응답시간을향상시키는것이고, 또다른하나는네트워크전송속도를높이는방법이다. 서버의성능향상을통한응답시간향상은서버의 CPU, 메모리, 그리고 IO 장치의성능에달려있다. 따라서서버의성능을높이는방안으로는 Processor 의성능을향상시키는것과 Network Card 의성능을향상시키는방법이있다. 그리고네트워크전송속도는주로회선대역폭이좌우하게되므로대역폭을확보하는것이중요한성능향상의요인이된다. 이것뿐아니라부가적으로는사용자의많고적음, 그리고사용자가보내는요구의양에따라좌우된다. 위와같은두가지방법을제시하여문제를해결하려하고있으나현실적으로네트워크의대역폭을마음대로확보한다는것이쉽지않기때문에대부분서버의성능향상에주안점을두게된다. 따라서보통기존서버에메모리를추가하거나 CPU 를더빠른것으로교체하여서버의성능향상을꾀하게된다. 그러나이는한시적인방법일뿐하드웨어상의한계에의해서벽에부딪히게된다. 이렇게되면결국방법은새로운하드웨어를추가하여계속늘려가는방법밖에는없다. 보통이렇게하드웨어를여러개이용하여성능향상을꾀하는것을 Clustering 이라고한다. 이는현재가장현실적이면서도성능향상에도움이되는해법으로많은사용자들이이용하고있다. 보통이런경우아래와같은시스템구조도를가지게된다. 188
191 관리자안내서 결국여러사용자가들어오는경우각각의서버들이일을나누어처리하게되는것이다. 이러한구조는현재많은곳에서이용하고있다. 이때, 가장중요한것은바로일을나누는것이다. 이와같이일을나누어처리하는방법을보통 Load Balancing 이라고부른다. 따라서많은사용자를처리하여야하는곳에서 를이용하는경우이 Load Balancing 이성능에중요한요소가된다. 이에본장에서는다양한 Load Balancing 방법에대해서기술할것이다. 이들중 가없이도가능한것이있으나이들역시 를여러 Node 에설치하고이용할때필요한것이기때문에모두언급할것이다. 본장에서는대표적인 Load Balancing 방법에대해서기술할것이다. 이들중 의 Load Balancing 기능을직접적으로이용한 Load B alancing 구조와방법이있고, 의 Load Balancing 기능이없이도 Load Balancing 에대한구현이가능한방법도있다. 본장에서는이들방법모두에대해서언급한다. 먼저, 의 Load Balancing 기능없이구현가능한 Load Balancing 방법에대해서알아볼것이다. 이들은크게 Layer 4 switch 방법과 Domain Name S erver 이용방법이다. 그리고이어서 의 Load Balancing 방법을직접적으로이용한방법을기술할것이다. 189
192 관리자안내서 14.1 부하조절 방법 Layer 4 Switch 를이용한부하조절이방법은가장일반적이고도많이이용되는방법으로, Layer4 Switch 라는하드웨어장비를이용한방법이다. 이는사용자들의요구를 Layer4 Switch 라는장비가받아서자신에게연결되어있는서버들에게사용자의요구를나누는방법이다. 사용자의요구를분배할때다양한알고리즘의적용이가능하며하드웨어장비를이용하므로속도도상당히빠르다 L4 switch 의개념과종류 L ayer 4 란 OSI 7-Layer 에서의 Layer 4 를의미하는것이다. 이는즉, In ternet 의 WW W 에서 TCP Layer 를말한다. 따라서 Layer 4 Switch 는이 TCP 연결을관리하고이를전달하는역할을한다. WWW 에서이용하는표준 Protocol 인 HTTP Protocol 은 TCP Protocol 위에서작동하기때문에 Layer 4 Switch 를이용하는데아무런문제가없다. 즉, 사용자가서버에접속할때 Layer 4 Switch 가미리연결을맺고실제요구의전달을하는것이다. 이때 Layer 4 Switch 에연결된서버에요구를나누어전달하는것이가능한데, 이때는 Round-Robin 방식으로차례대로요구를전송하거나각환경의특성에맞게다른방법을이용하여할수도있다. 더욱이실제사용자의요구를분배하는주체가되는 Layer 4 Switch 가하드웨어이기때문에상당히빠른속도를보장하는것도가능하다. 그리고이방법을이용하여 Load Balancing 을하는경우에는 에선별도의설정이필요없다. 오로지 를 Layer 4 Switch 에연결하기만하면되는것이다. 물론, Layer 4 switch 에서약간의설정이필요하겠지만, 이는그리어렵지않을것이다. 또한성능자체도상당히만족할만한것이어서아주많이이용된다. 단, 고가의장비를구입하여야하는단점이있다. 이런 Load Balan cing 에대한그림은다음과같다. 190
193 관리자안내서 장점 : 빠른속도, 다양한알고리즘가능 단점 : 고가의장비가필요함 DNS 를이용한부하조절일반적으로사용자가서버에접속할때, 보통 browser 상에서는서버의도메인네임을적는다. 그러면 Domain Name Server 에서이이름을바탕으로이에해당하는 IP Address 를전달하고, 실제로 B rowser 는이 Address 를가지고네트워크연결을맺는다. DNS 를이용한 Load Balancing 에서는이러한특성을이용하게된다. 즉, 사용자가특정도메인네임을적으면 Browser 가 DNS 에게이에해당하는 IP Address 를요청하게되는데이때, DNS 가 IP address 를나누어주는과정에서 Load Balancing 을수행할수있다. 간단한예를들면다음과같다. 사용자가 이때, 사용자가 Browser에 B rowser는 Domain Name Server에실제의 IP Address를요구하게된다. 이때, 이런경우에관리하는사람은당연히이많은사용자의요구를처리하기위하여여러개의서버를동시에관리할것이다. 이때, Domain Name Server에 만약관리자가 10 개의서버를이용한다면, 191
194 관리자안내서 DNS에 10 개의서버를 이런등록은다음과같다 즉, 이라는서버이름에 10 개의 IP Address가등록이가능한셈이다. 이때, DNS가약간의기능을가지고있다면각 IP Address를사용자에게전달할때나누어서전달하는것이가능하게된다. 즉, 첫번째사용자에게는 이라는 IP Address를전달하고두번째사용자에게는 이라는 IP Address를전달하게되는것이다. 이런식으로하면사용자가요구할때마다다른 IP Address를전달하게되고, 자연스럽게 Load Balancing이이루어지는것이다. 이는물론별도의하드웨어장비없이이루어지는것이라비용면에서도많은이득을볼수있다. 하지만단점이있다면 DNS 에직접등록을하거나직접관리를해야하는어려움이있다. 또한 Layer 4 Switch 같이다양한알고리즘을구사하기위해서는고가의추가장비가필요로하게된다. 이에대한그림은다음과같다. 192
195 관리자안내서 장점 : 쉽게 Load Balancing 이구현가능 단점 : 간단한알고리즘만 가능, DNS 의관리를필요로함 앞의두가지방법은 의 Load Balancing 기능을이용하지않고 Load Balancing 을구현한방법이다. 이들은 의특별한설정없이도 Load Balancing 을구현할수있고또좋은성능을낼수있기때문에실제로많이이용된다. 그러나앞에서도설명했듯이이들은고가의장비를필요로하거나추가장비의관리등이부가적으로필요하게된다. 이런일련의것들은관리자에게큰부담으로작용할수있다. 따라서이어지는절에서는 의기능을이용하여부하조절을구현하는방법을설명할것이다 Front-end 를이용한부하조절관리자가여러개의 를설치하고이들의부하를조절하려할때문제가되는것은어떤것이각각의 들에게요구를나누어주는가하는문제이다. 앞에서설명한방법들은모두 에접속하기이전에사용자의요구가나누어져서들어오는방법이므로관리자는이에대한고민은하지않아도된다. 하지만만약앞에서설명한방법을구현하기위한도구들이없는경우에는서버들이모여있는곳에서누군가사용자의요구를분배하여야하는문제가생긴다. 이런문제를해결하기위하여 자체적으로사용자의요구를 193
196 관리자안내서 시스템성능에따라나누거나동적으로, 또는데이터에따라나누어줄수있는기능을가지고있다. 만약여러개의 가연결되어있다면하나의 가사용자의요구를받아서각각의 에사용자의요구를나누어전달하게된다. 이때보통이용되는분배방법은서버의 Load 를설정하여이에따라서사용자의요구를분배하는방식이다. 이경우는특히 Domain Name Server 에하나의 Web Server 만등록하여도 Load Balancing 을구현하는데전혀문제가없다. 사용자가특정 Web Server 에접속을하면이 는자기와연결된각각의 에사용자의요구를분배하기때문이다. 이에대한그림은다음과같다 시스템성능에따른부하조절 Node 의성능이나시스템상황에따라 Node 별로서비스처리량을달리하도록설정하는것이다. 이와같은부하조절이가능하기위해서는한서비스가여러 Node 에서지원되어야한다. 즉, 서비스의이중복사가이루어져야하는데, 194
197 관리자안내서 시스템에서서비스의이중복사는 Server Group 단위로이루어진다. 따라서시스템로드는 Server Group 별로설정된다. SVRGROUP 절 시스템성능에따른부하조절 SVRGROUP 절에정의하는항목들은 환경설정과다음과같다. 관련하여 Server Group 이름 [,COUSIN=( SVRGROUP )] [,LOAD=load-value] COUSIN = literal 크기 : 255 자이내. COUSIN 절에입력되는항목은 Server Group 이름이다. 즉, Server Group 을두개이상의 Server Group 에서부하조절을할경우해당 Server Group 명을정의한다. Server Group 명은반드시이에해당하는절인 SVRGROUP 절에등록되어있어야한다. 시스템의부하조절은기본적으로 Server Group 단위로이루어지며하나의 Server Group 과동일한내용의 Server Group 을다른 Node 에복사하는개념이다. 따라서둘이상의 Node 를통하여부하조절을수행하려는경우이각각의 Node 에정의된 Server Group 의이름을콤마 (,) 로분리해서나열하여정의한다. 그리고이들은모두대상 Server Group( 원본 Server Group) 과동일한 SVRGROUP 이름으로정의되어야한다. 부하조절은 Node 별로이루어지므로복사된 Server Group 들은서로다른 NodeName 을가져야하며, 시스템로드에의한부하조절을위해로드값에대한정의도필요하다. (LOAD 항목참조 ). 이렇게복사된 Server Group 에서는원본 Server Group 에서제공하는 Server 와 Service 들이모두제공된다. 복사 Server Group 의 Server Group 과 Server 의환경은기본적으로원본 Server Group 의 Server Group 과 Server 환경을그대로따른다. 만일 Server 환경을변경하고자하는경우 Server Group 이나 Server 별로관련항목들을재정의하여야한다. Service 의환경옵션은복사 Server Group 별로재정의할수없으며반드시원본 Server Group 의 Service 와동일한환경을갖는다. 195
198 관리자안내서 Server Group 이중복사 를위한환경설정파일예제 *DOMAIN webtob1 *NODE NODE1 NODE2 WEBTOBDIR= /usr/local/webtob, DOCROOT= /usr/local/webtob/docs, SHMKEY = 77990, WEBTOBDIR= /usr/local/webtob, DOCROOT= /usr/local/webtob/docs, SHMKEY = 77990, *SVRGROUP SVG1 NODENAME=NODE1, COUSIN= SVG2, LOAD =3 SVG2 NODENAME=NODE2 SVGNAME = SVG1, SVRTYPE=CGI, URIDIR= /cgi- *SERVER CGI bin/ HTML SVGNAME = SVG2, SVRTYPE=HTML, URIDIR= / 위의예를보면알수있듯이, SVRGROUP 절에서 Server Group SVG1 에 COUSIN 을설정하여 SVG2 와공동으로부하조절을수행하도록설정하였다. 이때 SVG1 은 Node1 으로설정되어있고, SVG2 는 Node2 로설정되어있다. 따라서 Node1 과 Node2 가동시에같이일을처리하게되는것이다. 그리고 Cousin 절뒤에정의된 LOAD 란항목은각각의 Node 에서일을할수있는능력을나타낸것이다. 이에대한자세한설명은아래를참조하기바란다. LOAD = numeric(1) Server Group 의서비스처리능력을의미한다. 값이클수록처리능력이높음을나타내며 Node 가성능이좋아서서비스처리능력이탁월하다면 Load 값을크게설정하여다른 Node 들보다많은 Service 를처리하도록정의한다. 반대로 Node 의성능이저하된다면작은 Load 값을설정하여되도록적은서비스가처리되도록정의해야한다. 이와같이시스템성능에따라부하조절을원한다면 COUSIN 항목설정으로 Server Group 을이중복사한후각각의 Server Group 에대해적절한 Load 값을설정하면된다. 196
199 관리자안내서 동적부하조절 동적부하분산은 Load 값을설정하지않거나 0 으로설정하며첫번째 Node 의시스템부하에따라자동적으로다음 Node 로 Service 가분산되도록하는부하조절방법이다 의부하조절기능설정시주의사항 W ebtob 에서 Load Balancing 을설정할경우다음사항에대해서주의하여야한다. NODE 절에서서비스할 Port 한다. 는각 Node 에동일하게설정해야 서비스를제공할디렉토리가 Document Root 에포함되어있지않고각 Node 의물리적인디렉토리경로가다를경우에는 Alias 를설정해서 URI 와실제물리적인디렉토리를 Mapping 시켜주어야한다. E x) /cgi-bin/ Directory 가 Document Root 에포함되어있지않고, 각 Node 의 Directory 의경로가아래과같을때, Alias 설정은다음과같습니다. nodea : /cgi-bin/ Directory 가 /homea/cgi-bin/ nodeb : /cgi-bin/ Directory 가 /homeb/cgi-bin/ *ALIAS alias1 alias2 URI="/cgi-bin/", REALPATH="/homeA/cgi-bin/", NODENAME=nodeA URI="/cgi-bin/", REALPATH="/homeB/cgi-bin/", NODENAME=nodeB 197
200 관리자안내서 15 정리 이것으로 사용에필요한사항과환경설정, 관리, 보안, 성능향상등에대한설명을마치도록한다. 매뉴얼의부록에서는 환경설정의예제와각종기능의활용예, 환경설정레퍼런스에대한내용을중점적으로설명하고자한다. 198
201 관리자안내서 부록 (APPENDIX) 매뉴얼본문에서예로들은환경파일과부족한부분, 각종예제코드와레퍼런스등을부록으로구성하였다. A. 환경설정 B. CGI 활용예 C. WBAPI D. TP API E. Tmax 와의연동 F. 환경설정레퍼런스 199
202 관리자안내서 A. 환경파일작성예 A.1 기본환경파일예 *DOMAIN webtob1 << sample.m >> *NODE tmaxh4 WEBTOBDIR="/data1/gloria/webtob", SHMKEY = 56000, DOCROOT="/data1/gloria/webtob/docs", PORT = "8080", HTH = 1, LOGGING = "log1", ERRORLOG = "log2" *SVRGROUP htmlg cgig ssig NODENAME = "tmaxh4", SVRTYPE = HTML NODENAME = "tmaxh4", SVRTYPE = CGI NODENAME = "tmaxh4", SVRTYPE = SSI *SERVER html SVGNAME = htmlg, MinProc = 2, MaxProc = 10 cgi SVGNAME = cgig, MinProc = 4, MaxProc = 10 ssi SVGNAME = ssig, MinProc = 2, MaxProc = 10 *URI uri1 Uri = "/cgi-bin/", Svrtype = CGI *ALIAS alias1 URI = "/cgi-bin/", RealPath = "/data1/gloria/webtob/cgi-bin/" *LOGGING log1 Format = "DEFAULT", 200
203 관리자안내서 log2 FileName = "/data1/gloria/webtob/log/access.log" Format = "ERROR", FileName = "/data1/gloria/webtob/log/error.log" *EXT htm MimeType = "text/html", SvrType = HTML <<manual.m>> *DOMAIN webtob *NODE www WEBTOBDIR = "/usr/local/webtob", SHMKEY = 69000, DOCROOT = "/usr/local/webtob/docs", AppDir = "/usr/local/webtob/ap", HostName = " PORT = "8080", JSVPort = 9999, HTH = 1, SSLNAME = Y, SSLNAME = "ssl1", NodePort = 7777, RacPort = 3333, Timeout = 300, ClichkIntval = 30, CacheSize = 128, CacheEntry = 128, KeepAliveTimeout = 60, KeepAliveMax = 9999, IndexName = "index.html", Options = "+Index", ErrorDocument = "403, 404", DirIndex = "fancy", Logging = "log1", ErrorLog = "log2", SysLogDir = "/usr/local/webtob/log/syslog", EnvFile = webtob_env, Method = "GET,POST,HEAD", 201
204 관리자안내서 LanguagePrio = "kr", Admin = "tmax@tmax.co.kr", Listen = " :5469, :5469" *VHOST vhost1 DOCROOT="/usr/local/webtob/docs/vhost_docs", NODENAME = www, HOSTNAME = "www2.tmax.co.kr", HOSTALIAS = "www?.tmax.co.kr", PORT = "8080", Listen = " :5469", Admin = "root@tmax.co.kr", AppDir = "/usr/local/webtob/vhost/ap", UsrLogDir = "/usr/local/webtob/vhost/log/usrlog", UserDir = "/usr/local/webtob/vhost", EnvFile = webtob_env, IndexName = "test.html", LOGGING = "log1" *SVRGROUP htmlg cgig jsvg ssig phpg wbapg tpsvg NODENAME = www, SVRTYPE = HTML NODENAME = www, SVRTYPE = CGI NODENAME = www, SVRTYPE = JSV NODENAME = www, SVRTYPE = SSI NODENAME = www, SVRTYPE = PHP, ScriptLoc = "/cgi-bin/php" NODENAME = www, SVRTYPE = WEBSTD NODENAME = www, SVRTYPE = TPSTD, DBNAME = ORACLE, OPENINFO = "Oracle_XA+Acc=P/scott/tiger+SesTm=60", TMSNAME = tms_ora, MINTMS = 2, MAXTMS = 4 *SERVER html SVGNAME = htmlg, MinProc = 1, MaxProc = 5 cgi SVGNAME = cgig, MinProc = 1, MaxProc = 5, SvrCPC = 4 ssi SVGNAME = ssig, MinProc = 1, MaxProc =2 php SVGNAME = phpg, MinProc = 1, MaxProc =2, MaxRequests = 100 jsv1 SVGNAME = jsvg, MinProc = 1, MaxProc = 10 wbaps SVGNAME = wbapg, MinProc = 2, MaxProc = 5 202
205 관리자안내서 tpsvr SVGNAME = tpsvg, MinProc = 2, MaxProc = 5 *SERVICE tpsvc SVRNAME = tpsvr example SVRNAME = wbaps, Priority = 20 write_board SVRNAME = wbaps, Priority = 30 *DIRECTORY dir1 DIRECTORY = "/usr/local/webtob/docs/vhost_docs", ForceMimetype = "CGI" *URI uri1 uri2 uri3 uri4 URI = "/cgi-bin/", SVRTYPE = CGI URI = "/examples/", SVRTYPE = JSV Uri = "/permanent/", Svrtype = HTML, Redirect = " RedirectStatus = permanent Uri = "/bad/", Svrtype = HTML, RedirectStatus = "500" *ALIAS alias1 URI = "/cgi-bin/", REALPATH = "/usr/local/webtob/cgi-bin/" *DIRINDEX fancy OPTIONS = "FANCY" *LOGGING log1 log2 FORMAT = "DEFAULT", FILENAME = "/usr/local/webtob/log/access.log", Option = "sync" FORMAT = "ERROR", FILENAME = "/usr/local/webtob/log/error.log", Option = "sync" *AUTHENT authent1 TYPE = Basic, USERFILE = "/usr/local/webtob/bin/pwfile" *SSL ssl1 CertificateFile = "/usr/local/webtob/ssl/newreq.pem", 203
206 관리자안내서 CertificateKeyFile = "/usr/local/webtob/ssl/newreq.pem" *ERRORDOCUMENT 403 Status = 403, URL=" 404 Status = 404, URL=" *EXT htm any jsp php MIMETYPE = "text/html", SVRTYPE = HTML MIMETYPE = "text/html", SVRTYPE = CGI MIMETYPE = "application/jsp", Svrtype=JSV, SvrName=MyGroup MIMETYPE = "application/x-httpd-php3", SVRTYPE = PHP A.2 와 JEUS 연동환경설정예 *DOMAIN webtob1 <<withjeus.m>> *NODE tmaxh4 WEBTOBDIR="/data1/gloria/webtob", SHMKEY = 84565, DOCROOT="/data1/gloria/webtob/docs", PORT = "8080", HTH = 1, LOGGING = "log1", ERRORLOG = "log2", JSVPORT = 9999 *SVRGROUP htmlg jsvg NODENAME = "tmaxh4", SVRTYPE = HTML NODENAME = "tmaxh4", SVRTYPE = JSV *SERVER html SVGNAME = htmlg, MinProc = 2, MaxProc = 10 MyGroup SVGNAME = jsvg, Minproc = 4, MaxProc = 6 204
207 관리자안내서 *URI uri1 Uri = "/examples/", Svrtype = JSV *LOGGING log1 log2 Format = "DEFAULT", FileName = "/data1/gloria/webtob/log/access.log", option="sync" Format = "ERROR", FileName = "/data1/gloria/webtob/log/error.log" *EXT htm html jsp MimeType = "text/html", SvrType = HTML MimeType = "text/html", SvrType = HTML MimeType = "application/jsp", SvrType = JSV <<container.xml>> <!-- JEUS 3( 내장 servlet engine) 의설정파일 --> <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE Container PUBLIC '-//Tmax Soft., Inc.//DTD Web Container//EN' 'file:///location/config/dtds/webcontainer_3_0.dtd' > <Container AdminPort="-1" MonitoringIntval="300" RedirectStdOut="false" RedirectStdErr="false"> <ContextGroup GroupDocBase="webapps" SharedSession="true" SessionTimeoutMinute="20" PrintErrorToBrowser="false" GroupName="MyGroup"> <JSPEngine KeepGenerated="true" /> <Logging ErrorLogBufferSize="0" AccessLogBufferSize="0" UserLog="default" AccessLog="default" 205
208 관리자안내서 ErrorLog="console" ErrorLogLevel="information" UserLogBufferSize="0" AccessLogFormat="default" AccessLogValidDays="1" /> <Context UserLogBufferSize="512" ContextName="Examples" EnableJSP="true" AutoReload="true" UserLog="default" ContextPath="/examples" UserLogValidDays="-1" DocBase="examples" /> <!-- <Connection ServerAccessControl="false" ListenerType="HttpListener" Port="8088"> <ThreadPool MaxIdleTime="300" MaxWaitQueue="4" ChangeRate="2" MaxThread="30" MinThread="25" /> </Connection> --> <Connection ConnectionPortNum="1" ServerAccessControl="false" RegistrationID="MyGroup" WebServerAddress="localhost" ListenerType="WebtobListener" Port="9999"> <ThreadPool MaxIdleTime="300" MaxQueue="-1" MaxWaitQueue="4" ChangeRate="2" MaxThread="30" MinThread="25" /> </Connection> </ContextGroup> </Container> 206
209 관리자안내서 <<WEBMain.xml>> <!-- JEUS 4 의설정파일 --> <?xml version="1.0"?> <!DOCTYPE web-container PUBLIC "-//Tmax Soft., Inc.//DTD WEB Main Config 4.0//EN" " <web-container> <context-group> <group-name>mygroup</group-name> <group-docbase>webapps</group-docbase> <session-config> <timeout>20</timeout> <shared>true</shared> </session-config> <logging> <error-log> <target>stdout</target> <level>information</level> <buffer-size>0</buffer-size> <valid-day>1</valid-day> </error-log> <user-log> <target>file</target> <buffer-size>0</buffer-size> <valid-day>1</valid-day> </user-log> <access-log> <target>file</target> <buffer-size>0</buffer-size> <valid-day>1</valid-day> <log-format> <time-format>default</time-format> </log-format> </access-log> </logging> <context> <context-name>examples</context-name> <context-path>/examples</context-path> < /context> <context> 207
210 관리자안내서 <!-- --> <!-- 별도의 <context-name>test</context-name> <context-path>/test</context-path> </context> <webserver-connection> <http-listener> <listener-id>http1</listener-id> <port>8989</port> <output-buffer-size>8192</output-buffer-size> <thread-pool> <min>25</min> <max>30</max> <step>2</step> <max-idle-time>1000</max-idle-time> </thread-pool> </http-listener> <webtob-listener> <listener-id>webtob1</listener-id> <port>9999</port> <hth-count>1</hth-count> <webtob-address> </webtob-address> JEUS 사용시, JEUS 내장웹서버가아닌별도의 를사용할때 아래와같이 <webtob-home> 을설정한다. --> <webtob-home>/data3/gloria/webtob</webtob-home> <registration-id>mygroup</registration-id> <thread-pool> <min>4</min> <max>6</max> <step>2</step> <max-idle-time>30000</max-idle-time> <max-wait-queue>4</max-wait-queue> </thread-pool> </webtob-listener> </webserver-connection> </context-group> </web-container> 208
211 관리자안내서 A.3 NT 환경설정툴사용예 A.3.1 DOM AIN 절 그림 A-1. DOMAIN 절에서의설정 209
212 관리자안내서 A.3.2 NODE 절 그림 A-2. NODE 절에서의설정 210
213 관리자안내서 그림 A-3. NODE 절에서의설정 (More Options) 211
214 관리자안내서 A.3.3 VHOST 절 그림 A-4. VHOST 절에서의설정 212
215 관리자안내서 그림 A-5. VHOST 절에서의설정 (More Options) 213
216 관리자안내서 A.3.4 SVRGROUP 절 그림 A-6. SVRGROUP 절에서의설정 214
217 관리자안내서 A.3.5 SERVER 절 그림 A-7. SERVER 절에서의설정 215
218 관리자안내서 A.3.6 SERVICE 절 그림 A-8. SERVICE 절에서의설정 A.3.7 DIRECTORY 절 그림 A-9. DIRECTORY 절에서의설정 216
219 관리자안내서 A.3.8 URI 절 그림 A-10. URI 절에서의설정 A.3.9 ALIAS 절 그림 A-11. ALIAS 절에서의설정 217
220 관리자안내서 A.3.10 DIRINDEX 절 그림 A-12. DIRINDEX 절에서의설정 218
221 관리자안내서 A.3.11 LOGGING 절 그림 A-13. LOGGING 절에서의설정 A.3.12 ERRORDOCUMENT 절 그림 A-14. ERRORDOCUMENT 절에서의설정 219
222 관리자안내서 A.3.13 AUTHENT 절 그림 A-15. AUTHENT 절에서의설정 A.3.14 SSL 절 그림 A-16. SSL 절에서의설정 220
223 관리자안내서 A.3.15 EXT 절 그림 A-17. EXT 절에서의설정 221
224 관리자안내서 B. CGI 활용예 B.1 소개 단순히보여주기위한 HTML 에서진일보한형태인 CGI 의동작과정은다음과같다. HTML 문서중사용자에대해동적으로반응해야하는부분이있다면, 이부분은마치 C 언어의함수처럼특정한방식으로응용프로그램을호출하게된다. 이응용프로그램은필요한동작을수행하고그결과를다시보내주면, 이결과가화면에나타나마치웹페이지가원하는요구를알아서처리해준것처럼보이는것이다. 게시판을예로들어보자. 우리가글을남길수있는웹상의게시판들은우리가쓴글을데이터로받은다음이데이터를이용해다시 HTML 문서를만들어브라우저에게전달해준다. 즉, 게시판에있어서 CGI 의역할은우리가자판으로치는문자를 HTML 문서로변환하는역할을하는것이다. 브라우저는이미작성된 HTML 을보여주는역할만하는것이므로미리작성하여준화면만을보여줄수밖에없는데 CGI 를통해우리는이것에실시간으로접근하여글을남길수있는것이다. 즉, 게시판프로그램은웹페이지에직접쓸수있는 연필 과같은기능을하는것이다. 본장에서는 C 를이용한게시판과 Perl 을이용한방명록을예제로하여웹에서의 CGI 를이용한서비스를구현해보도록하겠다. B.2 C 를이용한게시판구현 유닉스환경하에서 C 를이용한게시판작성을예제로한다. 간단한글과주소를남길수있는이웹페이지는 board.html 에서 board.cgi 를호출함으로써구현한다. B.2.1 환경파일작성 < sample_cgi.m> #Configuration file ( sample_cgi.m ) 222
225 관리자안내서 *DOMAIN webtob1 *NODE webmain WEBTOBDIR = "/usr/local/webtob", SHMKEY = 72000, HTH=1, DOCROOT = "/usr/local/webtob/docs", PORT = "8080" *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/", SvrName = cgi, Svrtype = CGI *ALIAS alias1 URI = "/cgi-bin/", RealPath = "/usr/local/webtob/cgi-bin/" B.2.2 화면코드작성 #board.html <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> 223
226 관리자안내서 </TR> <TR> </TR> <TR> </TR> <TR> </TR> <TR> </TR> <TR> </TABLE> <BR> </TR> <TD>Title</TD> <TD><INPUT NAME=title SIZE=50></TD> <TD COLSPAN=2><B>Contents</B></TD> <TD COLSPAN=2> <TEXTAREA NAME=doc COLS=60 ROWS=10></TEXTAREA> </TD> <TD> </TD> <TD><INPUT NAME= SIZE=40></TD> <TD>Home Page</TD> <TD> </TD> <INPUT NAME=homepage SIZE=40 VALUE=" <INPUT TYPE=submit VALUE=" Submit "> <INPUT TYPE=reset VALUE=" Clear "> </FORM> </BODY> </HTML> B.2.3 CGI 소스코드작성 # 첨부 3: board.c <board.c> #include "qdecoder.h" int strcheck(char *str) { 224
227 관리자안내서 /* 문자열이 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(" "); 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"); 225
228 관리자안내서 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); printf("</table>\n\n<br>upload Successful!\n"); printf("</body>\n\n</html>"); } qfree(); B.2.4 작업및결과확인 순서는아래와같다. 1. 환경파일인 sample_cgi.m 을시스템에맞게수정한다. 2. HTML 문서를 DOCROOT 로옮긴다. 3. board.html 의 ACTION= /cgi-bin/board.cgi 부분이자신의환경에서 board.cgi 가있는곳을가리키도록한다. 4. board.c 및 qdecoder.h, qdecoder.c 를 cgi 가구동되는 Directory 로옮긴다. 5. board.c 를컴파일한다. (cc 또는 gcc 가깔려있어야한다.) 226
229 관리자안내서 $ cc o board.cgi board.c qdecoder.c 또는 $ gcc board.c qdecoder.c o board.cgi ( board.cgi 생성 ) 6. 생성된 board.cgi 의퍼미션을 755 로해둔다. $ chmod 755 board.cgi 7. 를기동한후, 브라우저를띄우고게시판을호출해본다. (IP address 는현재 가구동되고있는머신의것을쓴다. ) 8. 실행한화면은아래와같다. 그림 B-1. C 를이용한게시판입력화면위와같이내용을입력하고 submit 버튼을누르면 board.cgi 가호출되어아래와같이게시판에입력된화면을만들어준다. 227
230 관리자안내서 그림 B-2. C 를이용한게시판결과화면 B.3 PERL 을이용한게시판구현 P erl 이란언어는스크립팅언어이다. 따라서컴파일과정이필요없이바로수행이가능하기때문에프로그램의작성과디버깅이매우쉽다. 이런이유로스크립팅언어가선호된다. Perl 은무료로다운로드가능하다. Perl 을사용하기위한기초준비작업은여기서다루지는않겠다. 여기서는 에서 Perl 을기동하기위한환경파일과 Perl 로구현한방명록을담았다. B.3.1 환경파일작성 <sample_perl.m> #Configuration file ( sample_perl.m ) *DOMAIN webtob1 *NODE 228
231 관리자안내서 webmain WEBTOBDIR = "/usr/local/webtob", SHMKEY = 72000, HTH=1, DOCROOT = "/usr/ local/webtob/ docs", PORT = "9989" * SVRGROUP htmlg NODENAME = webmain, SvrType = HTML cgig NODENAME = webmain, SvrType = CGI *SERVER html SVGN AME = htmlg, MinProc = 1, MaxProc = 5 cgi SVGNAME = cgig, MinProc = 1, MaxProc = 5 *URI uri1 Uri = "/cgi-bin/", SvrName = cgi, Svrtype = CGI *ALIAS a lias1 URI = "/cgi-bin/", RealPath = "/usr/local/webtob/docs/cgi-bin/" B.3.2 Perl 스크립트작성 #guestbook.cgi <guestbook.cgi> #!/usr/local/bin/perl # 기준 URL ( 보통홈페이지주소 ) $Base_href = ' # $base_href 를기준한이화일의 path $Cgi_file = 'cgi-bin/guestbook.cgi'; # lock 디렉토리 path $Lock_dir = 'lock/guestbook'; # BBS 데이타가담기는화일 $Bbs_file = 'book_data'; # 링크할제목 229
232 관리자안내서 $Link_name = 'Back to Home'; # 링크할 URL ($base_href 기준 ) $Lin k_url = './'; # 제목 $Bb s_title = 'Guest Book'; # 관리자이름 $Bbsmaster_name = 'webtob'; # 관리자 주소 $Bbsmaster_em ail = 'webotb@tmax.co.kr'; # 각메시지의최대크기 (byte) (SPAM 방지용 ) $Max_msg_size = 8000; $Titlecolor = '#800080'; $Bgc olor = '#fafff8'; $Textcolor = '#000000'; $Linkcolor = '#401080'; $Bbs_write_title = 'WRITE'; $Bbs_read_title = 'READ'; $Rem_name = ''; $Rem_ = ''; $Rem_msg = ''. ''. ''; $Btn_write = 'Send'; $Btn_read_old = 'Old Message'; $Btn_read_new = 'New Message'; $Rem_bbs_end = 'End of Messages'; $R em_bbs_back = ' Go Top'; $Bbs_logo = ''; $Bbs_logo_addr = ' $Delimiter = chr(30); 230
233 관리자안내서 $Prev_num_skip = 0; ##### main routine ##### &read_file; &read_form; if ($ENV{'REQUEST_METHOD'} eq "POST" && $Name ne "" && $Msg ne "" ) { &remove_html_tags; # remove HTML tags &new_msg; # make new BBS msg, use &clock &save_msg; # save BBS msg } & show_header; &show_entry_form; &s how_bbs; &show_read_form; &sh ow_footer; # show header # show BBS entry form # show BBS msgs # show BBS read form # show footer exit; ##### sub routines ##### sub read_file { open (IN, "$Bbs_ file") &return_error (500, " File open error", "Cannot access BBS = <IN>; close (IN); } sub read_form { %Form = &read_input; } $Name = $Form{ 'name'}; $ = $Form{' '}; $Msg = $Fo rm{ 'msg'}; $Num_each = $Form{'num_each'}; $Num_skip = $Fo rm{'num_skip'}; 231
234 관리자안내서 sub remove_html_tags { $Name =~ s/\&/\&/g; $Name =~ s/\</\</g; $Name =~ s/\>/\>/g; $ =~ s/\&/\&/ g; $ =~ s/\</\</g; $ =~ s/\>/\>/g; $Msg =~ s/\&/\&/g; $Msg =~ s/\</\</g; $Msg =~ s/\>/\>/g; } $Msg =~ s/\r\n/\n/g; # Windows(CR,LF) -> LF $Msg =~ s/\r/\n/g; # Mac (CR) -> LF $M sg =~ s/\n/<br> /g; # LF -> <BR> sub new_msg { my ($access_time) = &clock; # get date and time my ($new_msg); my ($site) = ($ENV{'REMOT E_HOST'} $ENV{'REMOTE_ADDR'}); # delete msg larger than 4000 byte if (length($msg) >= 4000) { $Msg = substr($msg, 0, 4000); if (($Msg =~ tr/[\xa1-\xfe]//)%2 chop $Msg; } }!= 0) { if ($ !~ /([\w\-]+\@[\w\-+\.]+[\w\-]+)/) { $ = ""; # check valid address format } $new_msg = "$Name". $Delimiter. # name "$ ". $Delimiter. # address "$site". $Delimiter. # ip_address 232
235 관리자안내서 "$access_time". $Delimiter. # access time "$Msg". "\n"; # message = sub save_msg { (&filelock ($Lock_dir) eq 'OK') &return_error ("500", "Lock error", "Too many access or cannot create lock file"); open (OUT, ">$Bbs_file") &return_error (500, "File write error", "Cannot access BBS file"); print close (OUT); (&fileunlock ($Lock_dir) eq 'OK') &return_error ("500", "Unlock error", "No lock file exist"); } sub show_header { print "Content-type: text/html\n\n"; print <<END_OF_ HTML; <HTML> <HEAD> <BASE HREF="$Base_href"> <TITLE>$bbs_title</ TITLE> </HEAD> <BODY BGCOLOR="$Bgcolor" TEXT="$Textcolor" LINK="$Linkcolor"> <P ALIGN="CENTER"><FONT COLOR="$Titlecolor" SIZE="+2"> <B>$Bbs_title</B></FONT> < br> <div align="left"><a HREF="$Link_url">$Link_name</A></div> <P ALIGN="RIGHT"> <HR> END_OF_HTML ; } sub show_entry_form { print <<END_OF_HTML; 233
236 관리자안내서 <a name="write"> </a> <FONT COL OR="#800080" SIZE="+ 1"> <B>$Bbs_write_title</B></FONT> <P> <FORM ACTION=\"$Cgi_file\" METHOD=\"POST\"> <B>Name</B> $Rem_name<BR> <INPUT NAME="name" TYPE="text" SIZE = "40" MAXLENGTH="64"> <P> <B> address</b> (optional) $Rem_ <BR> <INPUT NAME=" " TYPE="text" SIZE = "40" MAXLENGTH="72"> <P> <B>Message</B> $Rem_msg<BR> <TEXTAR EA COLS="64" ROWS="10" WRAP="VIRTUAL" NAME="msg"> </TEXTAREA><BR> <INPUT TYPE="submit" VALUE="$ Btn_write "> </FORM> <HR> END_OF_HTML ; } sub show_read_form { print <<END_OF_HTML; <font color="#800080" size="+ 1"><b>$Bbs_read_title</b></font> <br><br> <table border="0" cellspacing="10"> <tr valign="top"> <td> <FORM ACTION=\"$Cgi_file\" METHOD=\"POST\"> <INPUT TYPE="submit" VALUE="$Btn_read_old"><br> <INPUT TYPE="radio" NAME="num_each" VALUE="5" CHECKED>5 more <INPUT TYPE="radio" NAME="num_each" VALUE="20">20 more <INPUT TYPE="hidden" NAME="num_skip" 234
237 관리자안내서 VALUE="$Prev_num_skip"> </FORM> </td> <td> <FORM ACTION=\"$Cgi_file\" METHOD=\"POST\"> <INPUT TYPE="submit" VALUE="$Btn_read_new"><br> <INPUT TYPE="radio" NAME="num_each" VALUE="-5" CHECKED>5 more <INPUT TYPE="radio" NAME="num_each" VALUE="-20">20 more <INPUT TYPE="hidden" NAME="num_skip" VALUE="$Prev_num_skip"> </FORM> </td> <td></td> <td></td> <td> <FORM ACTION=\"$Cgi_file\" METHOD=\"POST\"> <INPUT TYPE="hidden" NAME="num_each" VALUE="top"> <INPUT TYPE="submit" VALUE="Go Top"> </FORM> </td> <td></td> <td> <FORM ACTION=\"$Cgi_file\" METHOD=\"POST\"> <INPUT TYPE="hidden" NAME="num_each" VALUE="all"> <INPUT TYPE="submit" VALUE="Show All"><br> (Warning: very long!) </FORM> </td> </tr> </table> <hr> END_OF_HTML ; } 235
238 관리자안내서 sub show_bbs { local( $temp_ , $temp_msg ); $bbs_no = $#Bbs + 1; unless (defined ($Num_each)) {$Num_each = 5;} unless (defined ($Num_skip)) {$Num_skip = 0;} if ($Num_each eq "all") { $Num_each = $bbs_no - $Num_skip; } if ($Num_each eq "top") { $Num_each = 5; $Num_skip = 0; } if ($Num_skip >= $bbs_no) { &show_end_of_bbs; } if ($Num_skip + $Num_each > $bbs_no) { $Num_each = $bbs_no - $Num_skip; } if ($Num_each < 0 ) { $Num_skip = $Num_skip + $Num_each + $Num_each; $Num_each = 0 - $Num_each; if ($Num_skip < $Num_each) { $Num_skip = 0; } } else { $Prev_num_skip = $Num_skip + $Num_each; # skip data at next loading } $serial_no = $bbs_no - $Num_skip; 236
239 관리자안내서 # first serial = splice(@bbs, $Num_skip, $Num_each); # displayed msgs while (@show_bbs) = split (/$Delimiter/, shift(@show_bbs)); # use slice of message file print "[ $serial_no ] <B>"; print shift(@data); # $Name print '</B>'; if ($temp_ = shift(@data)) { # $ print "<<a href=\"mailto:$temp_ \">$temp_ <\/a>>"; } print ' from '; print shift(@data); # $ip_address print ' at '; print shift(@data); # $access_time print ' <P>'; $temp_msg = shift(@data); $temp_msg =~ s/( \/\=\?\.\~\:\&\;\#]+)/<a href=\"$1$2\" target=\"_new">$1$2<\/a>/g; $temp_msg =~ s/([\w\-]+\@[\w\-+\.]+[\w\-]+)/<a href=\"mailto:$1">$1<\/a>/g; print $temp_msg; # $msg print "\n<hr>\n"; } } $serial_no --; # prepare next serial No. sub show_end_of_bbs { print "$Rem_bbs_end"; print '<P>'; print "<A HREF=\"$Cgi_file\">$Rem_bbs_back</A>"; print "<HR>\n"; 237
240 관리자안내서 } sub show_footer { print <<END_OF_HTML; <A HREF="$Link_url">$Link_name</A> <HR> <I>BBS Master : $Bbsmaster_name / <A HREF="mailto:$Bbsmaster_ ">$Bbsmaster_ </A></I> <div align="right"> <B><I><A HREF="$Bbs_logo_addr">$Bbs_logo</A></I></B> </div> </body> </html> END_OF_HTML ; } #### other subroutines (shared with other perl cgi) ######## su b read_input { local $name, $value, %FORM); if ($ENV{'REQUEST_METHOD'} =~ /^post$/i) { } else { } hex($1))/eg; } read(stdin, $buffer, $ENV{'CONTENT_LENGTH'}); $buffer = = split(/&/, $buffer); foreach (@pairs) { } return %FORM; ($name, $value) = split(/=/, $_); $value =~ tr/+/ /; $value =~ s/%([a-fa-f0-9][a-fa-f0-9])/pack("c", $FORM{$name} = $value; sub clock { 238
241 관리자안내서 my = ('Sun','Mon','Tue','Wed','Thr','Fri','Sat'); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $mon ++; if ($hour < 10) { $hour = "0".$hour; } if ($min < 10) { $min = "0".$min; } if ($sec < 10) { $sec = "0".$sec; } $date = "19$year\.$mon\.$mday\.($days[$wday]) $hour\:$min\:$sec"; } sub return_error { my ($status, $keyword, $msg) print "Content-type: text/html\n"; print "Status: ", $status, " ", $keyword, "\n\n"; print "<TITLE>CGI program Error</TITLE>\n"; print "<H1>", $keyword, "</H1>\n"; print $msg, "\n"; print "<P>Please contact the webmaster for more information.\n"; print "<HR>"; print "<A HREF=\" Book</I></A>"; exit(1); } sub filelock { # parameter is filename for lock my ($lockdir) mkdir ($lockdir, 0777) && return 'OK'; -M $lockdir > 3/(24*60) && do { rmdir ($lockdir) return 'FAIL'; }; for (1.. 10) { mkdir ($lockdir, 0777) && return 'OK'; sleep (1); } return 'BUSY'; } 239
242 관리자안내서 sub fileunlock { my ($lockdir) -d $lockdir return 'FAIL'; rmdir ($lockdir) && return 'OK'; return 'FAIL'; } #### end of program ######################################## B.3.3 작업및결과확인 1. 환경파일인 sample_perl.m 을시스템에맞게수정한다. 2. $which perl 로 perl 의 path 를알아놓는다. 3. guestbook.cgi 를편집창을열어시스템에맞게수정한다. 4. guestbook.cgi 를 cgi 가구동되는 Directory 로옮기고 755 로퍼미션을준다. $chmod 755 guestbook.cgi 5. guestbook.cgi 의데이터를저장하기위한 book_data 파일을만들고 666 으로퍼미션을준다. $touch book_data $chmod 666 book_data 6. 마찬가지로 lock 디렉토리를만들고 777 로퍼미션을준다. $mkdir lock $chmod 777 lock 7. 시스템을기동한후브라우저에서다음과같이요청한다. address:port/cgi-bin/guestbook.cgi 8. 실행된화면은아래와같다. 240
243 관리자안내서 그림 B-3. Perl 을이용한게시판입력화면위와같은방명록화면이뜬다면, 요구하는정보를간단히쓴다음 Send 버튼을눌러방명록에기록을남겨보자. 이제 guest 2 가남긴말위에 webtob 가남긴말이추가될것이다. 실행된화면은다음과같다. 241
244 관리자안내서 그림 B-4. Perl 을이용한게시판결과화면방문자들이남긴글은 book_data 파일에남는다. 242
245 관리자안내서 C WBAPI C.1 WBAPI List 이장에서는 가제공하는 WBAPI 의목록과각각의기능에대해서알아볼것이다. 이는현재 버전으로작성된것이며, 차후버전을거듭할수록추가되고늘어날것이다. 물론과거에발표된 WBAPI 에대한호환성도제공한다. 따라서만약사용자가차후에새로운버전을구입하게된다면추가로등록된 WBAPI 를확인하는것도사용자가원하는프로그램을작성하는데많은도움이될것이다. C.1.1 INIT/DONE API INIT/DONE 계열의함수는개발자가서비스를시작하기전의초기화과정이나서비스프로세스종료시수행되어야할루틴을수행한다. 함수이름 기 능 wbsvrinit() 서버를초기화한다. wbsvrdone() Webt ob 의반환을알리는함수 C.1.2 ALLOC API ALLOC 계열의함수는사용자가메모리를할당하고해제한다. 함수이름기능 wbmalloc() 사용자가 설정한 SIZE 만큼의 메모리를 할당한다. wbfree() wbmalloc() 에제거 (free) 의해 할당된 메모리를 243
246 관리자안내서 C.1.3 GET API GET 계열의함수는사용자가 Request 한것에대하여사용자의정보를읽어들이는것으로사용자의 Request 의 Data, Method 정보값등을알아낸다. 함수이름기능 wbgetauthtype() 사용자의인증방식을얻어낸다. wbgetcontentlength() Client 가보낸 C ontent 의크기를얻어낸다. wbgetdocumentroot() 의 Home 디렉토리의값을얻어낸다. wbgethdr() wbgetdatehdr() request 의 header 에서특정 key 에해당하는값을얻는다. 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() request 는다. 에서입력으로들어온 data 의숫자를얻 244
247 관리자안내서 wbgetvalue() request 에서다. 특정 key 값의 N 번째 data 를얻는 wbkeyoccur() request 들어온 data 에서 key 값의수를얻는다. wbgetmethod() request 로들어온 HTTP Method 읽어들인다. 를정수형으로 wbgetparseduri() Client 로부터 Request 가들어온 URI 정보를얻어낸다. wbgetpathinfo() request 와관계된상대경로정보를얻어낸다. wbgetpathtranslated() request 와관계된절대경로정보를얻어낸다. wbgetquerystring() wbgetprotocol() wbgetremoteuser() request URL 로부터질의어문자열을얻어낸다. request 와관계된 Protocol 정보를얻어낸다. request 하는사용자의이름을얻어낸다. wbgetrequesturi() request 의 URI 를얻어낸다. wbgetremoteaddr() request 한 Remote Host 의 IP 를얻어낸다. wbgetremotehost() request 하는 Remote Host 의이름을얻어낸다. wbgetremoteident() Server 로부터검색된사용자의 name 을얻어내는데사용된다. wbgetreqline() request 에얻는다. 들어온 line 의첫번째 line pointer 를 wbgetfilename() 파일의이름을 알아낸다. wbgetfilelen() 파일의크기를알아낸다. 245
248 관리자안내서 wbgetscheme() reqeust 된서비스의 Protocol 정보를얻어낸다. wbgetscriptfilename() request 한 WBAPI 서비스가실행되는절대경로를얻어낸다 wbgetscriptname() request 한서비스가실행되는경로를얻어낸다. wbgetservername() 서버의 hostname 을얻어낸다. wbgetserverport() 서버의 port 번호를얻어낸다. wbgetserversoftware() 서버의 Software 정보를얻어낸다. wbgettranslateduri() request 된서비스의 URI 를해석하여를얻어낸다. 실제경로 wbgetrequesturl() request URL 값을얻어낸다. C.1.4 PUT/SET API PUT/SET 계열의함수는사용자의 request 에대한응답으로 WBAPI 에서처리한값을출력하기위한용도로쓰이는것으로 CGI 에익숙한사람이라면출력값을나타내기위하여 C 언어의 printf 함수나 Perl 의 print script 를이용하는것과같다고보면된다. WBAPI 에서는 request 에대한처리를한후그결과를 WBSVCINFO 라는구조체에저장하여그구조체를브라우저에넘기는데이 WBSVCINFO 구조체에응답으로보낼데이터를저장하는역할을해주는함수들이다. PUT 계열함수를이용할때는몇가지주의사항이있는데 PUT 관련함수들은약간의순서를지켜 주어야 한다. 다른 PUT 계열 함수들 보다 먼저 수행되어야 하는 함수가 있다. 이는 wbsetstatus(wbsvcinfo *rqst, int status, char *status_msg) 함수로 Response Header 를 먼저작성하기위함이다. 마찬가지로 PUT 관련 함수중에서 Header 를작성하는함수들이 Data Field 를작성하는 함수들보다먼저선언되어야한다. 이러한순서를지켜주어야 WBAPI 가문제없이수행된다. 246
249 관리자안내서 함수이름기 능 wbputhdr() response 의 Header 를설정한다. wbputinthdr() Response 의 Header 를추가한다. wbsetstatus() request 의 status 의값을설정한다. wbputstr() string 값을출력한다. wbput() 특정 size 만큼의 data 를출력한다. wbprint() 사용자가지정한 내용을출력한다. wbputfile() wbputpartialfile() file download 를위한함수, 특정파일을읽어들여모두브라우저로보내준다. file dow nload 를위한함수로특정파일의 일부분 을읽어서브라우저로보내준다. File 의 offset 부터 size 만큼읽어서들여보내준다. size 가 0이면파일끝까지읽어보내준다. C.1.5 SEND API SEND 계열은사용자의 request 에대한응답으로 PUT 계열함수를사용하여 WBSVCINFO 구조체에서비스처리결과를저장한것을브라우저에리턴하는함수이다. 함수 이름 기 능 wbflush() 현재버퍼에있는모든내용을 write 하게한다. wbsenderror() 상태코드의 Error 여부를확인한다. wbsendredirect() 지정된주소로응답을되돌려준다. wbreturn() 의반환을알리는함수 247
250 관리자안내서 C.1.6 COOKIE API COOKIE 계열함수는 HTTP 스타일의 Cookie 를생성하고, 읽고처리하기위한작업을수행한다. 함수이름기능 wbcreatecookie () 새로운 cookie 를만든다. wbgetcookie() 브라우저에의해보내진 cookie 중에서원하는 cook ie 를리턴한다. wbputcookie() 지정된 cookie 에응답을덧붙인다. wbcookiegetdomain () 지정된 cooki e 에서도메인을리턴한다. 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 에새로운버전을설정한다. 248
251 관리자안내서 C.1.7 SESSION API SESSION 계열함수는 Session 을생성하고, Session 의고유정보를얻어기타작업들을수행할수있도록한다. 함수이름 기 능 wbgetrequestedsessionid() 사용자에요청에의해명확해진 Session ID 를얻어낸다. wbgetsession() 생성된 Session 이없는경우 Session 을생성하고그 Session 값을얻어낸다 wbisrequestedsessi onidvalid() 요청된 Session 이올바른 Session 이고현재사용중이라면 true 값을얻어낸다. wbsessiongetid() Ses sion 에할당된유일한 ID 얻는다 wbsessiongetvaluenames() wbsessiongetcreationtime() wbsessiongetvalue() wbsessionsetvalue() wbsessionisnew() wbsessionremovevalue() 이 Session 에바인딩된모든객체의이름을포함하는배열을얻어낸다. Session 이생성된시간을얻어낸다 Session 에바인딩된객체의값과이름을얻어낸다. Session 에지정된객체의값과이름을바인딩한다. Session 이새로운것인지아닌지나타내는값을얻어낸다. 지정된이름에바인딩된객체를제거한다. WbSessionInvalidate() Session 을무효화한다. 249
252 관리자안내서 wbsessiongetmaxinactiveinterval() wbsessionsetmaxinactiveinterval() wbsessiongetlastaccesstime() Session 에설정된 session 유지시간을얻어낸다. 지정된 Session 에 session 유지시간을설정한다. Client 가마지막으로요청을보낸시간을얻어낸다. C.1.8 WBTX API WBTX 계열함수는 에서트랜잭션에관련한작업들을수행할수있도록한다. 함수이름기능 wbtx_begin() 트랜잭션시작한다. wbtx_commit() 트랜잭션 commit 한다. wbtx_rollback() 트랜잭션 rollback 한다. wbtx_info() 트랜잭션정보를 return 한다. wbtx_set_ commit_return() COMMIT_RETURN 특성을설정한다. wbtx_set_transaction_control() TRANSACTION_CONTROL 특성을설정 한다. wbtx_set_transaction_timeout() TRANSACTION_TIMEOUT 을설정한다. C.1.9 ETC API ETC 계열함수는 에 File Upload 수행하거나 Error Number 를얻을수있다. 함수이름기능 250
253 관리자안내서 wbgeterrno() 의 Error number 를얻어낸다. wbsavefile() 파일의 upload 를위한함수이다. C.2 WBAPI 를이용한 CGI 의변환 기존 CGI 방식의프로그램의예를보면다음과같다. #include "qdecoder.h" int strcheck(char *str) { 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(" "); homepage = qvalue("homepage"); /* 입력값들이올바른지검사 */ if (!strcheck(name)) qerror(" 이름을입력하세요."); if (!strcheck(title)) qerror(" 글제목을입력하세요."); if (!strcheck(doc)) qerror(" 본문을입력하세요."); if (strcheck( )) if (!qcheck ( )) 251
254 관리자안내서 if (str check(homepage)) qerror(" 주소를정확히입력하세요."); if (!qcheckurl(homepage)) qerror("homepage URL 을정확히입력하세요."); /* 처리결과출력 입력확인 */ qcontenttype("text/html" ); printf("<html>\n\n"); printf("<head><title>bestbook 게시판 글올리기확인 </TITLE></HEAD>\n\n"); printf("<body>\n"); printf("<h2> Bestbook 게시판 - 글올리기확인 </H2>\n"); printf("<hr WIDTH=600 ALIGN=left>\n<BR>"); name); if (strcheck( )) printf("<a HREF=\"mailto:%s\">%s</ A >", , 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>"); qfree(); } 위의프로그램은간단한게시판을구현하는것이다. 이를보면알수있듯이대부분의 CGI 프로그램의구조는간단하고단순하다. QUERY_STRING 을통해서전달된사용자의입력값을바탕으로특정한작업을수행한후, 이를 HTML 문서와같은형태로다시전달하는것이다. HTML 형태의문서를이루어진다. 만드는것은주로 printf 함수를통하여 252
255 관리자안내서 위의프로그램에있는여러함수들은거의 C 언어에서기본적으로제공하는것이고, qvalue 나 strcheck 등의처리함수들은입력변수의값을읽어오거나, 변수값이맞는것인지분석하는함수들이다. 이역시간단한 Library 형태로지원된다. 위의 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"); 253
256 관리자안내서 그리고 printf 함수를통하여결과값을만들어내는작업을수행한다. 이는 HTML 문서를실제로 Editing 하는것과거의같다. 다음을보면 printf 함수를통해서 HTML Tag 를만들어냄을알수있다. printf("<html>\n\n"); printf("<head><title>bestbook 게시판 글올리기확인 </TITLE></HEAD>\n\n"); printf("<body>\n"); 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 를이용하면된다. 위의상황과같기때문에생략하겠다. 254
257 관리자안내서 그리고 WBAPI 에서는사용자의환경변수뿐만아니라, Header 에전송된값도읽어들일수있다. 이것은아래와같은 wbgethdr 함수를통하여이루어진다. 아래의것은 Content-Length 값을읽어들이는것이다. hd = wbgethdr(rqst, "Content-Length"); 일련의작업들이끝났다면이제출력을위한문서를만들어야한다. 이는위에서는 printf 함수로처리된것이었다. WBAPI 에서는 wbprint 라는함수로처리된다. 결국기존의 CGI 에서 printf 함수를썼던부분을모두 wbprint 로처리하면된다는것이다. 아래의 2 번은위의것을변환한예이다. 결과형태가약간달라질수있지만이는출력형태인 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>"); 255
258 관리자안내서 위의모든작업이끝나면결과가끝났다는것을마지막에대신에 wbreturn 을수행하는것으로 에전달한다. return wbreturn(rqst, WBSUCCESS); 괄호안의 WBSUCCESS 나타낸다. 는결과가성공적으로수행되었다는것을 이에대한프로그램을모두기술하면다음과같다. #include<usrinc/atmi.h> #include<usrinc/wbapi.h> - Windows 계열의경우에는다음과같으며 write_board 동일하다. 의내용은 #include<usrinc/atmi.h> #include<usrinc/wbapi.h> extern int _my_spri; int wbsvrinit(int argc, char *argv[]) { return 0; } int wbsvrdone(void) { } write_board(wbsvcinfo *rqst) {. } 256
259 관리자안내서 D TP API D.1 TP API List D.1.1 XATMI API 함수 XATMI : X/Open Application Transaction Monitor Interface XATMI 는 Service Program 과 Webtob 간의인터페이스로서버퍼의할당및해제, 서버와클라이언트사이의통신등을제공한다. 이것은 X/Open DTP 의표준을준수한다. 다음의표에서는 XATMI API 함수들에대한개략적인설명을하고있다. 다음에소개되는함수들에대해서좀더자세하게알아보고자한다면 TP API Reference Guide 를참조하기바란다. 관련기능이름기능 tpalloc() 데이터를 송수신할 버퍼를 할당한다 버퍼관리함수 tprealloc() tpfree() 버퍼의크기를변경한다 할당된버퍼를해제시킨다 tptypes() 버퍼의유형및크기에대한정보를제공한다 서비스요구및응답관련함수 tpcall() 서비스를요청하고응답이올때까지기다린다 tpacall() 서비스를요청한후다른일을처리할수있으며 tpgetrply() 호출로처리결과를수신한다 257
260 관리자안내서 tpcancel() 어떤서비스요청에대한응답을취소한다 tpgetrply() tpacall() 의호출에대한응답을받는다 tpconnect() 대화형 모드로 서비스와 연결을 설정한다 대화형함수 tpdiscon() tprecv() 대화형모드서비스와연결을비정상적으로종료한다 대화형 모드에서 메시지를 수신한다 tpsend() 대화형 모드에서 메시지를 송신한다 서비스종료 tpreturn() 서비스요청에대한응답을클라이언트에게보내고서비스루틴을종료한다 관련함수서비스요청을필요에의해 tpforward() 다른서버로중계하고서비스루틴을종료한다 서버초기화및종료관련함수 tpsvrinit() tpsvrdone() 서버초기화루틴 서버종료루틴 258
261 관리자안내서 D.1.2 비표준 API 함수 관련기능이름기능 에러관련함수 tpstrerror() 에러를스트링으로보여줌 블록타임아웃설정함수 tpset_timeout() 블록타임아웃시간을설정 연결해제함수 tpreset() 연결정보를해제 tpsleep() 지정된시간안에메시지가도착할때까지 sleep tp_sleep() 데이터의 도착을 초단위로 기다림 tp_usleep() 데이터의도착을백만분의 1 초단위로기다림 기타 tpgetminsvr() 서버 프로세스의 최소 실행 개수 tpgetmaxsvr() 서버 프로세스의 최대 실행 개수 tpgetmaxuser() 서버프로세스가속한노드의최대동시접속자수 tpgetenv() 환경변수값을리턴 tpputenv() 환경변수값을지정 D.1.3 TX 함수 TX 는 Service program 과 간의인터페이스로서 Transaction 범위를설정하고 Transaction 을수행한다. 이것은 X/Open DTP 표준을준수한다. TX 에서사용되는함수들은다음과같다. 259
262 관리자안내서 이름기능 tx_begin() tx_commit() tx_rollback() tx_open() t x_close() tx_set_transaction_timeout() tx_info() tx_set_commit_return() tx_set_transaction_control() 트랜잭션을시작한다 트랜잭션결과를저장한다 트랜잭션을원상태로회복시킨다 Resource Manager 를연다. ( 내부적으로작동됨 ) Resource Manager 를닫는다. ( 내부적으로작동됨 ) 트랜잭션처리시사용될시간을설정한다 전역 (global) 트랜잭션에 대한 정보를 리턴한다 전역 (global) 트랜잭션의 승인 시점을 지정한다 한트랜잭션완료시자동으로새로운트랜잭션을시작한다 D.1.4 필드버퍼관련함수 에서제공하는특수한버퍼타입인필드버퍼를조작할때사용할수있는함수들이다. 관련기능이름기능 필드키사상함수 fbget_fldkey() 필드이름에대한필드키 (Field Key) 값을반환한다. fbget_fldname() 필드키에 대한 이름을 반환한다. 260
263 관리자안내서 fbget_fldno() 필드키로부터해당필드키번호를가져온다. fbget_fldtype() 필드키로부터필드형 (type) 을가져온다.( 정수값리턴 ) fbget_strfldtype() 필드키부터형 (Type) 에대한스트링을가져온다. 버퍼할당함수 fbisfbuf() 버퍼가필드화되어있는지알아볼때사용한다. fbcalcsize() 필드버퍼에할당할메모리량을계산한다. fbinit() 필드버퍼로할당된메모리공간을초기화시킨다. fballoc() 필드 버퍼를 동적으로 할당한다. fbfree() 할당한필드버퍼기억장소공간을해제한다. fbget_fbsize() 바이트단위로필드버퍼크기를반환한다. fbget_unused() 사용되지않는필드버퍼공간을체크한다. fbget_used() 사용중인 필드 버퍼 공간을 바이트 (byte) 수 단위로 반환한다. fbrealloc() 버퍼의크기를다시줄이거나늘릴때사용한다. 261
264 관리자안내서 fbmake_fldkey() 새로운생성 필드키를 동적으로 필드접근 및 수정함수 fbget() fbget_tu() 필드에 들어있는 내용을 크기 (length) 만큼 가져와서 버퍼에복사한다. 지정한필드키의필드순번에 해당하는 필드 데이터를 리턴한다. fbput() 필드 버퍼에 필드값을 추가하거나 덧붙일 때 사용된다. fbinsert() 필드버퍼에내용을삽입한다. fbupdate() 필드버퍼의내용을수정한다. fbdelete() 버퍼의필드내용을 삭제한다. fbgetval() fbgetnth() fbdelall() 버퍼에 있는 필드내용을 찾는다. 지정된필드값의필드순번을찾는다. 필드에들어있는모든값들을지운다. fbdelall_tu() 필드키 배열에 지정된 모든 필드의 전체 데이터를 삭제한다. fbfldcount() 지정된버퍼안에포함된필드개수를반환한다. 262
265 관리자안내서 fbkeyoccur() 필드키로지정된개수를반환한다. 필드의 fbispres() FBUF 의포인트버퍼에지정된필드의 occurrence 가있는지검사한다. fbgetvals() fbgetvall_tu() 필드순번으로부터값을찾아크기 (length) 를반환하고위치는함수의값 ( 포인터 ) 으로리턴한다. 필드에들어온필드값을 long 값으로반환한다. 필드 버퍼에서 지정한 fbchg_tu() 필드키의 필드 순번의 데이터를변경한다. fbgetlast_tu() 필드버퍼에서지정한필드키에저장되어있는필드데이터중마지막순번의데이터를리턴한다. fbgetval_last_tu() 필드버퍼에서지정한필드키에저장되어있는필드데이터중마지막순번의데이터를리턴한다. fbgetvals_tu() fbnext_tu() 지정한필드키의필드순번에해당하는필드데이터를문자열로변환하여리턴한다. 필드버퍼에서다음필드키와필드데이터를리턴한다. 263
266 관리자안내서 fbgetalloc_tu() 필드 버퍼에서 지정한 필드키의 필드 순번에 해당하는 필드 데이터를 지정한길이만큼버퍼를새로 할당받아저장하여리턴한다. fbgetalloc_tut() 필드 버퍼에서 지정한 필드키의 필드 순번에 해당하는 필드 데이터를 지정한 타입으로 필요한 길이만큼 버퍼를 새로 할당받아저장하여리턴한다. fbgetf() 필드버퍼에저장되어있는필드데이터를순차적으로리턴한다. fbgetlen() 지정한 필드키의필드순번에 해당하는 데이터의 길이를 리턴한다. fbftos() 필드버퍼에저장되어있는데이터를 matching 되는 struct 버퍼로전송한다. View function fbsnull() fbstelinit() 구조체의멤버변수가 NULL 인지확인한다. 구조체의멤버변수를 NULL 로초기화한다. fbstinit() 지정한구조체를초기화한다. fbstof() struct 버퍼에저장되어있는데이터를 matching 되는필드버퍼로전송한다. 264
267 관리자안내서 fbstrerror() 필드버퍼조작시에러내용을문자열로리턴한다. 에러리턴함수 getfberrno() 에러가발생하였을때에러번호를리턴한다. getfberror() 에러가발생하였을때에러번호를리턴한다. fbtypecvt() 한필드에서다른쪽필드로값을변환시켜준다. fbputt() 사용자항목을버퍼안의새로운필드가생성된곳으로덧붙여준다. fbgetvalt() 원하는필드의변환된값에포인터를리턴한다. 변환함수 fbgetntht() fbchg_tut() 원하는필드값이저장되어있는첫번째필드순번을리턴한다. 필드 버퍼에서 지정한 필드키의 데이터의 타입을 변경하여 필드 순번의 데이터를변경한다. fbget_tut() 지정한필드키의필드순번에 해당하는 필드 데이터를 지정한 타입으로 변환하여 리턴한다. fbgetvali() 필드 버퍼에서 지정한 필드키의 필드 순번에 저장되어있는필드데이터를 정수로변환하여리턴한다. 265
268 관리자안내서 버퍼조작함수 fbbufop() fbbufop_proj() 두필드버퍼의내용을비교, 복사, 이동, 변경한다. 필드키에 해당되는 버퍼를 변경한다. fbread() 표준입출력라이브러리와같이사용하는함수로써파일로부터필드버퍼를읽어들인다. 입출력함수 fbwrite() fbprint() 표준입출력라이브러리와같이사용하는 함수로써파일로쓰기를한다. 표준입출력으로버퍼의내용을출력한다. fbfprint() 필드버퍼에저장되어있는필드데이터를지정한파일스트림에출력한다. D.2 TP-모니터서비스를위한클라이언트프로그램 클라이언트프로그램은사용자의요청에따라서비스를요청하고, 그요청에대한응답을서버에서받아사용자가원하는형식으로결과를전달하는역할을하는프로그램이다. 다음과같이 TP-Monitor 보자. 서비스를위한클라이언트프로그램을만들어 이클라이언트프로그램의특징은버퍼유형이 STRUCT 타입이고, 서버프로그램과의통신유형은동기식통신을하도록하였다. # 구조체버퍼파일 : demo.s struct board { char name[20]; char title[50]; 266
269 관리자안내서 char [40]; char homepage[40]; char contents[600]; }; 다음은 Client sample 프로그램이다. #include <stdio.h> #include <string.h> #include "../usrinc/atmi.h" #include "../usrinc/wbapi.h" #include "../sdl/demo.s" write_board(wbsvcinfo *rqst) { struct board *sendbuf, *rcvbuf; char *name, *title, * , *homepage, *doc; char *hd; long rlen; name = wbgetdata(rqst, "name"); title = wbgetdata(rqst, "title"); = wbgetdata(rqst, " "); homepage = wbgetdata(rqst, "homepage"); doc = wbgetdata(rqst, "doc"); == NULL) { if ( (sendbuf=(struct board *)tpalloc("struct","board",0)) } == NULL) { fprintf(stderr,"error allocation send buffer\n"); exit(1); if ( (rcvbuf=(struct board *)tpalloc("struct","board",0)) } fp rintf(stderr,"error allocation receive buffer\n"); ex it(1) ; strcpy(sendbuf->name,name); strcpy(sendbuf->title,title); strcpy(sendbuf-> , ); strcpy(sendbuf->homepage,homepage); strcpy(sendbuf->contents,doc); 267
270 관리자안내서 if ( tpcall("insert", (char *)sendbuf, 0, (char **)&rcvbuf,&rlen,0 ) == -1) { fprintf(stderr, "tpcall failed:ora service -> %s\n", tpstrerror(tperrno)); tpfree((char *)sendbuf); wbreturn(rqst, WBSUCCESS); } hd = wbgethdr(rqst, "Content-Length"); wbprint(rqst,"<html>\n\n"); wbprint(rqst,"<head><title> Board</TITLE><\HEAD>\n\n"); wbprint(rqst,"<body>\n"); wbprint(rqst,"<h2> Board 글올리기확인 </H2>\n"); wbprint(rqst,"<hr WIDTH=600 ALIGN=left>\n<BR>"); wbprint(rqst,"<a HREF=\"mailto:%s\">%s</A>",rcvbuf-> , rcvbuf->name); wbprint(rqst,"<small>(<a HREF=\"%s\">%s</A>)</SMALL>", rcvbuf->homepage, rcvbuf->homepage); wbprint(rqst," 올리신글은다음과같습니다.<BR><BR>\n"); wbprint(rqst,"<table WIDTH=600 BORDER=1>\n"); wbprint(rqst,"<tr><td><b> 제목 </B> : %s</td></tr>\n", rcvbuf->title); wbprint(rqst,"<tr><td>%s</td></tr>\n", rcvbuf->contents); wbprint(rqst,"</table>\n\n<br> 이글이정상적으로게시판에 올려졌습니다.\n"); } wbprint(rqst,"</body>\n\n</html>"); tpfree((char *)sendbuf); wbreturn(rqst, WBSUCCESS); tpalloc() 은서비스요청이나응답시 TP-Monitor 와의통신에서지원되는버퍼를생성하기위해서사용하는함수이다. 이함수를이용하여 Web 으로부터입력받은테이타를 demo.s 에구조체에맞게입력받아저장할수있는 sendbuf 를생성하였다. 또한 TP-Monitor 로부터결과값을받을 rvcbuf 버퍼를할당하였다. tpalloc() 함수가성공적으로이루어지면 Char 타입의포인터가반환되므로 STRING 이나 CARRAY 가아닌 C언어구조체인경우에는반드시적합한형변환을해주어야한다. 268
271 관리자안내서 tpcall() 은서비스를요청하고응답이올때까지기다리는동기통신의함수이다. 이예제에서는 Web 으로부터입력받은학생정보를 INSERT 라고명명된서비스를호출하여서비스의응답이올때까지기다린다. INSERT Service 가성공적으로이루어지면 rvcbuf 에저장된결과값을 wbprin t 함수를이용하여출력한다. tpalloc() 로생성된버퍼는 service 가다이루지면 tpfree() 을이용하여해제한다. 위의모든작업이성공적으로이루어지면 wbreturn(rqst, WBSUCCESS) 수행되면서 에전달된다. D.3 TP- 모니터서비스를위한서버프로그램 서버프로그램은시스템자원에대한접근관리와클라이언트의요청을받아서처리하고응답을클라이언트에게전달하는역할을하는프로그램이다. 서버프로그램은개발자가 TP API 를이용하여개발한서비스루틴으로구성되어있다. 다음은 Client progam 으로부터넘겨받은값들을해당 DB 에입력하는서비스를하는 Server sample 프로그램이다. #include <stdio.h> #include <usrinc/atmi.h> #include <usrinc/wbapi.h> #include "../sdl/demo.s" EXEC SQL begin declare section; char name[20]; ch ar title[50] ; char [40]; char homepage[ 40]; char contents[ 600]; EXEC SQL end declare section; EXEC SQL include sqlca.h; INSERT(TPSVCINFO *msg) { struct board *stdata; 269
272 관리자안내서 stdata = (struct board *)msg->data; strcpy(name, stdata->name); strcpy(title, stdata->title); strcpy( , stdata-> ); strcpy(homepage, stdata->homepage); strcpy(contents, stdata->contents); /* 데이터베이스에 insert */ EXE C SQL insert into board(name, title, , homepage, contents) values(:name,:title,: ,:homepage,:contents); if (sqlca.sqlcode!= 0){ } printf("oracle sqlerror=%s",sqlca.sqlerrm.sqlerrmc); tpreturn(tpfail, sqlca.sqlcode, NULL, 0, 0); EXEC SQL COMM IT; tpreturn(wbsuccess, sqlca.sqlcode, (char *)stdata, 0, 0); } Client program 으로부터전달받은 data message 를 board 라고명명되어있는 DB table 저장하는프로그램이다. INSERT service 가성공적으로이루어지면 tpreturn() 가서비스처리결과를 Client 에게보내고서비스루틴을마친다. D.4 클라이언트 / 서버프로그램컴파일 D.4.1 클라이언트프로그램의 Makefile 클라이언트프로그램의컴파일을위해아래의 Makefile.c 를작성한다. #Makefile.c TARGET = $(COMP_TARGET) APOBJS = $(TARGET).o WEBTOB_INCDIR = $(WEBTOBDIR)/usrinc WEBTOB_BINDIR = $(WEBTOBDIR)/bin WEBTOB_LIBDIR = $(WEBTOBDIR)/lib 270
273 관리자안내서 SDLFILE = demo.s SDLDIR = /user/local/webtob/sdl CFLAGS = -O -I$(WEBTOBDIR) LIBS = -lsocket -lnsl -laps OBJS = $(APOBJS) $(SVCTOBJ) $(SDLOBJ) SVCTOBJ = $(TARGET)_svctab.o SDLOBJ = ${SDLFILE:.s=_sdl.o} SDLC = ${SDLFILE:.s=_sdl.c}.SUFFIXES :.v.c.o: $(CC) $(CFLAGS) -c $< # Server $(TARGET): $(APOBJS) $(SVCTOBJ) $(SDLOBJ) $(CC) $(CFLAGS) -L$(WEBTOB_LIBDIR) -o $(TARGET) $(OBJS) $(LIBS) $(SVCTOBJ): cp $(WEBTOBDIR)/svct/$(TARGET)_svctab.c. $(CC) $(CFLAGS) -I$(WEBTOB_INCDIR) -c $(TARGET)_svctab.c $(SDLOBJ): $(WEBTOBDIR)/bin/wssdlc -i../sdl/$(sdlfile) $(CC) $(CFLAGS) -c../sdl/$(sdlc) # clean: -rm -f *.o core D.4.2 서버프로그램의 Makefile (Makefile.pc) 서버프로그램의컴파일을위해아래의 Makefile.pc 를작성한다. #Makefile.pc # Server Pro*C makefile include $(ORACLE_HOME)/precomp/lib/env_precomp.mk ORALIBDIR = $(LIBHOME) ORALIB = $(PROLDLIBS) 271
274 관리자안내서 TARGET = $(COMP_TARGET) APOBJS = $(TARGET).o SDLFILE = demo.s SDLDIR = /user/local/webtob/sdl # Using Shared Library LIBS = -laps -lsocket -lnsl OBJS = $(APOBJS) $(SDLOBJ) $(SVCTOBJ) # # If Server Program use STRUCT Buffer, the SDLOBJ and SDLC parameters # are needed. # Don't set those parameter (SDLOBJ and SDLC), if server program use STRING, # CARRAY or FIELD Buffer. # SD LOBJ = ${SDLFILE:.s=_sdl.o} #S DLOBJ = SD LC = ${SDLFILE:.s=_sdl.c} #SDLC = SVCTOBJ = $(TARGET)_svctab.o CFLAGS = -O -I$(WEBTOBDIR) APPDIR = $(WEBTOBDIR)/ap SVCTDIR = $(WEBTOBDIR)/svct WBLIBDIR = $(WEBTOBDIR)/lib #.SUFFIXES :.c.c.o: $(CC) $(CFLAGS) -c $< # # serve r compile # all: $(TARGET) $(TARGET): $(OBJS) 272
275 관리자안내서 $(CC) $(CFLAGS) -L$(WBLIBDIR) -o $(TARGET) -L$(ORALIBDIR) $(ORALIB) $(OBJS) $(LIBS) rm -f $(OBJS) $(APOBJS): $(TARGET).pc proc iname= $( TARGET) include=$(webtobdir) $(CC) $(CFLAGS) -c $(TARGET).c $(SVCTOBJ): touch $(SVCTDIR)/$(TARGET)_svctab.c $(CC) $(CFLAGS) -c $(SVCTDIR)/$(TARGET)_svctab.c $(SDLOBJ): $(WEBTOBDIR)/bin/wssdlc -i../sdl/$(sdlfile) $(CC) $(CFLAGS) -c../sdl/$(sdlc) # clean: -rm -f *.o core $(TARGET) $(TARGET).lis D.4.3 컴파일실행 다음의 compile 파일을이용하여컴파일작업을한다. #Compile #!/bin/ksh # program compile # #main Param=$1 case "$Param" in c) export COMP_TARGET=$2 make -f Makefile.c;; pc) export COMP_TARGET=$2 make -f Makefile.pc all ;; clean) make -f Makefile.pc clean;; *) echo "Usage: $0 argument";; esac 273
276 관리자안내서 실행예 ) $ compile c client $ compile pc server D.4.4 데이터베이스사용을위한작업 다음과같이 에서는 DB 관련한 Service 를하기위해각 DB vender 별 library 제공한다.( liboras.a libinfs.a libsybs.a libdb2s.a ) 또한 TMS Engine 을띄우기위해서 dumy.c 와 tms_ora.mk 파일을작성해야한다. tms_ora.mk makefile 은 machine 에따라컴파일구성이다를수있다. #dumy.c int i; #tms_ora.mk # include $(ORACLE_HOME)/precomp/lib/env_precomp.mk ORALIBDIR = $(LIBHOME) ORALIB = -lclntsh $(PROLDLIBS) TARGET = tms_ora APOBJ = dumy.o APPDIR = $(WEBTOBDIR)/ap WEBTOBLIBD= $(WEBTOBDIR)/lib WEBTOBLIBS = -ltms -loras all: $(TARGET) $(TARGET): $(APOBJ) $(CC) -L$(WEBTOBLIBD) -o $(TARGET) -L$(ORALIBDIR) $(ORALIB) $(APOBJ) $(WEBTOBLIBS) $(APOBJ): $(CC) -c dumy.c # clean: 274
277 관리자안내서 -rm -f *.o core $(TARGET) 컴파일 예 ) $ make f tms_ora.mk all D.5 TP API 실행 앞서예로들은 TP API 프로그램의실행결과를보기위해다음과같은 HTML 파일을작성한다. <!-- tpapi.html --> <html> <head><title>tp API Test</title></head> <body> <b>tp API Test</b> <hr> <form method=post action="/webapi/write_board"> <table> <br> <tr> <td>name</td> <td><input type=input name=name></td> </tr> <tr> <td>title</td> <td><input type=input name=title></td> </tr> <tr> <td> </td> <td><input type=input name= ></td> </tr> <tr> <td>homapage</td> <td><input type=input name=homepage></td> </tr> <tr> <td>contents</td> <td><input type=input name=doc></td> 275
278 관리자안내서 </tr> <tr> <td align="center" cols="2"> <input type=submit value="submit"> </td> </table> </form> </body> </html> 브라우저에서다음과같이요청한다. 그림 D-1. TP API 실행을위한입력화면 위와같이값을입력하고 submit 버튼을클릭하면데이터베이스에미리생성해둔 board 테이블에 INSERT 작업을하고 Server 프로그램에작성한결과화면이출력된다. 276
279 관리자안내서 그림 D-2. TP API 실행결과화면 277
280 관리자안내서 E Tmax 와의연동 E.1 Tmax 연동을위한클라이언트프로그램작성 본문 Tmax 연동을위한환경파일에서제시한 apsl.m 에대한클라이언트프로그램을아래에제공한다. 본예제는 Tmax 의 sample 서버프로그램인 svr2 의 TOUPPER 서비스를이용하는클라이언트프로그램으로서, wbsession.c 와 wbquery.c 로이루어져있으며 wbquery.c 에 tmax.env 의경로를지정해주어야한다. Tmax 의사용과 sample 서버 svr2 의이용에대해선 Tmax 매뉴얼을참조해야한다. #include <stdio.h> #include <string.h> #include "../usrinc/wbapi.h" <<wbsession.c>> wbsession(wbsvcinfo *rqst) { int len; char *value, *value2; char *name; SESSION *session; name = wbgetdata( rqst, "name" ); session= wbgetsession( rqst ); session = wbsessionsetvalue( session, "name", name, strlen(name) ); value = wbsessiongetvalue( session, "name", &len ); wbsendredirect( rqst, "/svct/query" ); wbreturn( rqst, WBS UCCESS ); } 278
281 관리자안내서 <<wbqu ery.c>> #include <stdio.h> #include <usrinc/atmi.h> #include <usrinc/wbapi.h> int flag=0; wbsvrinit( int argc, char *argv[] ) { fprintf( stdout, "query SERVER Start!\n" ); if( test_tpstart() == -1 ) { fprintf( stdout,"tpstart failed!!! %s \n",tpstrerror(tperrno) ); } return 0; } wbsvrdone() { fprintf( stdout, "query SVR DONE!\n" ); tpend(); } query(wbsvcinfo *rqst) { int len; char *name; SESSION *session; session= wbgetsession( rqst ); name = wbsessiongetvalue( session, "name", &len ); wbputhdr(rqst,"content-type","text/html; charset=euckr"); wbprint( rqst, "<HTML><BODY>" ); name); if( query!= NULL ) { } else { } wbprint(rqst, "<H1>send Data: %s <br></h1>", wbpr int( rqst, "<H1>QUERY is null</h1>" ); 279
282 관리자안내서 if ( test_tpcall(name) == -1 ) { wbprint( rqst, "<H1>tpcall failed : %s</h1>", tpstrerror(tperrno) ); } else { wbprint( rqst, "<H1>recieved Data : %s</h1>",name ); } } wbprint( rqst, "</body></html>" ); wbreturn( rqst, WBSUCCESS ); int test_tpstart() { int rcode; "TMAX" ); rcode = tmaxreadenv( "/data1/gloria/webtob/ap/tmax.env", if ( rcode == -1 ) { printf( "tmax readenv failed %s \n", tpstrerror(tperrno)); return -1; } rcode = tpstart( (TPSTART_T *)NULL ); if ( rcode == -1 ){ printf( "tpstart failed %s \n",tpstrerror(tperrno) ); return -1; } return 1; } int test_tpcall(char *name) { int rcode; char *sndbuf, *rcvbuf; long rcvlen, sndlen; NULL){ if ((sndbuf = (char *)tpalloc("string", NULL, 0)) == 280
283 관리자안내서 printf( "sendbuf alloc failed! %s \n", tpstrerror(tperrno) ); tpend(); return -1; } if ((rcvbuf = (char *)tpalloc("string", NULL, 0)) == NULL){ printf( "recvbuf alloc failed! %s \n", tpstrerror(tperrno) ); tpfree( (char *)sndbuf ); tpend(); return -1; } strcpy(sndbuf, name); 1){ if(tpcall("toupper", sndbuf, 0, &rcvbuf, &rcvl en, 0 ) ==- printf("can't send request to service TOUPPER %s \n", tpstrerror(tperrno)); } } tpfree( (char *)sndbuf ); tpfree( (char *)rcvbuf ); tpend(); return -1; printf( "[rcvbuf:%s]\n", rcvbuf ); strcpy( name, rcvbuf ); tpfree( (char *)sndbuf ); tpfree( ( char *)rcvbuf ); return 1; 위소스코드에서 Tmax 환경을참조하는부분 (tmaxreadenv) 을각자환경에맞는경로로수정한다. tmax.env 에대한예시는다음과같다. [TMAX] TMAXDIR=/data1/gloria/tmax TMAX_HOST_ADDR= TMAX_HOST_PORT=7979 <<tmax.env>> SDLFILE=/data1/gloria/tmax/sample/sdl/tmax.sdl FDLFILE=/data1/gloria/tmax/sample/fdl/tmax.fdl 281
284 관리자안내서 TMAX_CONNECT_TIMEOUT=2 [TMAX] TMAXDIR=/data1/gloria/tmax TMAX_HOST_ADDR= TMAX_HOST_PORT=7979 SDLFILE=/data1/gloria/tmax/sample/sdl/tmax.sdl FDLFILE=/data1/gloria/tmax/sample/fdl/tmax.fdl TMAX_CONNECT_TIMEOUT=2 E.2 클라이언트프로그램컴파일 Client 프로그램의컴파일에사용하는 Makefile 은다음과같다. #Makefile.c TARGET = $(COMP_TARGET) APOBJS = $(TARGET).o WEBTOB_INCDIR = $(WEBTOBDIR)/usrinc WEBTOB_BINDIR = $(WEBTOBDIR)/bin WEBTOB_LIBDIR = $(WEBTOBDIR)/lib ############### # TMAX_LIBDIR # ############### #32bit Tmax library TMAX_LIBDIR = $(TMAXDIR)/lib #64bit Tmax library #TMAX_LIBDIR = $(TMAXDIR)/lib64 #SDLFILE = demo.s #SDLDIR = $(WEBTOBDIR)/ sdl ########## # CFLAGS # ########## #hp 32bit CFLAGS = -Ae +DA1.1 +DD32 +DS2.0 -O -I$(WEBTOBDIR) -L/data1/gloria/tmax/lib 282
285 관리자안내서 #hp 64bit #CFLAGS = -Ae +DA2.0W +DD64 +DS2.0 -O -I$(WEBTOBDIR) -L/data1/gloria/tmax/lib #sun 64bit #CFLAGS = -xarch=v9 -O -I$(WEBTOBDIR) #Linux #CFLAGS = -O -I$(WEBTOBDIR) #ibm 32bit #CFLAGS = -q32 -O -I$(WEBTOBDIR) -brtl #ibm 64bit #CFLAGS = -q64 -O -I$(WEBTOBDIR) -bnoquiet -brtl ######## # LIBS # ######## #hp, sun, linux LIBS = -lapsl -lcli #ibm #LIBS = -lapsl -lcli -lz OBJS = $( APOBJS) $(SVCTOBJ) $(SDLOBJ) SVCTOBJ = $(TARGET)_svctab.o #SDLOBJ = ${SDLFILE :.s=_sdl.o} #SDLC = ${SDLFILE:.s=_sdl.c}.SUFFIXES :.v.c.o: $(CC) $(CFLAGS) -c $< # Server $(TARGET): $(APOBJS) $(SVCTOBJ) $(CC) $(CFLAGS) -L$(WEBTOB_LIBDIR) -L$(TMAX_LIBDIR) -o $(TARGET) $(OBJS) $(LIBS) 283
286 -f -f *_svctab.c $(SVCTOBJ): cp $(WEBTOBDIR)/svct/$(TARGET)_svctab.c. $(CC) $(CFLAGS) -I$(WEBTOB_INCDIR) -c $(TARGET)_svctab.c # clean: -rm -f *.o core 위의 Makefile.c 는다음의 compile 을이용하여사용한다. #!/bin/ksh # program compile # #main 실행예 ) Param=$1 case "$Param" in esac c) export COMP_TARGET=$2 api) pc) clean) $ compi le c wbsession $ compile c wbquery make -f Makefile.c;; export COMP_TARGET=$2 make -f Makefile.api;; export COMP_TARGET=$2 make -f Makefile.pc all;; make -f Makefile.pc clean;; *) echo "Usage: $0 argument";; E.3 Tm ax 연동실행 위예제를이용하여 Tmax 다음과같다. 와의연동을실행해보기위한순서는 284
287 관리자안내서 1. 환경파일 Compile $ wscfl i 2. Service Table apsl.m 생성 $ wsgst 3. 클라이언트프로그램컴파일 $ comp ile c wbsession $ comp ile c wbquery 4. Tmax 의서버프로그램컴파일 $ compile c svr2 5. Tmax 기동 $ tmboot 6. 기동 $ wsboot 실행결과를보기위해다음과같은 HTML 페이지를이용한다. <toupper.html> <html> <head> <title>wbgetquerystring</title> </head> <body> <form method=post action="/svct/wbsession"> <table width=370> <br> <tr> <td> input send Data</td> <td><input type=input name=name></td> <td><input type=submit value="submit"></td> </tr> </table> </form> </body> </html> 285
288 관리자안내서 < 그림 E-1. toupper.html> < 그림 E-2. TOUPPER 서비스결과화면 > 286
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 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 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 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 informationMicrosoft 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 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 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 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 information1) 인증서만들기 ssl]# cat >www.ucert.co.kr.pem // 설명 : 발급받은인증서 / 개인키파일을한파일로저장합니다. ( 저장방법 : cat [ 개인키
Lighttpd ( 멀티도메인 ) SSL 인증서신규설치가이드. [ 고객센터 ] 한국기업보안. 유서트기술팀 1) 인증서만들기 [root@localhost ssl]# cat www.ucert.co.kr.key www.ucert.co.kr.crt >www.ucert.co.kr.pem // 설명 : 발급받은인증서 / 개인키파일을한파일로저장합니다. ( 저장방법 : cat
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 informationBEA_WebLogic.hwp
BEA WebLogic Server SSL 설정방법 - Ver 1.0-2008. 6 개정이력 버전개정일개정내용 Ver 1.0 2008 년 6 월 BEA WebLogic Server SSL 설명서최초작성 본문서는정보통신부 한국정보보호진흥원의 보안서버구축가이드 를참고하여작성되었습니다. 본문서내용의무단도용및사용을금합니다. < 목차 > 1. 개인키및 CSR 생성방법
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 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 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 information1) 인증서만들기 ssl]# cat >www.ucert.co.kr.pem // 설명 : 발급받은인증서 / 개인키파일을한파일로저장합니다. ( 저장방법 : cat [ 개인키
Lighttpd ( 단일도메인 ) SSL 인증서신규설치가이드. [ 고객센터 ] 한국기업보안. 유서트기술팀 1) 인증서만들기 [root@localhost ssl]# cat www.ucert.co.kr.key www.ucert.co.kr.crt >www.ucert.co.kr.pem // 설명 : 발급받은인증서 / 개인키파일을한파일로저장합니다. ( 저장방법 : cat
More information<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D313939392D382E687770>
i ii iii iv v vi 1 2 3 4 가상대학 시스템의 국내외 현황 조사 가상대학 플랫폼 개발 이상적인 가상대학시스템의 미래상 제안 5 웹-기반 가상대학 시스템 전통적인 교수 방법 시간/공간 제약을 극복한 학습동기 부여 교수의 일방적인 내용전달 교수와 학생간의 상호작용 동료 학생들 간의 상호작용 가상대학 운영 공지사항,강의록 자료실, 메모 질의응답,
More informationTmax
WebtoB Installation Guide 저작권 Copyright (c) 2000 Tmax Soft Co., Ltd. All Rights Reserved. 본서의일부나전체의내용은어떠한형태로든무단복제를금하며전기적, 물리적, 사진, 기록또는다른매체로의복제를위해서는반드시 Tmax Soft 의 사전동의를얻어야합니다. 본제품사용중일어난특정한, 우발적, 비직접적,
More information초기설정 WebtoB Web Server 에서인증서를사용하기위해 CSR 을생성하는방법입니다. 1. 초기설정 - CSR 을생성하기전에다음의몇가지사항을필히확인합니다. 부팅후 Path 나환경변수를일일이설정하지않게초기설정파일을사용하여로그인시자동으로실행되도록하고있습니다. 그러나
초기설정 WebtoB Web Server 에서인증서를사용하기위해 CSR 을생성하는방법입니다. 1. 초기설정 - CSR 을생성하기전에다음의몇가지사항을필히확인합니다. 부팅후 Path 나환경변수를일일이설정하지않게초기설정파일을사용하여로그인시자동으로실행되도록하고있습니다. 그러나간혹초기설정파일이실행되지않아서에러가생기는경우가있는데이럴경우에초기설정파일을다시한번실행시켜야합니다.
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 informationMicrosoft Word - 06_WebtoB_Error_Message_Reference_41.doc
WebtoB Error Message Reference Manual Copyright 2005 Tmax Soft Co., Ltd. All Rights Reserved. Copyright Notice Copyright 2005 Tmax Soft Co., Ltd. All Rights Reserved. Tmax Soft Co., Ltd. 대한민국서울시강남구대치동
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 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 informationThe Pocket Guide to TCP/IP Sockets: C Version
인터넷프로토콜 5 장 데이터송수신 (3) 1 파일전송메시지구성예제 ( 고정크기메시지 ) 전송방식 : 고정크기 ( 바이너리전송 ) 필요한전송정보 파일이름 ( 최대 255 자 => 255byte 의메모리공간필요 ) 파일크기 (4byte 의경우최대 4GB 크기의파일처리가능 ) 파일내용 ( 가변길이, 0~4GB 크기 ) 메시지구성 FileName (255bytes)
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 informationPCServerMgmt7
Web Windows NT/2000 Server DP&NM Lab 1 Contents 2 Windows NT Service Provider Management Application Web UI 3 . PC,, Client/Server Network 4 (1),,, PC Mainframe PC Backbone Server TCP/IP DCS PLC Network
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 informationPowerPoint Template
JavaScript 회원정보 입력양식만들기 HTML & JavaScript Contents 1. Form 객체 2. 일반적인입력양식 3. 선택입력양식 4. 회원정보입력양식만들기 2 Form 객체 Form 객체 입력양식의틀이되는 태그에접근할수있도록지원 Document 객체의하위에위치 속성들은모두 태그의속성들의정보에관련된것
More informationMicrosoft Word - 3부A windows 환경 IVF + visual studio.doc
Visual Studio 2005 + Intel Visual Fortran 9.1 install Intel Visual Fortran 9.1 intel Visual Fortran Compiler 9.1 만설치해서 DOS 모드에서실행할수있지만, Visual Studio 2005 의 IDE 를사용하기위해서는 Visual Studio 2005 를먼저설치후 Integration
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 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 informationCloud 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 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 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<4D F736F F F696E74202D C61645FB3EDB8AEC7D5BCBA20B9D720C5F8BBE7BFEBB9FD2E BC8A3C8AF20B8F0B5E55D>
VHDL 프로그래밍 D. 논리합성및 Xilinx ISE 툴사용법 학습목표 Xilinx ISE Tool 을이용하여 Xilinx 사에서지원하는해당 FPGA Board 에맞는논리합성과정을숙지 논리합성이가능한코드와그렇지않은코드를구분 Xilinx Block Memory Generator를이용한 RAM/ ROM 생성하는과정을숙지 2/31 Content Xilinx ISE
More informationNetwork Security - Wired Sniffing 실습 ICNS Lab. Kyung Hee University
Network Security - Wired Sniffing 실습 ICNS Lab. Kyung Hee University Outline Network Network 구조 Source-to-Destination 간 packet 전달과정 Packet Capturing Packet Capture 의원리 Data Link Layer 의동작 Wired LAN Environment
More informationSPECweb Install
SPECweb2005 Install & Configure Guide in Linux(fedora 13) Version # 작성일작성자 E-mail 설명 1.00 2011.3.3 김호연 hykim@q.ssu.ac.kr 첫버전작성함 본문서는 SPECweb2005를설치하고구동하는과정을설명합니다. 본문서의목적은, 어떠한시행착오없이 SPECweb2005을보다쉽게사용할수있도록함에있습니다.
More informationSolaris Express Developer Edition
Solaris Express Developer Edition : 2008 1 Solaris TM Express Developer Edition Solaris OS. Sun / Solaris, Java, Web 2.0,,. Developer Solaris Express Developer Edition System Requirements. 768MB. SPARC
More informationSQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자
SQL Developer Connect to TimesTen 유니원아이앤씨 DB 팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 2010-07-28 작성자 김학준 최종수정일 2010-07-28 문서번호 20100728_01_khj 재개정이력 일자내용수정인버전
More informationiii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.
Eclipse 개발환경에서 WindowBuilder 를이용한 Java 프로그램개발 이예는 Java 프로그램의기초를이해하고있는사람을대상으로 Embedded Microcomputer 를이용한제어시스템을 PC 에서 Serial 통신으로제어 (Graphical User Interface (GUI) 환경에서 ) 하는프로그램개발예를설명한다. WindowBuilder:
More informationHLS(HTTP Live Streaming) 이용가이드 1. HLS 소개 Apple iphone, ipad, ipod의운영체제인 ios에서사용하는표준 HTTP 기반스트리밍프로토콜입니다. 2. HLS 지원대상 - 디바이스 : iphone/ipad/ipod - 운영체제 :
HLS(HTTP Live Streaming) 이용가이드 1. HLS 소개 Apple iphone, ipad, ipod의운영체제인 ios에서사용하는표준 HTTP 기반스트리밍프로토콜입니다. 2. HLS 지원대상 - 디바이스 : iphone/ipad/ipod - 운영체제 : ios 3.0 이상 - 콘텐츠형식 : MP4 (H264,AAC ), MP3 * 디바이스별해상도,
More informationSun Java System Messaging Server 63 64
Sun Java System Messaging Server 6.3 64 Sun Java TM System Communications Suite Sun Microsystems, Inc. 4150 Network Circle Santa Clara, CA 95054 U.S.A. : 820 2868 2007 7 Copyright 2007 Sun Microsystems,
More information기존에 Windchill Program 이 설치된 Home Directory 를 선택해준다. 프로그램설치후설치내역을확인해보면 Adobe Acrobat 6.0 Support 내역을확인할수 있다.
PDMLink 에등록된 Office 문서들의 PDF 문서변환기능및 Viewer 기능을알아보자 PDM Link에서지원하는 [Product View Document Support] 기능은 Windows-Base 기반의 Microsoft Office 문서들을 PDMLink용 Viewer인 Product View를통한읽기가가능한 PDF Format 으로변환하는기능이다.
More informationWindows 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 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 informationLXR 설치 및 사용법.doc
Installation of LXR (Linux Cross-Reference) for Source Code Reference Code Reference LXR : 2002512( ), : 1/1 1 3 2 LXR 3 21 LXR 3 22 LXR 221 LXR 3 222 LXR 3 3 23 LXR lxrconf 4 24 241 httpdconf 6 242 htaccess
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 informationSena Device Server Serial/IP TM Version
Sena Device Server Serial/IP TM Version 1.0.0 2005. 3. 7. Release Note Revision Date Name Description V1.0.0 2005-03-7 HJ Jeon Serial/IP 4.3.2 ( ) 210 137-130, : (02) 573-5422 : (02) 573-7710 email: support@sena.com
More informationSecure Programming Lecture1 : Introduction
Malware and Vulnerability Analysis Lecture4-1 Vulnerability Analysis #4-1 Agenda 웹취약점점검 웹사이트취약점점검 HTTP and Web Vulnerability HTTP Protocol 웹브라우저와웹서버사이에하이퍼텍스트 (Hyper Text) 문서송수신하는데사용하는프로토콜 Default Port
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 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 information본문서는 초급자들을 대상으로 최대한 쉽게 작성하였습니다. 본문서에서는 설치방법만 기술했으며 자세한 설정방법은 검색을 통하시기 바랍니다. 1. 설치개요 워드프레스는 블로그 형태의 홈페이지를 빠르게 만들수 있게 해 주는 프로그램입니다. 다양한 기능을 하는 플러그인과 디자인
스마일서브 CLOUD_Virtual 워드프레스 설치 (WORDPRESS INSTALL) 스마일서브 가상화사업본부 Update. 2012. 09. 04. 본문서는 초급자들을 대상으로 최대한 쉽게 작성하였습니다. 본문서에서는 설치방법만 기술했으며 자세한 설정방법은 검색을 통하시기 바랍니다. 1. 설치개요 워드프레스는 블로그 형태의 홈페이지를 빠르게 만들수 있게
More informationORANGE 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 informationPortal_9iAS.ppt [읽기 전용]
Application Server iplatform Oracle9 A P P L I C A T I O N S E R V E R i Oracle9i Application Server e-business Portal Client Database Server e-business Portals B2C, B2B, B2E, WebsiteX B2Me GUI ID B2C
More informationVoice Portal using Oracle 9i AS Wireless
Voice Portal Platform using Oracle9iAS Wireless 20020829 Oracle Technology Day 1 Contents Introduction Voice Portal Voice Web Voice XML Voice Portal Platform using Oracle9iAS Wireless Voice Portal Video
More informationWindows Server 2012
Windows Server 2012 Shared Nothing Live Migration Shared Nothing Live Migration 은 SMB Live Migration 방식과다른점은 VM 데이터파일의위치입니다. Shared Nothing Live Migration 방식은 Hyper-V 호스트의로컬디스크에 VM 데이터파일이위치합니다. 반면에, SMB
More informationSMB_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 informationAPOGEE Insight_KR_Base_3P11
Technical Specification Sheet Document No. 149-332P25 September, 2010 Insight 3.11 Base Workstation 그림 1. Insight Base 메인메뉴 Insight Base Insight Insight Base, Insight Base Insight Base Insight Windows
More information0. 들어가기 전
컴퓨터네트워크 14 장. 웹 (WWW) (3) - HTTP 1 이번시간의학습목표 HTTP 의요청 / 응답메시지의구조와동작원리이해 2 요청과응답 (1) HTTP (HyperText Transfer Protocol) 웹브라우저는 URL 을이용원하는자원표현 HTTP 메소드 (method) 를이용하여데이터를요청 (GET) 하거나, 회신 (POST) 요청과응답 요청
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 information차별화된아키텍처의고성능웹서버 기존웹서버의구조적문제점을개선하여탁월한성능및안정성을제공하는차세대웹서버 MIDDLEWARE JEUS WebtoB Tmax InfiniCache
차별화된아키텍처의고성능웹서버 기존웹서버의구조적문제점을개선하여탁월한성능및안정성을제공하는차세대웹서버 MIDDLEWARE JEUS Tmax InfiniCache 차별화된아키텍처의고성능웹서버 는웹의 를사용하여웹페이지가들어있는파일을사용자들에게제공하는웹서버입니다. 기존웹서버가가지고있는구조적인문제를혁신적으로개선하여성능및 안정성에서탁월한기능을제공합니다. 또한웹상에서의대규모트랜잭션처리에적합하도록
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 information목차 데모 홖경 및 개요... 3 테스트 서버 설정... 4 DC (Domain Controller) 서버 설정... 4 RDSH (Remote Desktop Session Host) 서버 설정... 9 W7CLIENT (Windows 7 Client) 클라이얶트 설정
W2K8 R2 RemoteApp 및 Web Access 설치 및 구성 Step-By-Step 가이드 Microsoft Korea 이 동 철 부장 2009. 10 페이지 1 / 60 목차 데모 홖경 및 개요... 3 테스트 서버 설정... 4 DC (Domain Controller) 서버 설정... 4 RDSH (Remote Desktop Session Host)
More information소개 TeraStation 을 구입해 주셔서 감사합니다! 이 사용 설명서는 TeraStation 구성 정보를 제공합니다. 제품은 계속 업데이트되므로, 이 설명서의 이미지 및 텍스트는 사용자가 보유 중인 TeraStation 에 표시 된 이미지 및 텍스트와 약간 다를 수
사용 설명서 TeraStation Pro II TS-HTGL/R5 패키지 내용물: 본체 (TeraStation) 이더넷 케이블 전원 케이블 TeraNavigator 설치 CD 사용 설명서 (이 설명서) 제품 보증서 www.buffalotech.com 소개 TeraStation 을 구입해 주셔서 감사합니다! 이 사용 설명서는 TeraStation 구성 정보를
More informationJVM 메모리구조
조명이정도면괜찮조! 주제 JVM 메모리구조 설미라자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조장. 최지성자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조원 이용열자료조사, 자료작성, PPT 작성, 보고서작성. 이윤경 자료조사, 자료작성, PPT작성, 보고서작성. 이수은 자료조사, 자료작성, PPT작성, 보고서작성. 발표일 2013. 05.
More information4S 1차년도 평가 발표자료
모바일 S/W 프로그래밍 안드로이드개발환경설치 2012.09.05. 오병우 모바일공학과 JDK (Java Development Kit) SE (Standard Edition) 설치순서 Eclipse ADT (Android Development Tool) Plug-in Android SDK (Software Development Kit) SDK Components
More informationPowerPoint Template
설치및실행방법 Jaewoo Shim Jun. 4. 2018 Contents SQL 인젝션이란 WebGoat 설치방법 실습 과제 2 SQL 인젝션이란 데이터베이스와연동된웹서버에입력값을전달시악의적동작을수행하는쿼리문을삽입하여공격을수행 SELECT * FROM users WHERE id= $_POST[ id ] AND pw= $_POST[ pw ] Internet
More informationMicrosoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx
To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 개발환경구조및설치순서 JDK 설치 Eclipse 설치 안드로이드 SDK 설치 ADT(Androd Development Tools) 설치 AVD(Android Virtual Device) 생성 Hello Android! 2 Eclipse (IDE) JDK Android SDK with
More informationRHEV 2.2 인증서 만료 확인 및 갱신
2018/09/28 03:56 1/2 목차... 1 인증서 확인... 1 인증서 종류와 확인... 4 RHEVM CA... 5 FQDN 개인 인증서... 5 레드햇 인증서 - 코드 서명 인증서... 6 호스트 인증... 7 참고사항... 8 관련링크... 8 AllThatLinux! - http://allthatlinux.com/dokuwiki/ rhev_2.2_
More informationRemote UI Guide
Remote UI KOR Remote UI Remote UI PDF Adobe Reader/Adobe Acrobat Reader. Adobe Reader/Adobe Acrobat Reader Adobe Systems Incorporated.. Canon. Remote UI GIF Adobe Systems Incorporated Photoshop. ..........................................................
More information1. efolder 시스템구성 A. DB B. apache - mod-perl - PHP C. SphinxSearch ( 검색서비스 ) D. File Storage 2. efolder 설치순서 A. DB (MySQL) B. efolder Service - efolder
Embian efolder 설치가이드 efolder 시스템구성 efolder 설치순서 Installation commands 1. efolder 시스템구성 A. DB B. apache - mod-perl - PHP C. SphinxSearch ( 검색서비스 ) D. File Storage 2. efolder 설치순서 A. DB (MySQL) B. efolder
More informationBusiness Agility () Dynamic ebusiness, RTE (Real-Time Enterprise) IT Web Services c c WE-SDS (Web Services Enabled SDS) SDS SDS Service-riented Architecture Web Services ( ) ( ) ( ) / c IT / Service- Service-
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 information6강.hwp
----------------6강 정보통신과 인터넷(1)------------- **주요 키워드 ** (1) 인터넷 서비스 (2) 도메인네임, IP 주소 (3) 인터넷 익스플로러 (4) 정보검색 (5) 인터넷 용어 (1) 인터넷 서비스******************************* [08/4][08/2] 1. 다음 중 인터넷 서비스에 대한 설명으로
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 information인디쓔피-IOM핸돜벁닄큐1014pdf, page 59 @ Preflight ( IOM핸돜벁닄큐__1014 )
Publisher: International Organization for Migration 17, route des Morillons 1211 Geneva 19 Switzerland Tel: +41.22.717 91 11 Fax: +41.22.798 61 50 E-mail: hq@iom.int Internet: http://www.iom.int ISBN 978
More informationSSL인증서 설치 매뉴얼 (Apache)
SSL 인증서설치매뉴얼 (Apache) 백업된인증서설치 본문서에안내된버전이외의다른버전을사용하시는경우안내내용과차이가있을수있습니다. 본문서는기본적인참고용자료이며, 구성환경에따라안내내용과차이가있을수있습니다. 본문서는서버담당자를기준으로작성되었습니다. 웹서버인증서를설치할서버담당자에게전달하여주시기바랍니다. ** 인증서설치전확인사항 ** 인증서설치시 SSL 관련설정은기존
More information1. 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 informationBackup Exec
(sjin.kim@veritas.com) www.veritas veritas.co..co.kr ? 24 X 7 X 365 Global Data Access.. 100% Storage Used Terabytes 9 8 7 6 5 4 3 2 1 0 2000 2001 2002 2003 IDC (TB) 93%. 199693,000 TB 2000831,000 TB.
More informationPowerPoint 프레젠테이션
Synergy EDMS www.comtrue.com opyright 2001 ComTrue Technologies. All right reserved. - 1 opyright 2001 ComTrue Technologies. All right reserved. - 2 opyright 2001 ComTrue Technologies. All right reserved.
More information메일서버등록제(SPF) 인증기능적용안내서 (Exchange Windows 2003) OS Mail Server SPF 적용모듈 작성기준 Windows Server 2003 Exchange Server 2003 GFI MailEssentials 2010 fo
메일서버등록제(SPF) 인증기능적용안내서 (Exchange 2003 - Windows 2003) OS Mail Server SPF 적용모듈 작성기준 Windows Server 2003 Exchange Server 2003 GFI MailEssentials 2010 for Exchange 2016 년 6 월 - 1 - 목 차 I. 개요 1 1. SPF( 메일서버등록제)
More information<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 informationESP1ºÎ-04
Chapter 04 4.1..,..,.,.,.,. RTOS(Real-Time Operating System)., RTOS.. VxWorks(www.windriver.com), psos(www.windriver.com), VRTX(www.mento. com), QNX(www.qnx.com), OSE(www.ose.com), Nucleus(www.atinudclus.
More informationMySQL-Ch10
10 Chapter.,,.,, MySQL. MySQL mysqld MySQL.,. MySQL. MySQL....,.,..,,.,. UNIX, MySQL. mysqladm mysqlgrp. MySQL 608 MySQL(2/e) Chapter 10 MySQL. 10.1 (,, ). UNIX MySQL, /usr/local/mysql/var, /usr/local/mysql/data,
More informationMicrosoft PowerPoint - chap06-2pointer.ppt
2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.
More information<4D F736F F F696E74202D20B5A5C0CCC5CDBAA3C0CCBDBA5F3130C1D6C2F75F32C2F7BDC32E >
6. ASP.NET ASP.NET 소개 ASP.NET 페이지및응용프로그램구조 Server Controls 데이터베이스와연동 8 장. 데이터베이스응용개발 (Page 20) 6.1 ASP.NET 소개 ASP.NET 동적웹응용프로그램을개발하기위한 MS 의웹기술 현재 ASP.NET 4.5까지출시.Net Framework 4.5 에포함 Visual Studio 2012
More information단계
본문서에서는 Tibero RDBMS 에서제공하는 Oracle DB Link 를위한 gateway 설치및설정방법과 Oracle DB Link 사용법을소개한다. Contents 1. TIBERO TO ORACLE DB LINK 개요... 3 1.1. GATEWAY 란... 3 1.2. ORACLE GATEWAY... 3 1.3. GATEWAY 디렉터리구조...
More informationMicrosoft Word - Windows_apahce_php_CUBRID2008
Windows 에서 Apache, PHP 를이용하여 CUBRID 사용하기 소개 : Windows 환경에서 Apache 웹서버와 PHP 를이용하여 CUBRID 를사용하기위하여 PHP CUBRID module 를 설치하는방법및간단한 CUBRID 연동방법을소개한다. 연동에대한상세한방법은매뉴얼상의 PHP API 부분을 참고하기바란다 2008-10-20 기술컨설팅팀남재우,
More informationAnalytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras
Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Crash Unity SDK... Log & Crash Search. - Unity3D v4.0 ios
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 informationSBR-100S User Manual
( 1 / 13 ) SBR-100S 모델에 대한 사용자 펌웨어 업그레이드 방법을 안내해 드립니다. SBR-100S 는 신규 펌웨어가 있을시 FOTA(자동업데이트) 기능을 통하여 자동 업그레이드가 되며, 필요시 사용자가 신규 펌웨어를 다운받아 수동으로 업그레이드 할 수 있습니다. 1. 준비하기 1.1 연결 장치 준비 펌웨어 업그레이드를 위해서는 SBR-100S
More information[ 컴퓨터시스템 ] 3 주차 1 차시. 디렉토리사이의이동 3 주차 1 차시디렉토리사이의이동 학습목표 1. pwd 명령을사용하여현재디렉토리를확인할수있다. 2. cd 명령을사용하여다른디렉토리로이동할수있다. 3. ls 명령을사용하여디렉토리내의파일목록을옵션에따라다양하게확인할수
3 주차 1 차시디렉토리사이의이동 학습목표 1. pwd 명령을사용하여현재디렉토리를확인할수있다. 2. cd 명령을사용하여다른디렉토리로이동할수있다. 3. ls 명령을사용하여디렉토리내의파일목록을옵션에따라다양하게확인할수있다. 학습내용 1 : 현재디렉토리확인 1. 홈디렉토리 - 로그인을한후, 사용자가기본으로놓이게되는디렉토리위치를홈디렉토리 (home directory)
More informationEndpoint Protector - Active Directory Deployment Guide
Version 1.0.0.1 Active Directory 배포가이드 I Endpoint Protector Active Directory Deployment Guide 목차 1. 소개...1 2. WMI 필터생성... 2 3. EPP 배포 GPO 생성... 9 4. 각각의 GPO 에해당하는 WMI 연결... 12 5.OU 에 GPO 연결... 14 6. 중요공지사항
More information본교재는수업용으로제작된게시물입니다. 영리목적으로사용할경우저작권법제 30 조항에의거법적처벌을받을수있습니다. [ 실습 ] 스위치장비초기화 1. NVRAM 에저장되어있는 'startup-config' 파일이있다면, 삭제를실시한다. SWx>enable SWx#erase sta
[ 실습 ] 스위치장비초기화 1. NVRAM 에저장되어있는 'startup-config' 파일이있다면, 삭제를실시한다. SWx>enable SWx#erase startup-config Erasing the nvram filesystem will remove all configuration files Continue? [confirm] ( 엔터 ) [OK] Erase
More information28 THE ASIAN JOURNAL OF TEX [2] ko.tex [5]
The Asian Journal of TEX, Volume 3, No. 1, June 2009 Article revision 2009/5/7 KTS THE KOREAN TEX SOCIETY SINCE 2007 2008 ko.tex Installing TEX Live 2008 and ko.tex under Ubuntu Linux Kihwang Lee * kihwang.lee@ktug.or.kr
More informationTTA Journal No.157_서체변경.indd
표준 시험인증 기술 동향 FIDO(Fast IDentity Online) 생체 인증 기술 표준화 동향 이동기 TTA 모바일응용서비스 프로젝트그룹(PG910) 의장 SK텔레콤 NIC 담당 매니저 76 l 2015 01/02 PASSWORDLESS EXPERIENCE (UAF standards) ONLINE AUTH REQUEST LOCAL DEVICE AUTH
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 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 informationTmax
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 Restricted
More information