·Î±×ÀÎ | ȸ¿ø°¡ÀÔ (´º½º·¹ÅͽÅû) | SITEMAP
   
  °³¹ß   Ç÷§Æû   ½Ã½ºÅÛ   ¸Å´ÏÁö¸ÕÆ®   Àüü±â»ç  
ÀÚ¹Ù
´å³Ý
C/C++
DB
¸ðµ¨¸µ
À¥°³¹ß
±âŸ
À¯´Ð½º/¸®´ª½º
À©µµ¿ì
±âŸ
¼­¹ö
³×Æ®¿öÅ©
º¸¾È
±âŸ
BM
PM
±âŸ
 
±â»çÀúÀå
0
 
¸¶ÀÌ ½ºÅ©·¦
[³ªÀÇ ¿ÀǼҽº ÇÁ·ÎÁ§Æ® °æÇè±â] Áñ°Å¿òÀ» ³Ñ¾î ÇູÀ̾ú´Ù

ÀÌÈñ½Â (¾Æ·¹¿ÀÄ¿¹Â´ÏÄÉÀ̼ÇÁî)   2005/01/13
[Áöµð³ÝÄÚ¸®¾Æ]2004³âÀÌ ¾ÆÁ÷ ¸¹ÀÌ ³²¾Æ ÀÖÁö¸¸ Áö±Ý±îÁö ÀÖ¾ú´ø ¿ÃÇØÀÇ ÀϵéÀ» µÇµ¹¾Æº¸¸é ±×°ÍÀº ¸Å¿ì ´ÞÄÞÇÏ°í °­·ÄÇÑ ²ÞÀÇ ¿¬¼Ó°úµµ °°¾Ò´Ù. 2000³âºÎÅÍ ½ÃÀÛÇØ ¿Â ¿ÀǼҽº ÇÁ·ÎÁ§Æ®°¡ °¡½ÃÀûÀÎ °á½ÇÀ» ¸ÎÀº ÇØÀ̱⠶§¹®ÀÌ´Ù.

½Ç¹«¿¡¼­µµ ¸¹Àº ÀÏÀÌ ÀÖ¾úÁö¸¸ ¹«¾ùº¸´Ùµµ ±× ¹Ø°Å¸§ÀÌ µÇ¾î ¿Â ÇÊÀÚÀÇ ¿ÀǼҽº ÇÁ·ÎÁ§Æ® °æÇè´ãÀ» µ¶ÀÚ ¿©·¯ºÐ°ú ³ª´©°íÀÚ ÇÑ´Ù(ÆíÁýÀÚ ÁÖ : ÀÌ ±ÛÀÌ ÀÛ¼ºµÈ ½ÃÁ¡Àº Áö³­ÇØ 11¿ùÀÌ´Ù).

¿ÀǼҽº ÇÁ·ÎÁ§Æ®¸¦ Çϱâ·Î óÀ½ °á½ÉÇÑ °ÍÀº Áö³­ 2000³â Çѱ¹¾îÆÇÀ¸·Î ¹ß¸ÅµÈ¡ºOPEN SOURCES¡»(ÇѺû¹Ìµð¾î)¶ó´Â Ã¥À» ÀÐ°í ³ª¼­¿´´Ù. 4³âÀÌ Áö³­ Áö±Ý ÀÚ¼¼ÇÑ ³»¿ëÀº ±â¾ïÇÒ ¼ö ¾øÁö¸¸ ±× Ã¥Àº ¹«¾ùº¸´Ùµµ ¿ÀǼҽº ÇÁ·Î±×·¥À» ¸¸µç´Ù´Â °ÍÀÌ ¾ó¸¶³ª Àç¹ÌÀÖ°í ¶Ç ½ÇÁ¦·Îµµ À¯¿ëÇÑÁö¸¦ Èï¹ÌÁøÁøÇÏ°Ô ¼³¸íÇØ ÁÖ¾ú´Ù.

ÀÌ·± ¸Å·ÂÀûÀÎ ¿ÀǼҽº ¸ðµ¨Àº C ¾ð¾î¸¦ °« ¹è¿î ÁßÇб³ ½ÃÀý ÇÑ±Û ÀÔÃâ·Â ¶óÀ̺귯¸® Á¦ÀÛÀ¸·Î ½ÃÀÛµÈ ¶óÀ̺귯¸®¿¡ ´ëÇÑ °ü½É°ú ÀÚ¿¬½º·´°Ô °áÇÕÇß°í ´ç½Ã ¼­¹ö ÇÁ·Î±×·¡¹ÖÀ» Çϰí ÀÖ¾ú´ø ÇÊÀÚ´Â ´©±¸³ª ¼­¹ö °³¹ß¿¡ À¯¿ëÇÏ°Ô ¾²ÀÏ ¸¸ÇÑ °ø¿ë ŸŶÀ» °³¹ßÇϱâ·Î Çß´Ù.

¶óÀ̺귯¸®(±×°ÍÀÌ ÇÁ·¹ÀÓ¿öÅ©À̵ç ŸŶÀ̵ç)ÀÇ °³¹ßÀº °³¹ßÀÚ¿¡°Ô´Â ¸Å¿ì Áß¿äÇÑ °æÇèÀÌ´Ù. ÀÏ¹Ý »ç¿ëÀÚ¸¦ À§ÇØ À©µµ¿ì¿ë ¾ÖÇø®ÄÉÀ̼ÇÀ» ¸¸µé ¶§ °í·ÁÇØ¾ß ÇÒ °ÍÀÌ À¯Àú ÀÎÅÍÆäÀ̽º¶ó¸é, ¶óÀ̺귯¸® °³¹ß½Ã °í·ÁÇØ¾ß ÇÒ °ÍÀº ¹Ù·Î API´Ù. ¶óÀ̺귯¸®ÀÇ API°¡ ¾ó¸¶³ª °³¹ßÀÚÀÇ ¿ä±¸¿¡ ºÎÇÕÇÏ´À³Ä¿¡ µû¶ó ¶óÀ̺귯¸®ÀÇ À¯¿ë¼ºÀÌ 1Â÷ÀûÀ¸·Î ÆÇ°¡¸§³ª°í, ±× µÚ¿¡ ¶óÀ̺귯¸®ÀÇ Ç³ºÎÇÑ ±â´É°ú ¼º´ÉÀÌ µû¶ó¿Â´Ù.

±×·±µ¥ ÀÌ API¶ó´Â °ÍÀÌ ¶óÀ̺귯¸®¿¡¸¸ ÀÖ´Â °ÍÀÌ ¾Æ´Ï´Ù. ±×°ÍÀº ¹Ù·Î ¿ì¸®°¡ ÀÏ»óÀûÀ¸·Î °³¹ßÇϰí ÀÖ´Â ¸ðµç ºñÁî´Ï½º ·ÎÁ÷¿¡ Àֱ⿡ ÇÊÀÚ´Â ¶óÀ̺귯¸® °³¹ß °æÇèÀ» ¸Å¿ì Áß½ÃÇÑ´Ù.

ÀÌ ¶§ °³¹ßµÈ ¶óÀ̺귯¸®´Â ÀÚ¹Ù¼­ºñ½º³Ý(javaservice.net)¿¡ ¸î Â÷·Ê °ø°³µÇ¾ú°í, ³ªÁß¿¡ ´õ ¸¹Àº ÇÁ·ÎÁ§Æ®¸¦ ÁøÇàÇϸ鼭 °³·®µÇ¾î ¼Ò½ºÆ÷Áö(milkbox.sf.net)³ª °³ÀΠȨÆäÀÌÁö(gleamynode.net/dev)¿¡ µî·ÏµÇ¾ú´Ù. ±×·¯³ª ÀÚ¹Ù Ä¿¹Â´ÏƼ°¡ ³ª³¯ÀÌ ¼º¼÷ÇØÁöÀÚ ÀÌ·¯ÇÑ ³ë·ÂÀº ASF(Apache Software Foundation, www.apache.org)°ú °°Àº ¿ª»ç¸¦ °¡Áø ºñ¿µ¸® ±â°ü¿¡¼­ºÎÅÍ CodeHaus(www.codehaus.org), OpenSymphony(www.opensymphony.com) µî°ú °°Àº »ó´ëÀûÀ¸·Î »õ·Î¿î ±â°ü µî¿¡ ÁýÁߵDZ⠽ÃÀÛÇßÀ¸¸ç, ¼­¼­È÷ °³ÀÎÀÇ Â÷¿øÀ» ³Ñ¾î¼­°Ô µÇ¾ú´Ù.

Çо÷°ú ÇÁ·ÎÁ§Æ®¸¦ º´ÇàÇϸ鼭 ´«ÄÚ ¶ã »õ ¾øÀÌ ¹Ù»Û ³ª³¯À» º¸³»´ø Áß ÇÊÀÚ°¡ °³¹ßÇß´ø °ÍµéÀÌ AJC(Apache Jakarta Commons, jakarta.apache.org/commons)¿Í °°Àº ÇÁ·ÎÁ§Æ®¿¡¼­ Ä¿¹Â´ÏƼÀÇ ÈÄ¿ø ¼Ó¿¡ ¹ßÀüÇϰí ÀÖ´Ù´Â °ÍÀ», ±×¸®°í ÇÊÀÚ´Â ±× °÷¿¡ Âü¿©ÇÏÁö ¾Ê°í ÀÖ¾úÀ½¿¡ ¾ÈŸ±î¿î ¸¶À½ÀÌ µé¾ú´Ù.

Èï¹ÌÁøÁøÇÑ ¿ÀǼҽº ÇÁ·ÎÁ§Æ®, Netty 2
ÀÌ¿Í °°¾Ò´ø Netty 1Àº ÀÌ¹Ì 2001³â°æºÎÅÍ ¿©·¯ ÇÁ·ÎÁ§Æ®¿¡¼­ »ç¿ëµÇ¾î ¿ÔÀ¸³ª ÇÊÀÚÀÇ È«º¸ ¹× ¹®¼­È­, ±×¸®°í °æÇè ºÎÁ·À¸·Î Ä¿¹Â´ÏƼÀÇ Áö¿øÀÌ ÀüÇô ¾ø¾ú´Ù. ±×·± ½Ç¼ö¸¦ °Å¿ï»ï¾Æ ´Ù½Ã ½ÃÀÛÇÑ ÇÁ·ÎÁ§Æ®°¡ ¹Ù·Î Netty 2´Ù. Netty 2´Â Netty 1ÀÇ ¸ÞÀÌÀú ¾÷µ¥ÀÌÆ® ¹öÀüÀ¸·Î Netty 1ÀÌ J2SE 1.3 ÀÌÇÏÀÇ BIO(Blocking I/O) API¸¦ »ç¿ëÇß´ø ¹Ý¸é Netty 2´Â J2SE 1.4 ÀÌ»óºÎÅÍ Áö¿øµÇ´Â NBIO(Non-blocking I/O) API¸¦ »ç¿ëÇß´Ù.

´ç½Ã J2SE 1.4°¡ Ȱ¹ßÇÏ°Ô »ç¿ëµÇ±â ½ÃÀÛÇßÁö¸¸ Á¦´ë·Î µÈ NIO ÇÁ·¹ÀÓ¿öÅ©´Â ¾ø¾ú°í °£È¤ ³ª¿Â´Ù ÇØµµ ¾ËÆÄ³ª º£Å¸ ¼öÁØ¿¡¼­ ¸Ó¹«¸£°í ÀÖ¾ú´Ù. ÀÌ´Â ¾Æ¸¶µµ ¿À´Ã³¯ ´ëºÎºÐÀÇ °³¹ßÀÌ À¥¿¡ Ä¡ÁߵǾî Àֱ⠶§¹®À̶ó´Â »ý°¢ÀÌ µç´Ù. ±×·¯³ª Ư¼ö ¸ñÀûÀÇ ¼­¹ö¸¦ °³¹ßÇϰųª ·¹°Å½Ã ½Ã½ºÅÛ°ú ¿¬µ¿ÇÏ´Â µîÀÇ Àϵ鵵 ÇÁ·ÎÁ§Æ®¿¡¼­ ÃæºÐÈ÷ ¸¹Àº ½Ã°£À» ¼Ò¿äÇÑ´Ù. ƯÈ÷ ÇÁ·ÎÅäÄÝÀÇ ±¸ÇöÀÌ ±×·¯Çß´Ù.

<±×¸² 1> Netty 2ÀÇ µ¿ÀÛ °úÁ¤

Netty ½Ã¸®ÁîÀÇ °³¹ß ¸ñÇ¥´Â ¹Ù·Î ÀÌ·¯ÇÑ Àú¼öÁØ I/O È£ÃâÀ» ¼û±â°í, ±×°ÍÀ» À̺¥Æ® ±â¹Ý(Event-Driven) ¹æ½ÄÀ¸·Î ÀüÈ¯ÇØ ÁÖ´Â °ÍÀ̾ú´Ù(<±×¸² 1>).

´ç½Ã ÇÊÀÚ´Â À̵¿Åë½Å 3»ç¿¡ SMS Àü¼ÛÀ» ÇÏ´Â SMS ¼¾Å͸¦ °³¹ßÇϰí ÀÖ¾ú´Âµ¥, À̵é 3»ç´Â Åë½Å »óÀÇ ³í¸®Àû È帧(ÀÌÇÏ ¸Þ½ÃÁö Ç÷οì)À̳ª ¸Þ½ÃÁö (Àü¹®) À¯ÇüÀº ¸ðµÎ µ¿ÀÏÇßÁö¸¸, Àü¹®ÀÇ ÀÎÄÚµùÀº ÀüºÎ Á¦°¢°¢À̾ú´Ù. ¾î¶² ±â¾÷Àº network byte orderÀÇ ¹ÙÀ̳ʸ® µ¥ÀÌÅ͸¦ ¿øÇß°í, ¶Ç ´Ù¸¥ ±â¾÷Àº ASCII ¹®ÀÚ¿­À» ¿øÇß´Ù. ASCII ¹®ÀÚ¿­ÀÏ °æ¿ì¿¡µµ ³²´Â °ø°£Àº °ø¹éÀ¸·Î ä¿ïÁö, ¾Æ´Ï¸é NULL·Î ä¿ïÁö ¿©ºÎµµ Á¦°¢°¢ÀÎ µî ÇÊÀÚ¸¦ ÇǰïÇÏ°Ô ÇÏ¿´´Ù.

ÇÏÁö¸¸ ¸¸¾à ÇÁ·ÎÅäÄÝ »óÀÇ ¸Þ½ÃÁöµéÀÌ Ãß»óÈ­µÈ °³Ã¼·Î Ç¥ÇöÀÌ µÇ°í, À̰ÍÀÌ À̺¥Æ®Ã³·³ Àü´ÞµÈ´Ù¸é ¾î¶³±î? »ó±â À¯Áî ÄÉÀ̽ºÀÇ °æ¿ì ¾öû³­ À̵æÀÌ ÀÖ´Ù.

ù°, ¸Þ½ÃÁö Ç÷οì´Â °°À¸³ª ¸Þ½ÃÁöÀÇ ÀÎÄÚµùÀÌ ´Ù¸£´Ù¸é ¸Þ½ÃÁö¸¦ ÀÎÄÚµå/µðÄÚµåÇÏ´Â ºÎºÐ°ú ¸Þ½ÃÁö Ç÷ο츦 ´Ù·ç´Â ºÎºÐÀ» µû·Î °³¹ßÇÒ ¼ö ÀÖ´Ù(<±×¸² 1>ÀÇ À¯Àú ÀÎÄÚ´õ/µðÄÚ´õ). ¶ÇÇÑ ¸Þ½ÃÁö Ç÷ο츦 ´Ù·ç´Â ÄÚµå´Â ÇÑ ¹ø¸¸ ±¸ÇöÇϸé À̵¿Åë½Å 3»çÀÇ ÇÁ·ÎÅäÄÝÀ» ¸Å¿ì ½±°Ô ±¸ÇöÇÒ ¼ö ÀÖ´Ù(<±×¸² 1>ÀÇ À¯Àú ÄÚµå). ÀÌ ÀåÁ¡Àº ½Ã°£ÀÌ È帥 ÈÄ À̵¿Åë½Å 3»ç ÀÌ¿ÜÀÇ ´Ù¸¥ SMS Àü¼Û ¼­ºñ½º ¾÷ü·ÎÀÇ ¸Þ½ÃÁö Àü´ÞÀ» ±¸ÇöÇÏ´Â µ¥ À§·ÂÀ» ¹ßÈÖÇß´Ù.

µÑ°, À̺¥Æ®´Â ±âº»ÀûÀ¸·Î ºñµ¿±â ¹æ½ÄÀÌ´Ù. ¸Þ½ÃÁö¸¦ ºñµ¿±â·Î ÁÖ°í¹Þµµ·Ï ÇÁ·Î±×·¥ÇÏ´Â °ÍÀº ¼÷·ÃµÈ °³¹ßÀÚÀÇ ±â¼úÀÌ ÇÊ¿äÇÏ´Ù. À̺¥Æ® ±â¹ÝÀ¸·Î ³×Æ®¿öÅ© I/O¸¦ ÀÚµ¿À¸·Î ¼öÇàÇÏ°í ±×°ÍÀ» °³Ã¼·Î Àü´ÞÇÒ ¼ö¸¸ ÀÖ´Ù¸é »ç¿ëÀÚ°¡ º¹ÀâÇÑ ³×Æ®¿öÅ© ÇÁ·Î±×·¡¹Ö Áö½Ä ¾øÀ̵µ ¼÷·ÃÀÚÀÇ °Í¿¡ ¸øÁö¾ÊÀº °á°ú¸¦ ³¾ ¼ö ÀÖ´Ù. ´ÙÀ½Àº Netty 2ÀÇ ¿¹½Ã ÇÁ·Î±×·¥ÀÎ SumUp Ŭ¶óÀ̾ðÆ®/¼­¹ö Áß ¼­¹öÀÇ ÀϺηΠ»ó±â Ư¡À» Àß Ç¥ÇöÇϰí ÀÖ´Ù.

/*
* @(#) $Id: ServerSessionListener.java 18 2004-08-21 08:27:49Z trustin $
*/
package net.gleamynode.netty2.example.sumup;

import net.gleamynode.netty2.Message;
import net.gleamynode.netty2.Session;
import net.gleamynode.netty2.SessionListener;
import net.gleamynode.netty2.SessionLog;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/***
* {@link SessionListener} for SumUp server.
*
* @author Trustin Lee (http://gleamynode.net/)
* @version $Rev: 18 $, $Date: 2004-08-21 17:27:49 +0900 (Åä, 21  8¿ù 2004) $
*/
public class ServerSessionListener implements SessionListener {
private static final Log log = LogFactory
            .getLog(ServerSessionListener.class);

public ServerSessionListener() {
}

public void connectionEstablished(Session session) {
SessionLog.info(log, session, "Connection established.");

// set idle time to 60 seconds
session.getConfig().setIdleTime(60);

// initial sum is zero
session.setAttachment(new Integer(0));
}

public void connectionClosed(Session session) {
SessionLog.info(log, session, "Connection closed.");
}

public void messageReceived(Session session, Message message) {
SessionLog.info(log, session, "RCVD: " + message);

// client only sends AddMessage. otherwise, we will have to identify
// its type using instanceof operator.
AddMessage am = (AddMessage) message;

// add the value to the current sum.
int sum = ((Integer) session.getAttachment()).intValue();
int value = am.getValue();
long expectedSum = (long) sum + value;
if (expectedSum > Integer.MAX_VALUE || expectedSum
< Integer.MIN_VALUE) {
// if the sum overflows or underflows, return error message
ResultMessage rm = new ResultMessage();
rm.setSequence(am.getSequence()); // copy sequence
rm.setOk(false);
session.write(rm);
} else {
// sum up
sum = (int) expectedSum;
session.setAttachment(new Integer(sum));

// return the result message
ResultMessage rm = new ResultMessage();
rm.setSequence(am.getSequence()); // copy sequence
rm.setOk(true);
rm.setValue(sum);
session.write(rm);
}
}

public void messageSent(Session session, Message message) {
SessionLog.info(log, session, "SENT: " + message);
}

public void sessionIdle(Session session) {
SessionLog.warn(log, session, "Disconnecting the idle.");
// disconnect an idle client
session.close();
    }

public void exceptionCaught(Session session, Throwable cause) {
SessionLog.error(log, session, "Unexpected exception.", cause);
// close the connection on exceptional situation
session.close();
    }
}

ÀÌ ÄÚµå´Â Ŭ¶óÀ̾ðÆ®ÀÇ AddMessage°¡ ´ã°í ÀÖ´Â Á¤¼ö¸¦ ¸ðµÎ ´õÇÑ Áö±Ý±îÁöÀÇ ÇÕÀ» ÀÀ´ä ¸Þ½ÃÁö·Î µÇµ¹¸°´Ù.  ¾îµð¿¡µµ SocketChannel.read()³ª write() ¸Þ½îµå°¡ º¸ÀÌÁö ¾Ê´Â´Ù. ±×·¯³ª À̰ÍÀº ¸í¹éÈ÷ ³×Æ®¿öÅ© ¼­¹ö´Ù. ¿©·¯ ¼­¹ö ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ ÀÌ·¯ÇÑ Å×Å©´ÐÀÌ »ç¿ëµÇ°í ÀÖÀ¸³ª, Netty´Â À̰ÍÀ» ÀϹÝÈ­Çϰí Á¤Á¦ÇÏ¿© ½ÇÁ¦·Î »ç¿ë °¡´ÉÇÑ API¸¦ ¸¸µé¾î³»¾ú´Ù.

±×·¯³ª ÀÌ·¯ÇÑ ÁÁÀº ÇÁ·¹ÀÓ¿öÅ©°¡ ÀÖ´Ù ÇÏ´õ¶óµµ ¸¹Àº »ç¶÷µéÀÌ »ç¿ëÇÏÁö ¾ÊÀ¸¸é ±× À¯¿ë¼ºÀº ¶³¾îÁø´Ù. °ú°ÅÀÇ ¾²¶ó¸° °æÇèÀ» °Å¿ï»ï¾Æ ÇÊÀÚ´Â À̸¦ º»°ÝÀûÀ¸·Î È«º¸Çϱâ·Î Çß´Ù. ±× Àü·«Àº ´ÙÀ½°ú °°´Ù.

¡ß ¸ðµç ÀÛ¾÷À» ¿µ¾î·Î ÁøÇàÇÑ´Ù.

¡ß Netty 2°¡ ³ôÀº ÀÎÁöµµ¸¦ ¾ò±â À§Çؼ­´Â Àü ¼¼°èÀûÀÎ Âü¿©°¡ ÇÊ¿äÇÏ´Ù°í ÆÇ´ÜÇ߱⠶§¹®¿¡ ¸ðµç ¹®¼­¿Í ÁÖ¼®À» ¿µ¾î·Î ÀÛ¼ºÇÏ¿´´Ù.

¡ß ¸ÚÁø ·è¾ØÇÊÀÇ À¥ »çÀÌÆ®¸¦ ¸¸µé°í Æ÷·³À» ¿¬´Ù.

¡ß À¥ »çÀÌÆ®´Â Maven(maven.apache.org)À̶ó´Â Áö´ÉÇü ÇÁ·ÎÁ§Æ® ºôµå ½Ã½ºÅÛÀÇ µîÀåÀ¸·Î °¡´ÉÇØÁ³´Ù. ´ç½Ã ¿À¶óÀϸ® OnJava.comÀÇ Maven¿¡ °üÇÑ Æ©Å丮¾óÀ» ÀÐÀº °ÍÀÌ °è±â°¡ µÇ¾î »ç¿ëÇÏ°Ô µÇ¾ú´Âµ¥, °á°ú´Â ´ë ¸¸Á·À̾ú´Ù. ÇÊÀÚ´Â °ÅÀÇ ¸ðµç ÇÁ·ÎÁ§Æ®¸¦ MavenÀ¸·Î ºôµåÇϰí ÀÖ´Ù.

¡ß Æ÷·³Àº ¿Ü±¹ÀεéÀÌ ¼±È£ÇÏ´Â phpBB(www.phpbb.com)¸¦ »ç¿ëÇß´Ù.

¡ß ¹ö±× Æ®·¢Ä¿´Â Mantis(mantisbt.sf.net)À» »ç¿ëÇÏ°í ½Í¾úÀ¸³ª °ÔÀ¸¸§À¸·Î Àû¿ëÇÏÁö ¸øÇßÁö¸¸ Æ÷·³¿¡ ¹ö±× ¸®Æ÷ÆÃ °Ô½ÃÆÇÀÌ µû·Î ÀÖ¾î º°´Ù¸¥ ¾î·Á¿òÀÌ ¾ø¾ú´Ù.

¡ß À¯¸í »çÀÌÆ®¿¡ ¸±¸®Áî ¼Ò½ÄÀ» ¾Ë¸®°í »ç¶÷µéÀÇ °ü½É°ú ´ä±Û¿¡ Ä£ÀýÈ÷ ´ë´äÇÑ´Ù.

ÀÌ¿Í °°Àº ¸ñÇ¥¸¦ °®°í Netty 2¸¦ °³¹ßÇÑ Áö ¼ö °³¿ùÀÌ Áö³ª ¾î´À Á¤µµ ¾ÈÁ¤ÀûÀÎ ¹öÀüÀÌ °³¹ßµÇ¾ú´Ù. 2004³â 6¿ù 7ÀÏ, ÇÊÀÚ´Â ¿ë±â¸¦ ³»¾î TheServerSide.com¿¡ Netty2 ¹öÀü 1.0.0ÀÇ ¸±¸®Á ¾Ë·È´Ù. ±×·¯³ª ±× °á°ú´Â ½â ÁÁÁö ¸øÇß´Ù. ±×µéÀº ³Ê¹«³ª Á¤Á÷Çß´Ù.

"The usefulness of Netty is zero when the documentation is so poor." - Han Theman

ÇÊÀÚ´Â Netty°¡ »çÀåµÇÁö´Â ¾ÊÀ»±î °ÆÁ¤ÀÌ µÇ¾ú°í, 3ÀÏ¿¡ °ÉÄ£ ÀÛ¾÷ ³¡¿¡ JavaDocÀ» »ó¼¼È÷ º¸°­ÇÏ°í ¿¹Á¦ ÄÚµå¿Í ÀüüÀûÀÎ UMLÀÌ Æ÷ÇÔµÈ Æ©Å丮¾óÀ» Ãß°¡ÇØ ¹öÀü 1.1.0À» ¸±¸®ÁîÇß´Ù.

TheServerSide.com¿¡¼­´Â ¸±¸®Áî ¾Ë¸²À» ÇÑ ´Þ¿¡ 1ȸ·Î Á¦ÇÑÇϰí ÀÖ¾ú±â ¶§¹®¿¡ ÇÊÀÚ´Â Freshmeat.net(www.freshmeat.net)À» ÀÌ¿ëÇϱâ·Î Çß°í, À̰ÍÀº ¸Å¿ì È¿°ú°¡ ÁÁ¾Ò´Ù. Áö±ÝÀº 50¿©¸í¿¡ À̸£´Â °³¹ßÀÚµéÀÌ NettyÀÇ »õ ¹öÀüÀÌ ¸±¸®ÁîµÉ ¶§¸¶´Ù FreshmeatÀÌ ÀÚµ¿À¸·Î ¹ß¼ÛÇÏ´Â ¸ÞÀÏÀ» ¼ö½ÅÇϰí ÀÖ´Ù.

Áö¼ÓÀûÀÎ ±â´É °³¼±°ú ¸±¸®Áî°¡ °è¼ÓµÇ¸é¼­ Æ÷·³¿¡ Çϳª µÑ Áú¹®ÀÌ ¿Ã¶ó¿À±â ½ÃÀÛÇß´Ù. óÀ½¿¡´Â ¡°Netty¿Í JMS¿ÍÀÇ °ü°è°¡ ¾î¶»°Ô µË´Ï±î?¡±, ¡°ÄÄÆÄÀÏÀÌ ¾ÈµË´Ï´Ù¡±, ¡°¾î¶»°Ô ½ÇÇàÇÏÁÒ?¡± µîÀÇ Áú¹®À̾úÁö¸¸ ±×°Íµµ Àá½Ã¿´´Ù. ±×¸®°í ¾ó¸¶ Áö³ªÁö ¾Ê¾Æ ÇÊÀÚ´Â Ä¿¹Â´ÏƼ°¡ °¡Áø ÈûÀ» ½Ç°¨Çß°í ±× À§·Â¿¡ °¨ÅºÇÒ »ÓÀ̾ú´Ù.

ù°, ¹ö±×¸¦ ÀâÀ¸·Á ¾Ö¾²Áö ¾Ê¾Æµµ ¹ö±× ¸®Æ÷Æ®°¡ µé¾î¿Â´Ù. À̰ÍÀº Netty¸¦ Á¤¸»·Î ¾ÈÁ¤ÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ°Ô ¹Ù²Ù¾î ³õ¾Ò´Ù. 1.0ÀÌ ¸±¸®Áî µÇ¾úÁö¸¸ Á¤¸» ¸¹Àº ¹ö±×¸¦ ³»Æ÷Çϰí ÀÖ¾úÀ½ÀÌ »ç¿ëÀڵ鿡 ÀÇÇØ ¹ß°ßµÇ¾ú´Ù. ¾î¶² »ç¿ëÀÚ´Â ½ÉÁö¾î NettyÀÇ ¼Ò½ºÄڵ带 µð¹ö±×ÇÏ¿© ¾î¶² ºÎºÐÀÌ À߸øµÇ¾ú´ÂÁö¸¦ ÁöÀûÇØ Áְųª, JDK 1.4 Ãʱ⠹öÀüÀÇ ¹ö±×¸¦ µ¹¾Æ°¡´Â ¹æ¹ý(workaround)±îÁö Á¦½ÃÇß´Ù.

µÑ°, »ç¿ëÀÚÀÇ ¿ä±¸(Feature Request)·Î Netty°¡ ¾î¶² ±â´ÉÀÌ ºÎÁ·ÇÑÁö ¾Ë°Ô µÇ¾ú´Ù. ¿¹¸¦ µé¸é ´ÙÀ½°ú °°´Ù.

¡ß UDPÀÇ Áö¿ø

¡ß ¼Óµµ°¡ ´À¸° Ŭ¶óÀ̾ðÆ®ÀÇ Å½Áö

¡ß APIÀÇ °áÇÔÀ̳ª ´©¶ôµÈ ¸Þ½îµå

¡ß »ç¿ëÀÚ°¡ ¹ö±×¸¦ ¸¸µé ¼ö ÀÖ´Â ¹®¼­ÀÇ ¹ÌºñÇÑ ºÎºÐ(FAQ ÀÛ¼º)

ÇÊÀÚ°¡ º¸Áö ¸øÇß´ø °ÍµéÀ» ÇÊÀÚ´Â Ä¿¹Â´ÏƼÀÇ ´«À» ÅëÇØ º¸¾Ò°í, ÀÌ´Â Netty¸¦ Áö¼ÓÀûÀ¸·Î °³¼±½ÃŰ´Â ÈûÀÌ µÇ¾ú´Ù. ±×¸®°í ¹«¾ùº¸´Ùµµ ±× °úÁ¤Àº ³Ê¹«³ª Èï¹ÌÁøÁøÇÏ¿© ¸ÅÀϰ°ÀÌ Netty »ý°¢¸¸ ÇÏ°Ô ¸¸µé¾î¹ö¸± Á¤µµ¿´´Ù. ±×·¸´Ù. ¿ÀǼҽº´Â Áñ°Ì´Ù ¸øÇØ ÇູÇÏ´Ù!

ºñÁî´Ï½º ·ÎÁ÷ 󸮸¦ À§ÇÑ OIL
³×Æ®¿öÅ© Ŭ¶óÀ̾ðÆ®/¼­¹öÀÇ °³¹ßÀº ÀÌÁ¦ NettyÀÇ »ç¿ëÀ¸·Î ¼Õ½¬¿öÁ³´Ù. ÇÊÀÚÀÇ ÇÑ ÇØ´Â ÀÌ·¸°Ô Netty¿Í ÇÔ²² ÇູÇÏ°Ô ³¡³¯ °Í °°¾ÒÁö¸¸ ºñÁî´Ï½º ·ÎÁ÷À» ó¸®ÇÏ´Â ¼­¹ö´Â ¶Ç ´Ù¸¥ ¹«¾ð°¡¸¦ ÇÊ¿ä·Î Çß´Ù. ¹Ù·Î 'ÀÛ¾÷ Å¥'´Ù. ¸¹Àº ¼­¹öµéÀÌ À̸¦ ´Ü¼øÇÑ ¼øÈ¯ Å¥(circular queue)³ª ÆÄÀÏ ±â¹Ý Å¥, ¶Ç´Â °ü°èÇü µ¥ÀÌÅͺ£À̽º¿¡ ÀúÀåÇÑ´Ù. ÇÏÁö¸¸ À̵éÀº ¸ðµÎ ´ÙÀ½°ú °°Àº ¹®Á¦¸¦ °®°í ÀÖ´Ù.

¡ß ¼øÈ¯ Å¥´Â ¸Þ¸ð¸® »ó¿¡¼­¸¸ À¯ÁöµÇ¹Ç·Î ¼­¹ö¸¦ Á¾·áÇÑ µÚ¿¡ À̸¦ º¹±¸ÇÒ ¼ö ¾ø´Ù. ¶ÇÇÑ Å¥ÀÇ ³»¿ëÀ» ƯÁ¤ Ű °ªÀ¸·Î °Ë»öÇÒ ¼ö ¾ø´Ù(¼±Çü ½Ã°£ÀÌ´Ù).

¡ß ÆÄÀÏ ±â¹Ý Å¥´Â ÀûÀýÇÑ Ä³½ÌÀ» ÇÏÁö ¾ÊÀ» °æ¿ì ¼º´É¿¡ ¹®Á¦°¡ ÀÖ´Ù. ¸¶Âù°¡Áö·Î Å¥ÀÇ ³»¿ëÀ» ƯÁ¤ Ű °ªÀ¸·Î °Ë»öÇÒ ¼ö ¾ø´Ù.

¡ß °ü°èÇü µ¥ÀÌÅͺ£À̽º´Â ¸ðµç ¿ä±¸¸¦ ÃæÁ·ÇÏÁö¸¸ ÀÀ´ä ¼Óµµ°¡ ´Ê´Ù.

¼¼ °¡Áö ¼Ö·ç¼ÇÀ» ÇÏÀ̺긮µåÇÏ°Ô »ç¿ëÇÏ¿© È¿°ú¸¦ º¼ ¼öµµ ÀÖ°ÚÁö¸¸ ÀÌ ¸ðµç ¿ä±¸¸¦ ÃæÁ·ÇÏ´Â ¶óÀ̺귯¸®°¡ ÀÖ´Ù¸é ±Ý»ó÷ȭÀ̱⿡ ÇÊÀÚ´Â À̸¦ ¸¸µé°í ¿ÀǼҽº·Î °ø°³Çϱâ·Î ¸¶À½¸Ô¾ú´Ù.

OIL(Objects in a Line)Àº ¿À´Ã³¯ ´ëºÎºÐÀÇ MOM(Message-Oriented Middleware)°¡ äÅÃÇϰí ÀÖ´Â WAL(Write-Ahead Logging) Å×Å©´ÐÀ» ÀÌ¿ëÇÑ Å¥ ¶óÀ̺귯¸®´Ù. WALÀ̶õ µ¥ÀÌÅÍ ±¸Á¶¸¦ ÆÄÀÏ¿¡ ÀúÀåÇÏ´Â ´ë½Å ¸Þ¸ð¸®¿¡ ÀÖ´Â µ¥ÀÌÅÍ¿¡ ´ëÇÑ Á¶ÀÛ µ¿ÀÛÀ» ·Î±×È­ÇÏ¿© ¼øÂ÷ÀûÀ¸·Î ±â·ÏÇÏ´Â ±â¹ýÀ» ¸»ÇÑ´Ù. WALÀ» ÀÌ¿ëÇÑ Å¥´Â ´ÙÀ½°ú °°Àº ÀåÁ¡ÀÌ ÀÖ´Ù.

¡ß µð½ºÅ©ÀÇ ÇÑ ÁöÁ¡¿¡¸¸ ·Î±×¸¦ ¾²°í ÆÄÀÏ ±¸Á¶¸¦ À¯ÁöÇÒ Çʿ䰡 ¾øÀ¸¹Ç·Î µ¥ÀÌÅÍ Á¶ÀÛ ¼º´ÉÀÌ ¿ì¼öÇÏ´Ù.

¡ß ¸ðµç µ¥ÀÌÅͰ¡ ¸Þ¸ð¸®¿¡ ÀûÀçµÇ¹Ç·Î µ¥ÀÌÅÍ Á¶È¸ ¼º´ÉÀÌ ¸Å¿ì ¿ì¼öÇÏ´Ù.

±×·¯³ª ´ÙÀ½°ú °°Àº ´ÜÁ¡µµ ÀÖÀ¸³ª ÇØ°á °¡´ÉÇÏ´Ù.

¡ß ¸ðµç µ¥ÀÌÅͰ¡ ¸Þ¸ð¸®¿¡ ÀûÀçµÇ¹Ç·Î ´ë·®ÀÇ ¸Þ¸ð¸®°¡ ÇÊ¿äÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ¿À´Ã³¯ÀÇ ¸Þ¸ð¸®´Â Àú·ÅÇϹǷΠµ¥ÀÌÅÍÀÇ ¾çÀÌ ¸Å¿ì ¸¹Áö ¾ÊÀº ÀÌ»ó ¾ÈÀüÇÏ´Ù.

¡ß ·Î±× ÆÄÀÏÀÌ ¸Å¿ì Ä¿Áú ¼ö ÀÖ´Ù.  ±×·¯³ª »õº®°ú °°ÀÌ ¼­ºñ½º°¡ ÇѰ¡ÇÑ ½Ã°£´ë¿¡ ·Î±×¸¦ ÀÚµ¿ ÃÖÀûÈ­ (defragment)ÇÒ ¼ö ÀÖ´Ù.

Àε¦½Ì °¡´ÉÇÑ Å¥ÀÇ ±¸Çö
Å¥¿¡ µé¾îÀÖ´Â µ¥ÀÌÅ͸¦ ƯÁ¤ Ű °ªÀ¸·Î °Ë»öÇÏ´Â ±â´ÉÀº ´©±¸³ª ÇÑ ¹øÂë ÇÊ¿ä·Î ÇÏÁö¸¸ ±¸ÇöÇϱⰡ ½±Áö ¾ÊÀº ±â´ÉÀÌ´Ù. ¿¹¸¦ µé¾î Ŭ¶óÀ̾ðÆ®ÀÇ ¿äûÀÌ ÀÛ¾÷ Å¥¿¡ µé¾î¿Í ÀÖµÇ ¾ÆÁ÷ 󸮵ÇÁö ¾Ê¾ÒÀ» °æ¿ì Ŭ¶óÀÌ¾ðÆ®´Â ÇØ´ç ¿äûÀÇ Ã³¸® ÇöȲÀ» ÆÄ¾ÇÇϰí 󸮰¡ Áö³ªÄ¡°Ô ´Ê¾îÁø ¿äû¸¸ ¼±ÅÃÀûÀ¸·Î Ãë¼ÒÇÒ ¼ö ÀÖ´Ù. ÀÌ °úÁ¤¿¡¼­ Å¥ÀÇ ³»¿ëÀ» °Ë»öÇÏ´Â °ÍÀº ÇʼöÀûÀÌ´Ù.

°Ë»öÀ» ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀº µ¥ÀÌÅÍÀÇ À§Ä¡¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖÀ½À» ÀǹÌÇÑ´Ù. ±×·¯³ª ÀϹÝÀûÀÎ ¼øÈ¯ Å¥ ±¸ÇöÀº µ¥ÀÌÅÍÀÇ À§Ä¡ °ªÀÌ Å¥ È®Àå½Ã¸¶´Ù ÀçÁöÁ¤µÇ¹Ç·Î °Ë»öÀÌ ºÒ°¡´ÉÇÏ´Ù. À̸¦ ÇØ°áÇϱâ À§ÇØ <±×¸² 2>ÀÇ ±¸Á¶¸¦ ÅÃÇß´Ù.

<±×¸² 2> OILÀÇ Å¥ ±¸Á¶

<±×¸² 2>¿¡¼­¿Í °°ÀÌ Å¥´Â ¿©·¯ °³ÀÇ extent·Î ±¸¼ºµÇ¾î Àִµ¥, °¢ extentÀÇ ³»ºÎ´Â <±×¸² 3>°ú °°´Ù.

<±×¸² 3> OIL Å¥ ExtentÀÇ ³»ºÎ

ÀÌ ±¸Á¶·Î ¾î¶»°Ô µ¥ÀÌÅÍÀÇ À§Ä¡¸¦ º¯ÇÏÁö ¾Ê°Ô ÇÒ ¼ö ÀÖÀ»±î?  ±× ºñ¹ÐÀº extentÀÇ ID¿Í extent ³»¿¡ À§Ä¡ÇÑ °³Ã¼µéÀÇ ¿ÀÇÁ¼ÂÀÌ º¯ÇÏÁö ¾Ê´Â´Ù´Â µ¥ ÀÖ´Ù. Áï, Å¥°¡ Æ÷ÇÔÇϰí ÀÖ´Â µ¥ÀÌÅÍ Ç׸ñÀÇ À§Ä¡´Â extentÀÇ ID¿Í extent ³»ÀÇ ¿ÀÇÁ¼Â °ªÀ¸·Î ÁöÁ¤ÀÌ °¡´ÉÇÏ´Ù.

ÀÌ¹Ì ¾Ë¾ÆÃ«°ÚÁö¸¸, ÀÌ ¹æ¹ýÀº extent Çϳª°¡ ´ãÀ» °³Ã¼ÀÇ ÃÖ´ë Å©±â¸¦ Á¤ÇØ¾ß ÇÑ´Ù´Â ¹®Á¦°¡ ÀÖ´Ù. Áï extentÀÇ Å©±â°¡ 65536Àε¥ °³Ã¼°¡ ÀüºÎ »èÁ¦µÇ°í ÇÑ °³¸¸ ³²¾Æµµ extentÀÇ Å©±â´Â ¿©ÀüÈ÷ 65536À̱⿡ ÀÌ·¸°Ô µ¥ÀÌÅͰ¡ »ê¹ßÀûÀ¸·Î À§Ä¡ÇÒ °æ¿ì ¸Þ¸ð¸®¿¡ ºÎ´ãÀ» °¡Á®¿Ã ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù.

ÀÌ ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇØ extentÀÇ Å©±â¸¦ ÁÙÀδٸé extentÀÇ ¼ö°¡ ¸¹¾ÆÁö°í, À̸¦ °ü¸®ÇÏ´Â µ¥ µå´Â ºñ¿ëÀÌ Áõ°¡ÇÏ°Ô µÈ´Ù. ±×·¯³ª ÀϹÝÀûÀÎ ¼­¹ö¿¡¼­ ÀÛ¾÷Àº ´ëüÀûÀ¸·Î ¼øÂ÷·Î ÀÌ·ç¾îÁö±â ¶§¹®¿¡ ÀÌ ¹®Á¦´Â ƯÁ¤ °æ¿ì¿¡¸¸ ¿µÇâÀÌ ÀÖ´Ù°í ÇÒ ¼ö ÀÖ°Ú´Ù.

¼º´É Çâ»óÀ» À§ÇÑ ¸öºÎ¸²
¾Æ¹«¸® WALÀ» ÀÌ¿ëÇØ ºü¸¥ ¼º´ÉÀ» º¸ÀåÇÑ´Ù°í ÇØµµ ¼º´ÉÀ» À§ÇÑ ¸öºÎ¸²Àº °è¼ÓµÇ¾ú´Ù. Å¥¸¦ ¿©·¯ °³ »ç¿ëÇÏ´Â ¾ÖÇø®ÄÉÀ̼ÇÀÇ °æ¿ì Å¥¿Í Å¥ »çÀÌÀÇ µ¥ÀÌÅ͸¦ À̵¿ÇÏ´Â ÀÏÀÌ ºó¹øÇÏ´Ù. ¸Þ¸ð¸® »ó¿¡¼­ÀÇ ÀÛ¾÷¸¸ Á¸ÀçÇÑ´Ù¸é À̸¦ pop¿Í push µ¿ÀÛÀ» ¿¬¼Ó½ÃÄÑ ÇØ°áÇϰÚÁö¸¸, WAL¿¡¼­´Â Áß¿äÇÑ ¹®Á¦°¡ µÈ´Ù. Push ·Î±×¿¡ pushÇÒ °³Ã¼¸¦ µð½ºÅ©¿¡ Á÷·ÄÈ­(serialize)ÇØ¾ß Çϱ⠶§¹®ÀÌ´Ù.

ÀÌ ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇØ µµÀÔµÈ °ÍÀÌ ¹Ù·Î 'move' µ¿ÀÛÀÌ´Ù. Áï, ¾î´À À§Ä¡ÀÇ Ç׸ñÀ» ¾î´À Å¥·Î À̵¿Çß´Ù´Â ´Ü¼øÇÑ move ·Î±×¸¸ ³²°Ü ¼º´É Çâ»óÀ» µµ¸ðÇß´Ù. ±×·¯³ª ÀÌ move µ¿ÀÛÀº ÇÊÀÚ¿¡°Ô ¸Å¿ì ½ÉÇÑ ½ºÆ®·¹½º¸¦ °¡Á®¿Ô´Âµ¥, ±× ÀÌÀ¯´Â ÀÌ µ¿ÀÛÀÌ ¸Þ¸ð¸® »ó¿¡¼­´Â ¿©ÀüÈ÷ µÎ °³ÀÇ µ¿ÀÛÀ¸·Î ÀÌ·ç¾îÁ® Àֱ⠶§¹®À̾ú´Ù.

ÃÖÃÊÀÇ ±¸ÇöÀº ´Ü¼øÈ÷ 2°³ÀÇ µ¿±âÈ­(synchronized) ºí·°À» ¿­°í µ¥ÀÌÅ͸¦ ¿Å±â´Â °ÍÀ̾ú´Âµ¥, À̰ÍÀº ±Ý¹æ ¹®Á¦¸¦ °¡Á®¿Ô´Ù. Å¥ A°¡ Å¥ B·Î, Å¥ B°¡ Å¥ A·Î µ¥ÀÌÅ͸¦ ¿Å±æ ¶§ µ¥µå¶ôÀÌ ¹ß»ýÇÏ´Â ¹®Á¦¸¦ °£°úÇ߱⠶§¹®ÀÌ´Ù. ÀÌ ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇØ ¶ô(Lock)ÇÒ °³Ã¼¸¦ hashCode ¼øÀ¸·Î Á¤·ÄÇÏ¿© ¶ôÀ» °Å´Â ¹æ¹ýÀÌ À¯·ÂÇßÀ¸³ª ¶ô °³Ã¼¸¦ µµÀÔÇϱ⿡´Â ¼öÁ¤ÇÒ ºÐ·®ÀÌ ³Ê¹« ¸¹¾Æ Æ÷±âÇÏ¿´´Ù.

µÎ ¹øÂ° ±¸ÇöÀº µ¿±âÈ­ ºí·°À» µ¥µå¶ôÀÌ »ý±âÁö ¾ÊÀ¸¸é¼­ ·Î±×ÀÇ ¼ø¼­°¡ È寮·¯ÁöÁö ¾Êµµ·Ï ±³¹¦ÇÏ°Ô 2°³·Î ³ª´« °ÍÀ̾ú´Ù. À̰ÍÀº óÀ½¿¡´Â Àß µ¿ÀÛÇÏ´Â °ÍÀ¸·Î º¸¿´Áö¸¸ ÃßÀûÀÌ ¸Å¿ì Èûµç µ¿½Ã¼º ¹®Á¦¸¦ °¡Á®¿Ô´Ù. Å¥ÀÇ µ¥ÀÌÅͰ¡ ±úÁöÁö´Â ¾Ê¾ÒÀ¸³ª ·Î±×°¡ ¼ø¼­´ë·Î ±â·ÏµÇÁö ¾Ê¾Æ ¼­¹ö°¡ Àç½ÃÀÛÇÒ ¶§ µ¥ÀÌÅͰ¡ ¼Õ½ÇµÇ¾ú´Ù.

¼¼ ¹øÂ° ½Ãµµ¿¡¼­ ÇÊÀÚ´Â ÀÌ ¹®Á¦¸¦ ±Ùº»ÀûÀ¸·Î ÇØ°áÇϱâ À§ÇØ OILÀ» °ÅÀÇ »õ·Î ÇÁ·Î±×·¡¹ÖÇÒ ¼ö¹Û¿¡ ¾ø¾ú´Ù.  ¸Þ¸ð¸® »ó¿¡¼­ µ¿ÀÛÀ» ¼öÇàÇÏ´Â ºÎºÐ°ú µð½ºÅ©¿¡ ±â·ÏÇÏ´Â ºÎºÐÀ» ¿ÏÀüÈ÷ ºÐ¸®Çϰí ù ±¸Çö¿¡¼­ ¸Á¼³¿´´ø ¶ôÀ» Doug LeaÀÇ Concurrent ¶óÀ̺귯¸® (http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/
concurrent/intro.html
)¸¦ ÀÌ¿ëÇØ Àû±ØÀûÀ¸·Î µµÀÔÇÏ¿´´Ù. ±× °á°ú <±×¸² 4>¿Í °°Àº ÇöÀçÀÇ ±¸ÇöÀÌ ¿Ï¼ºµÇ¾ú°í, ±× °á°ú´Â ³î¶ó¿ü´Ù.

º¹ÀâÇÑ µ¿±âÈ­ ºí·°À¸·Î ¾ôÈù ±âÁ¸ÀÇ ±¸Çöº¸´Ù Äڵ尡 ±ò²ûÇØÁø °ÍÀº ¹°·ÐÀÌ°Å´Ï¿Í 4°³ ÀÌ»óÀÇ CPU¸¦ °¡Áø ½Ã½ºÅÛ¿¡¼­µµ ¸ðµç CPU¸¦ ´Ù »ç¿ëÇÒ ¼ö ÀÖ°Ô µÇ¾ú´Ù. À̸¦ ÅëÇØ ÇÊÀÚ´Â ´ÙÀ½°ú °°Àº Áß¿äÇÑ ±³ÈÆÀ» ¾ò°Ô µÇ¾ú´Ù.

¡ß ÀÚ½ÅÀÌ Á÷Á¢ ±¸ÇöÇÒ ¼ö ÀÖ´Ù ÇÏ´õ¶óµµ °¡´ÉÇÑ ¸ðµç °÷¿¡¼­ Àü¹®È­µÈ ÆÐŰÁöÀÇ »ç¿ëÀ» µÎ·Á¿ö ¸»¶ó.

¡ß º¯È­ÀÇ ¿ä±¸°¡ ³ªÅ¸³¯ ¶§ ¸Á¼³ÀÌ´Â °ÍÀº ´õ ¸¹Àº ¾î·Á¿òÀ» ³º´Â´Ù.

<±×¸² 4> OilDatabase ½ÃÄö½º ´ÙÀ̾î±×·¥

Checked ExceptionÀ̳Ä, Unchecked ExceptionÀ̳Ä
ÀÚ¹ÙÀÇ ¿¹¿Ü´Â checked¿Í unchecked exceptionÀ¸·Î ³ª´¶´Ù. ÀǿܷΠÀÌ ¿ë¾î¿Í Â÷À̸¦ ¸ð¸£´Â °³¹ßÀÚ°¡ ¸¹´Ù.  Checked exceptionÀº IOException°ú °°ÀÌ ¹Ýµå½Ã try-catch ºí·°À¸·Î °¨½Î Àâ¾ÆÁà¾ß ÇÏ´Â ¿¹¿Ü¸¦ ¸»ÇÑ´Ù. unchecked exceptionÀº NullPointerException°ú °°ÀÌ RuntimeExceptionÀ» »ó¼ÓÇÏ¿© try-catch ºí·°À¸·Î °¨½ÎÁö ¾Ê¾Æµµ ¹¬½ÃÀûÀ¸·Î ´øÁ®Áú ¼ö ÀÖ´Â ¿¹¿Ü¸¦ ¸»ÇÑ´Ù. ÀÚ¹ÙÀÇ checked/unchecked exception¿¡ ´ëÇÑ ³íÀÇ´Â ¿À·¡µÈ °ÍÀ¸·Î Burce EckelÀÌ Àß Á¤¸®ÇÑ ´ÙÀ½ URLÀ» Âü°íÇϸé ÁÁÀ» µíÇÏ´Ù.

±×·¸´Ù¸é OilDatabase°¡ ´øÁö´Â OilExceptionÀº ¾îµð¿¡ ¼ÓÇØ¾ß ÇÒ±î? óÀ½¿¡ ÇÊÀÚ´Â JDBC API¸¦ Âü°íÇÏ¿© OilExceptionÀ» checked exceptionÀ¸·Î ÇßÁö¸¸, Å« ¾ÖÇø®ÄÉÀ̼ÇÀ» °³¹ßÇÏ°Ô µÇ¸é¼­ °í¹Î¿¡ ºüÁ³´Ù. ¼­¹ö°¡ ¿äûÀ» ó¸®Çϱâ À§ÇØ Å¥¸¦ ¸Å¿ì ºó¹øÈ÷ »ç¿ëÇÏ´Â Å¿¿¡ ¿©±âÀú±â º¸±â ÈäÇÏ°Ô try-catch ºí·°ÀÌ ´Ã¾î³ª¹ö·È±â ¶§¹®ÀÌ´Ù.

Å¥ÀÇ µ¿ÀÛÀÌ ½ÇÆÐÇÑ´Ù´Â °ÍÀº ¸Å¿ì Ä¡¸íÀûÀÎ ÀÏÀ̹ǷΠOilExceptionÀÌ ¹ß»ýÇÏ°Ô µÇ¸é ¾ÖÇø®ÄÉÀ̼ÇÀº Á¤»óÀûÀÎ µ¿ÀÛÀ» ÇÒ ¼ö ¾ø´Ù. µû¶ó¼­ ´ëºÎºÐÀÇ ¼Ò½ºÄڵ忡¼­ OilExceptionÀÇ catch ºí·°Àº ·Î±×¿¡ ³²±â°í µ¿ÀÛÀ» Á¾·áÇÏ´Â µîÀÇ ´Ü¼øÇÑ Ã³¸®¸¸À» ¼öÇàÇϸ鼭 ¼Ò½º¸¦ º¹ÀâÇÏ°Ô º¸ÀÌ°Ô Çß´Ù.

°á±¹ ÇÊÀÚ´Â Áö±Ý±îÁö °³¹ßµÈ ÄÚµåÀÇ ¼öÁ¤À» °¨¼öÇϸ鼭 OilExceptionÀ» unchecked exceptionÀ¸·Î º¯°æÇß´Ù. ½Ã°£ÀÌ Áö³ªÀÚ ±×°ÍÀº '°¨¼ö'°¡ ¾Æ´Ï¶ó ¿Ã¹Ù¸¥ ¼±ÅÃÀ¸·Î ÆÇ¸íµÇ¾ú´Ù. ¿¹¿Ü ó¸® â±¸´Â ÀÏ¿øÈ­µÇ°í º¸±â ÈäÇÑ try-catch ºí·°Àº ÀüºÎ »ç¶óÁ® ´Ù¸¥ »ç¶÷µéµµ OIL API¸¦ ÁÁ¾ÆÇÏ°Ô µÇ¾ú´Ù.

ASFÀ¸·ÎºÎÅÍÀÇ ¿¬¶ô
OILÀ» Á¤½Ä ¸±¸®ÁîÇϱâ À§ÇØ ¹®¼­È­ ÀÛ¾÷À» ½ÃÀÛÇÏ·Á°í ÇÒ ÁîÀ½, ¶æÇÏÁö ¾ÊÀº ¿¬¶ôÀ» ¹Þ°Ô µÇ¾ú´Ù. ASFÀÇ Directory ÇÁ·ÎÁ§Æ®(incubator.apache.org/directory) Áß LDAP ¼­¹öÀÎ Eve¸¦ ´ã´çÇϰí ÀÖ´Â Alex Karasulu´Â Netty 2 Æ÷·³¿¡¼­ Ȱµ¿Çß´ø Enrique Rodriguez°¡ °³¹ßÇÑ Kerberos ¼­¹ö¿¡ °ü½ÉÀ» °®°í ÀÖ¾ú´Ù.

Alex´Â EnriqueÀÇ Kerberos ¼­¹öÀÇ Directory ÇÁ·ÎÁ§Æ® ÆíÀÔÀ» Èñ¸ÁÇß°í, µû¶ó¼­ ÀÚ½ÅÀÌ ÁøÇàÇØ ¿Â SEDA ÇÁ·ÎÁ§Æ®¿Í ÀüüÀûÀÎ ·Îµå¸ÊÀ» ÇÔ²² ¼³¸íÇß´Ù. Enrique´Â SEDA°¡ ÇÏ´Â ÀÏÀ» Á¦°øÇÏ´Â ÁÁÀº ÇÁ·ÎÁ§Æ®°¡ ÀÌ¹Ì ÀÖ°í, ±×°ÍÀÌ ÀÚ½ÅÀÌ Kerberos ¼­¹ö¸¦ °³¹ßÇϴµ¥ »ç¿ëÇÑ Netty 2¶ó´Â °ÍÀ» ¹àÈù´Ù.

Alex´Â Netty 2ÀÇ ±¸Çö »óÅ¿¡ ¸Å¿ì °ü½ÉÀ» º¸À̸ç, ÇÔ²² Netty 2ÀÇ ±â´É°ú SEDA(Staged Event Driven Architecture)ÀÇ ¾ÆÅ°ÅØÃ³¸¦ È¥ÇÕÇÑ À¯´Ð½ºÀÇ inetd¿Í °°Àº ³×Æ®¿öÅ· Ç÷§ÆûÀ» °³¹ßÇÒ °ÍÀ» Á¦¾ÈÇß´Ù. °¡½¿ µÎ±Ù°Å¸®´Â Á¦¾ÈÀÌ ¾Æ´Ñ°¡! ÇÊÀÚ´Â ¹Ù·Î ½Â³«Çß°í, ±×´Â ÇÊÀÚ¸¦ ASF¿¡ Àû±Ø ÃßõÇÏ¿© Á¤½Ä Ä¿¹ÌÅÍ·Î ¸¸µé¾î ÁÖ¾ú´Ù.

Á¤½Ä Ä¿¹ÌÅͰ¡ µÇ±â À§Çؼ­´Â º¸Åë ÇØ´ç ASF ÇÁ·ÎÁ§Æ®¿¡ ´ëÇÑ ´«¿¡ ¶ç´Â °øÇåÀÌ ÇÊ¿äÇßÁö¸¸ AlexÀÇ µµ¿òÀ¸·Î ¸î °¡Áö °£´ÜÇÑ ÆÐÄ¡¸¦ ¸¸µé°í ¸ÞÀϸµ ¸®½ºÆ®¿¡¼­ Ȱµ¿ÇÑ °Í¸¸À¸·Î PMC ÅõÇ¥¸¦ Åë°úÇß´Ù. Alex´Â ÇѱÛÀ» ¸ð¸£Áö¸¸ ÀÌ ÀÚ¸®¸¦ ºô¾î ±×ÀÇ ²÷ÀÓ¾ø´Â °Ý·Á¿Í Á¶¾ð¿¡ Áø½ÉÀ¸·Î °¨»çÇÏ°í ½Í´Ù.

ÇÊÀÚ´Â Áö±Ýµµ ù ¹øÂ° Ä¿¹ÔÀÇ ¼ø°£À» ÀØÀ» ¼ö°¡ ¾ø´Ù. ASFÀÇ ÀÏ¿øÀÌ µÇ¾î SEDA¶ó´Â TLP(Top Level Project)¸¦ À̲ø°Ô µÉ »ý°¢À» ÇÏ¸é °¡½¿ÀÌ µÎ±Ù°Å¸®´Â °ÍÀÌ´Ù. ÇÏÁö¸¸ ¹«¾ùº¸´Ùµµ ¸ÚÁø ¼ø°£Àº Àü ¼¼°è¿¡ Èð¾îÁø ÇÊÀÚº¸´Ù ÈξÀ ´õ ¸¹Àº °æÇèÀ» °¡Áø ¿©·¯ ºÐ¾ßÀÇ »ç¶÷µé°ú ÇÔ²² ºñÀüÀ» °øÀ¯ÇÏ°í ¼­·Î¿¡°Ô¼­ ¸¹Àº °ÍÀ» ¹è¿ì°í Çùµ¿ÇÏ´Â µ¿½Ã¿¡ ¶Ç °æÀïÇÏ°Ô µÉ ¹Ù·Î Áö±ÝÀÏ °ÍÀÌ´Ù. @

* ÀÌ ±â»ç´Â ZDNet KoreaÀÇ ÀÚ¸ÅÁöÀÎ ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î¿¡ °ÔÀçµÈ ³»¿ëÀÔ´Ï´Ù.
°ü·Ã±â»ç
¿ÀǼҽº DBÀÇ ±Íȯ¡¸¿äÁöºÎµ¿ DB ºò3 ¿òÁ÷Àϱî?¡¹
³»°Ô µü ¸Â´Â SW °³¹ß ÇÁ·¹ÀÓ¿öÅ©, ¾îµð¿¡ ÀÖÀ»±î?
¿ÀǼҽº SI ¾÷ü ½ºÆÄÀÌÅ©¼Ò½º, º£ÀÏÀ» ¹þ´Ù
Åä¹ßÁî°¡ ¹àÈ÷´Â¡¸¿ÀǼҽº ¼Ö¶ó¸®½º¿Í ¸®´ª½º °³¹ß öÇС¹
¿ÀǼҽº, Àü¹æÀ§ Àα⡸¸®´ª½º ³Ñ¾î¼±´Ù¡¹
[¿ÀǼҽº¸¦ ÀÌ¿ëÇÑ ½Ã½ºÅÛ ÅëÇÕ] ¨ç VSSH ÇÁ·¹ÀÓ¿öÅ©
µ¶ÀÚÀÇ°ß ³²±â±â (·Î±×ÀÎ ÈÄ µ¶ÀÚ ÀǰßÀ» ³²±â½Ç ¼ö ÀÖ½À´Ï´Ù.)
¾ÆÀ̵ð ºñ¹Ð¹øÈ£
 
 
[¼öÆÛ°³¹ßÀÚÀÇ ±æ ¨í] Çʼö ¾ÆÀÌ...
[¼öÆÛ°³¹ßÀÚÀÇ ±æ ¨è] ¿ëÀ» ¸¸³ª...
[¼öÆÛ°³¹ßÀÚÀÇ ±æ ¨ç] °¡½¿ÀÇ ²Þ...
[¼öÆÛ°³¹ßÀÚÀÇ ±æ ¨ê] ±âº»±â ¾ø...
[¼öÆÛ°³¹ßÀÚÀÇ ±æ ¨ì] ÇÁ·Î±×·¡¹Ö...
[¼öÆÛ°³¹ßÀÚÀÇ ±æ ¨é] ³ª´®°ú ±³...
[¼öÆÛ°³¹ßÀÚÀÇ ±æ ¨ë] »õ·Î¿î ½Ã...
'ÁÖÃãÁÖÃã ¼Ò´Ï' º¸±ÞÇü Ä·ÄÚ´õ ½ÃÀå »ï¼º ¸Í°ø¡¦À¯Æ©ºê ¸ÂÃãÇü 'VM-MX20C' [00:07:48]
ÁøÇà ·ùÁØ¿µ ±âÀÚ, Á¦ÀÛ À¯È¸Çö PD
[ZDNET ¿µ¹®¹æ¼Û]±¸±Û À¥ºê¶ó¿ìÀú '±¸±Û Å©·Ò' º£Å¸¹öÀü °ø°³ [00:01:29]
Áöµð³ÝÄÚ¸®¾Æ ¿µ»óÁ¦ÀÛÆÀ
¡°À¥ Ç¥ÁØÀº ¹«½¼!¡±¡¦IE8¿¡ ´ë...
°øÀÎÀÎÁõüÁ¦, ¿ì¸®¿¡°Ô ÀÓ¹ÚÇÑ ¹Ì...
³×À̹ö´Â ¿Ö '10´ë ÇØÄ¿'¿¡ ´ç...
[¼öÆÛ°³¹ßÀÚÀÇ ±æ ¨ç] °¡½¿ÀÇ ²Þ...
"¾×ƼºêX¿Í °øÁ¸ ¸ð»ö"¡¦±¸±Û, ...
'À§ÇÇ Àǹ«È­' ÆóÁö ºÐÀ§±â·Î¡¦
EMC-·¹³ëº¸, ¿Â¶óÀÎ µ¥ÀÌÅÍ ¹é...
SK C&C, ¾È»ê½Ã Áö´ÉÇü±³ÅëÁ¤...
Ä«Æä24 ¼îÇθô ÇØ¿Ü¹è¼Û '½ºÇǵå...
Çѱ¹¾îµµºñ, '¾ÖÅ©·Î¹î 9' ÇѱÛ...
LGÀüÀÚ, 8¹é¸¸ È­¼Ò ¸ÖƼ¹Ìµð¾î...
 
 
The Korean edition of 'ZDNet' is published under license from CNET Networks, Inc., San Francisco, CA, USA. Editorial items appearing in 'ZDNet Korea' that were originally published in the US Edition of 'ZDNet', 'CNET', and 'CNET News.com' are the copyright properties of CNET Networks, Inc. or its suppliers.
Copyright ¨Ï 2008 CNET Networks, Inc. All Rights Reserved. 'ZDNet', 'CNET' and 'CNET News.com' are trademarks of CNET Networks, Inc.