ÀÌ Ã¥Àº ´ÙÀ½¿¡ Àû¿ëµË´Ï´Ù.
»õ °³Á¤ÆÇ¿¡ ´Þ¸® ¸í½ÃµÇÁö ¾Ê´Â ÇÑ ÈÄ¼Ó ¸±¸®½º ¹× ¼öÁ¤ÆÇ¿¡ Àû¿ëµË´Ï´Ù.
IBM ´ã´çÀÚ ¶Ç´Â ÇØ´ç Áö¿ªÀÇ IBM Áö»ç¸¦ ÅëÇØ Ã¥À» ÁÖ¹®ÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀÌ ÀýÀº WebSphere(R) Application Server Edge Components¿ë ÇÁ·Î±×·¡¹Ö ¾È³»¼ÀÇ ¸ñÀû, ±¸¼º ¹× ±Ô¾à¿¡ ´ëÇØ ¼³¸íÇÕ´Ï´Ù.
ÀÌ Ã¥¿¡¼´Â WebSphere Application Server, ¹öÀü 6.1 Edge Components¸¦ »ç¿ëÀÚ Á¤ÀÇÇÏ´Â µ¥ »ç¿ë °¡´ÉÇÑ API(Application Programming Interface)¿¡ ´ëÇØ ¼³¸íÇÕ´Ï´Ù. ÀÌ Á¤º¸´Â Ç÷¯±×ÀÎ ÀÀ¿ëÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ°í ´Ù¸¥ »ç¿ëÀÚ Á¤ÀǸ¦ ÀÛ¼ºÇÏ´Â ÇÁ·Î±×·¡¸Ó¸¦ À§ÇÑ °ÍÀÔ´Ï´Ù. ³×Æ®¿öÅ© ¼³°èÀÚ ¹× ½Ã½ºÅÛ °ü¸®ÀÚ¿¡°Ôµµ °¡´ÉÇÑ »ç¿ëÀÚ Á¤ÀÇ À¯ÇüÀ» ³ªÅ¸³»´Â µ¥ ÀÌ·¯ÇÑ Á¤º¸°¡ µµ¿òÀÌ µÉ ¼ö ÀÖ½À´Ï´Ù.
ÀÌ Ã¥ÀÇ Á¤º¸¸¦ »ç¿ëÇÏ·Á¸é, »ç¿ëÇÒ API¿¡ µû¶ó Java(TM) ¶Ç´Â C¸¦ »ç¿ëÇÑ ÇÁ·Î±×·¡¹Ö ÇÁ·Î½ÃÀú¸¦ ÀÌÇØÇϰí ÀÖ¾î¾ß ÇÕ´Ï´Ù. ÀÎÅÍÆäÀ̽º¿¡¼ »ç¿ë °¡´ÉÇÑ ¸Þ¼Òµå ¹× ±¸Á¶°¡ ¹®¼ÈµÇ¾î ÀÖÁö¸¸, »ç¿ëÀÚ´Â ÀÀ¿ëÇÁ·Î±×·¥ ±¸¼º ¹æ¹ý, ½Ã½ºÅÛ¿¡ ¸Â´Â ÄÄÆÄÀÏ ¹æ¹ý ¹× Å×½ºÆ® ¹æ¹ýÀ» ¾Ë°í ÀÖ¾î¾ß ÇÕ´Ï´Ù. ÀϺΠÀÎÅÍÆäÀ̽º¿¡ ´ëÇØ ÄÚµå »ùÇÃÀÌ Á¦°øµÇÁö¸¸, »ùÇÃÀº »ç¿ëÀÚÀÇ ÀÀ¿ëÇÁ·Î±×·¥À» ±¸¼ºÇϱâ À§ÇÑ ¿¹Á¦·Î¸¸ Á¦°øµË´Ï´Ù.
ÀÌ ¹®¼¿¡¼´Â ´ÙÀ½°ú °°Àº ¼Ã¼¿Í Ű ±Ô¾àÀ» »ç¿ëÇÕ´Ï´Ù.
±Ô¾à | ÀÇ¹Ì |
---|---|
±½ÀºÃ¼ | GUI¿Í °ü·ÃµÉ ¶§, ±½ÀºÃ¼·Î ¸Þ´º, ¸Þ´º Ç׸ñ, ·¹À̺í, ´ÜÃß, ¾ÆÀÌÄÜ ¹× Æú´õ¸¦ ³ªÅ¸³À´Ï´Ù. ¶ÇÇÑ ÁÖÀ§ÀÇ ÅØ½ºÆ®¿Í È¥µ¿µÉ ¼ö ÀÖ´Â ¸í·É À̸§À» °Á¶ÇÏ´Â µ¥¿¡µµ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù. |
¸ð³ë½ºÆäÀ̽º | ¸í·É ÇÁ·ÒÇÁÆ®¿¡ ÀÔ·ÂÇØ¾ß ÇÒ ÅØ½ºÆ®¸¦ ¸ð³ë½ºÆäÀ̽º·Î Ç¥½ÃÇÕ´Ï´Ù. ȸé ÅØ½ºÆ®, ÄÚµå ¿¹Á¦ ¹× ÆÄÀÏ ¹ßÃé ºÎºÐµµ ³ªÅ¸³À´Ï´Ù. |
±â¿ïÀӲà | Á¦°øÇØ¾ß ÇÏ´Â º¯¼ö°ªÀ» ±â¿ïÀӲ÷Π³ªÅ¸³À´Ï´Ù. (¿¹¸¦ µé¾î, fileName¿¡ ÆÄÀÏ À̸§À» Á¦°øÇÕ´Ï´Ù.) °Á¶ ¹× Ã¥ Á¦¸ñÀ» Ç¥½ÃÇÕ´Ï´Ù. |
Ctrl-x | ¿©±â¼, x´Â Ű À̸§À¸·Î Á¦¾î ¹®ÀÚ ¼ø¼¸¦ Ç¥½ÃÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, Ctrl-c´Â Ctrl ۸¦ ´©¸¥ »óÅ¿¡¼ c ۸¦ ´©¸£´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù. |
Return | Return, Enter ¶Ç´Â ¿ÞÂÊ È»ìÇ¥·Î Ç¥½ÃµÈ ۸¦ ³ªÅ¸³À´Ï´Ù. |
% | ·çÆ® ±ÇÇÑÀÌ ÇÊ¿äÇÏÁö ¾ÊÀº ¸í·ÉÀÇ Linux ¹× UNIX(R) ¸í·É ½© ÇÁ·ÒÇÁÆ®¸¦ Ç¥½ÃÇÕ´Ï´Ù. |
# | ·çÆ® ±ÇÇÑÀÌ ÇÊ¿äÇÑ Linux ¹× UNIX ¸í·É ½© ÇÁ·ÒÇÁÆ®¸¦ Ç¥½ÃÇÕ´Ï´Ù. |
C:\ | Windows ¸í·É ÇÁ·ÒÇÁÆ®¸¦ Ç¥½ÃÇÕ´Ï´Ù. |
¸í·É ÀÔ·Â | ¸í·ÉÀ» ¡ºÀԷ¡» ¶Ç´Â ¡º½ÇÇà¡»ÇÒ ¶§ ¸í·ÉÀ» ÀÔ·ÂÇϰí ReturnÀ» ´©¸¨´Ï´Ù. ¿¹¸¦ µé¾î, ¡ºEnter the ls command¡»¶ó´Â ¸í·ÉÀº ¸í·É ÇÁ·ÒÇÁÆ®¿¡ ls¸¦ ÀÔ·ÂÇϰí ReturnÀ» ´©¸£´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù. |
[ ] | ±¸¹® ¼³¸í¿¡ ¼±ÅÃÀû Ç׸ñÀ» ³Ö½À´Ï´Ù. |
{ } | ¼±ÅÃÇÒ Ç׸ñÀÌ ÀÖ´Â ¸ñ·ÏÀ» ±¸¹® ¼³¸í¿¡ ³Ö½À´Ï´Ù. |
| | ±¸¹® ¼³¸í¿¡¼ { }¿¡ ÀÖ´Â ¼±ÅûçÇ× ¸ñ·ÏÀÇ Ç׸ñÀ» ±¸ºÐÇÕ´Ï´Ù. |
... | ±¸¹® ¼³¸í¿¡¼ ÁÙÀÓÇ¥´Â ¾ÕÀÇ Ç׸ñÀ» ÇÑ ¹ø ÀÌ»ó ¹Ýº¹ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù. ¿¹Á¦¿¡¼ ÁÙÀÓÇ¥´Â °£°áÇÏ°Ô Çϱâ À§ÇØ ¿¹Á¦¿¡¼ Á¤º¸¸¦ »ý·«ÇßÀ½À» ÀǹÌÇÕ´Ï´Ù. |
³»°Ô ÇÊ¿äÇÑ ¿É¼Ç ±â´ÉÀº Áöü ºÎÀÚÀ¯ ¶Ç´Â ½Ã°¢ Àå¾Ö¿Í °°Àº ½Åü Àå¾Ö¸¦ °¡Áø »ç¿ëÀÚ°¡ ¼ÒÇÁÆ®¿þ¾î Á¦Ç°À» Àß »ç¿ëÇÒ ¼ö ÀÖµµ·Ï µµ¿ÍÁÝ´Ï´Ù. ´ÙÀ½Àº WebSphere Application Server, ¹öÀü 6.1ÀÇ ³»°Ô ÇÊ¿äÇÑ ¿É¼Ç ±â´ÉÀÔ´Ï´Ù.
°í°´ÀÇ Çǵå¹éÀº °¡Àå Á¤È®Çϰí ÃÖ»óÀÇ Á¤º¸¸¦ Á¦°øÇÏ´Â µ¥ ¸Å¿ì Áß¿äÇÕ´Ï´Ù. ÀÌ Ã¥ ¶Ç´Â ±âŸ WebSphere Application Server Edge Components ¹®¼¿¡ ´ëÇÑ ÀǰßÀÌ ÀÖ´Â °æ¿ì, ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î º¸³»ÁֽʽÿÀ.
Á¦ 1 Àå¿¡¼´Â WebSphere Application Server Edge Components¿¡ Á¦°øµÈ API(Application Programming Interface)¿¡ ´ëÇÏ¿© ¼³¸íÇÕ´Ï´Ù. (WebSphere Application Server Edge Components´Â Caching Proxy ¹× Load Balancer¸¦ Æ÷ÇÔÇÕ´Ï´Ù. ) °ü¸®ÀÚ´Â Á¦°øµÇ´Â ¸î °¡Áö ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇÏ¿© ¼³Ä¡¸¦ »ç¿ëÀÚ Á¤ÀÇÇϰí Edge Components »çÀÌÀÇ »óÈ£ÀÛ¿ë ¹æ¹ýÀ» º¯°æÇϰųª ¼ÒÇÁÆ®¿þ¾î ½Ã½ºÅÛ°úÀÇ »óÈ£ÀÛ¿ëÀ» °¡´ÉÇÏ°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù.
Áß¿ä»çÇ×: Caching Proxy´Â ´ÙÀ½ °æ¿ì¸¦ Á¦¿ÜÇÏ°í ¸ðµç Edge Components ¼³Ä¡¿¡ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀÌ ¹®¼ÀÇ API´Â ¸î °¡Áö Ä«Å×°í¸®¸¦ ÁöÁ¤ÇÕ´Ï´Ù.
Caching Proxy´Â Ç¥ÁØ Ã³¸®¿¡ ´ëÇØ »ç¿ëÀÚ Á¤ÀÇ Ã³¸®°¡ Ãß°¡ ¶Ç´Â ´ëüµÇ¸ç, ÇØ´ç ó¸® ¼ø¼·Î ÀÛ¼ºµÇ´Â ¸î °¡Áö ÀÎÅÍÆäÀ̽º¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. ½ÇÇàÇÒ ¼ö ÀÖ´Â »ç¿ëÀÚ Á¤ÀÇ¿¡´Â ´ÙÀ½°ú °°Àº º¯°æ ¹× ±â´É º¸° Ÿ½ºÅ©°¡ Æ÷ÇԵ˴ϴÙ.
Caching Proxy Ç÷¯±×ÀÎÀ¸·Î ¾Ë·ÁÁø »ç¿ëÀÚ Á¤ÀÇ ÀÀ¿ëÇÁ·Î±×·¥Àº ÇÁ·Ï½Ã ¼¹öÀÇ Ã³¸® ¼ø¼ÀÇ »çÀü °áÁ¤µÈ ÁöÁ¡¿¡¼ È£ÃâµË´Ï´Ù.
Caching Proxy API´Â ƯÁ¤ ½Ã½ºÅÛ ±â´ÉÀ» ±¸ÇöÇÏ´Â µ¥ »ç¿ëµË´Ï´Ù. ¿¹¸¦ µé¾î, ÇÁ·Ï½Ã ¼¹öÀÇ LDAP Áö¿øÀº Ç÷¯±×ÀÎÀ¸·Î ±¸ÇöµË´Ï´Ù.
Caching Proxy API¿¡¼´Â ÀÎÅÍÆäÀ̽º¸¦ ÀÚ¼¼È÷ ¼³¸íÇϸç, Ç÷¯±×ÀÎ ÇÁ·Î±×·¥À» »ç¿ëÇϱâ À§ÇØ ÇÁ·Ï½Ã ¼¹ö¸¦ ±¸¼ºÇÏ´Â ´Ü°è°¡ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù.
°íÀ¯ ¾îµå¹ÙÀÌÀú¸¦ ÀÛ¼ºÇÏ¿© Load Balancer¸¦ »ç¿ëÀÚ Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù. ¾îµå¹ÙÀÌÀú´Â ¼¹ö¿¡¼ÀÇ ½ÇÁ¦ ·Îµå¸¦ ÃøÁ¤ÇÕ´Ï´Ù. »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú¸¦ »ç¿ëÇÏ¿© »ç¿ëÀÚ°¡ Á¦°øÇÏ°í »ç¿ëÀÚ ½Ã½ºÅÛÀÇ ·Îµå¸¦ ÃøÁ¤ÇÏ´Â ¹æ¹ýÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ´Â »ç¿ëÀÚ°¡ »ç¿ëÀÚ Á¤ÀÇÇ߰ųª µ¶Á¡ À¥ ¼¹ö ½Ã½ºÅÛÀ» º¸À¯ÇÏ´Â °æ¿ì¿¡ ƯÈ÷ Áß¿äÇÕ´Ï´Ù.
»ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú¿¡¼´Â »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú ÀÛ¼º ¹× »ç¿ë¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸¸¦ Á¦°øÇÕ´Ï´Ù. ¾îµå¹ÙÀÌÀú ÄÚµå »ùÇÃÀÌ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù.
APIÀÇ »ùÇà ÄÚµå´Â Edge Components CD-ROMÀÇ samples µð·ºÅ丮¿¡ ÀÖ½À´Ï´Ù. Ãß°¡ ÄÚµå »ùÇÃÀº WebSphere Application Server À¥ »çÀÌÆ®ÀÎ www.ibm.com/software/webservers/appserv/¿¡¼ ã¾Æº¼ ¼ö ÀÖ½À´Ï´Ù.
Á¦ 2 Àå¿¡¼´Â Caching Proxy API(Application Programming Interface)ÀÇ °³³ä, À¯¿ë¼º ¹× ÀÛµ¿ ¹æ¹ý¿¡ ´ëÇØ ¼³¸íÇÕ´Ï´Ù.
Áß¿ä»çÇ×: Caching Proxy´Â ´ÙÀ½ °æ¿ì¸¦ Á¦¿ÜÇÏ°í ¸ðµç Edge Components ¼³Ä¡¿¡ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
API´Â Caching Proxy¿¡ ´ëÇÑ ÀÎÅÍÆäÀ̽º·Î ÇÁ·Ï½Ã ¼¹öÀÇ ±âº» ±â´ÉÀ» È®ÀåÇÕ´Ï´Ù. ´ÙÀ½ ¿¹Á¦¿Í °°Àº »ç¿ëÀÚ Á¤ÀÇ Ã³¸®¸¦ ¼öÇàÇϱâ À§ÇØ È®Àå ¶Ç´Â Ç÷¯±×ÀÎÀ» ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
Caching Proxy API´Â ´ÙÀ½°ú °°Àº ÀÌÁ¡À» Á¦°øÇÕ´Ï´Ù.
Caching Proxy Ç÷¯±×ÀÎ ÇÁ·Î±×·¥À» ÀÛ¼ºÇϱ⿡ ¾Õ¼ ÇÁ·Ï½Ã ¼¹ö ÀÛµ¿ ¹æ¹ýÀ» ÀÌÇØÇØ¾ß ÇÕ´Ï´Ù. ÇÁ·Ï½Ã ¼¹öÀÇ ÀÛµ¿Àº ¿©·¯ °³ÀÇ °³º° ó¸® ´Ü°è·Î ³ª´ ¼ö ÀÖ½À´Ï´Ù. °¢°¢ÀÇ ´Ü°è¿¡¼ API¸¦ »ç¿ëÇÏ¿© »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö¸¦ Á¦°øÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, Ŭ¶óÀÌ¾ðÆ® ¿äûÀÌ ÀÐÇôÁø ÈÄ ±×·¯³ª, ´Ù¸¥ 󸮸¦ ¼öÇàÇϱâ Àü¿¡ ¾î¶² ÀÏÀ» ¼öÇàÇϱ⠿øÇÒ ¼öµµ ÀÖ°í, ¶Ç´Â ÀÎÁõÀÌ ¼öÇàµÇ´Â µ¿¾È ±×¸®°í, ¿äûµÈ ÆÄÀÏÀÌ Àü¼ÛµÈ ÈÄ¿¡ ´Ù½Ã Ưº°ÇÑ ·çƾÀ» ¼öÇàÇϱ⸦ ¿øÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
»çÀü Á¤ÀÇ ÇÔ¼öÀÇ ¶óÀ̺귯¸®´Â API¿Í ÇÔ²² Á¦°øµË´Ï´Ù. »ç¿ëÀÚ Ç÷¯±×ÀÎ ÇÁ·Î±×·¥Àº ÇÁ·Ï½Ã ¼¹ö ÇÁ·Î¼¼½º(¿¹: ¿äûÀ» Á¶Á¤Çϰí, ¿äû Çì´õ¸¦ Àаųª ¾²°í, ÇÁ·Ï½Ã ¼¹öÀÇ ·Î±×¿¡ ¾²´Â ÇÁ·Î¼¼½º)¿Í »óÈ£ÀÛ¿ëÇϱâ À§ÇØ »çÀü Á¤ÀÇµÈ API ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·± ÇÔ¼ö´Â ÇÁ·Ï½Ã ¼¹ö°¡ È£ÃâÇÏ´Â »ç¿ëÀÚ ÀÛ¼º Ç÷¯±×ÀÎ ÇÔ¼ö¿Í È¥µ¿ÀÌ µÇ¾î¼´Â ¾ÈµË´Ï´Ù. »çÀü Á¤ÀÇµÈ ÇÔ¼ö´Â »çÀü Á¤ÀÇ ÇÔ¼ö ¹× ¸ÅÅ©·Î¿¡¼ ¼³¸íÇÕ´Ï´Ù.
¼¹ö ±¸¼º ÆÄÀÏ¿¡¼ ÇØ´ç Caching Proxy API Áö½Ã¹®À» »ç¿ëÇÏ¿© ÀûÀýÇÑ ´Ü°è¿¡¼ Ç÷¯±×ÀÎ ±â´ÉÀ» È£ÃâÇϵµ·Ï ÇÁ·Ï½Ã ¼¹ö¿¡ Áö½ÃÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ Áö½Ã¹®Àº API ´Ü°è¿¡ ´ëÇÑ Caching Proxy ±¸¼º Áö½Ã¹®¿¡¼ ¼³¸íÇÕ´Ï´Ù.
ÀÌ ¹®¼´Â ´ÙÀ½°ú °°Àº ³»¿ëÀ» Æ÷ÇÔÇÕ´Ï´Ù.
À̵é ÄÄÆ÷³ÍÆ®¿Í ÇÁ·Î½ÃÀú¸¦ »ç¿ëÇÏ¿© °íÀ¯ Caching Proxy Ç÷¯±×ÀÎ ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÇÁ·Ï½Ã ¼¹öÀÇ ±âº» ¿î¿µÀº ´Ü°è°¡ ÁøÇàµÇ´Â µ¿¾È ¼¹ö¸¦ ¼öÇàÇϴ ó¸®ÀÇ À¯Çü¿¡ µû¶ó ´Ü°è¸¦ ±¸ºÐÇÒ ¼ö ÀÖ½À´Ï´Ù. °¢ ´Ü°è´Â »ç¿ëÀÚ ÇÁ·Î±×·¥ÀÇ ÁöÁ¤µÈ ÆÄÆ®°¡ ½ÇÇàÇÒ ¼ö ÀÖ´Â Á¢¼ÓÀ» Æ÷ÇÔÇÕ´Ï´Ù. Caching Proxy ±¸¼º ÆÄÀÏ(ibmproxy.conf)¿¡ API Áö½Ã¹®À» Ãß°¡ÇÏ¿© ƯÁ¤ ´Ü°è¿¡¼ È£ÃâÇÏ·Á´Â Ç÷¯±×ÀÎ ÇÔ¼ö¸¦ ÁöÁ¤ÇÕ´Ï´Ù. ÇØ´ç ´Ü°è¿¡ µÑ ÀÌ»óÀÇ Áö½Ã¹®À» Æ÷ÇÔ½ÃÄÑ Æ¯Á¤ ÇÁ·Î¼¼½º ´Ü°è°¡ ÁøÇàµÇ´Â µ¿¾È ¿©·¯ °³ÀÇ Ç÷¯±×ÀÎ ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù.
¸î¸î ´Ü°è´Â ¼¹ö ¿äû ÇÁ·Î¼¼½ºÀÇ ÀϺÎÀÔ´Ï´Ù. Áï, ÇÁ·Ï½Ã ¼¹ö´Â ¿äûÀ» ó¸®ÇÒ ¶§ °¢ ´Ü°è¸¦ ½ÇÇàÇÕ´Ï´Ù. ´Ù¸¥ ´Ü°è´Â ¿äû ó¸®¿Í ¹«°üÇÏ°Ô ¼öÇàµË´Ï´Ù. Áï, ¼¹ö´Â ¿äûÀÌ Ã³¸®µÇ´ÂÁö ¿©ºÎ¿Í °ü°è¾øÀÌ ÀÌµé ´Ü°è¸¦ ½ÇÇàÇÕ´Ï´Ù.
»ç¿ëÀÚÀÇ ÄÄÆÄÀÏµÈ ÇÁ·Î±×·¥Àº ¿î¿µ üÁ¦¿¡ µû¶ó °øÀ¯ ¿ÀºêÁ§Æ®(¿¹: DLL ¶Ç´Â .so ÆÄÀÏ)¿¡ »óÁÖÇÕ´Ï´Ù. ¼¹ö°¡ ¿äû ÇÁ·Î¼¼½º ´Ü°è¸¦ Â÷·Ê·Î ¼öÇàÇϸé¼, ÇÔ¼ö Áß ¾î´À Çϳª°¡ ¿äûÀ» ó¸®ÇÏ¿´À½À» ³ªÅ¸³¾ ¶§±îÁö °¢ ´Ü°è¿Í °ü·ÃµÈ Ç÷¯±×ÀÎ ÇÔ¼ö¸¦ È£ÃâÇÕ´Ï´Ù. ƯÁ¤ ´Ü°è¿¡ ´ëÇØ µÑ ÀÌ»óÀÇ Ç÷¯±×ÀÎ ÇÔ¼ö°¡ ÁöÁ¤µÈ °æ¿ì, Áö½Ã¹®ÀÌ ±¸¼º ÆÄÀÏ¿¡ ³ªÅ¸³ª´Â ¼ø¼´ë·Î ÇÔ¼ö°¡ È£ÃâµË´Ï´Ù.
Ç÷¯±×ÀÎ ÇÔ¼ö°¡ ¿äûÀ» ó¸®ÇÏÁö ¾ÊÀº °æ¿ì(ÇØ´ç ´Ü°è¿¡ Caching Proxy API Áö½Ã¹®ÀÌ ¾ø°Å³ª ÇØ´ç ´Ü°è¿¡ Ç÷¯±×ÀÎ ÇÔ¼ö°¡ HTTP_NOACTIONÀ» ¸®ÅÏÇÑ °æ¿ì), ¼¹ö´Â ÇØ´ç ´Ü°è¿¡ ´ëÇØ ±âº» Á¶Ä¡¸¦ ¼öÇàÇÕ´Ï´Ù.
ÁÖ: ¼ºñ½º ´Ü°è¸¦ Á¦¿ÜÇÑ ¸ðµç ´Ü°è¿¡ Àû¿ëµË´Ï´Ù. ¼ºñ½º ´Ü°è¿¡´Â ±âº» Á¶Ä¡°¡ ¾ø½À´Ï´Ù.
±×¸² 1¿¡¼´Â ÇÁ·Ï½Ã ¼¹ö ÇÁ·Î¼¼½ºÀÇ ´Ü°è¸¦ ¼³¸íÇÏ°í ¿äû ó¸®¿Í °ü·ÃµÈ ´Ü°è¿¡ ´ëÇØ ó¸® ¼ø¼¸¦ Á¤ÀÇÇÕ´Ï´Ù.
´ÙÀ̾î±×·¥¿¡¼ ³× ´Ü°è´Â Ŭ¶óÀÌ¾ðÆ® ¿äûÀÇ Ã³¸®¿Í ¹«°üÇÏ°Ô ½ÇÇàµË´Ï´Ù. ÀÌµé ´Ü°è´Â ÇÁ·Ï½Ã ¼¹öÀÇ ½ÇÇà ¹× À¯Áöº¸¼ö¿Í °ü·ÃÀÌ ÀÖ½À´Ï´Ù. ´ÙÀ½ »çÇ×ÀÌ Æ÷ÇԵ˴ϴÙ.
´ÙÀ½ ¸ñ·Ï¿¡¼´Â ±×¸² 1¿¡ ±×·ÁÁø °¢ ´Ü°èÀÇ ¸ñÀûÀ» ¼³¸íÇÕ´Ï´Ù. ¸ðµç ´Ü°è°¡ ƯÁ¤ ¿äû¿¡ ´ëÇØ ¹Ýµå½Ã È£ÃâµÇÁö´Â ¾Ê½À´Ï´Ù.
¿äûÀÌ ÀÐÇôÁ³Áö¸¸ ´Ù¸¥ ¾î¶°ÇÑ ÀÛ¾÷µµ ¼öÇàµÇ±â ÀüÀÇ Ã³¸®¸¦ ¼öÇàÇÕ´Ï´Ù.
ÀÌ ´Ü°è¿¡¼ ¿äû ó¸® ¿Ï·á Ç¥½Ã(HTTP_OK)¸¦ ¸®ÅÏÇÏ´Â °æ¿ì, ¿äû ÇÁ·Î¼¼½º¿¡¼ ´Ù¸¥ ´Ü°èµéÀº »ý·«ÇÏ°í º¯ÇüÀÚ, ·Î±× ¹× »çÈÄÁ¾·á ´Ü°è¸¸À» ¼öÇàÇÕ´Ï´Ù.
ÀúÀåµÈ º¸¾È ÅäÅ«À» »ç¿ëÇÏ¿© º¸È£»çÇ×, ACL ¹× ±âŸ ¾×¼¼½º Á¦¾î¿¡ ´ëÇÑ ½ÇÁ¦ °æ·Î¸¦ È®ÀÎÇÏ°í ±âº» ÀÎÁõ¿¡ ÇÊ¿äÇÑ WWW-Authenticate Çì´õ¸¦ »ý¼ºÇÕ´Ï´Ù. »ç¿ëÀÚ°¡ °íÀ¯ Ç÷¯±×ÀÎ ÇÔ¼ö¸¦ ÀÛ¼ºÇÏ¿© ÀÌ ´Ü°è¸¦ ¹Ù²Ù·Á¸é ÀÌ Çì´õ¸¦ »ç¿ëÀÚ°¡ Á÷Á¢ »ý¼ºÇØ¾ß ÇÕ´Ï´Ù.
ÀÚ¼¼ÇÑ Á¤º¸´Â ÀÎÁõ ¹× ±ÇÇÑ ºÎ¿©¸¦ ÂüÁ¶ÇϽʽÿÀ.
º¸¾È ÅäÅ«À» ÇØµ¶Çϰí, È®ÀÎÇÑ ÈÄ ÀúÀåÇÕ´Ï´Ù.
ÀÚ¼¼ÇÑ Á¤º¸´Â ÀÎÁõ ¹× ±ÇÇÑ ºÎ¿©¸¦ ÂüÁ¶ÇϽʽÿÀ.
±ÇÇÑ ºÎ¿© ¹× ¿ÀºêÁ§Æ®ÀÇ À§Ä¡ ã±â ÀÌÈÄ, ¿äû ¿Ï·á ÀÌÀü¿¡ 󸮸¦ ¼öÇàÇÕ´Ï´Ù.
ÀÌ ´Ü°è¿¡¼ ¿äû ó¸® ¿Ï·á Ç¥½Ã(HTTP_OK)¸¦ ¸®ÅÏÇÏ´Â °æ¿ì, ¿äû ÇÁ·Î¼¼½º¿¡¼ ´Ù¸¥ ´Ü°èµéÀº »ý·«ÇÏ°í º¯ÇüÀÚ, ·Î±× ¹× »çÈÄÁ¾·á ´Ü°è¸¸À» ¼öÇàÇÕ´Ï´Ù.
AIX(R) ½Ã½ºÅÛ¿¡¼´Â Ç÷¯±×ÀÎ ÇÔ¼ö¸¦ ³ª¿ÇÏ´Â ³»º¸³»±â ÆÄÀÏ(¿¹: libmyapp.exp)ÀÌ ÇÊ¿äÇϰí Caching Proxy API °¡Á®¿À±â ÆÄÀÏ(¿¹: libhttpdapi.exp)°ú ¿¬°áÇØ¾ß ÇÕ´Ï´Ù.
Linux, HP-UX ¹× Solaris ½Ã½ºÅÛ¿¡¼´Â libhttpdapi ¹× libc ¶óÀ̺귯¸®¿Í ¿¬°áÇØ¾ß ÇÕ´Ï´Ù.
Windows(R) ½Ã½ºÅÛ¿¡¼´Â ¸ðµâ Á¤ÀÇ ÆÄÀÏ(.def)ÀÌ ÇÊ¿äÇϰí HTTPDAPI.LIB¿Í ¿¬°áÇØ¾ß ÇÕ´Ï´Ù.
¹Ýµå½Ã ÇÔ¼ö Á¤ÀÇ HTAPI.h¸¦ Æ÷ÇÔ½Ã۰í HTTPD_LINKAGE ¸ÅÅ©·Î¸¦ »ç¿ëÇϽʽÿÀ. ÀÌ ¸ÅÅ©·Î´Â ¸ðµç ÇÔ¼öµéÀÌ °°Àº È£Ãâ ±Ô¾àÀ» »ç¿ëÇϵµ·Ï ÇÕ´Ï´Ù.
´ÙÀ½ÀÇ ÄÄÆÄÀÏ ¹× ¿¬°á ¸í·ÉÀ» ÂüÁ¶ÇϽʽÿÀ.
cc_r -c -qdbxextra -qcpluscmt foo.c
cc_r -bM:SRE -bnoentry -o libfoo.so foo.o -bI:libhttpdapi.exp -bE:foo.exp
(ÀÌ ¸í·ÉÀº Àб⠽±µµ·Ï µÎ Çà¿¡ Ç¥½ÃµË´Ï´Ù.)
cc -Ae -c +Z +DAportable
aCC +Z -mt -c +DAportable
gcc -c foo.c
ld -G -Bsymbolic -o libfoo.so foo.o -lhttpdapi -lc
cc -mt -Bsymbolic -c foo.c
cc -mt -Bsymbolic -G -o libfoo.so foo.o -lhttpdapi -lc
cl /c /MD /DWIN32 foo.c
link httpdapi.lib foo.obj /def:foo.def /out:foo.dll /dll
³»º¸³»±â¸¦ ÁöÁ¤ÇÏ·Á¸é ´ÙÀ½ ¹æ¹ý Áß Çϳª¸¦ »ç¿ëÇϽʽÿÀ.
Ç÷¯±×ÀÎ ÇÔ¼ö ÇÁ·ÎÅäŸÀÔ¿¡ Ç¥½ÃµÈ ±¸¹®¿¡ µû¶ó Á¤ÀÇµÈ ¿äû ó¸® ´Ü°è¿¡ ÀûÀýÇÑ »ç¿ëÀÚÀÇ ÇÁ·Î±×·¥ ÇÔ¼ö¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
°¢°¢ÀÇ »ç¿ëÀÚ ÇÔ¼öµéÀº ¾î¶² Á¶Ä¡°¡ ÃëÇØÁ³´ÂÁö¸¦ ³ªÅ¸³»´Â °ªÀ» ¸®ÅÏ ÄÚµå ¸Å°³º¯¼ö¿¡ ÁöÁ¤ÇØ¾ß ÇÕ´Ï´Ù.
°¢ Caching Proxy ´Ü°è¿¡ ´ëÇÑ ÇÔ¼ö ÇÁ·ÎÅäŸÀÔ¿¡¼´Â »ç¿ëÇÒ ¼ö ÀÖ´Â Çü½ÄÀ» º¸¿©ÁÖ°í ¼öÇàÇÒ ¼ö Àִ ó¸® À¯Çü¿¡ ´ëÇÏ¿© ¼³¸íÇÕ´Ï´Ù. ÇÔ¼ö À̸§Àº »çÀü Á¤ÀǵǾî ÀÖÁö ¾ÊÀ½¿¡ ÁÖÀÇÇϽʽÿÀ. »ç¿ëÀÚ ÇÔ¼öÀÇ °íÀ¯ À̸§À» ÁöÁ¤Çϰí, ÀڽŸ¸ÀÇ À̸§ ÁöÁ¤ ±ÔÄ¢À» ¼±ÅÃÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¬»óÇϱ⠽±µµ·Ï, ÀÌ ¹®¼¿¡¼´Â ¼¹öÀÇ Ã³¸® ´Ü°è¿Í °ü·ÃµÈ À̸§À» »ç¿ëÇÕ´Ï´Ù.
°¢°¢ÀÇ Ç÷¯±×ÀÎ ÇÔ¼ö¿¡¼ »çÀü Á¤ÀÇµÈ Æ¯Á¤ ÇÔ¼ö´Â À¯È¿ÇÕ´Ï´Ù. ÀϺΠ»çÀü Á¤ÀÇµÈ ÇÔ¼ö´Â ¸ðµç ´Ü°è¿¡ ´ëÇØ À¯È¿ÇÏÁö ¾Ê½À´Ï´Ù. ´ÙÀ½°ú °°Àº »çÀü Á¤ÀÇµÈ API ÇÔ¼ö´Â ¸ðµç Ç÷¯±×ÀÎ ÇÔ¼ö¿¡¼ È£ÃâµÉ ¶§ À¯È¿ÇÕ´Ï´Ù.
Ãß°¡·Î À¯È¿Çϰųª À¯È¿ÇÏÁö ¾ÊÀº API ÇÔ¼ö´Â ÇÔ¼ö ÇÁ·ÎÅäŸÀÔ¿¡ ¾ð±ÞµÇ¾î ÀÖ½À´Ï´Ù.
ÇÔ¼ö·Î Àü¼ÛµÇ´Â handle ¸Å°³º¯¼öÀÇ °ªÀº »çÀü Á¤ÀÇµÈ ÇÔ¼ö¿¡ ´ëÇÑ Ã¹ ¹øÂ° Àμö·Î Àü´ÞÇÒ ¼ö ÀÖ½À´Ï´Ù. »çÀü Á¤ÀÇµÈ API ÇÔ¼ö´Â »çÀü Á¤ÀÇ ÇÔ¼ö ¹× ¸ÅÅ©·Î¿¡¼ ¼³¸íÇÕ´Ï´Ù.
void HTTPD_LINKAGE ServerInitFunction ( unsigned char *handle, unsigned long *major_version, unsigned long *minor_version, long *return_code )
¼¹ö ÃʱâÈ Áß¿¡ ¸ðµâÀÌ ·ÎµåµÉ ¶§ ÀÌ ´Ü°è¿¡¼ Á¤ÀÇµÈ ÇÔ¼ö°¡ È£ÃâµË´Ï´Ù. ÀÌ ¶§°¡ ¿äûÀÌ ½ÂÀεDZâ Àü¿¡ Ãʱâȸ¦ ¼öÇàÇÒ ¼ö ÀÖ´Â ½Ã±âÀÔ´Ï´Ù.
¸ðµç ¼¹ö ÃʱâÈ ÇÔ¼ö°¡ È£ÃâµÇ¾îµµ, ÀÌ ´Ü°èÀÇ ÇÔ¼ö¿¡¼ ¿À·ù ¸®ÅÏ Äڵ尡 ¹ß»ýÇÏ¸é ¼¹ö´Â ¿À·ù Äڵ带 ¸®ÅÏÇÑ ÇÔ¼ö¿Í µ¿ÀÏÇÑ ¸ðµâ¿¡¼ ±¸¼ºµÈ ´Ù¸¥ ¸ðµç ÇÔ¼ö¸¦ ¹«½ÃÇÕ´Ï´Ù. (Áï, ¿À·ù¸¦ ¸®ÅÏÇÑ ÇÔ¼ö¿Í µ¿ÀÏÇÑ °øÀ¯ ¿ÀºêÁ§Æ®¿¡ Æ÷ÇÔµÈ ´Ù¸¥ ÇÔ¼ö´Â È£ÃâµÇÁö ¾Ê½À´Ï´Ù.)
¹öÀü ¸Å°³º¯¼ö¿¡´Â ÇÁ·Ï½Ã ¼¹öÀÇ ¹öÀü ¹øÈ£°¡ µé¾î ÀÖ½À´Ï´Ù. Caching Proxy¿¡ ÀÇÇØ Á¦°øµË´Ï´Ù.
void HTTPD_LINKAGE PreExitFunction ( unsigned char *handle, long *return_code )
¿äûÀÌ ÀÐÇôÁø ÈÄ ´Ù¸¥ 󸮰¡ ¼öÇàµÇ±â Àü¿¡ ÀÌ ´Ü°è¿¡¼ Á¤ÀÇµÈ ÇÔ¼ö°¡ È£ÃâµË´Ï´Ù. ÀÌ ´Ü°è¿¡¼ Ç÷¯±×ÀÎÀº Caching Proxy¿¡ ÀÇÇØ 󸮵DZâ Àü¿¡ Ŭ¶óÀ̾ðÆ®ÀÇ ¿äû¿¡ ¾×¼¼½ºÇÏ´Â µ¥ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
preExit ÇÔ¼öÀÇ À¯È¿ÇÑ ¸®ÅÏ ÄÚµå´Â ´ÙÀ½°ú °°½À´Ï´Ù.
´Ù¸¥ ¸®ÅÏ ÄÚµå´Â »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù.
ÀÌ ÇÔ¼ö°¡ HTTP_OK¸¦ ¸®ÅÏÇÏ´Â °æ¿ì, ÇÁ·Ï½Ã ¼¹ö´Â ¿äûÀÌ Ã³¸®µÈ °ÍÀ¸·Î °£ÁÖÇÕ´Ï´Ù. ¸ðµç ÈÄ¼Ó ¿äû ó¸® ´Ü°è°¡ »ý·«µÇ¸ç ÀÀ´ä ´Ü°è(º¯ÇüÀÚ, ·Î±× ¹× »çÈÄÁ¾·á)¸¸ ¼öÇàµË´Ï´Ù.
ÀÌ ´Ü°è¿¡¼´Â »çÀü Á¤ÀÇµÈ ¸ðµç API ÇÔ¼ö°¡ À¯È¿ÇÕ´Ï´Ù.
void HTTPD_LINKAGE MidnightFunction ( unsigned char *handle, long *return_code )
ÀÌ ´Ü°è¿¡¼ Á¤ÀÇµÈ ÇÔ¼ö´Â ¸ÅÀÏ ÀÚÁ¤¿¡ ½ÇÇàµÇ°í ¿äû ÄÁÅØ½ºÆ®¸¦ Æ÷ÇÔÇÏÁö ¾Ê½À´Ï´Ù. ¿¹¸¦ µé¾î, ·Î±×¸¦ ºÐ¼®Çϱâ À§ÇØ ÇÏÀ§ ÇÁ·Î¼¼½º¸¦ È£ÃâÇÏ´Â µ¥ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. (ÀÌ ´Ü°èÀÇ È®Àå 󸮰¡ ·Î±ëÀ» ¹æÇØÇÒ ¼ö ÀÖ½À´Ï´Ù.)
void HTTPD_LINKAGE AuthenticationFunction ( unsigned char *handle, long *return_code )
ÀÌ ´Ü°è¿¡¼ Á¤ÀÇµÈ ÇÔ¼ö°¡ ¿äûÀÇ ÀÎÁõ ¼³°è¿¡ µû¶ó ¿äû¿¡ ´ëÇØ È£ÃâµË´Ï´Ù. ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ¿äû°ú ÇÔ²² Àü¼ÛµÈ º¸¾È ÅäÅ«ÀÇ °ËÁõÀ» »ç¿ëÀÚ Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù.
void HTTPD_LINKAGE NameTransFunction ( unsigned char *handle, long *return_code )
ÀÌ ´Ü°è¿¡¼ Á¤ÀÇµÈ ÇÔ¼ö°¡ ¿äû¿¡ ´ëÇØ È£ÃâµË´Ï´Ù. ÅÛÇø®Æ®¿Í ÀÏÄ¡ÇÏ´Â ¿äû¿¡ ´ëÇØ¼¸¸ Ç÷¯±×ÀÎ ÇÔ¼ö°¡ È£ÃâµÇµµ·Ï ÇÏ·Á´Â °æ¿ì, ±¸¼º ÆÄÀÏ Áö½Ã¹®¿¡ URL ÅÛÇø®Æ®¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. À̸§ º¯È¯ ´Ü°è´Â ¿äûÀÌ Ã³¸®µÇ±â Àü¿¡ ¹ß»ýÇÏ°í ÆÄÀÏ À̸§Ã³·³ ¿ÀºêÁ§Æ®¿¡ URLÀ» ¸ÊÇÎÇÏ´Â ¸ÞÄ¿´ÏÁòÀ» Á¦°øÇÕ´Ï´Ù.
void HTTPD_LINKAGE AuthorizationFunction ( unsigned char *handle, long *return_code )
ÀÌ ´Ü°è¿¡¼ Á¤ÀÇµÈ ÇÔ¼ö°¡ ¿äû¿¡ ´ëÇØ È£ÃâµË´Ï´Ù. ÅÛÇø®Æ®¿Í ÀÏÄ¡ÇÏ´Â ¿äû¿¡ ´ëÇØ¼¸¸ Ç÷¯±×ÀÎ ÇÔ¼ö°¡ È£ÃâµÇµµ·Ï ÇÏ·Á´Â °æ¿ì, ±¸¼º ÆÄÀÏ Áö½Ã¹®¿¡ URL ÅÛÇø®Æ®¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±ÇÇÑ ºÎ¿© ´Ü°è´Â ¿äûÀÌ Ã³¸®µÇ±â Àü¿¡ ¹ß»ýÇÏ°í ½Äº°µÈ ¿ÀºêÁ§Æ®°¡ Ŭ¶óÀÌ¾ðÆ®·Î ¸®Å쵃 ¼ö ÀÖ´ÂÁö¸¦ È®ÀÎÇÏ´Â µ¥ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ±âº» ÀÎÁõÀ» ¼öÇàÇÏ´Â °æ¿ì¶ó¸é, ÇÊ¿äÇÑ WWW-Authenticate Çì´õ¸¦ »ý¼ºÇØ¾ß ÇÕ´Ï´Ù.
void HTTPD_LINKAGE ObjTypeFunction ( unsigned char *handle, long *return_code )
ÀÌ ´Ü°è¿¡¼ Á¤ÀÇµÈ ÇÔ¼ö°¡ ¿äû¿¡ ´ëÇØ È£ÃâµË´Ï´Ù. ÅÛÇø®Æ®¿Í ÀÏÄ¡ÇÏ´Â ¿äû¿¡ ´ëÇØ¼¸¸ Ç÷¯±×ÀÎ ÇÔ¼ö°¡ È£ÃâµÇµµ·Ï ÇÏ·Á´Â °æ¿ì, ±¸¼º ÆÄÀÏ Áö½Ã¹®¿¡ URL ÅÛÇø®Æ®¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿ÀºêÁ§Æ® À¯Çü ´Ü°è´Â ¿äûÀÌ Ã³¸®µÇ±â Àü¿¡ ¹ß»ýÇÏ°í ¿ÀºêÁ§Æ®°¡ Á¸ÀçÇÏ´ÂÁö ¿©ºÎ¸¦ Á¡°ËÇÏ´Â µ¥ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç ¿ÀºêÁ§Æ® ÀÔ·ÂÀ» ¼öÇàÇÕ´Ï´Ù.
void HTTPD_LINKAGE PostAuthFunction ( unsigned char *handle, long *return_code )
¿äûÀÌ Çã°¡µÈ ÈÄ ´Ù¸¥ 󸮰¡ ¼öÇàµÇ±â Àü¿¡ ÀÌ ´Ü°è¿¡¼ Á¤ÀÇµÈ ÇÔ¼ö°¡ È£ÃâµË´Ï´Ù. ÀÌ ÇÔ¼ö°¡ HTTP_OK¸¦ ¸®ÅÏÇÏ´Â °æ¿ì, ÇÁ·Ï½Ã ¼¹ö´Â ¿äûÀÌ Ã³¸®µÈ °ÍÀ¸·Î °£ÁÖÇÕ´Ï´Ù. ¸ðµç ÈÄ¼Ó ¿äû ´Ü°è°¡ »ý·«µÇ¸ç ÀÀ´ä ´Ü°è(º¯ÇüÀÚ, ·Î±× ¹× »çÈÄÁ¾·á)¸¸ ¼öÇàµË´Ï´Ù.
ÀÌ ´Ü°è¿¡¼´Â ¼¹ö¿¡¼ »çÀü Á¤ÀÇµÈ ¸ðµç ÇÔ¼ö°¡ À¯È¿ÇÕ´Ï´Ù.
void HTTPD_LINKAGE ServiceFunction ( unsigned char *handle, long *return_code )
ÀÌ ´Ü°è¿¡¼ Á¤ÀÇµÈ ÇÔ¼ö°¡ ¿äû¿¡ ´ëÇØ È£ÃâµË´Ï´Ù. ÅÛÇø®Æ®¿Í ÀÏÄ¡ÇÏ´Â ¿äû¿¡ ´ëÇØ¼¸¸ Ç÷¯±×ÀÎ ÇÔ¼ö°¡ È£ÃâµÇµµ·Ï ÇÏ·Á´Â °æ¿ì, ±¸¼º ÆÄÀÏ Áö½Ã¹®¿¡ URL ÅÛÇø®Æ®¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¼ºñ½º ´Ü°è´Â »çÀüÁ¾·á ¶Ç´Â »çÈÄ ±ÇÇÑ ºÎ¿© ´Ü°è¿¡¼ ÇØ°áµÇÁö ¸øÇÑ °æ¿ì ¿äûÀ» ÇØ°áÇÕ´Ï´Ù.
ÀÌ ´Ü°è¿¡¼´Â ¼¹ö¿¡¼ »çÀü Á¤ÀÇµÈ ¸ðµç ÇÔ¼ö°¡ À¯È¿ÇÕ´Ï´Ù.
URLÀÌ ¾Æ´Ñ HTTP ¸Þ¼Òµå¸¦ ±â¹ÝÀ¸·Î ½ÇÇàµÇ´Â »ç¿ëÀÚ ¼ºñ½º ÇÔ¼ö ±¸¼º Á¤º¸¿¡ ´ëÇØ¼´Â WebSphere Application Server Caching Proxy °ü¸® ¾È³»¼ÀÇ 'Enable Áö½Ã¹®'À» ÂüÁ¶ÇϽʽÿÀ.
ÀÌ ´Ü°è¿¡¼´Â ´ÙÀ½°ú °°Àº ³× °¡Áö ÇÔ¼ö¸¦ ±¸ÇöÇØ¾ß ÇÕ´Ï´Ù. (ÇÔ¼ö À̸§ÀÌ ÀÌ À̸§°ú ÀÏÄ¡ÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù.)
void * HTTPD_LINKAGE openFunction ( unsigned char *handle, long *return_code )
open ÇÔ¼ö´Â ÀÌ ½ºÆ®¸²ÀÇ µ¥ÀÌÅ͸¦ ó¸®Çϱâ À§ÇØ ÇÊ¿äÇÑ ÃʱâÈ(¿¹: ¹öÆÛ ÇÒ´ç)¸¦ ¼öÇàÇÕ´Ï´Ù. HTTP_OK ÀÌ¿ÜÀÇ ¸®ÅÏ Äڵ尡 ¹ß»ýÇϸé ÀÌ ÇÊÅÍ´Â Áߴܵ˴ϴÙ. (write ¹× close ÇÔ¼ö´Â È£ÃâµÇÁö ¾Ê½À´Ï´Ù.) »ç¿ëÀÚ°¡ ±¸Á¶¿¡ ´ëÇÑ °ø°£À» ÇÒ´çÇÒ ¼ö ÀÖµµ·Ï ÇÔ¼ö°¡ void Æ÷ÀÎÅ͸¦ ¸®ÅÏÇϰí, ÀÌ Æ÷ÀÎÅ͸¦ ´Ù½Ã ´ÙÀ½ ÇÔ¼öÀÇ correlator ¸Å°³º¯¼ö¿¡¼ »ç¿ëÀÚ¿¡°Ô Àü´ÞÇÕ´Ï´Ù.
void HTTPD_LINKAGE writeFunction ( unsigned char *handle, unsigned char *data, /* response data sent by the origin server */ unsigned long *length, /* length of response data */ void *correlator, /* pointer returned by the 'open' function */ long *return_code )
write ÇÔ¼ö´Â µ¥ÀÌÅ͸¦ ó¸®Çϰí, ¼¹ö¿¡¼ »çÀü Á¤ÀÇµÇ°í »õ µ¥ÀÌÅÍ ¶Ç´Â º¯°æµÈ µ¥ÀÌÅͰ¡ ÀÖ´Â HTTPD_write() ÇÔ¼ö¸¦ È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù. Ç÷¯±×ÀÎÀ¸·Î Àü´ÞµÈ ¹öÆÛ¸¦ ºñ¿ìµµ·Ï Çϰųª ¹ÞÀº ¹öÆÛ¸¦ ¼¹ö°¡ ºñ¿ìµµ·Ï ÇØ¼´Â ¾È µË´Ï´Ù.
»ç¿ëÀÚ°¡ write ÇÔ¼öÀÇ ¹üÀ§¿¡¼ µ¥ÀÌÅ͸¦ º¯°æÇÏÁö ¾ÊÀ¸·Á¸é ÇØ´ç µ¥ÀÌÅ͸¦ Ŭ¶óÀÌ¾ðÆ®¿¡ ´ëÇÑ ÀÀ´äÀ¸·Î Àü´ÞÇϱâ À§ÇØ open, write ¹× close ÇÔ¼öÀÇ ¹üÀ§¿¡¼ HTTPD_write ÇÔ¼ö¸¦ °è¼Ó È£ÃâÇØ¾ß ÇÕ´Ï´Ù. correlator Àμö´Â open ·çƾ¿¡¼ ¸®ÅÏµÈ µ¥ÀÌÅÍ ¹öÆÛ¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀÔ´Ï´Ù.
void HTTPD_LINKAGE closeFunction ( unsigned char *handle, void *correlator, long *return_code )
close ÇÔ¼ö´Â ÀÌ ½ºÆ®¸²ÀÇ µ¥ÀÌÅ͸¦ ó¸®ÇÏ´Â µ¥ ÇÊ¿äÇÑ Á¦°Å ÀÛ¾÷(¿¹: correlator ¹öÆÛÀÇ Ç÷¯½¬ ¹× ºñ¿ì±â)À» ¼öÇàÇÕ´Ï´Ù. correlator Àμö´Â open ·çƾ¿¡¼ ¸®ÅÏµÈ µ¥ÀÌÅÍ ¹öÆÛ¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀÔ´Ï´Ù.
void HTTPD_LINKAGE errorFunction ( unsigned char *handle, void *correlator, long *return_code )
error ÇÔ¼ö´Â ¿À·ù ÆäÀÌÁö°¡ Àü¼ÛµÇ±â Àü¿¡, Á¦°Å ÀÛ¾÷(¿¹: ¹öÆÛ µ¥ÀÌÅÍÀÇ Ç÷¯½¬ ¹×(¶Ç´Â) ºñ¿ì±â)À» ¼öÇàÇÒ ¼ö ÀÖµµ·Ï ÇÕ´Ï´Ù. À̶§ ¿À·ù ÆäÀÌÁö¸¦ ó¸®Çϱâ À§ÇØ open, write ¹× close ÇÔ¼ö°¡ È£ÃâµË´Ï´Ù. correlator Àμö´Â open ·çƾ¿¡¼ ¸®ÅÏµÈ µ¥ÀÌÅÍ ¹öÆÛ¿¡ ´ëÇÑ Æ÷ÀÎÅÍÀÔ´Ï´Ù.
ÁÖ:
void HTTPD_LINKAGE GCAdvisorFunction ( unsigned char *handle, long *return_code )
ÀÌ ´Ü°è¿¡¼ Á¤ÀÇµÈ ÇÔ¼ö°¡ °¡ºñÁö ÄÝ·º¼ÇÀ» ¼öÇàÇÏ´Â µ¿¾È ij½Ã¿¡¼ °¢ ÆÄÀÏ¿¡ ´ëÇØ È£ÃâµË´Ï´Ù. ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ¾î¶² ÆÄÀÏÀ» º¸°üÇÏ°í ¾î¶² ÆÄÀÏÀ» ¹ö¸±Áö °áÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÚ¼¼ÇÑ Á¤º¸´Â GC_* º¯¼ö¸¦ ÂüÁ¶ÇϽʽÿÀ.
void HTTPD_LINKAGE ProxyAdvisorFunction ( unsigned char *handle, long *return_code )
ÀÌ ´Ü°è¿¡¼ Á¤ÀÇµÈ ÇÔ¼ö°¡ °¢ ÇÁ·Ï½Ã ¿äû ¼ºñ½º Áß¿¡ È£ÃâµË´Ï´Ù. ¿¹¸¦ µé¾î, USE_PROXY º¯¼ö¸¦ ¼³Á¤Çϱâ À§ÇØ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
void HTTPD_LINKAGE LogFunction ( unsigned char *handle, long *return_code )
°¢ ¿äûÀÌ Ã³¸®µÇ°í Ŭ¶óÀÌ¾ðÆ®¿¡ ´ëÇÑ Åë½ÅÀÌ Á¾·áµÇ¸é ÀÌ ´Ü°è¿¡¼ Á¤ÀÇµÈ ÇÔ¼ö°¡ È£ÃâµË´Ï´Ù. ÅÛÇø®Æ®¿Í ÀÏÄ¡ÇÏ´Â ¿äû¿¡ ´ëÇØ¼¸¸ Ç÷¯±×ÀÎ ÇÔ¼ö°¡ È£ÃâµÇµµ·Ï ÇÏ·Á´Â °æ¿ì, ±¸¼º ÆÄÀÏ Áö½Ã¹®¿¡ URL ÅÛÇø®Æ®¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ÇÔ¼ö´Â ¿äû ó¸®ÀÇ ¼º°ø ¹× ½ÇÆÐ ¿©ºÎ¿Í °ü°è¾øÀÌ È£ÃâµË´Ï´Ù. ·Î±× Ç÷¯±×ÀÎÀ¸·Î ±âº» ·Î±× ¸ÞÄ¿´ÏÁòÀ» µ¤¾î¾²Áö ¾ÊÀ¸·Á¸é ¸®ÅÏ Äڵ带 HTTP_OK ´ë½Å¿¡ HTTP_NOACTIONÀ¸·Î ¼³Á¤ÇϽʽÿÀ.
void HTTPD_LINKAGE ErrorFunction ( unsigned char *handle, long *return_code )
ÀÌ ´Ü°è¿¡¼ Á¤ÀÇµÈ ÇÔ¼ö°¡ ½ÇÆÐÇÑ ¿äû¿¡ ´ëÇØ È£ÃâµË´Ï´Ù. ÅÛÇø®Æ®¿Í ÀÏÄ¡ÇÏ´Â ¿äû¿¡ ´ëÇØ¼¸¸ Ç÷¯±×ÀÎ ÇÔ¼ö°¡ È£ÃâµÇµµ·Ï ÇÏ·Á´Â °æ¿ì, ±¸¼º ÆÄÀÏ Áö½Ã¹®¿¡ URL ÅÛÇø®Æ®¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿À·ù ´Ü°è¿¡¼´Â ¿À·ù ÀÀ´äÀ» »ç¿ëÀÚ Á¤ÀÇÇÒ ¼ö ÀÖ´Â ±âȸ°¡ ÀÖ½À´Ï´Ù.
void HTTPD_LINKAGE PostExitFunction ( unsigned char *handle, long *return_code )
ÀÌ ´Ü°è¿¡¼ Á¤ÀÇµÈ ÇÔ¼ö°¡ ¿äûÀÇ ¼º°ø ¹× ½ÇÆÐ ¿©ºÎ¿Í °ü°è¾øÀÌ ¿äû¿¡ ´ëÇØ È£ÃâµË´Ï´Ù. ÀÌ ´Ü°è¿¡¼´Â ¿äûÀ» ó¸®ÇÏ´Â Ç÷¯±×ÀÎÀÌ ÇÒ´çÇÑ ¸ðµç ÀÚ¿ø¿¡ ´ëÇÑ Å¸½ºÅ©¸¦ Á¤¸®ÇÒ ¼ö ÀÖ½À´Ï´Ù.
void HTTPD_LINKAGE ServerTermFunction ( unsigned char *handle, long *return_code )
¼¹ö°¡ Á¤»óÀûÀ¸·Î Á¾·áµÇ¸é ÀÌ ´Ü°è¿¡¼ Á¤ÀÇµÈ ÇÔ¼ö°¡ È£ÃâµË´Ï´Ù. ¼¹ö ÃʱâÈ ´Ü°è¿¡¼ ÇÒ´çµÈ ÀÚ¿ø¿¡ ´ëÇÑ Á¦°Å¸¦ »ç¿ë °¡´ÉÇÏ°Ô ÇÕ´Ï´Ù. ÀÌ ´Ü°è¿¡¼ HTTP_* ÇÔ¼ö¸¦ È£ÃâÇÏÁö ¸¶½Ê½Ã¿À. (¿¹»óÄ¡ ¸øÇÑ °á°ú°¡ ¹ß»ýÇÒ ¼ö ÀÖ½À´Ï´Ù.) »ç¿ëÀÚ ±¸¼º ÆÄÀÏ¿¡ ¼¹ö Á¾·á¸¦ À§ÇÑ Çϳª ÀÌ»óÀÇ Caching Proxy API Áö½Ã¹®ÀÌ ÀÖ´Ù¸é ÀÌµé ¸ðµÎ°¡ È£ÃâµË´Ï´Ù.
ÀÌµé ¸®ÅÏ ÄÚµå´Â World Wide Web Consortium¿¡¼ ¹ßÇ¥ÇÑ HTTP 1.1 ½ºÆå, RFC 2616À» µû¸¨´Ï´Ù(www.w3.org/pub/WWW/Protocols/). »ç¿ëÀÚ Ç÷¯±×ÀÎ ÇÔ¼ö´Â ´ÙÀ½ °ª Áß Çϳª¸¦ ¸®ÅÏÇÕ´Ï´Ù.
°ª | ¸®ÅÏ ÄÚµå |
0 | HTTP_NOACTION |
100 | HTTP_CONTINUE |
101 | HTTP_SWITCHING_PROTOCOLS |
200 | HTTP_OK |
201 | HTTP_CREATED |
202 | HTTP_ACCEPTED |
203 | HTTP_NON_AUTHORITATIVE |
204 | HTTP_NO_CONTENT |
205 | HTTP_RESET_CONTENT |
206 | HTTP_PARTIAL_CONTENT |
300 | HTTP_MULTIPLE_CHOICES |
301 | HTTP_MOVED_PERMANENTLY |
302 | HTTP_MOVED_TEMPORARILY |
302 | HTTP_FOUND |
303 | HTTP_SEE_OTHER |
304 | HTTP_NOT_MODIFIED |
305 | HTTP_USE_PROXY |
307 | HTTP_TEMPORARY_REDIRECT |
400 | HTTP_BAD_REQUEST |
401 | HTTP_UNAUTHORIZED |
403 | HTTP_FORBIDDEN |
404 | HTTP_NOT_FOUND |
405 | HTTP_METHOD_NOT_ALLOWED |
406 | HTTP_NOT_ACCEPTABLE |
407 | HTTP_PROXY_UNAUTHORIZED |
408 | HTTP_REQUEST_TIMEOUT |
409 | HTTP_CONFLICT |
410 | HTTP_GONE |
411 | HTTP_LENGTH_REQUIRED |
412 | HTTP_PRECONDITION_FAILED |
413 | HTTP_ENTITY_TOO_LARGE |
414 | HTTP_URI_TOO_LONG |
415 | HTTP_BAD_MEDIA_TYPE |
416 | HTTP_BAD_RANGE |
417 | HTTP_EXPECTATION_FAILED |
500 | HTTP_SERVER_ERROR |
501 | HTTP_NOT_IMPLEMENTED |
502 | HTTP_BAD_GATEWAY |
503 | HTTP_SERVICE_UNAVAILABLE |
504 | HTTP_GATEWAY_TIMEOUT |
505 | HTTP_BAD_VERSION |
¼¹öÀÇ »çÀü Á¤ÀÇµÈ ÇÔ¼ö ¹× ¸ÅÅ©·Î¸¦ »ç¿ëÀÚ °íÀ¯ÀÇ Ç÷¯±×ÀÎ ÇÔ¼ö·ÎºÎÅÍ È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù. ¹Ýµå½Ã »çÀü Á¤ÀÇµÈ À̸§À» »ç¿ëÇÏ°í ¾Æ·¡¿¡ ³ª¿Í ÀÖ´Â Çü½ÄÀ» µû¶ó¾ß ÇÕ´Ï´Ù. ¸Å°³º¯¼ö ¼³¸í¿¡¼ ¹®ÀÚ i´Â ÀÔ·Â ¸Å°³º¯¼ö¸¦, ¹®ÀÚ o´Â Ãâ·Â ¸Å°³º¯¼ö¸¦, ±×¸®°í i/o´Â ÀÔ·Â ¹× Ãâ·Â ¸Å°³º¯¼ö¸¦ ¸ðµÎ Ç¥½ÃÇÕ´Ï´Ù.
¿äûÀÇ ¼º°ø ¿©ºÎ¿¡ µû¶ó HTTPD ¸®ÅÏ ÄÚµå Áß Çϳª¸¦ ¸®ÅÏÇÕ´Ï´Ù. ÀÌ ÄÚµå´Â »çÀü Á¤ÀÇ ÇÔ¼ö ¹× ¸ÅÅ©·ÎÀÇ ¸®ÅÏ Äڵ忡¼ ¼³¸íÇÕ´Ï´Ù.
ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ ù ¹øÂ° ¸Å°³º¯¼ö·Î »ç¿ëÀÚÀÇ Ç÷¯±×Àο¡ Á¦°øµÈ ÇÚµéÀ» »ç¿ëÇϽʽÿÀ. ±×·¸Áö ¾ÊÀ¸¸é ÇÔ¼ö´Â HTTPD_PARAMETER_ERROR ¿À·ù Äڵ带 ¸®ÅÏÇÕ´Ï´Ù. NULLÀº À¯È¿ÇÑ ÇÚµé·Î ÀÎÁ¤µÇÁö ¾Ê½À´Ï´Ù.
void HTTPD_LINKAGE HTTPD_authenticate ( unsigned char *handle, /* i; handle */ long *return_code /* o; return code */ )
void HTTPD_LINKAGE HTTPD_cacheable_url ( unsigned char *handle, /* i; handle */ unsigned char *url, /* i; URL to check */ unsigned char *req_method, /* i; request method for the URL */ long *retval /* o; return code */ )
¸®Åϰª HTTPD_SUCCESS´Â URL
ÄÁÅÙÃ÷°¡ ij½Ã °¡´ÉÇÔÀ» Ç¥½ÃÇϰí, HTTPD_FAILURE´Â ÄÁÅÙÃ÷°¡ ij½Ã ºÒ°¡´ÉÇÔÀ» Ç¥½ÃÇÕ´Ï´Ù.
HTTPD_INTERNAL_ERRORµµ ÀÌ ÇÔ¼ö¿¡ ´ëÇØ °¡´ÉÇÑ ¸®ÅϰªÀÔ´Ï´Ù.
void HTTPD_LINKAGE HTTPD_close ( unsigned char *handle, /* i; handle */ long *return_code /* o; return code */ )
void HTTPD_LINKAGE HTTPD_exec ( unsigned char *handle, /* i; handle */ unsigned char *name, /* i; name of script to run */ unsigned long *name_length, /* i; length of the name */ long *return_code /* o; return code */ )
void HTTPD_LINKAGE HTTPD_extract ( unsigned char *handle, /* i; handle */ unsigned char *name, /* i; name of variable to extract */ unsigned long *name_length, /* i; length of the name */ unsigned char *value, /* o; buffer in which to put the value */ unsigned long *value_length, /* i/o; buffer size */ long *return_code /* o; return code */ )
¸¸ÀÏ ÀÌ ÇÔ¼ö°¡ ÄÚµå HTTPD_BUFFER_TOO_SMALLÀ» ¸®ÅÏÇÏ°Ô µÇ¸é »ç¿ëÀÚ°¡ ¿äûÇÑ ¹öÆÛ´Â ÃßÃâÇÑ °ª¿¡ ºñÇØ Å©±â°¡ ÃæºÐÇÏÁö ¾Ê½À´Ï´Ù. ÀÌ °æ¿ì, ÇÔ¼ö°¡ ¹öÆÛ¸¦ »ç¿ëÇÏÁö ¾ÊÁö¸¸, ÀÌ °ªÀ» ÃßÃâÇϱâ À§ÇØ ÇÊ¿äÇÑ ¹öÆÛ Å©±â·Î value_length ¸Å°³º¯¼ö¸¦ °»½ÅÇÕ´Ï´Ù. Å©±â°¡ ÃÖ¼ÒÇÑ ¸®ÅÏµÈ value_lengthÀÎ ¹öÆÛ¸¦ »ç¿ëÇÏ¿© ´Ù½Ã ÃßÃâÇϽʽÿÀ.
void HTTPD_LINKAGE HTTPD_file ( unsigned char *handle, /* i; handle */ unsigned char *name, /* i; name of file to send */ unsigned long *name_length, /* i; length of the name */ long *return_code /* o; return code */ )
const unsigned char * /* o; value of variable */ HTTPD_LINKAGE httpd_getvar( unsigned char *handle, /* i; handle */ unsigned char *name, /* i; variable name */ unsigned long *n /* i; index number for the array containing the header */ )
Çì´õ¸¦ Æ÷ÇÔÇÏ´Â ¹è¿ÀÇ »öÀÎ ¹øÈ£´Â 0ºÎÅÍ ½ÃÀÛÇÕ´Ï´Ù. ¹è¿ÀÇ Ã¹ ¹øÂ° Ç׸ñÀ» °¡Á® ¿À·Á¸é n °ªÀ¸·Î 0À» »ç¿ëÇϰí, ´Ù¼¸ ¹øÂ° Ç׸ñÀ» °¡Á® ¿À·Á¸é n °ªÀ¸·Î 4¸¦ »ç¿ëÇϽʽÿÀ.
void HTTPD_LINKAGE HTTPD_log_access ( unsigned char *handle, /* i; handle */ unsigned char *value, /* i; data to write */ unsigned long *value_length, /* i; length of the data */ long *return_code /* o; return code */ )
¼¹ö ¾×¼¼½º ·Î±×¿¡¼ ÆÛ¼¾Æ® ±âÈ£(%)¸¦ ±â·ÏÇÒ °æ¿ì ¿¡½ºÄÉÀÌÇÁ ±âÈ£´Â ÇÊ¿äÇÏÁö ¾Ê½À´Ï´Ù.
void HTTPD_LINKAGE HTTPD_log_error ( unsigned char *handle, /* i; handle */ unsigned char *value, /* i; data to write */ unsigned long *value_length, /* i; length of the data */ long *return_code /* o; return code */ )
¼¹ö ¿À·ù ·Î±×¿¡¼ ÆÛ¼¾Æ® ±âÈ£(%)¸¦ ±â·ÏÇÒ °æ¿ì ¿¡½ºÄÉÀÌÇÁ ±âÈ£°¡ ÇÊ¿äÇÏÁö ¾Ê½À´Ï´Ù.
void HTTPD_LINKAGE HTTPD_log_event ( unsigned char *handle, /* i; handle */ unsigned char *value, /* i; data to write */ unsigned long *value_length, /* i; length of the data */ long *return_code /* o; return code */ )
¼¹ö À̺¥Æ® ·Î±×¿¡¼ ÆÛ¼¾Æ® ±âÈ£(%)¸¦ ±â·ÏÇÒ °æ¿ì ¿¡½ºÄÉÀÌÇÁ ±âÈ£°¡ ÇÊ¿äÇÏÁö ¾Ê½À´Ï´Ù.
void HTTPD_LINKAGE HTTPD_log_trace ( unsigned char *handle, /* i; handle */ unsigned char *value, /* i; data to write */ unsigned long *value_length, /* i; length of the data */ long *return_code /* o; return code */ )
¼¹ö ÃßÀû ·Î±×¿¡¼ ÆÛ¼¾Æ® ±âÈ£(%)¸¦ ±â·ÏÇÒ °æ¿ì ¿¡½ºÄÉÀÌÇÁ ±âÈ£°¡ ÇÊ¿äÇÏÁö ¾Ê½À´Ï´Ù.
void HTTPD_LINKAGE HTTPD_open ( unsigned char *handle, /* i; handle */ long *return_code /* o; return code */ )
void HTTPD_LINKAGE HTTPD_proxy ( unsigned char *handle, /* i; handle */ unsigned char *url_name, /* i; URL for the proxy request */ unsigned long *name_length, /* i; length of URL */ void *request_body, /* i; body of request */ unsigned long *body_length, /* i; length of body */ long *return_code /* o; return code */ )
void HTTPD_LINKAGE HTTPD_read ( unsigned char *handle, /* i; handle */ unsigned char *value, /* i; buffer for data */ unsigned long *value_length, /* i/o; buffer size (data length) */ long *return_code /* o; return code */ )
void HTTPD_LINKAGE HTTPD_restart ( long *return_code /* o; return code */ )
ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é º¯¼öµµ ÀÛ¼ºÇÒ ¼ö ÀÖÀ½¿¡ À¯ÀÇÇϽʽÿÀ. »ç¿ëÀÚ°¡ ÀÛ¼ºÇÑ º¯¼ö´Â º¯¼ö¿¡ ¼³¸íµÈ HTTP_ ¹× PROXY_ Á¢µÎºÎ¿¡ ´ëÇÑ Çù¾à¿¡ ÀÇÁ¸ÇÕ´Ï´Ù. HTTP_·Î ½ÃÀÛÇÏ´Â º¯¼ö¸¦ ÀÛ¼ºÇÏ¸é ±× ÀÀ´äÀ¸·Î, HTTP_ Á¢µÎºÎ¾øÀÌ Å¬¶óÀÌ¾ðÆ®¿¡ Çì´õ·Î Àü¼ÛµË´Ï´Ù. ¿¹¸¦ µé¾î, À§Ä¡ Çì´õ¸¦ ¼³Á¤ÇÏ·Á¸é º¯¼ö À̸§ HTTP_LOCATION°ú ÇÔ²² HTTPD_set()À» »ç¿ëÇϽʽÿÀ. PROXY_ prefix·Î ÀÛ¼ºµÈ º¯¼ö´Â ÄÁÅÙÃ÷ ¼¹ö¿¡ ´ëÇØ ¿äûÇÑ Çì´õ·Î Àü¼ÛµË´Ï´Ù. CGI_ Á¢µÎºÎ·Î ÀÛ¼ºµÈ º¯¼ö´Â CGI ÇÁ·Î±×·¥¿¡ Àü´ÞµË´Ï´Ù.
ÀÌ ÇÔ¼ö´Â ¸ðµç ´Ü°è¿¡¼ À¯È¿ÇÏÁö¸¸ ¸ðµç º¯¼ö°¡ ¸ðµç ´Ü°è¿¡¼ À¯È¿ÇÏÁö´Â ¾Ê½À´Ï´Ù.
void HTTPD_LINKAGE HTTPD_set ( unsigned char *handle, /* i; handle */ unsigned char *name, /* i; name of value to set */ unsigned long *name_length, /* i; length of the name */ unsigned char *value, /* i; buffer with value */ unsigned long *value_length, /* i; length of value */ long *return_code /* o; return code */ )
long /* o; return code */ HTTPD_LINKAGE httpd_setvar ( unsigned char *handle, /* i; handle */ unsigned char *name, /* i; variable name */ unsigned char *value, /* i; new value */ unsigned long *addHdr /* i; add header or replace it */ )addHdr
¸Å°³º¯¼öÀÇ °¡´ÉÇÑ °ª¿¡´Â ³× °³°¡ ÀÖ½À´Ï´Ù.
ÀÌ °ªÀº HTAPI.h¿¡¼ Á¤Àǵ˴ϴÙ.
void HTTPD_LINKAGE httpd_variant_insert ( unsigned char *handle, /* i; handle */ unsigned char *URI, /* i; URI of this object */ unsigned char *dimension, /* i; dimension of variation */ unsigned char *variant, /* i; value of the variant */ unsigned char *filename, /* i; file containing the object */ long *return_code /* o; return code */ )
ÁÖ:
Mozilla 4.0 (compatible; BatBrowser 94.1.2; Bat OS)
void HTTPD_LINKAGE httpd_variant_lookup ( unsigned char *handle, /* i; handle */ unsigned char *URI, /* URI of this object */ unsigned char *dimension, /* i; dimension of variation */ unsigned char *variant, /* i; value of the variant */ long *return_code); /* o; return code */
³»¿ë À¯ÇüÀ» ¼³Á¤ÇÏ¿© ÀÌ ÇÔ¼ö¸¦ óÀ½À¸·Î È£ÃâÇÒ °æ¿ì, ¼¹ö´Â »ç¿ëÀÚ°¡ CGI µ¥ÀÌÅÍ ½ºÆ®¸²À» Àü¼ÛÇϰí ÀÖ´Â °ÍÀ¸·Î ¹Þ¾ÆµéÀÔ´Ï´Ù.
void HTTPD_LINKAGE HTTPD_write ( unsigned char *handle, /* i; handle */ unsigned char *value, /* i; data to send */ unsigned char *value_length, /* i; length of the data */ long *return_code); /* o; return code */
¼¹ö´Â ¿äûÀÇ ¼º°ø ¿©ºÎ¿¡ µû¶ó ¸®ÅÏ ÄÚµå ¸Å°³º¯¼ö¸¦ ÀÌµé °ª Áß Çϳª·Î ¼³Á¤ÇÕ´Ï´Ù.
°ª | »óÅ ÄÚµå | ¼³¸í |
---|---|---|
-1 | HTTPD_UNSUPPORTED | ÀÌ ÇÔ¼ö´Â Áö¿øµÇÁö ¾Ê½À´Ï´Ù. |
0 | HTTPD_SUCCESS | ÇÔ¼ö°¡ Á¤»óÀûÀ¸·Î ¼öÇàµÇ¾úÀ¸¸ç Ãâ·Â Çʵ尡 À¯È¿ÇÕ´Ï´Ù. |
1 | HTTPD_FAILURE | ÇÔ¼ö°¡ ½ÇÆÐÇß½À´Ï´Ù. |
2 | HTTPD_INTERNAL_ERROR | ³»ºÎ ¿À·ù°¡ ¹ß»ýÇØ¼ ÀÌ ¿äûÀ» °è¼Ó ó¸®ÇÒ ¼ö ¾ø½À´Ï´Ù. |
3 | HTTPD_PARAMETER_ERROR | Çϳª ÀÌ»óÀÇ ¿Ã¹Ù¸£Áö ¾ÊÀº ¸Å°³º¯¼ö°¡ Àü´ÞµÇ¾ú½À´Ï´Ù. |
4 | HTTPD_STATE_CHECK | ÀÌ ÇÔ¼ö´Â ÀÌ ÇÁ·Î¼¼½º ´Ü°è¿¡ ¿Ã¹Ù¸£Áö ¾Ê½À´Ï´Ù. |
5 | HTTPD_READ_ONLY | (HTTPD_set ¹× httpd_setvar¿¡ ÀÇÇØ¼¸¸ ¸®ÅϵÊ.) ÀÌ º¯¼ö´Â Àбâ Àü¿ëÀ̸ç Ç÷¯±×ÀÎÀ¸·Î ¼³Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. |
6 | HTTPD_BUFFER_TOO_SMALL | (HTTPD_set, httpd_setvar ¹× HTTPD_read¿¡ ÀÇÇØ ¸®ÅϵÊ.) Á¦°øµÈ ¹öÆÛ°¡ ³Ê¹« ÀÛ½À´Ï´Ù. |
7 | HTTPD_AUTHENTICATE_FAILED | (HTTPD_authenticate¿¡ ÀÇÇØ¼¸¸ ¸®ÅϵÊ.) ÀÎÁõÀÌ ½ÇÆÐÇß½À´Ï´Ù. ÀÚ¼¼ÇÑ Á¤º¸´Â HTTP_RESPONSE ¹× HTTP_REASON º¯¼ö¸¦ Á¡°ËÇϽʽÿÀ. |
8 | HTTPD_EOF | (HTTPD_read¿¡ ÀÇÇØ¼¸¸ ¸®ÅϵÊ.) ¿äû º»¹®ÀÇ ³¡À» Ç¥½ÃÇÕ´Ï´Ù. |
9 | HTTPD_ABORT_REQUEST | Ŭ¶óÀÌ¾ðÆ®°¡ ¿äû¿¡ ÀÇÇØ ÁöÁ¤µÈ Á¶°Ç¿¡ ÀÏÄ¡ÇÏÁö ¾Ê´Â ¿£Æ¼Æ¼ ű׸¦ Á¦°øÇؼ, ÀÌ ¿äûÀº Áߴܵ˴ϴÙ. |
10 | HTTPD_REQUEST_SERVICED | (HTTPD_proxy¿¡ ÀÇÇØ¼¸¸ ¸®ÅϵÊ.) È£ÃâµÈ ÀÌ ÇÔ¼ö°¡ ÀÌ ¿äû¿¡ ´ëÇÑ ÀÀ´äÀ» ¿Ï·áÇß½À´Ï´Ù. |
11 | HTTPD_RESPONSE_ALREADY_COMPLETED | ¿äû¿¡ ´ëÇÑ ÀÀ´äÀÌ ÀÌ¹Ì ¿Ï·áµÇ¾î ÀÌ ÇÔ¼ö°¡ ½ÇÆÐÇß½À´Ï´Ù. |
12 | HTTPD_WRITE_ONLY | ÀÌ º¯¼ö´Â ¾²±â Àü¿ëÀ̸ç Ç÷¯±×ÀÎÀ¸·Î ÀÐÀ» ¼ö ¾ø½À´Ï´Ù. |
¿äû ÇÁ·Î¼¼½ºÀÇ °¢ ´Ü°è¿¡´Â ±¸¼º Áö½Ã¹®ÀÌ ÀÖ°í ÀÌ´Â °¢ ´Ü°è¿¡¼ È£ÃâÇÏ¿© ½ÇÇàÇϰíÀÚ ÇÏ´Â Ç÷¯±×ÀÎ ÇÔ¼ö¸¦ Ç¥½ÃÇÒ ¼ö ÀÖ°Ô ÇÕ´Ï´Ù. »ç¿ëÀÚ ¼¹öÀÇ ±¸¼º ÆÄÀÏ(ibmproxy.conf)À» ¼öµ¿À¸·Î ÆíÁý ¶Ç´Â °»½ÅÇϰųª, Caching Proxy ±¸¼º ¹× °ü¸® ¾ç½ÄÀÇ API ¿äû ó¸® ¾ç½ÄÀ» ÀÌ¿ëÇÏ¿© Áö½Ã¹®À» »ç¿ëÀÚ ¼¹öÀÇ ±¸¼º ÆÄÀÏ¿¡ Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀÌ´Â ¼¹ö°¡ ±¸¼º ÆÄÀÏ ³»¿¡¼ Service, NameTrans, Exec, Fail, Map, Pass, Proxy, ProxyWAS ¹× Redirect Áö½Ã¹® ¼øÀ¸·Î ó¸®ÇÔÀ» ÀǹÌÇÕ´Ï´Ù. URLÀ» ÆÄÀÏ¿¡ ¼º°øÀûÀ¸·Î ¸ÊÇÎÇϸé, ´Ù¸¥ Áö½Ã¹®À» Àаųª ó¸®ÇÏÁö ¾Ê½À´Ï´Ù. (Map Áö½Ã¹®Àº ¿¹¿ÜÀÔ´Ï´Ù. ÇÁ·Ï½Ã ¼¹ö ¸ÊÇÎ ±ÔÄ¢¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â WebSphere Application Server Caching Proxy °ü¸® ¾È³»¼¸¦ ÂüÁ¶ÇϽʽÿÀ.)
ÀÌ·¯ÇÑ ±¸¼º ÆÄÀÏ Áö½Ã¹®Àº ibmproxy.conf ÆÄÀÏ¿¡¼ ÇÑ Çà(¿©±â¼ ¸í½ÃÀûÀ¸·Î ÁöÁ¤ÇÑ °ø¹é ¿Ü¿¡´Â °ø¹éÀÌ ¾øÀ½)À¸·Î ³ªÅ¸³³´Ï´Ù. ±¸¹® ¿¹Á¦¿¡¼ Àб⠽±µµ·Ï ÇàÀ» ¹Ù²Ù¾ú´õ¶óµµ ½ÇÁ¦ Áö½Ã¹®ÀÇ ÀÌ ÁöÁ¡¿¡¼´Â °ø¹éÀÌ ¾ø¾î¾ß ÇÕ´Ï´Ù.
ÀÌ Áö½Ã¹®µéÀÇ º¯¼ö¿¡´Â ´ÙÀ½°ú °°Àº Àǹ̰¡ ÀÖ½À´Ï´Ù.
Service Áö½Ã¹®¿¡¼´Â °æ·Î Á¤º¸¿¡ ¾×¼¼½ºÇϰíÀÚ ÇÏ´Â °æ¿ì ÇÔ¼ö À̸§ µÚ¿¡ º°Ç¥(*)¸¦ ÁöÁ¤ÇØ¾ß ÇÕ´Ï´Ù.
±¸¹®À» Æ÷ÇÔÇÏ¿© ÀÌ Áö½Ã¹®¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â WebSphere Application Server Caching Proxy °ü¸® ¾È³»¼¸¦ ÂüÁ¶ÇϽʽÿÀ.
Caching Proxy API´Â ¹öÀü 4.6.1À» ÅëÇØ ICAPI ¹× GWAPI¿ÍÀÇ ¿ªÈ£È¯ÀÌ °¡´ÉÇÕ´Ï´Ù.
Caching Proxy API¸¦ »ç¿ëÇÏ·Á¸é C·Î ÀÛ¼ºµÈ CGI ÀÀ¿ëÇÁ·Î±×·¥À» Æ÷ÆÃÇÏ´Â ÁöħÀ» »ç¿ëÇϽʽÿÀ.
API ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¶§, ¿ø°Ý Ŭ¶óÀÌ¾ðÆ®¿Í ¼¹ö ½Ã½ºÅÛ¿¡ ´ëÇÑ Á¤º¸¸¦ Á¦°øÇÏ´Â Caching Proxy º¯¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÁÖ:
ACCEPT_RANGES BYTES CLIENT_ADDR 9.67.84.3
ÀÌ º¯¼ö´Â PostAuthorization, PostExit, ProxyAdvisor ¶Ç´Â Log steps¿¡¼ »ç¿ëµË´Ï´Ù.
http://www.anynet.com/~userk/main.htm
Mon, 01 Mar 2002 19:41:17 GMT
Mon, 01 Mar 1998 19:41:17 GMT
d:\wwwhome\foo
/wwwhome/foo
application/x-www-form-urlencoded
7034
NAME=Eugene+T%2E+Fox&ADDR=etfox%7Cibm.net&INTEREST=xyz
http://www.company.com/homepage
application/x-www-form-urlencoded
¸ÕÀú, ¿ë¾î¿¡ ´ëÇØ °£·«È÷ »ìÆìº¸±â·Î ÇϰڽÀ´Ï´Ù.
±×¸² 3¿¡¼´Â ÇÁ·Ï½Ã ¼¹öÀÇ ÀÎÁõ ¹× ±ÇÇÑ ºÎ¿© ÇÁ·Î¼¼½º¸¦ ³ªÅ¸³À´Ï´Ù.
±×¸² 3¿¡ Ç¥½ÃµÈ °Íó·³ ÀÎÁõ ÇÁ·Î¼¼½º ÃʱâÈ´Â ¼¹öÀÇ ÀÎÁõ ¹× ±ÇÇÑ ºÎ¿© ÇÁ·Î¼¼½º Áß Ã¹ ´Ü°èÀÔ´Ï´Ù.
Caching Proxy¿¡¼ ÀÎÁõÀº ±ÇÇÑ ºÎ¿© ÇÁ·Î¼¼½ºÀÇ ÀϺÎÀÔ´Ï´Ù. ÀÌ´Â ÀÎÁõÀÌ ÇʼöÀÏ °æ¿ì¿¡¸¸ ½ÇÇàµË´Ï´Ù.
ÇÁ·Ï½Ã ¼¹ö´Â ±ÇÇÑ ºÎ¿©°¡ ÇÊ¿äÇÑ ¿äûÀ» ó¸®ÇÒ ¶§ ÀÌµé ´Ü°è¸¦ µû¸¨´Ï´Ù.
Caching Proxy Ç÷¯±×ÀÎÀÌ °íÀ¯ ±ÇÇÑ ºÎ¿© ÇÁ·Î¼¼½º¸¦ Á¦°øÇÒ °æ¿ì, ÀÌ´Â ±âº» ¼¹ö ±ÇÇÑ ºÎ¿© ¹× ÀÎÁõÀ» µ¤¾î¾²±âÇÕ´Ï´Ù. ±×·¯¹Ç·Î »ç¿ëÀÚ ±¸¼º ÆÄÀÏ ¾È¿¡ ±ÇÇÑ ºÎ¿© Áö½Ã¹®ÀÌ ÀÖÀ¸¸é À̵é°ú ¿¬°üµÇ´Â Ç÷¯±×ÀÎ ÇÔ¼ö ¶ÇÇÑ ÇÊ¿äÇÑ ¸ðµç ÀÎÁõÀ» ó¸®ÇØ¾ß ÇÕ´Ï´Ù. »çÀü Á¤ÀÇµÈ HTTPD_authenticate() ÇÔ¼ö°¡ »ç¿ëÇϵµ·Ï Á¦°øµË´Ï´Ù.
»ç¿ëÀÚÀÇ ±ÇÇÑ ºÎ¿© Ç÷¯±×Àο¡ ÀÎÁõÀ» Á¦°øÇÒ ¼ö ÀÖ´Â ¹æ¹ý¿¡´Â ´ÙÀ½ ¼¼ °¡Áö°¡ ÀÖ½À´Ï´Ù.
±ÇÇÑ ºÎ¿© ´Ü°è°¡ ½ÇÇàµÇ¸é ±ÇÇÑ ºÎ¿© Ç÷¯±×ÀÎ ÇÔ¼ö°¡ ¼öÇàµÇ°í ±×¿¡ µû¶ó ÀÎÁõ Ç÷¯±×ÀÎ ÇÔ¼ö°¡ È£ÃâµË´Ï´Ù.
±ÇÇÑ ºÎ¿© ´Ü°è°¡ ½ÇÇàµÇ¸é ±ÇÇÑ ºÎ¿© Ç÷¯±×ÀÎ ÇÔ¼ö°¡ ¼öÇàµÇ°í ±×¿¡ µû¶ó ±âº» ¼¹ö ÀÎÁõÀÌ È£ÃâµË´Ï´Ù.
±ÇÇÑ ºÎ¿© ´Ü°è°¡ ½ÇÇàµÇ¸é »ç¿ëÀÚ ±ÇÇÑ ºÎ¿© Ç÷¯±×ÀÎ ÇÔ¼ö°¡ ¼öÇàµÇ°í ±×¿¡ µû¶ó °Å±â¿¡ Æ÷ÇÔµÈ ÀÎÁõÀÌ ¼öÇàµË´Ï´Ù.
Caching Proxy Ç÷¯±×ÀÎÀÌ °íÀ¯ÀÇ ±ÇÇÑ ºÎ¿© ÇÁ·Î¼¼½º¸¦ Á¦°øÇÏÁö ¾Ê´Â °æ¿ì, ´ÙÀ½ ¸Þ¼Òµå¸¦ »ç¿ëÇÏ¿© »ç¿ëÀÚ Á¤ÀÇ ÀÎÁõÀ» Á¦°øÇÒ ¼ö ÀÖ½À´Ï´Ù.
±ÇÇÑ ºÎ¿© ´Ü°è°¡ ½ÇÇàµÇ¸é ±âº» ¼¹ö ±ÇÇÑ ºÎ¿©°¡ ¼öÇàµÇ°í ±×¿¡ µû¶ó ÀÎÁõ Ç÷¯±×ÀÎ ÇÔ¼ö°¡ È£ÃâµË´Ï´Ù.
´ÙÀ½ »çÇ×À» ±â¾ïÇϽʽÿÀ.
º¯Çü ij½ÌÀ» »ç¿ëÇÏ¿© ¿ø·¡ ¹®¼(URI)ÀÇ ¼öÁ¤µÈ Çü½ÄÀ¸·Î µÇ¾î ÀÖ´Â µ¥ÀÌÅ͸¦ ij½ÃÇÒ ¼ö ÀÖ½À´Ï´Ù. Caching Proxy´Â API¸¦ ÅëÇØ »ý¼ºµÈ º¯ÇüÀ» ó¸®ÇÕ´Ï´Ù. º¯ÇüÀº ±âº» ¹®¼ÀÇ ´Ù¸¥ ¹öÀüÀ» ¸»ÇÕ´Ï´Ù.
ÀϹÝÀûÀ¸·Î, ±âÁ¡ ¼¹ö°¡ º¯ÇüÀ» º¸³¾ °æ¿ì, ±× ¼¹ö´Â ±× º¯ÇüÀ» ½Äº°ÇÒ ¼ö ¾ø½À´Ï´Ù. Caching Proxy´Â Ç÷¯±×Àο¡¼ ÀÛ¼ºÇÑ º¯Çü¸¸À» Áö¿øÇÕ´Ï´Ù(¿¹: ÄÚµå ÆäÀÌÁö º¯È¯).Ç÷¯±×ÀÎÀÌ HTTP Çì´õ¿¡ ¾ø´Â ±âÁØ¿¡ µû¶ó º¯ÇüÀ» ÀÛ¼ºÇÏ´Â °æ¿ì, Caching Proxy°¡ ±âÁ¸ º¯ÇüÀ» Á¤È®È÷ ½Äº°ÇÒ ¼ö ÀÖµµ·Ï PreExit ¶Ç´Â PostAuthorizationÀ» Æ÷ÇÔ½ÃÄÑ ÀÇ»ç Çì´õ(psuedoheader)¸¦ ÀÛ¼ºÇØ¾ß ÇÕ´Ï´Ù.
¿¹¸¦ µé¾î, º¯ÇüÀÚ API ÇÁ·Î±×·¥À» »ç¿ëÇÏ¿© ºê¶ó¿ìÀú°¡ Àü¼ÛÇÑ User-Agent Çì´õ °ªÀ» ±âÁØÀ¸·Î »ç¿ëÀÚµéÀÌ ¿äûÇÑ µ¥ÀÌÅ͸¦ º¯°æÇϽʽÿÀ. close ÇÔ¼ö¿¡¼ ¼öÁ¤µÈ ³»¿ëÀ» ÆÄÀÏ¿¡ ÀúÀåÇϰųª ¹öÆÛ ±æÀ̸¦ ÁöÁ¤ÇÑ ´ÙÀ½ ¹öÆÛ¸¦ µ¥ÀÌÅÍ Àμö·Î Àü´ÞÇϽʽÿÀ. ±×·± ´ÙÀ½ variant caching ÇÔ¼ö httpd_variant_insert() ¹× httpd_variant_lookup()À» »ç¿ëÇÏ¿© ³»¿ëÀ» ij½Ã¿¡ ±â·ÏÇϽʽÿÀ.
Caching Proxy API ÇÔ¼ö ½ÃÀÛÇϱ⿡ ´ëÇÑ µµ¿òÀ» ¹ÞÀ¸·Á¸é Edge Components ¼³Ä¡ CD-ROMÀÇ samples µð·ºÅ丮¿¡ ÀÖ´Â »ùÇà ÇÁ·Î±×·¥À» º¸½Ê½Ã¿À. Ãß°¡ Á¤º¸´Â WebSphere Application Server À¥ »çÀÌÆ®ÀÎ www.ibm.com/software/webservers/appserv/¿¡¼ ã¾Æº¼ ¼ö ÀÖ½À´Ï´Ù.
Á¦ 3 Àå¿¡¼´Â Load Balancer¿¡ ´ëÇØ »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú ÀÛ¼ºÀ» ¼³¸íÇÕ´Ï´Ù.
¾îµå¹ÙÀÌÀú´Â Load Balancer ³»¿¡¼ ÀÛ¾÷ÇÏ¸é¼ ÁÖ¾îÁø ¼¹ö¿¡ ´ëÇÑ ·Îµå Á¤º¸¸¦ Á¦°øÇÏ´Â ¼ÒÇÁÆ®¿þ¾î ¿¡ÀÌÀüÆ®ÀÔ´Ï´Ù. Ç¥ÁØ ÇÁ·ÎÅäÄÝ(HTTP, SSL ¹× ±âŸ)¿¡ ´ëÇÏ¿© °¢°¢ ´Ù¸¥ ¾îµå¹ÙÀÌÀú°¡ Á¸ÀçÇÕ´Ï´Ù. Load Balancer ±âº» ÄÚµå´Â ÁÖ±âÀûÀ¸·Î ¾îµå¹ÙÀÌÀú Áֱ⸦ ¼öÇàÇϸç, ÀÌ Áֱ⸦ ÅëÇØ ±¸¼º¿¡ ÀÖ´Â ¸ðµç ¼¹öÀÇ »óŰ¡ °³º°ÀûÀ¸·Î Æò°¡µË´Ï´Ù.
Load BalancerÀÇ °íÀ¯ ¾îµå¹ÙÀÌÀú¸¦ ÀÛ¼ºÇÏ¿© ¼¹ö ½Ã½ºÅÛÀÇ ·Îµå¸¦ ÆÇº°ÇÏ´Â ¹æ¹ýÀ» »ç¿ëÀÚ Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù.
Windows ½Ã½ºÅÛÀÇ °æ¿ì:
IPv4¿ë ¹× IPv6¿ë Load Balancer ¼³Ä¡¸¦ »ç¿ëÇÏ´Â °æ¿ì ½Ã½ºÅÛ¿¡¼
IPv6 ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÏ°í ¾îµå¹ÙÀÌÀú¸¦ »ç¿ëÇÏ·Á°í Çϸé
C:\windows\system32\drivers\etc\ µð·ºÅ丮¿¡ ÀÖ´Â protocol ÆÄÀÏÀ» ¼öÁ¤ÇØ¾ß ÇÕ´Ï´Ù.
IPv6ÀÇ °æ¿ì, protocol ÆÄÀÏ¿¡ ´ÙÀ½ ÇàÀ» »ðÀÔÇϽʽÿÀ.
ipv6-icmp 58 IPv6-ICMP # IPv6 interface control message protocol
ÀϹÝÀûÀ¸·Î ¾îµå¹ÙÀÌÀú´Â ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î ·Îµå ¹ë·±½º¸¦ °¡´ÉÇÏ°Ô ÇÕ´Ï´Ù.
Load Balancer¿Í ÇÔ²² Á¦°øµÈ Ç¥ÁØ ¾îµå¹ÙÀÌÀú¿¡´Â ´ÙÀ½°ú °°Àº ±â´ÉÀÌ ÀÖ´Â ¾îµå¹ÙÀÌÀú°¡ µé¾î ÀÖ½À´Ï´Ù. ¾îµå¹ÙÀÌÀú¿¡ °üÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â WebSphere Application Server Load Balancer °ü¸® ¾È³»¼¸¦ ÂüÁ¶ÇϽʽÿÀ.
Ç¥ÁØ ¾îµå¹ÙÀÌÀú°¡ Á¦°øµÇÁö ¾Ê´Â µ¶Á¡ ÇÁ·ÎÅäÄÝÀ» Áö¿øÇÏ·Á¸é »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú¸¦ ÀÛ¼ºÇØ¾ß ÇÕ´Ï´Ù.
»ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú´Â Ŭ·¡½º ÆÄÀÏ·Î Á¦°øµÇ´Â ªÀº Java ÄÚµå·Î, Load Balancer ±âº» Äڵ尡 ¼¹öÀÇ ·Îµå¸¦ ÆÇº°Çϱâ À§ÇØ È£ÃâÇÕ´Ï´Ù. ±âº» ÄÚµå´Â »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀúÀÇ ÀνºÅϽº ½ÃÀÛ ¹× Á¤Áö, »óÅ ¹× º¸°í¼ Á¦°ø, ·Î±× ÆÄÀÏ¿¡ È÷½ºÅ丮 Á¤º¸ ±â·Ï, °ü¸® ÇÁ·Î±×·¥ ÄÄÆ÷³ÍÆ®¿¡ ¾îµå¹ÙÀÌÀú °á°ú º¸°í µî°ú °°Àº ÇÊ¿äÇÑ ¸ðµç °ü¸® ¼ºñ½º¸¦ Á¦°øÇÕ´Ï´Ù.
Load Balancer ±âº» Äڵ忡¼ »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú¸¦ È£ÃâÇÒ ¶§, ´ÙÀ½ ´Ü°è°¡ ÁøÇàµË´Ï´Ù.
»ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú¸¦ Á¤»ó ¸ðµå ¶Ç´Â ¼öÁ¤ ¸ðµå¿¡¼ Load Balancer¿Í ÀÛµ¿Çϵµ·Ï ¼³°èÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀÛµ¿ ¸ðµåÀÇ ¼±ÅÃÀº »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú ÆÄÀÏ¿¡¼ constructor ¸Þ¼ÒµåÀÇ ¸Å°³º¯¼ö·Î¼ ÁöÁ¤µË´Ï´Ù. (°¢ ¾îµå¹ÙÀÌÀú´Â ¼³°è¿¡ µû¶ó ÀÌµé ¸ðµå Áß Çϳª¸¸ ¿î¿µÇÕ´Ï´Ù.)
Á¤»ó ¸ðµå¿¡¼ »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú´Â ¼¹ö¿Í µ¥ÀÌÅ͸¦ ±³È¯Çϰí, ±âº» ¾îµå¹ÙÀÌÀú ÄÚµå´Â ±³È¯ ½Ã°£À» ÃøÁ¤ÇÏ¿© ·Îµå°ªÀ» »êÃâÇÕ´Ï´Ù. ±âº» ÄÚµå´Â °è»êµÈ ·Îµå°ªÀ» °ü¸® ÇÁ·Î±×·¥¿¡ º¸°íÇÕ´Ï´Ù. »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú´Â ¼º°øÀ» Ç¥½ÃÇÏ´Â 0°ª ¶Ç´Â ¿À·ù¸¦ Ç¥½ÃÇÏ´Â 1°ªÀ» ¸®ÅÏÇÕ´Ï´Ù.
Á¤»ó ¸ðµå¸¦ ÁöÁ¤ÇÏ·Á¸é, constructorÀÇ replace Ç÷¡±×¸¦ false·Î ¼³Á¤ÇϽʽÿÀ.
¼öÁ¤ ¸ðµå¿¡¼ ±âº» ÄÚµå´Â ½Ã°£ ÃøÁ¤Àº ¼öÇàÇÏÁö ¾Ê½À´Ï´Ù. »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú ÄÚµå´Â ÁöÁ¤µÈ ¸ðµç Á¶ÀÛÀ» ÇØ´çµÇ´Â °íÀ¯ÇÑ ¿ä±¸»çÇ׿¡ ±âÃÊÇÏ¿© ¼öÇàÇÑ ´ÙÀ½, ½ÇÁ¦ ·Îµå ¹øÈ£¸¦ ¸®ÅÏÇÕ´Ï´Ù. ±âº» ÄÚµå´Â ·Îµå ¹øÈ£¸¦ ½ÂÀÎÇÏ°í ±×´ë·Î °ü¸® ÇÁ·Î±×·¥¿¡ º¸°íÇÕ´Ï´Ù. °¡Àå ÁÁÀº °á°ú¸¦ À§Çؼ´Â 10ºÎÅÍ 1000±îÁö(ºü¸¥ ¼¹ö´Â 10, ´À¸° ¼¹ö´Â 1000) ·Îµå ¹øÈ£¸¦ Á¤±ÔÈÇϽʽÿÀ.
¼öÁ¤ ¸ðµå¸¦ ÁöÁ¤ÇÏ·Á¸é, constructorÀÇ replace Ç÷¡±×¸¦ true·Î ¼³Á¤ÇϽʽÿÀ.
»ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú ÆÄÀÏ À̸§Àº ADV_name.java ÇüÅÂÀ̸ç, ¿©±â¼ nameÀº »ç¿ëÀÚ°¡ ¼±ÅÃÇÏ´Â ¾îµå¹ÙÀÌÀú À̸§ÀÔ´Ï´Ù. ¿Ï·áµÈ À̸§Àº ´ë¹®ÀÚ Á¢µÎºÎ ADV_·Î ½ÃÀÛÇÏ°í ³ª¸ÓÁö´Â ¸ðµÎ ¼Ò¹®ÀÚ¿©¾ß ÇÕ´Ï´Ù. ¼Ò¹®ÀÚ·Î Á¦ÇÑÇÏ¸é ¾îµå¹ÙÀÌÀú¸¦ ½ÇÇàÇÏ´Â ¸í·É¿¡¼ ´ë¼Ò¹®ÀÚ¸¦ ±¸ºÐÇÏÁö ¾Ê¾Æµµ µË´Ï´Ù.
Java ±Ô¾à¿¡ µû¶ó ÆÄÀÏ ³»¿¡ Á¤ÀÇµÈ Å¬·¡½º À̸§Àº ÆÄÀÏÀÇ À̸§°ú ÀÏÄ¡ÇØ¾ß ÇÕ´Ï´Ù.
»ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú´Â Java ¾ð¾î·Î ÀÛ¼ºµÇ¾î¾ß ÇÏ¸ç °³¹ß ½Ã½ºÅÛ¿¡ ¼³Ä¡µÈ Java ÄÄÆÄÀÏ·¯·Î ÄÄÆÄÀϵǾî¾ß ÇÕ´Ï´Ù. ÄÄÆÄÀÏ ½Ã ´ÙÀ½ÀÇ ÆÄÀÏÀ» ÂüÁ¶ÇÕ´Ï´Ù.
ÄÄÆÄÀÏ µ¿¾È classpath ȯ°æ º¯¼ö´Â »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú ÆÄÀϰú ±âº» Ŭ·¡½º ÆÄÀÏÀ» ¸ðµÎ °¡¸®ÄÑ¾ß ÇÕ´Ï´Ù. ÄÄÆÄÀÏ ¸í·ÉÀº ´ÙÀ½ Çü½ÄÀ» µû¸¨´Ï´Ù.
javac -classpath /opt/ibm/edge/lb/servers/lib/ibmnd.jar ADV_name.java
ÀÌ ¿¹Á¦¿¡¼´Â ±âº» Linux ¹× UNIX ¼³Ä¡ °æ·Î¸¦ »ç¿ëÇÕ´Ï´Ù. ¾îµå¹ÙÀÌÀú ÆÄÀÏ À̸§Àº ADV_name.javaÀÌ°í ¾îµå¹ÙÀÌÀú ÆÄÀÏÀº ÇöÀç µð·ºÅ丮¿¡ ÀúÀåµË´Ï´Ù.
ÄÄÆÄÀÏ Ãâ·ÂÀº Ŭ·¡½º ÆÄÀÏÀÔ´Ï´Ù(¿¹: ADV_name.class). ¾îµå¹ÙÀÌÀú¸¦ ½ÃÀÛÇϱâ Àü¿¡ Ŭ·¡½º ÆÄÀÏÀ» install_path/servers/lib/CustomAdvisors/ µð·ºÅ丮·Î º¹»çÇϽʽÿÀ.
»ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú¸¦ ½ÇÇàÇÏ·Á¸é, ¸ÕÀú ¾îµå¹ÙÀÌÀúÀÇ Å¬·¡½º ÆÄÀÏÀ» Load Balancer ½Ã½ºÅÛÀÇ lib/CustomAdvisors/ ÇÏÀ§ µð·ºÅ丮·Î º¹»çÇØ¾ß ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, mypingÀ̶õ »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀúÀÇ ÆÄÀÏ °æ·Î´Â install_path/servers/lib/CustomAdvisors/ADV_myping.classÀÔ´Ï´Ù.
Load Balancer¸¦ ±¸¼ºÇϰí, ÇØ´çµÇ´Â °ü¸® ÇÁ·Î±×·¥ ±â´ÉÀ» ½ÃÀÛÇϰí, »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú¸¦ ½ÃÀÛÇÏ´Â ¸í·ÉÀ» ¹ßÇàÇϽʽÿÀ. »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú´Â ADV_ prefix ¹× ÆÄÀÏ È®ÀåÀÚ¸¦ Á¦¿ÜÇÑ À̸§À¸·Î ÁöÁ¤µË´Ï´Ù.
dscontrol advisor start myping port_number
¸í·É¿¡¼ ÁöÁ¤ÇÑ Æ÷Æ® ¹øÈ£´Â ¾îµå¹ÙÀÌÀú°¡ ´ë»ó ¼¹ö¿Í ¿¬°áÇÏ´Â Æ÷Æ®ÀÔ´Ï´Ù.
´Ù¸¥ ¾îµå¹ÙÀÌÀúµé°ú ¸¶Âù°¡Áö·Î, »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú´Â ADV_Base¶ó´Â ¾îµå¹ÙÀÌÀú ±âº» Ŭ·¡½º ±â´ÉÀ» È®ÀåÇÕ´Ï´Ù. ¾îµå¹ÙÀÌÀú ±âº»Àº ´ëºÎºÐÀÇ ¾îµå¹ÙÀÌÀú ±â´ÉÀ» ¼öÇàÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, °ü¸® ÇÁ·Î±×·¥ÀÇ °¡ÁßÄ¡ ¾Ë°í¸®Áò¿¡ »ç¿ëµÉ ¼ö ÀÖµµ·Ï ·Îµå¸¦ ´Ù½Ã °ü¸® ÇÁ·Î±×·¥¿¡ º¸°íÇÏ´Â ±â´ÉÀ» ¼öÇàÇÕ´Ï´Ù. ¶ÇÇÑ ¼ÒÄÏ ¿¬°á ¹× ´Ý±â Á¶ÀÛÀ» ¼öÇàÇϸç, ¾îµå¹ÙÀÌÀú¿¡ »ç¿ëµÉ send ¹× receive ¸Þ¼Òµåµµ Á¦°øÇÕ´Ï´Ù. °ËÅä ÁßÀÎ ¼¹ö¿ëÀ¸·Î ÁöÁ¤µÈ Æ÷Æ®¿¡¼ µ¥ÀÌÅ͸¦ Àü¼ÛÇϰųª ¼ö½ÅÇÏ´Â µ¥ ¾îµå¹ÙÀÌÀú°¡ »ç¿ëµË´Ï´Ù. ¾îµå¹ÙÀÌÀú ±âº» ³»ÀÇ TCP ¸Þ¼Òµå´Â ·Îµå¸¦ °è»êÇϱâ À§ÇØ ½Ã°£À» ÃøÁ¤ÇÕ´Ï´Ù. ¾îµå¹ÙÀÌÀú ±âº» »ý¼ºÀÚ ³»ÀÇ Ç÷¡±×°¡ ±âÁ¸ ·Îµå À§¿¡ ¾îµå¹ÙÀÌÀú·ÎºÎÅÍ ¸®ÅϵǴ »õ·Î¿î ·Îµå¸¦ °ãÃľ²µµ·Ï ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
¾îµå¹ÙÀÌÀú¿¡´Â ´ÙÀ½ÀÇ ±âº» Ŭ·¡½º ¸Þ¼Òµå°¡ ÀÖ½À´Ï´Ù.
Çʼö ·çƾ¿¡ ´ëÇÑ ¼¼ºÎ»çÇ×Àº ÀÌ ¼½¼ÇÀÇ µÞºÎºÐ¿¡¼ ¼³¸íÇÕ´Ï´Ù.
»ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú´Â ¿ø½Ã ¶Ç´Â Ç¥ÁØ ¾îµå¹ÙÀÌÀú¸¦ Ž»öÇÑ ÈÄ¿¡ È£ÃâµË´Ï´Ù. Load Balancer°¡ Ç¥ÁØ ¾îµå¹ÙÀÌÀú ¸ñ·Ï¿¡¼ ÁöÁ¤µÈ ¾îµå¹ÙÀÌÀú¸¦ ãÁö ¸øÇÏ¸é »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú ¸ñ·ÏÀ» ÂüÁ¶ÇÕ´Ï´Ù. ¾îµå¹ÙÀÌÀú¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â WebSphere Application Server Load Balancer °ü¸® ¾È³»¼¸¦ ÂüÁ¶ÇϽʽÿÀ.
»ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀúÀÇ À̸§°ú °æ·Î¿¡ ´ÙÀ½ÀÇ ¿ä±¸»çÇ×ÀÌ Àû¿ëµË´Ï´Ù.
void ADV_Base Constructor ( string sName; string sVersion; int iDefaultPort; int iInterval; string sDefaultLogFileName; boolean replace )
void ADV_AdvisorInitialize()
ÀÌ ¸Þ¼Òµå´Â »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú¿¡ ÇÊ¿äÇÑ Ãʱâȸ¦ ¼öÇàÇϱâ À§ÇØ Á¦°øµË´Ï´Ù. ÀÌ ¸Þ¼Òµå´Â ¾îµå¹ÙÀÌÀú ±âº» ¸ðµâÀÌ ½ÃÀÛÇÑ ÈÄ¿¡ È£ÃâµË´Ï´Ù.
Ç¥ÁØ ¾îµå¹ÙÀÌÀú¸¦ Æ÷ÇÔÇÑ ´ëºÎºÐÀÇ °æ¿ì, ÀÌ ¸Þ¼Òµå´Â »ç¿ëµÇÁö ¾ÊÀ¸¸ç Äڵ尡 return ¹®À¸·Î¸¸ ±¸¼ºµË´Ï´Ù. ÀÌ ¸Þ¼Òµå¿¡¼¸¸ À¯È¿ÇÑ suppressBaseOpeningSocket ¸Þ¼Òµå¸¦ È£ÃâÇÏ´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù.
int getLoad( int iConnectTime; ADV_Thread *caller )
´ÙÀ½ ¼½¼Ç¿¡¼ ¼³¸íÇÒ ¸Þ¼Òµå ¶Ç´Â ÇÔ¼ö´Â »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú¿¡¼ È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù. ¾îµå¹ÙÀÌÀú ±âº» ÄÚµå´Â ÀÌµé ¸Þ¼Òµå¸¦ Áö¿øÇÕ´Ï´Ù.
ÀϺΠÇÔ¼ö È£ÃâÀº Á÷Á¢ È£ÃâµÉ ¼ö ÀÖÁö¸¸(¿¹: function_name()), ³ª¸ÓÁö È£ÃâÀº caller Á¢µÎºÎ°¡ ÇÊ¿äÇÕ´Ï´Ù. caller´Â ½ÇÇà ÁßÀÎ »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú¸¦ Áö¿øÇÏ´Â ±âº» ¾îµå¹ÙÀÌÀú ÀνºÅϽº¸¦ ³ªÅ¸³À´Ï´Ù.
ADVLOG ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú´Â ÅØ½ºÆ® ¸Þ½ÃÁö¸¦ ¾îµå¹ÙÀÌÀú ±âº» ·Î±× ÆÄÀÏ¿¡ ±â·ÏÇÕ´Ï´Ù. Çü½ÄÀº ´ÙÀ½°ú °°½À´Ï´Ù.
void ADVLOG (int logLevel, string message)
getAdvisorName ÇÔ¼ö´Â »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú À̸§ÀÇ Á¢¹ÌºÎ°¡ ÀÖ´Â Java ¹®ÀÚ¿À» ¸®ÅÏÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, ADV_cdload.java·Î À̸§ ÁöÁ¤µÈ ¾îµå¹ÙÀÌÀúÀÇ °æ¿ì, ÀÌ ÇÔ¼ö´Â cdload °ªÀ» ¸®ÅÏÇÕ´Ï´Ù.
ÀÌ ÇÔ¼ö¿¡´Â ¸Å°³º¯¼ö°¡ ¾ø½À´Ï´Ù.
¾îµå¹ÙÀÌÀúÀÇ ÇÑ ÀνºÅϽº ³»¿¡¼ ÀÌ °ªÀº º¯°æµÉ ¼ö ¾ø½À´Ï´Ù.
getAdviseOnPort ÇÔ¼ö´Â È£Ãâ ÁßÀÎ »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú°¡ ½ÇÇàµÇ°í ÀÖ´Â Æ÷Æ® ¹øÈ£¸¦ ¸®ÅÏÇÕ´Ï´Ù. ¸®ÅϰªÀº Java Á¤¼ö(int)À̸ç ÇÔ¼ö¿¡´Â ¸Å°³º¯¼ö°¡ ¾ø½À´Ï´Ù.
¾îµå¹ÙÀÌÀúÀÇ ÇÑ ÀνºÅϽº ³»¿¡¼ ÀÌ °ªÀº º¯°æµÉ ¼ö ¾ø½À´Ï´Ù.
getCurrentServer ÇÔ¼ö´Â ÇöÀç ¼¹öÀÇ IP ÁÖ¼Ò¸¦ ¸®ÅÏÇÕ´Ï´Ù. ¸®ÅϰªÀº IP ÁÖ¼Ò Çü½ÄÀÇ Java ¹®ÀÚ¿ÀÔ´Ï´Ù(¿¹: 128.0.72.139).
ÀϹÝÀûÀ¸·Î, ¾îµå¹ÙÀÌÀú ±âº» Äڵ尡 Â÷·Ê·Î ¸ðµç ¼¹ö ½Ã½ºÅÛÀ» Á¶È¸ÇϹǷÎ, ÀÌ ÁÖ¼Ò´Â »ç¿ëÀÚ°¡ »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú¸¦ È£ÃâÇÒ ¶§¸¶´Ù º¯°æµË´Ï´Ù.
ÀÌ ÇÔ¼ö¿¡´Â ¸Å°³º¯¼ö°¡ ¾ø½À´Ï´Ù.
getCurrentCluster ÇÔ¼ö È£ÃâÀº ÇöÀç ¼¹ö Ŭ·¯½ºÅÍÀÇ IP ÁÖ¼Ò¸¦ ¸®ÅÏÇÕ´Ï´Ù. ¸®ÅϰªÀº IP ÁÖ¼Ò Çü½ÄÀÇ Java ¹®ÀÚ¿ÀÔ´Ï´Ù(¿¹: 128.0.72.139).
ÀϹÝÀûÀ¸·Î, ¾îµå¹ÙÀÌÀú ±âº» Äڵ尡 Â÷·Ê·Î ¸ðµç ¼¹ö Ŭ·¯½ºÅ͸¦ Á¶È¸ÇϹǷÎ, ÀÌ ÁÖ¼Ò´Â »ç¿ëÀÚ°¡ »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú¸¦ È£ÃâÇÒ ¶§¸¶´Ù º¯°æµË´Ï´Ù.
ÀÌ ÇÔ¼ö¿¡´Â ¸Å°³º¯¼ö°¡ ¾ø½À´Ï´Ù.
getInterval ÇÔ¼ö´Â ¾îµå¹ÙÀÌÀú °£°Ý Áï, ¾îµå¹ÙÀÌÀú Áֱ⠻çÀÌÀÇ ½Ã°£(ÃÊ)À» ¸®ÅÏÇÕ´Ï´Ù. ÀÌ °ªÀº dscontrol ¸í·ÉÀ» »ç¿ëÇÏ¿© ·±Å¸ÀÓ ½Ã °ªÀÌ ¼öÁ¤µÇÁö ¾Ê¾ÒÀ¸¸é »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀúÀÇ »ý¼ºÀÚ¿¡ ¼³Á¤µÈ ±âº»°ª°ú µ¿ÀÏÇÕ´Ï´Ù.
¸®ÅϰªÀº Java Á¤¼ö(int)ÀÔ´Ï´Ù. ÀÌ ÇÔ¼ö¿¡´Â ¸Å°³º¯¼ö°¡ ¾ø½À´Ï´Ù.
getLatestLoad ÇÔ¼ö´Â »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú°¡ ÁÖ¾îÁø ¼¹ö ¿ÀºêÁ§Æ®ÀÇ ÃÖ±Ù ·Îµå °ªÀ» ¾òÀ» ¼ö ÀÖ½À´Ï´Ù. ·Îµå °ªÀº ¾îµå¹ÙÀÌÀú ±âº» ÄÚµå ¹× °ü¸®ÀÚ µð¸Õ¿¡ ÀÇÇØ ³»ºÎ Å×ÀÌºí¿¡ À¯ÁöµË´Ï´Ù.
int caller.getLatestLoad (string cluster_IP, int port, string server_IP)
¼¼ °³ÀÇ Àμö°¡ ÇÔ²² ÇϳªÀÇ ¼¹ö ¿ÀºêÁ§Æ®¿¡ Á¤Àǵ˴ϴÙ.
¸®ÅϰªÀº Á¤¼öÀÔ´Ï´Ù.
ÀÌ ÇÔ¼ö È£ÃâÀº ÀÓÀÇ ÇÁ·ÎÅäÄÝÀ̳ª Æ÷Æ®°¡ ´Ù¸¥ ÇÁ·ÎÅäÄÝÀ̳ª Æ÷Æ®¿Í µ¶¸³ÀûÀ¸·Î ÀÛµ¿µÇµµ·Ï ÇÒ °æ¿ì À¯¿ëÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, µ¿ÀÏÇÑ ½Ã½ºÅÛÀÇ ÅÚ³Ý ¼¹ö°¡ »ç¿ë ºÒ°¡´ÉÇÑ °æ¿ì, ƯÁ¤ Application Server¸¦ »ç¿ë ºÒ°¡´ÉÇÏ°Ô ÇÑ »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú¿¡¼ ÀÌ ÇÔ¼ö È£ÃâÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
receive ÇÔ¼ö´Â ¼ÒÄÏ Á¢¼Ó¿¡¼ Á¤º¸¸¦ °¡Á®¿É´Ï´Ù.
caller.receive(stringbuffer *response)
response ¸Å°³º¯¼ö´Â °Ë»öµÈ µ¥ÀÌÅͰ¡ À§Ä¡ÇÒ ¹®ÀÚ¿ ¹öÆÛÀÔ´Ï´Ù. ¶ÇÇÑ ÇÔ¼ö´Â ´ÙÀ½°ú °°Àº Àǹ̸¦ °®´Â Á¤¼ö °ªÀ» ¸®ÅÏÇÕ´Ï´Ù.
send ÇÔ¼ö´Â ÁöÁ¤µÈ Æ÷Æ®¸¦ »ç¿ëÇÏ¿©, ±¸ÃàµÈ ¼ÒÄÏ Á¢¼ÓÀ» ÅëÇØ µ¥ÀÌÅÍ ÆÐŶÀ» ¼¹ö·Î Àü¼ÛÇÕ´Ï´Ù.
caller.send(string command)
command ¸Å°³º¯¼ö´Â ¼¹ö¿¡ Àü¼ÛÇÒ µ¥ÀÌÅ͸¦ Æ÷ÇÔÇÑ ¹®ÀÚ¿ÀÔ´Ï´Ù. ÀÌ ÇÔ¼ö´Â ´ÙÀ½°ú °°Àº Àǹ̸¦ °®´Â Á¤¼ö °ªÀ» ¸®ÅÏÇÕ´Ï´Ù.
suppressBaseOpeningSocket ÇÔ¼ö È£ÃâÀ» »ç¿ëÇÏ¿© »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú´Â ±âº» ¾îµå¹ÙÀÌÀú Äڵ尡 »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú¸¦ ´ë½ÅÇØ¼ ¼¹ö¿¡ ´ëÇØ TCP ¼ÒÄÏÀ» ¿ °ÍÀÎÁö ¿©ºÎ¸¦ ÁöÁ¤ÇÕ´Ï´Ù. ¾îµå¹ÙÀÌÀú°¡ ¼¹ö »óŸ¦ ÆÇº°Çϱâ À§ÇØ ¼¹ö¿Í Á÷Á¢ Åë½ÅÇÏÁö ¾Ê´Â °æ¿ì, ÀÌ ¼ÒÄÏÀ» ¿ ÇÊ¿ä´Â ¾ø½À´Ï´Ù.
ÀÌ ÇÔ¼ö È£ÃâÀº ÇÑ ¹ø¸¸ ¹ßÇàµÉ ¼ö ÀÖÀ¸¸ç ADV_AdvisorInitialize ·çƾ¿¡¼ ¹ßÇàµÇ¾î¾ß ÇÕ´Ï´Ù.
ÀÌ ÇÔ¼ö¿¡´Â ¸Å°³º¯¼ö°¡ ¾ø½À´Ï´Ù.
´ÙÀ½ ¿¹Á¦¿¡¼´Â »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú°¡ ±¸ÇöµÇ´Â ¹æ¹ýÀ» º¸¿©ÁÝ´Ï´Ù.
ÀÌ ¼Ò½º ÄÚµå »ùÇÃÀº Ç¥ÁØ Load Balancer HTTP ¾îµå¹ÙÀÌÀú¿Í À¯»çÇÕ´Ï´Ù. ÇÔ¼ö´Â ´ÙÀ½°ú °°½À´Ï´Ù.
ÀÌ ¾îµå¹ÙÀÌÀú´Â Á¤»ó ¸ðµå¿¡¼ ÀÛµ¿ÇϹǷΠ·Îµå ÃøÁ¤Àº ¼ÒÄÏÀÇ ¿±â, Àü¼Û, ¼ö½Å ¹× ´Ý±â ÀÛ¾÷À» ¼öÇàÇÏ´Â µ¥ °æ°úÇÑ ½Ã°£(¹Ð¸®ÃÊ)¿¡ ±â¹ÝÇÕ´Ï´Ù.
package CustomAdvisors; import com.ibm.internet.lb.advisors.*; public class ADV_sample extends ADV_Base implements ADV_MethodInterface { static final String ADV_NAME ="Sample"; static final int ADV_DEF_ADV_ON_PORT = 80; static final int ADV_DEF_INTERVAL = 7; static final string ADV_SEND_REQUEST = "HEAD / HTTP/1.0\r\nAccept: */*\r\nUser-Agent: " + "IBM_Load_Balancer_HTTP_Advisor\r\n\r\n"; //-------- // Constructor public ADV_sample() { super(ADV_NAME, "3.0.0.0-03.31.00", ADV_DEF_ADV_ON_PORT, ADV_DEF_INTERVAL, "", false); super.setAdvisor( this ); } //-------- // ADV_AdvisorInitialize public void ADV_AdvisorInitialize() { return; // usually an empty routine } //-------- // getLoad public int getLoad(int iConnectTime, ADV_Thread caller) { int iRc; int iLoad = ADV_HOST_INACCESSIBLE; // initialize to inaccessible iRc = caller.send(ADV_SEND_REQUEST); // send the HTTP request to // the server if (0 <= iRc) { // if the send is successful StringBuffer sbReceiveData = new StringBuffer(""); // allocate a buffer // for the response iRc = caller.receive(sbReceiveData); // receive the result // parse the result here if you need to if (0 <= iRc) { // if the receive is successful iLoad = 0; // return 0 for success } // (advisor's load value is ignored by } // base in normal mode) return iLoad; } }
ÀÌ ¿¹Á¦´Â ¾îµå¹ÙÀÌÀú ±âº»¿¡ ÀÇÇØ ¿¸° Ç¥ÁØ ¼ÒÄÏÀ» ¾ïÁ¦ÇÏ´Â °æ¿ì¸¦ ¼³¸íÇÕ´Ï´Ù. ´ë½Å, ÀÌ ¾îµå¹ÙÀÌÀú´Â »çÀÌµå ½ºÆ®¸² Java ¼ÒÄÏÀ» ¿¾î ¼¹ö¸¦ Á¶È¸ÇÕ´Ï´Ù. ÀÌ ÇÁ·Î½ÃÀú´Â ¼¹ö°¡ ¾îµå¹ÙÀÌÀú Á¶È¸¸¦ ÀνÄÇϱâ À§ÇØ Á¤»ó Ŭ¶óÀÌ¾ðÆ® Åë½Å·®¿¡¼ ´Ù¸¥ Æ÷Æ®¸¦ »ç¿ëÇÏ´Â °æ¿ì À¯¿ëÇÕ´Ï´Ù.
ÀÌ ¿¹Á¦¿¡¼ ¼¹ö´Â Æ÷Æ® 11999¸¦ ÀÎ½Ä ÁßÀ̸ç, 16Áø Á¤¼ö "4"°¡ Á¶È¸µÇ¸é ·Îµå °ªÀ» ¸®ÅÏÇÕ´Ï´Ù. ÀÌ ¿¹Á¦´Â ¹Ù²Ù±â ¸ðµå¿¡¼ ½ÇÇàµË´Ï´Ù. Áï, ¾îµå¹ÙÀÌÀú »ý¼ºÀÚÀÇ ¸¶Áö¸· ¸Å°³º¯¼ö°¡ true·Î ¼³Á¤µÇ°í ¾îµå¹ÙÀÌÀú ±âº» Äڵ尡 °æ°úµÈ ½Ã°£À» »ç¿ëÇÏÁö ¾Ê°í ¸®ÅÏµÈ ·Îµå °ªÀ» »ç¿ëÇÕ´Ï´Ù.
ÃʱâÈ ·çƾ¿¡¼ supressBaseOpeningSocket()¿¡ ´ëÇÑ È£Ãâ¿¡ À¯ÀÇÇϽʽÿÀ. Àü¼ÛµÇ´Â µ¥ÀÌÅͰ¡ ¾ø´Â °æ¿ì ±âº» ¼ÒÄÏÀ» ¾ïÁ¦ÇÏÁö ¾Ê¾Æµµ µË´Ï´Ù. ¿¹¸¦ µé¾î ¾îµå¹ÙÀÌÀú¸¦ ¼¹ö¿¡ ¿¬°áÇϱâ À§ÇØ ¼ÒÄÏÀ» ¿°íÀÚ ÇÒ °æ¿ì°¡ ÀÖ½À´Ï´Ù. À̸¦ ¼±ÅÃÇϱâ Àü¿¡ ÀÀ¿ëÇÁ·Î±×·¥¿¡¼ ÀÌ·¯ÇÑ ¼±ÅÃÀÌ ÇÊ¿äÇÑÁö ÁÖÀÇÇØ¼ °Ë»çÇϽʽÿÀ.
package CustomAdvisors; import java.io.*; import java.net.*; import java.util.*; import java.util.Date; import com.ibm.internet.lb.advisors.*; import com.ibm.internet.lb.common.*; import com.ibm.internet.lb.server.SRV_ConfigServer; public class ADV_sidea extends ADV_Base implements ADV_MethodInterface { static final String ADV_NAME = "sidea"; static final int ADV_DEF_ADV_ON_PORT = 12345; static final int ADV_DEF_INTERVAL = 7; // create an array of bytes with the load request message static final byte[] abHealth = {(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x04}; public ADV_sidea() { super(ADV_NAME, "3.0.0.0-03.31.00", ADV_DEF_ADV_ON_PORT, ADV_DEF_INTERVAL, "", true); // replace mode parameter is true super.setAdvisor( this ); } //-------- // ADV_AdvisorInitialize public void ADV_AdvisorInitialize() { suppressBaseOpeningSocket(); // tell base code not to open the // standard socket return; } //-------- // getLoad public int getLoad(int iConnectTime, ADV_Thread caller) { int iRc; int iLoad = ADV_HOST_INACCESSIBLE; // -1 int iControlPort = 11999; // port on which to communicate with the server string sServer = caller.getCurrentServer(); // address of server to query try { socket soServer = new Socket(sServer, iControlPort); // open socket to // server DataInputStream disServer = new DataInputStream(soServer.getInputStream()); DataOutputStream dosServer = new DataOutputStream(soServer.getOutputStream()); int iRecvTimeout = 10000; // set timeout (in milliseconds) // for receiving data soServer.setSoTimeout(iRecvTimeout); dosServer.writeInt(4); // send a message to the server dosServer.flush(); iLoad = disServer.readByte(); // receive the response from the server } catch (exception e) { system.out.println("Caught exception " + e); } return iLoad; // return the load reported from the server } }
ÀÌ »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú ¿¹Á¦¿¡¼´Â ¼¹öÀÇ ÇÑ Æ÷Æ® ÀÚüÀÇ »óÅ¿Í, µ¿ÀÏÇÑ ¼¹ö ½Ã½ºÅÛÀÇ ´Ù¸¥ Æ÷Æ®¿¡¼ ½ÇÇà ÁßÀÎ ´Ù¸¥ ¼¹ö µð¸ÕÀÇ »óÅ¿¡ ±â¹ÝÇÏ¿© ¼¹öÀÇ ÇÑ Æ÷Æ®¿¡ ´ëÇÑ Àå¾Ö¸¦ ¹ß°ßÇÏ´Â ±â´ÉÀ» º¸¿©ÁÝ´Ï´Ù. ¿¹¸¦ µé¾î, Æ÷Æ® 80ÀÇ HTTP µð¸ÕÀÌ ÀÀ´äÀ» Á¤ÁöÇÏ´Â °æ¿ì, Æ÷Æ® 443ÀÇ SSL µð¸Õ¿¡ ´ëÇÑ Åë½Å·® °æ·Î ÁöÁ¤À» Á¤ÁöÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
ÀÌ ¾îµå¹ÙÀÌÀú´Â ÀÀ´äÀ» Àü¼ÛÇÏÁö ¾Ê´Â ¼¹öÀÇ ±â´ÉÀ» Á¤ÁöÇß´Ù°í °£ÁÖÇÏ¿© Á¾·á·Î Ç¥½ÃÇÑ´Ù´Â Á¡¿¡¼, Ç¥ÁØ ¾îµå¹ÙÀÌÀúº¸´Ù ´õ Àû±ØÀûÀÔ´Ï´Ù. Ç¥ÁØ ¾îµå¹ÙÀÌÀú´Â ¹ÝÀÀÀÌ ¾ø´Â ¼¹ö¸¦ ¼Óµµ°¡ ¸Å¿ì ´À¸®´Ù°í °£ÁÖÇÕ´Ï´Ù. ÀÌ ¾îµå¹ÙÀÌÀú´Â HTTP ¹× SSL Æ÷Æ® Áß ÇÑ Æ÷Æ®¿¡¼ ÀÀ´äÀÌ ¾øÀ¸¸é ¸ðµÎ¿¡ ´ëÇØ ¼¹ö¸¦ Á¾·á·Î Ç¥½ÃÇÕ´Ï´Ù.
ÀÌ·¯ÇÑ »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú¸¦ »ç¿ëÇÏ·Á¸é °ü¸®ÀÚ´Â Çϳª´Â HTTP Æ÷Æ®¿¡¼, Çϳª´Â SSL Æ÷Æ®¿¡¼ ¸ðµÎ µÎ °³ÀÇ ¾îµå¹ÙÀÌÀú ÀνºÅϽº¸¦ ½ÃÀÛÇÕ´Ï´Ù. ¾îµå¹ÙÀÌÀú´Â Çϳª´Â HTTP¿ëÀ¸·Î, Çϳª´Â SSL¿ëÀ¸·Î ¸ðµÎ µÎ °³ÀÇ Á¤Àû ±Û·Î¹ú ÇØ½Ã Å×À̺íÀ» ÀνºÅϽºÈÇÕ´Ï´Ù. °¢ ¾îµå¹ÙÀÌÀú´Â ÇØ´ç ¼¹ö µð¸Õ°úÀÇ Åë½ÅÀ» ½ÃµµÇϰí, ÀÌ À̺¥Æ®ÀÇ °á°ú¸¦ ÇØ½Ã Å×ÀÌºí¿¡ ÀúÀåÇÕ´Ï´Ù. °¢ ¾îµå¹ÙÀÌÀú°¡ ±âº» ¾îµå¹ÙÀÌÀú Ŭ·¡½º¿¡ ¸®ÅÏÇÏ´Â °ªÀº °¢ÀÚÀÇ ÀÚü ¼¹ö µð¸Õ°ú Åë½ÅÇÒ ¼ö ÀÖ´Â ±â´É°ú »ó´ë ¾îµå¹ÙÀÌÀú°¡ ÀÚü µð¸Õ°ú Åë½ÅÇÒ ¼ö ÀÖ´Â ±â´É¿¡ µû¶ó ´Ù¸¨´Ï´Ù.
´ÙÀ½ Á¶Á¤ ¸Þ¼Òµå¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
´ÙÀ½ ¿À·ù Á¶°ÇÀÌ ¹ß°ßµË´Ï´Ù.
ÀÌ ¿¹Á¦´Â HTTP¿¡ ´ëÇØ Æ÷Æ® 80À» SSL¿¡ ´ëÇØ Æ÷Æ® 443À» ¿¬°áÇϵµ·Ï ÀÛ¼ºµÇ¾úÀ¸³ª, Æ÷Æ®ÀÇ Á¶ÇÕÀ» »ç¿ëÀÚ¿¡ ¸Â°Ô Á¶Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.
package CustomAdvisors; import java.io.*; import java.net.*; import java.util.*; import java.util.Date; import com.ibm.internet.lb.advisors.*; import com.ibm.internet.lb.common.*; import com.ibm.internet.lb.manager.*; import com.ibm.internet.lb.server.SRV_ConfigServer; //-------- // Define the table element for the hash tables used in this custom advisor class ADV_nte implements Cloneable { private string sCluster; private int iPort; private string sServer; private int iLoad; private Date dTimestamp; //-------- // constructor public ADV_nte(string sClusterIn, int iPortIn, string sServerIn, int iLoadIn) { sCluster = sClusterIn; iPort = iPortIn; sServer = sServerIn; iLoad = iLoadIn; dTimestamp = new Date(); } //-------- // check whether this element is current or expired public boolean isCurrent(ADV_twop oThis) { boolean bCurrent; int iLifetimeMs = 3 * 1000 * oThis.getInterval(); // set lifetime as // 3 advisor cycles Date dNow = new Date(); Date dExpires = new Date(dTimestamp.getTime() + iLifetimeMs); if (dNow.after(dExpires)) { bCurrent = false; } else { bCurrent = true; } return bCurrent; } //-------- // value accessor(s) public int getLoadValue() { return iLoad; } //-------- // clone (avoids corruption between threads) public synchronized Object Clone() { try { return super.clone(); } catch (cloneNotSupportedException e) { return null; } } } //-------- // define the custom advisor public class ADV_twop extends ADV_Base implements ADV_MethodInterface, ADV_AdvisorVersionInterface { static final int ADV_TWOP_PORT_HTTP = 80; static final int ADV_TWOP_PORT_SSL = 443; //-------- // define tables to hold port-specific history information static HashTable htTwopHTTP = new Hashtable(); static HashTable htTwopSSL = new Hashtable(); static final String ADV_TWOP_NAME = "twop"; static final int ADV_TWOP_DEF_ADV_ON_PORT = 80; static final int ADV_TWOP_DEF_INTERVAL = 7; static final string ADV_HTTP_REQUEST_STRING = "HEAD / HTTP/1.0\r\nAccept: */*\r\nUser-Agent: " + "IBM_LB_Custom_Advisor\r\n\r\n"; //-------- // create byte array with SSL client hello message public static final byte[] abClientHello = { (byte)0x80, (byte)0x1c, (byte)0x01, // client hello (byte)0x03, (byte)0x00, // SSL version (byte)0x00, (byte)0x03, // cipher spec len (bytes) (byte)0x00, (byte)0x00, // session ID len (bytes) (byte)0x00, (byte)0x10, // challenge data len (bytes) (byte)0x00, (byte)0x00, (byte)0x03, // cipher spec (byte)0x1A, (byte)0xFC, (byte)0xE5, (byte)Ox20, // challenge data (byte)0xFD, (byte)0x3A, (byte)0x3C, (byte)0x18, (byte)0xAB, (byte)0x67, (byte)0xB0, (byte)0x52, (byte)0xB1, (byte)0x1D, (byte)0x55, (byte)0x44, (byte)0x0D, (byte)0x0A }; //-------- // constructor public ADV_twop() { super(ADV_TWOP_NAME, VERSION, ADV_TWOP_DEF_ADV_ON_PORT, ADV_TWOP_DEF_INTERVAL, "", false); // false = load balancer times the response setAdvisor ( this ); } //-------- // ADV_AdvisorInitialize public void ADV_AdvisorInitialize() { return; } //-------- // synchronized PUT and GET access routines for the hash tables synchronized ADV_nte getNte(Hashtable ht, String sName, String sHashKey) { ADV_nte nte = (ADV_nte)(ht.get(sHashKey)); if (null != nte) { nte = (ADV_nte)nte.clone(); } return nte; } synchronized void putNte(Hashtable ht, String sName, String sHashKey, ADV_nte nte) { ht.put(sHashKey,nte); return; } //-------- // getLoadHTTP - determine HTTP load based on server response int getLoadHTTP(int iConnectTime, ADV_Thread caller) { int iLoad = ADV_HOST_INACCESSIBLE; int iRc = caller.send(ADV_HTTP_REQUEST_STRING); // send request message // to server if (0 <= iRc) { // did the request return a failure? StringBuffer sbReceiveData = new StringBuffer("") // allocate a buffer // for the response iRc = caller.receive(sbReceiveData); // get response from server if (0 <= iRc) { // did the receive return a failure? if (0 < sbReceiveData.length()) { // is data there? iLoad = SUCCESS; // ignore retrieved data and // return success code } } } return iLoad; } //-------- // getLoadSSL() - determine SSL load based on server response int getLoadSSL(int iConnectTime, ASV_Thread caller) { int iLoad = ADV_HOST_INACCESSIBLE; int iSocket = caller.getAdvisorSocket(); // send hex request to server CMNByteArrayWrapper cbawClientHello = new CMNByteArrayWrapper(abClientHello); int iRc = SRV_ConfigServer.socketapi.sendBytes(iSocket, cbawClientHello); if (0 <= iRc) { // did the request return a failure? StringBuffer sbReceiveData = new StringBuffer(""); // allocate buffer // for the response iRc = caller.receive(sbReceiveData); // get a response from // the server if (0 <= iRc) { // did the receive return a failure? if (0 < sbReceiveData.length()) { // is data there? iLoad = SUCCESS; // ignore retrieved data and return success code } } } return iLoad; } //-------- // getLoad - merge results from the HTTP and SSL methods public int getLoad(int iConnectTime, ADV_Thread caller) { int iLoadHTTP; int iLoadSSL; int iLoad; int iRc; String sCluster = caller.getCurrentCluster(); // current cluster address int iPort = getAdviseOnPort(); String sServer = caller.getCurrentServer(); String sHashKey = sCluster = ":" + sServer; // hash table key if (ADV_TWOP_PORT_HTTP == iPort) { // handle an HTTP server iLoadHTTP = getLoadHTTP(iConnectTime, caller); // get the load for HTTP ADV_nte nteHTTP = newADV_nte(sCluster, iPort, sServer, iLoadHTTP); putNte(htTwopHTTP, "HTTP", sHashKey, nteHTTP); // save HTTP load // information ADV_nte nteSSL = getNte(htTwopSSL, "SSL", sHashKey); // get SSL // information if (null != nteSSL) { if (true == nteSSL.isCurrent(this)) { // check the time stamp if (ADV_HOST_INACCESSIBLE != nteSSL.getLoadValue()) { // is SSL // working? iLoad = iLoadHTTP; } else { // SSL is not working, so mark the HTTP server down iLoad= ADV_HOST_INACCESSIBLE; } } else { // SSL information is expired, so mark the // HTTP server down iLoad = ADV_HOST_INACCESSIBLE; } } else { // no load information about SSL, report // getLoadHTTP() results iLoad = iLoadHTTP; } } else if (ADV_TWOP_PORT_SSL == iPort) { // handle an SSL server iLoadSSL = getLoadSSL(iConnectTime, caller); // get load for SSL ADV_nte nteSSL = new ADV_nte(sCluster, iPort, sServer, iLoadSSL); putNte(htTwopSSL, "SSL", sHashKey, nteSSL); // save SSL load info. ADV_nte nteHTTP = getNte(htTwopHTTP, "SSL", sHashKey); // get HTTP // information if (null != nteHTTP) { if (true == nteHTTP.isCurrent(this)) { // check the timestamp if (ADV_HOST_INACCESSIBLE != nteHTTP.getLoadValue()) { // is HTTP // working? iLoad = iLoadSSL; } else { // HTTP server is not working, so mark SSL down iLoad = ADV_HOST_INACCESSIBLE; } } else { // expired information from HTTP, so mark SSL down iLoad = ADV_HOST_INACCESSIBLE; } } else { // no load information about HTTP, report // getLoadSSL() results iLoad = iLoadSSL; } } //-------- // error handler else { iLoad = ADV_HOST_INACCESSIBLE; } return iLoad; } }
WebSphere Application Server¿ë »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀú »ùÇÃÀº install_path/servers/samples/CustomAdvisors/ µð·ºÅ丮¿¡ µé¾î ÀÖ½À´Ï´Ù. ÀÌ ¹®¼¿¡¼´Â Àüü Äڵ带 ¼ö·ÏÇÏÁö ¾Ê¾Ò½À´Ï´Ù.
¿ÏÀüÇÑ ¾îµå¹ÙÀÌÀú´Â ÀÌ ¿¹Á¦º¸´Ù ¾à°£ º¹ÀâÇÕ´Ï´Ù. Áï, À§¿¡¼ º» StringTokenizer ¿¹Á¦º¸´Ù ´õ ¾ÐÃàµÈ Ư¼ö ±¸¹® ºÐ¼® ·çƾÀ» Ãß°¡ÇÕ´Ï´Ù.
ÄÚµå »ùÇÃÀÇ ´õ º¹ÀâÇÑ ºÎºÐÀº Java servlet¿¡ ÀÖ½À´Ï´Ù. servlet¿¡´Â ´Ù¸¥ ¸Þ¼Òµå Áß¿¡¼ servlet ½ºÆå¿¡ ÇÊ¿äÇÑ µÎ °³ÀÇ ¸Þ¼Òµå init() ¹× service()¿Í Java.lang.thread Ŭ·¡½º¿¡ ÇÊ¿äÇÑ ÇÑ °³ÀÇ ¸Þ¼Òµå run()ÀÌ µé¾î ÀÖ½À´Ï´Ù.
servlet ÄÚµåÀÇ °ü·Ã ´ÜÆíµéÀº ¾Æ·¡¿Í °°½À´Ï´Ù.
... public void init(ServletConfig config) throws ServletException { super.init(config); ... _checker = new Thread(this); _checker.start(); } public void run() { setStatus(GOOD); while (true) { if (!getKeepRunning()) return; setStatus(figureLoad()); setLastUpdate(new java.util.Date()); try { _checker.sleep(_interval * 1000); } catch (Exception ignore) { ; } } } public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { ServletOutputStream out = null; try { out = res.getOutputStream(); } catch (Exception e) { ... } ... res.setContentType("text/x-application-LBAdvisor"); out.println(getStatusString()); out.println(getLastUpdate().toString()); out.flush(); return; } ...
Application ServerÀÇ ±âÁ¸ ºÎºÐ¿¡ ´ëÇÑ Ç¥ÁØ È£ÃâÀ» »ç¿ëÇϵç, »ç¿ëÀÚÀÇ »ç¿ëÀÚ Á¤ÀÇ ¾îµå¹ÙÀÌÀúÀÇ ¼¹öÃø ¾îµå¹ÙÀÌÀú°¡ µÉ »õ Äڵ带 Ãß°¡ÇÏµç ¸®ÅϵǴ ·Îµå °ªÀ» °Ë»çÇÏ°í ¼¹ö ÀÛµ¿À» º¯°æÇÏ·Á°í ÇÒ °æ¿ì°¡ ÀÖ½À´Ï´Ù. Java StringTokenizer Ŭ·¡½º ¹× ÀÌ¿Í ¿¬°üµÈ ¸Þ¼Òµå¸¦ »ç¿ëÇϸé ÀÌ·¯ÇÑ °Ë»ç¸¦ ½±°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀϹÝÀûÀÎ HTTP ¸í·ÉÀº GET /index.html HTTP/1.0ÀÔ´Ï´Ù.
ÀÌ ¸í·É¿¡ ´ëÇÑ ÀϹÝÀûÀÎ ÀÀ´äÀº ´ÙÀ½°ú °°½À´Ï´Ù.
HTTP/1.1 200 OK Date: Mon, 20 November 2000 14:09:57 GMT Server: Apache/1.3.12 (Linux and UNIX) Content-Location: index.html.en Vary: negotiate TCN: choice Last-Modified: Fri, 20 Oct 2000 15:58:35 GMT ETag: "14f3e5-1a8-39f06bab;39f06a02" Accept-Ranges: bytes Content-Length: 424 Connection: close Content-Type: text/html Content-Language: en <!DOCTYPE HTML PUBLIC "-//w3c//DTD HTML 3.2 Final//EN"> <HTML><HEAD><TITLE>Test Page</TITLE></HEAD> <BODY><H1>Apache server</H1> <HR> <P><P>This Web server is running Apache 1.3.12. <P><HR> <P><IMG SRC="apache_pb.gif" ALT=""> </BODY></HTML>
°ü½ÉÀÖ´Â Ç׸ñ, ƯÈ÷ HTTP ¸®ÅÏ Äڵ尡 ù Çà¿¡ Æ÷ÇԵ˴ϴÙ.
HTTP ½ºÆåÀÌ ´ÙÀ½°ú °°ÀÌ ¿ä¾àÇÒ ¼ö ÀÖ´Â ¸®ÅÏ Äڵ带 ºÐ·ùÇÕ´Ï´Ù.
¼¹ö°¡ ¸®ÅÏÇÒ ¼ö ÀÖ´Â Äڵ带 Á¤È®È÷ ¾Ë°í ÀÖ´Â °æ¿ì, Äڵ带 ÀÌ ¿¹Á¦¿Í °°ÀÌ ÀÚ¼¼ÇÏ°Ô ÀÛ¼ºÇÒ Çʿ䰡 ¾ø½À´Ï´Ù. ±×·¯³ª ¹ß°ßÇÏ´Â ¸®ÅÏ Äڵ带 Á¦ÇÑÇÏ¸é ³ªÁß¿¡ ÇÁ·Î±×·¥ÀÇ À¶Å뼺À» Á¦ÇÑÇÒ ¼ö ÀÖ´Ù´Â Á¡¿¡ À¯ÀÇÇØ¾ß ÇÕ´Ï´Ù.
´ÙÀ½ ¿¹Á¦´Â ÃÖ¼ÒÀÇ HTT Ŭ¶óÀÌ¾ðÆ®¸¦ Æ÷ÇÔÇÏ´Â µ¶¸³Çü Java ÇÁ·Î±×·¥ÀÔ´Ï´Ù. ÀÌ ¿¹Á¦´Â HTTP ÀÀ´äÀ» Á¶»çÇϱâ À§ÇÑ °£´ÜÇÑ ¹ü¿ë ±¸¹® ºÐ¼®±â¸¦ È£ÃâÇÕ´Ï´Ù.
import java.io.*; import java.util.*; import java.net.*; public class ParseTest { static final int iPort = 80; static final String sServer = "www.ibm.com"; static final String sQuery = "GET /index.html HTTP/1.0\r\n\r\n"; static final String sHTTP10 = "HTTP/1.0"; static final String sHTTP11 = "HTTP/1.1"; public static void main(String[] Arg) { String sHTTPVersion = null; String sHTTPReturnCode = null; String sResponse = null; int iRc = 0; BufferedReader brIn = null; PrintWriter psOut = null; Socket soServer= null; StringBuffer sbText = new StringBuffer(40); try { soServer = new Socket(sServer, iPort); brIn = new BufferedReader(new InputStreamReader(soServer.getInputStream())); psOut = new PrintWriter(soServer.getOutputStream()); psOut.println(sQuery); psOut.flush(); sResponse = brIn.readLine(); try { soServer.close(); } catch (Exception sc) {;} } catch (Exception swr) {;} StringTokenizer st = new StringTokenizer(sResponse, " "); if (true == st.hasMoreTokens()) { sHTTPVersion = st.nextToken(); if (sHTTPVersion.equals(sHTTP110) || sHTTPVersion.equals(sHTTP11)) { System.out.println("HTTP Version: " + sHTTPVersion); } else { System.out.println("Invalid HTTP Version: " + sHTTPVersion); } } else { System.out.println("Nothing was returned"); return; } if (true == st.hasMoreTokens()) { sHTTPReturnCode = st.nextToken(); try { iRc = Integer.parseInt(sHTTPReturnCode); } catch (NumberFormatException ne) {;} switch (iRc) { case(200): System.out.println("HTTP Response code: OK, " + iRc); break; case(400): case(401): case(402): case(403): case(404): System.out.println("HTTP Response code: Client Error, " + iRc); break; case(500): case(501): case(502): case(503): System.out.println("HTTP Response code: Server Error, " + iRc); break; default: System.out.println("HTTP Response code: Unknown, " + iRc); break; } } if (true == st.hasMoreTokens()) { while (true == st.hasMoreTokens()) { sbText.append(st.nextToken()); sbText.append(" "); } System.out.println("HTTP Response phrase: " + sbText.toString()); } } }