· 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
Stop searching forever. Happiness is just next to you.


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.0110 sec