· 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
You attempt things that you do not even plan because of your extreme stupidity.


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