· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Dev Workshop


º» ¹®¼­ÀÇ ¹èÆ÷¸¦ ±ÝÇÕ´Ï´Ù. ¹èÆ÷¸¦ ±ÝÇÏ´Â ÀÌÀ¯´Â ¾ÆÁ÷ ¿Ï¼ºµÇÁö ¾Ê¾Ò±â ¶§¹®À̸ç, ¹èÆ÷¼öÁØÀ¸·Î ¿Ï¼ºÀÌ µÇ¸é, ¹®¼­ ¶óÀ̼¾½º¸¦ ÀçÁ¤¸®ÇÏ¿© °øÁöÇÏ°Ú½À´Ï´Ù. ÇöÀç´Â º» »çÀÌÆ®¿¡¼­ ¿­¶÷¸¸ °¡´ÉÇÕ´Ï´Ù.




1. °³¹ß ÆÀ »çÀü Áغñ

1.1. Àåºñ


  • ºôµå ¼­¹ö
  • CVS ÀúÀå¼Ò ¼­¹ö ±×¸®°í ¹é¾÷ ÀúÀåÀåÄ¡
  • °¢ÀÚÀÇ °³¹ß Àåºñ

ºôµå ¼­¹ö¶õ °³¹ßµµÁß Ç¥ÁØ ¹ÙÀ̳ʸ®¸¦ ¸¸µé±âÀ§ÇÑ Ç¥ÁØÀÌ µÇ´Â ¼­¹öÀÔ´Ï´Ù. ÀÌ ¼­¹ö´Â Áö¿ø OSÀÇ ÇÏÀ§ ¹öÀüÀ¸·Î ÇÏ¿© »ý»êµÇ´Â Á¦Ç°ÀÌ ´Ù¾çÇÑ OS¸¦ Áö¿øÇϵµ·ÏÇÕ´Ï´Ù. CVS ÀúÀå¼Ò ¼­¹ö´Â ¹öÀü °ü¸® ¼­¹ö¸¦ ¸»ÇÑ´Ù. cvs ¼­ºñ½º ¹æ¹ýÀ¸·Î pserver ȤÀº ssh ¸¦ »ç¿ëÇϵµ·Ï ±¸¼ºÇÏ¸é µÇ¸ç, CVS ¼³Ä¡¸¦ À§ÇÑ ¹®¼­¸¦ Âü°íÇÏ¿© ¼³Ä¡Çϵµ·ÏÇÕ´Ï´Ù. ¹é¾÷ ÀúÀåÀåÄ¡´Â ´Ù¸¥ Àåºñ¿¡ rsync ȤÀº ÀϺ° tar ¹é¾÷À» ÇÒ ¼ö ÀÖ´Â Àåºñ¸¦ ¸»Çϸç, ´Ù¸¥ Àåºñ°¡ ¿©°ÇÀÌ ¾ÈµÇ¸é µ¿ÀÏ Àåºñ³»¿¡ ´Ù¸¥ ÇÏµå µð½ºÅ©¿¡ ¹Ì·¯¸µÀ» ÇÒ ¼ö ÀÖµµ·Ï ÁغñÇÕ´Ï´Ù. ±×¸®°í °¢ÀÚÀÇ °³¹ß Àåºñ¿¡¼­ ÀÛ¾÷Çϵµ·Ï ÇÏÁö¸¸, Á¤ ¿©°ÇÀÌ ¾ÈµÇ¸é À§ ¼¼ Àåºñ´Â Çϳª°¡ µÉ ¼öµµ ÀÖÀ» °ÍÀÔ´Ï´Ù.

1.2. ¼ÒÇÁÆ® ¿þ¾î


  • cvs (¹öÀü°ü¸® ÇÁ·Î±×·¥, Ŭ¶óÀ̾ðÆ® ¼­¹ö µÑ ´Ù Áö¿ø)
  • viewcvs (web ±â¹Ý cvs repository viewer, ´ë¿ëÀº cvsweb)
  • indent (¼Ò½º beutifier)
  • cvsreport (cvs log reporter)
  • autotools (autoconf, automake, libtool)
  • doxygen (¹®¼­È­ Åø)

óÀ½ ÇÁ·ÎÁ§Æ®¸¦ ½ÃÀÛÇÏ´Â ±×·ìÀ̶ó¸é À̵éÀÇ »ç¿ë¹ýÀ» °¢°¢ ÀÍÇôµÎ±æ ¹Ù¶ø´Ï´Ù.

1.2.1. indent

GNU Tool·Î¼­ [http]http://www.gnu.org/software/indent/indent.html ¿¡¼­ ±¸ÇÕ´Ï´Ù. °¡Àå °£´ÜÇÑ indent ´Â ¼Ò½º¸¦ .indent.pro ¶ó´Â ¿É¼Ç ÆÄÀÏ ¼³Á¤¿¡ µû¶ó µé¿©¾²±â¸¦ ¹Ù²ãÁÖ´Â ÀÏÀ» ÇÕ´Ï´Ù. óÀ½¿¡´Â ¿©°£ ¿É¼ÇµéÀ» ã±â°¡ Èûµé¸ç, ÆÀÀÌ ¿øÇÏ´Â ¸ðµç ±â´ÉÀ» Áö¿øÇÏÁö ¾ÊÀ» ¼ö µµ ÀÖ½À´Ï´Ù. °á°ú¹°ÀÌ ¶Ç ¾î»öÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ ¾à°£ÀÇ ¼ÕÁúÀ» Çؼ­¶óµµ Á¶±Ý Àͼ÷ÇØÁö¸é, ¾ø´Â °Íº¸´Ù ÈξÀ ¼Ò½ºÀÇ ÅëÀÏ°¨À» ÁÝ´Ï´Ù. ÀÌ ÇÁ·Î±×·¥Àº CVSROOTÀÇ commitinfo¿¡¼­ ¿¬µ¿ÇÏ¿© cvs¿¡ ¼Ò½º¸¦ ÀúÀåÇÒ ¶§ °­Á¦·Î µé¿©¾²±â¸¦ ÅëÀÏ ÇÒ ¼ö ÀÖ°Ô ÇÕ´Ï´Ù.

1.2.2. doxygen

[http]http://www.stack.nl/~dimitri/doxygen/ ¿¡¼­ ±¸ÇÕ´Ï´Ù. °³¹ßÀÚÁß¿¡ ÁÖ¼® °ü¸® ´ã´çÀÚ¸¦ ÇÑ ¸í ¼±Á¤Çϵµ·ÏÇÏ¿© doxygenÀ» ÀÍÈ÷µµ·ÏÇÏ°í, ÀÌ »ç¶÷Àº ³ªÁß¿¡ ÃÖÁ¾ ¹®¼­ »êÃâ¹°À» °ü¸®ÇÏ´Â ¿ªÇÒÀ» ÇÏ¸ç ´Ù¸¥ »ç¶÷µé¿¡°Ô ±³À°À» ÇÏ¿© ÁÖ¼®À» Àß ´Þ ¼ö ÀÖµµ·Ï °í¹®°ü¿ªÇÒÀ» ¸Ã±é´Ï´Ù. ´Ù¸¥ °³¹ßÀÚµéÀº doxygenÀÇ ÁÖ¼® ±ÔÄ¢À» ÀÍÈ÷µµ·Ï ÇؾßÇÕ´Ï´Ù. doxygenÀÌ º»ÀÎÀÌ ÀÌ¿ëÇØ º» °ø°³ Åø Áß¿¡¼­´Â °¡Àå ³ªÀº Ãâ·ÂÀ» º¸¿©Áá½À´Ï´Ù. ¼Ò½º ÁÖ¼®Àº ÆÀ¿¡¼­ Á¤ÇÏ´Â °Íµµ ÁÁÁö¸¸, doxygenÀÌ ¾Ë¾Æ µéÀ» ¼ö ÀÖµµ·Ï ´Ù´Â °ÍÀÌ ÁÁ½À´Ï´Ù. doxygenÀÇ ±Ô¾à¿¡ ¸ÂÃßµµ·ÏÇϽʽÿÀ. ±×·¯¸é, ³ªÁß¿¡ Æí¸®ÇÑ API ¹®¼­¸¦ ¾òÀ» ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù.

1.2.3. cvs

[http]http://www.cvshome.org/ ¿¡¼­ ±¸ÇÕ´Ï´Ù. cvs´Â óÀ½ °³³äÀÌ ¾î·Á¿öµµ ¹®¼­°¡ ¸¹ÀÌ ÀÖÀ¸¹Ç·Î ÀÏ´Ü µû¶ó ¼³Ä¡Çغ¾´Ï´Ù. cvs Á¢¼ÓÀÌ firewall ¾È¿¡¼­ switching hub¿¡ ¹°·Á ÀÛ¾÷ÇÏ´Â ±×·ìÀ̶ó¸é ±»ÀÌ ext ¸ðµâ·Î ssh ¸¦ »ç¿ëÇÏÁö ¾Ê¾Æµµ ¹«¹æÇÕ´Ï´Ù. pserver´Â °£°áÇÏ¸ç ³ª¸§´ë·Î ºü¸¥ ÀåÁ¡ÀÌ ÀÖ½À´Ï´Ù.

1.2.4. viewcvs

[http]http://viewcvs.sourceforge.net/ ¿¡¼­ ±¸ÇÕ´Ï´Ù. ÇÊÀÚ´Â cvsweb º¸´Ù python±â¹ÝÀÇ viewcvs¸¦ ¼±È£Çϴµ¥, ±×°ÍÀº viewcvs¿¡ ÀÖ´Â enscript¿Í cvsgraph ¶ó´Â µÎ°¡Áö È®ÀåÀ» ÅëÇؼ­ syntax coloring, revision tree ¸¦ º¸¿©Áֱ⠶§¹®ÀÔ´Ï´Ù. ÀÌ·± cvs viewer¸¦ ¼³Ä¡ÇÏ¿© °øµ¿ÀÛ¾÷ÇÏ´Â °æ¿ì´Â ¸¹Àº È®À强À» °¡Á®´ÙÁÝ´Ï´Ù.

1.2.5. cvsreport

[http]http://cvs.kldp.net/viewcvs/hserver/CVSROOT/cvsreport ¿¡¼­ ±¸ÇÕ´Ï´Ù. cvs log¸¦ ¸ÞÀÏ·Î ¾Ë·ÁÁÖ´Â ±â´ÉÀ» Çϴµ¥, ¹Ù²î´Â ¼Ò½ºÀÇ viewcvs·Î ¿¬µ¿ÇÏ¿© diff URLÀ» º¸³»ÁÝ´Ï´Ù. ÀÌ°ÍÀº °ü¸®ÀÚ·Î ÇÏ¿©±Ý ´ëÃæÀ̳ª¸¶ º¯°æ³»¿ëÀ» ¾Ë ¼ö ÀÖµµ·Ï µµ¿ÍÁÝ´Ï´Ù.

1.2.6. autotools

automake °¡ °¡Á®´Ù ÁÖ´Â make frameworkÀ» ÀÌÇØÇؾßÇÕ´Ï´Ù. automake ´Â

  • make all
  • make check
  • make dist
  • make install / uninstall
µîÀ» ÀÌ¿ëÇÏ¿© recursive build, recursive test, ¹èÆ÷ tar ball ¸¸µé±â, install, uninstallÀ» Á¦°øÇÕ´Ï´Ù. ÀÌ·± ±â´ÉÀ» Àͼ÷ÇÏ°Ô »ç¿ëÇϴµ¥ ¾à µÎ ´ÞÁ¤µµÀÇ ½Ã°£ÀÌ ¼Ò¿äµÇÁö¸¸, Àγ»¸¦ °®°í Àͼ÷ÇØÁö´Ùº¸¸é, ¼Ò½º°¡ Á¡Á¡ º¹ÀâÇØÁú ¶§ ƲÀ» °¡Áö°í ¼ºÀåÇÏ´Â ¸ð½ÀÀ» º¼ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù.

¿©±â±îÁö ÁغñÇϴµ¥ µé¾î°¡´Â ½Ã°£ ¾à 2~3ÀÏ ÀÔ´Ï´Ù.

2. °³¹ß ȯ°æ

2.1. °³¹ß ÆÀ »çÀü °øÀ¯ »çÇ×

2.1.1. ¼³Ä¡/»èÁ¦

ÆÐÅ°Áö¸¦ ¸¸µé »ý°¢À̸é, rpm, ¼± package, HPUX depot µî¿¡¼­ Á¦°øÇÏ´Â ¼³Ä¡ »èÁ¦¸¦ ÃßõÇÕ´Ï´Ù. ±×·¸Áö¸¸ °£´ÜÇÏ°Ô ÇÒ »ý°¢À̸é, make install ÀÌ Á¦°øÇÏ´Â °Íµµ ÇϳªÀÇ ¹æ¹ýÀ̸ç, ÀÌ´Â ¼Ò½º¸¦ ¼ö¹ÝÇϹǷΠ°£´ÜÇÑ installer/uninstaller¸¦ ¸¸µé¾î µÎ´Â °ÍÀÌ ÁÁ½À´Ï´Ù. ¼³Ä¡/»èÁ¦ ÇÁ·Î±×·¥ÀÌ °¡Àå ¸ÕÀú ¸¸µé ¸ðµâÀÔ´Ï´Ù. À̰ͺÎÅÍ ÇÏÁö ¾ÊÀ¸¸é ³ªÁß¿¡ µÎ ¹è·Î Èûµé °ÍÀÔ´Ï´Ù. ±× ÀÌÀ¯´Â °³¹ß°ú Å×½ºÆ®¸¦ ºÐ¸®ÇÏ´Â °úÁ¤¿¡¼­ Å×½ºÅÍ¿¡°Ô Àü´ÞµÉ ¸ð½ÀÀÌ ¹ÙÀ̳ʸ® ´ÜÀ§·Î ³Ñ¾î°¡¸é Àý´ë ¾ÈµÇ´Â °ÍÀÌ°í, ÀνºÅ纻À¸·Î ³Ñ±â°í ÀνºÅ纻¿¡´ëÇÑ Å×½ºÆ®°¡ ÀÌ·ç¾îÁ®¾ßÇϱ⠶§¹®ÀÔ´Ï´Ù.

¼³Ä¡ »èÁ¦¸¦ ½ºÅ©¸³Æ®·Î ¸¸µç´Ù¸é, ´ÙÀ½°ú °°Àº °ÍÀ» ÁغñÇϼ¼¿ä.

  • ÆÄÀϸí°ú ¼Ó¼º, ¼ÒÀ¯±ÇÇÑ, MD5SUM °ªÀÌ µé¾îÀÖ´Â ¸®½ºÆ® ÆÄÀÏ
  • ¼³Ä¡´Â º¹»çÈÄ ¼ÒÀ¯±ÇÀ» ¹Ù²Ùµµ·ÏÇÕ´Ï´Ù.
  • »èÁ¦½Ã¿¡´Â MD5 °ªÀÌ ¹Ù²îÁö ¾ÊÀº °Íµé¸¸ »èÁ¦Çϰųª ¾Æ´Ï¸é °­Á¦ »èÁ¦ÇÏ´Â ¹æÇâÀ¸·Î ÇÕ´Ï´Ù.

2.1.2. ·Î±× Æ÷¸Ë

´ÙÀ½À¸·Î Áß¿äÇÑ °ÍÀÌ ·Î±× Æ÷¸ËÀ» °áÁ¤ÇÏ´Â °ÍÀÔ´Ï´Ù. ÀÌ´Â syslog¸¦ ¾µ ¼öµµ ÀÖ°í, ·Î±×ÆÄÀÏÀ» µÑ ¼öµµ ÀÖ½À´Ï´Ù. ¶ÇÇÑ ·Î±× ·¹º§À» µÑ ¼öµµ ÀÖ°í, ·Î±× º° ¾ÆÀ̵𸦠µÑ ¼öµµ ÀÖ½À´Ï´Ù. ¾î·µç ÀÌ ·Î±×¸¦ ³²±â´Â °øÅë API¸¦ ¸ÕÀú ¸¸µå½Ê½Ã¿À. ´ÙÀ½°ú °°Àº °ÍÀ¸·Î ¿ä¾àÇÒ ¼ö ÀÖ½À´Ï´Ù.

  • ·Î±× On/Off
  • ·Î±× ÆÄÀÏ¸í ±ÔÄ¢ - ÀϺ°, Å©±âº°
  • ·Î±× ÆÄÀϳ» Æ÷¸Ë
  • ·Î±× ·¹º§º° Ãâ·Â Á¶Àý

2.1.3. ±¸¼ºÈ­ÀÏ Æ÷¸Ë

ÀϹÝÀûÀ¸·Î ±¸¼ºÈ­ÀÏÀº ÀüÅëÀûÀ¸·Î Unix Çü½ÄÀ̶ó¸é Text ÆÄÀÏÀÔ´Ï´Ù. À©µµ¿ì¿¡´Â ini ÆÄÀÏÇüÅ°¡ ¾²ÀÌ´Ù°¡ ·¹Áö½ºÆ®¸®·Î ¹Ù²î¾úÁö¿ä. ÀÌ Æ÷¸ËÀ» °øÅëÀ¸·Î µÎ¾î ¸¸µç´Ù¸é ¿©·¯ ¸ðµâ¿¡¼­ »ç¿ëÇÒ °ÍÀÌ¸ç °³¹ßÆÀÀÇ ÀÚ»êÀÌ µÉ ¼ö ÀÖ½À´Ï´Ù.

  • Å°´Â Áߺ¹ °¡´ÉÇÑ°¡?
  • °ªÀº ¿©·¯ÇàÀ¸·Î ¸¸µé ¼ö ÀÖ³ª?
  • Å°¿Í °ªÀÇ ±¸ºÐÀÚ´Â °ø¹é, :, = Áß ¾î¶² °ÍÀ¸·Î ÇÒ °ÍÀΰ¡?
  • µû¿ÈÇ¥¸¦ Áö¿øÇÒ °ÍÀΰ¡?

2.1.4. ¸í·ÉÇà Æļ­

°¡Àå ÈçÈ÷ getopt¸¦ »ç¿ëÇÕ´Ï´Ù. À̸¦ ±â¹ÝÀ¸·Î ¸ðµç ¸ðµâÀÌ °øÅëÀûÀ¸·Î ó¸®ÇÒ ¼ö ÀÖ´Â ¿É¼Çµé¿¡ ´ëÇØ ±âº»ÀûÀ¸·Î ÆĽÌÇÏ¿© ó¸®ÇÒ ¼ö ÀÖ¾î¾ßÇÕ´Ï´Ù.

2.1.5. PID file

ÇÁ·Î¼¼½º ¾ÆÀ̵ð ÆÄÀÏÀ» °øÅëÀ¸·Î »ç¿ëÇÏ¿© ½ÇÇàÇÏ´Â µ¥¸óÀÌ ÀÚµ¿À¸·Î ±â·ÏÇÒ ¼ö ÀÖµµ·ÏÁö¿øÇÕ´Ï´Ù. ÀÌ´Â ÇöÀç ½ÇÇà ÁßÀÎ µ¥¸óÀÇ PID¸¦ ¾ò´Âµ¥ »ç¿ëµÇ´Â ºñ¿ëÀ» ÁÙÀÌ°íÀÚ »ç¿ëÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù. ÇÁ·Î¼¼½º ½ÇÇà/Á¾·á/Àç½ÇÇà¿¡ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù.

¿©±â±îÁö°¡ ¸ðµç ÇÁ·ÎÁ§Æ®°¡ °øÅëÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Â ±âº»ÀûÀΠȯ°æÀÔ´Ï´Ù. ÀÌ¹Ì Á¤¸®µÇ¾î ÀÖ°í ÆÀÀÇ ¹®È­·Î ¸¸µé¾î ÀÖ´Ù¸é, ´ÙÀ½ ÇÁ·ÎÁ§Æ®¸¦ ½ÃÀÛÇϴµ¥ µµ¿òÀÌ ¸¹ÀÌ µÉ °ÍÀÔ´Ï´Ù.

2.2. °³¹ß ÀýÂ÷ ¼Â¾÷


ÀÌ ¹®¼­¿¡¼­ ´Ù·çÁö ¾Ê´Â °ÍÀº »êÃâ¹° ¸®½ºÆ®ÀÔ´Ï´Ù. ¿¹¸¦ µé¸é, »ç¾ç¼­, ¼³°è¼­, DFD, ERD, API, UI Guide µîÀÔ´Ï´Ù. ±×·± ¹®¼­µéÀº ÀûÀýÇÏ°Ô °ü¸®µÇ¾î¾ßÇÏ¸ç ¿ö³« °­Á¶ÇϹǷΠµû·Î ´õ °­Á¶ÇÏÁö ¾Ê½À´Ï´Ù.

2.2.1. Coding Rule

ÄÚµù ±ÔÄ¢Àº µÎ Á¾·ù·Î ³ª´¹´Ï´Ù. Çϳª´Â ÀÚµ¿À¸·Î ½ºÅ¸ÀÏÀ» ¹Ù²Ü ¼ö ÀÖ´Â °Í Çϳª´Â Èûµé¿© ÄÚµù°¡À̵带 µû¶ó¾ß¸¸ÇÏ´Â °ÍÀÔ´Ï´Ù. ÄÚµù ±ÔÄ¢Àº ³Ê¹«³ª °³ÀÎ ÀûÀÎ ¼ºÇâÀÌ °­ÇÏ°Ô ³ªÅ¸³ª¹Ç·Î ÆÀÀÌ °³¹ß ÇÒ °æ¿ì¿¡ °É¸²µ¹ÀÌ µÉ ¼ö ÀÖ½À´Ï´Ù. ´ë°³ ÄÚµù °¡À̵å´Â

  • À̸§(ÆÄÀÏ, ÇÔ¼ö, Ŭ·¡½º)À» ¾î¶»°Ô Á¤ÇÒ °ÍÀΰ¡?
  • ÁÖ¼®À» ¾î¶»°Ô ´Þ °ÍÀΰ¡?
  • °ýÈ£ÀÇ À§Ä¡´Â ¾î¶»°Ô ÇÒ °ÍÀΰ¡?
  • µé¿©¾²±â´Â ¾î¶»°Ô ÇÒ °ÍÀΰ¡?
(TODO: ¾Æ¹«³ª ´õ Ãß°¡°¡´É)

µîÀÇ Ä¿´Ù¶õ ÁÖÁ¦·Î ³ª´¹´Ï´Ù. ±×Áß¿¡¼­ ÀÚµ¿È­ Çϰųª ±ÔÄ¢À» ¾î°å´ÂÁö¸¦ Å×½ºÆ®ÇÏ¿© °æ°í¸¦ ÁÙ ¼ö ¾ø´Ù¸é, ÄÚµå ¸®ºä¸¦ ÇϱâÀü±îÁö´Â ¾Ë ¼ö°¡ ¾ø½À´Ï´Ù. °ú°Å¿¡´Â ÄÚµù ±ÔÄ¢¸¸ Á¤Çسõ°í µû¸£Áö ¾Ê´Â °æ¿ì°¡ Çã´ÙÇß½À´Ï´Ù. ½À°ü°ú °ü°èµÇ¾ú±â ¶§¹®ÀÔ´Ï´Ù. ÇÏÁö¸¸ ¿äÁò¿¡´Â code beautifier°¡ ¸¹±â ¶§¹®¿¡ ¸¶À½´ë·Î ÀÛ¼ºÇÏ°í ÄÚµù ±ÔÄ¢¿¡ ¸Â´Â optionÀ» ¼±ÅÃÇÏ¿© code beautifier¸¦ µ¹·ÁÁÖ¸é µË´Ï´Ù.

±¸±Û·Î code beautifier ȤÀº source beautifier ·Î °Ë»öÇÏ¸é »ó´çÈ÷ ¸¹Àº °Ë»öÀ» ¾òÀ» ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù. Á¦°¡ Áñ°Ü¾²´Â °ÍÀº GNUÀÇ indentÀÔ´Ï´Ù. indent ÀÚü¿¡´Â GNU style°ú BSD style·Î ¸ÂÃçÁÖµµ·Ï ÇÏ´Â ¿É¼ÇÀÌ À־, ¸¹Àº GNU toolÀ̳ª BSD toolµéÀÌ ÀÌ·± À¯Æ¿¸®Æ¼ÀÇ »êÃâ¹° ÇüÅ·Πµî·ÏµÇ´Â °ÍÀ» º¼ ¼ö ÀÖ½À´Ï´Ù.

ÄÚµù ±ÔÄ¢¿¡´Â ÆÄÀÏ À̸§ Á¤ÇÏ´Â °ÍÀ̳ª ÇÔ¼ö À̸§, º¯¼ö À̸§µîÀ» °áÁ¤ÇÏ´Â °ÍÀÌ µû¶ó °©´Ï´Ù. ÀÌµé ¶ÇÇÑ ctags -x ¸¦ »ç¿ëÇϸé ÇÔ¼ö¿Í º¯¼öº°·Î Á¤ÀÇµÈ À§Ä¡¸¦ ÆľÇÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇÔ¼ö,º¯¼ö À̸§ ±ÔÄ¢Àº ¹Ýµå½Ã Á¤±ÔÇ¥Çö½ÄÀ¸·Î °áÁ¤ÇÒ ¼ö ÀÖ¾î¾ßÇÏ°í, ctags -x ÀÇ Ãâ·Â¹°À» Á¤±ÔÇ¥Çö½ÄÀ¸·Î ÇϳªÇϳª Á¶»çÇÏ¿© ±ÔÄ¢ À§¹Ý ¿©ºÎ¸¦ ¸®Æ÷ÆÃÇÏ´Â °Íµµ ÄÚµù ±ÔÄ¢ÀÌ ¹®¼­·Î¸¸ Á¸ÀçÇÏ´Â °ÍÀ» ¸·¾Æ ÁÖ°Ô µË´Ï´Ù.

2.2.2. ¹®¼­È­ Åø

¹®¼­È­ ÅøÀ» ¼±ÅÃÇÏ´Â °ÍÀº ÁÖ¼®À» ¾î¶»°Ô ó¸®ÇÒ °ÍÀÌ³Ä¿Í ¹ÐÁ¢ÇÑ ¿¬°ü¼ºÀÌ ÀÖ½À´Ï´Ù. ÀÚµ¿À¸·Î ¹®¼­È­¸¦ ÇÑ´Ù´Â °ÍÀº, ÄÚµå·ÎºÎÅÍ ÁÖ¼®À» ÃßÃâÇÏ°í À̸¦ ¹ÙÅÁÀ¸·Î call-graph, class »ó¼Ó°ü°è, api ¼³¸í¼­ µîÀ» ¸¸µé ¼ö Àֱ⠶§¹®ÀÔ´Ï´Ù. ÁÖ¼®À» ÀÏÀÏÀÌ ´Ù´Â ÄÚµù ±ÔÄ¢À» ¸¸µå´Â °Íº¸´Ù ¹®¼­È­ ÅøÀ» Á¤ÇÏ°í ÀÌ ÅøÀÌ ¿ä±¸ÇÏ´Â ´ë·Î ÀÛ¼ºÇϵµ·ÏÇÏ´Â °ÍÀÌ ÀÌÁßÀÇ ¼ö°í¸¦ ¸·½À´Ï´Ù. ÁÖ¼®µû·Î ¹®¼­µû·Îº¸´Ù´Â ¾î´ÀÁ¤µµ °øÀ¯Çϵµ·Ï ¸¸µå´Â °ÍÀÌ ÁÁ½À´Ï´Ù.

¿©·¯ ¹®¼­ÅøÀÌ Á¸ÀçÇÕ´Ï´Ù. automatic documentation tools µîÀ¸·Î °Ë»öÇغ¸½Ã±â ¹Ù¶ø´Ï´Ù. ¹®¼­È­ ÅøÀ» ´Ù¸¥ ¿ëµµ·Î ÀÌ¿ëÇÏ´Â ¹æ¹ýÀº ¹®¼­È­ ÅøÀÌ ÇÊ¿äÇÑ ÁÖ¼®ÀÌ ¾ø´Â °ÍÀ» warningÀ¸·Î ó¸®ÇØÁÙ ¶§, °³¹ßÀڵ鿡°Ô ÇÊ¿äÇÑ ÁÖ¼®À» ´Þµµ·Ï Áö½ÃÇÒ ¼ö ÀÖ´Â ±Ù°Å°¡ µÉ ¼ö ÀÖ½À´Ï´Ù. Áï, °³¹ß ÆÀÀÇ ´ëÈ­¸¦ ÅøÀ» »ç¿ëÇؼ­ ÇÏ´Â °ÍÀ¸·Î ÇؾßÁö Äڵ带 º¸¸é º¼ ¼ö·Ï ã¾Æ³»°Ô µÇ´Â ¹æ¹ýÀ¸·Î ÇÏ¸é »ý»ê¼ºÀÌ ÀúÇϵȴٴ °ÍÀÔ´Ï´Ù.

2.2.3. ÄÚµå Skeleton

ÄÚµåÀÇ TemplateÀ» ÁغñÇÏ´Â °ÍÀº °£´ÜÇÑ ÀÏÀÌÁö¸¸, Äڵ尡 ¸¹¾ÆÁö¸é ¸¹¾ÆÁú ¼ö·Ï ÀÏÁ¾ÀÇ Ã¼°è¸¦ Áֱ⠶§¹®¿¡ ÁÁ½À´Ï´Ù. ƯÈ÷³ª vim, emacs µî¿¡¼­ Á¦°øÇÏ´Â skeleton À» ÀÌ¿ëÇÑ »õ ÆÄÀÏ ÀÛ¼º¹æ¹ýÀº Äڵ带 Çϳª ¸¸µé ¶§ ¾ÆÁÖ À¯¿ëÇÕ´Ï´Ù. Àú´Â vimÀ» ÁÖ·Î »ç¿ëÇϹǷΠvim pluginÀ» ¼Ò°³ÇÏÀÚ¸é,


ÆÄÀÏÀ» skel.c, skel.h µîÀ¸·Î ÁغñÇØµÎ¸é »õ·Î¿î ÆÄÀÏÀ» ¸¸µé ¶§ ÀÚµ¿À¸·Î Àоî¿À°Ô µË´Ï´Ù. ÀÌ·± skeletonÀÌ Á¦°øÇÏ´Â °ÍÀº Å©°Ô ¶óÀ̼¾½º Á¶Ç×, Æ÷ÇÔ Çì´õ, Àü¿ª º¯¼ö ¼±¾ðºÎ, ŸÀÔ, ¸ÅÅ©·Î ¼±¾ðºÎ, Àü¿ª º¯¼ö ¼±¾ðºÎ, export ÇÔ¼ö ¼±¾ðºÎ, static ÇÔ¼ö Àü¹æ ¼±¾ðºÎ µîÀÌ ÀÖ½À´Ï´Ù. ÀÌ·± ¼±¾ðºÎµéÀ» ¿©·¯ÁÙÀÇ ÁÖ¼®À¸·Î °­Á¶ÇÏ´Â °Íµµ ÇÑ ¹æ¹ýÀÔ´Ï´Ù.

±×¸®°í, Áß¿äÇÑ °ÍÀº cvs ¸¦ »ç¿ëÇÒ °æ¿ì ÆÄÀÏ ¾ÆÀ̵𸦠³Ö¾î ÁÖ´Â °ÍÀÔ´Ï´Ù. ÀÌ°ÍÀº cvs ÀÇ keyword ġȯÀ» ÅëÇØ ÀϾ¸ç, .h ÆÄÀÏ°ú .c ÆÄÀÏÀÌ ¾à°£ ´Ù¸¨´Ï´Ù.

header ¿¡¼­´Â

/* $Id: DevWorkshop,v 1.3 2012/04/04 01:57:34 kss Exp kss $ */


.c ¿¡¼­´Â

static char id[] = "$Id: DevWorkshop,v 1.3 2012/04/04 01:57:34 kss Exp kss $";


GCC ¸¸ ¾µ °ÍÀ̶ó¸é,

static char id[] __attribute__((unused)) = "$Id: DevWorkshop,v 1.3 2012/04/04 01:57:34 kss Exp kss $";


µîÀ¸·Î Ç¥½Ã ÇصӴϴÙ. ÀÌ·¸°Ô Ç¥½ÃÇÔÀ¸·Î¼­ cvs server´Â commit µÇ¾î¿À´Â ÆÄÀÏ¿¡¼­ $Id: $ ºÎºÐÀ» ³¯Â¥, ID, Revision µîÀ» ¼¯¾î¼­ Àû´çÈ÷ Ç¥ÇöÇØÁÝ´Ï´Ù. ÀÚ¼¼ÇÑ °ÍÀº cvs keyword ·Î °Ë»öÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù. ±×¸®°í, .c ÆÄÀÏ¿¡¼­ static ¹®ÀÚ¿­·Î ÁÖ´Â ÀÌÀ¯´Â ³ªÁß¿¡ »ý±ä ¹ÙÀ̳ʸ®¸¦ ident ¶ó´Â ¸í·ÉÀ¸·Î È®ÀÎÇغ¸¸é ¾î¶² ¼Ò½º°¡µé¾î °¬´ÂÁö¸¦ È®ÀÎÇØ º¼ ¼ö Àֱ⠶§¹®¿¡ µð¹ö±ë ÈùÆ®¸¦ ÁÙ ¼ö ÀÖ½À´Ï´Ù. ident´Â indent¿Í È¥µ¿ÇÏÁö ¸¶½Ã±â ¹Ù¶ø´Ï´Ù.

skeleton ¸¶Áö¸·¿¡

/*
   $Log: DevWorkshop,v $
   Revision 1.3  2012/04/04 01:57:34  kss
   113.160.52.170;;xvip87;;

   Revision 1.2  2004/12/04 12:17:45  kss
   61.74.173.192;;infiniterun;;

   Revision 1.1  2004/12/04 12:17:04  kss
   61.74.173.192;;infiniterun;;


 */


¸¦ µÒÀ¸·Î½á, cvs commit ¸Þ½ÃÁö¸¦ ¼Ò½º¿¡ °è¼Ó Ãß°¡ ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. µû¶ó¼­ cvs¸¦ Àß È°¿ëÇϸé, ¼Ò½º º¯°æ¿¡ ´ëÇÑ °ÍÀ» µû·Î °ü¸®ÇÏÁö ¾Ê¾Æµµ cvs°¡ ÀÚµ¿À¸·Î ġȯÇØÁÖ°Ô µË´Ï´Ù. Log ´Â ÁÖÀÇÇؼ­ »ç¿ëÇؾßÇÏ´Â °ÍÀº merge¿Í °ü·ÃÇÑ ¹®Á¦ ¶§¹®¿¡ ¼Ò½º ¸¶Áö¸·¿¡ µÑ °ÍÀ» ±ÇÀåÇÏ°í ÀÖ½À´Ï´Ù.

2.3. °³¹ß ½ºÅ¸ÀÏ

2.3.1. Å×½ºÆ®¸¦ À§ÇÑ ±¸Á¶

¸ðµâÈ­¸¦ ÇÏ´Â ¸ñÀûÀº ±× ¸ðµâÀÇ Àç»ç¿ë¼º¿¡ ÀÖ½À´Ï´Ù. ÀûÀýÇÑ ¸ðµâÈ­¸¦ ÅëÇØ ¾òÀ» ¼ö Àִµ¥, ¾î¶² °æ¿ì´Â Áö³ªÄ£ ¸ðµâÈ­ ¶Ç´Â ¾Ö¸ÅÇÑ ¸ðµâÈ­ ¶§¹®¿¡ ¸ðµâÈ­ÀÇ Àǵµ°¡ Èå·ÁÁö´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù. ÀÌ·± °æ¿ì¸¦ ´ëºñÇؼ­ »çÀü¿¡ »ý°¢ÇؾßÇÒ °ÍÀº ¾î¶»°Ô Å×½ºÆ®¸¦ À§ÇÑ ¸ðµâÈ­¸¦ ´Ã ¿°µÎ¿¡ µÎ¶ó´Â °ÍÀÔ´Ï´Ù. ±×·¸°Ô µÇ¸é º¸´Ù ÀûÀýÇÑ ¸ðµâ ±¸ºÐÀÌ »ý±é´Ï´Ù.

2.3.2. Real main, Test main

´ÙÀ½°ú °°Àº ÄÚµåµéÀÌ ÀÖ´Ù°í ÇսôÙ.

file.c
-----

int file_send( const char * host, int port, const char * file )
{
    ....
}

int file_recv( char * buf, int size )
{
    ....
}

comm.c
------
#include "file.h"

void setup()
{
}

int main( int argc, char * argv[] )
{
    char buf[1024];
    setup();
    file_send( "localhost", 1122, "test.txt" );
    file_recv( buf, sizeof buf );
}

test_comm.c
-----------
#include "file.h"

void test_file_recv()
{
    assert(...);
}

void test_file_send()
{
    assert(...);
}

int main( int argc, char * argv[] )
{
    test_file_send();
    test_file_recv();
}



À§ Äڵ带 ´ë·« ÀÐ°Ô µÇ¸é, file.c ¶ó´Â ¸ðµâ(?)ÀÌ Çϳª ÀÖ°í, ¿©±â¿¡ ÀÖ´Â ÇÔ¼ö¸¦ ½ÇÁ¦ ÀÌ¿ëÇÏ´Â comm.c ¶ó´Â main ÇÔ¼ö ¸ðµâ°ú test_comm.c ¶ó´Â Å×½ºÆ®¿ë ¸ðµâÀÌ ÀÖÀ½À» ¾Ë ¼ö ÀÖ½À´Ï´Ù. ¾Æ¸¶µµ comm À̶ó´Â À¯Æ¿¸®Æ¼ÀÇ ÀϺÎÀÏ °Í °°°í, ±× main ÇÔ¼ö´Â comm.c¿¡ ÀÖ´Â °ÍÀε¥, ÀÌ·¸°Ô ºÐ¸®ÇÏ´Â °ÍÀº, file.cÀÇ ³»¿ëÀ» comm.c ¿¡ ³õÀ» ¼öµµ ÀÖ½À´Ï´Ù¸¸, ±×·¸°Ô ÇÏÁö ¾Ê°í ºÐ¸®Çß½À´Ï´Ù. ȤÀÚ´Â comm.c ¿¡ main2 ¶ó°í ³Ö¾î¼­ ÇÊ¿ä½Ã¸¶´Ù main°ú À̸§À» ¹Ù²ã°¡¸ç Å×½ºÆ®ÇÒ °ÍÀÔ´Ï´Ù. ÇÏÁö¸¸ ±×·¸°Ô ÇÏ´Â °ÍÀº ÇÁ·Î±×·¥À» ¹è¿ï¶§³ª ÇÏ´Â °ÍÀÌ¸ç ½ÇÀü¿¡¼­´Â ±×·¸°Ô Å×½ºÆ®ÇÏ¸é ³ªÁß¿¡ ÇÊ¿äÇÑ Å×½ºÆ®¸¦ ¸øÇÏ°Ô µË´Ï´Ù. Å×½ºÆ® Äڵ嵵 ÄÚµùÀÇ ¸ÞÀÎÀ̸ç, Ç×»ó ÄÄÆÄÀ쵃 ¼ö ÀÖ´Â »óŸ¦ À¯ÁöÇؾßÇÕ´Ï´Ù.

ÀÚ, Real main°ú Test mainÀ» µÑ ¼ö ÀÖ´Ù´Â °¡Á¤ÇÏ¿¡ ¸ðµâ·Î ³ª´· ¼ö ÀÖÀ½À» º¼ ¼ö ÀÖ½À´Ï´Ù. ÀÌ°ÍÀ» Á»´õ ¹ßÀü½ÃÄÑ »ý°¢ÇÑ´Ù¸é, °°Àº Å×½ºÆ® ±×·ì¿¡ ÀÖ´Â °Íµé ³¢¸® ¸ð¾Æ³õÀ» ¶§ ÀûÀýÇÑ ¸ðµâÈ­ÀÇ ½À°üÀ» ±â¸¦ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù.

2.3.3. ºÎºÐ Archive

À§¿¡¼­ »ìÆ캻 °ÍÀº ´ÜÁö main ÇÔ¼ö¸¸À» »ìÆì º¸¾Ò½À´Ï´Ù¸¸, ¿©±â¿¡ Ãß°¡ÇÏ¿© ´õ »ý°¢Çغ¼ ¼ö ÀÖ´Â °ÍÀÌ ÀÖ½À´Ï´Ù. main ÇÔ¼ö°¡ µé¾î ÀÖ´Â ÆÄÀÏÀ» Á¦¿ÜÇÑ ³ª¸ÓÁö ÆÄÀÏÀ» static library Áï, archive·Î ¸¸µé°í, ÀÌ°ÍÀ» main ÇÔ¼ö°¡ µé¾î ÀÖ´Â °Í°ú ¸µÅ©¸¦ Ç϶ó´Â °ÍÀÔ´Ï´Ù.

Makefile
--------

libcomm.a: file.o tcp.o udp.o serv.o
        ar cr libcomm.a $?

comm: libcomm.a comm.o
        gcc libcomm.a comm.o -o comm

test_comm: libcomm.a comm.o
        gcc libcomm.a test_comm.o -o test_comm



¹°·Ð autotoolÀ» ½á¼­ ÁøÇàÇÏ´Â °ÍÀ» ±ÇÀåÇÕ´Ï´Ù¸¸, ¿¹¸¦ µé¾îº¾´Ï´Ù. ÀÌ·¸°Ô ºÎºÐ archive¸¦ ±¸ÇÏ´Â ÀÌÀ¯´Â Àǹ̻óÀÖ´Â °ÍÀε¥, ¸¸ÀÏ file.o °¡ commÀ» ¸¸µé±â À§Çؼ­ ÀÇÁ¸°ü°è¿¡ ÀÇÇØ ÄÄÆÄÀϵǾú´Ù¸é, ¾ö¹ÐÈ÷ ¸»Çؼ­ test_commÀ» À§Çؼ­´Â ´Ù¸¥ file.o¸¦ ¸¸µå´Â °ÍÀÌ ¿Ç½À´Ï´Ù. °£È¤, ÇϳªÀÇ ½ÇÇà ÆÄÀÏÀ» ¸¸µé±â À§ÇØ ÄÄÆÄÀÏ ¿É¼ÇÀÌ ´Þ¶óÁø´Ù¸é, ÀǵµÇÏÁö ¾ÊÀº ¹ÙÀ̳ʸ®¸¦ Å×½ºÆ®¸¦ ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.

½ÇÁ¦, autotoolÀ» ÀÌ¿ëÇÒ °æ¿ì, ÇϳªÀÇ ¼Ò½º°¡ ´Ù¸¥ ¹ÙÀ̳ʸ® »ý¼º¿¡ Âü¿©ÇÏ°Ô µÈ´Ù¸é, ±×¸®°í ¿É¼ÇÀÌ ´Þ¶óÁø´Ù¸é, À§ÀÇ °æ¿ì comm-file.o ¶ó´Â ÆÄÀÏ°ú test_comm-file.o ¿Í °°ÀÌ Âü¿©ÇÏ°Ô µÉ ¹ÙÀ̳ʸ®¸¦ prefix·Î ÇÏ´Â ¿ÀºêÁ§Æ®¸íÀÌ »ç¿ëµË´Ï´Ù. ÀÌ·± °æ¿ì Å×½ºÆ®¿¡ ¾î·Á¿òÀÌ ÀÖÀ» ¼ö Àֱ⠶§¹®¿¡ °°Àº ¿ÀºêÁ§Æ®¸¦ Å×½ºÆ®Çϱâ À§Çؼ­ ºÎºÐ archive¸¦ ¸¸µé¾î ¸µÅ©ÇÏ´Â °ÍÀ» ±ÇÀåÇÕ´Ï´Ù.





ID
Password
Join
Your present plans will be successful.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2012-04-04 10:57:34
Processing time 0.0139 sec