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 Restricted Rights Legend This software and documents are made available only under the terms of the Tmax Soft License Agreement and may be used or copied only in accordance with the terms of this agreement. No part of this document may be reproduced, transmitted, or translated in any form or by any means, electronic, mechanical, manual, or optical, without the prior written permission of Tmax Soft Co., Ltd. 이프로그램과문서는 TmaxSoft 라이선스동의하에서만만들거나, 사용되거나, 복사될수있습니다. TmaxSoft Co., Ltd. 의허락없이이문서의일부분이나전체를전자적, 기계적, 광학적, 수작업등어떤방법으로든복사, 재생산, 번역등을할수없습니다. Trademarks Tmax, WebtoB, 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, WebtoB, WebT, JEUS 는 TmaxSoft Co., Ltd. 의등록상표입니다. 기타모든제품들과회사이름은각각해당소유주의상표로서참조용으로만사용됩니다. Document info Document name: WebtoB 관리자안내서 Document date: 2005-09-23 Manual release version: 4.1 Software Version: WebtoB 4.1
WebtoB WebtoB 관리자안내서 차례 매뉴얼에대하여... 0 매뉴얼의대상... 0 매뉴얼의전제조건... 0 매뉴얼의구성... 0 관련매뉴얼... 0 일러두기... 0 제품별기능... 0 1 소개... 0 2 WebtoB 의개요... 0 2.1 소개... 0 2.2 구조와동작... 0 2.2.1 기존웹서버와의구조비교... 0 2.2.2 WebtoB 의프로세스... 0 2.3 특징... 0 2.3.1 Caching... 0 2.3.2 WBAPI... 0 2.3.3 TP-Monitor Tmax Service 호출... 0 2.3.4 Extension 관리... 0 2.3.5 Log 관련... 0 2.4 WebtoB의 Tool... 0 2.5 WebtoB 의디렉토리구조... 0 2.6 환경변수... 0 3 Quick Start... 0 4 WebtoB 설정... 0 TmaxSoft 1
WebtoB 관리자안내서 WebtoB 4.1 소개... 0 4.2 환경파일의개념... 0 4.2.1 WebtoB의환경파일이란무엇인가?... 0 4.2.2 WebtoB 환경파일의일반적인형태... 0 4.3 환경파일의구조... 0 4.3.1 DOMAIN 절... 0 4.3.2 NODE 절... 0 4.3.3 SVRGROUP 절... 0 4.3.4 SERVER 절... 0 4.4 간단한환경파일의작성... 0 4.4.1 소개... 0 4.4.2 기본설정... 0 4.4.2.1 DOMAIN Section 설정하기... 0 4.4.2.2 NODE Section 설정하기... 0 4.4.2.3 SVRGROUP Section 설정하기... 0 4.4.2.4 SERVER Section 설정하기... 0 4.4.3 환경파일예제... 0 5 WebtoB 환경파일컴파일... 0 5.1 소개... 0 5.2 사용목적... 0 5.3 실행방법... 0 5.4 환경설정파일추적... 0 6 WebtoB 기동및종료... 0 6.1 WebtoB 기동... 0 6.1.1 기동전점검할사항... 0 6.1.2 wsboot... 0 6.2 WebtoB 종료... 0 6.2.1 wsdown... 0 7 WebtoB 환경의기본설정... 0 7.1 DOMAIN 절의설정... 0 7.1.1 필수항목... 0 7.1.1.1 Domain Name = string... 0 7.2 NODE 절의설정... 0 7.2.1 필수항목... 0 7.2.1.1 Node Name = string... 0 2 TmaxSoft
WebtoB WebtoB 관리자안내서 7.2.1.2 WEBTOBDIR = literal... 0 7.2.1.3 SHMKEY = numeric (32768 ~ 262143)... 0 7.2.1.4 DOCROOT = literal... 0 7.2.2 선택항목... 0 7.2.2.1 HTH... 0 7.2.2.2 PORT... 0 7.2.2.3 JSVPORT... 0 7.2.2.4 IndexName... 0 7.2.2.5 Logging... 0 7.2.2.6 ErrorLog... 0 7.3 SVRGROUP 절의설정... 0 7.3.1 필수항목... 0 7.3.1.1 Server Group name... 0 7.3.1.2 NODENAME... 0 7.3.1.3 SVRTYPE... 0 7.4 SERVER 절의설정... 0 7.4.1 필수항목... 0 7.4.1.1 Server Name... 0 7.4.1.2 SVGNAME... 0 7.4.2 선택항목... 0 7.4.2.1 MinProc... 0 7.4.2.2 MaxProc... 0 8 WebtoB 환경의고급설정... 0 8.1 동적컨텐츠를위한 WebtoB 설정... 0 8.1.1 소개... 0 8.1.2 CGI 설정... 0 8.1.2.1 CGI의이용... 0 8.1.2.2 CGI 설정... 0 8.1.2.3 CGI 설정및사용예... 0 8.1.3 SSI 설정... 0 8.1.3.1 SSI의이용... 0 8.1.3.2 SSI Commands... 0 8.1.4 PHP 설정... 0 8.1.4.1 PHP의이용... 0 8.1.4.2 PHP 예... 0 8.2 Virtual Hosting 설정... 0 8.2.1 개요... 0 8.2.2 사용예... 0 8.2.3 Mass Virtual Host... 0 8.2.3.1 DOCROOT 설정... 0 8.2.3.2 RealPath 설정... 0 8.2.3.3 디렉토리설정패턴에사용되는 %- 지시자... 0 TmaxSoft 3
WebtoB 관리자안내서 WebtoB 8.3 WBAPI 설정... 0 8.3.1 WBAPI의개념... 0 8.3.2 WBAPI의종류... 0 8.3.3 WBAPI의이용과예... 0 8.3.4 WBAPI를위한설정... 0 8.3.5 WBAPI 프로그램의 Service Table 생성... 0 8.3.6 WBAPI 프로그램의 Compile... 0 8.3.7 WBAPI의시작및응용... 0 8.4 Tmax와의연동... 0 8.4.1 소개... 0 8.4.2 Tmax 연동을위한환경파일... 0 8.4.3 사용예... 0 8.5 Logging설정... 0 8.5.1 Access Log File... 0 8.5.2 Error Log File... 0 8.5.3 WebtoB Log File Format... 0 8.5.4 Common Log File 포맷... 0 9 WebtoB 관리... 0 9.1 소개... 0 9.2 wsadmin 소개... 0 9.2.1 wsadmin을이용한시스템관리... 0 9.3 각종정보출력... 0 9.3.1 환경정보... 0 9.3.2 Domain에대한환경정보... 0 9.3.3 Node에대한환경정보... 0 9.3.4 Server Group에대한환경정보... 0 9.3.5 Server에대한환경정보... 0 9.3.6 동작상태정보... 0 9.3.6.1 Server Process에대한정보... 0 9.4 운용관리... 0 9.4.1 Server Process 중지및재개... 0 9.4.2 적체해소... 0 9.4.3 상태정보반복표시기능... 0 9.4.4 환경설정값동적변경... 0 9.4.5 웹브라우저연결해제... 0 9.4.6 Server Process 변경... 0 9.4.7 Logging 관리... 0 10 WebtoB 튜닝... 0 10.1 소개... 0 4 TmaxSoft
WebtoB WebtoB 관리자안내서 10.2 HTH 설정... 0 10.3 Server Process 설정... 0 10.3.1 예제 Sample... 0 11 WebtoB 보안... 0 11.1 소개... 0 11.2 인증방법... 0 11.3 SSL (Secure Socket Layer)... 0 11.3.1 SSL v3.0... 0 11.3.2 SSL vs. SHTTP... 0 11.3.3 SSL Encryption... 0 11.3.4 Ciphers... 0 11.4 인증서비스... 0 11.4.1 인증기관 (Certificate Authority)... 0 11.4.2 인증서 (Certificate)... 0 11.4.3 인증서발급정책 (Certificate Issuing Policy)... 0 11.4.4 Verisign에서서버인증서발급받기... 0 11.5 Authentication 과 SSL의이용... 0 11.5.1 Authentication... 0 11.5.1.1 wsmkpw... 0 11.5.1.2 Authentication의설정... 0 11.5.2 SSL의설정... 0 12 JEUS 와의연동... 0 12.1 소개... 0 12.2 WebtoB 와 JEUS 연동 (Base+)... 0 12.2.1 WebtoB와 JEUS 연동을위한설정... 0 12.2.1.1 WebtoB 환경파일의설정... 0 12.2.1.2 JEUS 환경파일의설정... 0 12.2.2 WebtoB와 JEUS 연결의특징... 0 12.2.3 Servlet Engine 기동및종료... 0 12.2.4 예제... 0 12.3 내장 Servlet Engine 이용방법 (Standard)... 0 12.3.1 WebtoB 환경파일의설정... 0 12.3.2 내장 Servlet Engine 환경파일의설정... 0 12.3.3 예제... 0 13 Multi-Node 사용 (Standard)... 0 TmaxSoft 5
WebtoB 관리자안내서 WebtoB 13.1 소개... 0 13.2 wsracd(web Server Remote Access Control Daemon)... 0 13.3 Multi-Node 환경설정... 0 13.4 Multi-Node상에서의 WebtoB기동과종료... 0 13.4.1 Multi-Node의한 Node에서 WebtoB 기동을위한 wsboot 명령옵션... 0 13.4.2 Multi-Node의한 Node에서 WebtoB 종료를위한 wsdown명령옵션... 0 14 부하조절 -Load Balancing (Standard)... 0 14.1 부하조절방법... 0 14.1.1 Layer 4 Switch를이용한부하조절... 0 14.1.1.1 L4 switch의개념과종류... 0 14.1.2 DNS를이용한부하조절... 0 14.1.3 Front-end WebtoB를이용한부하조절... 0 14.1.3.1 시스템성능에따른부하조절... 0 14.1.3.2 동적부하조절... 0 14.1.4 WebtoB의부하조절기능설정시주의사항... 0 15 정리... 0 부록 (APPENDIX)... 0 A. 환경파일작성예... 0 A.1 기본환경파일예... 0 A.2 WebtoB와 JEUS 연동환경설정예... 0 A.2.1 JEUS 연동환경설정... 0 A.2.2 내장 Servlet Engine 연동환경설정... 0 B. CGI 활용예... 0 B.1 소개... 0 B.2 C를이용한게시판구현... 0 B.2.1 환경파일작성... 0 B.2.2 화면코드작성... 0 B.2.3 CGI 소스코드작성... 0 B.2.4 작업및결과확인... 0 B.3 PERL을이용한게시판구현... 0 B.3.1 환경파일작성... 0 B.3.2 Perl 스크립트작성... 0 6 TmaxSoft
WebtoB WebtoB 관리자안내서 B.3.3 작업및결과확인... 0 C WBAPI... 0 C.1 WBAPI List... 0 C.1.1 INIT/DONE API... 0 C.1.2 ALLOC API... 0 C.1.3 GET API... 0 C.1.4 PUT/SET API... 0 C.1.5 SEND API... 0 C.1.6 COOKIE API... 0 C.1.7 SESSION API... 0 C.1.8 ETC API... 0 C.2 WBAPI를이용한 CGI의변환... 0 D Tmax 와의연동... 0 D.1 Tmax 연동을위한클라이언트프로그램작성... 0 D.2 클라이언트프로그램컴파일... 0 D.3 Tmax 연동실행... 0 E WebtoB 환경설정레퍼런스... 0 E.1 소개... 0 E.2 DOMAIN 절... 0 E.2.1 개요... 0 E.2.2 필수항목... 0 E.2.3 선택항목... 0 E.2.4 DOMAIN절의사용예... 0 E.3 NODE 절... 0 E.3.1 개요... 0 E.3.2 필수항목... 0 E.3.3 선택항목... 0 E.3.4 NODE절의사용예... 0 E.4 VHOST절... 0 E.4.1 개요... 0 E.4.2 필수항목... 0 E.4.3 선택항목... 0 E.4.4 VHOST절의사용예... 0 E.5 SVRGROUP 절... 0 E.5.1 개요... 0 E.5.2 필수항목... 0 TmaxSoft 7
WebtoB 관리자안내서 WebtoB E.5.3 선택항목... 0 E.5.4 SVRGROUP절의사용예... 0 E.6 SERVER 절... 0 E.6.1 개요... 0 E.6.2 필수항목... 0 E.6.3 선택항목... 0 E.6.4 SERVER 절의사용예... 0 E.7 SERVICE 절... 0 E.7.1 개요... 0 E.7.2 필수항목... 0 E.7.3 선택항목... 0 E.7.4 SERVICE 절의사용예... 0 E.8 DIRECTORY 절... 0 E.8.1 개요... 0 E.8.2 필수항목... 0 E.8.3 선택항목... 0 E.8.4 DIRECTORY 절의사용예... 0 E.9 URI 절... 0 E.9.1 개요... 0 E.9.2 필수항목... 0 E.9.3 선택항목... 0 E.9.4 URI 절의사용예... 0 E.10 ALIAS절... 0 E.10.1 개요... 0 E.10.2 필수항목... 0 E.10.3 선택항목... 0 E.10.4 ALIAS절의사용예... 0 E.11 DIRINDEX 절... 0 E.11.1 개요... 0 E.11.2 필수항목... 0 E.11.3 선택항목... 0 E.11.4 DIRINDEX 절의사용예... 0 E.12 LOGGING 절... 0 E.12.1 개요... 0 E.12.2 필수항목... 0 E.12.3 선택항목... 0 E.12.4 LOGGING 절의사용예... 0 E.13 AUTHENT 절... 0 E.13.1 개요... 0 E.13.2 필수항목... 0 E.13.3 선택항목... 0 E.13.4 AUTHENT 절의사용예... 0 8 TmaxSoft
WebtoB WebtoB 관리자안내서 E.14 SSL 절... 0 E.14.1 개요... 0 E.14.2 필수항목... 0 E.14.3 선택항목... 0 E.14.4 CA명령어사용 (Unix)... 0 E.14.5 SSL 절의사용예... 0 E.15 EXT 절... 0 E.15.1 개요... 0 E.15.2 필수항목... 0 E.15.3 선택항목... 0 E.15.4 EXT 절의사용예... 0 E.16 ACCESS 절... 0 E.16.1 개요... 0 E.16.2 필수항목... 0 E.16.3 선택항목... 0 E.16.4 ACCESS 절의사용예... 0 E.17 EXPIRES 절... 0 E.17.1 개요... 0 E.17.2 필수항목... 0 E.17.3 선택항목... 0 E.17.4 EXPIRES 절의사용예... 0 E.18 ERRORDOCUMENT 절... 0 E.18.1 개요... 0 E.18.2 필수항목... 0 E.18.3 선택항목... 0 E.18.4 ERRORDOCUMENT 절의사용예... 0 E.19 TCPGW 절... 0 E.19.1 개요... 0 E.19.2 필수항목... 0 E.19.3 선택항목... 0 E.19.4 TCPGW 절의사용예... 0 TmaxSoft 9
WebtoB 관리자안내서 WebtoB 매뉴얼에대하여 매뉴얼의대상 본매뉴얼은 TmaxSoft 의 Web Server 제품인 WebtoB 의모든기능을적절히활용할수있도록돕기위해만들어졌다. 본매뉴얼의이용자는 UNIX 와 Web 에대한기초지식이있는사람으로서 Web Server 에관심이있는모든일반사용자와 Web Server 관리자를포함한다. 매뉴얼의전제조건 본매뉴얼을이해하기위해서는 Web Server 와 World Wide Web, TCP/IP, HTTP 에대한기초적인이해만있으면되고, 특별한전문지식이요구되지는않는다. 그렇지만 WebtoB 를 UNIX 환경에서운영하고자하는경우라면, UNIX 사용에관련한기본적인지식이요구된다. 만약 Web Container 와의연동을위해서 WebtoB 를사용하려고한다면, 이매뉴얼을읽는전 / 후에, 간단하게라도 WebtoB 웹컨테이너안내서를읽어봐야할것이다. 매뉴얼의구성 본매뉴얼은다음과같이 15 개장 (Chapters) 과 5 개의부록으로 구성되어져있다. 1. 소개 2. WebtoB 의개요 3. Quick Start 4. WebtoB 설정 5. WebtoB 환경파일컴파일 10 TmaxSoft
WebtoB WebtoB 관리자안내서 6. WebtoB 기동및종료 7. WebtoB 환경의기본설정 8. WebtoB 환경의고급설정 9. WebtoB 관리 10. WebtoB 튜닝 11. WebtoB 보안 12. JEUS 와의연동 13. Multi-Node 사용 (Standard) 14. 부하조절 (Standard) 15. 정리 부록 A. 환경파일작성예 B. CGI 활용예 C. WBAPI D. Tmax 와의연동 E. WebtoB 환경설정레퍼런스 부록에서제공하는내용은본문에서간단하게설명했던내용들에대해서보다상세하게다시설명한다. 그러므로이부록들은 WebtoB 에대해서경험이많은관리자들이좋은참고자료로사용할수있다. TmaxSoft 11
WebtoB 관리자안내서 WebtoB 관련매뉴얼 본매뉴얼과관련있는것들은다음과같다. WebtoB Installation Guide WebtoB Web Container Guide WebtoB WBAPI Reference Manual WebtoB Application Development Guide 일러두기 표기예 내용 텍스트본문, 12 포인트, 바탕체 Times New Roman 텍스트 본문강조 CTRL+C CTRL 과동시에 C 를누름 public class myclass { } Java 코드 <system-config> XML 문서 참조 : / 주의 :` Configuration 메뉴를연다 WEBTOBDIR 참조사항과주의할사항 GUI 의버튼같은컴포넌트 WebtoB 가실제설치된디렉토리 예 )c:\tmaxsoft\webtob4.1 wsboot [ 파라미터 ] 콘솔명령어와문법 옵션파라미터 12 TmaxSoft
WebtoB WebtoB 관리자안내서 < xyz > < 와 > 사이의내용이실제값으로변경됨 선택사항. 예 ) A B: A 나 B 중하나 파라미터등이반복되어서나옴?, +, * 보통 XML 문서에각각 없거나, 한번, 한번이상, 없거나, 여러번 을나타낸다.... XML 이나코드등의생략 <<FileName.ext>> 코드의파일명 그림 1. 그림이름이나표이름 제품별기능 제품구분 Base 제공기능 HTML, CGI, PHP, SSI, SSL, WBAPI Standard Base 제공기능, Multi-Node, JSP/Servlet, Load Balancing, Fail-Over TmaxSoft 13
WebtoB 관리자안내서 WebtoB 연락처 Korea Tmax Soft Co., Ltd 18F Glass Tower, 946-1, Daechi-Dong, Kangnam-Gu, Seoul 135-708 South Korea Tel: 82-2-6288-2114 Fax: 82-2-6288-2115 Email: info@tmax.co.kr Web (Korean): http://www.tmax.co.kr USA Tmax Soft, Inc. 560 Sylvan Ave, Englewood Cliffs NJ 07632 USA Tel: 1-201-567-8266 FAX: 1-201-567-7339 Email: info@tmaxsoft.com Web (English): http://www.tmaxsoft.com Japan Tmax Soft Japan Co., Ltd. 6-7 Sanbancho, Chiyoda-ku, Tokyo 102-0075 Japan Tel: 81-3-5210-9270 FAX: 81-3-5210-9277 Email: info@tmaxsoft.co.jp Web (Japanese): http://www.tmaxsoft.co.jp China Beijing Silver Tower, RM 1507, 2# North Rd Dong San Huan, Chaoyang District, Beijing, China, 100027 Tel: 86-10-6410-6148 Fax: 86-10-6410-6144 E-mail : info@tmaxchina.com.cn Web (Chinese): http://www.tmaxchina.com.cn 14 TmaxSoft
WebtoB WebtoB 관리자안내서 1 소개 WebtoB 는차원이다른성능과안정성을갖춘차세대웹서버로서, World Wide Web 환경에서, HTTP 프로토콜을통해서전달된브라우저의 Request 를처리하는웹서버이다. WebtoB 는세계유명웹서버보다월등히우수한성능을보장할뿐만아니라기존웹서버가가지고있는한계점들을완벽하게개선함으로써 Web 환경을구축하는데있어고성능과안정성이라는두가지효과를모두얻을수있다. WebtoB 관리자안내서는다음과같은내용을담고있다. WebtoB 의전반적인구조 WebtoB 환경설정및컴파일방법 WebtoB 기동및종료 WebtoB 운영관리 WebtoB 성능향상 WebtoB 보안 JEUS 와의연동 Multi-Node 와 Load Balancing TmaxSoft 15
WebtoB 관리자안내서 WebtoB 2 WebtoB 의개요 2.1 소개 이번장에서는 WebtoB 의기본적인구조와개념, 그리고특징들에대해서설명한다. 2.2 구조와동작 WebtoB 는기존웹서버와는다른구조를가지고있다. Apache 로대변되는기존웹서버들은대부분 NCSA 사의 httpd 의구조를가지고있다. 이는사용자가그리많지않던환경하에서이용되던것으로, 사용자의증가에유연하게대처하지못하는단점을지니고있다. WebtoB 에서는이런문제를가장먼저해결하고자하였다. 따라서최우선적으로고려한것이사용자가계속증가하는경우에대한대처방식이었다. 기존의웹서버들은사용자의 Request 가들어오면일대일방식으로연결을맺는구조로되어있다. 따라서사용자가증가하는경우, 결국 Server Process 가그수만큼동시에늘어나야서비스를할수있다. 그러나이러한방식은사용자가증가하면할수록, Server 에걸리는부하도따라서증가하기때문에많은문제점을야기한다. 물론, 사용자가늘어나면 Server 에걸리는부하가적을수는없다. 더많은 Memory 와 CPU Overhead 를감수하여야하는것은당연한일이다. 하지만사용자가늘어난다고해서 Server 에걸리는부하가이와비례해서계속크게늘어나더많은 Hardware 를추가로구입하여야하는일이발생한다면, 이는적절한해답이되지못한다. 즉, 사용자가늘어난다고해도 Server 자체에서적절히대응하여일정수준까지는무리없이서비스를가능하게하는구조가되어야무한하게확장하는 Web 에대응할수있는것이다. 그럼여기서기존의웹서버와 WebtoB 와의구조에대해알아보고 WebtoB 의구조가무한히확장하는 Web 환경에대응할수있는이유를알아보자. 16 TmaxSoft
WebtoB WebtoB 관리자안내서 2.2.1 기존웹서버와의구조비교 초창기웹서버인 httpd 의구조를그대로계승하는덕에 Apache 는가장일반적인 Process per Request 형태를취하고있다. 즉, 사용자 Request 마다 Process 가발생하여처리하는구조인것이다. 따라서앞에서언급한대로사용자가증가하면 Process 도같이비례하여증가하게되므로, 사용자수가일정수이상이되면서비스에많은무리가생긴다. 이는각시스템마다 Process 의수가한정되어있고, Process 가늘어나면너무많은 Memory 를차지하는등의 Overhead 도같이늘어나기때문이다. 이로인하여새로운상용웹서버들이등장하면서, 급속도로확장하고있는 Web 환경에대처하기위하여새로운구조를채택하였다. 가장일반적인것이 Multi-Thread 기술을이용한것이다. 이는 Process 보다 Overhead 가적은 Thread 를이용하여서비스를하는것으로기존 Process 방식에비하여월등히좋은성능을나타내었다. Thread 는 Process 내부에서여러개를동시에이용할수있기때문에 Overhead 도적고, 차지하는 Memory 도 Process 방식에비하여상당히적기때문이다. 그러나이러한방식도문제를가지고있다. Thread 기술이상당히우수한기술임에는틀림없지만내부에서자신들간의영역다툼으로인하여 DeadLock 등의문제가빈번하게발생하기때문이다. 이것은특히안정성에있어치명적이다. Thread 구조에서 DeadLock 이발생하면, 자체 Thread 가서비스를수행하지못함은물론, 자칫하면전체시스템이 Down 되어서비스불능상태가될수있다. 이는성능뿐아니라안정성도중요한요소가되는웹서버에치명적인결함이될수있다. 위에서언급한두가지방식은서로장단점이있다. 성능과안정성면에서서로양극단을달리고있다고보면될정도로차이가있다. 하지만, 성능과안정성모두웹서버에게있어서는놓쳐서는안될아주중요한고려사항이다. 둘중의하나만충족되지않아도원만한서비스가되지않기때문이다. TmaxSoft 에서는 WebtoB 를개발하면서, 성능과안정성을모두충족시키기위하여많은구조를검토하고연구하였다. WebtoB 에서는안정성을위하여 Thread 구조를배제하고 Process 구조를채택하였다. 그리고, 성능을위하여각 Process 를독립적으로만들지않고각각의특별한기능을하는 Process 를두어역할을분담하였다. 또한각 TmaxSoft 17
WebtoB 관리자안내서 WebtoB Process 마다만약의경우를대비하여여분의보조 Process 를두는것을가능하게하여안정성에치중하였다. 2.2.2 WebtoB 의프로세스 WSM : 전체적인 WebtoB 시스템의운용프로세스로써시스템의운영정보를관리하고, HTL, HTH 프로세스및모든서버프로세스들을관리하는프로세스이다. WebtoB 시스템이멀티노드로구성되었을경우타노드내의 WSM 과세션을유지하며 heartbeat 를체크하여서버그룹단위의장애대책을지원한다. WebtoB 시스템기동시 WSM 은가장먼저메모리에로드되고시스템종료시에는가장나중에종료된다. HTL : HTL 은클라이언트와 WebtoB 간의연결을관리하는 Listener 프로세스이다. 클라이언트가처음 WebtoB 에접속할때에는 HTL 과연결을맺어통신이이루어지나서비스요청이있을경우, 내부적으로 HTH 와연결이되어모든서비스처리가이루어진다. HTH, HTHS : 클라이언트핸들러라고도하며실질적으로클라이언트와서버의업무처리프로세스사이를중계하는프로세스이다. HTH 는서버프로세스들과의통신을통해모든실제적인데이터의흐름을관리한다. 즉클라이언트의서비스요청을받아그에해당하는업무를처리하며그결과를수신하여다시클라이언트에게되돌려준다. SSL 설정을한경우에 HTH 가아닌 HTHS 가기동된다. HTMLS : HTML 요청을처리하는 HTML 서버프로세스이다. PHPS : PHP 요청을처리하는 PHP 서버프로세스이다. CGIS : CGI 요청을처리하는 CGI 서버프로세스이다. SSIS : SSI 요청을처리하는 SSI 서버프로세스이다. 2.3 특징 WebtoB 의대표적인특징을살펴보면다음과같다. 18 TmaxSoft
WebtoB WebtoB 관리자안내서 2.3.1 Caching 일반적으로많은 Web Server 들이 Caching 기능을제공하고있다. 그러나이들은대부분 Disk 에대한 Caching 으로서필요한 Data 들을다른 Machine 에서자신의 Machine 으로가져와서 Disk 에저장하여두고, 사용자가 Request 를하면이를보내주는방법이다. 주로 Proxy 라는개념으로, 많이이용되는 Apache 역시 ( 세계 Web Server 의약 67% 를차지 ) 이기능을가지고있으며, 이는성능향상에많은도움을준다. WebtoB 에서의 Caching 은사용자가 Request 를보내면 WebtoB 가자주 이용되는 Resource 들을선별하여이를 Memory 에상주시켜놓는 시스템이다. 현재 Web 서비스를하고있는많은회사들은상당히고가의장비를이용한다. 이들은대부분막강한능력의 CPU 를여러개탑재하고있으며, 또한수 GB 에이르는엄청난양의 Memory 를가지고있다. 그러나실제서비스를시행하게되면 CPU 의처리능력에의해성능의제약이오게된다. 따라서수 GB 에이르는 Memory 를효율적으로이용하지못하는경우가많게된다. 즉, 대부분의경우 Memory 의모든영역을쓰지는못하고, CPU 의처리능력에의해서 Memory 의 70~80% 정도만이용하는실정이다. 이에 WebtoB 에서제공하는 Memory Caching 기능은이여분의 Memory 에자주이용되는 Resource 들을미리상주시켜두어성능향상을돕는다. 보통 Disk 에비해서 Memory 가약수십배가량처리속도가빠르기때문에이것을적절히활용하면대단히큰성능향상을가져온다. 또한저장용량을임의로조정할수있어 Memory 가부족한경우이를줄일수있으며, 만약여분의 Memory 가충분하다면이크기를더늘일수있다. 실제연구결과를보면사용자 Request 의대부분이특정한 Resource 에몰려있게된다. 따라서작은용량의 Memory Caching 이라할지라도이들을이용하게되면엄청난성능향상을보일수있게된다. 2.3.2 WBAPI WebtoB 는 WBAPI 라는내부함수를제공한다. 이는 WebtoB 에서만제공하는것으로다양한용도로적용될수있다. 우선기존 CGI Program 들을변환하는데이용할수있다. 기존 CGI Program 은상당히비효율적으로설계되어있고구현은간단하지만성능면에서워낙문제가많기때문에사용자가많은곳에 TmaxSoft 19
WebtoB 관리자안내서 WebtoB 적용하기는힘들었다. 기존 Site 중 CGI Program 으로 Application 을개발하고서비스를하던중갑자기사용자가늘어나는경우에는본래이용하던 CGI Program 으로는감당하기힘들게되는경우가많이있다. 이경우현재까지의해결방법은 CGI Program 과같은기능을하는다른 Application 을완전히새로개발하거나 Hardware 를무한정늘리는방법외에는다른수가없었다. 이에 WebtoB 에서는 WBAPI 를제공하여기존 CGI Program 을 WebtoB 의서비스형태로변환하는것을가능하게한다. 이는기존 CGI Program 의단점을모두개선한형태로현재많이이용되는 Servlet 이나기타다른 Script Language 등과같은성능을제공한다. 이는또한 WebtoB 에서 TP-Monitor 의 Service Routine 을호출하는데이용되기도한다. 2.3.3 TP-Monitor Tmax Service 호출 Browser 에서 WebtoB 로 Tmax Service 를호출하게되면 WebtoB 에서정해진형태의 Request 를보내게되는데, 일반적인형태는 CGI Request 와거의같다고보면된다. 다만사전에 WebtoB 내에서특정 Request 가들어오면 Tmax Service 로인식한다는설정만해주면된다. Ex] 만약, WebtoB 내의 /tmax directory 에 Tmax Service 가존재한다고설정하고, 여기에 service1 이라는 service 가존재한다고할때, Browser 에서는아래와같은형태의 Request 를보내면된다. http://www.tmax.co.kr/tmax/service1 2.3.4 Extension 관리 일반적으로 Web Server 가기본적으로제공하는 Mime Type 은정해져있다. 이들은거의표준화되어서특정 Data 나프로그램들이전송되어져야할필요가있을때이에대한정의가 Web Server 내에서이루어져야한다. 따라서사용자가새로운형태의 Data type 을만들어서쓰고싶다면새로운 Mime Type 을만들어야한다. WebtoB 에서는이러한 Data Type 을관리자가정의하여제공할수있다. 또한자신이원하는 Data 의 Extension( 확장자 ) 를임의로설정이가능하여사용자자신만의 Extension 을만들수있다. 20 TmaxSoft
WebtoB WebtoB 관리자안내서 2.3.5 Log 관련 Apache 에서제공하는형태의모든 Log Format 을만들수있다. 또한사용자가원하는형태의 Format 으로도조정이가능하다. 2.4 WebtoB 의 Tool 다음에설명되는툴들은 WebtoB 의엔진프로세스및서버프로세스들을관리하기위해서사용된다. wsadmin : WebtoB system 의전체적인관리를위해서사용되는툴로서, 시스템정보및관리자로서의작업들을수행할수있다. wscfl : 텍스트기반의환경파일을컴파일해서바이너리파일로변환한다. wsuncfl : 컴파일된바이너리파일을텍스트기반의환경파일로변환한다. wsmkpw : 사용자인증에관련된정보들을암호화해서특정파일을생성한다. 2.5 WebtoB 의디렉토리구조 WebtoB 가설치되는디렉토리를 WEBTOBDIR 로정한다. 아래의 [ 그림 2-2. WebtoB 디렉토리구조 ] 는 WebtoB 가설치된디렉토리의구조이다. TmaxSoft 21
WebtoB 관리자안내서 WebtoB WebtoB 의주요디렉토리들 : ap/: Application 파일이위치 그림 2-1. WebtoB 디렉토리구조 bin/: 실행파일들이위치.(wsm, wscfl, wsuncfl wsracd, wsgst, wsboot, wsdown, etc.). cgi-bin/: CGI 파일이위치 config/ : WebtoB 의환경파일이위치 docs/: 기본적으로설치되는 html 파일이위치 icons/: DIRINDEX 에서사용할아이콘이위치 jeus/ : Standard Edition 에포함된 Servlet engine 이설치되는위치 lib/: Library 파일이위치 license/ : 라이센스파일이위치 log/: Log 파일들이위치 22 TmaxSoft
WebtoB WebtoB 관리자안내서 path/: 프로세스간의내부통신을위한 Named-pipe 가생성 ssl/: SSL 관련파일이위치 svct/: WBAPI 의서비스테이블이위치 usrinc/ : API 의헤더파일들이위치 2.6 환경변수 WebtoB 에서사용하는환경변수로 WEBTOBDIR 등이있다. 이환경변수의값으로는 WebtoB 의설치디렉토리가세팅되어야한다. 환경변수내용환경파일항목 WEBTOBDIR WebtoB 시스템홈디렉토리 WebtoBDir LIBPATH Library 파일이위치 WEBTOB_RAC_PORT 분산노드로구성된시스템에서중앙집중으로관리하기위한포트번호 (wsracd 에의해사용 ) RacPort W2B_JEUSHOME JEUS 시스템의홈디렉토리 W2B_S_BASEPORT JEUS 와통신을위한포트 TmaxSoft 23
WebtoB 관리자안내서 WebtoB 3 Quick Start 다음에나오는간단한절차를통해서, WebtoB 를처음접하는사용자들이바로설치하여기동할수있도록안내할것이다. 아래의예에서우리는노드명을 tmaxh4 로사용할것이다. 이노드명을자신의컴퓨터이름 (HOSTNAME) 으로변경하여사용하도록한다. WebtoB 가시스템에제대로설치되었다면, PATH 를비롯한시스템변수들도설정되어있을것이다. WebtoB 의설치에대해서보다자세한설명을원한다면, WebtoB 설치안내서를참조하기바란다. WebtoB 의환경파일이설정되어있는지확인한다. WEBTOBDIR\config\ 디렉토리아래의 sample.m 파일이다음과같이되어있어야한다. *DOMAIN webtob1 <<sample.m>> *NODE tmaxh4 WEBTOBDIR = "/usr/webtob", SHMKEY = 54000, DOCROOT="/usr/webtob/docs", PORT = "8080", HTH = 1, LOGGING = "log1", ERRORLOG = "log2", Group = "nobody", User = "nobody" *SVRGROUP htmlg cgig ssig NODENAME = "tmaxh4", SVRTYPE = HTML NODENAME = "tmaxh4", SVRTYPE = CGI NODENAME = "tmaxh4", SVRTYPE = SSI 24 TmaxSoft
WebtoB WebtoB 관리자안내서 *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 = "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. WebtoB 의환경파일컴파일툴 (wscfl) 을이용해서 sample.m 파일을컴파일한다. $ wscfl i sample.m 보다자세한설명은 4 장 WebtoB 설정을참조하기바란다. 2. WEBTOBDIR\config\ 디렉토리에바이너리파일인 wsconfig 가생성되었는지확인한다. 3. 지금까지의설정들을확인했으면, WebtoB 를기동하기위해명령프롬프트에서 wsboot 라고입력한다. 4. Browser 를열고, 다음과같이 URL 을입력한다. http://[ 머신의 IP]:[8080 또는사용자가지정한 PORT 번호 ]/ [ 그림 3-1. WebtoB Test Page] 와같이 WebtoB Test Page 가보여질것이다. TmaxSoft 25
WebtoB 관리자안내서 WebtoB 그림 3-1. WebtoB Test Page 5. WebtoB Admin Tool 을띄우기위해, wsadmin 을입력한다. 6. wsadmin 에서 help 나 h 를입력하면, WebtoB 를모니터링하거나동작을제어할수있는명령어의리스트를확인할수있다. 7. 관리자명령어들을실제실행하여확인하였으면, 다음으로 quit 를입력하여, WebtoB Admin Tool 을빠져나온다. 8. wsdown 을입력하면, WebtoB 가내려가게된다. 9. 이제 WebtoB system 전체가종료되었다. 이것으로 Quick Start 를통한설명은마치고계속해서보다깊고상세하게여러가지툴과환경설정에관련한설명이이어질것이다. 만약위에서진행한각단계별로테스트가되지않는다면 WebtoB 설치안내서를참조해서현재의설정을확인해보기바란다. 26 TmaxSoft
WebtoB WebtoB 관리자안내서 4 WebtoB 설정 4.1 소개 본장에서는 WebtoB 를구동하는데필요한정보를가지고있는환경파일에대해서설명한다. 이는본매뉴얼에서핵심이되는부분이며, 차후의설명에도반드시배경지식으로필요한것이다. 따라서 WebtoB 의환경파일에대한이해가부족하다면반드시이장을숙지하여야한다. 참고 : WebtoB 의환경설정에대해서보다자세한정보를알고싶다면부록 [E. WebtoB 환경설정레퍼런스 ] 를참조하기바란다. 4.2 환경파일의개념 4.2.1 WebtoB 의환경파일이란무엇인가? 환경파일이란, WebtoB 의환경설정에사용되는파일로서실제 WebtoB 기동에필요한모든정보를제공한다. 즉, WebtoB 를기동하는데있어사용자가원하는바를이환경파일을통하여 WebtoB 에게전달하는것이다. WebtoB 는실제구동시에, 이환경파일에기입된정보를바탕으로모든기능을수행하게된다. 따라서사용자가실제환경에맞는적당한정보를기입하면 WebtoB 는원활하게기능을수행할수있고, 만약잘못된정보를기입한다면사용자가원하는대로작동하지않거나문제가생기게된다. 4.2.2 WebtoB 환경파일의일반적인형태 WebtoB 의환경설정파일은기본적으로 4 개의절로구성된다. DOMAIN, NODE, SVRGROUP, 그리고 SERVER 가그것이다. 각절의기본적인형태는다음과같다. TmaxSoft 27
WebtoB 관리자안내서 WebtoB * 절 이름항목 1=..., 항목 2=...,... 다음은 WebtoB 환경파일의간단한예이다. *DOMAIN webtob1 <<http.m>> *NODE webmain WEBTOBDIR= /usr/gloria/webtob/, HTH = 1, SHMKEY = 77990, PORT = 8080, 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 각각의절이름은별표 (*) 로시작된다. 즉, * 로시작되는항목은 WebtoB 가절로인식한다. 절의이름으로는 DOMAIN, NODE, SVRGROUP, SERVER 가사용되며이들은모두대문자이다. 절의정의순서는고정되어있지않다. 따라서어느절이먼저정의되어도상관없다. 그러나 Tree 형태로구성되어있기때문에가급적순서를지켜주는것이나중의편의성을위하여좋다. 또한절의정의는내용별로나누어한번이상나타날수있다. 즉, 하나의절이여러번으로나누어정의될수있다. 예를들어, Multi Node 에서 Node 별로해당 Server Group, 업무처리 Server Process 등을분리하여정의하고자할경우, 아래와같은 WebtoB 의환경파일구성이가능하다. 이경우, 동일한이름으로같은내용이반복정의되어서는안된다. 28 TmaxSoft
WebtoB WebtoB 관리자안내서 *DOMAIN webtob1 <<http.m>> *NODE node1... *SVRGROUP... *SERVER... *NODE node2... *SVRGROUP... 각절의이름이나절의하위개체명은반드시첫번째칸에서시작되어야한다. 그이후항목들은윗줄에이어지는내용이라하더라도반드시공백을두고시작되어야한다. 각절의하위개체정의시, 하나의개체 ( 즉 Node, Server Group, Server) 를정의하는항목들은반드시콤마 (,) 로연결되어야한다. 항목정의가콤마로끝났을경우, 다음항목도현재대상개체에대한내용으로적용되지만, 콤마로이어지지않는경우현재대상개체의정의는끝난것으로인식된다. 각절의항목들은 항목이름 = 값 의형태로정의된다. 각항목은다음의 4 가지형태중하나의값으로정의될수있으며, 항목이름은값으로사용될수없다. 항목의데이터타입 : Numeric : 숫자 String : abc 형태의문자열. Literal : abc 형태의문자열 ( 에주의 ). TmaxSoft 29
WebtoB 관리자안내서 WebtoB Y / N : Yes, No 형태 각절의항목들을다음과같은형태로설명하겠다. 항목 = 형태 ( 디폴트값 ) 범위또는크기 내용 그러면앞에서설명한환경파일의각절에는어떠한내용이들어가는지간단하게살펴보겠다. 이절에서는우선간단한환경파일구성을위한기본적인정보만을제공할것이다. 이기본적인환경파일구성외에다른사항들, 특히특정상황에필요한기능들이나특수한기능들은앞으로이어지는장에서설명할것이다. 따라서본장에서설명할내용은 WebtoB 를구동하기위한최소한의정보이다. WebtoB 를구동하여기본적인서비스를하기위하여필수적으로필요한절은 DOMAIN, NODE, SVRGROUP, SERVER 절이다. 따라서이장에서는이에대한간략한설명을할것이다. 그리고이어지는장에서간단한환경파일구성을설명한다. 4.3 환경파일의구조 WebtoB 의환경파일에는다음과같은 4개의중요한절이있다. DOMAIN 절 NODE 절 SVRGROUP 절 SERVER 절 4.3.1 DOMAIN 절 DOMAIN 절은독립적인 WebtoB 시스템전체의전반적인환경에대해정의하는부분이다. DOMAIN 절에서정의된내용은모든 Node 에공통적으로적용된다. 30 TmaxSoft
WebtoB WebtoB 관리자안내서 4.3.2 NODE 절 NODE 절에는다음과같은내용들이정의될수있다. WebtoB 시스템의홈디렉토리 HTML 문서들이들어있는최상위디렉토리 실행할 HTH 의개수 공유메모리의 Key 값 Port 또는 Listen 설정 기타 Logging 등 WebtoB 를기동시키면 Node 단위별로 WSM, HTL, HTH Process 와 HTML, CGI 등의실제서비스를수행하는 Server Process 들이기동된다. 이러한 Process 들이기동하기위해서는실행파일들이존재하는위치를알아야한다. 또한 WebtoB Process 간통신에필요한디렉토리와각종 Error, 경고메시지를저장하는디렉토리도지정할수있다. 그리고각항목별로지시자들의형태가고정되어있다. 이는보통 Literal, Numeric, String 등의형태로나타나는데, 이들의형태에맞게각항목을설정하여야한다. 4.3.3 SVRGROUP 절 WebtoB 를통해응용 Server Process 를접근하는경우 Server Process 의논리적인연관성에따라이들을그룹으로관리할필요가있게된다. 이절에서는이러한그룹에대한환경설정이이루어진다. Node 이름, Server 의종류, 호스트의이름등을등록한다. 이밖에 NODE 절이나 VHOST 절에서정의한내용이 Server Group 에따라새롭게정의할수있으며데이터베이스를사용하는경우데이터베이스접근과관련된정보들이정의될수있다. 4.3.4 SERVER 절 SERVER 절에서는실질적으로제공하는서비스들을등록한다. WebtoB 는등록된서비스만을처리하기때문에새로운 Server 프로그램이추가되는경우 Server 절의환경파일에반드시등록하여야한다. WebtoB 가제공하는대부분의서비스는 SERVER 절에서등록이가능하며비즈니스로직을 WebtoB 를통해직접호출하는경우에만 TmaxSoft 31
WebtoB 관리자안내서 WebtoB SERVICE 절의등록이필요하다. 각각의 Server 는위의 Server Group 절에정의된서비스종류에따라 HTML, CGI, JSV 등으로구분되며 Server Group 이름과 Process 의가능한개수등이같이등록된다. SERVER 절에는다음과같은내용이정의된다. 각 Server Process 가속하는 Server Group Server Process 의최소개수와최대개수 4.4 간단한환경파일의작성 4.4.1 소개 이장에서는 WebtoB 를위한간단한환경파일을만드는방법에대해서알아볼것이다. 이장에서는 WebtoB 를기동하기위한최소한의내용을설명할것이고실제환경파일을만드는과정에대해서도설명할것이다. 4.4.2 기본설정 WebtoB 가제공하는모든기능을이용하기위해서는환경파일의모든내용을파악하는것이좋다. 따라서앞장에서제공하는 WebtoB 환경파일의설명을탐독하여 WebtoB 의모든기능을파악하면 WebtoB 에서제공하는기능을모두이용할수있다. WebtoB 에서제공하는최소한의환경파일은 DOMAIN 절, NODE 절, SVRGROUP 절, SERVER 절만이필요하다. 그럼이들을가지고최소한의환경파일을만들어보자. 예제로사용된환경파일은 WebtoB 에서 HTML, CGI, SSI 등의기본적인서비스들을이용하게해주는최소한의것이다. 그럼하나하나설정된값에대해설명하겠다. ( 보통환경파일은 WebtoB 의 config/ 디렉토리에저장한다.) 4.4.2.1 DOMAIN Section 설정하기먼저, DOMAIN 절을살펴보자. DOMAIN 절은간단하게 DOMAIN name 만을설정하면된다. 이외에도추가기능이있으나, 이환경파일에서는 DOMAIN 절에이것만으로도충분하다. 32 TmaxSoft
WebtoB WebtoB 관리자안내서 4.4.2.2 NODE Section 설정하기 이절에서는 WebtoB 가 Booting 시에기본적으로가져야하는정보들에대한정의가이루어진다. NODE 절에서는 WEBTOBDIR 과 Shared Memory 를위한 SHMKEY 값그리고 index.html 등의 HTML 문서가존재하는디렉토리를설정한 DOCROOT 그리고마지막으로 WebtoB 가 Listen 하고있는 Listen PORT 를설정한 PORT 이다. [4.4.3 환경파일예제 ] 는 WebtoB 가 8080 PORT 로 Listen 하고있는환경이다. 4.4.2.3 SVRGROUP Section 설정하기 이는앞장에서설명한대로 WebtoB 에서제공하는 Server Type 별로각 Group 을설정한것이다. [4.4.3 환경파일예제 ] 에서는 HTML 문서를처리하기위한것으로 HTML Server Group 을설정하고이의이름을 htmlg 로설정하였다. 마찬가지로 CGI Server Group 으로 cgig 를설정하였고, SSI Server Group 으로 ssig 를설정하였다. 위의 SVRTYPE 에정의된것이실제서비스를정의하는것인데, WebtoB 에서는현재 HTML, CGI, SSI 등을제공한다. 이와같이 Group 을설정하면이어서등장하는 SERVER 절에서이를가지고실제 Server 를운영할수있게된다. 즉, SERVER 절에서는 SVRGROUP 에서설정된하나의 Server Group 을가지고여러개의 Server 를만드는것이가능하게된다. 4.4.2.4 SERVER Section 설정하기 이는 WebtoB 가실제로서비스를처리하기위한것으로 [4.3.3 환경파일예제 ] 에서는 html, cgi, ssi 등에대한것이정의되어있다. 그중에서 html 을예로들어설명하겠다. html SVGNAME = htmlg, MinProc = 1, MaxProc = 5 이를보면, html 이라는 Server 가 htmlg 라는 Server Group 에속하여있음을알수있다. 그런데위의 SVRGROUP 절에서 htmlg 는 HTML 이라는 Server Type 을가진다고설정이되어있다. 따라서, 이 html 이라는 Server 는 HTML 서비스를위한것이라는것을알수있다. SSI 나 CGI 역시이와같은원리로이루어진다. 그리고뒤에있는 MinProc 와 MaxProc 는실제서비스하는 Process 의숫자이다. TmaxSoft 33
WebtoB 관리자안내서 WebtoB 4.4.3 환경파일예제 *DOMAIN webtob1 <<http.m : Unix/Linux>> *NODE tmaxh4 WEBTOBDIR = "/usr/webtob", SHMKEY = 54000, DOCROOT="/usr/webtob/docs", PORT = "8080", HTH = 1, LOGGING = "log1", ERRORLOG = "log2", Group = "nobody", User = "nobody" *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 = "/usr/webtob/cgi-bin/" *LOGGING log1 log2 Format = "DEFAULT", FileName = "/usr/webtob/log/access.log", Option = "Sync" Format = "ERROR", FileName = "/usr/webtob/log/error.log", 34 TmaxSoft
WebtoB WebtoB 관리자안내서 Option = "Sync" *EXT htm MimeType = "text/html", SvrType = HTML *DOMAIN webtob1 <<http.m : Windows>> *NODE sooya WEBTOBDIR = "C:/webtob", SHMKEY = 54000, DOCROOT="C:/webtob/docs", Port = "8080", HTH = 1, LOGGING = "log1", ERRORLOG = "log2" *SVRGROUP htmlg cgig ssig NODENAME = "sooya", SvrType = HTML NODENAME = "sooya", SVRTYPE = CGI NODENAME = "sooya", 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 = "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", TmaxSoft 35
WebtoB 관리자안내서 WebtoB Option = "Sync" *EXT htm MimeType = "text/html", SvrType = HTML 36 TmaxSoft
WebtoB WebtoB 관리자안내서 5 WebtoB 환경파일컴파일 5.1 소개 본장에서는 WebtoB 환경파일을실제 WebtoB Web Server 에전달할수있는형태 (Binary) 로만드는컴파일툴 wscfl 의사용목적과사용법에대해설명한다. 5.2 사용목적 사용자가이해할수있는 text 형식으로된문서를정해진문법에맞추어작성하고, 이를기계가인식할수있는이진파일로변환하기위한것이다. 그리고이과정에서문법적오류나시스템설정오류를검증할수있다. 5.3 실행방법 컴파일작업은아래와같이 wscfl 명령에의해이루어진다. wscfl [-v] [-i <config_file_name> [-n <node_name>]] [-o <config_binary_file_name>] [-b] [-h] wscfl 의옵션 -i : 컴파일대상이되는환경파일이름을지정한다. -n : node_name 에해당하는노드의환경설정만컴파일하고자할경우 -i 옵션과함께사용한다. TmaxSoft 37
WebtoB 관리자안내서 WebtoB -o : 컴파일을통해만들어질이진 (Binary) 환경파일이름을지정한다. 지정하지않으면 default 로 wsconfig 라는이름의파일이만들어진다. -b : 설정파일을 backup 한다. -v : WebtoB 의 Version 을확인한다. -h : wscfl 의도움말을보여준다. 컴파일작업이성공적으로이루어지면이진환경파일이생성된다. 이때 o 옵션으로만들어질이진환경파일의이름을지정하지않으면 wsconfig 라는이름이된다. 컴파일시에러가발생하는경우, 에러발생위치와메시지를출력한다. 여러 Node 로 WebtoB 시스템이구축이되어있을때, 특정 Node 에서중앙관리를하고자하는경우각 Node 에 wsracd(web Server Remote Access Control Daemon) 가미리기동되어있어야한다. wsracd 는환경파일컴파일, WebtoB 시스템부팅, WebtoB 시스템다운, 동적환경변경등을특정 Node 에서한번의명령어로가능하게한다. 특정 Node 에서환경파일컴파일작업을수행하게되면모든 Node 에전달되며모든 Node 에이진 WebtoB 환경파일이생성된다. 이진 WebtoB 환경파일은 WebtoB 시스템기동과종료, 서비스테이블생성등에참조되며하나의환경파일로모든 Node 가관리된다. 따라서환경파일의변경작업에는상당한주의가요구된다. sample.m Configuration File Compile ($wscfl i sample.m) wsconfig Binary File 그림 5-1. 환경파일컴파일의모식도 38 TmaxSoft
WebtoB WebtoB 관리자안내서 5.4 환경설정파일추적 컴파일된환경설정파일 wsconfig( 이진 WebtoB 환경파일 ) 을다시역으로분석하여텍스트형태의환경파일을만들어현재적용되고있는환경설정파일을추적할수있다. wsuncfl [-i binary_config] -o text_config -h wsuncfl 의옵션 -i : 컴파일된이진 (Binary) 환경파일의이름을지정한다. -o : text 형식으로된문서파일의이름을지정한다. -n : 백업된리스트중지정된번호 (ver) 로 restore 한다. -l : backup 된설정파일들목록을볼수있다. -h : wsuncfl 의도움말을보여준다. 디컴파일작업이성공적으로이루어지면 text 파일이생성된다. 이때 i 옵션으로디컴파일할이진환경파일의이름을지정하지않으면 wsconfig 라는파일을디컴파일한다. TmaxSoft 39
WebtoB 관리자안내서 WebtoB 6 WebtoB 기동및종료 환경구성을마친 WebtoB 를기동및종료하기위한명령어와각종옵션에대해알아본다. 6.1 WebtoB 기동 6.1.1 기동전점검할사항 WebtoB 를기동하기전, 다음과같은사항을점검해야한다. 이진 WebtoB 환경파일이존재하는가? 환경파일 *NODE 절의 WEBTOBDIR 항목에설정된 Directory 에 WebtoB 실행프로그램들 (wsm, htl, hth, htmls, cgis, ssis 등 ) 이 존재하는가? ( 단, SSL 설정을한경우 hth 대신 hths 가 실행된다.) Multi Node 인경우, 중앙관리를위한 wsracd 가각 Node 에서동작중인가? 위의사전점검항목이확인되었다면 WebtoB 시스템을기동할준비가된것이다. wsracd 를기동시키기위해서는환경변수에 WEBTOB_RAC_PORT 를설정해주어야하며, 환경변수를참조하지않고부팅하기위해서는 wsracd k 로실행하여 wsracd 가사용될 Port 를 WebtoB 가지정하는것으로서중앙관리를위한준비를한다. 6.1.2 wsboot WebtoB 시스템을기동하기위해서 wsboot 라는프로그램이제공된다. 명령어옵션인자 wsboot -f 이진 WebtoB 환경파일이름 40 TmaxSoft
WebtoB WebtoB 관리자안내서 -T 없음 -n Node 이름 -g 서버그룹이름 -A 없음 -S 서버이름 -s 서버이름 k 개수 -w 없음 -b 없음 -B Block Listen 상태로 boot -o CLOPT string -k number 개수 -h 없음 명령어 wsboot : WebtoB 를기동하기위한프로그램. WebtoB 를기동할때사용하는옵션 -f : 이미설명한바와같이 WebtoB 는 WebtoB 환경파일을토대로기동된다. 따라서참조할이진 WebtoB 환경파일명을지정해주어야한다. 만약파일명을지정하지않으면 default 로 wsconfig 파일이참조된다. TmaxSoft 41
WebtoB 관리자안내서 WebtoB -T : WebtoB 관리프로세스들 (WSM, HTL, HTH) 만을기동시킨다. 실제서비스를하기위해서는각 Server 들을기동시켜야한다. -n : 지정된 Node 에존재하는서버프로세스들을기동시킨다. Node 명은 WebtoB 환경파일내의 Node 절에미리정의되어있어야한다. ( 멀티 Node 의환경에서는반드시지정되어야한다 ) wsboot 후적용되는옵션 ( Process 를기동할때사용 ) -g : 지정된서버그룹에존재하는서버프로세스들을기동시킨다. 서버그룹명은 WebtoB 환경파일내의 SRVGROUP 절에미리정의되어있어야한다. -A : WebtoB 환경파일내의 Server 절에정의된모든서버프로세스들을기동시킨다. 이옵션을사용하기위해서는 - T 옵션등을사용하여 WebtoB 관리프로세스들이기동되어있는상태여야한다. -S : 지정된서버에존재하는서버프로세스들을 Min 개수만큼기동시킨다. -s : 지정된서버프로세스만을기동시킨다. 서버프로세스이름은 WebtoB 환경파일내의 SERVER 절에미리정의되어있어야한다. -k 옵션을함께사용하여서버프로세스개수를지정할수있다. 서버프로세스개수는현재기동되어있는개수를포함하여 Server 의 Max 항목에정의된개수를넘어서는안된다. -k 옵션을생략하면서버프로세스는 1 개만기동된다. -k : 이옵션은 s 옵션과함께사용해야한다. -w : WebtoB 서버프로세스들이한꺼번에구동되는것이아니라한번에하나씩기동시킨다. -b : Backup Server 가지정되어있는경우 Backup Server 도함께기동시킨다. -B : Client 의요청을받아들이지않는상태로 WebtoB 를기동시킨다. -o : -o 파일명, standard output 을저장한다. 42 TmaxSoft
WebtoB WebtoB 관리자안내서 -h : wsboot 의도움말을보여준다. wsboot 사용예 $ wsboot wsconfig 환경파일을참조하여 WebtoB 관리프로세스와서비스서버프로세스들을모두기동시킨다. $ wsboot T f wsconfig2 wsconfig2 환경파일을참조하여 WebtoB 관리프로세스들만을기동시킨다. $ wsboot -A wsconfig 환경파일을참조하여모든서비스서버프로세스들을기동시킨다. $ wsboot S svr1 환경파일을 참조하여 svr1 프로세스를 MIN 개수만큼 기동시킨다. $ wsboot -s svr1 k 5 -f wsconfig2 wsconfig2 환경파일을참조하여 svr1 프로세스를 5 기동시킨다. 개 WebtoB 시스템을기동시키면먼저이진 WebtoB 환경파일내용이공유메모리에적재되고 (Load) 적재된환경파일 Node 마다지정된 WEBTOBDIR 디렉토리에서 WebtoB 기능프로세스 (WSM, HTL, HTH) 들이기동된다. 그후등록된서비스서버프로세스들이차례로기동된다. WebtoB 프로세스들의기동순서를보면다음과같다. WSM HTL HTH 서버프로세스들 6.2 WebtoB 종료 WebtoB 시스템종료도 wsboot 와마찬가지로이진 WebtoB 환경파일을토대로이루어진다. 시스템에서사용하던공유메모리를없애고기동된 WebtoB 프로세스들 (WSM, HTL, HTH) 과응용서버프로세스들을종료시킨다. TmaxSoft 43
WebtoB 관리자안내서 WebtoB 6.2.1 wsdown WebtoB 시스템을종료시키기위해서는 wsdown 이라는명령을사용한다. 사용되는옵션들은 wsboot 명령과유사하다. 명령어옵션인자 wsdown -f 이진 WebtoB 환경파일이름 -A 없음 -S 서버이름 -s 서버이름 k 개수 -n Node 이름 -g 서버그룹이름 -p 서버번호 -i 없음 -w 지연시간 (5 초이하 ) -k 개수 -h 없음 명령어 wsdown : WebtoB 를종료하기위한프로그램. 옵션 -f : 참조할이진 WebtoB 환경파일명을지정해주어야한다. 만약파일명을지정하지않으면 default 로 wsconfig 파일이참조된다. -A : 모든서비스서버프로세스들을종료시킨다. 44 TmaxSoft
WebtoB WebtoB 관리자안내서 -S : 현재사용중인해당서비스서버프로세스들을종료시킨다. -s : 해당 서버프로세스만을 종료시킨다. wsboot 와 마찬가지로지정된개수만큼동작중인해당서버프로세스를 종료시킨다. -k 옵션을 생략하면 서버프로세스는 1 개만 종료된다. -k : 이옵션은 s 옵션과함께사용해야한다. -n : 해당 Node 의응용서버프로세스들을종료시킨다. 사용되는 Node 이름은 WebtoB 환경파일의 Node 절에정의되어야한다. ( 멀티 Node 의환경에서는반드시지정되어야한다 ) -g : 해당서버그룹의서버프로세스들을종료시킨다. 사용되는그룹이름은 WebtoB 환경파일의 SVRGROUP 절에정의된것이라야한다. -p : 특정서버프로세스를종료시킨다. s 옵션에의한종료와달리 wsadmin 에서 st p 명령으로확인할수있는프로세스번호 (spr_no) 를사용하여특정프로세스를종료시킬수있다. -i : wsdown 명령을즉시수행한다. 기본적으로 wsdown 명령은해당업무를모두종료하고수행되지만 -i(immediately) 옵션에의한종료는현재수행중인업무를무조건중단하기때문에신중하게사용해야한다. -w : wsdown 명령을지정한시간후에실행한다. 시간지정은 5 초이하로지정해야한다. -h : 도움말을보여준다. TmaxSoft 45
WebtoB 관리자안내서 WebtoB 7 WebtoB 환경의기본설정 7.1 DOMAIN 절의설정 DOMAIN 절은독립적인 WebtoB 시스템전체에대해정의하는부분이다. DOMAIN 절에서정의된내용은모든 Node 에공통적으로적용된다. DOMAIN 절의기본적인항목에대한설명은 7.1.1 필수항목을참고하기바란다. DOMAIN 절의기본환경설정형식은다음과같이정의한다. Domain Name [,NliveInq] 7.1.1 필수항목 7.1.1.1 Domain Name = string 31 자이내의 string 형식으로정의한다. 31 자를초과하는이름을사용할경우, 컴파일에러는나지않으나, 내부적으로 31 자까지만인식하게된다. 31 자이내로이름을설정하게되어있는것은기타다른절들의항목에서도동일하다. *DOMAIN webtob1 위의예는도메인절을정의하고있다. webtob1 은도메인의이름으로, DOMAIN 절에서정의되어야하는유일한필수항목이다. 7.2 NODE 절의설정 NODE 절에는다음과같은내용들이정의될수있다. WebtoB 시스템의홈디렉토리 HTML 문서들이들어있는최상위디렉토리 46 TmaxSoft
WebtoB WebtoB 관리자안내서 실행할 WebtoB Process (HTH) 의개수 공유메모리의 Key 값 Port 번호또는 Listen 설정 기타 Logging 등 WebtoB 를기동시키면 Node 단위별로 WSM, HTL, HTH Process 와 HTML, CGI 등의실제서비스를수행하는 Server Process 들이기동된다. 단, SSL 설정시 HTH 가아니라 HTHS 가수행된다. 이러한 Process 들이기동하기위해서는실행파일들이존재하는위치를알아야하고, WebtoB Process 간통신에필요한디렉토리와각종 Error, 경고메시지를저장하는디렉토리도지정해야한다. 그리고각항목별로지시자들의형태가고정되어있다. 이는보통 Literal, Numeric, String 등의형태로나타나는데, 이들의형태에맞게각항목을설정하여야한다. NODE 절의기본적인환경설정형식은다음과같이정의한다 : Node name WEBTOBDIR= WebtoB-home-path, SHMKEY =shared-memory-segment-key, DOCROOT = WebtoB-html-root [,HTH][Port][,JSVPort] [,Logging][,Errorlog] [,IndexName] 7.2.1 필수항목 7.2.1.1 Node Name = string 31 자이내의 string 으로정의한다. 31 자를초과하는이름을사용할경우에는컴파일에러는나지않으나내부적으로 31 자까지만인식한다. Node 이름은실제등록된 Host 의이름을말한다. 예를들어 UNIX 의경우 uname n 명령으로각 Host 의이름을확인할수있다. 또한해당 Node 명은반드시 /etc/hosts 파일에등록되어있어야한다. 하나의 Domain 은하나이상의 Node 로이루어지므로, NODE 절에는최소한하나이상의 Node 이름이정의되어야한다. TmaxSoft 47
WebtoB 관리자안내서 WebtoB 7.2.1.2 WEBTOBDIR = literal 크기 : 255 자이내. WebtoB 가설치되어있는홈디렉토리의절대경로명이다. 이경로명은환경변수 WEBTOBDIR 과동일한값이정의되어야한다. WebtoB 관련작업은모두 WebtoB 디렉토리하에서이루어진다. 이러한 bin, config, lib, docs, log, path 등의하위디렉토리구조를가지는상위디렉토리명을 WEBTOBDIR 에정의한다. 7.2.1.3 SHMKEY = numeric (32768 ~ 262143) 공유메모리세그먼트 (Shared Memory Segment) 를가리키는값이다. WebtoB 를이루는 Process 들이서로정보를공유하기위한공유메모리 Key 값을정의할필요가있다. 공유메모리 Key 값을정의하기전에이 Key 값들이다른프로그램또는다른업무에서사용되는지반드시확인해야한다. 그렇지않으면 WebtoB 기동시다른프로그램과충돌을일으켜서실행이되지않는다. 현재 WebtoB 에서정의되는 Shared Memory 의 Key 값은최소 32768 에서최대 262143 까지이다. 따라서이범위내에있는값을이용하면된다. 7.2.1.4 DOCROOT = literal WebtoB 가 Web 을통해서비스하는모든문서를포함하는루트디렉토리의경로이다. 즉, WebtoB 는 DOCROOT 가지정한디렉토리를최상위로하여문서를서비스하게된다. Client 가요구한 URL 은 DOCROOT 의경로뒤에추가되어실제경로명을이루게된다. WebtoB 는이경로를가지고파일에접근하게된다. 7.2.2 선택항목 7.2.2.1 HTH HTH = numeric (Default Number: 1, Max Number: 20) WebtoB 에서가장중요한역할을담당하고있는 HTH (HTTP Request Handler) Process 의개수를설정한다. HTH 는실질적으로 Client Browser 와 WebtoB 내부서비스 Process 사이를중계하는 Process 이다. 즉, Client 의요청을받아서비스를받을수있도록적당한 Process 에넘겨주고, 다시처리된결과를수신하여 Client 에게되돌려준다. 48 TmaxSoft
WebtoB WebtoB 관리자안내서 WebtoB 에서는모든 Client 가이 HTH Process 에연결되도록설계되어있다. 따라서많은수의동시접속자를유지하기위해서는이수를적당히늘려주는것도필요하다. 그러나보통하나의 HTH Process 가적어도 800 개이상의 Client 를수용할수있기때문에하나의 HTH 로도큰문제는되지않을것이다. 만약 1000 명이상의동시사용자를수용하여야하는시스템에서는, 두개이상의 HTH Process 를구동하여야한다. 현재 WebtoB 에서는최대 20 개까지의 HTH Process 를구동하는것이가능하다. 따라서약 16000 명의사용자를동시에처리하는것이가능하다. 7.2.2.2 PORT PORT = literal (Default Port: 80) WebtoB 의 HTTP Listener 포트번호를설정한다. 이는기본적으로 Web 서비스를하기위해서는반드시필요한설정으로, 이항목은반드시설정해야한다. 보통일반적인 Web Server 는 80 Port 를이용한다. 그러므로이항목을설정하지않았을경우에는 default 로 80 Port 가설정된다. 임의의 Port 지정시대부분의시스템에서 1 ~ 65535 까지지정가능하다. 65535 보다큰값을지정하고자할경우시스템에서더큰값을지원하는지확인해야한다. Virtual Host 를사용하는경우, Port 번호는 VHOST 절에서재정의해야 한다. 또한 WebtoB 의경우여러개의 Port 를동시에정의하는것도 가능하다. 현재는최대 100 개의 Port 를동시에설정하는것이 가능하다. 즉, PORT 의설정을통해서여러개의 Port 가동시에 Listen 하는것이가능하다는것이다. 이에대한간단한예는다음과같다. PORT = 9090, 9091 위와같은 Setting 이이루어지면, WebtoB 는 9090 과 9091 Port 에서모두 Web 서비스를받아들일수있다. 한가지주의할점은이것은 Listen 항목과동시에운영할수없다는것이다. Listen 항목에서특정 Port 를지정하는경우이 Port 만을이용하게된다. 즉, 중요한것은 Listen 항목에서지정된 Port 가 PORT 항목에서지정된것보다우선된다는것이다. 물론 Listen 항목에서도여러개의 Port 를지정하는것이가능하다. 이에대한예는 Listen 항목의설명에서할것이다. TmaxSoft 49
WebtoB 관리자안내서 WebtoB 7.2.2.3 JSVPORT JSVPort = numeric (Default Port: 9999) WebtoB 와 Java Servlet 수행 Server 간의연결 Port 번호이다. 7.2.2.4 IndexName IndexName = literal (Default : index.html) Client 가특정파일이름을지정하지않고 Service Directory 에요구를보낼때기본적으로서비스되는파일이름을설정한다. 따로설정하지않으면 index.html 이설정된다. 7.2.2.5 Logging Logging = literal 뒤의 Logging 절에서설정하는 Logging Name 을써준다. 이이름을가지고이 Node 에서그에해당하는 Log 를남기게되는것이다. 7.2.2.6 ErrorLog ErrorLog = literal 오류발생시설정하는 Logging 정보이름을써준다. 이이름또한뒤의 Logging 절에서설정하는 Logging Name 을써준다. 7.3 SVRGROUP 절의설정 Server Process 의논리적인연관성에따라이들을그룹으로관리하기위한절이다. Node 이름, Server 의종류, 호스트의이름등을등록한다. NODE 절이나 VHOST 절에서정의한내용이 Server Group 에따라새롭게정의할수있다. SVRGROUP 절에는기본적으로다음과같은내용이정의될수있다 : SVRGROUP Name NODENAME, SVRTYPE 7.3.1 필수항목 7.3.1.1 Server Group name Server Group name = string 크기 : 31 자이하 50 TmaxSoft
WebtoB WebtoB 관리자안내서 Server Group 에대한논리적인이름으로서 SVRGROUP 절내에서유일한값이어야한다. SVRGROUP 절이름은 SERVER 절의 SVGNAME 항목에서사용된다. 7.3.1.2 NODENAME NODENAME = string Server Group 이존재하는 Node 를정의한다. 사용되는 NODENAME 은 NODE 절에서정의한 Node 이름이어야하며, Node 이름은유닉스명령어 uname -n 을이용해서확인해볼수있다. 7.3.1.3 SVRTYPE SVRTYPE = string Server Group 의속성, 즉어떠한서비스를제공하는가를명시한다. Server 타입으로 HTML, CGI, JSV, WEBSTD, SSI 등을명시할수있다. 7.4 SERVER 절의설정 WebtoB 는등록된서비스만을처리하기때문에새로운 Server 프로그램이추가되는경우 Server 절의환경파일에반드시등록하여야한다. WebtoB 가제공하는대부분의서비스는 SERVER 절에서등록이가능하며비즈니스로직을 WebtoB 를통해직접호출하는경우에만 SERVICE 절의등록이필요하다. 각각의 Server 는위의 Server Group 절에정의된서비스종류에따라 HTML, CGI, JSV 등으로구분되며 Server Group 이름과 Process 의가능한개수등이같이등록된다. SERVER 절에는다음과같은내용이정의된다. 각 Server Process 가속하는 Server Group. Server Process 의최소개수와최대개수. SERVER 절의기본형식은다음과같다 : ServerName SVGNAME=server-group-name, [,MinProc][,MaxProc] TmaxSoft 51
WebtoB 관리자안내서 WebtoB 7.4.1 필수항목 7.4.1.1 Server Name Server Name = string 크기 : 31 자이하 Server 의실행파일이름으로서일반적으로 Server 이름은유일 (Unique) 해야한다. 즉하나의 Server 이름은 SERVER 절에단한번만정의되어야한다. 같은이름을중복하여이용하면환경파일의 Compile 시에 Error 가발생하게된다. 7.4.1.2 SVGNAME SVGNAME = string Server 가속해있는 Server Group 을정의한다. 여기에사용되는값은반드시 SVRGROUP 절에서정의된 Server Group 이름이어야한다. Server 와 SVRGROUP 절의연결을통해서 Server 가어떤 Node 에서동작할것인지, 어떤리소스매니저 ( 데이터베이스 ) 를사용하는지알수있으며. 해당리소스매니저를열때필요한파라미터를넘겨줄수있다. 7.4.2 선택항목 7.4.2.1 MinProc MinProc = <numeric> 기본적으로기동될 Server 프로세스의개수를결정한다. 이 MinProc 는 Server Process 의최소개수를나타내는것으로처음 WebtoB 가 Booting 될때시작되는 Process 의수와같다고생각하면된다. 7.4.2.2 MaxProc MaxProc = <numeric> MinProc 와더불어 Server 프로세스개수를결정하는항목이다. MaxProc 는 MinProc 를포함하여추가적으로기동시킬수있는프로세스의최대개수이다. 52 TmaxSoft
WebtoB WebtoB 관리자안내서 8 WebtoB 환경의고급설정 8.1 동적컨텐츠를위한 WebtoB 설정 8.1.1 소개 본장에서는앞에서살펴본기본적인설정외에특수한작업을하기위한설정에대하여알아볼것이다. 이제 Web Server 가설치되었으므로 html 을이용한서비스는가능하게되었다. 즉, WebtoB 의 Document Directory 에 html 문서를두면브라우저로호출하여열람이가능하다. 이제좀더고급스러운서비스를위한동적서비스의설정을알아볼차례다. 또한가상호스트를이용한다중서버서비스의구축방법도알아보자. 본장을통해 CGI, SSI, PHP 를사용하기위한설정과간단한예제를통해그설치예를보여주고자한다. 웹을풍요롭게하는이러한 Tool 들의자세한작성법은본매뉴얼에서다룰내용은아니지만, 각각의특징을안다면웹의설계에도움이된다. 어떤서비스를무엇을사용해구현하는것이효과적일지안다면, 이후그에대한전문지식은다른서적을참고하면될것이다. 이해를돕기위해각각에대한기본적인설명과예제를담았다. 8.1.2 CGI 설정 8.1.2.1 CGI 의이용 CGI 는 Common Gateway Interface 의약자이다. WWW 에서는 HTML 에의해여러가지정보를처리한다. HTML 은홈페이지를만드는기초가되는언어이다. 하지만 HTML 만으로모든정보를다처리할수없다. 단방향식의정보제공역할만할따름이다. 이것을보충하기위해서여러가지방법이마련되어왔다. 그중하나가외부프로그램을수행하여그것의결과를 HTML 형태로보여주는방식이다. 이때이외부프로그램과 Web Server 간의연결역할을하는것이 CGI 이다. 또는넓은의미로 CGI 를수행하는외부프로그램을포함하여말하기도한다. 예를들어, 홈페이지에방문객들의 comment 를받을 TmaxSoft 53
WebtoB 관리자안내서 WebtoB 수있는방명록을만들려고할때, 웹에서구현하는 HTML 만으로는해결할수없다. 그래서외부프로그램이필요한데, 이때외부프로그램과 Web Server 간에서로주고받을수있는규약을 CGI 라고하고, 그때사용하는프로그램을흔히 CGI 프로그램 ( 혹은 CGI 스크립트 ) 이라고한다. 이 CGI 프로그램은통상적으로 C/C++ 나 PERL 혹은 UNIX Shell, Tcl/Tk 등을사용하여구현한다. 홈페이지를 interative 한형태로만들수있는 CGI 프로그램의종류는매우다양하다. 방문객카운터나방명록뿐만아니라웹게시판, 웹대화방, 검색엔진, 다양한배너보여주기, 업로드가가능한자료실, 폼을이용하여메일을띄우는폼메일 (Form Mail) 등이루헤아릴수없이많다. 현재이러한 CGI 들은표준화되어있다고봐도된다. 또한, 이것은외부프로그램이수행되는방식이기때문에, 프로그램자체에문제가없다면다른곳에서로이식하는데에도아무문제가없다. 즉, 어떤 Web Server 에서무리없이돌아가는 CGI 라면다른 Web Server 에거의무난하게이식이가능하다는것이다. WebtoB 역시다른 Web Server 와같은방식으로처리하기때문에 CGI 수행에는전혀지장이없다. CGI 를제작하는방법은매우다양하고, 여러가지방법이있으므로본서에서깊은내용을언급하지는않을것이다. CGI 프로그램을제작하는것은시중에책으로많이나와있고, 온라인상에서도많은자료를구할수있다. 8.1.2.2 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 서비스를하는것이된다. 54 TmaxSoft
WebtoB WebtoB 관리자안내서 *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/" 8.1.2.3 CGI 설정및사용예 설정은부록 [A. 환경파일작성예 ] 를참조하고사용예는부록 [B. CGI 활용예 ] 를참조한다. 8.1.3 SSI 설정 8.1.3.1 SSI 의이용 SSI 는다이나믹한문서를만드는데있어매우유용하다. 예를들면헤더파일등을더할수도있고마지막수정일 (Last Modified) 을자동으로조절할수있는기능들을문서에포함시킬수도있다. 이것은 CGI 와같이사용할수있으나복잡하지않으며, 프로그래밍또는스크립트의기능같은것은가지고있지않다. SSI 는간단하게나마다이나믹한문서를만들수있는것이다. SSI 는 HTML 문서에 'command' 를집어넣어사용할수있으며, Server 에서는 SSI 문서를읽어들이고, SSI 명령어를찾아보고그에맞는기능을수행한다. 예를들면 Last modification time 을수정하는 SSI 명령어가문서에포함되어있으면서버는파일로부터명령어들을읽어들여명령을수행하여시간을수정한다. SSI 는참고자료를구하는것이쉽지가않다. 대부분 CGI 프로그램작성란에참고로들어가거나, 혹은간단한예제로넘기는경우가대부분이다. 따라서여기에서간단하나마기본적인 SSI 의설정과 TmaxSoft 55
WebtoB 관리자안내서 WebtoB 문법을알아보도록하자. WebtoB 에서기본설정은 HTML 파일안에 SSI 명령어를포함하고있지않다. 왜냐하면, HTML 파일을매일액세스하는곳에서는이로인하여 html 이오히려느리게작동하기때문이다. SSI 가필요해서사용하기원한다면 WebtoB 환경파일안에 SSI 를위한 Server 를추가로포함시켜주어야한다. 이렇게하는것이성능향상에더유리한구조이다. *SVRGROUP ssig <<http.m>> NODENAME = tmaxh4, SVRTYPE = SSI *SERVER ssi1 SVGNAME = ssig, MinProc = 1, MaxProc = 10 8.1.3.2 SSI Commands 모든 SSI 명령어는 HTML 문서안에 HTML comments 형식으로저장되어야한다. 일반적으로, 모든명령어는다음형식을따르며, 명령어전체는 comment <!-- 와 --> 로처리되어야한다. <!--#command arg1="value1 arg2="value2... --> 여기서 arg1, arg2 는인수고나머지 value1, value2 는인수의값을나타낸다. SSI 사용방법은아래와같다 : <!--#flastmod file="nextel.html" --> 위예에서사용된 flastmod 명령어는수정시간을출력하라는뜻이고 Value 로는 nextel.html 이쓰인다. 이예에서, 'file' 은인수가되는것이고 'nextel.html' 은값이되는것이다. 흔히명령어는인수이름에따라다르게실행되어질수있다. 예 ) <!--#flastmod virtual="/" --> 서버의홈페이지마지막수정시간을얻을수있다. SSI 명령어가실행될때 'environment variables' 값이설정이된다. 이것은 CGI variables 을포함하고있고 (REMOTE_HOST etc), DOCUMENT_NAME 그리고 LAST_MODIFIED 등을가지고있다. 또다른예로 echo 명령어로도출력할수있다. 56 TmaxSoft
WebtoB WebtoB 관리자안내서 <!--#echo var="last_modified" --> 8.1.4 PHP 설정 PHP 는 Perl 과유사한형태의 Script 로간편성과괜찮은성능으로인하여많이이용되고있다. 속도, 개발편의성, 여러가지확장기능으로볼때기존의펄 (Perl) 보다한수위인언어로 LINUX 나 UNIX 계열뿐만아니라, WIN32 용바이너리파일을제공해 Microsoft 계열의 Web Server 에서도사용이가능하기때문에, 운영체제에독립적인웹프로그램개발이가능한것이큰장점이다. 가장기본적인레벨에서, PHP 는 CGI 프로그램에서할수있는모든것을할수있다. form data 를가져오고, 동적인웹페이지를만들거나, Cookie 를보내고받을수도있다. 8.1.4.1 PHP 의이용 WebtoB 에서 PHP 를이용하기위해서는약간의설치작업이필요하다. 이는 HTML 이나 CGI 를이용하는것과거의유사하기때문에쉽게적용할수있을것이다. 먼저, SVRGROUP 절에 PHP 에관련된 Group 을설정하고이를 Server 절에서다시정의하면된다. 이때, SVRGROUP 에 ScriptLoc 라는항목이추가되는데, 이는 php 의실제실행모듈이있는곳을말한다. 이는보통 cgi-bin/ 디렉토리에추가하는데 WebtoB 에서도이를권장한다. 아래는이에대한간단한예이다 : PHP 모듈이있는곳의경로는 WEBTOBDIR 이하의상대경로위치만적어주면된다. 즉, 아래예에서 ScriptLoc 에설정된모듈경로는절대경로가아니라, WebtoB 가설치된디렉토리아래에 /cgi-bin/php 가위치한다는의미이다. <<http.m>> *SVRGROUP phpg NODENAME = tmaxh4, ScriptLoc = "/cgi-bin/php", SVRTYPE = PHP *SERVER php SVGNAME = phpg, MinProc = 1, MaxProc = 10 위와같이설정을하면 PHP 를사용할수있다. TmaxSoft 57
WebtoB 관리자안내서 WebtoB php3 모듈을사용하는경우에는부가적인설정이필요하다. 다른버전과는달리 php3 의경우는, 확장자가.php3 인파일을이용하기위해서이를 EXT 절에추가하여주어야한다. php4 는기본적으로 php 라는확장자를이용하기때문에추가설정을요하지않으나, php3 는확장자가.php3 이기때문에이는 EXT 절에추가해주어야동작한다. 아래예를참조하자. *EXT php3 MimeType = "application/x-httpd-php3", SVRTYPE = PHP 8.1.4.2 PHP 예 PHP 의설치및 WebtoB 에서의설정이정상적인지확인하기위해간단한페이지를요청해보자. $WEBTOBDIR/docs 에 phpinfo.php 를만든다. <? Phpinfo();?> << phpinfo.php >> 브라우저에서다음과같이요청한다. http://<ip address>:<port>/phpinfo.php 다음과같은화면이출력됨을확인한다. 이화면은설치된 PHP 에대한각종환경정보를나타낸다. 58 TmaxSoft
WebtoB WebtoB 관리자안내서 그림 8-1. PHP 테스트페이지 8.2 Virtual Hosting 설정 8.2.1 개요 가상호스트는현재 HTTP 1.1 을지원하는브라우저에서적용할수있는 Web Server 의기능으로하나의 Web Server 를이용하여마치여러대의 Web Server 가운영되고있는것과동일한효과를내는것이다. WebtoB 에서는이가상호스팅기능을제공한다. 간단한예를들어이기능을살펴보자. TmaxSoft 59
WebtoB 관리자안내서 WebtoB 당신이웹상에서새로운서비스를시작하고, 그서비스는인터넷신문사인 WebtoB Times 라고가정해보자. 이서비스를하나의 IP 주소와도메인이름, 그리고한대의 Web Server 를이용해서운영할수도있다. 그러나, 당신은하나의 IP 를사용하면서도몇개의도메인이름으로분리하여서비스를제공한다면이용자도알기쉽고관리및차후확장에도용이할것이라는판단하에다음과같은몇개의서비스로분리하고자한다. webtobtimes.com: 메인페이지 society.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 를확보하기는힘들기때문이다. ) 가상호스트의구조를그림으로나타내어보면다음과같다 : 60 TmaxSoft
WebtoB WebtoB 관리자안내서 Browser WebtoB Web Server Main webtobtimes.com vhost1 society.webtobtimes.com Internet vhost2 sport.webtobtimes.com 그림 8-2. 가상호스트의구조 위와같이하나의 IP 와한대의 Web Server 를이용해각도메인의서비스를할수있으며, 동일 IP 에다른이름으로호출된서비스를 WebtoB 의가상호스트가구분하여서비스하게된다. 8.2.2 사용예 아래의예는위의 Web Times 란가상의사이트를바탕으로구축한가상호스트의예제이다. <<http.m>> *VHOST vhost1 DOCROOT = "/usr/local/webtob/docs/vhost1_docs", NODENAME = webtob1, HOSTNAME = "society.webtobtimes.com", PORT = "8080", 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", ERRORLOG = "v1_log2" TmaxSoft 61
WebtoB 관리자안내서 WebtoB vhost2 DOCROOT = "/usr/local/webtob/docs/vhost2_docs", NODENAME = webtob1, HOSTNAME = "sports.webtobtimes.com", PORT = "8080", 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 가능하다. 절을적절히이용해주면효과적인웹운영이 8.2.3 Mass Virtual Host 대량의가상호스트를설정함에있어각각의설정이비슷한경우일일이설정하지않고보다간편하게이용할수있는설정방법이있다. 8.2.3.1 DOCROOT 설정 DOCROOT = <literal> (Default : $WEBTOBDIR/docs/ ) 대량의가상호스트에있어서 DOCROOT 설정만다른경우이용할수있는기능으로, 각가상호스트의 DOCROOT 는해당서버의도메인네임값을디렉토리설정패턴에준해치환함으로서결정한다. 예를들어아래와같은설정을한경우, 클라이언트에서 http://tmax1.tmax.co.kr 로접속을하였다면이가상호스트의 DOCROOT 는 /webtob/vhost/tmax1/ 이된다. 마찬가지로 http://tmax2.tmax.co.kr 로접속하였다면 DOCROOT 는 /webtob/vhost/tmax2/ 가된다. *VHOST TmaxSoft NodeName = tmax, HostName = tmax1.tmax.co.kr HostAlias = tmax2.tmax.co.kr, tmax3.tmax.co.kr PORT = 80, DOCROOT = /webtob/vhost/%1 62 TmaxSoft
WebtoB WebtoB 관리자안내서 8.2.3.2 RealPath 설정 RealPath = <literal> (Default : mandatory) 여러개의가상호스트를사용함에있어 *ALIAS 절의 RealPath 를설정할때이용할수있는기능이다. 서버의도메인네임값을디렉토리설정패턴에준해치환함으로써 RealPath 경로를설정할수있다. 예를들어아래와같이설정한경우, 클라이언트에서 http://tmax1.tmax.co.kr 로접속하였다면이 ALIAS 의 RealPath 는 /webtob/vhost/tmax1/cgi-bin/ 이된다. 마찬가지로 http://tmax2.tmax.co.kr 로접속하였다면 RealPath 는 /webtob/vhost/tmax2/cgi-bin/ 이된다. *ALIAS alias1 URI = /cgi-bin, RealPath = /webtob/vhost/%1/cgi-bin/ 8.2.3.3 디렉토리설정패턴에사용되는 %- 지시자 지시자내용 %p 가상호스트의포트번호로치환한다. %n hostname 이나 IP 주소의 n 번째요소로치환한다. 만약 n 을 0 으로하면전체문자열이사용된다. 마이너스표시 (-) 가앞에오면 hostname 이나 IP 주소의끝에서부터센다. 플러스표시 (+) 가뒤에오면 hostname 이나 IP 주소의나머지가사용된다. %n.m n 번째요소의 m 번째문자로치환된다. 위와같이 (-) 표시나 (+) 표시가붙을수있다. %% 단일퍼센트 (%) 표시로치환된다. TmaxSoft 63
WebtoB 관리자안내서 WebtoB 8.3 WBAPI 설정 WebtoB 는기존 CGI 방식의 Application Program 들의문제점을해결하기위하여새로운 WebtoB 만의 API 를제공한다. 기존의 CGI 방식은사용자의요구에따라서그때마다새로운 Process 가시작되어사용자의요구를처리한다. 이는결국사용자가새로운요구를하면그순간에시스템의운영체제가그프로그램에해당하는 Process 를 Fork 하는작업을수행하게한다. 이때새로운 Process 를 Fork 하는작업은시스템자체에부하를걸게되고, 이런일이많아지게되면시스템은많은부담을안게된다. 이런문제점때문에기존 CGI 사용자들은점차새로운 Application 으로눈을돌리게되었고, Servlet, PHP, ASP, JSP 등이등장하였다. 그러나이들은모두 C 로만들어진프로그램이아니라 Java 나 Script 등을이용한새로운형태의프로그램들이다. 따라서, 새로운개발에는용이할지몰라도기존 C Style 로 CGI 프로그램들을개발하여운영해온사람들에게는기존프로그램들을모두폐기하고새로만들어야하는부담을안겨주고있다. 이에 CGI 개발자들은자신들이운영하던 CGI 를버리고완전히새로운프로그램을도입할것인지, 아니면기존프로그램을운영하되 Server 를늘려서 CGI 의부담을줄일것인지큰고민에싸이게되었다. 이에 WebtoB 에서는기존 CGI 개발자들의고민을덜고자새로운형태의 API 를개발하였다. 이는 C Style 의프로그램을위한 API 로서, CGI 프로그램의부담을획기적으로덜고기존 CGI 프로그램의수정은최소화한것이다. 이를통하여기존 CGI 프로그램으로서비스를해오던많은사용자들은부담도덜고, 성능도얻는획기적인결과를얻을수있는것이다. 8.3.1 WBAPI 의개념 CGI 방식은위에서언급한대로사용자가요구할때마다매순간새로운프로그램이 Fork 되고처리가끝나는순간 exit 되는일을반복한다. 이는시스템에서볼때굉장히큰부담이아닐수없다. 다른처리를해야할시간에새로운 Process 를 Memory 에 Load 하고 Scheduling 을해야하는등의많은작업을해야하기때문이다. 64 TmaxSoft
WebtoB WebtoB 관리자안내서 아래그림은아파치 Web Server 에서의 CGI 를사용하는모습을 나타낸다. 그림 8-3. Apache 에서의 CGI 동작방식 위그림을보면매순간 CGI 가 fork 되는로드가늘생길수밖에없다는것을알수있다. WebtoB 에서제공하는 WBAPI 는우선 CGI 의이런점을개선하였다. 즉, 사용자가요구를보내는매순간에 Process 를 Fork 하는것이아니라, Web Server 가 Boot Up 되는시점에이러한프로그램들을미리 Fork 하여 Memory 에올려놓는것이다. 또한, 사용자의요구에대한처리가끝난시점에서도 Exit 되는것이아니라, 계속 Memory 에상주하여다음요구를기다리는것이다. 결국매순간 Process 가 Fork 되고 Exit 되는부담이줄어들게되는것이다. 또한단순히이러한부담을줄이는외에도이 WBAPI 로설계된프로그램의관리를 WebtoB 가하게된다. 따라서만약사용자의부주의나설계오류로프로그램이죽거나문제가생겼을때, 즉각새로운프로그램을다시실행할수있게하는등의기능이추가을제공한다. 또한이러한프로그램들의수를조정할수있게하여만약특정프로그램에대한요구가많다고판단되면이를미리많이실행시켜놓게할수도있다. WebtoB 의 WBAPI 의호출을그림으로나타내면다음과같다. TmaxSoft 65
WebtoB 관리자안내서 WebtoB WebtoB WBAPI Mechanism 그림 8-4. WebtoB 에서의 WBAPI 그리고또하나주의할점은앞에서도언급했지만 WBAPI 는 main() 으로시작하는일반함수와는다르다는것이다. 이는 WBAPI 로작성한프로그램들이독립된 Process 로발생하기는하지만, 실제 WebtoB 의내부와연결된 Process 로동작하기때문이다. 따라서함수의시작이일반적인 main() 이아닌 Service Name 이라는것으로시작하게된다. 따라서함수의시작되는이름이반드시 Service Name 이되어야하고, 이는 WebtoB 의환경파일에등록이되어있어야한다. 이를자세히알기위해서는이후에설명될 8.3.4 WBAPI 를위한설정절을참조하기바란다. 8.3.2 WBAPI 의종류 WBAPI 는각각 INIT/DONE 계열, ALLOC 계열, GET 계열, PUT/SET 계열, SEND 계열, COOKIE 계열, SESSION 계열, ETC 계열로구성되어있다. 이들은각각의기능별로나누어진것으로각각의 API 에대한간단한설명은부록 [C.1 WBAPI List] 를참조하며, 더자세한설명은매뉴얼 [WebtoB WBAPI 레퍼런스 ] 를참조한다. 66 TmaxSoft
WebtoB WebtoB 관리자안내서 8.3.3 WBAPI 의이용과예 WBAPI 는차후에 Multi thread 기능을제공할예정이다. 이를위하여각각의함수마다특정자료구조 (Data Structure) 를선언하는것이필요하다. 처음 WBAPI 프로그램을작성하게되면 Service Name 을등록하게되는데이때 WBSVCINFO 라는구조를선언하게되어있다. 이를 WBAPI 내부의각각의함수의앞에반드시적어주어야한다. 따라서한 WBAPI 프로그램내부의모든 WBAPI 함수는 Service Name 시에선언된구조를함수의첫번째인자로가지고있어야한다. WBAPI 를이용하여기존의 CGI 프로그램을변환할때어떤방식으로이루어지는지부록 [C.2 WBAPI 를이용한 CGI 의변환 ] 을참조한다. 8.3.4 WBAPI 를위한설정 WebtoB 에서 WBAPI 를쓰기위해서는프로그램의작업과함께 WebtoB 의환경설정이필요하다. 즉, WebtoB 에 WBAPI 를이용하여프로그램을개발하였고, 이는이렇게이용하겠다는식의등록을한다는것이다. WebtoB 의환경파일을예로들어설명하겠다. 앞의 WebtoB 의환경파일을다룬장에서우리는 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 jsvg NODENAME = webmain, SVRTYPE = HTML NODENAME = webmain, SVRTYPE = CGI NODENAME = webmain, SVRTYPE = JSV TmaxSoft 67
WebtoB 관리자안내서 WebtoB 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 SVRNAME = webaps *URI uri1 Uri = /svct/, SVRTYPE = WEBSTD, SvrName = webaps 위의설정파일에서진한색으로처리된부분이실제 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 에대한설정이추가로필요하게된다. 이는다음과같다. *SERVICE write_board SVRNAME = webaps 68 TmaxSoft
WebtoB WebtoB 관리자안내서 위의 SERVICE 절은 WBAPI 로개발된프로그램의등록을하는것이다. 이는실제프로그램의함수명과도같은데, 위의 WBAPI 로개발된 프로그램이일반 C Style 과달리 write_board() 로시작하는것과같다. 즉, 이함수시작이름이 Service 의이름이되는것이다. 따라서 등록시이이름으로등록을한다. *SERVICE 절은 SERVER 절 다음에추가하면된다. *URI uri1 Uri = /svct/, SVRTYPE = WEBSTD, SvrName = webaps WBAPI 로만든 Service 사용시 *URI 절설정을이용한다. 이는요청에특정 URI, 즉 /svct/ 라는 URI 로시작하는경우 WBAPI 서비스로서실행시키겠다는의미이다. 8.3.5 WBAPI 프로그램의 Service Table 생성 보통 WebtoB 를기동하기위해서는 wscfl 을통해서컴파일만하면되었으나이 WBAPI 를쓰기위해서는 wscfl 로컴파일한후 Service Table 을만들어야한다. 이는 bin/ 디렉토리안에있는 wsgst 라는함수를이용하여생성해주기만하면된다. wsgst 를수행하면 WebtoB 는 WBAPI 를쓰기위한 _svctab.c 라는확장자를가진 Service Table 을지정된 Path 에만들어낼것이다. Service Table 을만드는작업은 wsgst 명령에의해이루어진다. $ wsgst [ -f config binary file name ] Ex) 옵션 -f : Service Table 을만들때참조하는환경파일이 wsconfig 가아닌경우이이름을지정한다. $ wsgst ( Default 로 wsconfig 를참조한다 ) $ wsgst -f wsconfig2 ( wscfl -o 를사용한경우 ) 이로써 WBAPI 를사용하기위한모든준비가끝났다. 이제 WBAPI 로개발된프로그램을 Compile 하여실행파일을만들고이를위와같은형식으로등록하여주면된다. TmaxSoft 69
WebtoB 관리자안내서 WebtoB 8.3.6 WBAPI 프로그램의 Compile WBAPI 로개발된프로그램은 C 에서기본적으로제공되는 Library 외에도 WebtoB 에서제공하는특수한 Library 및앞에서설명한 Service Table 파일을이용하여야하기때문에이를컴파일시연결해주어야한다. 아래는 Compile 을위한 Makefile 파일의예이다. (Unix/Linux) #Makefile.common TARGET= webaps APOBJS= ap.o #hp 32bit CFLAGS = -Ae +DA1.1 +DD32 -O -I$(WEBTOBDIR) #hp 64bit #CFLAGS = -Ae +DA2.0W +DD64 +DS2.0 -O -I$(WEBTOBDIR) #sun 32bit #CFLAGS = -O -I$(WEBTOBDIR) #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) -brtl 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 70 TmaxSoft
WebtoB WebtoB 관리자안내서 $(CC) $(CFLAGS) -L$(WEBTOB_LIBDIR) -o $(TARGET) $(OBJS) $(LIBS) $(USERLIBS) svct: cp $(WEBTOBDIR)/svct/$(TARGET)_svctab.c. $(CC) $(CFLAGS) -I$(WEBTOB_INCDIR) c $(TARGET)_svctab.c (Windows) #Makefile for Windows TARGET = webaps.exe LIBS = /link $(WEBTOBDIR)\lib\aps.lib ws2_32.lib CFLAGS = /D _DEBUG /I $(WEBTOBDIR) /Gd /MD /nologo APOBJ = $(TARGET:.exe=.obj) SVCTSRC = $(TARGET:.exe=_svctab.c) SVCTOBJ = $(TARGET:.exe=_svctab.obj) OBJS = $(APOBJ) $(SVCTOBJ) $(TARGET): svct $(OBJS) cl $(CFLAGS) -o $@ $(OBJS) $(LIBS) copy $@ $(WEBTOBDIR)\ap svct: copy $(WEBTOBDIR)\svct\$(SVCTSRC) clean: -del $(OBJS) $(TARGET) 8.3.7 WBAPI 의시작및응용 모든작업이순조롭게끝나면 WebtoB 가기동시에이 WBAPI 로개발된프로그램을같이실행시켜프로세스형태로메모리에 Load 함을볼수있을것이다. 추가적인 API 들이프로그램의편이성및확장성을위해제공된다. 이는 WebtoB WBAPI 레퍼런스매뉴얼에서제공될것이다. WBAPI 로 TmaxSoft 71
WebtoB 관리자안내서 WebtoB 다양한프로그램을개발하고싶다면 WebtoB Application 개발안내서를참고하는것이많은도움이될것이다. 또한 CGI 를변환하는것은 WBAPI 의기능중의일부임을꼭기억하기바란다. 기존 CGI 의변환외에도 C Style 에능숙한사람들은새로운 Application 을개발할때이 WBAPI 를이용하면개발의편이성및성능향상에도많은도움이될것이다. 티맥스소프트에서는지속적으로 WBAPI 를제공하고또향상할것이므로차후의확장성이나지원등에서무리가없을것이다. 그리고이 WBAPI 를통해서기존 TP-Monitor 에서제공한 Service 기능들을이용하는것도가능하다. 이는다음장에서설명할것이다. 8.4 Tmax 와의연동 8.4.1 소개 WebtoB 는 aps 라이브러리를이용하여 티맥스소프트의 TP- Motinor 제품 Tmax 와의연동기능도제공한다. 이는 Tmax 를별도설치해야사용할수있다. WebtoB 측에서는 WBAPI 를이용하여 Client 프로그램만작성하며 Server 프로그램은 Tmax 에있는것을사용한다. 즉, WebtoB 측의 Client 프로그램에서 Tmax 의 Server 프로그램으로요청을보내고그응답을받아와서 WebtoB 의 Client( 웹브라우저 ) 로결과에대한응답을주는것이다. 8.4.2 Tmax 연동을위한환경파일 Tmax 와의연동은 WBAPI 를이용하는것이므로환경파일작성방법역시그와동일하다. *DOMAIN webtob_apsl << apsl.m >> *NODE tmaxi2 WEBTOBDIR="/data3/gloria/webtob", SHMKEY = 74125, DOCROOT="/data3/gloria/webtob/docs", PORT = "8797", 72 TmaxSoft
WebtoB WebtoB 관리자안내서 HTH = 1, LOGGING = "log1", APPDIR = "/data3/gloria/webtob/ap", ERRORLOG = "log2" *SVRGROUP htmlg webapg NODENAME = "tmaxi2", SVRTYPE = HTML NODENAME = "tmaxi2", SVRTYPE = WEBSTD *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 query wbsession SVRNAME = wbsvrinit SVRNAME = wbquery 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" 8.4.3 사용예 위에제시한 apsl.m 에해당하는 Client 프로그램과그사용에대해서부록 [D. Tmax 와의연동 ] 을참조한다. 8.5 Logging 설정 WebtoB 는 Web 서비스에대한요청과그에대한제공등자신과관련된기록을모두환경파일에지정된 Log File 에저장한다. 따라서 TmaxSoft 73
WebtoB 관리자안내서 WebtoB Log File 을읽어보면누가언제무엇을요청했고또무엇을가져갔는지알수있으며 Web Server 에얼마나많은사람이왔는지가장많이보는페이지는무엇인지등을알수있다. 이러한 Log File 은위에서말한대로환경파일에명시된곳에저장되며이는 Web Server 를운영할때임의의위치에저장이가능하다. 또한 WebtoB 는한개가아닌여러개의 Log File 을생성하는데, 이는기본적인 Access Log File 과 Error 에관련된 Error Log File 등으로나누어진다. 단, Log 를남기는과정에서시스템에약간의부하가발생한다. 이는 System 에관련된것과 Capacity 에관련된것이다. 먼저 System 에관련된것은다음과같다. WebtoB 가 Log 를남기는과정에서 Disk 에 Writing 을해야하기때문에 Log 를남기지않는것에비해속도가약간느려지게된다. WebtoB 에선내부적으로효율적인방법을이용하지만, 한계가있는관계로약간의속도저하는발생할수있다. 두번째로 Capacity 에대한내용으로 Log 를남기는공간에대한것이다. 접속자가적은곳에서는 Log File 이얼마남지않겠지만사용자가아주많은곳에서는하루에 Log 가몇백 Mbytes 에서수 Gbyte 에이르는 Log 를남기게된다. 이는 System 에적당한공간이남아있지않다면불가능하기때문에이에대한관리가중요하다. 그러나이들정보들은 Web Server 를관리하는사람에겐아주중요하다. 자신이운영하는 Web Server 에들어온사람들의정보를바탕으로좀더효율적인 Web 서비스를구현할수도있고 Shopping Mall 등을운영하는사람들에겐고객들의정보를알수있는아주귀중한자료이다. 따라서 WebtoB 를이용하는운영자들은거의 Log File 을특정위치에저장할것이다. 그러면이제 WebtoB 에서남길수있는 Log File 에대해서알아보자. WebtoB 에서는기본적으로두가지 Log File 을남길수있다. 사용자의접속및관련자료접속기록을위한 Access Log File 과시스템에혹시발생할수있는 error 를기록하는 Error Log File 이있으며각 Log File 을기록하는데있어서우선순위가존재한다. 이에대한설명은다음과같다. 8.5.1 Access Log File Access Log File 은 Transfer Log File 이라고도한다. 일반적인사항을모두기록하며, 접속자가들어와서 Web Server 에서한행동을그대로보여줄수있다. 그러므로이정보는차후에도많은이용가치가있기 74 TmaxSoft
WebtoB WebtoB 관리자안내서 때문에아주중요하다. WebtoB 의 NODE, SVRGROUP, VHOST 등에모두설정이가능하다. 각절에모두설정했을경우접속자의접속서비스를요청에따라그우선순위가 SVRGROUP, VHOST, NODE 순서로존재하며가장우선순위가높은절에해당하는 Log File 에그내용이기록된다. 8.5.2 Error Log File Error Log File 은 Web Server 에서발생하는모든에러와접속실패에대하여에러가발생한시간과에러의내용을기록한다. 이는 System 에서발생할수있는 error 에대한기록이기때문에 Web Server 에문제가생긴경우문제해결에큰도움이될수있는정보를제공하게된다. 따라서 Critical 한업무를수행하는경우에는이를저장하여 System 에문제가생길경우이를통하여문제해결을쉽게할수있다. Error Log File 은 NODE 에서설정가능하다. 8.5.3 WebtoB Log File Format 현재 WebtoB 는 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 들이이것을기본항목으로하여이용하고있다. WebtoB 에서는이를 DEFAULT 라는항목으로설정하여기본적인것으로지정하여쓰고있다. 이에대해 W3C 에서규정하는 CLF 의형식은설명은다음과같다. 8.5.4 Common Log File 포맷 remotehost rfc931 authuser [date] "request" status bytes 각항목은다음과같다. remotehost 리모트호스트명 ( 만약 DNS 호스명을사용할수없거나 DNSLookup 이 off 이면 IP 주소 ) 참고 TmaxSoft 75
WebtoB 관리자안내서 WebtoB : http://www.w3.org/daemon/user/config/general.html- DNSLookup rfc931 사용자의리모트로그명 authuser [date] 인증된사용자의사용자명 요청한날짜와시간 "request" status bytes 클라이언트가요청한내용 클라이언트로응답한 HTTP 상태코드 참고 : http://www.w3.org/protocols 전송한문서의컨텐츠길이 위와같은각각의정보를저장하여 WebtoB 환경파일에지정된 Log File 로위들의정보를기록하게되는것이다. 이를 WebtoB 에서저장하여기록한예는다음과같은형태의 Log 이다. 143.248.148.42 - - [13/Feb/2001:16:46:13 +0900] "GET / HTTP/1.1" 304-143.248.148.42 - - [13/Feb/2001:16:46:14 +0900] "GET /index_pb.gif HTTP/1.1" 304-143.248.148.42 - - [13/Feb/2001:16:46:18 +0900] "GET /index.html HTTP/1.1" 200 7118 143.248.148.42 - - [13/Feb/2001:16:46:18 +0900] "GET /usage.png HTTP/1.1" 304-143.248.148.42 - - [13/Feb/2001:16:46:37 +0900] "GET /usage_200102.html HTTP/1.1" 404 148 143.248.148.42 - - [13/Feb/2001:16:47:21 +0900] "GET /index.html HTTP/1.1" 304-143.248.148.42 - - [13/Feb/2001:16:47:21 +0900] "GET /usage.png HTTP/1.1" 200 2509 143.248.148.42 - - [13/Feb/2001:16:47:24 +0900] "GET /usage_200102.html HTTP/1.1" 404 148 143.248.148.42 - - [13/Feb/2001:16:47:55 +0900] "GET /index.html HTTP/1.1" 304-143.248.148.42 - - [13/Feb/2001:16:47:55 +0900] "GET /usage.png HTTP/1.1" 304-76 TmaxSoft
WebtoB WebtoB 관리자안내서 143.248.148.42 - - [13/Feb/2001:16:47:57 +0900] "GET /usage_200102.html HTTP/1.1" 200 30798 위의 Log 내용에서맨앞의것은접속한사용자의 IP Address 를나타낸것이고, 뒤의 hyphen 들은각각 rfc931 과 AuthUser 를기록하여야할곳이다. 그러나, 사용자가이에관련된정보가없기때문에이를 hyphen 으로기록한것이다. 그리고뒤에있는 [ ] 안에있는정보가사용자가접속한시간을나타낸것이고, 뒤이어등장하는 안의정보는사용자가요구한 Request URL 이고뒤의숫자는그에해당하는 Response Status Code 이다. 그리고마지막으로나타나는숫자는사용자에게 Server 가전달한 Byte 수이다. WebtoB 의환경파일에서위와같은 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 라는것으로설정이되어있음을볼수있다. TmaxSoft 77
WebtoB 관리자안내서 WebtoB WebtoB 에서 Log Format 을정하는곳은 LOGGING 절이다. 이곳에서 FORMAT 이라는항목으로이를정할수있다. WebtoB 에서사용자의 편의를돕기위해미리정의된 DEFAULT, ERROR 두가지포맷을 제공한다. 위의예에서보면, Access Log 는 DEFAULT 로설정되어 있고, Error Log 는 ERROR 라는항목으로설정되어있다. 이중 Access Log 의 DEFAULT 는위에서말한 CLF Format 을그대로준수하고있다. 또한, ERROR 항목은 WebtoB 에서 Error 를보기편하게정리한 Format 을가지고있다. 그리고위와같은정해진형식이외에도사용자가원하는형태의정보를얻기쉽도록특정 Field 를추가하였다. 이는마치 C Language 의 printf() 함수를연상하면쉽게이해할수있다. printf 함수는내부에서 %d %l %s %c 등등으로설정된값으로변수의값을출력하게된다. WebtoB 에서도이와유사한기능을제공한다. 단, 내부적으로결정된출력값은 C Language 에서제공하는것과다르기때문에주의가필요하다. %d 옵션과함께 {} 안에 strftime 함수에서제공하는날짜및시간의여러가지형식을지정할수있다. 이에대한것은아래와같다. %a : remote 의 IP 주소 %u : 인증이된요청을하는사용자 %t : 요청의날짜와시간 %T : 서버가요청을처리하는데걸린시간 ( 초 ) %D : 서버가요청을처리하는데걸린시간 (msec) %r : HTTP 메소드를포함한요청의첫번째줄 %H : Request Protocol (ex, HTTP/1.1) %m : Request Method (ex, GET) %q : Request Query (ex,?id=webtob) %U : 요청한 URL %s : HTTP 상태코드 %b : 전송된파일의크기 78 TmaxSoft
WebtoB WebtoB 관리자안내서 %{Header}i : 클라이언트요청 HTTP 헤더예 ) %{Cookie}i %v : HostName 필드에서정의된서버명 %p : 클라이언트요청을받는 TCP 포트번호 %d : date type 을지정 이들을이용하여다음과같은형태의 Format 을만들어낼수있다. log1 Log2 Format = "%h %l %u %t \"%r\" %>s %b", FileName = "$WEBTOBDIR/log/custom1.log" Format = "[%{%Y.%m.%d %H:%M:%S}d] %a \"%r\" %s %T", FileName = $WEBTOBDIR/log/custom2.log TmaxSoft 79
WebtoB 관리자안내서 WebtoB 9 WebtoB 관리 9.1 소개 WebtoB 시스템이동작하고있다면시스템의관리가필요하다. 예를들어, WebtoB 시스템의종료및기동의절차를거치지않고도현재환경설정에대한정보를확인해보고이를동적으로변경할필요가있다. 또한제공되는서비스들중특정서비스에대하여현재처리상태즉, 몇건의서비스를처리해왔으며, 평균처리시간이얼마나되며, 몇건의요청이대기하고있는지등의정보를확인할필요가있다. 이정보에따라그서비스를제공하는 Server Process 를더기동시켜준다든지아니면필요이상의 Server Process 가동작중일경우몇개는종료시키는등의조치도필요하다. 이러한동적인시스템관리를위하여 WebtoB 시스템에서는관리프로그램을제공한다. 9.2 wsadmin 소개 WebtoB 시스템을관리하기위해서 wsadmin 이라는프로그램이제공된다. wsadmin 프로그램은 UNIX 환경의 shell 과비슷한 Command Interpreter 이다. 즉, 항상프롬프트상태로대기중이다가입력되는명령어를해석하여이를실행하게된다. 여러 Node 를한 Domain 으로사용하는경우 wsadmin 으로전체를중앙관리가가능하며각 Node 별로로컬에서만도관리가가능하다. 명령어옵션내용 wsadmin -l 자신의 Node 만로컬관리 80 TmaxSoft
WebtoB WebtoB 관리자안내서 명령어 옵션 wsadmin : WebtoB 시스템을관리하기위한프로그램. -l : wsracd 를통하여여러 Node 로구성된시스템을중앙에서집중관리할경우에특별히지정된 Node 만을관리하기위해서사용하는옵션이다. 9.2.1 wsadmin 을이용한시스템관리 wsadmin 툴에서는아래의명령어들을통하여 WebtoB 시스템을기동시키거나종료시킬수있으며, 현재동작중인시스템의환경설정내용을조회및수정할수있다. 또한각 Server 프로세스의상태와서비스의처리상태등을확인할수있다. wsadmin 프로그램은다음과같이실행한다. $ wsadmin 이후아래와같은메시지와함께프롬프트 (prompt) 가나타난다. 이것이 wsadmin 프로그램실행상태임을나타낸다. --- Welcome to WebtoB Admin (Type "quit" to leave) --- $$1 tmaxh4 (wsadm) 또한 WebtoB 버전 3.1.6 부터는 wsadmin 을 Command 모드에서도 사용할수있는기능이추가되었다. $ wsadmin C cmd[;cmd];quit; 실행예 ) $ wsadmin C st v;quit $ wsadmin C st v; st p; quit wsadmin 에서사용가능한명령어들은다음과같다. TmaxSoft 81
WebtoB 관리자안내서 WebtoB 명령어내용 cacherefresh (cr) 캐시정보초기화 cliinfo (ci) 접속웹브라우저확인 clilisten (cl) 클라이언트접속제어 config (cfg) 환경설정내용조회 discon (ds) 접속중인웹브라우저를강제로해제 history (hist) 최근수행한 50 개명령조회 help (h) 도움말 logend (loge) logging 종료 logstart (logs) logging 시작 logsync 버퍼에있는 log 를파일에저장 nodeset (ns) 멀티노드환경에서특정노드에대한정보를얻고자할때설정 nodeunset (nus) 멀티노드환경에서특정노드에대한정보를얻고자 set 한것을해제 qpurge (qp) 큐에적체된요청삭제 rebootsvr (rbs) Server 프로그램교체 repeat (r) 명령어반복 restat 특정서버프로세스혹은모든프로세스의통게정보리셋 82 TmaxSoft
WebtoB WebtoB 관리자안내서 resume (rs) 중지된 Server Process 재개 set 현재설정된환경값을동적으로변경 stat (st) Process 및 Service 상태통계 suspend (sp) 동작중인 Server Process 중지 svrinfo (si) Server 정보확인 webtobinfo (wi) WebtoB 시스템정보확인 wsboot wsdown WebtoB boot WebtoB down quit (q) wsadmin 종료! 직전명령어반복 wsadmin 툴에서는이러한명령어들을통하여현재동작중인시스템의환경설정내용을조회및수정할수있다. 또한각 Server Process 의상태와서비스의처리상태등을확인할수있다. wsadmin 툴에서사용할수있는명령어들의도움말을보고자할때는 help < 명령어 > 명령이사용된다. $$1 tmaxh4 (wsadm): help 명령어 wsadmin 툴을끝내기위해서는 quit(q) 명령이사용된다. $$1 tmaxh4 (wsadm): quit 9.3 각종정보출력 wsadmin 프로그램의명령어들은용도에따라크게다음과같이나눌수있다. 각종정보출력 TmaxSoft 83
WebtoB 관리자안내서 WebtoB wi, ci, si, history,!, config, stat 동작관리 suspend, resume, qp (queue purge), stat (repeat mode), rbs (reboot server), set, logstart, logend 각명령어의자세한내용을알아보기로한다. 9.3.1 환경정보 wi 현재접속된 WebtoB 시스템의환경정보를알려준다. 시스템버전 (version), 사용만료기한정보 ( 데모버전사용시 ) 등을확인할수있다. WebtoB System Info: REAL version 4.1: expiration date = 0/0/0 maxuser = UNLIMITED, node_count = 1, svgrpcount = 4, svr_count = 4, svc_alloc_count = 512 cousin_groupcount = 0, cousin_elemcount = 0 backup_groupcount = 0, backup_elemcount = 0 ci WebtoB All Node Info: node_count = 1: --------------------------------------------------------- no name nodeport racport shmkey shmsize hth --------------------------------------------------------- 0 tmaxh4 7777 3333 59000 22716 1 현재접속된 Web Browser 의환경정보를알려준다. 현재상태 (status), 접속 IP Address, 처리건수 (count) 와같은웹브라우저의제반정보를확인할수있다. WebtoB 버전 3.1.6 부터는 Virtual Host 별로 Client 정보를표시할수있는옵션과특정 Handler 의 Client 정보를표시하는옵션이추가되었다. 84 TmaxSoft
WebtoB WebtoB 관리자안내서 기능옵션인자 Virtual Host 별 Client 정보표시 -vh <vhostname> -s -S 특정 Handler(HTH) Client 정보표시 -h <hth 번호 > -s -S s : summary, -S : detail summary $$8 tmaxh4 (wsadm): ci HTH 0: ------------------------------------------------------------------------ no status count idle local_ipaddr:port remote_ipaddr:port spri user ------------------------------------------------------------------------ 0 RDY 2 4 192.168.1.43:8080 192.168.1.96:2501-1 ------------------------------------------------------------------------ HTH RDY QED RUN ETC total 0 1 0 0 0 1 ------------------------------------------------------------------------ ------------------------------------------------------------------------ HTH RDY QED RUN ETC total ------------------------------------------------------------------------ 0 1 0 0 0 1 ------------------------------------------------------------------------ Total 1 0 0 0 1 ------------------------------------------------------------------------ $$69 tmaxh4 (wsadm): ci -vh vhost1 *VHOST vhost1: 192.168.1.43 ------------------------------------------------------------------------ HTH 0: RDY ------------------------------------------------------------------------ no status count idle local_ipaddr:port remote_ipaddr:port spri user ------------------------------------------------------------------------ 5 RDY 2 8 192.168.1.43:38888 192.168.1.96:1599-1 TmaxSoft 85
WebtoB 관리자안내서 WebtoB ------------------------------------------------------------------------ HTH RDY QED RUN ETC total 0 1 0 0 0 1 ------------------------------------------------------------------------ ------------------------------------------------------------------------ HTH RDY QED RUN ETC total ------------------------------------------------------------------------ 0 1 0 0 0 1 ------------------------------------------------------------------------ Total 1 0 0 0 1 ------------------------------------------------------------------------ $$73 tmaxh4 (wsadm): ci -h 0 si HTH 0: RDY ------------------------------------------------------------------------ no status count idle local_ipaddr:port remote_ipaddr:port spri user ------------------------------------------------------------------------ 8 RDY 2 4 192.168.1.43:8080 192.168.1.96:1607-1 ------------------------------------------------------------------------ HTH RDY QED RUN ETC total 1 1 0 0 0 1 ------------------------------------------------------------------------ ------------------------------------------------------------------------ HTH RDY QED RUN ETC total ------------------------------------------------------------------------ 0 0 0 0 0 0 1 1 0 0 0 1 ------------------------------------------------------------------------ Total 1 0 0 0 1 ------------------------------------------------------------------------ 현재동작중인각 Server 의정보를알려준다. 즉, 현재상태 (status, RDY: 서비스가능, NRDY: 서비스불능 ), 처리건수 (count), 큐잉건수 (qcount), 큐에서삭제된건수 (qpcount), 최대큐잉건수 (maxqcount) 를초과하여반환된건수 (emcount) 등을확인할수있다. $$9 tmaxh4 (wsadm): si ------------------------------------------------------------------------ hth svrname (svri) status count cqcnt aqcnt qpcnt emcnt rscnt rbcnt 86 TmaxSoft
WebtoB WebtoB 관리자안내서 ------------------------------------------------------------------------ history 0 html ( 0) RDY 1 0 0 0 0 0 0 0 cgi ( 1) RDY 0 0 0 0 0 0 0 0 ssi ( 2) RDY 0 0 0 0 0 0 0 0 php ( 3) RDY 0 0 0 0 0 0 0 shell 에서와같이명령어를기억함으로써편리하게사용할수있다.! $$15 tmaxh4 (wsadm): history 4: si 3: ci 2: st -p 1: st -s 0: ci 직전명령어를반복하며 history 수도있다. 에서출력된번호를사용할 $$21 tmaxh4 (wsadm):!4 si ------------------------------------------------------------------------ hth svrname (svri) status count cqcnt aqcnt qpcnt emcnt rscnt rbcnt ------------------------------------------------------------------------ 0 html ( 0) RDY 1 0 0 0 0 0 0 0 cgi ( 1) RDY 0 0 0 0 0 0 0 0 ssi ( 2) RDY 0 0 0 0 0 0 0 0 php ( 3) RDY 0 0 0 0 0 0 0 $$21 tmaxh4 (wsadm):!4 ------------------------------------------------------------------------ hth svrname (svri) status count cqcnt aqcnt qpcnt emcnt rscnt rbcnt ------------------------------------------------------------------------ 0 html ( 0) RDY 1 0 0 0 0 0 0 0 cgi ( 1) RDY 0 0 0 0 0 0 0 0 ssi ( 2) RDY 0 0 0 0 0 0 0 0 php ( 3) RDY 0 0 0 0 0 0 0 config (cfg) TmaxSoft 87
WebtoB 관리자안내서 WebtoB 현재동작중인시스템의환경정보를알려준다. 즉, 환경파일에서정의된 Domain, Node, Server Group, Server, Service 별로 default 값까지포함한모든환경정보를확인할수있다. config 명령어에는다음과같은옵션이있다. 옵션내용 -d Domain -n [Node 이름 ] Node -vh [Virtual Host 이름 ] Virtual Host -g [Server Group 이름 ] Server Group -v [Server 이름 ] Server -s [Service 이름 ] Service -r [Routing 이름 ] Routing -b [Backup 이름 ] Backup -cs [Cousin 이름 ] Cousin -dir [Directory 이름 ] Directory -u [Uri 이름 ] URI -a [Alias 이름 ] Alias -l [Logging 이름 ] Logging -e [EXT 이름 ] EXT -ssl [SSL 이름 ] SSL 88 TmaxSoft
WebtoB WebtoB 관리자안내서 -tcpgw [Tcpgw 이름 ] TCPGW 9.3.2 Domain 에대한환경정보 Domain 에대한환경정보를확인하기위해서는 -d 옵션을사용한다. $$4 tmaxh4 (wsadm): cfg -d DOMAIN: Name = webtob1, NLiveInq(ni) = 30, NHthChkTime = 0, DomainId = 0, MaxSvc = 512, NodeCPC = 1 9.3.3 Node 에대한환경정보 Node 에대한환경정보를확인하기위해서는 -n 옵션이사용된다. Node 이름을지정하면그 Node 에대한정보만을 Node 이름을지정하지않으면모든 Node 에대한정보를출력한다. 이를이용하면환경파일의 NODE 절과관련된모든항목내용정보를확인할수있다. $$2 tmaxh4 (wsadm): cfg -n NODE(0): Name = tmaxh4, HostName = "tmaxh4", DocRoot = "/data/wbqam/webtob/docs/", SvrRoot = "/data/wbqam/webtob/", Method = "GET, POST, HEAD, OPTIONS", ShmKey = 59515, Hth = 1, HthQTimeout(hqt) = 0, NodePort = 7777, Port = "8080", JsvPort = 9595, RacPort = 4455, SslFlag = N, TmaxSoft 89
WebtoB 관리자안내서 WebtoB TimeOut(to) = 300, CacheEntry(ce) = 128, CacheSize(cs) = 128, # (KByte), CacheRefreshImage = 0, # NO_REFRESH, CacheRefreshHtml = 0, # NO_REFRESH, CacheRefreshDir = 0, # NO_REFRESH, KeepAlive = Y, KeepAliveTimeout(kto) = 60, KeepAliveMax(km) = 0, MaxUser = 8133, WebtobDir = "/data/wbqam/webtob/", PathDir = "/data/wbqam/webtob/path/", SysLogDir = "/data/wbqam/webtob/log/syslog/", UsrLogDir = "/data/wbqam/webtob/log/usrlog/", IndexName = "index.html", Options = "HTML, CGI, SSI, PHP, JSV, USER", ErrorDocument = "", LanguagePrio = "", Logging = "log1", ErrorLog = "log2", Filter = "", NodeType = STD, Ip = "", #(default): INADDR_NONE, IpcPerm = 0700, #ListenBacklog = 511, #(default), SendBufferSize = 16384, #(default), DefaultMimetype = "text/html", Expires = "", LimitRequestBody(lrb) = 0, LimitRequestFields(lrf) = 100, LimitRequestFieldSize(lrs) = 8190, LimitRequestLine(lrl) = 8190, ServerTokens = "Minimal", ServiceOrder = "uri,ext", IPCBasePort = 0, #(0: disable), TcpGW = "", DefaultCharset = "Off" 90 TmaxSoft
WebtoB WebtoB 관리자안내서 9.3.4 Server Group 에대한환경정보 Server Group 에대한환경정보를확인하기위해서는 -g 옵션이사용된다. Server Group 이름을지정하면그 Server Group 에대한정보만을출력하며, 이름을지정하지않으면모든 Server Group 에대한정보를출력한다. 이를이용하면 Server Group 별로각 Server Group 에대하여환경파일의 SVRGROUP 절과관련된항목내용을확인할수있다. $$1 tmaxh4 (wsadm): cfg -g htmlg SVRGROUP(0): Name = htmlg, NodeName = tmaxh4, SvrType = HTML 9.3.5 Server 에대한환경정보 Server 에대한환경정보를확인하기위해서는 -v 옵션이사용된다. Server 이름을지정하면그 Server 에대한정보만을, 이름을지정하지않으면모든 Server 에대한정보를출력한다. 이를이용하면 Server 별로각 Server 에대하여환경파일의 SERVER 절과관련된항목정보를확인할수있다. $$3 tmaxh4 (wsadm): cfg -v html SERVER(0): Name = html, SvgName = htmlg, MinProc = 2, MaxProc = 10, MaxQCount(mq) = 0, ASQCount(aq) = 0, FlowControl(fc) = 50, MaxRestart(mr) = 10, SvrCPC = 1, SvrType = HTML, HttpOutbufSize(obs) = 4096, HttpInbufSize(ibs) = 8192, MaxRequests(mrq) = 0, SvrChkTime(sct) = 0, Schedule(sch) = RR, # (0) # (Bytes) # (Bytes) TmaxSoft 91
WebtoB 관리자안내서 WebtoB # (toggle) 0: Reset, 1: Cache, 2: -Cache, 3: BlockListen, 4: ImageCompress Options(opt) = "Cache" 9.3.6 동작상태정보 stat(st) 실질적인시스템동작상태를나타내며, 동작중인 Server Process 와 Service 에대한정보를알수있다. 즉 Server Process 의현재상태처리중인 Service 이름, 처리한 Service 개수, Service 에대한상태, Service 큐에존재하는 Service 요청개수등과같은동적인정보를확인할수있다. stat 명령어의약어는 st 이며, 다음과같은옵션들이제공된다. 옵션내용 -p [Server 프로세스이름 ] Server 프로세스별상태 -v [Server 이름 ] Server 별상태 -s [Service 이름 ] Service 별상태 -n <Line 수 > n 라인만큼디스플레이 9.3.6.1 Server Process 에대한정보 WebtoB 시스템에서동작하는개별적인 Server Process 에대한정보를알수있다. WebtoB 환경파일에등록된 Server 는 MIN 과 MAX 항목을사용하여여러개의동작할수있는데, 이들각각의동작상황을확인할수있다. 즉각 Server 별 Process 의 id(spr_no), 현재상태 (RDY, NRDY, RUN, BRUN), 처리한서비스개수 (count), 평균처리시간 (avg), 처리중인 Service 이름 (svc) 등이출력된다. 92 TmaxSoft
WebtoB WebtoB 관리자안내서 -p 옵션을사용하여 Server 이름을지정하면해당 Server 이름의 Server Process 들에관한정보들이출력되고이름을지정하지않으면동작중인모든 Server Process 들에대한정보가출력된다. $$11 tmaxh4 (wsadm): st -p HTH 0(1097960): RDY --------------------------------------------------------------------------- svr_name svgname spr_no(pid) status count avg(rt) clid svc --------------------------------------------------------------------------- html htmlg 0(1065010) RDY 0 0.0000( 0) -1 - html htmlg 1(1056814) RDY 0 0.0000( 0) -1 - cgi cgig 10(901310) RDY 0 0.0000( 0) -1 - cgi cgig 11(888886) RDY 0 0.0000( 0) -1 - cgi cgig 12(631018) RDY 0 0.0000( 0) -1 - cgi cgig 13(549112) RDY 0 0.0000( 0) -1 - ssi ssig 20(475200) RDY 0 0.0000( 0) -1 - ssi ssig 21(471100) RDY 0 0.0000( 0) -1 - [ 참고 ] WebtoB 버전이 3.1.6 이상이고 Servlet Container 가 3.1.20-1 이상인경우, st p 결과에서 Jsvengine name 과 Thread id 를표시할수있는기능이추가되었다. 9.4 운용관리 9.4.1 Server Process 중지및재개 suspend 응용 Server 프로그램오류등으로더이상의업무처리가불가능하여이를해결하기위해동작중인 Server Process 를중지시킬필요가발생할수있다. 이와같이원인을알수없는문제로인하여 Service 처리를중지시키고추가적인작업을필요로하는경우에유용하게사용할수있는기능이다. 중지된 Server Process 는현재처리중인 Service 를정상완료한후더이상의동작은중지하고, 큐에있는서비스들은대기상태가된다. 이때계속적으로요청되는 Service 들은모두큐에적체된다. TmaxSoft 93
WebtoB 관리자안내서 WebtoB Suspend 명령어에는다음과같은옵션들이제공된다. 옵션내용 -v <Server Process 이름 > Server resume 동작중지된 Server Process 의활동을재개시킨다. 활동이재개된 Server Process 는큐에대기중이던 Service 를처리하기시작하며요청되는 Service 에대해처리가능상태가된다. resume 명령어에는다음과같은옵션들이제공된다. 옵션내용 -v <Server Process 이름 > Server 9.4.2 적체해소 qp(queue Purge) 업무의폭주현상이발생하여정상적으로거래를처리하지못하는경우, 현재큐에적체되어있는서비스요청을삭제하므로써원활한업무수행을유도하는기능이다. WebtoB 에서는 Server Process 별로큐를관리함으로써관리자는특정 Server 별로큐를삭제할수있다. 따라서특정업무별로처리가가능하며이는타업무의효과적인수행에도도움을줄수있다. $$1 tmaxh4 (wsadm): qp v sdlsel qp 는 Server 단위로가능하며다음과같은옵션들이제공된다. 옵션내용 94 TmaxSoft
WebtoB WebtoB 관리자안내서 -v [Server Process 이름 ] Server qp 를통해삭제된서비스는 Web Browser 에게에러를반환하게되고 Web Browser 에서는 503 Service Temporarily Unavailable 이라는에러를화면에나타낸다. 따라서사용자는이에맞게적절한대처를할수있다. 9.4.3 상태정보반복표시기능 r (Repeat Mode) 현재정보를일정한시간간격을두고계속모니터링하고자하는경우에사용하는기능으로서명령어는다음과같다. $$1 tmaxh4 (wsadm): r -i 5 -k 30 st -s $$1 tmaxh4 (wsadm): r -i 5 -k 30 st -p 첫번째명령어는 5 초간의간격을두고 st s 를 30 번수행하라는의미이며두번째명령어는 5 초간의간격을두고 st p 를 30 번수행하라는의미이다. 반복적인명령어수행은상태정보를모니터링할뿐아니라업무수행에대한디버깅에도많은도움을줄수있다. - i 다음에 Interval 을설정하지않으면 0 초로동작한다. 여러 Node 가한 Domain 으로설정된경우또는다수의 Service 와 Server Process 가존재하는경우, 한번에상태정보를관리하기란쉽지않다. 따라서로컬에있는 Service 와 Server Process 만을보기위한 - l 옵션을제공하며 -n 으로적절한라인을설정할수도있다. $$1 tmaxh4 (wsadm): st -s -l -n 24 $$1 tmaxh4 (wsadm): st -p -l -n 24 9.4.4 환경설정값동적변경 set 현재설정되어있는환경파일의설정값을동적으로변경할수있는명령어로서사용법은다음과같다. 변경가능항목은 wsadmin 에서 cfg 명령어를통해서확인할수있다. 각항목중에서괄호로서약어를표시한항목이동적으로변경가능한항목이다. TmaxSoft 95
WebtoB 관리자안내서 WebtoB ( 동적설정변경가능항목의예 ) Option Item Value -n to TimeOut ce cs kto km lrb lrf lrs lsl CacheEntry CacheSize KeepAliveTimeout KeepAliveMax LimitRequestBody LimitRequestFields LimitRequestFieldSize LimitRequestLine -vh kto KeepAliveTimeout km to KeepAliveMax TimeOut -g ld load -v mq max qcount aq fc mr as qcount flowcontrol max restart 96 TmaxSoft
WebtoB WebtoB 관리자안내서 obs ibs mrq sct sch 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 $$ set n[vh,g,v,s,tcpgw] Item Value Domain 명 [Node 명,Vhost 명, ServerGroup 명,Server 명,Service 명, tcpgw 명 ] $$1 tmaxh4 (wsadm): set n webmain to 100 $$1 tmaxh4 (wsadm): set vh vhost1 to 100 $$1 tmaxh4 (wsadm): set g svg1 ld 5 $$1 tmaxh4 (wsadm): set v kfdl1 mq 1000 $$1 tmaxh4 (wsadm): set v MyGroup opt 2 $$1 tmaxh4 (wsadm): set s SYNC pr 100 $$1 tmaxh4 (wsadm): set tcpgw tcpgw1 cto 30 TmaxSoft 97
WebtoB 관리자안내서 WebtoB 9.4.5 웹브라우저연결해제 ds(disconnect Session) 현재접속되어있거나아무일도수행하지않는 Web Browser 를강제로연결해제할수있다. Web Browser 정보를얻을수있는 ci 명령어로확인후사용한다. 옵션내용 -h <HTH 번호 > 연결을끊고자하는 HTH 를설정 -i <idle time> 지정된시간 ( 초 ) 이상경과된웹브라우저 -c <Client ID> 웹브라우저에부여된 ID 번호 -f 즉시연결해제 -a 해당 HTH 에연결된웹브라우저접속해제 $$ ds [-h HTHno] -a -n -i xx -c clid [-f] $$ ds -h0 -a $$ ds -c 1 $$ ds -i 15 -f $$ ds -h2 -a f 9.4.6 Server Process 변경 rbs(reboot Server Process) 현재사용중인 Server Process 를새로운 Process 로변경하고자하는경우에사용한다. WEBTOB_BKAPPDIR 를환경변수에지정하고새로운프로그램을지정된 Directory 에옮기고다음의명령어를수행한다. $$1 tmaxh4 (wsadm): rbs new_file old_file new_file : 변경된파일 (object file) 98 TmaxSoft
WebtoB WebtoB 관리자안내서 old_file : 현재실행중인파일 (object file) 9.4.7 Logging 관리 logstart filename logend 관리자는 Administration Tool 을사용하여여러가지실시간정보를살펴볼수있다. 따라서주어진상황에맞는즉각적이고효과적인조치를취할수있다. 또한 Administration Tool 에서는통계적정보분석을위해 Administration Tool 정보데이터를로그로남길수있다. Logging 파일은현재 Directory 에만들어진다. 따라서 Windows 의경우에는항상 wsadmin 이실행되는 WEBTOBDIR/bin 에생성된다. 로그데이터를통해업무폭주시간, 불필요한 Server Process, 큐잉상태등을확인하여전반적인시스템분석이가능하다. 명령어사용은다음과같다. $$1 tmaxh4 (wsadm): logstart filename $$1 tmaxh4 (wsadm): logend logstart 명령어를통해서 log 처리를시작할수있으며 logend 명령어를통해끝낸다. logend 명령을사용하지않고 wsadmin 을종료하는경우에는, logstart 명령어로지정한파일에 log 기록을남긴후종료하도록되어있으나, 특정시스템에경우에는기록되지않는경우도있으므로, 반드시 logend 명령어를사용하여종료할것을권장한다. TmaxSoft 99
WebtoB 관리자안내서 WebtoB 10 WebtoB 튜닝 10.1 소개 WebtoB 는상업용 Web Server 로, 대규모의전문적인웹서비스의운영을위해개발되었다. 전문가를위한서버인만큼사용자에대한자유도가높고각자의환경에맞는최적의미세조정을제공한다. 바꾸어말하면, Web Server 운영자가각자의환경에맞게서버를 Tuning 하여사용하게되면엄청난효율과성능을얻을수있다는것이다. WebtoB 의이러한특징을적절히활용하여쓸수있도록본장에서는 Tuning 에있어가장중요한항목들과그적용사례를살펴보도록하자. 10.2 HTH 설정 앞에서설명한바와같이 WebtoB 는특정프로세스에서일반브라우저에관련된연결을모두관리하고있다. 이러한구조는하나의프로세스에서모든처리를도맡아하여빠르게작업을할수있는장점이있으나프로세스의안정성에의해시스템의성능이크게좌우되므로주의하여야할필요가있다. 앞서설정에서등장한 HTH 란프로세스가바로이런역할을한다. 그러나많은적용사례와수많은 Rush Test 를거치고개량하여프로세스의안정성면에서는걱정할문제가전혀없다고해도과언이아니다. 단, 이프로세스의관리가성능에영향을줄수있으므로이를적당히조절할필요가있다. 그럼 WebtoB 에서는어떤식으로이를설정해주어야할까? 우선대표적인 UNIX 의운영체제인 Solaris 7 의예를들어설명하여보겠다. Solaris 7 은현재많은 SUN Server 사용자들이이용하는운영체제로국내에서도많은사용자를보유하고있다. 또한일반 UNIX 사용자들이가장많이사용하는대표적인운영체제이기도하다. WebtoB 에서는 HTH 프로세스를통해서사용자의연결을관리한다고설명하였다. 즉, HTH 프로세스에모든사용자의연결이맺어지는 100 TmaxSoft
WebtoB WebtoB 관리자안내서 형식이다. 이때한가지질문을던질수있을것이다. HTH 프로세스하나에몇개정도의연결을맺는것이좋은가? 이와같은질문에대한답은사람들이이용하는운영체제마다다르게될것이다. 이는각운영체제마다 Process 하나가열수있는연결의수를제한하고있기때문이다. 이제우리가가정한 Solaris 7 의경우에대한답을해보자. 이 Solaris 7 이란운영체제는사용자에게아주많은권한을부여하였다. 과거 Solaris 6 이하의 Version 에서는하나의 Process 가최대 1024 개의연결만을열수있도록운영체제에서제한하였다. 그러나 Solaris 7 부터는이에대한제약이없어졌다. 이론상으로는 40 만개이상의동시연결이가능하도록하였다. 그러나이는어디까지나이론적인수치일뿐실제사이트에서는이를현실적인수치로제한할필요가있다. 과거 Solaris 6 의경우 1024 개가최대였기때문에동시사용자가 1000 명이넘는경우 HTH 프로세스의수를 2 개정도로늘려서처리하였다. 또한하나의프로세스에서너무많은처리를하면많은 CPU 점유를차지하게되고, 또프로세스의동작에무리를줄수있기때문에동시사용자가많은경우가급적적당한정도로분리하여실제사이트에서운영하여왔었다. 보통하나의 HTH 프로세스로 600 ~ 700 개정도의수를처리하도록하였다. 그러나만약많은서비스를추가로이용하는경우 HTH 프로세스의수를조금더늘리는것이좋다. 이러한정보는 WebtoB 환경파일을컴파일하면, 화면에 WebtoB 가자체적으로운영체제에게문의하여자신이받아들일수있는최대의동시사용자수를출력하여준다. 따라서운영자는동시사용자수의예측과이정보를바탕으로 HTH 프로세스의적당한수를예측하여야한다. WebtoB 설정파일에서 HTH 프로세스의수를설정하는방법은다음과같다. WebtoB 설정예제 *DOMAIN webtob1 *NODE webmain WEBTOBDIR= /usr/local/webtob, SHMKEY=69000, TmaxSoft 101
WebtoB 관리자안내서 WebtoB DOCROOT= /usr/local/webtob/docs, APPDIR= /usr/local/webtob/ap, PORT= 5469, HTH=2, IndexName= index.html, LOGGING= log1, ERRORLOG= log2 위와같이설정하면 WebtoB 가두개의 HTH 프로세스를기동하게된다. 따라서각각의 HTH 프로세스를이용하여사용자의접속을처리하게된다. 각각의 HTH 프로세스는각프로세스에걸리는 Load 에따라서적당히사용자의요구를분배하기때문에하나의 HTH Process 가특별히일을많이하는등의문제는발생하지않는다. 10.3 Server Process 설정 Apache 와같은 Web Server 는하나의 Process 에 HTML, CGI, SSI 등등의모든서비스처리루틴이포함되어있다. 따라서사용자가접속하는경우하나의 Process 에서모든처리가끝난다. 이는각사용자의요구순간마다 Process 가접속을연결받아처리하여, 결국사용자당담당 Process 가연결되는구조에서는필연적인것이다. 이런구조에서는하나의 Process 에서모든사용자의 Request 를처리할수있다는장점은있으나, 사용자가쓰지도않는기능들이의미없이설정되어있을수도있다. WebtoB 는이에대해필요한서비스들을분리시켜제공한다. 간단한예를든다면다음과같다. 10.3.1 예제 Sample 어느쇼핑몰사이트에서 100% 의사용자를기준으로 : 60% 가 HTML 이용자 20% 가 Servlet 이용자 10% 가 CGI 이용자 10% 가 SSI 이용자라는가정을세우자. 102 TmaxSoft
WebtoB WebtoB 관리자안내서 대부분의경우하나혹은두개정도의서비스에사람이몰리는경우가일반적이다. Apache 의경우운영자는 100 개의 Process 를설정하여서비스할것이다. 이는사용자가동시에 100 명정도가들어오는경우반드시필요한수치이다. 하지만이때위와같은사용자분포도를보인다면, 100 개의 Process 에서 60 개는거의 HTML 만을서비스하고 20 개는 Servlet 을서비스하고, 10 개가 CGI 를서비스하고 10 개가 SSI 를서비스를하게된다. 이때각각의 Process 에포함된다른기능들은의미없이 Memory 만차지하고있다는결론이된다. 게다가사용자가 HTML 만을반복적으로이용하는경우, 이런현상은더더욱두드러지게나타난다. 이는결국 Memory 를효율적으로운영할수없다. 이런경우에 WebtoB 는위와같은문제를어떻게해결하는가? WebtoB 에서는각각의 HTML, CGI, SSI 등의서비스들이별도의독립적인 Process 로설정된다. 결국하나의 Process 에서모든처리를하는것이아니라, 각각의서비스를처리하는것을분리하여별도로각각의수치를조정할수있게하였다. 따라서위와같은경우운영자가 HTML 을사용자가많이사용한다는것을알게된다면, HTML 을처리하는 Process 들을많이설정하면된다. 그리고다른 Process 들은적게설정하여불필요한 Memory 의낭비를막을수있다. WebtoB 의경우특정서비스가분리되어있기때문에각각의서비스프로세스수를조정할수있다. 따라서위의경우에 WebtoB 에서는 HTML 에관련된 Process 를 6 개정도띄우고 Servlet 에관련된것을 2 개정도그리고 CGI 와 SSI 를각각 1 개정도띄워준다면 System 에서가장최적인환경에서서비스를할수있을것이다. 이를실제로 WebtoB 설정파일에서적용하는것은각각의 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 ssi SVGNAME = ssig, MinProc = 1, MaxProc = 2 TmaxSoft 103
WebtoB 관리자안내서 WebtoB 위의예에서각 SERVER 절에있는 MinProc 가처음 WebtoB 가기동될때시작되는 Process 의수이다. 따라서위의경우 HTML(html) 은 6 개, Servlet(jsv1) 은 2 개, CGI(cgi) 는 1 개, SSI(ssi) 는 1 개를초기값으로설정한것이다. 뒤에있는 MaxProc 는최대로이용할수있는 Process 의수이다. 이는동적으로 WebtoB 를조정하는것이가능하기때문에필요한값이다. 즉, 사용자가초기값으로설정한후에, 약간의변화가생겨 Process 의조정이필요한경우 MinProc 와 MaxProc 의범위안에서조정하는것이가능하다. 이는 wsadmin 이라는관리자용 Tool 을이용하면된다. MinProc 의값은 MaxProc 의값보다작거나같아야한다. 104 TmaxSoft
WebtoB WebtoB 관리자안내서 11 WebtoB 보안 11.1 소개 WebtoB 는기본적으로 Authentication 과 SSL 을지원한다. 이들은기존의다른 Web Server 들에서도기본적으로지원하는것으로 Web 상에서 Security 를보장하기위하여가장많이쓰이는방법들이다. 근본적으로 Open Network 을지향하는 Internet 에서사용자들의정보를보호하고, 자료의유출을막기위한방법들인이들은전자상거래등의거대한규모의사이트에서반드시검증하고이용하여야할방법들이다. 11.2 인증방법 Authentication( 인증 ) 의방법은매우단순하다. 사용자가사용자명과패스워드를 Web Server 에보내고 Web Server 는사용자가접근권한을가지고있는지확인하기위하여이름과암호화된패스워드가있는파일을열고해당정보들을검색한다. 그리고검색된정보에서사용자명과패스워드의일치를확인하고문제가없으면사용자에게정당한권리를부여하는방식이다. 이는개인별로나누어서접근권한의설정도가능하고몇몇사람들을그룹으로묶어서접속권한을주거나거부하도록설정하는것도가능하다. 물론전체모든사용자들에대한설정도가능하다. 실제 Browser 와 Server 간의작동은다음과같다. 먼저사용자가어떤 Server 에접속하고이어서어떤자료를요청한다고하자. 이때사용자가요청한자료가중요한자료이기때문에특정사용자들만보거나실행할수있는권한이있다면, Server 는사용자에게 Authentication Required [HTTP 401] 신호를전달한다. 그러면사용자는 Web Server 에자신의사용자명과패스워드를같이보내고이를가지고 Web Server 는사용자의인증을수행한다. 이때, 사용자의사용자명과패스워드가 Internet 상으로나가게되는데만약이에대한정보를누군가중간에서볼수있다면 TmaxSoft 105
WebtoB 관리자안내서 WebtoB 문제가될수있다. 이에, 사용자의사용자명과패스워드를암호화하여보내는방법을취하고있다. 11.3 SSL (Secure Socket Layer) WebtoB 에서는현재많이퍼져나가고있고앞으로계속늘어날전자상거래사이트를위해서안전한보안방식인 Secure Socket Layer (SSL) 을제공한다. WebtoB 에서구현된 SSL 을이용하기이전에먼저 SSL 에대한것을짚고넘어가자. SSL 은 Web Server 가제공하는것이기때문에 SSL 에대한내용만이해한다면, 사용하는방법은아주간단하다. 11.3.1 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 표기방식인 "http://*" 대신에 "https://*" 을사용해야한다. ( 물론 SSL 을지원하는 Web Server 에연결을할경우에만가능하다 ). 보통의경우 (http) 에 Port 번호 80 을사용하는데 SSL 을사용할경우 (https) 에는 Port 번호 443 을호출하므로하나의브라우저를이용하여 "http://*" 와 "https://*" 를동시에사용할수가있다. SSL 이작동하기위하여필요한사전작업들이 "handshake" 과정에서수행된다. 이작업들을정리하면다음과같다. Client 와서버가서로자신의인증서 (Certificate) 를교환한다. 그리고각각은자신이받은인증서에기록되어있는유효기간, 서명을확인한다. Client 는이후에수행될암호화와메시지인증코드 (MAC : Message Authentication Code) 의생성에필요한난수 ( 비밀키 ) 를생성하여이것을서버의 106 TmaxSoft
WebtoB WebtoB 관리자안내서 공개키로암호화하여서버에게전송한다. 서비스를받는동안사용할암호화알고리즘과해쉬함수의종류를결정한다. 이과정에서는 Client 는자신이받아들일수있는암호화알고리즘의리스트를서버에게제시하고이들중에서하나를서버가선택한다. 11.3.2 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) 를사용한다. 11.3.3 SSL Encryption 40bit 냐, 128bit 냐하는것은주어진 Data 를 Encoding 하는데필요한 Key 의길이이고, 이것이길수록훨씬안전하다. 보통 SSL 등을지원하는 apache-ssl 이나 Netscape, IIS 등은자체적으로 128bit 를지원하나, 이러한 128 bit Encryption 을지원하기위해서는 Server 뿐만아니라 Client 역시이를지원해야한다. 11.3.4 Ciphers Ciphers 는암호화에사용되는알고리즘이고, 더욱더안전하고강력한것들을선택할수있다. 일반적으로 Ciphers 가암호화할때더많은비트를사용할수록그데이터를해독하기가더어렵고어떠한양방향암호화과정에서도양자는같은 Cipher 를사용해야한다. 이러한 Cipher 에는여러가지종류가있어서서버는가장많이알려진것을사용할수있어야하고, Client 가서버와의 SSL 접속을시작하면정보를암호화하는데선호하는 Cipher 를서버에알리게된다. TmaxSoft 107
WebtoB 관리자안내서 WebtoB 11.4 인증서비스 11.4.1 인증기관 (Certificate Authority) 인터넷과같은개방형통신망에서일어날수있는사용자데이터의보안및사용자신원인증을위한방법으로는공개키암호화알고리즘이있다. 이알고리즘은데이터를암호화하는키와암호화된문을해독하는키가쌍으로구성된다. 비밀키는해독할사람본인이가지고있고, 공개키는공개하여, 다른사람들이비밀키의소유자에게메시지를전할때그공개키로암호화해서보내는방식이다. 이방법에서문제가되는것은그공개열쇠가정말로사용자본인의것인가아닌가하는점인데, 이를확인하기위해공개키를증명해주는기관을따로두게되며, 이를인증기관 (Certification Authority, CA) 이라한다. 이와같이메시지송신자와수신자가모두신뢰할수있는제 3 의인증기관을바탕으로그인증기관에서발행하는사용자인증서를상호교환및확인을통하여원격지상대방의신원인증및송수신되는데이터의보안을하게된다. 인증기관에서발행하는인증서에는인증기관인증서 (CA Root 인증서 ), Web Server 인증서, 사용자인증서의세종류로구분한다. 11.4.2 인증서 (Certificate) 인증서란어떤소프트웨어나어떤기관, 혹은개인을보증하는 Q 마크와같은것이다. 잘모르는신제품에대하여고객은 KS 나 Q 마크를믿고그제품을구입하게되는데인터넷에서도이와같은개념으로도입된것이인증서인것이다. 반대로상점의입장에서보면물건을사러온고객이믿어도좋은사람인지고객의신분증을보고신용카드거래를허용하는일을할수도있다. 이와같이인증서는사용하는입장에서보면 ' 서버인증서 ' 와 'Client 인증서 ' 2 가지로나누어볼수있고 tree 구조를따라보다상위기관에서그신뢰도를인증하는계층구조로이루어져있는것이보통이며사용자데이터보호와사용자신원의추가확인용으로만사용될뿐, 전자서명용으로사용할때는전자서명법에의한법적효력을갖지않는것이보다일반적이다. 이러한온라인인증서는인증하고자하는대상에관한몇가지내용을기술한문서라고볼수있는데개인적으로만들수도있고발급기관에요청할수있으며그형식은 ITU (International 108 TmaxSoft
WebtoB WebtoB 관리자안내서 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:01 --------------------------- 1 Signature Algorithm: MD2 digest with RSA Encryption ----- 2 Issuer: C=US, O=RSA Data Security, Inc., OU=Secure Server Certification Authority ---------------- 3 Validity: Not Before: Wed Nov 9 15:54:17 1994 Not After: Fri Dec 31 15:54:17 1999 --------------------- 4 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: 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: 65537 (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 위의인증서에서, TmaxSoft 109
WebtoB 관리자안내서 WebtoB 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) 는인증서를발급해주는기관의서버를의미한다. 11.4.3 인증서발급정책 (Certificate Issuing Policy) 위에서살펴본것과같이보다확실한보안통신을위해서는서버뿐만아니라 Client 입장에서의인증서가필요하다. 보다자세히설명하자면, Client 의경우에 " 정말로내가요청한서비스를해줄적법한서버인가?" 를확인하는것이필요할것이고, 서버의경우에 " 정말로서비스를요청한실체가적법한 Client 인가?" 를확인하는작업이다. 보통서버는의무적으로인증서를제공을하고, Client 에서인증서를요구할것인가하는것은발급하는정책에따라여러가지가있을수있는데, 일반적으로다음의 4 가지형태로존재하게된다. 0 인증과정필요없음. (No certificate required.) 1 Client 는올바른인증서를제공할수도있다. 인증서가제공되면, 서버가가지고있는인증서와일치하는인증기관 (Certification Authority) 에서인증한것이어야한다. 2 Client 는올바른인증서를반드시제공해야한다. 3 Client 는올바른인증서를제공할수도있다. 그러나반드시서버의인증기관과일치할필요는없다. 일반적으로, 영화표예매나사이버증권사와같은곳에서는고객의 ID 와 Password 만있으면서버의인증서를바탕으로보안통신이이루어지게되는 type 0 형식이고, 한국통신에서진행하는 banktown 21c 프로젝트에서는보다확실한보안을위한 type1 의형식이다. 서비스를이용하기위해서는웹사이트에서 " 인증서제출 " 이란버튼을눌러인증서를제출하면 ( 일반적으로는 Browser 에서이것을제공하게할수도있다.) 전자통장이실행되고, 동시서버에서인증서를발급받아 110 TmaxSoft
WebtoB WebtoB 관리자안내서 상호간의인증 (Mutual Authentication) 을획득하게되는것이다. type0 과같이단순히패스워드를입력하는방법보다는, 인증서를이용하는방법이인증서와패스워드를동시에이용하기때문에더욱더안전하다고할수있다. 우리는흔히은행의 ATM 단말기를이용할때은행에서발급한카드를넣고패스워드를입력한후에현금을인출한다. 이러한과정에서카드가인증서에해당한다고볼수있다. 따라서우리는이카드를입력함으로써은행의서버에게우리자신의실체를알리고카드를입력한사람이적법한사용자임을패스워드입력을통해서밝히는것이다. 이것은디지탈서명에서사용한방법과똑같은것이다. 11.4.4 Verisign 에서서버인증서발급받기 Verisign 은세계적으로가장유명한사설인증기관이다.Verisign homepage 인 www.verisign.com 의 SSL Server Certificate 를선택하면인증서를받을수있다. 인증서는돈을주고영구적으로권한을살수도있고, 일정기간 (14 일 ) trial 로사용해볼수도있는데, 실제로구입하기위해서는약간더복잡한과정이필요하다. 인증서란한마디로말하여어떤대상을인증기관에서신용을보증하는것이기때문에 verisign 사는인증서를요청한기관이나업체에사업허가서등의제반서류를요청하게되는데, D&B 라는 Business Database 에등록되어있다면이러한과정이훨씬간단해질수있고, 현재는주로미국내의기업들만이등록되어있다. 위에서설명한것외에도 SSL 은더복잡한구조와인증방법을가지고있다. 또한, SSL(Secure Socket Layer) 은 TCP Protocol 과 HTTP 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 과결합성이떨어지기때문이다. 이에 TmaxSoft 111
WebtoB 관리자안내서 WebtoB WebtoB 에서는이들을내부 Engine 과결합하여, 성능에문제가될수있는모든요인들을제거하고효율성에초점을맞추었다. 실제 SSL 의이용은매우단순하다. 현재사용자들이많이이용하는 Browser 가거의모두 SSL 을지원하기때문에 https 로시작하는사용자요구들을스스로 SSL 로간주하여 Web Server 로보내게된다. 또한, Web Server 에서는이런요구를받아위에서설명한인증방법등을동원하여사용자를인증하게된다. 이는모두 Web Server 와사용자 Browser 내에서이루어지는일로사용자가복잡하게직접관여할필요는없다. 11.5 Authentication 과 SSL 의이용 11.5.1 Authentication 11.5.1.1 wsmkpw WebtoB 에서 Authentication 을설정하는방법은부록 [E.13 AUTHEN 절 ] 에서설명할것이다. 그전에 Authentication 을이용하기위해서는 WebtoB 에서의설정뿐아니라, 실제사용자의사용자명과패스워드를만들어서저장하여야할필요가있다. WebtoB 를먼저설치한다음 WebtoB 가설치된 Directory 를보면실제실행파일들이있는 bin/ 디렉토리아래에 wsmkpw 라는실행파일이있는것을볼수있다. 이 wsmkpw 라는실행파일을통하여사용자명과패스워드를만들어낼수있다. wsmkpw 툴은다음과같이실행한다 : $ wsmkpw <file_name_path> <user_name> 옵션 file_name : 인증파일이있는전체경로 user_name : 인증에사용될사용자이름 실제수행의간단한예를보면다음과같다. wsmkpw /data1/gloria/webtob/auth/passwd newuser New Password: ***** Retype Password: ***** 112 TmaxSoft
WebtoB WebtoB 관리자안내서 위와같이하면, /data1/gloria/webtob/auth 아래에 passwd 라는파일이생기고 newuser 라는새로운사용자가저장된다. 그리고내부에는입력한패스워드가암호화되어저장된다. 이파일을이용하여 WebtoB 는실제 Authentication 을수행하는것이다. 11.5.1.2 Authentication 의설정 WebtoB 의설정중에 AUTHENT 라는절이있다. 그절의항목에서 UserFile 이라는항목이있는데여기에 passwd 라는파일을등록하면 WebtoB 가 Authentication 을수행하는과정에서이파일을이용하여 Authentication 작업을하게된다. 앞에서설명한바와같이 wsmkpw 라는실행파일을이용하여사용자명과패스워드를등록한후, 자신의원하는항목에이것을추가하면사용자가그항목에대한요구를하는경우마다 WebtoB 는 Authentication 작업을수행할것이다. 이러한 Authentication 작업은 Web 의초창기에많이이용되었다. 간단한응용으로사용자의인증작업을수행할수있었기때문이다. 그러나이 Authentication 시에사용하는암호화방법이아주일반적이고도해독이가능하기때문에전자상거래를구현한 Site 등에서는많이외면되고있다. 또한사용자의패스워드가인터넷으로흘러들어가게되면서나쁜의도를가진사람들이이패스워드를중간에 capture 하여해독하는사례도발생하면서더강력한인증과암호화방법이강구되었다. 이러한문제가대두되는가운데 Netscape 사에의해서 Secure Socket Layer 라는것이이러한문제를대처하기위하여등장하였다. 이는기존암호화방법을한차원높게만든것으로비록누군가패스워드나사용자명을가져갔다하더라도암호를해독하는것이아주어렵고거의불가능하기때문에보안에완벽을기할수있는방법으로인정받고있다. WebtoB 에서 Authentication 과 SSL 을이용하기위해서는 WebtoB 의환경파일에이를이용하기위한별도의설정이필요하다. 먼저 Authentication 을이용하기위해서는 AUTHENT 절을설정하여야한다. 이는 WebtoB 에서보안을위하여설정할 Authentication 에대한정의를내리는절이라고할수있다. 그리고이 AUTHENT 절에서선언한것을각각의 Server Group 에선언을해주면된다. 즉, 각 Server Group 단위로 Authentication 을설정하는것이가능하다는 TmaxSoft 113
WebtoB 관리자안내서 WebtoB 것이다. 만약사용자가 CGI 에대해서 Authentication 을이용하고싶다면, 이 CGI 를선언한 Server Group 에 AUTHENT 절에서선언한 Authentication 이름을선언한다. AUTHENT 절은다음과같은구조를가지고있다. *AUTHENT AUTHENT_NAME TYPE, USERFILE [,GroupFile] AUTHENT 의이름은사용자가원하는이름을, TYPE 은사용자가이용하고싶은 Encryption 방법을적으면된다. 일반적으로이용되는방법은 Basic 과 MD5, RSA 등이있다. WebtoB 에서는 Basic 에대한설정만을지원하고있다. 다른기타암호화방법은차후의 Version 에서제공할것이다. 그리고 USERFILE 은위의 [11.5.1.1 wsmkpw] 에서설명한 wsmkpw 란것을이용하여만들어진 Password 파일을말하는것이다. Password 파일을이 AUTHENT 에서이용하여야하기때문에그파일의위치를적어야한다. 물론, 당연히그파일은먼저존재하여야한다. 이와같은설정방법을이용하여간단한 AUTHENT 절에대한예제를보이면다음과같다. *AUTHENT authent1 Type = Basic, UserFile = "/usr/local/webtob/bin/pwfile" AUTHENT 절에대한자세한설명은부록 [E.13 AUTHENT] 를참조하기바란다. 위와같은설정을하였다면, 사용자가원하는설정으로 Authentication 을이용할기본적인준비가된것이다. 이젠이를이용하여원하는작업에이 AUTHENT 절에서정의한항목을실제로연결하기만하면된다. 이때사용자가이용하는 WebtoB 의설정항목은 AuthentName 이다. 이를이용하여 AUTHENT 절에선언한 Authentication 방법을이용하게되는것이다. 간단한예로사용자가 CGI 작업에 Authentication 을설정하고싶다면다음과같은방법으로설정하면된다. (authen1 은위의예에서설정되었다.) <<http.m>> *SVRGROUP cgig NODENAME = webmain, SVRTYPE = CGI, 114 TmaxSoft
WebtoB WebtoB 관리자안내서 AuthentName = authent1 위와같은형식으로설정하면 WebtoB 는사용자가 CGI 서비스를요청할때마다사용자에게 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 uri2 *ALIAS alias1 alias2 Uri = /cgi-bin/, SVRTYPE = CGI, SVRNAME = cgi1 Uri = /cgi/, SVRTYPE = CGI, SVRNAME = cgi2 URI = /cgi-bin/, RealPath = /usr/local/webtob/cgi-bin/ URI = /cgi/, RealPath = /usr/local/webtob/cgi/ 위와같이두가지로 Group 을설정한후, Authentication 을원하는것은 cgig_authent 라는 Server Group 을이용하여 Server 를설정하고, 다른것들은 cgig 를그대로이용하여설정하면된다. 이런설정은 Server Group 절에선언될수있는모든것에적용된다. 11.5.2 SSL 의설정 WebtoB 에서 SSL 을이용하기위해서는별도의설정이필요하다. 이는여타다른 Authentication 이나 Log 절의선언과마찬가지로, SSL 절을선언하여이를이용하는방식으로진행된다. TmaxSoft 115
WebtoB 관리자안내서 WebtoB WebtoB 에서 SSL 을이용하기위해서는먼저 NODE 절이나, 아니면 SSL 을이용하고싶은 Virtual Host 를선언한 VHOST 절에서 SSLFLAG 를선언하여야한다. 기본적으로 WebtoB 는 SSL 을이용하도록되어있지않다. 따라서, 반드시 SSLFLAG 를설정하여야 SSL 을이용할수있다. 이 SSLFLAG 는 Y 와 N 으로설정하는것이가능하다. Y 라는값을기입하면, SSL 을이용한다는것이되고, N 은이와반대의역할을한다. 그러나 SSLFLAG 에대한설정이없으면, 기본적으로 SSL 을이용하는것이아니기때문에, N 은거의쓰일일이없을것이다. 다음은 SSLFLAG 의사용예이다. SSLFLAG = Y 위와같이 SSLFLAG 를 Y 로설정하여 SSL 을이용하겠다고선언한후에는, 이제 SSL 에대한설정을하여주어야한다. 이 SSL 절의형태는다음과같다 : *SSL SSL NAME Certificatefile, CertificateKeyFile, CACertificatePath, CACertificateFile, VerifyDepth, VerifyClient, RandomFile,... 이에대한자세한내용은부록 [E.14 SSL 절 ] 을참조하기바란다. 이곳에서는기본적인설정에필요한정보만기술할것이다. 그리고이선언한 SSL 을 Authentication 절에서하듯이각각의 SSL 선언을필요로하는절에선언하면된다. 단, 주의할점은 Authentication 은 SVRGROUP 절에서선언하였으나 SSL 절은 Node 절이나 VHOST 절에서 SSL 을이용하는곳에서선언하여야한다. 선언하는방법은 SSLNAME 라는항목을이용한다. 즉, SSLNAME 라는항목에 SSL 절에서선언한것을적어주면된다. 이에대한사용예제는다음과같다. SSLNAME = ssl1 그러면이절에서는 ssl1 에서선언한값을토대로 SSL 을이용하겠다는것이된다. 그리고위에서밝힌바와같이 ssl1 이라는항목은 SSL 절에서이루어진다. 이에대한예는다음과같다. *SSL ssl1 CertificateFile = "/user/webtob/ssl/newcert.pem", CertificateKeyFile = "/user/webtob/ssl/newcert.pem", RandomFile = "/user/webtob/bin/.rnd, 2048", RandomFilePerConnection = "/user/webtob/bin/.rnd, 512", 116 TmaxSoft
WebtoB WebtoB 관리자안내서 VerifyClient = 0, VerifyDepth = 10, FakeBasicAuth = Y 이와같이 ssl1 을선언하였고이를실제적용하는방법에대한예는다음과같다. *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 서비스를한다는것을알수있다. TmaxSoft 117
WebtoB 관리자안내서 WebtoB 12 JEUS 와의연동 12.1 소개 WebtoB 는 티맥스소프트에서제공하는차세대 Web Application Server 인 JEUS 와연동되어일반 Web Server 에서제공하지못하는기능들을구현할수있다. 일반적인웹서비스를포함한전자상거래에서는보안과트랜잭션등이반드시보장되어야한다. 또한대용량의 Data 를다루는일이나사용자의관리등의측면에서 Web Application Server 인 JEUS 를이용하는것이바람직하다. 설정방법에있어서, WebtoB Base 이상에서제공되는 JEUS 와의연동방법과 WebtoB Standard 에서제공되는내장 Servlet Engine 과의연동방법은 JEUS 버전별항목이름에만다소차이가있으며기본원리는동일하다. 12.2 WebtoB 와 JEUS 연동 (Base+) 비교적 간단한 비즈니스 로직을 수행하는 중소규모의 온라인 서비스를 제공하고자 할 경우에는 WebtoB Servlet Engine 과의 연동만으로도서비스가가능하지만, 대규모의전자상거래시스템을 구축하려한다면 WebtoB 와 JEUS 을연동하여이용하는것이 권장한다. 이장에서는 JEUS 4 이상과의연동을기준으로설명한다. 12.2.1 WebtoB 와 JEUS 연동을위한설정 WebtoB 와 JEUS 연동을위해설정해야할파일은다음과같다 WebtoB 환경파일 ( 예 : sample.m) JEUS 환경파일 : WEBMain.xml WebtoB 와 JEUS 연동을위해서로의값을똑같이해야하는설정은다음과같다. 118 TmaxSoft
WebtoB WebtoB 관리자안내서 WebtoB-JEUS 간연결포트번호 HTH 수 서버이름 ( WebtoB 의 JSV 설정서버이름과 JEUS 의 Registration ID ) Process 수 ( WebtoB 의 MinProc/MaxProc 와 JEUS 의 thread-pool 수 ) 12.2.1.1 WebtoB 환경파일의설정 NODE 절에다음과같이 HTH 개수와 JEUS 와의연결을맺을 JSVPORT 를추가한다. *NODE HTH=1, JSVPROT=9999, HTH 에설정된값은 WebtoB 에서 HTH 라는프로세스의개수로서이값과 JEUS 환경파일중 WEBMain.xml 의 <webtoblistener> 하위에있는 <hth-count> 항목값과일치하여야한다. 또한 JSVPORT 는웹컨테이너와연결을맺을포트로서실제웹브라우저로서요청을받는포트와는무관하다. 이는 JEUS 환경파일 WEBMain.xml 의 <webtob-listener> 하위에있는 <port> 항목값과일치하여야한다. SVRGROUP 절에 SVRTYPE 이 JSV 인서버그룹을추가한다. *SVRGROUP htmlg NODENAME = webtob1, SVRTYPE = HTML jsvg NODENAME = webtob1, SVRTYPE = JSV SERVER 절에서비스를추가한다. *SERVER html SVGNAME = htmlg, MinProc = 2, MaxProc = 10 MyGroup SVGNAME = jsvg, MinProc = 4, MaxProc = 10 실제로웹컨테이너와연결하여작업을할서버를설정하는데위의예에서서버의이름으로 MyGroup 이고서버그룹의이름은 SVRGROUP 부분에서설정한 jsvg 이다. TmaxSoft 119
WebtoB 관리자안내서 WebtoB MinProc 은웹컨테이너와의최소연결개수이고 MaxProc 은웹컨테이너와의최대연결개수이다. 이개수들은 JEUS 환경파일중 WEBMain.xml 의 <webtob-listener> 하위에있는 <thread-pool> 설정값과각각일치하거나커야한다. URI 절에 MyGroup 서비스에대한 uri 를추가한다. *URI uri1 Uri = /examples/, SVRTYPE = JSV, SVRNAME = MyGroup URI 부분은어떤 URI 가요청이되었을때어떤서버를수행시킬지를지정하는것으로위의예에서 /examples/ URI 에대해 JSV 서버, 즉 MyGroup 이라는서버를수행시키도록설정되어있다. 12.2.1.2 JEUS 환경파일의설정 WebtoB 와의연결설정을위해선아래경로에있는 WEBMain.xml 을수정해야한다. $JEUS_HOME/config/<node_name>/<node_name>_servlet_<engine_name>/ Port 값은 WebtoB Servlet Engine 웹컨테이너와 WebtoB 와의연결을맺을 Port 를번호를설정하는것으로 sample.m 의 JSVPORT 값과일치해야한다. <webserver-connection> 내의 <webtob-listener> 하위에있는 <hthcount> 는 WebtoB 와연결할포트의개수로서 sample.m 에서 NODE 부분의 HTH 설정값과일치해야한다. RegistrationID 의값은 WebtoB 와처음연결을맺을때등록과정중사용할등록 ID 로서 sample.m 의 SERVER 부분의서버이름 (MyGroup) 과같아야한다. <webserver-conneciton> 내의 <webtob-listener> 하위에있는 <thread-pool> 태그에 <min>, <max> 값을설정해야한다. 이값은쓰레드풀에최소한유지되어야하는쓰레드의개수와최대개수를정의하는것으로 WebtoB 환경파일에정의한 MyGroup server 에대한 MinProc/MaxProc 값과일치하거나적어야한다. <webtob-address> 에는연결을맺을 WebtoB 지정해준다. 의 IP 어드레스를 120 TmaxSoft
WebtoB WebtoB 관리자안내서 하나의컨텍스트그룹은여러개의웹서버연결을가질수있다. 이때지켜야할것은각각의연결마다포트번호가달라야한다는것이다. 이렇게여러개의웹서버연결을가지는것은웹서버가여러노드에존재할때나다른종류의웹서버로부터요청을받을때에사용한다. <webtob-listener> <listener-id>webtob1</listener-id> <port>9999</port> <webtob-address>192.168.1.82</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> 12.2.2 WebtoB 와 JEUS 연결의특징 WebtoB 와 JEUS 를기동할때중요한것이기동하는순서이다. 구조상 JEUS 에서연결을맺으려하는것을 WebtoB 가 Listen 하는상태이므로, 먼저 WebtoB 를기동시켜야한다. WebtoB 가기동되어 JEUS 와의연결을위한 JSVPORT 가 Listen 상태로되어있고, JEUS 가기동되면 WebtoB 와연결을맺는다. 연결이성공하면 JEUS 측 Log 에연결이성공되었다는메세지가나오게되고이후 Servlet 이나 JSP 등 JEUS 의 Servlet Engine 을이용해야하는사용자의요구는모두이 JSVPORT 를통해서 JEUS 에전달되어처리된다. 그리고 WebtoB 는그결과를받아클라이언트측으로전송해준다. 여기서주의할점은내장 Web Server 나 Apache 의연결과는다르게 WebtoB 의경우반드시 WebtoB 가먼저기동이되어있어야한다. 그것은연결을처음설정하는과정에서 WebtoB 가기다리는역할을하기때문이다. 또한 WebtoB 와 JEUS 와의연결은 persistent connection 이므로중간에네트워크오류나서버의문제가생기지않는이상은연결을끊지않고재사용한다. TmaxSoft 121
WebtoB 관리자안내서 WebtoB 12.2.3 Servlet Engine 기동및종료 명령어모드에서다음의단계별로 WebtoB 와 WebtoB Servlet Engine 을기동시키도록한다. Step 1 WebtoB 환경파일을컴파일한다. C:\> wscfl i sample.m Step 2 WebtoB 를기동시킨다. C:\>wsboot Step 3 아래명령어를사용하여 JEUS Manager 를시작한다. C:\>jeus Note : 위의 jeus Command Line 이적용되지않으면 Java version 을확인한다. 만약 HotSpot 이설치되어있지않은경우에는아래와같은 Command Line 을수행해서 WebtoB Servlet Engine Manager 를기동시킨다. C:\>jeusp JEUS Manager 는 JEUS 구조중가장하단에위치하며가장먼저수행되어야한다. 종료는 jeusadmin 명령어를이용하여종료한다. Step 4 JEUS 를부팅하기위해서인증과정을거쳐 jeusadmin 콘솔툴을이용한다. C:\>jeusadmin webmain [ErrorMsgManager] Message Manager is initialized [JeusCommander] Jeus 3.0 Jeus Manager Controller [JeusCommander] Login >administrator [JeusCommander] Password > [JeusCommander] [administrator] login successful webmain> 여기서 webmain 은 JEUS 를시작한노드로써해당노드에대해권한이있는 UserName 과그에따른 Password 인증과정을거쳐야 jeusadmin 명령어를이용할수있다. 122 TmaxSoft
WebtoB WebtoB 관리자안내서 Note : ID 는 default 로 adminstrator 이고, Password 값은설치과정에서입력한 password 값을기억하여입력하면된다. Step 5 다음과같이 JEUS 를부팅하여 WebtoB 와연동시키므로써원하는서비스를이용하게된다. webtob1> boot 부팅과정은두단계로이루어진다. 먼저, JEUS 서비스를시작한후각각의엔진을시작한다. JEUS 서비스시작과정을살펴보면위명령은 JEUS Manager 로전달된다. JEUS Manager 는 config/webtob1/jeusmain.xml 을읽어온다. JeusMain.xml 에는클러스터링을구성하는노드에대한정보와백업노드에대한정보가있다. 이들정보를이용해런타임환경을구성한후, 이 webtob1 노드에있는서비스를시작한다. Step 6 JEUS 서비스와엔진을종료하고싶으면다음명령을수행한다. webtob1> down Step 7 다음과같은명령어를이용해 JEUS Manager 를종료한다. webtob1>jeusexit 12.2.4 예제 부록 [A.2.1 JEUS 연동환경설정 ] 참조. 12.3 내장 Servlet Engine 이용방법 (Standard) WebtoB Standard 이상부터제공되는 Servlet Engine 연동을위한설정은앞서설명한 JEUS 와의연동설정방법과동일하다. 단, 현재 Servlet Engine 으로제공되는버전은 JEUS 5 에해당하므로앞서설명한 JEUS 4 이상에서의설정과는항목이름에서약간의차이가있다. 12.3.1 WebtoB 환경파일의설정 앞서설명한 [12.2.1.1 WebtoB 환경파일의설정 ] 과동일하다. TmaxSoft 123
WebtoB 관리자안내서 WebtoB 12.3.2 내장 Servlet Engine 환경파일의설정 WebtoB 와의연결설정을위해선아래경로에있는 WEBMain.xml 을수정해야한다. $WEBTOBDIR/jeus/config/<node_name>/<node_name>_servlet_<engine_n ame>/webmain.xml 이 WEBMain.xml 파일에서확인하고수정해야할항목은 <webserverconnection> 하위에있는 <webtob-listener> 하위항목들이며각항목에대한설명은다음과같다. <port> : WebtoB Servlet Engine 웹컨테이너와 WebtoB 와의연결을맺을 Port 를번호를설정하는것으로 sample.m 의 JSVPORT 값과일치해야한다. <hth-count> : WebtoB 설정된 HTH 프로세스의개수로 WebtoB 환경파일의 NODE 부분의 HTH 설정값과일치해야한다. <registration-id> : WebtoB 와처음연결을맺을때등록과정중사용할등록 ID 로서 WebtoB 환경파일에서 SERVER 부분의서버이름 (MyGroup) 과같아야한다. <thread-pool> <min>, <max> : 쓰레드풀에최소한유지되어야하는쓰레드의개수와최대개수를정의하는것으로 WebtoB 환경파일에정의한 MyGroup server 에대한 MinProc/MaxProc 값과일치하거나적어야한다. <webtob-address> : 연결을맺을 WebtoB 의 IP 어드레스를지정해준다. 12.3.3 예제 부록 [A.2.2 내장 Servlet Engine 연동환경설정 ] 참조 124 TmaxSoft
WebtoB WebtoB 관리자안내서 13 Multi-Node 사용 (Standard) 13.1 소개 대규모의사용자를처리하기위해서는 WebtoB 를하나만설치하여이용하기보다는여러개의 WebtoB 를설치하여동시에사용자의요구를처리하게된다. 이는사용자에게안정적인서비스와빠른서비스를가능하게하기때문이다. 이러한 Multi Node 에서의설정은각 Node 를동시에설정하여 WebtoB 를동시에기동시킬수있다는장점도있지만, 특히 WebtoB 의 Load Balancing 이나 Fail-Over 기능을이용할때더욱큰영향을발휘하게된다. 따라서많은사용자를받아들여야하는대용량의사이트를운영하는경우이런환경을갖추는것은필수적이다. 이때, WebtoB 의 Multi Node 환경을이용한다면이러한환경을갖추는데어려움이없을것이다. 특히 WebtoB 에서지원하는 Load Balancing 이나 Fail-Over 기능들은막강하기때문에더욱큰이점이주어질것이다. 이에본장에서는여러개의 WebtoB 를설치하고이들을동시에 booting 하여관리하는방법에대하여알아볼것이다. WebtoB 를실행하기위한방법은이미앞에서충분히설명이되었을것이다. 따라서본장에서는관리자가이미모든기본적인실행준비를완료하였다고가정하고설명할것이다. 13.2 wsracd(web Server Remote Access Control Daemon) 대규모사용자를관리하기위해서는일반적으로 WebtoB 시스템은여러 Node 로구성되며이에대한중앙관리가필요하다. 중앙관리를위해서 WebtoB 시스템에서는 wsracd 를사용한다. 즉, 각 Node 에 wsracd 를미리실행해둠으로써한 Node 에서전체 WebtoB 시스템을관리할수있다. 즉, 환경파일컴파일, WebtoB 시스템기동및종료, TmaxSoft 125
WebtoB 관리자안내서 WebtoB 동적환경파일변경등의동작을한번의명령으로가능케한다. 결국이 wsracd 라는 Process 를통해서 Multi Node 상의 WebtoB 를 Booting 하거나 Down 시키고관리하는것이다. wsracd 는여러개의 Node 를하나의도메인으로써 WebtoB 시스템을구축하였을경우한 Node 에서 WebtoB 시스템을집중관리하기위해각각의 Node 에서미리기동되는 Daemon 프로세스이다. 도메인내의한 Node 에서 wsadmin 을통하여전체 Node 를관리하거나, 또는환경파일을도메인내의모든 Node 에동일한내용으로적용가능하도록처리하는프로세스이다. wsracd 에대한구동과 option 은다음과같다. Command Option Argument wsracd -k 없음 wsracd 를기동시키기위해서는환경변수에 WEBTOB_RAC_PORT 를설정해주어야하며, 환경변수로설정해줄때에는환경파일에 RacPort 를같은 port 로설정해준다. 환경변수를참조하지않고부팅하기위해서는 "wsracd -k" 로실행하여 wsracd 가사용될 port 를 WebtoB 가지정하는것으로서중앙관리를위한준비를한다. 이때설정되는 port 는 default port 로설정되어있는 3333 port 이다. 결국이 wsracd 란 Process 를통해서모든각 Node 의 webtob 를관리하게되는것이다. 이 wsracd 는 WebtoB 를설치하면 /bin directory 아래에존재한다. 물론각 Node 상에모두이 wsracd 가존재하여야한다. 또한이곳을통하여각 Node 의환경파일정보가전달되기때문에각 wsracd port 가설정되어있거나 default port 로설정된 3333 port 에대한사용권한이있어야한다. 만약이런통신에관련된설정에문제가생긴다면각 Node 간에정보가전달될수없기때문에반드시주의깊게살펴보아야한다. 이 wsracd 에대한통신을설정하는것은환경파일의 Node 절의 RacPort 라는것에대한것이다. 이 RacPort 를원하는 Port 로설정하거나, 기본 port 로놔두어도된다. ( 기본 port 는 3333 port 이다.) 이렇게 wsracd 를이용해 WebtoB 를 Multi node 로설정하면각각 Node 의 wsracd 를통해동시에여러개의 WebtoB 를 booting 시킬수있고정보를전달할수있다. 그리고이들 Node 들은모두하나의 Domain 이라는개념에속하게된다. WebtoB 의환경파일에서가장 126 TmaxSoft
WebtoB WebtoB 관리자안내서 먼저등장하는 Domain 과같다고생각하면된다. 즉, 하나의 Domain 에여러개의 Node 가속하는개념으로되는것이다. 이에대한그림은다음과같다. 그림 13-1. wsracd 의개념 wsracd process 에대한설정이끝났다면이제 Multi Node 환경하에서환경파일작성과 Compile 에대해서설명하겠다. 이환경파일과환경파일의 Compile 에대한내용은이미앞에서설명한내용이므로간략하게설명하겠다. 그이후실제로 WebtoB 시스템의기동 (wsboot) 과종료 (wsdown) 방법에대하여설명하겠다. 13.3 Multi-Node 환경설정 WebtoB 를여러 Node 에서이용하게되는경우, 각각의 Node 에서모두같은환경파일을가지고있어야한다. 그래야각각의정보가서로공유되고, 차후에설명될 Load Balancing 이이루어지기때문이다. 즉, 각 Node 에서하나의환경파일을가지고있고, 이환경파일내에모든 Node 들의정보가포함되어있다. 따라서, 각 Node 에어떠한것이필요하고존재하는지다른 Node 들도알수있고, 다른 Node 에문제가발생하는경우원활하게처리하는것도가능하게된다. 먼저, 환경파일의작성에대하여설명한다. 환경파일의작성은앞절에서이미자세하게설명하였다. 따라서기본적인것은언급하지않고 Multi Node 를위한것만설명할것이다. TmaxSoft 127
WebtoB 관리자안내서 WebtoB 기본적인환경파일을만드는방법은이미앞에서충분히설명이되었을것이다. 이곳에서는 Multi Node 를위한추가적인설정만을언급하겠다. 아래의파일은일반적인 One Node 에서의 WebtoB 의환경파일이다. *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 = 3333 128 TmaxSoft
WebtoB WebtoB 관리자안내서 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 절에서는 WebtoB 가기본적으로제공하는 Server(HTML, SSI, CGI, PHP) 등은모든 Node 에서설정하지않고 COUSIN 을사용한 SVRGROUP 에해당하는 SERVER 만을설정한다. TmaxSoft 129
WebtoB 관리자안내서 WebtoB 이렇게하나의환경파일에모든 Node 의정보를넣는이유는앞에서도언급했듯이각 Node 의설정을다른모든 Node 들에게도알려주기위해서다. 이렇게하면 Load Balancing 이나기타다른 Fail- Over 등의기능을설정하거나적용할때간단하게이루어지기때문이다. 이런설정을모든 Node 마다일일이설정해서 Compile 하는것은아니다. wsracd Process 를통해서이런일련의작업을수행할수있기때문이다. 즉, 일반적인환경파일 Compile 작업인 wscfl i test.m ( 환경파일이 test.m 인경우 ) 을수행하면이때 WebtoB 프로세스는 wsracd 프로세스가존재하는지확인한후, 이것이존재하면연결된모든해당 node 들에게환경파일을전달해주기때문이다. 따라서관리자는한 node 에서만이작업을수행하면된다. 만약관리자가특별한이유가있어서하나의 node 에서만이 wscfl 을수행하고싶다면 n 옵션을이용하면된다. 즉, 환경파일이있는 Node 의이름을 n 옵션이후에넣어주면되는것이다. Ex 1] $ wscfl i test.m Ex 2] $ wscfl i test.m n node1 Multi Node 수행시주의사항 WebtoB 에서 Multi Node 를설정할때 wscfl, wsboot, wsdown, wsadmin 등의중앙관리를위한경우다음사항에주의하여야한다. 설정된 Node 의여러 OS 중 NT 또는 Windows 2000 을이용하는경우파일시스템이 FAT32 인경우에는모든중앙관리를 NT 또는 Windows 2000 에서수행하도록한다. WebtoB 에서 Multi Node 를설정할때 NODE 명을지정하는경우다음사항을주의하여야한다. 현재정의된 NODE Name 이 System 의 Hosts File 에등록되어있어야한다. 130 TmaxSoft
WebtoB WebtoB 관리자안내서 각 NODE 간에서로 Node Name 만으로각각의 Node 를찾을수있어야한다. 즉, 정의된 Node Name 이서로각 Node 간에서확인되어야한다. 이것은각각의다른 Node 에서상대편 Node 를찾을수있는경우에 WebtoB 의 Multi Node 가정상적이고안정적으로수행되기때문이다. 13.4 Multi-Node 상에서의 WebtoB 기동과종료 WebtoB 시스템을기동하기위해서는앞서언급한바와같이기본환경설정이잘갖추어져있어야한다. 따라서다음과같은사항을다시한번점검해보자. 점검사항 이진 WebtoB 환경파일이존재하는가? 환경파일 NODE 절의 WEBTOBDIR 항목에설정된 Directory 하위의 /bin Directory 에 WebtoB 실행프로그램들이존재하는가? 환경파일의 APPDIR 항목 (*NODE 절 ) 에설정된 Directory 에 *SERVER 절에등록된서버프로그램들이존재하는가? 중앙관리를위한 wsracd 가각 Node 에서동작중인가? WebtoB 를 Booting 하는작업도앞에서설명한 wscfl 과유사한논리로전개된다. 즉, wsboot 라는명령어를기입하면, 이때 WebtoB process 가 wsracd 프로세스의유무를파악하여, 존재한다면각각의 Node 에이정보를모두보내서모든 Node 에서동시에 WebtoB 가 booting 되는것이다. 따라서사용자는 Booting 을위해서별도의설정이필요없다. 즉, 기존의 wsboot 라는명령어로충분하다. 이역시 wsracd 프로세스를통해서모든정보전달이이루어지기때문이다. 그러나만약관리자가자신의 Node 에서만 WebtoB 를 booting 또는 down 시키고싶을때는다음과같은추가의 Option 이필요하다. TmaxSoft 131
WebtoB 관리자안내서 WebtoB 13.4.1 Multi-Node 의한 Node 에서 WebtoB 기동을위한 wsboot 명령옵션 사용자가특별한사정이있어서한 node 에서만 WebtoB 를 booting 하고싶다면아래와같은옵션을이용하면된다. -n : 지정된 Node 에존재하는서버프로세스들을기동시킨다. Node 명은 WebtoB 환경파일내의 NODE 절에미리정의되어있어야한다. ( 멀티 Node 의환경에서는반드시지정되어야한다 ) Ex] $ wsboot n node1 13.4.2 Multi-Node 의한 Node 에서 WebtoB 종료를위한 wsdown 명령옵션 만약사용자가특별한사정이있어서한 node 에서만 WebtoB 를종료하고싶다면아래와같은옵션을이용하면된다. WebtoB 시스템종료도 wsboot 와마찬가지로이진 WebtoB 환경파일을토대로이루어진다. 시스템에서사용하던공유메모리를없애고기동된 WebtoB 프로세스들과응용서버프로세스들을종료시킨다. -n : 지정된 Node 에존재하는서버프로세스들을종료시킨다. Node 명은 WebtoB 환경파일내의 Node 절에미리정의되어있어야한다. ( 멀티 Node 의환경에서는반드시지정되어야한다.) Ex] $ wsdown n node1 132 TmaxSoft
WebtoB WebtoB 관리자안내서 14 부하조절 -Load Balancing (Standard) 현재인터넷기반의 World Wide Web 은날이거듭될수록사용자의수가급속히증가되고있으며모든업무에있어서인터넷혹은인트라넷의의존도가점점높아지고있다. 이는자료의공급과정보공유의편이성등이주요한이유가되기때문이다. 이러한인터넷의확산으로인하여많은사람들이정보화시대에많은정보를쉽게얻을수있으나이로인해인터넷 traffic 또한지속적으로증가되었고, 이는사용자와서버간의응답시간을지연시키는문제를발생하게되었다. 이에대한해법으로하나는서버의성능을향상시켜서응답시간을향상시키는것이고, 또다른하나는네트워크전송속도를높이는방법이다. 서버의성능향상을통한응답시간향상은서버의 CPU, 메모리, 그리고 IO 장치의성능에달려있다. 따라서서버의성능을높이는방안으로는 Processor 의성능을향상시키는것과 Network Card 의성능을향상시키는방법이있다. 그리고네트워크전송속도는주로회선대역폭이좌우하게되므로대역폭을확보하는것이중요한성능향상의요인이된다. 이것뿐아니라부가적으로는사용자의많고적음, 그리고사용자가보내는요구의양에따라좌우된다. 위와같은두가지방법을제시하여문제를해결하려하고있으나현실적으로네트워크의대역폭을마음대로확보한다는것이쉽지않기때문에대부분서버의성능향상에주안점을두게된다. 따라서보통기존서버에메모리를추가하거나 CPU 를더빠른것으로교체하여서버의성능향상을꾀하게된다. 그러나이는한시적인방법일뿐하드웨어상의한계에의해서벽에부딪히게된다. 이렇게되면결국방법은새로운하드웨어를추가하여계속늘려가는방법밖에는없다. 보통이렇게하드웨어를여러개이용하여성능향상을꾀하는것을 Clustering 이라고한다. 이는현재가장현실적이면서도성능향상에도움이되는해법으로많은사용자들이이용하고있다. 보통이런경우아래와같은시스템구조도를가지게된다. TmaxSoft 133
WebtoB 관리자안내서 WebtoB 그림 14-1. 클러스터링을한시스템 결국여러사용자가들어오는경우각각의서버들이일을나누어처리하게되는것이다. 이러한구조는현재많은곳에서이용하고있다. 이때, 가장중요한것은바로일을나누는것이다. 이와같이일을나누어처리하는방법을보통 Load Balancing 이라고부른다. 따라서많은사용자를처리하여야하는곳에서 WebtoB 를이용하는경우이 Load Balancing 이성능에중요한요소가된다. 이에본장에서는 Load Balancing 방법에대해서기술할것이다. 이들중 WebtoB 가없이도가능한것이있으나이들역시 WebtoB 를여러 Node 에설치하고이용할때필요한것이기때문에언급할것이다. 먼저, WebtoB 의 Load Balancing 기능없이구현가능한 Load Balancing 방법에대해서알아볼것이다. 이들은크게 Layer 4 switch 방법과 Domain Name Server 이용방법이다. 그리고이어서 WebtoB 의 Load Balancing 방법을직접적으로이용한방법을기술할것이다. 14.1 부하조절방법 14.1.1 Layer 4 Switch 를이용한부하조절 이방법은가장일반적이고도많이이용되는방법으로, Layer4 Switch 라는하드웨어장비를이용한방법이다. 이는사용자들의요구를 Layer4 Switch 라는장비가받아서자신에게연결되어있는서버들에게사용자의요구를나누는방법이다. 사용자의요구를 134 TmaxSoft
WebtoB WebtoB 관리자안내서 분배할때다양한알고리즘의적용이가능하며하드웨어장비를이용하므로속도도상당히빠르다. 14.1.1.1 L4 switch 의개념과종류 Layer 4 란 OSI 7-Layer 에서의 Layer 4 를의미하는것이다. 이는즉, Internet 의 WWW 에서 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 을하는경우에는 WebtoB 에선별도의설정이필요없다. 오로지 WebtoB 를 Layer 4 Switch 에연결하기만하면되는것이다. 물론, Layer 4 switch 에서약간의설정이필요하겠지만, 이는그리어렵지않을것이다. 또한성능자체도상당히만족할만한것이어서아주많이이용된다. 단, 고가의장비를구입하여야하는단점이있다. 이런 Load Balancing 에대한그림은다음과같다. 그림 14-2. L4 스위치를이용한 Load Balancing TmaxSoft 135
WebtoB 관리자안내서 WebtoB 장점 : 빠른속도, 다양한알고리즘가능 단점 : 고가의장비가필요함 14.1.2 DNS 를이용한부하조절 일반적으로사용자가서버에접속할때, browser 상에서는서버의도메인네임을적는다. 그러면 Domain Name Server 에서이이름을바탕으로이에해당하는 IP Address 를전달하고, 실제로 Browser 는이 Address 를가지고네트워크연결을맺는다. DNS 를이용한 Load Balancing 에서는이러한특성을이용하게된다. 즉, 사용자가특정도메인네임을적으면 Browser 가 DNS 에게이에해당하는 IP Address 를요청하게되는데이때, DNS 가 IP address 를나누어주는과정에서 Load Balancing 을수행할수있다. 간단한예를들면다음과같다. 사용자가 www.test.com 이라는도메인에접속을하고싶어한다고하자. 이때, 사용자가 Browser 에 www.test.com 이라는이름을적으면, Browser 는 Domain Name Server 에실제의 IP Address 를요구하게된다. 이때, www.test.com 이라는도메인에굉장히많은사용자들이접속을한다고하자. 이런경우에관리하는사람은당연히이많은사용자의요구를처리하기위하여여러개의서버를동시에관리할것이다. 이때, Domain Name Server 에 www.test.com 이란도메인네임으로각각의서버를등록할것이다. 만약관리자가 10 개의서버를이용한다면, DNS 에 10 개의서버를 www.test.com 이라는도메인네임으로등록할수있다. 이런등록은다음과같다. www.test.com 111.111.111.111 111.111.111.112 111.111.111.113 111.111.111.114 111.111.111.115 111.111.111.116 111.111.111.117 111.111.111.118 111.111.111.119 111.111.111.120 즉, www.test.com 이라는서버이름에 10 개의 IP Address 가등록이가능한셈이다. 이때, DNS 가약간의기능을가지고있다면각 IP Address 를사용자에게전달할때나누어서전달하는것이가능하게 136 TmaxSoft
WebtoB WebtoB 관리자안내서 된다. 즉, 첫번째사용자에게는 111.111.111.111 이라는 IP Address 를전달하고두번째사용자에게는 111.111.111.112 이라는 IP Address 를전달하게되는것이다. 이런식으로하면사용자가요구할때마다다른 IP Address 를전달하게되고, 자연스럽게 Load Balancing 이이루어지는것이다. 이는물론별도의하드웨어장비없이이루어지는것이라비용면에서도많은이득을볼수있다. 하지만단점이있다면 DNS 에직접등록을하거나직접관리를해야하는어려움이있다. 또한 Layer 4 Switch 같이다양한알고리즘을구사하기위해서는고가의추가장비가필요로하게된다. 이에대한그림은다음과같다. 그림 14-3. DNS 를이용한 Load Balancing 장점 : 쉽게 Load Balancing 이구현가능 단점 : 간단한알고리즘만가능, DNS 의관리를필요로함 앞의두가지방법은 WebtoB 의 Load Balancing 기능을이용하지않고 Load Balancing 을구현한방법이다. 이들은 WebtoB 의특별한설정없이도 Load Balancing 을구현할수있고또좋은성능을낼수있기때문에실제로많이이용된다. 그러나앞에서도설명했듯이이들은고가의장비를필요로하거나추가장비의관리등이부가적으로 TmaxSoft 137
WebtoB 관리자안내서 WebtoB 필요하게된다. 이런일련의것들은관리자에게큰부담으로작용할수있다. 따라서이어지는절에서는 WebtoB 의기능을이용하여부하조절을구현하는방법을설명할것이다. 14.1.3 Front-end WebtoB 를이용한부하조절 관리자가여러개의 WebtoB 를설치하고이들의부하를조절하려할때문제가되는것은어떤것이각각의 WebtoB 들에게요구를나누어주는가하는문제이다. 앞에서설명한방법들은모두 WebtoB 에접속하기이전에사용자의요구가나누어져서들어오는방법이므로관리자는이에대한고민은하지않아도된다. 하지만만약앞에서설명한방법을구현하기위한도구들이없는경우에는서버들이모여있는곳에서누군가사용자의요구를분배하여야하는문제가생긴다. 이런문제를해결하기위하여 WebtoB 자체적으로사용자의요구를시스템성능에따라나누거나동적으로나누어줄수있는기능을가지고있다. 만약여러개의 WebtoB 가연결되어있다면하나의 WebtoB 가사용자의요구를받아서각각의 WebtoB 에사용자의요구를나누어전달하게된다. 이때보통이용되는분배방법은서버의 Load 를설정하여이에따라서사용자의요구를분배하는방식이다. 이경우는특히 Domain Name Server 에하나의 Web Server 만등록하여도 Load Balancing 을구현하는데전혀문제가없다. 사용자가특정 WebtoB Web Server 에접속을하면이 WebtoB 는자기와연결된각각의 WebtoB 에사용자의요구를분배하기때문이다. 이에대한그림은다음과같다. 138 TmaxSoft
WebtoB WebtoB 관리자안내서 14-4. WebtoB 를이용한 Load Balancing 14.1.3.1 시스템성능에따른부하조절 Node 의성능이나시스템상황에따라 Node 별로서비스처리량을달리하도록설정하는것이다. 이와같은부하조절이가능하기위해서는한서비스가여러 Node 에서지원되어야한다. 즉, 서비스의이중복사가이루어져야하는데, WebtoB 시스템에서서비스의이중복사는 Server Group 단위로이루어진다. 따라서시스템로드는 Server Group 별로설정된다. SVRGROUP 절 시스템성능에따른부하조절환경설정과관련하여 SVRGROUP 절에정의하는항목들은다음과같다. Server Group 이름 [,COUSIN=( SVRGROUP )] [,LOAD=load-value] COUSIN = literal 크기 : 255 자이내. TmaxSoft 139
WebtoB 관리자안내서 WebtoB COUSIN 절에입력되는항목은 Server Group 이름이다. 즉, Server Group 을두개이상의 Server Group 에서부하조절을할경우해당 Server Group 명을정의한다. Server Group 명은반드시이에해당하는절인 SVRGROUP 절에등록되어있어야한다. WebtoB 시스템의부하조절은기본적으로 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 와동일한환경을갖는다. *DOMAIN webtob1 Server Group 이중복사 를위한환경설정파일예제 *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 140 TmaxSoft
WebtoB WebtoB 관리자안내서 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 들보다많은서비스를처리하도록정의한다. 반대로 Node 의성능이저하된다면작은 Load 값을설정하여되도록적은서비스가처리되도록정의해야한다. 이와같이시스템성능에따라부하조절을원한다면 COUSIN 항목설정으로 Server Group 을이중복사한후각각의 Server Group 에대해적절한 Load 값을설정하면된다. 14.1.3.2 동적부하조절 동적부하분산은 Load 값을설정하지않거나 0 으로설정하며첫번째 Node 의시스템부하에따라자동적으로다음 Node 로서비스가분산되도록하는부하조절방법이다. 14.1.4 WebtoB 의부하조절기능설정시주의사항 WebtoB 에서 Load Balancing 을설정할경우다음사항에대해서주의하여야한다. NODE 절에서서비스할 Port 는각 Node 에동일하게설정해야한다. TmaxSoft 141
WebtoB 관리자안내서 WebtoB 서비스를제공할디렉토리가 Document Root 에포함되어있지않고각 Node 의물리적인디렉토리경로가다를경우에는 Alias 를설정해서 URI 와실제물리적인디렉토리를 Mapping 시켜주어야한다. Ex) /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 142 TmaxSoft
WebtoB WebtoB 관리자안내서 15 정리 이것으로 WebtoB 사용에필요한사항과환경설정, 관리, 보안, 성능향상등에대한설명을마치도록한다. 매뉴얼의부록에서는 WebtoB 환경설정의예제와각종기능의활용예, 환경설정레퍼런스에대한내용을중점적으로설명하고자한다. TmaxSoft 143
WebtoB 관리자안내서 WebtoB 부록 (APPENDIX) 매뉴얼본문에서예로들은환경파일과부족한부분, 각종예제코드와레퍼런스등을부록으로구성하였다. A. 환경설정 B. CGI 활용예 C. WBAPI D. Tmax 와의연동 E. WebtoB 환경설정레퍼런스 144 TmaxSoft
WebtoB WebtoB 관리자안내서 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", TmaxSoft 145
WebtoB 관리자안내서 WebtoB 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 = "www.tmax.co.kr", PORT = "8080", JSVPort = 9999, HTH = 1, SSLNAME = Y, SSLNAME = "ssl1", NodePort = 7777, RacPort = 3333, Timeout = 300, 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", LanguagePrio = "kr", 146 TmaxSoft
WebtoB WebtoB 관리자안내서 Admin = "tmax@tmax.co.kr", Listen = "192.168.0.1:5469,192.1.1.9: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 = "192.168.0.1: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 tpsvr SVGNAME = tpsvg, MinProc = 2, MaxProc = 5 TmaxSoft 147
WebtoB 관리자안내서 WebtoB *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 = "http://www.tmax.co.kr/permanent/", 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", CertificateKeyFile = "/usr/local/webtob/ssl/newreq.pem" 148 TmaxSoft
WebtoB WebtoB 관리자안내서 *ERRORDOCUMENT 403 Status = 403, URL="http://www.tmax.co.kr/403.html" 404 Status = 404, URL="http://www.tmax.co.kr/404.html" *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 WebtoB 와 JEUS 연동환경설정예 WebtoB 와 JEUS 또는내장 Servlet Engine 과의연동설정은아래 WebtoB 환경파일을기준으로각각다음과같다. *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 TmaxSoft 149
WebtoB 관리자안내서 WebtoB MyGroup SVGNAME = jsvg, Minproc = 4, MaxProc = 10 *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 A.2.1 JEUS 연동환경설정 <<WEBMain.xml>> <!-- JEUS 4 의설정파일 --> <?xml version="1.0"?> <!DOCTYPE web-container PUBLIC "-//Tmax Soft., Inc.//DTD WEB Main Config 4.0//EN" "http://www.tmaxsoft.com/jeus/dtd/4.0/web-main-config.dtd"> <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> 150 TmaxSoft
WebtoB WebtoB 관리자안내서 <!-- --> </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> <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> TmaxSoft 151
WebtoB 관리자안내서 WebtoB <webtob-address>192.168.1.43</webtob-address> <!-- WebtoB 와 JEUS 가같은머신에있을때아래와같이 <webtob-home> 을설정한다. --> <webtob-home>/data3/gloria/webtob</webtob-home> <registration-id>mygroup</registration-id> <thread-pool> <min>4</min> <max>10</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> A.2.2 내장 Servlet Engine 연동환경설정 <<WEBMain.xml>> <!-- JEUS 5( 내장 servlet engine) 의설정파일 --> <?xml version="1.0"?> <web-container xmlns="http://www.tmaxsoft.com/xml/ns/jeus"> <context-group> <group-name>mygroup</group-name> <group-docbase>webapps</group-docbase> <print-error-to-browser>true</print-error-to-browser> <webserver-connection> <webtob-listener> <webtob-home>/data2/wbqam/webtob</webtob-home> <listener-id>webtob1</listener-id> <port>9900</port> <output-buffer-size>8192</output-buffer-size> <thread-pool> <min>4</min> <max>10</max> <step>1</step> <max-idle-time>30000</max-idle-time> 152 TmaxSoft
WebtoB WebtoB 관리자안내서 </thread-pool> <webtob-address>localhost</webtob-address> <registration-id>mygroup</registration-id> </webtob-listener> </webserver-connection> </context-group> <session-cluster> <session-routing>false</session-routing> </session-cluster> </web-container> TmaxSoft 153
WebtoB 관리자안내서 WebtoB B. CGI 활용예 B.1 소개 단순히보여주기위한 HTML 에서진일보한형태인 CGI 의동작과정은다음과같다. HTML 문서중사용자에대해동적으로반응해야하는부분이있다면, 이부분은마치 C 언어의함수처럼특정한방식으로응용프로그램을호출하게된다. 이응용프로그램은필요한동작을수행하고그결과를다시보내주면, 이결과가화면에나타나마치웹페이지가원하는요구를알아서처리해준것처럼보이는것이다. 게시판을예로들어보자. 우리가글을남길수있는웹상의게시판들은우리가쓴글을데이터로받은다음이데이터를이용해다시 HTML 문서를만들어브라우저에게전달해준다. 즉, 게시판에있어서 CGI 의역할은우리가자판으로치는문자를 HTML 문서로변환하는역할을하는것이다. 브라우저는이미작성된 HTML 을보여주는역할만하는것이므로미리작성하여준화면만을보여줄수밖에없는데 CGI 를통해우리는이것에실시간으로접근하여글을남길수있는것이다. 즉, 게시판프로그램은웹페이지에직접쓸수있는 연필 과같은기능을하는것이다. 본장에서는 C 를이용한게시판과 Perl 을이용한방명록을예제로하여웹에서의 CGI 를이용한서비스를구현해보도록하겠다. B.2 C 를이용한게시판구현 유닉스환경하에서 C 를이용한게시판작성을예제로한다. 간단한글과주소를남길수있는이웹페이지는 board.html 에서 board.cgi 를호출함으로써구현한다. 154 TmaxSoft
WebtoB WebtoB 관리자안내서 B.2.1 환경파일작성 < sample_cgi.m> #Configuration file ( sample_cgi.m ) *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> TmaxSoft 155
WebtoB 관리자안내서 WebtoB <FORM METHOD=post ACTION="/cgi-bin/board.cgi"> <TABLE WIDTH=500 BORDER=0> <TR> <TD>Writer</TD> <TD><INPUT NAME=writer SIZE=20></TD> </TR> <TR> <TD>Title</TD> <TD><INPUT NAME=title SIZE=50></TD> </TR> <TR> <TD COLSPAN=2><B>Contents</B></TD> </TR> <TR> <TD COLSPAN=2> <TEXTAREA NAME=doc COLS=60 ROWS=10></TEXTAREA> </TD> </TR> <TR> <TD>E-Mail</TD> <TD><INPUT NAME=email SIZE=40></TD> </TR> <TR> <TD>Home Page</TD> <TD> <INPUT NAME=homepage SIZE=40 VALUE="http://"> </TD> </TR> </TABLE> <BR> <INPUT TYPE=submit VALUE=" Submit "> <INPUT TYPE=reset VALUE=" Clear "> </FORM> </BODY> </HTML> 156 TmaxSoft
WebtoB WebtoB 관리자안내서 B.2.3 CGI 소스코드작성 # 첨부 3: board.c <board.c> #include "qdecoder.h" int strcheck(char *str) { /* 문자열이 NULL 이거나길이가 0 인지체크 */ if (str == NULL) return 0; if (strlen(str) == 0) return 0; } return 1; int main(void) { char *name, *title, *doc; char *email, *homepage; /* 입력값들을얻어냄 */ name = qvalue("writer"); title = qvalue("title"); doc = qvalue("doc"); email = qvalue("email"); 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(email)) if (!qcheckemail(email)) qerror("type Your E-Mail!"); if (strcheck(homepage)) if (!qcheckurl(homepage)) TmaxSoft 157
WebtoB 관리자안내서 WebtoB qerror("type Your Homepage URL!"); /* 여기서게시판에추가합니다. */ /* 처리결과출력 - 입력확인 */ qcontenttype("text/html"); printf("<html>\n\n"); printf("<head><title>cgi Board TEST</TITLE></HEAD>\n\n"); printf("<body>\n"); printf("<h2> CGI Board TEST </H2>\n"); printf("<hr WIDTH=600 ALIGN=left>\n<BR>"); if (strcheck(email)) printf("<a HREF=\"mailto:%s\">%s</A>",email,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 을시스템에맞게수정한다. 158 TmaxSoft
WebtoB WebtoB 관리자안내서 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 가깔려있어야한다.) $ 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. WebtoB 를기동한후, 브라우저를띄우고게시판을호출해본다. http://192.168.63.2:8080/board.html (IP address 는현재 WebtoB 가구동되고있는머신의것을쓴다. ) 8. 실행한화면은다음과같다. TmaxSoft 159
WebtoB 관리자안내서 WebtoB 그림 B-1. C 를이용한게시판입력화면 위와같이내용을입력하고 submit 버튼을누르면 board.cgi 가호출되어아래와같이게시판에입력된화면을만들어준다. 160 TmaxSoft
WebtoB WebtoB 관리자안내서 그림 B-2. C 를이용한게시판결과화면 B.3 PERL 을이용한게시판구현 Perl 이란언어는스크립팅언어이다. 따라서컴파일과정이필요없이바로수행이가능하기때문에프로그램의작성과디버깅이매우쉽다. 이런이유로스크립팅언어가선호된다. Perl 은무료로다운로드가능하다. Perl 을사용하기위한기초준비작업은여기서다루지는않겠다. 여기서는 WebtoB 에서 Perl 을기동하기위한환경파일과 Perl 로구현한방명록을담았다. B.3.1 환경파일작성 <sample_perl.m> #Configuration file ( sample_perl.m ) *DOMAIN webtob1 *NODE TmaxSoft 161
WebtoB 관리자안내서 WebtoB webmain WEBTOBDIR = "/usr/local/webtob", SHMKEY = 72000, HTH=1, DOCROOT = "/usr/local/webtob/docs", PORT = "9989" *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/docs/cgi-bin/" B.3.2 Perl 스크립트작성 #guestbook.cgi <guestbook.cgi> #!/usr/local/bin/perl # 기준 URL ( 보통홈페이지주소 ) $Base_href = 'http://webmain.tmax.co.kr:9081/'; # $base_href 를기준한이화일의 path $Cgi_file = 'cgi-bin/guestbook.cgi'; # lock 디렉토리 path $Lock_dir = 'lock/guestbook'; # BBS 데이타가담기는화일 $Bbs_file = 'book_data'; # 링크할제목 162 TmaxSoft
WebtoB WebtoB 관리자안내서 $Link_name = 'Back to Home'; # 링크할 URL ($base_href 기준 ) $Link_url = './'; # 제목 $Bbs_title = 'Guest Book'; # 관리자이름 $Bbsmaster_name = 'webtob'; # 관리자 email 주소 $Bbsmaster_email = 'webotb@tmax.co.kr'; # 각메시지의최대크기 (byte) (SPAM 방지용 ) $Max_msg_size = 8000; $Titlecolor = '#800080'; $Bgcolor = '#fafff8'; $Textcolor = '#000000'; $Linkcolor = '#401080'; $Bbs_write_title = 'WRITE'; $Bbs_read_title = 'READ'; $Rem_name = ''; $Rem_email = ''; $Rem_msg = ''. ''. ''; $Btn_write = 'Send'; $Btn_read_old = 'Old Message'; $Btn_read_new = 'New Message'; $Rem_bbs_end = 'End of Messages'; $Rem_bbs_back = 'Go Top'; $Bbs_logo = ''; $Bbs_logo_addr = 'http://'; $Delimiter = chr(30); $Prev_num_skip = 0; TmaxSoft 163
WebtoB 관리자안내서 WebtoB ##### 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; &show_bbs; &show_read_form; &show_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 file"); @Bbs = <IN>; close (IN); } sub read_form { %Form = &read_input; } $Name = $Form{'name'}; $Email = $Form{'email'}; $Msg = $Form{'msg'}; $Num_each = $Form{'num_each'}; $Num_skip = $Form{'num_skip'}; 164 TmaxSoft
WebtoB WebtoB 관리자안내서 sub remove_html_tags { $Name =~ s/\&/\&/g; $Name =~ s/\</\</g; $Name =~ s/\>/\>/g; $Email =~ s/\&/\&/g; $Email =~ s/\</\</g; $Email =~ 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 $Msg =~ s/\n/<br>/g; # LF -> <BR> sub new_msg { my ($access_time) = &clock; # get date and time my ($new_msg); my ($site) = ($ENV{'REMOTE_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!= 0) { chop $Msg; } } if ($Email!~ /([\w\-]+\@[\w\-+\.]+[\w\-]+)/) { } $Email = ""; # check valid email address format $new_msg = "$Name". $Delimiter. # name "$Email". $Delimiter. # email address "$site". $Delimiter. # ip_address "$access_time". $Delimiter. # access time "$Msg". "\n"; # message TmaxSoft 165
WebtoB 관리자안내서 WebtoB } @Bbs = ($new_msg, @Bbs); 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 OUT @Bbs; 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; <a name="write"> </a> <FONT COLOR="#800080" SIZE="+1"> <B>$Bbs_write_title</B></FONT> 166 TmaxSoft
WebtoB WebtoB 관리자안내서 <P> <FORM ACTION=\"$Cgi_file\" METHOD=\"POST\"> <B>Name</B> $Rem_name<BR> <INPUT NAME="name" TYPE="text" SIZE = "40" MAXLENGTH="64"> <P> <B>Email address</b> (optional) $Rem_email<BR> <INPUT NAME="email" TYPE="text" SIZE = "40" MAXLENGTH="72"> <P> <B>Message</B> $Rem_msg<BR> <TEXTAREA 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" VALUE="$Prev_num_skip"> </FORM> </td> <td> <FORM ACTION=\"$Cgi_file\" METHOD=\"POST\"> TmaxSoft 167
WebtoB 관리자안내서 WebtoB <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 ; } sub show_bbs { local( $bbs_no, $serial_no, @show_bbs, @data, $temp_email, 168 TmaxSoft
WebtoB WebtoB 관리자안내서 $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; # first serial No. @show_bbs = splice(@bbs, $Num_skip, $Num_each); # displayed msgs while (@show_bbs) { @data = split (/$Delimiter/, shift(@show_bbs)); TmaxSoft 169
WebtoB 관리자안내서 WebtoB # use slice of message file print "[ $serial_no ] <B>"; print shift(@data); # $Name print '</B>'; if ($temp_email = shift(@data)) { # $Email print "<<a href=\"mailto:$temp_email\">$temp_email<\/a>>"; } print ' from '; print shift(@data); # $ip_address print ' at '; print shift(@data); # $access_time print ' <P>'; $temp_msg = shift(@data); $temp_msg =~ s/(http:\/\/)([\w\+\- \/\=\?\.\~\:\&\;\#]+)/<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"; } sub show_footer { print <<END_OF_HTML; <A HREF="$Link_url">$Link_name</A> <HR> <I>BBS Master : $Bbsmaster_name / <A HREF="mailto:$Bbsmaster_email">$Bbsmaster_email</A></I> 170 TmaxSoft
WebtoB WebtoB 관리자안내서 <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) ######## sub read_input { local ($buffer, @pairs, $name, $value, %FORM); if ($ENV{'REQUEST_METHOD'} =~ /^post$/i) { read(stdin, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/, $buffer); foreach (@pairs) { ($name, $value) = split(/=/, $_); $value =~ tr/+/ /; $value =~ s/%([a-fa-f0-9][a-fa-f0-9])/pack("c", hex($1))/eg; $FORM{$name} = $value; } return %FORM; } sub clock { my ($date); @days = ('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; } TmaxSoft 171
WebtoB 관리자안내서 WebtoB $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=\"http://heartkorea.com/\"><I>Guest 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'; } sub fileunlock { my ($lockdir) = @_; -d $lockdir return 'FAIL'; rmdir ($lockdir) && return 'OK'; return 'FAIL'; } #### end of program ######################################## 172 TmaxSoft
WebtoB WebtoB 관리자안내서 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. 시스템을기동한후브라우저에서다음과같이요청한다. http://ip address:port/cgi-bin/guestbook.cgi 8. 실행된화면은아래와같다. TmaxSoft 173
WebtoB 관리자안내서 WebtoB 그림 B-3. Perl 을이용한게시판입력화면 위와같은방명록화면이뜬다면, 요구하는정보를간단히쓴다음 Send 버튼을눌러방명록에기록을남겨보자. 이제 guest 2 가남긴말위에 webtob 가남긴말이추가될것이다. 실행된화면은다음과같다. 174 TmaxSoft
WebtoB WebtoB 관리자안내서 그림 B-4. Perl 을이용한게시판결과화면 방문자들이남긴글은 book_data 파일에남는다. TmaxSoft 175
WebtoB 관리자안내서 WebtoB C WBAPI C.1 WBAPI List 이장에서는 WebtoB 가제공하는 WBAPI 의목록과각각의기능에대해서알아볼것이다. 이는차후버전을거듭할수록추가되고늘어날것이다. 물론과거에발표된 WBAPI 에대한호환성도제공한다. 따라서만약사용자가차후에새로운버전을구입하게된다면추가로등록된 WBAPI 를확인하는것도사용자가원하는프로그램을작성하는데많은도움이될것이다. C.1.1 INIT/DONE API INIT/DONE 계열의함수는개발자가서비스를시작하기전의초기화과정이나서비스프로세스종료시수행되어야할루틴을수행한다. 함수이름기능 wbsvrinit() 서버를초기화한다. wbsvrdone() WebtoB 의반환을알리는함수 C.1.2 ALLOC API ALLOC 계열의함수는사용자가메모리를할당하고해제한다. 함수이름기능 wbmalloc() wbfree() 사용자가 설정한 SIZE 만큼의 메모리를 할당한다. wbmalloc() 에 의해 할당된 메모리를 제거 (free) 176 TmaxSoft
WebtoB WebtoB 관리자안내서 C.1.3 GET API GET 계열의함수는사용자가 Request 한것에대하여사용자의정보를읽어들이는것으로사용자의 Request 의 Data, Method 정보값등을알아낸다. 함수이름기능 wbgetauthtype() 사용자의인증방식을얻어낸다. wbgetcontentlength() Client 가보낸 Content 의크기를얻어낸다. wbgetdocumentroot() WebtoB 의 Home 디렉토리의값을얻어낸다. wbgethdr() request 의 header 에서특정 key 에해당하는값을얻는다. wbgetdatehdr() Data 를표현하는 Header 를얻는다. wbgetinthdr() 지정된 Header 값을정수형태로얻는다. wbgetnthhdr() wbgethdrcount() wbgetdata() wbgetnthkey() Header 에서 N 번째에해당하는 Header 값을 얻는다. 사용자가보낸 request 의 Header 의총개수를얻는다. request 의 Data Field 에서 key 에해당하는값을얻는다. request 에서 N 번째의 key 에대한 data 를 얻는다. wbgetnthdata() request 의 data 에서 N 번째 data 를얻는다. wbgetdatacount() request 에서입력으로들어온 data 의숫자를 얻는다. TmaxSoft 177
WebtoB 관리자안내서 WebtoB wbgetvalue() request 에서특정 key 값의 N 번째 data 를 얻는다. wbkeyoccur() request 들어온 data 에서 key 값의수를얻는다. wbgetmethod() wbgetparseduri() request 로들어온 HTTP Method 를정수형으로읽어들인다. Client 로부터 Request 가들어온 URI 정보를얻어낸다. wbgetpathinfo() request 와관계된상대경로정보를얻어낸다. wbgetpathtranslated() request 와관계된절대경로정보를얻어낸다. wbgetquerystring() request URL 로부터질의어문자열을얻어낸다. wbgetprotocol() request 와관계된 Protocol 정보를얻어낸다. wbgetremoteuser() request 하는사용자의이름을얻어낸다. wbgetrequesturi() request 의 URI 를얻어낸다. wbgetremoteaddr() request 한 Remote Host 의 IP 를얻어낸다. wbgetremotehost() request 하는 Remote Host 의이름을얻어낸다. wbgetremoteident() wbgetreqline() Server 로부터검색된사용자의 name 을얻어내는데사용된다. request 에들어온 line 의첫번째 line pointer 를얻는다. wbgetfilename() 파일의이름을알아낸다. wbgetfilelen() 파일의크기를알아낸다. 178 TmaxSoft
WebtoB WebtoB 관리자안내서 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 가문제없이수행된다. TmaxSoft 179
WebtoB 관리자안내서 WebtoB 함수이름기능 wbputhdr() response 의 Header 를설정한다. wbputinthdr() Response 의 Header 를추가한다. wbsetstatus() request 의 status 의값을설정한다. wbputstr() string 값을출력한다. wbput() 특정 size 만큼의 data 를출력한다. wbprint() 사용자가지정한내용을출력한다. wbputfile() file download 를위한함수, 특정파일을읽어들여모두브라우저로보내준다. wbputpartialfile() file download 를위한함수로특정파일의 일부분 을읽어서브라우저로보내준다. File 의 offset 부터 size 만큼읽어서들여보내준다. size 가 0 이면파일끝까지읽어보내준다. C.1.5 SEND API SEND 계열은사용자의 request 에대한응답으로 PUT 계열함수를사용하여 WBSVCINFO 구조체에서비스처리결과를저장한것을브라우저에리턴하는함수이다. 함수이름기능 wbflush() 현재버퍼에있는모든내용을 write 하게한다. wbsenderror() 상태코드의 Error 여부를확인한다. wbsendredirect() 지정된주소로응답을되돌려준다. wbreturn() WebtoB 의반환을알리는함수 180 TmaxSoft
WebtoB WebtoB 관리자안내서 C.1.6 COOKIE API COOKIE 계열함수는 HTTP 스타일의 Cookie 를생성하고, 읽고처리하기위한작업을수행한다. 함수이름기능 wbcreatecookie () 새로운 cookie 를만든다. wbgetcookie() 브라우저에의해보내진 cookie 중에서원하는 cookie 를리턴한다. wbputcookie() 지정된 cookie 에응답을덧붙인다. wbcookiegetdomain () 지정된 cookie 에서도메인을리턴한다. wbcookiegetname() 지정된 cookie 의 Name 을리턴한다. wbcookiegetpath() cookie 의경로를리턴한다. wbcookiegetvalue() cookie 의값을리턴한다. wbcookiegetversion() cookie 의버전을리턴한다. wbcookiesetcomment() cookie 의주석필드를설정한다. wbcookiesetdomain() cookie 의 Domain 을설정한다. wbcookiesetmaxage() cookie 의수명시간을설정한다. wbcookiesetpath() cookie 를위한경로를설정한다. wbcookiesetsecure() cookie 가 SSL 과같이보호되는프로토콜에서전송되어야하는지를설정. wbcookiesetvalue() cookie 에새로운값을설정한다. wbcookiesetversion() cookie 에새로운버전을설정한다. TmaxSoft 181
WebtoB 관리자안내서 WebtoB C.1.7 SESSION API SESSION 계열함수는 Session 을생성하고, Session 의고유정보를얻어기타작업들을수행할수있도록한다. 함수이름기능 wbgetrequestedsessionid() 사용자에요청에의해명확해진 Session ID 를얻어낸다. wbgetsession() 생성된 Session 이없는경우 Session 을생성하고그 Session 값을얻어낸다 wbisrequestedsessionidvalid() 요청된 Session 이올바른 Session 이고현재사용중이라면 true 값을얻어낸다. wbsessiongetid() Session 에할당된유일한 ID 얻는다 wbsessiongetvaluenames() 이 Session 에바인딩된모든객체의이름을포함하는배열을얻어낸다. wbsessiongetcreationtime() wbsessiongetvalue() wbsessionsetvalue() wbsessionisnew() wbsessionremovevalue() Session 이생성된시간을얻어낸다 Session 에바인딩된객체의값과이름을얻어낸다. Session 에지정된객체의값과이름을바인딩한다. Session 이새로운것인지아닌지나타내는값을얻어낸다. 지정된이름에바인딩된객체를제거한다. WbSessionInvalidate() Session 을무효화한다. 182 TmaxSoft
WebtoB WebtoB 관리자안내서 wbsessiongetmaxinactiveinterval() wbsessionsetmaxinactiveinterval() wbsessiongetlastaccesstime() Session 에설정된 session 유지시간을얻어낸다. 지정된 Session 에 session 유지 시간을설정한다. Client 가마지막으로요청을보낸시간을얻어낸다. C.1.8 ETC API ETC 계열함수는 WebtoB 에 File Upload 수행하거나 WebtoB Error Number 를얻을수있다. 함수이름기능 wbgeterrno() WebtoB 의 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 *email, *homepage; TmaxSoft 183
WebtoB 관리자안내서 WebtoB /* 입력값들을얻어냄 */ name = qvalue("writer"); title = qvalue("title"); doc = qvalue("doc"); email = qvalue("email"); homepage = qvalue("homepage"); /* 입력값들이올바른지검사 */ if (!strcheck(name)) qerror(" 이름을입력하세요."); if (!strcheck(title)) qerror(" 글제목을입력하세요."); if (!strcheck(doc)) qerror(" 본문을입력하세요."); if (strcheck(email)) if (!qcheckemail(email)) qerror("e-mail 주소를정확히입력하세요."); if (strcheck(homepage)) 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(email)) printf("<a HREF=\"mailto:%s\">%s</A>", email, else printf("%s", name); if (strcheck(homepage)) homepage, homepage); printf("<small>(<a HREF=\"%s\">%s</A>)</SMALL>", printf(" 올리신글은다음과같습니다.<BR><BR>\n"); printf("<table WIDTH=600 BORDER=1>\n"); 184 TmaxSoft
WebtoB WebtoB 관리자안내서 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 함수를통하여이루어진다. 위의프로그램에있는여러함수들은거의 C 언어에서기본적으로제공하는것이고, qvalue 나 strcheck 등의처리함수들은입력변수의값을읽어오거나, 변수값이맞는것인지분석하는함수들이다. 이역시간단한 Library 형태로지원된다. 위의 CGI 프로그램을분석하면다음과같다. 이 CGI 프로그램에서는 writer, title, doc, email, homepage 란변수를이용한다. 따라서사용자는이들변수의값을전달해줄것이다. 아래의프로그램은사용자가전달한값을 CGI 프로그램에서인식하기위하여분리하는과정이다. 각각의변수에 qvalue 라는함수를이용하여값을읽어냄을알수있다. name = qvalue("writer"); title = qvalue("title"); doc = qvalue("doc"); email = qvalue("email"); homepage = qvalue("homepage"); 위에서각각의변수값을읽어낸후, 아래의 strcheck 함수를통해서각각의변수값이모두입력되었는지확인한다. if (!strcheck(name)) qerror(" 이름을입력하세요."); TmaxSoft 185
WebtoB 관리자안내서 WebtoB if (!strcheck(title)) qerror(" 글제목을입력하세요."); if (!strcheck(doc)) qerror(" 본문을입력하세요."); if (strcheck(email)) if (!qcheckemail(email)) qerror("e-mail 주소를정확히입력하세요."); if (strcheck(homepage)) if (!qcheckurl(homepage)) qerror("homepage URL 을정확히입력하세요."); 위의함수들을모두정상적으로수행하였다면 CGI 로전달된사용자의변수값이모두이상이없다는것일것이다. 이제게시판의값을올리고출력형태를만들어야한다. 아래의함수는이 CGI 프로그램이제공하는출력형태가 HTML 임을나타내고있다. qcontenttype("text/html"); 그리고 printf 함수를통하여결과값을만들어내는작업을수행한다. 이는 HTML 문서를실제로 Editing 하는것과거의같다. 다음을보면 printf 함수를통해서 HTML Tag 를만들어냄을알수있다. printf("<html>\n\n"); printf("<head><title>bestbook 게시판 글올리기확인 </TITLE></HEAD>\n\n"); printf("<body>\n"); printf("<h2> Bestbook 게시판 글올리기확인 </H2>\n"); printf("<hr WIDTH=600 ALIGN=left>\n<BR>"); if (strcheck(email)) printf("<a HREF=\"mailto:%s\">%s</A>", email, 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"); 186 TmaxSoft
WebtoB WebtoB 관리자안내서 printf("</body>\n\n</html>"); 이제이프로그램과똑같은기능을하는 WBAPI 프로그램을만들어보자. 구조적인것은 CGI 프로그램과같다. 먼저, 각각의변수에대한값을읽어내야한다. 위에서는 qvalue 라는함수를통하여이루어졌는데, WBAPI 에서는 wbgetdata 라는함수를통하여이루어진다. 아래의함수들은위의 CGI 에서 qvalue 를통해서수행된것을그대로수행하는것이다. 결국각각의변수값을읽어들이게된다. writer = wbgetdata(rqst, "writer"); title = wbgetdata(rqst, "title"); doc = wbgetdata(rqst, "doc"); email = wbgetdata(rqst, "email"); homepage = wbgetdata(rqst, "homepage"); 위에서읽어들인값을 check 하는것은 strcheck 를이용하면된다. 위의상황과같기때문에생략하겠다. 그리고 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"); TmaxSoft 187
WebtoB 관리자안내서 WebtoB (2 번 ) wbprint(rqst, "<HTML>\n\n"); wbprint(rqst, "<HEAD> <TITLE> webtob Write Board </TITLE> </HEAD>\n\n"); wbprint(rqst, "<BODY>\n"); wbprint(rqst, "<H2> Bestbook</H2>\n"); wbprint(rqst, "<H3>Writer is%s </H3> \n",writer); wbprint(rqst, "<H3>Title is%s </H3> \n",title); wbprint(rqst, "<HR>\n"); wbprint(rqst, "<H2> %s </H2> \n",doc); wbprint(rqst, "<H3> newvalue :%s%d</h3> \n",hd,rt); wbprint(rqst, "<HR ALIGN=left>\n<BR>"); wbprint(rqst, ".<BR><BR>\n"); wbprint(rqst, "<TABLE WIDTH=600 BORDER=1>\n"); wbprint(rqst, "</TABLE>\n\n<BR>.\n"); wbprint(rqst, "</BODY>\n\n</HTML>"); 위의모든작업이끝나면결과가끝났다는것을마지막에 return 대신에 wbreturn 을수행하는것으로 WebtoB 에전달한다. wbreturn(rqst, WBSUCCESS); 괄호안의 WBSUCCESS 나타낸다. 는결과가성공적으로수행되었다는것을 188 TmaxSoft
WebtoB WebtoB 관리자안내서 D Tmax 와의연동 D.1 Tmax 연동을위한클라이언트프로그램작성 본문 [8.4.2 Tmax 연동을위한환경파일 ] 에서제시한 apsl.m 에대한클라이언트프로그램을아래에제공한다. 본예제는 Tmax 의 sample 서버프로그램인 svr2 의 TOUPPER 서비스를이용하는클라이언트프로그램으로서, wbsession.c 와 wbquery.c 로이루어져있으며 wbquery.c 에 tmax.env 의경로를지정해주어야한다. Tmax 는별도로설치해야하며, Tmax 사용과 sample 서버 svr2 의이용에대해선 Tmax 매뉴얼을참조해야한다. <<wbsession.c>> #include <stdio.h> #include <string.h> #include "../usrinc/wbapi.h" 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, WBSUCCESS ); } TmaxSoft 189
WebtoB 관리자안내서 WebtoB <<wbquery.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>" ); if( query!= NULL ) { wbprint(rqst, "<H1>send Data: %s <br></h1>", name); } else { wbprint( rqst, "<H1>QUERY is null</h1>" ); } 190 TmaxSoft
WebtoB WebtoB 관리자안내서 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)) == TmaxSoft 191
WebtoB 관리자안내서 WebtoB 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, &rcvlen, 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.env>> [TMAX] TMAXDIR=/data1/gloria/tmax TMAX_HOST_ADDR=192.168.1.43 TMAX_HOST_PORT=7979 SDLFILE=/data1/gloria/tmax/sample/sdl/tmax.sdl FDLFILE=/data1/gloria/tmax/sample/fdl/tmax.fdl 192 TmaxSoft
WebtoB WebtoB 관리자안내서 TMAX_CONNECT_TIMEOUT=2 [TMAX] TMAXDIR=/data1/gloria/tmax TMAX_HOST_ADDR=192.168.1.43 TMAX_HOST_PORT=7979 SDLFILE=/data1/gloria/tmax/sample/sdl/tmax.sdl FDLFILE=/data1/gloria/tmax/sample/fdl/tmax.fdl TMAX_CONNECT_TIMEOUT=2 D.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 TmaxSoft 193
WebtoB 관리자안내서 WebtoB #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 = -laps -lcli #ibm #LIBS = -laps -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) 194 TmaxSoft
WebtoB WebtoB 관리자안내서 @rm -f *.o @rm -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 c) export COMP_TARGET=$2 make -f Makefile.c;; api) export COMP_TARGET=$2 make -f Makefile.api;; pc) export COMP_TARGET=$2 make -f Makefile.pc all;; clean) make -f Makefile.pc clean;; *) echo "Usage: $0 argument";; esac 실행예 ) $ compile c wbsession $ compile c wbquery D.3 Tmax 연동실행 위예제를이용하여 Tmax 다음과같다. 와의연동을실행해보기위한순서는 TmaxSoft 195
WebtoB 관리자안내서 WebtoB 1. WebtoB 환경파일 Compile $ wscfl i apsl.m 2. Service Table 생성 $ wsgst 3. 클라이언트프로그램컴파일 $ compile c wbsession $ compile c wbquery 4. Tmax 의서버프로그램컴파일 $ compile c svr2 5. Tmax 기동 $ tmboot 6. WebtoB 기동 $ 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> 196 TmaxSoft
WebtoB WebtoB 관리자안내서 < 그림 D-1. toupper.html> < 그림 D-2. TOUPPER 서비스결과화면 > TmaxSoft 197
WebtoB 관리자안내서 WebtoB E WebtoB 환경설정레퍼런스 E.1 소개 이부록에서는 WebtoB 환경설정파일에서사용되는모든항목에대해서상세하게설명이되어질것이다. 아래의각절에대해서설명이이루어질것이다. *DOMAIN *NODE *VHOST *SVRGROUP *SERVER *SERVICE *DIRECTORY *URI *ALIAS *DIRINDEX *LOGGING *AUTHENT *SSL *EXT *ACCESS *EXPIRES 198 TmaxSoft
WebtoB WebtoB 관리자안내서 각각의항목은 4 개의파트 ( 개요, 필수항목, 선택항목, 사용예 ) 로나누어서설명이되어질것이다. E.2 DOMAIN 절 E.2.1 개요 DOMAIN 절은독립적인 WebtoB 시스템의전반적인환경에대해정의하는부분이다. DOMAIN 의이름은호스트이름과함께암호화되어 WebtoB 의 License 확인에사용된다. 이제부터 DOMAIN 절의항목들에대해자세히살펴보겠다. DOMAIN 절의기본환경설정형식은다음과같이정의한다 : Domain name [,NliveInq] E.2.2 필수항목 Domain name = <string> string 형식으로정의한다. 31 자를초과하는이름을사용할경우에는컴파일에러는나지않으나내부적으로 31 자까지만인식하게된다. 31 자이내로이름을설정하게되어있는기타다른절들의항목에서도이점은동일하다. E.2.3 선택항목 NLiveInq = <numeric> (Default 30 Second) WebtoB 가여러 Node 로구성되었을경우 Node 간감시 Interval( 초단위 ) 시간을정하는항목이다. NLiveInq 시간이짧으면양 Node 간에빈번한감시로시스템의이상을빨리발견할수있으나많은통신량으로인해통신부하가발생할수있다. 반대로 NLiveInq 시간이너무길면통신량은적으나 Node 의이상상태를즉시감지할수없다. 따라서시스템성능을최적화하기위하여네트워크부하량, 업무의중요도등을고려하여야한다. TmaxSoft 199
WebtoB 관리자안내서 WebtoB E.2.4 DOMAIN 절의사용예 *DOMAIN Webtob1 NLiveInq = 30 E.3 NODE 절 E.3.1 개요 이절에서는 WebtoB 를이루는각 Node 들에대한구체적인환경설정이이루어진다. NODE 절에는다음과같은내용들이정의될수있다 : WebtoB 시스템의홈디렉토리 서비스할 HTML 문서들이들어있는디렉토리트리의최상위디렉토리. 실행할 WebtoB Process (HTH) 의개수 공유메모리의 Key 값 Port 번호설정 Listen IP Address 설정 기타 Logging 등. WebtoB 를기동시키면 Node 단위별로 WSM, HTL, HTH Process 와 HTML, CGI 등의실제서비스를수행하는 Server Process 들이기동된다. 이러한 Process 들을기동하기위해서는실행파일들이존재하는위치를알아야한다. 또한 WebtoB Process 간통신에필요한 Directory 와각종 Error 와경고메시지를저장하는 Directory 도지정할수있다. 그리고각항목별로지시자들의형태가기록되어있다. 이는보통 Literal, Numeric, String 등의형태로나타나는데, 이들의형태에맞게각항목을설정하여야한다. Literal 은보통하나의글자, Numeric 은숫자, String 은특정단어를말한다. NODE 절의기본환경설정형식은다음과같이정의한다. 200 TmaxSoft
WebtoB WebtoB 관리자안내서 Node name WEBTOBDIR= WebtoB-home-path, SHMKEY =shared-memory-segment-key, DOCROOT = WebtoB-html-root [,User][,Group][,Admin][,HostName][,Method] [,HTH][,NodePort][Port] [,SSLFlag][,SSLName][,JSVPort][,RacPort] [,TimeOut] [,CacheSize][,CacheEntry][,CacheRefreshHtml] [,CacheRefreshDir][,KeepAlive][,KeepAliveTimeout] [,KeepAliveMax][,AppDir][,PathDir][,TxLogDir] [,SysLogDir][,UsrLogDir][,IconDir][,UserDir] [,Errorlog][,EnvFile][,IndexName][,Listen] [,DirIndex][,Options][,LanguagePrio][,Logging] [,NodeType][,TcpGW][,NodeName][,MaxUser][,IPCPerm] [,ListenBacklog][,SendBufferSize] [,LimitRequestBody][,LimitRequestFields] [,LimitRequestFieldSize][,LimitRequestLine] [,ServerTokens][,IPCBasePort][,ErrorDocument] [,DefaultCharset][,DefaultMimetype][,Expires] [,ServiceOrder] E.3.2 필수항목 Node name = <string> string 으로정의한다. 31 자를초과하는이름을사용할경우에는컴파일에러는나지않으나내부적으로 31 자까지만인식한다. 먼저 Node 의물리적인이름으로 Node 이름을설정한다. 즉, 실제등록된 Host 의이름을말한다. 예를들어 UNIX 의경우 uname n 명령으로각 Host 의이름을확인할수있다. 또한해당 Node 명은반드시 /etc/hosts (Windows2000 : C:\WINNT\system32\drivers\etc\hosts) 파일에등록되어있어야한다. 하나의 Domain 은하나이상의 Node 로이루어지므로, NODE 절에는최소한하나이상의 Node 이름이정의되어야한다. WEBTOBDIR = <literal> Size : 255 이하 WebtoB 가설치되어있는홈 Directory 의절대경로명이다. 경로명은환경변수 WEBTOBDIR 과동일한값이정의되어야한다. WebtoB 관련작업은 WebtoB 디렉토리하에서모두이루어진다 TmaxSoft 201
WebtoB 관리자안내서 WebtoB bin/ : 실행파일들이위치 (wsm, wscfl, wsracd, wsgst, wsboot, wsdown, etc.) lib/ usrinc/ ap/ config/ : 라이브러리파일이위치 : API 함수들의 header 파일이위치 : 사용자프로그램이위치 : WebtoB 환경파일이위치 path/ : Process 내부통신을위한네임드파이프 (Named Pipe) 가생성 log/ : Log 파일들이위치 docs/ : WebtoB 에서기본적으로등록되는 html 문서위치 license/ : WebtoB License 파일이위치 이러한 bin, config, lib, docs, license, log, path 등의하부디렉토리구조를가지는상위 Directory 명을 WEBTOBDIR 에정의한다. SHMKEY = <numeric> (32768 ~ 262143) 공유메모리세그먼트 (Shared Memory Segment) 를가리키는값이다. WebtoB 를이루는 Process 들이서로정보를공유하기위해공유메모리 Key 값을정의할필요가있다. 공유메모리 Key 값을정의하기전에이 Key 값들이다른프로그램또는다른업무에서사용되는지반드시확인해야한다. 그렇지않으면 WebtoB Booting 시에이프로그램과충돌을일으켜서실행이되지않는다 현재 WebtoB 에서정의되는 Shared Memory 의 Key 값은최소 32768 에서최대 262143 까지이다. 따라서이범위내에있는값을이용하여야한다. DOCROOT = <literal> WebtoB 가웹을통해서비스하는모든문서를포함하는루트 Directory 의경로명이다. WebtoB 는 DOCROOT 가지정한 Directory 를최상위로하여문서를서비스하게된다. Client 가요구한 URL 은 DOCROOT 의경로뒤에추가되어실제경로명을이루게된다. WebtoB 는이경로명을가지고파일에접근한다. 디렉토리설정패턴에따라동적으로설정할수도있다. 202 TmaxSoft
WebtoB WebtoB 관리자안내서 E.3.3 선택항목 HTH = <numeric> (Default Number: 1, Max Number: 20) WebtoB 에서가장중요한역할을담당하고있는 HTH (HTTP Request Handler) Process 의개수를설정한다. HTH 는실제로클라이언트브라우저와 WebtoB 내부서비스프로세스사이를중계하는 Process 이다. 즉, Client 의요청을받아서비스를받을수있도록적당한 Process 에넘겨주고다시처리된결과를수신하여 Client 에게되돌려준다. WebtoB 에서는모든 Client 가이 HTH Process 에연결되도록설계되어있다. 따라서많은수의동시접속자를유지하기위해서는이수를적당히늘려주는것도필요하다. 그러나보통하나의 HTH Process 가적어도 800 개이상의 Client 를수용할수있기때문에하나의 HTH 로도큰문제는되지않을것이다. 만약 1000 명이상의동시 Client 를수용하여야하는 System 에서는두개이상의 HTH Process 를구동하여야한다. 현재 WebtoB 에서는최대 20 개까지의 HTH Process 를구동하는것이가능하다. PORT = <literal> (Default Port: 80) WebtoB 가 Listen 하는 Port 번호를설정한다. 이는기본적으로 Web 서비스를하기위해서는반드시필요한설정으로, 이항목은반드시존재하여야한다. 보통일반적인 Web Server 는 80 Port 를이용한다. 그러므로이항목을설정하지않았을경우에는 default 로 80 Port 가설정된다. 그러나임의의 Port 를설정하여이용할수도있다. Virtual Host 를사용하는경우, Port 번호는 VHOST 절에서재정의해야한다. 또한, WebtoB 의경우여러개의 Port 를동시에정의하는것도가능하다. 현재는최대 100 개까지의 Port 를동시에설정하는것이가능하다. 즉, PORT 의설정을통해서여러개의 Port 가동시에 Listen 하는것이가능하다는것이다. 이에대한간단한예는다음과같다. PORT = 9090,9091 위와같은 Setting 이이루어지면 WebtoB 는 9090 과 9091 Port 에서모두 Web 서비스를받아들일수있다. 참고 : 한가지주의할점은이것은 Listen 항목과동시에운영할수없다는것이다. Listen 항목에서특정 Port 를지정하는경우이 Port 만을이용하게된다. 즉, 중요한것은 Listen 항목에서지정된 TmaxSoft 203
WebtoB 관리자안내서 WebtoB Port 가 PORT 항목에서지정된것보다우선된다는것이다. 물론 Listen 항목에서도여러개의 Port 를지정하는것이가능하다. 이에대한예는 Listen 항목의설명에서할것이다. User 와 Group 설정 WebtoB 에서는시스템의보안을위하여 WebtoB 의실제실행 Process 에대한권한설정을할수있게하였다. 만약 Web Server 의실행 Process 들이 root 권한으로실행되는경우, 이에문제가발생하게되면시스템전체에큰피해를주게될수도있다. 따라서, WebtoB 에서는이를방지하고자 WebtoB 의실행 Process 들을 root 권한이아닌다른권한으로실행할수있게하였다. 그러나이러한실행권한의변환은 root 만이가능하기때문에이를설정하기위해서는반드시 root 로작업을하여야한다. 또한, 자신이설정하고자하는 user 와 group 이시스템에설정되어있어야한다. 이에대한사항은자신이운영하는운영체제의 Manual 을참조하기바란다. 단, 윈도우의경우서비스로등록후 ( WebtoB 설치안내서 참조 ) 시작 설정 제어판 관리도구 서비스로이동한후서비스로등록된 webtob 의등록정보에서임의의계정을로그온계정으로지정해주면된다. 204 TmaxSoft
WebtoB WebtoB 관리자안내서 < 그림 E-1.WebtoB 로그온계정지정 > User = <string> 설정된 User 의권한으로 WebtoB 는요구를수행하게된다. Client 요구실행을위해따로 User 이름을설정하는것을권장한다. 꼭필요하지않다면 root 권한설정을피하도록한다. 이항목은 NT OS 에서는지원하지않으므로 Unix 계열의 OS 에서만적용이가능하다. Group = <string> 설정된 Group 의권한으로 WebtoB 는요구를수행하게된다. Client 요구실행을위해따로 Group 이름을설정하는것을권장한다. 꼭필요하지않다면 root 권한설정을피하도록한다. 이항목은 NT OS 에서는지원하지않으므로 Unix 계열의 OS 에서만적용이가능하다. Admin = <string> 관리자의정보를나타낸다. 여기에는관리자에게연락할수있는 E- mail 주소를설정할수있다. HostName = <literal> TmaxSoft 205