· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Subversion Book/Developer Information

°³¹ßÀÚ Á¤º¸

1Chapter. °³¹ßÀÚ Á¤º¸


1.1.

Subversion ´Â open sourceÀÇ ¼ÒÇÁÆ®¿þ¾î ÇÁ·ÎÁ§Æ®·Î, Apache ½ºÅ¸ÀÏÀÇ ¼ÒÇÁÆ®¿þ¾î ¶óÀ̼¾½º¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. ÇÁ·ÎÁ§Æ®´Â Ķ¸®Æ÷´Ï¾Æ¿¡ º»°ÅÁö°¡ ÀÖ´Â ¼ÒÇÁÆ®¿þ¾î °³¹ß ȸ»ç CollabNet, Inc., ÀÇ °æÁ¦ÀûÀÎ Áö¿øÀ» ¹Þ°í ÀÖ½À´Ï´Ù. ÀÌ Ä¿¹Â´ÏƼ´Â SubversionÀÇ °³¹ßÀ» µÑ·¯½Î°í ±¸¼ºµÇ¾î ÀÖ½À´Ï´Ù¸¸, ÀÌ ÇÁ·ÎÁ§Æ®¿¡ ½Ã°£À» ÇÒ¾ÖÇØ Áְųª ÁÖÀǸ¦ ÇâÇÏ¿© ¹ÞÀ» ¼ö ÀÖ´Â °Í °°Àº ÇüÅ·Π¹«»ó ¿øÁ¶ÇØ ÁÖ´Â »ç¶÷À» Ç×»ó ȯ¿µÇØ ÀÖ½À´Ï´Ù. ÀÚ¿øºÀ»ç´Â ¾î¶² ÇüÅÂÀÇ ¿øÁ¶µµ ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ±×°ÍÀº, ¹ö±×¸¦ ã¾Æ³»°Å³ª Å×½ºÆ®Çϰųª ¹ú½á ÀÖ´Â Äڵ带 °³·®Çϰųª ¿ÏÀüÈ÷ »õ·Î¿î ±â´ÉÀ» Ãß°¡Çϰųª¶ó°í ÇÑ °ÍÀ» Æ÷ÇÔÇÕ´Ï´Ù.

ÀÌ ÀåÀº ¿ø½Ã Äڵ忡 ÀÚ½ÅÀÇ ¼ÕÀ» ½ÇÁ¦·Î ºÓÈ÷´Â °Í¿¡ ÀÇÇØ Subversion ÀÇ Áö±Ý È®½ÇÈ÷ ÀϾ°í ÀÖ´Â ÁøÈ­¸¦ ¿øÈ£ÇÏ·Á°í ÇÏ´Â »ç¶÷À» ÇâÇÑ °ÍÀÔ´Ï´Ù. ¼ÒÇÁÆ®¿þ¾îÀÇ °Í Á» ´õ »ó¼¼ÇÏ°Ô Á¢ÇØ Subversion ÀÚ½ÅÀ» °³¹ßÇϴµ¥ ȤÀº, Subversion ÇÁ·Î±×·¥ ¶óÀ̺귯¸®¸¦ »ç¿ëÇÑ ¿ÏÀüÇÏ°Ô »õ·Î¿î ÅøÀ» ¾²±â À§Çؼ­(¶§¹®¿¡) ÇÊ¿äÇÏ°Ô µÇ´Â ±â¼úÀûÀ¸·Î Áß¿äÇÑ Á¡¿¡ ´ëÇØ ¼³¸íÇÕ´Ï´Ù. ¸¸¾à, ±×·± ·¹º§ÀÇ À̾߱⿡ Âü°¡ÇÏ°í ½ÍÁö ¾ÊÀº °ÍÀ̸é, ÀÌ ¾ÆÅ°¶ó´Â ÆÄ°ßÇØ ÁÖ¾î »ó´çÈ÷ ÀÔ´Ï´Ù. SubversionÀÇ À¯Àú·Î¼­ÀÇ °æÇè¿¡´Â ¿µÇâÀ» ÁÖÁö ¾ÊÀ¸¹Ç·Î.


1.1. °èÃþÈ­ µÈ ÇÁ·Î±×·¥ ¶óÀ̺귯¸® ¼³°è

SubversionÀº ¸ðµâÈ­µÈ ¼³°è°¡ µÇ¾î ÀÖ¾î, CÇÁ·Î±×·¥ ¶óÀ̺귯¸®ÀÇ ¸ðÀÓ°ú ÇØ ½ÇÀåµÇ°í ÀÖ½À´Ï´Ù. ÇÁ·Î±×·¥ ¶óÀ̺귯¸®ÀÇ °¢°¢Àº ÀÚÁÖ(Àß) Á¤ÀÇµÈ ¸ñÀû°ú ÀÎÅÍÆäÀ̽º (À»)¸¦ °¡Áö°í ÀÖ¾î, ´ëºÎºÐÀÇ ¸ðµâÀº ¼¼ °³ÀÇ ÁÖ¿äÇÑ ÃþÀÇ ¾î¶² °ÍÀΰ¡¿¡ ¼ÓÇÕ´Ï´Ù. ÀúÀå¼Ò(repository)Ãþ, ÀúÀå¼Ò(repository) ¾×¼¼½ºÃþ(RA), ±×¸®°í Ŭ¶óÀ̾ðÆ®ÃþÀÔ´Ï´Ù. ÀÌ·¯ÇÑ Ãþ¿¡ µµÂøÇØ °£´ÜÇÏ°Ô º¸°í °©´Ï´Ù¸¸, ÃÖÃÊ·Î Table 7-1 ¿¡ ÀÖ´Â Subversion ÇÁ·Î±×·¥ ¶óÀ̺귯¸® À϶÷À» ºÁ ÁÖ¼¼¿ä. ÀÏ°üÇÑ ³íÀÇ¿Í Çϱâ À§ÇÑ(ÇØ), ÇÁ·Î±×·¥ ¶óÀ̺귯¸®´Â, È®ÀåÀÚ(extension)¸¦ µé¿©´Ù º» Unix ÀÇ ÇÁ·Î±×·¥ ¶óÀ̺귯¸® ¸íĪÀ¸·Î ÂüÁ¶Çϱâ·Î ÇÏ°Ú½À´Ï´Ù (¿¹¸¦ µé¾î: libsvn_fs, libsvn_wc, mod_dav_svn).

Table 1-1. Subversion ÇÁ·Î±×·¥ ¶óÀ̺귯¸®ÀÇ À϶÷

Table 7-1 ¿¡"´Ù¾çÇÑ"¶ó´Â ¸»ÀÌ Çϳª¸¸ ³ª¿Í ÀÖ´Ù´Â °ÍÀº, ÁÁÀº ¼³°èÀÎ Áõ°ÅÀÔ´Ï´Ù. Subversion °³¹ß ÆÀÀº °¢°¢ÀÇ ±â´ÉÀÌ, ¿Ã¹Ù¸£´Ù Ãþ°ú ÇÁ·Î±×·¥ ¶óÀ̺귯¸®¿¡ ÀÖ´Â °ÍÀ» È®ÀÎÇÏ´Â °ÍÀ», Áß¿äÇÑ ÀÏÀ̶ó°í »ý°¢ÇÏ°í ÀÖ½À´Ï´Ù. ¾Æ¸¶, ¸ðµâÈ­ÇÑ ¼³°èÀÇ 1¹ø Å« ÀÌÁ¡Àº °³¹ßÀÚÀÇ °üÁ¡À¸·ÎºÎÅÍ º» º¹ÀâÇÔ (À»)¸¦ ÁÙÀÏ ¼ö°¡ ÀÖ´Â °ÍÀÔ´Ï´Ù. °³¹ßÀڷμ­ ¾Æ¼±¹ÝÀº °ð¹Ù·Î,"À̾߱âÀÇ °³¿ä"¸¦ ¾Ë ¼ö°¡ ÀÖ¾î °Å±â¿¡ µû¶ó ºñ±³Àû °£´ÜÇÏ°Ô ¾î´À ƯÁ¤ÀÇ ±â´ÉÀÇ Àå¼Ò¸¦ ƯÁ¤ ÇÒ ¼ö°¡ ÀÖ°Ô µË´Ï´Ù.

±×¸®°í, ½ÇÁ¦·Î ´ÜÁö Å« ±×¸²À» ±×¸®´Â °Íº¸´Ùµµ, °³¹ßÀÚ¿¡°Ô"À̾߱âÀÇ °³¿ä"¸¦ ÀüÇÏ´Â µµ¿òÀÌ µÇ´Â °ÍÀº ¹«¾ùÀϱî¿ä? Subversion ÇÁ·Î±×·¥ ¶óÀ̺귯¸®°¡ ¾î¶»°Ô ¼­·Î Á¦ÈÞÇÏ°í ÀÖ´ÂÁö¸¦ ÀÌÇØÇÏ´Â µµ¿òÀ¸·Î¼­ SubversionÀÇ °èÃþµµ, Figure 7-1 ¸¦ ºÁ ÁÖ¼¼¿ä. ÇÁ·Î±×·¥Àº(À¯Àú¿¡ ÀÇÇØ ±âµ¿µÈ µÚ) ÀÌ ±×¸² À§·ÎºÎÅÍ ½ÃÀ۵Ǿî, ¾Æ·¡·Î ÇâÇØ È帨´Ï´Ù.

Figure 1-1. Subversion ÀÇ °³¿ä

¸ðµâÈ­¿ÜÀÇ ÀÌÁ¡Àº, ÁÖ¾îÁø ¸ðµâÀ» ÄÚµåÀÇ ´Ù¸¥ ºÎºÐ¿¡ ¿µÇâ ÁÖ´Â °Í ¾øÀÌ , °°Àº API¸¦ ½ÇÀåÇÑ »õ·Î¿î ÇÁ·Î±×·¥ ¶óÀ̺귯¸®·Î ¿Å°Ü³õ´Â °ÍÀÌ ÇÒ ¼ö ÀÖ´Ù°í ÇÏ´Â °ÍÀÔ´Ï´Ù. ¾î¶² Àǹ̷ΠÀÌ°ÍÀº Subversion ³»ºÎ¿¡¼­ ¹ú½á ÀϾ ÀÖ´Â °ÍÀÔ´Ï´Ù. libsvn_ra_dav, libsvn_ra_local, ±×¸®°í libsvn_ra_svn ÀÇ ¸ðµç °ÍÀº, °°Àº ÀÎÅÍÆäÀ̽º¸¦ ½ÇÀåÇÏ°í ÀÖ½À´Ï´Ù. ±×¸®°í, ÀÌ 3°³(»ì) ¸ðµÎ ÇÏÁö¸¸, ÀúÀå¼Ò(repository)Ãþ°ú ±³È¯ÇÕ´Ï´Ù. libsvn_ra_dav ¿Í libsvn_ra_svn ´Â ³×Æ®¿öÅ© ³Ñ¾î·Î ±×·¸°Ô ÇÏ°í, libsvn_ra_local ´Â Á÷Á¢ ÀúÀå¼Ò(repository)¿¡ Á¢¼ÓÇÕ´Ï´Ù.

Ŭ¶óÀ̾ðÆ® Àڽŵµ ¶Ç SubversionÀÇ ¼³°è¿¡¼­ÀÇ ¸ðµâ¼ºÀ» ºÐ¸íÈ÷ °¡¸®Å°°í ÀÖ½À´Ï´Ù. SubversionÀº ÇöÀç·Î¼­´Â Ä¿¸àµå ¶óÀΠŬ¶óÀ̾ðÆ® ÇÁ·Î±×·¥¸¸À» ½ÇÀåÇÏ°í ÀÖ½À´Ï´Ù¸¸, SubversionÀ» À§Çؼ­(¶§¹®¿¡) GUI·Î¼­ ÇൿÇÑ´Ù °°Àº ¼­µå ÆÄƼ¿¡ ÀÇÇØ °³¹ßµÇ°í ÀÖ´Â ¸î°³ÀÇ ÇÁ·Î±×·¥ÀÌ ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ GUIµµ, ¹ú½á ½ÇÀåµÇ°í ÀÖ´Â Ä¿¸àµå Ŭ¶óÀ̾ðÆ® (¿Í)°ú °°Àº API¸¦ ÀÌ¿ëÇÕ´Ï´Ù. SubversionÀÇ libsvn_client ÇÁ·Î±×·¥ ¶óÀ̺귯¸®´Â Subversion Ŭ¶óÀ̾ðÆ®¸¦ ¼³°èÇϴµ¥ ÇÊ¿äÇÑ ´ëºÎºÐÀÇ ±â´ÉÀ» À§Çؼ­(¶§¹®¿¡) ÀÌ¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. (>ÂüÁ¶).


1.1.1. ÀúÀå¼Ò(repository)Ãþ

SubversionÀÇ ÀúÀå¼Ò(repository)ÃþÀ» ÂüÁ¶ÇÒ ¶§, ÀϹÝÀûÀ¸·Î, µÎ °³ÀÇ ÇÁ·Î±×·¥ ¶óÀ̺귯¸®¿¡ ´ëÇØ ¸»ÇÏ°í ÀÖ½À´Ï´ÙÀúÀå¼Ò(repository) ÇÁ·Î±×·¥ ¶óÀ̺귯¸®¿Í ÆÄÀÏ ½Ã½ºÅÛ ÇÁ·Î±×·¥ ¶óÀ̺귯¸® ÀÔ´Ï´Ù. ÀÌ·¯ÇÑ ÇÁ·Î±×·¥ ¶óÀ̺귯¸®´Â ¹öÀü °ü¸®µÈ µ¥ÀÌÅÍÀÇ ´Ù¾çÇÑ ¸®ºñÀü (À»)¸¦ À§ÇÑ °Ý³³°ú º¸°íÀÇ ±¸Á¶¸¦ Á¦°øÇÏ°í ÀÖ½À´Ï´Ù. ÀÌ ÃþÀº ÀúÀå¼Ò(repository) ¾×¼¼½ºÃþ (À»)¸¦ °æÀ¯ÇØ Å¬¶óÀ̾ðÆ®Ãþ°ú ¿¬°áµÇ¾î ÀÖ¾î, Subversion ÀÌ¿ëÀڷκÎÅÍ º¸¸é(ÀÚ), "Åë½ÅÀÇ »ó´ëÆí"¿¡ ÀÖ´Â °ÍÀ¸·Î º¸ÀÔ´Ï´Ù.

SubversionÀÇ ÆÄÀÏ ½Ã½ºÅÛÀº libsvn_fs API¿¡ ÀÇÇØ ¾×¼¼½º µÇ¾î operating system¿¡ ÀνºÅç µÇ°í ÀÖ´Â Ä¿³Ú ·¹º§ÀÇ Àǹ̿¡¼­ÀÇ ÆÄÀÏ ½Ã½ºÅÛ(LinuxÀÇ ext2 ³ª, NTFS¿Í °°ÀÌ)ÀÌ ¾Æ´Ï°í, °¡»óÀûÀÎ ÆÄÀÏ ½Ã½ºÅÛÀÔ´Ï´Ù. "ÆÄÀÏ"°ú"µð·ºÅ丮"¸¦ (ÀÚ½ÅÀÌ ÁÁ¾ÆÇÏ´Â Á¶°¡ºñ¸¦ »ç¿ëÇØ Á¶ÀÛÇÒ ¼ö°¡ ÀÖ´Â °Í °°Àº) Çö½ÇÀÇ ÆÄÀÏ°ú µð·ºÅ丮·Î¼­ º¸Á¸ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, ¿¬±¸ ÃÖÁ¾ ´Ü°èÀÇ º¸Á¸ÀÇ ±¸Á¶·Î¼­ µ¥ÀÌŸº£À̽º ½Ã½ºÅÛÀ» »ç¿ëÇÕ´Ï´Ù. ÇöÀç, ÀÌ¿ëÇÒ ¼ö ÀÖ´Â µ¥ÀÌŸº£À̽º ½Ã½ºÅÛÀº Berkeley DBÀÔ´Ï´Ù. [1] ±×·¯³ª, SubversionÀÇ ÇâÈÄÀÇ ¸±¸®½º Áß(¾È)¿¡¼­ °³¹ß Ä¿¹Â´ÏƼ¿¡ ÀÇÇØ Èï¹Ì¸¦ ´ç±â°í ÀÖ´Â, ´Ù¸¥ ¿¬±¸ ÃÖÁ¾ ´Ü°è µ¥ÀÌŸº£À̽º ½Ã½ºÅÛÀÇ ÀÌ¿ë °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, ¿ÀÇ µ¥ÀÌŸº£À̽º Ä¿³ØƼºñƼ- (ODBC) µîÀÔ´Ï´Ù.

libsvn_fs °¡ Á¦°øÇÏ´Â ÆÄÀÏ ½Ã½ºÅÛ API´Â ´Ù¸¥ ÆÄÀÏ ½Ã½ºÅÛ API ±×·¸Áö¸¸ ±â´ëÇÒ ¼ö ÀÖ´Â °Í °°Àº ±â´ÉÀ» °¡Áö°í ÀÖ´Â: ÆÄÀÏÀ̳ª µð·ºÅ丮ÀÇ ÀÛ¼ºÀ̳ª »èÁ¦¸¦ ÇÒ ¼ö ÀÖ¾î, Ä«Çdzª, À̵¿À» ÇÒ ¼ö ÀÖ¾î ÆÄÀÏÀÇ ³»¿ëÀ» ¼öÁ¤ÇÒ ¼ö°¡ ÀÖ¾î, µî µîÀÔ´Ï´Ù. ³Ê¹« ÀϹÝÀûÀÌÁö ¾Ê´Â °Í °°Àº ±â´Éµµ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, ÆÄÀÏÀ̳ª µð·ºÅ丮¿¡ ºÎ¼ö Çß´Ù ¸ÞŸµ¥ÀÌŸ("¼Ó¼º")ÀÇ Ãß°¡, º¯°æ, »èÁ¦, µîÀÔ´Ï´Ù. ÇÑÃþ ´õ Subversion ÆÄÀÏ ½Ã½ºÅÛÀº ¹öÀüÈ­ °¡´ÉÇÑ ÆÄÀÏ ½Ã½ºÅÛÀ¸·Î, ÀÌ°ÍÀº, µð·ºÅ丮 Æ®¸®·Î º¯°æÀ» ´õÇϸé(ÀÚ), SubversionÀº ±× º¯°æ ÀÌÀü¿¡, ±× Æ®¸®°¡ ¾î¶»°Ô º¸Àϱ ±â¾ïÇØ µÐ´Ù°í ÇÏ´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù. ±×¸®°í, ÇÑÃþ ´õ ±× ÀüÀÇ º¯°æÀü, ÇÑÃþ ´õ ±× Àü, µîÀÔ´Ï´Ù. ÀÌ¿Í °°ÀÌ ÇØ, ÆÄÀÏ ½Ã½ºÅÛ¿¡ ¹«¾ùÀΰ¡¸¦ ÃÖÃÊ·Î Ãß°¡Çߴµ¥±îÁöÀÇ ¸ðµç ¹öÀüÀ¸·Î µ¹¾Æ¿Ã ¼ö°¡ ÀÖ½À´Ï´Ù.

Æ®¸®¿¡ °¡¼¼ÇÑ ¸ðµç º¯°æÀº SubversionÀÇ Æ®·£Àè¼Ç(transaction) Áß(¾È)¿¡¼­ ½ÇÇà µË´Ï´Ù. ÀÌÇÏ´Â, ÆÄÀÏ ½Ã½ºÅÛÀ» ¼öÁ¤Çϱâ À§ÇÑ ´Ü¼øÇÏ°í ÀϹÝÀûÀÎ ¼ö¼ÓÀÔ´Ï´Ù:

  1. Subversion Æ®·£Àè¼Ç(transaction)ÀÇ °³½Ã

  2. ¼öÁ¤ÀÇ ½ÇÇà(Ãß°¡, »èÁ¦, ¼Ó¼ºÀÇ ¼öÁ¤, µî)

  3. Æ®·£Àè¼Ç(transaction)ÀÇ Ä¿¹Ô

Æ®·£Àè¼Ç(transaction)¸¦ Ä¿¹ÔÇϸé(ÀÚ), ÆÄÀÏ ½Ã½ºÅÛÀÇ º¯°æÀº ¿ª»ç»óÀÇ »ç°ÇÀ¸·Î¼­ ¿µ±¸È÷ ±â·ÏµË´Ï´Ù. ÀÌ·¯ÇÑ °¢°¢ÀÇ »çÀÌŬÀº Æ®¸®¿¡ »õ·Î¿î ¸®ºñÀüÀ» ¸¸µé¾î, °¢°¢ÀÇ ¸®ºñÀüÀº"ÀÖ´Â °ÍÀÌ ¾î´À °°¾Ò´Â°¡"¶ó°í ÇÏ´Â ¼ø¼öÇÑ snapshot·Î ÇÏ°í ÀÖ°í °³¿¡¼­µµ ¾×¼¼½º ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.

ÆÄÀÏ ½Ã½ºÅÛ ÀÎÅÍÆäÀ̽º¿¡ ÀÇÇØ ÁغñµÇ´Â ±â´ÉÀÇ ´ëºÎºÐÀº ÆÄÀÏ ½Ã½ºÅÛ Æнº¿¡ ´ëÇؼ­ ÀϾ´Â Á¶ÀÛÀ¸·Î¼­ Á¦°øµË´Ï´Ù. Áï, ÆÄÀÏ ½Ã½ºÅÛÀÇ ¿ÜºÎ·ÎºÎÅÍ´Â, ÆÄÀÏÀ̳ª µð·ºÅ丮ÀÇ °³º°ÀÇ ¸®ºñÀüÀ» ±â¼úÇØ, ¾×¼¼½º ÇÏ´Â, ÁÖ¿ä ¾øÀ½ ½ÖÀº,/foo/bar (¿Í)°ú °°Àº Æнº ij¸¯ÅÍ ¶óÀÎÀ» »ç¿ëÇÏ´Â °ÍÀ» ÅëÇؼ­ Á¦°øµÇ¾î ±×°ÍÀº Á¤È®È÷, ´ç½ÅÀÌ Á¤µç Á¶°¡ºñ ÇÁ·Î±×·¥À» ÅëÇؼ­ ÆÄÀÏÀ̳ª µð·ºÅ丮¿¡ ¾×¼¼½º ÇÑ´Ù °°Àº ±âºÐÀÌ µì´Ï´Ù. ÀûÀýÇÑ Æнº ¸íºÐÀ» ¼¼¿ö ÀÖ°í API ÇÔ¼ö¿¡ °Ç³×ÁÖ´Â °Í¿¡ ÀÇÇØ, »õ·Î¿î ÆÄÀÏÀ̳ª µð·ºÅ丮¸¦ Ãß°¡ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. °°Àº ±¸Á¶¸¦ »ç¿ëÇØ ±× ÆÄÀÏ µî¿¡ °ü°èÇÑ Á¤º¸¸¦ ¹®ÀÇÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.

´ëºÎºÐÀÇ ÆÄÀÏ ½Ã½ºÅÛ°ú´Â ´Þ¶ó, Æнº¸¸À» ÁöÁ¤ÇÏ´Â °ÍÀº, Subversion ÀÇ ÆÄÀÏÀ̳ª µð·¹Æ®Å©¸®¸¦ ƯÁ¤Çϴµ¥ ÃæºÐÇÑ Á¤º¸°¡ ¾Æ´Õ´Ï´Ù. µð·ºÅ丮 Æ®¸®¸¦ ÀÌÂ÷¿øÀÇ ½Ã½ºÅÛÀ̶ó°í »ý°¢ÇØ ÁÖ¼¼¿ä. ¿©±â¼­, ¾î´À ³ëµåÀÇ ÇüÁ¦´Â, ¿ÞÂÊ¿¡¼­ ¿À¸¥ÂÊÀ¸·Î À̵¿ÇÏ´Â °ÍÀ» Ç¥ÇöÇÏ°í ÀÖ¾î, »çºêµð·¹Æ®Å©¸®¿¡ ³»·Á °£´Ù ÀÇ´Â, ¾Æ·¡·Î ÇâÇÑ À̵¿ÀÌ´Ù°í »ý°¢ÇØ ÁÖ¼¼¿ä. Figure 7-2 ´Â ÀüÇüÀûÀÎ Æ®¸®ÀÇ Ç¥ÇöÀ» ³ªÅ¸³»°í ÀÖ½À´Ï´Ù.

Figure 1-2. ÀÌÂ÷¿ø¾ÈÀÇ ÆÄÀÏ°ú µð·ºÅ丮

¹°·Ð SubversionÀÇ ÆÄÀÏ ½Ã½ºÅÛÀº ¼ûÀº Á¦£³ Â÷¿øÀ» °¡Áö°í ÀÖ½À´Ï´Ù¸¸, ±×°ÍÀº ´ëºÎºÐÀÇ ÆÄÀÏ ½Ã½ºÅÛÀÌ °¡Áö°í ÀÖÁö ¾ÊÀº °ÍÀÔ´Ï´Ù±×°ÍÀº ½Ã°£ÀÇ Â÷¿øÀÔ´Ï´Ù! [2] ÆÄÀÏ ½Ã½ºÅÛ ÀÎÅÍÆäÀ̽º·Î,path Àμö¸¦ °¡Áö´Â °ÅÀÇ ¸ðµç ÇÔ¼ö´Â ¶Çroot Àμöµµ ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù. ÀÌsvn_fs_root_t Àμö´Â, ¸®ºñÀüÀΰ¡, SubversionÀÇ Æ®·£Àè¼Ç(transaction)(±×°ÍÀº º¸ÅëÀº ¸®ºñÀü µÇ¾î¾ß ÇÒ ¹°°ÇÀÔ´Ï´Ù)ÀÇ ¾î´À ÂÊÀÎÁö¸¦ ³ªÅ¸³», ¸®ºñÀü 32ÀÇ/foo/bar ¶ó°í ¸®ºñÀü 98ÀÇ °°Àº Æнº¿ÍÀÇ »çÀÌÀÇ Â÷À̸¦ ÀÌÇØÇϴµ¥ ÇÊ¿äÇÏ°Ô µÇ´Â »ïÂ÷¿ø ¹®¸ÆÀ» ÁغñÇÕ´Ï´Ù. Figure 7-3 ´Â Subversion ÆÄÀÏ ½Ã½ºÅÛÀÇ ¿ìÁÖ ¿¡ Ãß°¡µÈ Â÷¿ø¿¡ ´ëÇÑ ¸®ºñÀü È÷½ºÅ丮¸¦ ³ªÅ¸³»°í ÀÖ½À´Ï´Ù.

Figure 1-3. ¸®ºñÀü ½Ã°¢Á¦£³ Â÷¿ø!

ÀÌÀü ÁöÀûÇÑ °Íó·³, libsvn_fs API ´Â ´Ù¸¥ ÆÄÀÏ ½Ã½ºÅÛ°ú ¿Ü°üÀº ÀÚÁÖ(Àß)¿¡¼­ ÀÖÁö¸¸, ÀÌ ÈǸ¢ÇÑ ¹öÀü °ü¸® ´É·Â¸¸Àº ¿¹¿ÜÀÔ´Ï´Ù. ±×°ÍÀº ¹öÀü ÆÄÀÏ ½Ã½ºÅÛ¿¡ Èï¹Ì°¡ ÀÖ´Â ¸ðµç ÇÁ·Î±×·¡¸Ó¿¡ ÀÇÇØ ÀÌ¿ëÇÒ ¼ö ÀÖµµ·Ï(µíÀÌ) ¼³°èµÇ¾ú½À´Ï´Ù. ¿ì¿¬ÀÇ ÀÏÄ¡°¡ ¾Æ´Õ´Ï´Ù¸¸, Subversion Àڽŵµ ±× ±â´É¿¡ Èï¹Ì°¡ ÀÖ½À´Ï´Ù. ±×·¯³ª, ÆÄÀÏ ½Ã½ºÅÛ API (Àº)´Â ±âº»ÀûÀÎ ÆÄÀÏ°ú µð·ºÅ丮ÀÇ ¹öÀü °ü¸®¸¦ ¼­Æ÷Æ®ÇÏ°í ÀÖ½À´Ï´Ù¸¸ SubversionÀº ÇÑÃþ ´õ ´ëºÎºÐÀ» ¿ä±¸Çմϴٱ׸®°í ±×°ÍÀº libsvn_repos °¡ Á¦°øÇÏ´Â °ÍÀÔ´Ï´Ù.

Subversion ÀúÀå¼Ò(repository) ÇÁ·Î±×·¥ ¶óÀ̺귯¸®(libsvn_repos)´Â ±âº»ÀûÀ¸·Î´Â ÆÄÀÏ ½Ã½ºÅÛ ±â´ÉÀÇ ÁÖÀ§¿¡ ÀÖ´Â ·¡ÆÛ ÇÁ·Î±×·¥ ¶óÀ̺귯¸®ÀÔ´Ï´Ù. ÀÌ ÇÁ·Î±×·¥ ¶óÀ̺귯¸®´Â ÀúÀå¼Ò(repository) ·¹À̾ƿôÀÇ ÀÛ¼º, ÆÄÀÏ ½Ã½ºÅÛÀÇ ÃʱâÈ­¸¦ ¿Ã¹Ù¸£°Ô ½ÇÇàÇÏ´Â °Í, µî¿¡ Ã¥ÀÓÀ» °¡Áý´Ï´Ù. Libsvn_repos ´Â ¶Ç ÈÅÀ» ½ÇÀåÇÕ´Ï´ÙƯÁ¤ÀÇ Ã³¸®°¡ ½ÇÇàµÉ ¶§ ÀúÀå¼Ò(repository)ÀÇ Äڵ忡 ÀÇÇØ ½ÇÇàµÇ´Â ½ºÅ©¸³Æ®ÀÔ´Ï´Ù. ÀÌ °°Àº ¶õ ÅëÁö, ÀÎÁõ, ȤÀº ÀúÀå¼Ò(repository) °ü¸®ÀÚ°¡ ¹Ù¶ó´Â °Í °°Àº ´Ù¾çÇÑ ¸ñÀû¿¡ ÀÖ¾î µµ¿òÀÌ µÇ´Â °ÍÀÔ´Ï´Ù. ÀÌ Å¸ÀÔÀÇ ±â´É°ú ÀúÀå¼Ò(repository) ÇÁ·Î±×·¥ ¶óÀ̺귯¸® ¿¡ ÀÇÇØ Á¦°øµÇ´Â °Í ¿ÜÀÇ À¯Æ¿¸®Æ¼´Â ¹öÀüÈ­ ÆÄÀÏ ½Ã½ºÅÛ ÀÇ ½ÇÀå¿¡ °­ÇÏ°Ô °ü·ÃÇÏ°í ÀÖ´Â °ÍÀº ¾Æ´Õ´Ï´Ù. ±×°ÍÀÌ µ¶ÀÚÀûÀÎ ÇÁ·Î±×·¥ ¶óÀ̺귯¸®·Î¼­ ½ÇÀåµÈ ÀÌÀ¯ÀÔ´Ï´Ù.

libsvn_repos API¸¦ »ç¿ëÇÏ·Á°í ÇÏ´Â °³¹ßÀÚ¿¡°Ô´Â, ±×°ÍÀÌ ÆÄÀÏ ½Ã½ºÅÛ ÀÎÅÍÆäÀ̽º ¿¡ ´ëÇÑ ¿ÏÀüÇÑ ·¡ÆÛ°¡ ¾Æ´Ñ °ÍÀ» ¾Ë°ÚÁö¿ä. Áï, ÆÄÀÏ ½Ã½ºÅÛ Á¶ÀÛÀÇ ÀϹÝÀûÀÎ »çÀÌŬ¿¡ ÀÖ´Â ÁÖ¿äÇÑ À̺¥Æ®¿¡ ºÙ¾î¸¸ ÀúÀå¼Ò(repository) ÀÎÅÍÆäÀ̽º¿¡ ÀÇÇØ ·¦ µË´Ï´Ù. ±× ¾ÈÀÇ ¸î°³Àΰ¡´Â, Subversion Æ®·£Àè¼Ç(transaction)ÀÇ »ý¼ºÀ̳ª Ä¿¹Ô, ¸®ºñÀü ¼Ó¼ºÀÇ ¼öÁ¤ µîÀÔ´Ï´Ù. ÀÌ·¯ÇÑ Æ¯Á¤ÀÇ À̺¥Æ®´Â °Å±â¿¡ °ü·ÃÇÑ ÈÅÀÌ ÀÖ±â (À§ÇØ)¶§¹®¿¡, ÀúÀå¼Ò(repository)Ãþ¿¡ ÀÇÇØ ·¦ µË´Ï´Ù. Àå·¡ÀûÀ¸·Î´Â ´Ù¸¥ À̺¥Æ®µµ ÀúÀå¼Ò(repository) API¿¡ ÀÇÇØ ·¦ µÉÁöµµ ¾Ë·ÁÁöÁö ¾Ê½À´Ï´Ù. ±×·¯³ª, ³ª¸ÓÁöÀÇ ÆÄÀÏ ½Ã½ºÅÛÀÇ ÀÛ¿ëÀÇ ¸ðµç °ÍÀº libsvn_fs API (¿Í)°ú ÇÔ²² Á÷Á¢ ½ÇÇàµË´Ï´Ù.

¿¹¸¦ µé¾î, µð·ºÅ丮°¡ Ãß°¡µÇ´Â ÆÄÀÏ ½Ã½ºÅÛÀÇ »õ·Ó´Ù ¸®ºñÀüÀ» ¸¸µé±â À§ÇÑ, ÀúÀå¼Ò(repository)¿Í ÆÄÀÏ ½Ã½ºÅÛ ÀÎÅÍÆäÀ̽º ¿¡ ºÙ¾î, »ç¿ë¹ýÀ» ¼³¸íÇÑ Äڵ尡 ÀÖ½À´Ï´Ù. ÀÌ ¿¹·Î(±×¸®°í, ÀÌ º»Àüü¸¦ ÅëÇؼ­ ¸ðµç ´Ù¸¥ ¿¹¿¡¼­µµ), SVN_ERR ¸ÅÅ©·Î´Â ´ÜÁö ·¦ ÇÑ ÇÔ¼ö·ÎºÎÅÍÀÇ ½ÇÆÐÇßÀ» °æ¿ìÀÇ ¿¡·¯ ÄÚµåÀÇ Ã¼Å©ÀÔ´Ï´Ù. ±×¸®°í ±×·¯ÇÑ °Í (ÀÌ)°¡ ÀÖÀ¸¸é ±× ¿¡·¯¸¦ µ¹·ÁÁÝ´Ï´Ù.

Example 1-1. ÀúÀå¼Ò(repository)ÃþÀÇ ÀÌ¿ë

/* Create a new directory at the path NEW_DIRECTORY in the Subversion
   repository located at REPOS_PATH.   Perform all memory allocation in
   POOL.   This function will create a new revision for the addition of
   NEW_DIRECTORY.   */
static svn_error_t *
make_new_directory (const char *repos_path,
                    const char *new_directory,
                    apr_pool_t *pool)
{
  svn_error_t *err;
  svn_repos_t *repos;
  svn_fs_t *fs;
  svn_revnum_t youngest_rev;
  svn_fs_txn_t *txn;
  svn_fs_root_t *txn_root;
  const char *conflict_str;

  /* Open the repository located at REPOS_PATH.   */
  SVN_ERR (svn_repos_open (repos, repos_path, pool));

  /* Get a pointer to the filesystem object that is stored in
     REPOS.   */
  fs = svn_repos_fs (repos);

  /* Ask the filesystem to tell us the youngest revision that
     currently exists.   */
  SVN_ERR (svn_fs_youngest_rev (youngest_rev, fs, pool));

  /* Begin a new transaction that is based on YOUNGEST_REV.   We are
     less likely to have our later commit rejected as conflicting if we
     always try to make our changes against a copy of the latest snapshot
     of the filesystem tree.   */
  SVN_ERR (svn_fs_begin_txn (txn, fs, youngest_rev, pool));

  /* Now that we have started a new Subversion transaction, get a root
     object that represents that transaction.   */
  SVN_ERR (svn_fs_txn_root (txn_root, txn, pool));
  
  /* Create our new directory under the transaction root, at the path
     NEW_DIRECTORY.   */
  SVN_ERR (svn_fs_make_dir (txn_root, new_directory, pool));

  /* Commit the transaction, creating a new revision of the filesystem
     which includes our added directory path.   */
  err = svn_repos_fs_commit_txn (conflict_str, repos, 
                                 youngest_rev, txn);
  if (!  err)
    {
      /* No error?   Excellent!   Print a brief report of our success.   */
      printf ("Directory '%s' was successfully added as new revision "
              "'%" SVN_REVNUM_T_FMT "'. \n", new_directory, youngest_rev);
    }
  else if (err->apr_err == SVN_ERR_FS_CONFLICT))
    {
      /* Uh-oh.   Our commit failed as the result of a conflict
         (someone else seems to have made changes to the same area 
         of the filesystem that we tried to modify).   Print an error
         message.   */
      printf ("A conflict occurred at path '%s' while attempting "
              "to add directory '%s' to the repository at '%s'. \n", 
              conflict_str, new_directory, repos_path);
    }
  else
    {
      /* Some other error has occurred.   Print an error message.   */
      printf ("An error occurred while attempting to add directory '%s' "
              "to the repository at '%s'. \n", 
              new_directory, repos_path);
    }

  /* Return the result of the attempted commit to our caller.   */
  return err;
} 

ÀÌ ÄÚµå·Î, ÀúÀå¼Ò(repository)¿Í ÆÄÀÏ ½Ã½ºÅÛ ÀÎÅÍÆäÀ̽ºÀÇ ¾çÂÊ ¸ðµÎ¿¡ ´ëÇϴ ȣÃâÀÌ ÀÖ½À´Ï´Ù. svn_fs_commit_txn¸¦ »ç¿ëÇØ Æ®·£Àè¼Ç(transaction)¸¦ °£´ÜÇÏ°Ô Ä¿¹ÔÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª, ÆÄÀÏ ½Ã½ºÅÛ API´Â ÀúÀå¼Ò(repository) ÇÁ·Î±×·¥ ¶óÀ̺귯¸®ÀÇ ÈÅÀÇ ±¸Á¶¿¡ ´ëÇؼ­´Â ¾Æ¹«°Íµµ ¸ð¸¨´Ï´Ù. ¸¸¾à Subversion ÀúÀå¼Ò(repository)¿¡ Æ®·£Àè¼Ç(transaction)¸¦ Ä¿¹Ô ÇÒ ¶§¸¶´Ù ÀÚµ¿ÀûÀ¸·Î ¾î¶² Á¾·ùÀÇ ºñSubversionÀûÀÎ ÀÛ¾÷À» ½ÇÇà½ÃÅ°°í ½ÍÀº °æ¿ì, (¿¹¸¦ µé¾î, °³¹ßÀÚ ¸ÞÀϸµ¸®½ºÆ®¿¡ ±× Æ®·£Àè¼Ç(transaction)·Î ÀϾ ¸ðµÎ º¯°æÀ» ¼³¸íÇÏ´Â email ¸¦ ¼Û½ÅÇÏ´Â, µî), ±× ÇÔ¼öÀÇ libsvn_repos·Î ·¦ µÈ ¹öÀüÀ» »ç¿ëÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù svn_repos_fs_commit_txn. ÀÌ ÇÔ¼ö´Â ½ÇÁ¦·Î´Â ¸¸¾à Á¸ÀçÇϸé, ÃÖÃÊ·Î"pre-commit"Ç«½º Ŭ¸³Æ®¸¦ ½ÇÇàÇØ, ±×¸®°í Æ®·£Àè¼Ç(transaction)¸¦ Ä¿¹ÔÇØ, ¸¶Áö¸·¿¡"post-commit"Ç«½º Ŭ¸³Æ® (À»)¸¦ ½ÇÇàÇÕ´Ï´Ù. ÈÅÀº, ½ÇÁ¦·Î´Â ÄÚ¾îÀÇ ÆÄÀÏ ½Ã½ºÅÛ ÇÁ·Î±×·¥ ¶óÀ̺귯¸® ÀڽŠ¿¡ Æ÷ÇÔµÇÁö ¾Ê´Â Ưº°ÇÑ º¸°íÀÇ ±¸Á¶¸¦ ÁغñÇÕ´Ï´Ù. (SubversionÀÇ ÀúÀå¼Ò(repository) ÈÅ¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ °ÍÀº>(À»)¸¦ ºÁ ÁÖ¼¼¿ä).

ÈÅÀÇ ±¸Á¶´Â, ³ª¸ÓÁöÀÇ ÆÄÀÏ ½Ã½ºÅÛ ÄÚµå·ÎºÎÅÍ µ¶¸³ÇÑ ÀúÀå¼Ò(repository) ÇÁ·Î±×·¥ ¶óÀ̺귯¸®ÀÇ Ãß»óÈ­°¡ ÇϳªÀÇ ÀÌÀ¯ÀÔ´Ï´Ù. libsvn_repos API ´Â ±× ¹Û¿¡µµ ¸î°³ÀÇ Áß¿äÇÑ À¯Æ¿¸®Æ¼¸¦ Subversion¿¡ Á¦°øÇÏ°í ÀÖ½À´Ï´Ù. ÀÌ°Í¿¡´Â ÀÌÇÏ¿Í °°Àº °ÍÀÌ ÀÖ½À´Ï´Ù:

  1. Subversion ÀúÀå¼Ò(repository)¿Í °Å±â¿¡ Æ÷ÇԵǴ ÆÄÀÏ ½Ã½ºÅÛ»ó¿¡¼­ÀÇ ÆÄÀÏÀÇ »ý¼º, ¿ÀÇÂ, »èÁ¦, ±×¸®°í ȸº¹ÀÇ ½ºÅÜ

  2. µÎ ÆÄÀÏ ½Ã½ºÅÛ Æ®¸®°£ÀÇ ºñ±³ÀÇ Ç¥½Ã

  3. ÆÄÀÏ ½Ã½ºÅÛÁß¿¡¼­ ¼öÁ¤µÈ ÆÄÀÏÀÌ ÀÖ´Â ¸ðµÎ(ȤÀº ¸î°³ÀÇ)ÀÇ ¸®ºñÀü¿¡ °áÇÕµÈ Ä¿¹Ô ·Î±× ¸Þ¼¼Áö¿¡ÀÇ ¹®ÀÇ

  4. ÆÄÀÏ ½Ã½ºÅÛÀÇ °¡µ¶ÀÎ"´ýÇÁ"ÀÇ »ý¼º, ÆÄÀÏ ½Ã½ºÅÛÁß¿¡ ÀÖ´Ù ¸®ºñÀüÀÇ ¿ÏÀüÇÑ Ç¥Çö

  5. ´ýÇÁ Æ÷¸ËÀÇ Çؼ®, ´Ù¸¥ Subversion ÀúÀå¼Ò(repository)¾È¿¡ ´ýÇÁ µÈ ¸®ºñÀüÀ» ·ÎµåÇÏ´Â °Í

Subversion°¡ °è¼Ó ÁøÈ­ÇÏ´Â °Í¿¡ µû¶ó, ÀúÀå¼Ò(repository) ÇÁ·Î±×·¥ ¶óÀ̺귯¸®´Â °è¼Ó Áõ°¡ÇÏ´Â ±â´É°ú ¼³Á¤ °¡´ÉÇÑ ¿É¼ÇÀ» ¼­Æ÷Æ®¸¦ Á¦°øÇÑ´Ù À§ÇØ(¶§¹®¿¡), ÆÄÀÏ ½Ã½ºÅÛ ÇÁ·Î±×·¥ ¶óÀ̺귯¸®¿Í ÇÔ²² °è¼Ó °ú ÇÔ²² Ä¿Áø´Ù ±×·¸Áö.


1.1.2. ÀúÀå¼Ò(repository) ¾×¼¼½ºÃþ

¸¸¾à Subverson ÀúÀå¼Ò(repository)ÃþÀÌ,"Åë½Å·ÎÀÇ ÀÌÁ¦(¹ú½á) ÇÑÆíÀÇ ´Ü Á¡" ÀÌ´Ù¸é, ÀúÀå¼Ò(repository) ¾×¼¼½ºÃþÀº, ±× Åë½Å·Î±× ÀÚüÀÇ °ÍÀÔ´Ï´Ù. Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥ ¶óÀ̺귯¸®¿Í ÀúÀå¼Ò(repository) ÀÇ »çÀÌ¿¡ µ¥ÀÌÅ͸¦ »óÈ£ º¯È¯ÇÏ´Â °ÍÀ» ºÎ°úµÈ ÀÌ ÃþÀº libsva_ra¸ðµâ ·Î´õ ÇÁ·Î±×·¥ ¶óÀ̺귯¸®, ±× RA¸ðµâ ÀÚ½Å(ÇöÀç·Î¼­´Â, libsvn_ra_dav, libsvn_ra_local, ±×¸®°í libsvn_ra_svn¸¦ Æ÷ÇÔÇÕ´Ï´Ù), ±×¸®°í Çϳª ÀÌ»óÀÇ RA ¸ðµâ¿¡ ÇÊ¿äÇÑ Ãß°¡ ÀÇ ÇÁ·Î±×·¥ ¶óÀ̺귯¸®, ¿¹¸¦ µé¾î, libsvn_ra_dav °¡ Åë½ÅÇϱâ À§ÇÑ , mod_dav_svn Apache ¸ðµâÀ» Æ÷ÇÔÇÕ´Ï´Ù. mod_dva_svn ¸ðµâÀ» ÀÌ¿ëÇÏÁö ¾ÊÀ» ¶§¿¡´Â, libsvn_ra_svn ÀÇ ¼­¹öÀÎsvnserve°¡ Åë½ÅÇÕ´Ï´Ù.

SubversionÀº, ÀúÀå¼Ò(repository) ¸®¼Ò½º¸¦ ƯÁ¤Çϴµ¥ URL¸¦ ÀÌ¿ëÇϹǷÎ, URL schemaÀÇ ÇÁ·ÎÅäÄݺÎ(º¸ÅëÀº,file:, http:, https:, ȤÀº svn:)´Â ¾î´À RA ¸ðµâÀÌ Åë½ÅÀ» ó¸®ÇÒ±î (À»)¸¦ °áÁ¤Çϱâ À§Çؼ­(¶§¹®¿¡) »ç¿ëµË´Ï´Ù. °¢°¢ÀÇ ¸ðµâÀº, ÇÁ·ÎÅäÄÝÀÇ ¸®½ºÆ® (À»)¸¦ µî·ÏÇÕ´Ï´Ù¸¸, ±×°ÍÀº ¾î¶»°Ô À̾߱âÇϸé ÁÁÀº°¡¸¦ ¾Ë°í ÀÖÀ¸¹Ç·Î, RA ·Î´õ°¡ ½ÇÇà½Ã¿¡ ¾î´À RA¸ðµâÀ» ±× 󸮸¦ À§Çؼ­(¶§¹®¿¡) ÀÌ¿ëÇұ °áÁ¤ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ¾î´À RA¸ðµâÀÌ Subversion Ä¿¸àµå ¶óÀΠŬ¶óÀ̾ðÆ®¿¡ ÀÌ¿ë °¡´ÉÇÑ°¡¸¦ °áÁ¤ÇÒ ¼ö°¡ ÀÖ¾îsvn --version (À»)¸¦ ½ÇÇàÇÏ´Â °ÍÀ¸·Î, ¾î´À ÇÁ·ÎÅäÄÝÀº ¼­Æ÷Æ®ÇÏ°í ÀÖÁö ¾Ê´Ù°í ¸»ÇØ ¿Ã±î (À»)¸¦ ¾Ë ¼ö°¡ ÀÖ½À´Ï´Ù. :

$ svn --version
svn, version 0.25. 0 (dev build)
   compiled Jul 18 2003, 16:25:59 

Copyright (C) 2000-2003 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/

The following repository access (RA) modules are available:

* ra_dav : Module for accessing a repository via WebDAV (DeltaV) protocol.
  - handles 'http' schema
* ra_local : Module for accessing a repository on local disk.
  - handles 'file' schema
* ra_svn : Module for accessing a repository using the svn network protocol.
  - handles 'svn' schema

1.1.2.1. RA-DAV (HTTP/DAV¸¦ »ç¿ëÇÑ ÀúÀå¼Ò(repository) ¾×¼¼½º)

libsvn_ra_dav ÇÁ·Î±×·¥ ¶óÀ̺귯¸®´Â, ¼­¹ö¿Í´Â ´Ù¸¥ ¸Ó½Å»ó¿¡¼­ ½ÇÇàµÇ°í Àִ Ŭ¶óÀ̾ðÆ®¿¡ ÀÇÇØ ÀÌ¿ëµÇµµ·Ï(µíÀÌ) ¼³°èµÇ°í ÀÖ½À´Ï´Ù. Ŭ¶óÀ̾ðÆ®´Â URL¸¦ »ç¿ëÇØ µµ´ÞÇÒ ¼ö°¡ Àִ ƯÁ¤ÀÇ ¸Ó½ÅÀÌ´Ù ±× ¼­¹ö¿Í Åë½ÅÇÕ´Ï´Ù. ¿©±â¼­ ¸»ÇÏ´Â URL´Â,http: ¶Ç´Â https: ÀÇ ÇÁ·ÎÅäÄÝ ºÎºÐÀ» Æ÷ÇÔÇÏ°í ÀÖ´Â °Í °°Àº °ÍÀÔ´Ï´Ù. ¾î¶»°Ô ÀÌ ¸ðµâÀÌ µ¿ÀÛÇÏ´ÂÁö¸¦ ÀÌÇØÇϱâ À§Çؼ­, ÃÖÃÊ·Î ÀúÀå¼Ò(repository) ¾×¼¼½ºÃþÀÇ Æ¯Á¤ÀÇ ¼³Á¤Áß¿¡ ÀÖ´Â °Í ¿ÜÀÇ ¸î°³ÀÇ Å° ÄÄÆÛ³ÍÆ®¿¡ Á¢ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù±×°ÍÀº °­·ÂÇÑ Apache HTTP ¼­¹ö¿Í Neon HTTP/WebDAV Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥ ¶óÀ̺귯¸®ÀÔ´Ï´Ù.

SubversionÀÇ ÁÖµÈ ³×Æ®¿öÅ© ¼­¹ö´Â Apache HTTP ¼­¹öÀÔ´Ï´Ù. Apache ´Â ÃæºÐÈ÷ Å×½ºÆ®µÇ¾î È®Àå °¡´ÉÇÑ open sourceÀÇ ¼­¹ö ÇÁ·Î¼¼½º·Î, ±×°ÍÀº ¼º½ÇÇÑ ¿ëµµ¿¡ ÀÌ¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ±×°ÍÀº ³×Æ®¿öÅ©ÀÇ °íºÎÇÏ¿¡ À¯ÁöÇÒ ¼ö°¡ ÀÖ¾î ¸¹Àº Ç÷§Æû»ó¿¡¼­ µ¿ÀÛÇÕ´Ï´Ù. Apache ¼­¹ö´Â ¸¹Àº ´Ù¸¥ Ç¥ÁØ ÀÎÁõ ÇÁ·ÎÅäÄÝÀ» ¼­Æ÷Æ®ÇØ, ¸¹Àº »ç¶÷µé¿¡ ÀÇÇØ ¼­Æ÷Æ®µÈ ¸ðµâÀ» ÀÌ¿ëÇÏ´Â °ÍÀ¸·Î È®ÀåÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ±×°ÍÀº ¶Ç ³×Æ®¿öÅ© ÆÄÀÌÇÁ¶óÀÎÀ̳ª ij½Ì (¿Í)°ú °°Àº ÃÖÀûÈ­¸¦ ¼­Æ÷Æ®ÇÏ°í ÀÖ½À´Ï´Ù. ¼­¹ö·Î¼­ Apache ¸¦ ÀÌ¿ëÇÏ´Â °Í¿¡ µû¶ó¼­, SubversionÀº ÀÌ·¯ÇÑ ¸ðµç ±â´ÉÀ» ÀÚÀ¯·Ó°Ô ¼Õ¿¡ ³Ö´Â °ÍÀÌ ÇÒ ¼ö ÀÖ½À´Ï´Ù. ±×¸®°í, (Á¤µµ)¸¸Å­ ¾î´À ÆÄÀÌ¾î ¿ù(fire wall)´Â HTTPÀÇ Åë½ÅÀ» ÅëÇϵµ·Ï(µíÀÌ) ¼³Á¤µÇ¾î ÀÖÀ¸¹Ç·Î, ½Ã½ºÅÛ °ü¸® Ã¥ÀÓÀÚ´Â, º¸ÅëÀº ÆÄÀÌ¾î ¿ù(fire wall) ¼³Á¤ (À»)¸¦ º¯°æÇÒ ÇÊ¿äÁ¶Â÷ ¾ø°Ô SubversionÀ» µ¿ÀÛ½Ãų ¼ö°¡ ÀÖ½À´Ï´Ù.

SubversionÀº HTTP¿Í WebDAV(DeltaV µ¹ÃâÇÏ°í)¸¦ »ç¿ëÇØ, Apache ¼­¹ö¿Í Åë½ÅÇÕ´Ï´Ù. ÀÌ°Í¿¡ ´ëÇؼ­´Â, ÀÌ ÀåÀÇ WebDAVÀÇ ¸¶µð¸¦ ºÒ·¯ ÁÖ¼¼¿ä. ±×·¯³ª, °£´ÜÇÏ°Ô ¸»Çϸé, WebDAV¿Í DeltaV ´Â Ç¥ÁØÀûÀÎ HTTP1. 1 ÇÁ·ÎÅäÄÝ ÀÇ È®ÀåÀ¸·Î, ±×°ÍÀº web»ó¿¡¼­ ÆÄÀÏÀÇ °øÀ¯¿Í ¹öÀüÈ­¸¦ °¡´ÉÇÏ°Ô ÇÕ´Ï´Ù. Apache 2.0 Àº mod_dav °¡ ÁغñµÇ¾î ÀÖ¾î, ÀÌ°ÍÀº HTTP ÀÇ DAV È®ÀåÀ» ÀÌÇØÇÏ´Â ¸ðµâÀÔ´Ï´Ù. Subversion ÀÚ½ÅÀº mod_dav_svn ¸¦ ¼­Æ÷Æ®ÇØ ÀÖ½À´Ï´Ù¸¸, ÀÌ°ÍÀº ´Ù¸¥ Apache ¸ðµâ·Î, mod_dav ¿Í ÇùÁ¶ÇØ µ¿ÀÛÇØ, (½ÇÁ¦·Î´Â ±× ¿¬±¸ ÃÖÁ¾ ´Ü°è·Î¼­) Subversion»ó¿¡¼­ÀÇ ±¸Ã¼ÀûÀÎ WebDAV¿Í DeltaVÀÇ ½ÇÀåÀÌ µÇ°í ÀÖ½À´Ï´Ù.

HTTP ³Ñ¾î·Î ÀúÀå¼Ò(repository)¿Í Åë½ÅÇÒ ¶§, RA·Î´õ ÇÁ·Î±×·¥ ¶óÀ̺귯¸®´Â libsvn_ra_dav ¸¦ ¼­¹ö ÇÁ·Î¼¼½º ¸ðµâ·Î¼­ ¼±ÅÃÇÕ´Ï´Ù. Subversion Ŭ¶óÀ̾ðÆ®´Â ÀϹÝÀûÀÎ RA ÀÎÅÍÆäÀ̽º¸¦ È£ÃâÇØ, libsvn_ra_dav ´Â ÀÌ·¯ÇÑ È£ÃâÀ»(±×°ÍÀº ¾ÆÁ÷ ´ë·«ÀûÀÎ SubversionÀÇ µ¿ÀÛÀ» ±¸Ã¼È­ÇÕ´Ï´Ù)À», HTTP/WebDAV ¿ä±¸·Î º¯È¯ÇÕ´Ï´Ù. Neon ÇÁ·Î±×·¥ ¶óÀ̺귯¸®¸¦ »ç¿ëÇØ, libsvn_ra_dav (Àº)´Â ÀÌ·¯ÇÑ ¿ä±¸¸¦ Apache ¼­¹ö¿¡ ¼Û½ÅÇÕ´Ï´Ù. Aapche ´Â ÀÌ·¯ÇÑ ¿ä±¸ (À»)¸¦ ¹Þ¾Æ(Web ºê¶ó¿ìÀú°¡ ÇÏ´Â °Í°ú ¿ÏÀüÈ÷ °°Àº ÀϹÝÀûÀÎ HTTP ¿ä±¸ÀÔ´Ï´Ù¸¸), DAV °ü¸®ÀÇ À§Ä¡·Î¼­ ¼³Á¤µÈ URL¿¡ µ¹¸®°í( httpd.confÆÄÀÏÁßÀÇ Location ÀνºÆ®·°¼ÇÀ» »ç¿ëÇÕ´Ï´Ù), ±× ¿ä±¸¸¦ °íÀ¯ÀÇ mod_dav ¸ðµâ¿¡ °Ç³×ÁÝ´Ï´Ù. ÀûÀýÈ÷ ¼³Á¤µÇ¾î ÀÖÀ¸¸é, mod_dav (Àº)´Â Apache ºÎ¼ÓÀÇ ÀϹÝÀûÀÎ mod_dav_fs °¡ ¾Æ´Ï°í, SubversionÀÇ mod_dav_svn ¸¦ ÆÄÀÏ ½Ã½ºÅÛ¿¡ °ü·ÃÇÑ ¿ä±¸¿¡ ´ëÇؼ­ ÀÌ¿ëÇÏ´Â °ÍÀ» ¾Ë°í ÀÖ½À´Ï´Ù. ±×·¡¼­, ¸¶Áö¸·¿¡´Â, ÀÌ Å¬¶óÀ̾ðÆ®´Â mod_dav_svn ¿Í Åë½ÅÇÕ´Ï´Ù¸¸, ÀÌ°ÍÀº Á÷Á¢ Subversion ÀúÀå¼Ò(repository)Ãþ¿¡ ¹­¾î ÷ºÎ ºÙ¾î ÀÖ´Ù ¹°°ÇÀÔ´Ï´Ù.

ÀÌ°ÍÀÌ ½ÇÁ¦·Î ÀϾ´Â ±³È¯ÀÇ °£·«È­ÇÑ ¼³¸íÀÔ´Ï´Ù. ¿¹¸¦ µé¾î, Subversion ÀúÀå¼Ò(repository)´Â ApacheÀÇ ÀÎÁõ ÀνºÆ®·°¼Ç¿¡ ÀÇÇØ º¸È£µÇ°í ÀÖÀ»Áöµµ ¸ð¸¨´Ï´Ù. ÀÌ°Í¿¡ ÀÇÇØ, ÀúÀå¼Ò(repository)¿Í ÃÖÃÊ·Î Åë½ÅÇÏ·Á°í ÇÏ´Â ½Ãµµ°¡, ÀÎÁõ ºÙ¾î ÀÖ´Â Apache¿¡ µû¶ó¼­ ½ÇÆп¡ ³¡³¯Áöµµ ¸ð¸¨´Ï´Ù. ÀÌ ½ÃÁ¡¿¡¼­, libsvn_ra_dav´Â ¾ÆÆÄÄ¡·ÎºÎÅÍ, ºÒÃæºÐÇÑ ÀÎÁõ ¹Û¿¡ ¾òÀ» ¼ö ¾ø¾ú±â ¶§¹®¿¡ Ŭ¶óÀ̾ðÆ®Ãþ¿¡ °»½ÅµÈ ÀÎÁõ µ¥ÀÌÅ͸¦ ÃëµæÇϱâ À§Çؼ­ Äݹé Çß´Ù, ¶ó°í ÇÏ´Â ÅëÁö¸¦ ¹Þ½À´Ï´Ù. ¸¸¾à ÀÌ µ¥ÀÌÅÍ°¡ ¿Ã¹Ù¸£°Ô ÃëµæÇÒ ¼ö ÀÖÀ¸¸é, À¯Àú´Â, Çã°¡µÈ ÃÖÃÊÀÇ Á¶ÀÛ (À»)¸¦ ½ÇÇàÇÏ´Â, libsvn_ra_davÀÇ ´ÙÀ½ÀÇ ¾ÆÅä¹ÍÀÎ ¿ä±¸¸¦ ã¾Æ, ¸ðµÎ ÇÏÁö¸¸ Àߵ˴ϴÙ. ¸¸¾à ÃæºÐÇÑ ÀÎÁõ Á¤º¸°¡ ÁÖ¾îÁöÁö ¾ÊÀ¸¸é ¿ä±¸´Â ÃÖÁ¾ÀûÀ¸·Î ½ÇÆÐÇØ, Ŭ¶óÀ̾ðÆ®´Â À¯Àú¿¡°Ô ±× ÃëÁö¸¦ º¸°íÇÕ´Ï´Ù.

Neon¿Í Apache¸¦ »ç¿ëÇØ, SubversionÀº ´Ù¸¥ ¿©·¯°¡Áö º¹ÀâÇÑ area¿¡ÀÇ ÀÚÀ¯·Î¿î ±â´ÉÀ» ¾òÀ» ¼öµµ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, ¸¸¾à Neon°¡ OpenSSL ÇÁ·Î±×·¥ ¶óÀ̺귯¸® (À»)¸¦ ã¾Æ³ÂÀ» °æ¿ì, ±×°ÍÀº Subversion Ŭ¶óÀ̾ðÆ®¿¡ SSL·Î ¾ÏȣȭµÇ¾ú´Ù Åë½ÅÀ», Apache ¼­¹ö·Î ÇÏ´Â °ÍÀ» ÀÎÁ¤ÇÕ´Ï´Ù. (±× °íÀ¯ÀÇ mod_ssl ´Â"±× ¾ð¾î¸¦ À̾߱âÇÕ´Ï´Ù"). ¶Ç, Neon ÀڽŰú ApacheÀÇ mod_deflate´Â"deflate"¾Ë°í¸®ÁòÀ» ÀÌÇØÇÒ ¼ö ÀÖÀ¸¹Ç·Î( PKZIP¿Í gzip ÇÁ·Î±×·¥À¸·Î ÀÌ¿ëµÇ°í ÀÖ´Â °Í°ú °°Àº °ÍÀÔ´Ï´Ù¸¸), ¿ä±¸´Â º¸´Ù ÀÛÀº ¾ÐÃàµÈ µ¢¾î¸®·Î¼­ Åë½Å·Î¸¦ È帨´Ï´Ù. Subversiont°¡ ÇâÈÄ ¼­Æ÷Æ®ÇÏ°í ½Í´Ù°í »ý°¢ÇÏ°í ÀÖ´Â °Í ¿ÜÀÇ º¹ÀâÇÑ ±â´É (À¸)·Î¼­´Â, ÀÚµ¿ÀûÀ¸·Î ¼­¹öÃøÀÇ ¸®µð·ºÆ®¸¦ ó¸®ÇÏ´Â °Í(¿¹¸¦ µé¾î, ÀúÀå¼Ò(repository)°¡ ´Ù¸¥ »õ·Î¿î URL·Î À̵¿ÇÑ °Í °°Àº °æ¿ì)³ª, HTTP ÆÄÀÌÇÁ¶óÀÎ ÀÇ ÇýÅÃÀ» ¹Þ´Â °Í, µîÀÔ´Ï´Ù.


1.1.2.2. RA-SVN (°íÀ¯ÀÇ ÇÁ·ÎÅäÄÝ¿¡ ÀÇÇÑ ÀúÀå¼Ò(repository) ¾×¼¼½º)

Ç¥ÁØÀûÀÎ HTTP/WebDAV ÇÁ·ÎÅäÄÝ¿¡ °¡¼¼ÇØ, SubversionÀº °íÀ¯ÀÇ ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÏ´Â RAÀÇ ½ÇÀåµµ ÁغñÇØ ÀÖ½À´Ï´Ù. libsvn_ra_svn ¸ðµâÀº °íÀ¯ÀÇ ³×Æ®¿öÅ© ¼ÒÄÏ Á¢¼ÓÀ» ½ÇÀåÇØ, ÀúÀå¼Ò(repository)°¡ ÀÖ´Â ½ºÅĵå¾ó·Ð ¼­¹ö (¿Í)°ú Åë½ÅÇÏ´Â svnserveÀԴϴ٠Ŭ¶óÀ̾ðÆ®´Âsvn:// schema·Î ÀúÀå¼Ò(repository)¿¡ ¾×¼¼½º·Î ¿É´Ï´Ù.

ÀÌ RA ½ÇÀåÀº, ÀüÀÇ ¸¶µð·Î Á¢ÇÑ ApacheÀÇ ÀÌÁ¡ÀÇ ´ëºÎºÐÀÌ ºÎÁ·ÇÏ°í ÀÖ½À´Ï´Ù. ±×·¯³ª, ±×°ÍÀº ¾î¶² Á¾·ùÀÇ ½Ã½ºÅÛ °ü¸® Ã¥ÀÓÀÚ¸¦ ²ø¾î´ç±æÁöµµ ¸ð¸¨´Ï´Ù. ±×°ÍÀº ¸Å¿ì °£´ÜÇÏ°Ô ¼³Á¤ÇØ ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. svnserve ÇÁ·Î¼¼½ºÀÇ ¼³Á¤Àº, °ÅÀÇ ¼ø°£ÀûÀ¸·Î ³¡³³´Ï´Ù. ¶Ç ±×°ÍÀº Apacheº¸´Ù (ÄÚµåÇà¼ö¶ó°í ÇÏ´Â Àǹ̷Î) ÈξÀ ÀÛ°í, ½ÃÅ¥·¯Æ¼³ª ´Ù¸¥ »çÁ¤¿¡ ÀÇÇѴ٠üũµµ ÈξÀ ¿ëÀÌÇÕ´Ï´Ù. ÇÑÃþ ´õ ¸î°³ÀÇ ½Ã½ºÅÛ °ü¸® Ã¥ÀÓÀÚ´Â ¹ú½á SSH ÀÇ ½ÃÅ¥·¯Æ¼ ÀÎÇÁ¶ó¸¦ °¡Áö°í ÀÖ¾î, Subversion¿¡µµ ±×°ÍÀ» »ç¿ëÇÏ°Ô ÇÏ°í ½Í´Ù (ÀÌ)¶ó°í »ý°¢ÇÏ°í ÀÖÀ»Áöµµ ¸ð¸¨´Ï´Ù. ra_svn ¸¦ »ç¿ëÇϴ Ŭ¶óÀ̾ðÆ®´Â SSH ¸¦ °³ÀÔ½ÃÄÑ ÇÁ·ÎÅäÄÝÀ» °£´ÜÇÏ°Ô ÅͳΠÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.


1.1.2.3. RA-Local (ÀúÀå¼Ò(repository)¿¡ÀÇ Á÷Á¢ÀûÀÎ ¾×¼¼½º)

Subversion ÀúÀå¼Ò(repository)¿ÍÀÇ ¸ðµç Åë½ÅÀÌ Å« ¼­¹ö ÇÁ·Î¼¼½º¿Í ³×Æ®¿öÅ©Ãþ (À»)¸¦ ÇÊ¿ä·Î ÇÏ´Â °ÍÀº ¾Æ´Õ´Ï´Ù. ·ÎÄà µð½ºÅ© ¿ì¿¡³ë ÀúÀå¼Ò(repository)¿¡ ¾×¼¼½º ÇÏ°í ½ÍÀº °Í»ÓÀÇ À¯Àú¿¡°Ô À־´Â,file: ¸¦ »ç¿ëÇÒ ¼ö°¡ ÀÖ¾î libsvn_ra_local°¡ Á¦°øÇÏ´Â ±â´ÉÀ» »ç¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ÀÌ RA ¸ðµâÀº Á÷Á¢ ÀúÀå¼Ò(repository)¿Í ÆÄÀÏ ½Ã½ºÅÛ ÇÁ·Î±×·¥ ¶óÀ̺귯¸®¿Í °áÇյǹǷÎ, ³×Æ®¿öÅ© Åë½ÅÀº ÀüÇô ÇÊ¿ä ¾ø½À´Ï´Ù.

SubversionÀºfile: URLÀÇ ÀϺημ­ localhost Àΰ¡, ÇÏ´ÃÀ» ÀÎ ¼­¹ö ¸íĪÀ» Æ÷ÇÔÇÏ´Â °ÍÀ» ¿ä±¸ÇØ, Æ÷Åä ÁöÁ¤Àº ¾ø½À´Ï´Ù. ¸»Åõ¸¦ ¹Ù²Ù¸é(ÀÚ), URL´Â ¹«¾ùÀΰ¡, file://localhost/path/to/repos Àΰ¡ file:///path/to/repos (¿Í)°ú °°Àº ÇüÅÂÀÇ °ÍÀÌ µË´Ï´Ù.

°Ô´Ù°¡ SubversionÀÇfile:URL´Â º¸Åë web ºê¶ó¿ìÀú°¡ file:URL°¡ ÇÏ´Â ¹æ¹ý¿¡¼­´Â ÀÌ¿ëÇÒ ¼ö ¾ø´Â °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä. Åë»óÀÇ web ºê¶ó¿ìÀú·Î file:URL¸¦ ¿­¶÷ÇÏ·Á°í ¸»ÇÒ ¶§, ÆÄÀÏ ½Ã½ºÅÛÀ» Á÷Á¢ Á¶»çÇÏ´Â °ÍÀ¸·Î ±× ÀÚ¸®¼Ò¿¡ ÀÖ´Â ÆÄÀÏÀÇ ³»¿ëÀ» Àоîµé¿© Ç¥½ÃÇÕ´Ï´Ù. ±×·¯³ª, SubversionÀÇ ¸®¼Ò½º´Â °¡»ó ÆÄÀÏ ½Ã½ºÅÛÁß¿¡ ÀÖ¾î, (>ÂüÁ¶) ´ç½ÅÀÇ ºê¶ó¿ìÀú´Â ±× ÆÄÀÏ ½Ã½ºÅÛÀ» ¾î¶»°Ô ÀÐÀ¸¸é ÁÁÀº°¡ ÀÌÇØÇÒ ¼ö ¾øÀ» °ÍÀÔ´Ï´Ù.


1.1.2.4. Your RA Library Here

ÇÑÃþ ´õ ´Ù¸¥ ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇØ SubversionÀÇ ÀúÀå¼Ò(repository)¿¡ ¾×¼¼½º ÇÏ°í ½ÍÀ¸¸é ¸»ÇÏ´Â »ç¶÷¿¡°Ô ÀÖ¾î¾ß¸¸, ¾î°¼­ ÀúÀå¼Ò(repository) ¾×¼¼½ºÃþÀÌ ¸ðµâÈ­µÇ°í ÀÖ´Ù ÀϱîÇÏ°í ¸»ÇÏ´Â ÀÌÀ¯°¡ µË´Ï´Ù. °³¹ßÀÚ´Â ´Ù¸¥ ÇÑÂÊÀ¸·Î RA ÀÎÅÍÆäÀ̽º¸¦ ½ÇÀåÇÑ´Ù »õ·Î¿î ÇÁ·Î±×·¥ ¶óÀ̺귯¸®¸¦ °£´ÜÇÏ°Ô ¾µ ¼ö°¡ ÀÖ¾î ÀÌÁ¦(¹ú½á) ÇÑÆíÀ¸·Î ±× ÀúÀå¼Ò(repository)¿Í Åë½ÅÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. »õ·Î¿î ÇÁ·Î±×·¥ ¶óÀ̺귯¸®´Â ÀÌ¹Ì Á¸ÀçÇÏ°í ÀÖ´Â ³×Æ®¿öÅ© ÇÁ·ÎÅäÄÝÀ» ÀÌ¿ëÇÒ ¼öµµ ÀÖ°í, ½º½º·Î °³¹ßÇÑ °ÍÀÌ¶óµµ ÁÁ½À´Ï´Ù. ÇÁ·Î¼¼½º°£ Åë½Å(IPC) È£ÃâÀ» »ç¿ëÇÒÁöµµ ¸ð¸£Áö¾Ê°íÁ¶±Ý ¹Ùº¸ ÀÏÁöµµ ¾Ë·ÁÁöÁö ¾Ê½À´Ï´Ù¸¸e-mail º£À̽ºÀÇ ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÏ´Â °Íµµ ÇÒ ¼ö ÀÖ½À´Ï´Ù. SubversionÀº API¸¦ Á¦°øÇØ, ´ç½ÅÀº ÀÚ½ÅÀÇ »ó»ó¼ºÀ» Á¦°øÇÑ´Ù, ¶ó°í.


1.1.3. Ŭ¶óÀ̾ðÆ®Ãþ

Ŭ¶óÀ̾ðÆ®Ãø¿¡¼­ º¸¸é(ÀÚ), SubversionÀÇ ÀÛ¾÷ Ä«ÇÇ´Â ¸ðµç 󸮰¡ ÀϾ´Â Àå¼ÒÀÔ´Ï´Ù. Ŭ¶óÀ̾ðÆ®Ãø ÇÁ·Î±×·¥ ¶óÀ̺귯¸®¿¡ ÀÇÇØ ½ÇÀåµÇ´Â ±â´ÉÀº, ÀÛ¾÷ Ä«ÇÇÀÇ °ü¸®¶ó°í ÇÏ´Â ´Ù¸¸ ÇϳªÀÇ ¸ñÀûÀ¸·Î À§ÇØ(¶§¹®¿¡) Á¸ÀçÇÕ´Ï´Ù·ÎÄÃÀÎ Àå¼Ò¿¡ ÇϵîÀÇ ÇüÅ·ΠÁ¦°øµÈ´Ù ÆÄÀÏ°ú ´Ù¸¥ ¼­ºê µð·ºÅ丮°¡ ÀÖ´Â µð·ºÅ丮°¡, Çϳª ÀÌ»óÀÇ ÀúÀå¼Ò(repository) À§Ä¡¸¦ ¹Ý¿µÇÑ °ÍÀ¸·Î ÇØ, ÀúÀå¼Ò(repository) ¾×¼¼½ºÃþ°úÀÇ »çÀÌÀÇ º¯°æÀ» ÀüÇϰųª ÇÕ´Ï´Ù.

SubversionÀÇ ÀÛ¾÷ Ä«ÇÇ ÇÁ·Î±×·¥ ¶óÀ̺귯¸®, libsvn_wc ´Â ÀÛ¾÷ Ä«ÇÇÁßÀÇ µ¥ÀÌÅÍÀÇ °ü¸®¿¡ Á÷Á¢ÀûÀΠåÀÓÀ» Áý´Ï´Ù. ÀÌ°ÍÀ» Çϱâ À§Çؼ­(¶§¹®¿¡), ÀÌ ÇÁ·Î±×·¥ ¶óÀ̺귯¸® (Àº)´Â Ưº°ÇÑ ¼­ºê µð·ºÅ丮¾È¿¡ °¢°¢ÀÇ ÀÛ¾÷ Ä«ÇÇ¿¡ ´ëÇÑ °ü¸® Á¤º¸ (À»)¸¦ °Ý³³ÇÕ´Ï´Ù. ÀÌ ¼­ºê µð ·ºÅä´Â. svn ¶ó°í ÇÑ´Ù À̸§ÀÔ´Ï´Ù¸¸, ¾î´À ÀÛ¾÷ Ä«ÇÇÁß¿¡µµ Á¸ÀçÇØ, °ü¸®¿¡ °ü°èÇÑ µ¿ÀÛÀ» Çϱâ À§ÇÑ »óŸ¦ ±â·ÏÇØ, ÀÛ¾÷ ½ºÆäÀ̽º¸¦ È®º¸Çϱâ À§ÇÑ ´Ù¾çÇÑ ÆÄÀÏÀ̳ª µð·ºÅ丮¸¦ Æ÷ÇÔÇÏ°í ÀÖ½À´Ï´Ù. CVS¿¡ Ä£¼÷ÇÔÀÌ ÀÖ´Â »ç¶÷À̶ó¸é, ÀÌ. svn ¼­ºê µð·ºÅ丮´Â, ±× ¸ñÀûÀ¸·Î ÇØ CVSÀÇ ÀÛ¾÷ Ä«ÇÇ¿¡ ÀÖ´Â °ü¸® µð·ºÅ丮CVS ¿¡ Àß ºñ½ÁÇÑ °ÍÀ» ¾Ë ¼ö ÀÖ´Ù°í »ý°¢ÇÕ´Ï´Ù. . svn °ü¸® area¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ °ÍÀº, ÀÌ ÀåÀÇ >(À»)¸¦ ÂüÁ¶ÇØ ÁÖ¼¼¿ä

Subversion Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥ ¶óÀ̺귯¸® libsvn_client ´Â ±¤¹üÀ§ÀÇ ¿ªÇÒÀ» Áý´Ï´Ù. ±× ÀÏÀº, ÀÛ¾÷ Ä«ÇÇ ÇÁ·Î±×·¥ ¶óÀ̺귯¸®ÀÇ ±â´É°ú ÀúÀå¼Ò(repository) ¾×¼¼½ºÃþ ÀÇ ±â´ÉÀ» ¹­´Â °ÍÀ¸·Î, ÀϹÝÀûÀÎ ¸®ºñÀü Á¦¾î¸¦ ½ÇÇàÇÏ°í ½Í´Ù°í »ý°¢ÇÑ´Ù ¸ðµç ¾îÇø®ÄÉÀ̼ǿ¡ ÃÖ»óÁ¤µµÀÇ API¸¦ Á¦°øÇÏ´Â °ÍÀÔ´Ï´Ù. ¿¹¸¦ µé¾î svn_client_checkout ÇÔ¼ö´Â Àμö·Î¼­ URL¸¦ ÃëÇÕ´Ï´Ù. ÀÌ ÇÔ¼ö´Â URL¸¦ RAÃþ¿¡ ³ª, ƯÁ¤ÀÇ ÀúÀå¼Ò(repository)¿¡ ÀÎÁõµÇ¾ú´Ù ¼¼¼ÇÀ» ¿±´Ï´Ù. ±×¸®°í ±× ÀúÀå¼Ò(repository)¿¡ ƯÁ¤ÀÇ Æ®¸®¸¦ ÁöÁ¤ÇØ, ÀÌ Æ®¸®¸¦ ÀÛ¾÷ Ä«ÇÇ ¶óÀ̺귯¸®¿¡ º¸³À´Ï´Ù¸¸, À̹øÀº ±× ÇÁ·Î±×·¥ ¶óÀ̺귯¸®°¡ ÀÛ¾÷ Ä«ÇÇ Àüü¸¦ µð½ºÅ©¿¡ ±âÀÔÇÕ´Ï´Ù(. svn µð·ºÅ丮¸¦ Æ÷ÇÔÇÑ ¸ðµç Á¤º¸).

Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥ ¶óÀ̺귯¸®´Â ¾î¶°ÇÑ ¾îÇø®ÄÉÀ̼ÇÀ¸·ÎºÎÅ͵µ ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù °°°Ô ¼³°èµÇ°í ÀÖ½À´Ï´Ù. SubversionÀÇ ¿ø½Ã ÄÚµå´Â Ç¥ÁØÀûÀÎ Ä¿¸àµå ¶óÀΠŬ¶óÀ̾ðÆ®¸¦ Æ÷ÇÔÇÏ°í ÀÖÀ¸¹Ç·Î, ±× Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥ ¶óÀ̺귯¸®ÀÇ À§¿¡ ÁÁ¾ÆÇÒ »Ó(¸¸Å­) GUI Ŭ¶óÀ̾ðÆ®¸¦ ¾µ ¼ö°¡ ÀÖ½À´Ï´Ù. SubversionÀÇ »õ·Î¿î GUI(ȤÀº ½ÇÁ¦·Î´Â »õ·Î¿î Ŭ¶óÀ̾ðÆ®)´Â, Ä¿¸àµå ¶óÀΠŬ¶óÀ̾ðÆ®¸¦ Æ÷ÇÔÇÑ ÃÌƼ ÀÖ°í ·¡ÆÛÀÏ ÇÊ¿ä´Â ¾ø½À´Ï´Ù. ±×°ÍÀº, libsvn_client API ¸¦ ÅëÇؼ­ Ä¿¸àµå ¶óÀΠŬ¶óÀ̾ðÆ® ÇÏÁö¸¸ »ç¿ëÇÏ°í ÀÖ´Â °Í°ú °°Àº ±â´É, µ¥ÀÌÅÍ, ÄݹéÀÇ ±¸Á¶¿¡ ¿ÏÀüÇÏ°Ô ¾×¼¼½º ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.


1.2. APIÀÇ ÀÌ¿ë

Subversion ÇÁ·Î±×·¥ ¶óÀ̺귯¸® API¸¦ »ç¿ëÇÑ ¾îÇø®ÄÉÀ̼ÇÀÇ °³¹ßÀº ºñ±³Àû ¼øÁøÇÑ ÇüÅ·ΠÁøÇàµË´Ï´Ù. ¸ðµç ÇØ´õ ÆÄÀÏÀº ¼Ò½º Æ®¸®ÀÇ subversion/include ¿¡ ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ ÇØ´õ´Â ¿ø½Ã ÄÚµå·ÎºÎÅÍ SubversionÀ» ¸¸µé¾î ÀνºÅç Çϸé(ÀÚ), ±× ¸Ó½ÅÀÇ ½Ã½ºÅÛ ÇØ´õÀÇ µÎ´Â °÷¼Ò¿¡ Ä«Çǵ˴ϴÙ. ÀÌ·¯ÇÑ ÇØ´õ¿¡´Â Subversion ÇÁ·Î±×·¥ ¶óÀ̺귯¸®ÀÇ À¯Àú¿¡ ÀÇÇØ ¾×¼¼½º ÇÒ ¼ö ÀÖ´Â °Í °°Àº ±â´É°ú ÇüÅÂÀÇ ¸ðµÎ°¡ ÀÖ½À´Ï´Ù.

ÃÖÃÊ·Î Á¶½ÉÇÏÁö ¾ÊÀ¸¸é ¾È µÇ´Â °ÍÀº SubversionÀÇ µ¥ÀÌÅÍÇü°ú ÇÔ¼ö´Â °íÀ¯ÀÇ À̸§ °ø°£¿¡ ÀÇÇØ ºÐ¸®µÇ¾î ÀÖ´Â °ÍÀÔ´Ï´Ù. ¸ðµç °ø°øÀûÀÎ Subversion ½Éº¼¸íÀº"svn_"·Î ½ÃÀ۵Ǿî, ±× ½Éº¼ÀÌ Á¤Àǵǰí ÀÖ´Â ÇÁ·Î±×·¥ ¶óÀ̺귯¸®ÀÇ ÂªÀº Äڵ尡 °è¼ÓµÇ¾î, ("wc"¶óµçÁö, "client"¶óµçÁö,"fs"µî), ¾ð´õ ½ºÄھư¡ Çϳª ¿Í, ("_") , ¸¶Áö¸·¿¡ ½Éº¼¸íÀÇ ³ª¸ÓÁöÀÇ ºÎºÐÀÌ ¿É´Ï´Ù. ÇÑÁ¤ÀûÀ¸·Î °ø°øÀûÀÎ ÇÔ¼ö(ÇÁ·Î±×·¥ ¶óÀ̺귯¸®ÁßÀÇ ¿ø½Ã ÆÄÀÏ »çÀÌ¿¡¼­´Â ÀÌ¿ëµÇÁö¸¸, ÇÁ·Î±×·¥ ¶óÀ̺귯¸®ÀÇ ¹Û¿¡¼­´Â ÀÌ¿ëµÇÁö ¾Ê°í, ÇÁ·Î±×·¥ ¶óÀ̺귯¸® µð·ºÅ丮 ÀÚ½ÅÀÇ ³»ºÎ¿¡¼­¸¸ ÂüÁ¶ °¡´ÉÇÑ °Í)Àº ÀÌ ¸í¸í ±Ô¾à°ú´Â Â÷ÀÌ, ÇÁ·Î±×·¥ ¶óÀ̺귯¸® ÄÚµå ÀÇ ÈÄ¿¡ ¾ð´õ ½ºÄھư¡ Çϳª ¿À´Â ´ë½Å¿¡, µÑ ¿É´Ï´Ù ("__"). ¾î´À ¿ø½Ã ÆÄÀÏ·Î »çÀûÀÎ ÇÔ¼ö´Â Ư¼öÇÑ Á¢µÎ»ç¸¦ °¡ÁöÁö ¾Ê°í,static¼±¾ðµË´Ï´Ù. ¹°·Ð ÄÄÆÄÀÏ·¯´Â ÀÌ·¯ÇÑ ¸í¸í ±Ô¾àÀ» Çؼ®ÇÕ´Ï´Ù¸¸, ¾î´À ÇÔ¼öÀÇ ½ºÄÚÇÁ³ª µ¥ÀÌÅÍÇüÀ» ºÐ¸íÈ÷ Çϴµ¥ Å« µµ¿òÀÌ µË´Ï´Ù.


1.2.1. Apache Portable Runtime ÇÁ·Î±×·¥ ¶óÀ̺귯¸®

Subversion ÀÚ½ÅÀÇ µ¥ÀÌÅÍÇü°ú ÇÔ²²,"apr_"·Î ½ÃÀ۵Ǵ µ¥ÀÌÅÍÇü¿¡ÀÇ ÂüÁ¶¸¦ ¸¹ÀÌ º¸ÀÌ´Â ÀÏÀÌ ÀÖ´Â ÀÌ°ÍÀº Apache ÀÇ Portable Runtime (APR) ÇÁ·Î±×·¥ ¶óÀ̺귯¸®ÀÔ´Ï´Ù. APR ´Â Apache ÀÇ °¡¹ÝÀÎ ÇÁ·Î±×·¥ ¶óÀ̺귯¸®ÀÔ´Ï´Ù¸¸, ¿ø·¡ ApacheÀÇ ¼­¹ö ÄÚµåÀÇ OSÀÇÁ¸ÀÇ ºÎºÐÀ» OSºñÀÇÁ¸ÀÇ ºÎºÐÀ¸·ÎºÎÅÍ ºÐ¸®Çϱâ À§Çؼ­ ¸¸µé¾îÁ³½À´Ï´Ù. °á°ú´Â, OS ¸¶´Ù, Á¶±Ý, ȤÀº Å©°Ô ´Ù¸¥ Á¶ÀÛÀ» ½ÇÇàÇÑ´Ù À¯ÀÍÀÇ Ãß»óÀûÀÎ API¸¦ Á¦°øÇÏ°Ô µÇ¾ú½À´Ï´Ù. Apache HTTP ¼­¹ö´Â ºÐ¸íÇÏ°Ô APR ÇÁ·Î±×·¥ ¶óÀ̺귯¸®ÀÇ ÃÖÃÊÀÇ ÀÌ¿ëÀÚ¿´Áö¸¸, Subversion °³¹ßÀÚ´Â °ð¹Ù·Î APR¸¦ »ç¿ëÇÏ´Â °ÍÀÇ Á߿伺À» ´«Ä¡Ã«½À´Ï´Ù. ÀÌ°ÍÀº ½ÇÁ¦·Î Subversion ÀÚ½ÅÁß¿¡ ÀüÇô OS¿¡ ÀÇÁ¸ÇÏ°í ÀÖÁö ¾Ê´Â ÄÚµåÀÇ ºÎºÐÀÌ ÀÖ´Â °ÍÀ» ÀÇ¹Ì ÇÕ´Ï´Ù. °Ô´Ù°¡ Subversion Ŭ¶óÀ̾ðÆ®´Â ¼­¹ö°¡ ÄÄÆÄÀÏ ÇØ ½ÇÇà ÇÏ´Â Àå¼ÒÀÌ¸é ¾îµð¿¡¼­¶óµµ ½ÇÇàÇÒ ¼ö ÀÖ´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù. Çö½ÃÁ¡¿¡¼­´Â ÀÌ·¯ÇÑ OS¿¡´Â, Unix ÁÁ¾ÆÇÏ´Â ¸ðµÎ, Win32, BeOS, OS/2 ±×¸®°í Mac OS X ÇÏÁö¸¸ Æ÷ÇԵ˴ϴÙ.

operating system°£¿¡ ´Ù¸¥ ½Ã½ºÅÛ ÄÝÀÇ ÀÏ°üÇß´Ù ½ÇÀåÀ» Á¦°øÇÏ´Â °Í¿¡ ÀÔ¿¡ ¹°¾î, [3] APR ´Â Subversion°¡ ¸¹Àº µ¶ÀÚÀûÀÎ µ¥ÀÌÅÍÇü¿¡ Á÷Á¢ ¾×¼¼½º ÇÏ´Â °ÍÀ» °¡´ÉÇÏ°Ô ÇÕ´Ï´Ù¸¸, °Å±â¿¡´Â, µ¿ÀûÀÎ ¹è¿­À̳ª Çؽà Å×À̺íÀÌ ÀÖ½À´Ï´Ù. Subversion ´Â ¿ø½Ã ÄÚµåÁß¿¡¼­ ÀÌ·¯ÇÑ ÇüŸ¦ È®ÀåÇØ ÀÌ¿ëÇÕ´Ï´Ù. ±×·¯³ª, ¾Æ¸¶ °¡Àå ±¤¹üÀ§ÇÏ°Ô ÀÌ¿ëµÇ°í ÀÖ´Â APR µ¥ÀÌÅÍÇüÀº, ´ëºÎºÐ ¸ðµç Subversion API prototype¿¡ ³ªÅ¸³³´Ï´Ù¸¸, apr_pool_tÀÔ´Ï´Ù APRÀÇ ¸Þ¸ð¸®ÇÁ¸£ÀÔ´Ï´Ù. Subversion ´Â Ç®À» ³»ºÎÀûÀ¸·Î ¸ðµç ¸Þ¸ð¸® È®º¸ ÇÏÁö¸¸ ÇÊ¿äÇÑ °æ¿ì¿¡ ÀÌ¿ëÇÕ´Ï´Ù. (´Ù¸¸, ¿ÜºÎ ÇÁ·Î±×·¥ ¶óÀ̺귯¸®°¡ ±× API¸¦ ÅëÇؼ­ ÁÖ°í ¹Þ´Â µ¥ÀÌÅÍÀÇ ¸Þ¸ð¸® ¸Þ´ÏÁö¸ÕÆ®¿¡ ÀÌ°Í°ú ´Ù¸¥ Çü½ÄÀ» ¿ä±¸ÇÏÁö ¾Ê´Â ÇÑ¿¡ µÎ¾î, ÀÔ´Ï´Ù. ) [4] ±×¸®°í, Subversion API ¿¡ ´ëÇÑ ÄÚµùÀº °°Àº °ÍÀÌ ¿ä±¸µÈ´Ù (¶æ)ÀÌÀ¯°¡ ¾Æ´Õ´Ï´Ù¸¸, ÇÊ¿äÇÑ Àå¼Ò¿¡¼­´Â API ÇÔ¼ö¸¦ À§Çؼ­(¶§¹®¿¡) pool ¸¦ ÁغñÇÑ´Ù (ÀÏ)°ÍÀº ¿ä±¸µË´Ï´Ù. ÀÌ°ÍÀº APR µµ ¸µÅ© ÇÒ ÇÊ¿ä°¡ ÀÖ´Â Subversion API ÀÇ À¯Àú´Âapr_initialize()¸¦ ºÒ·¯ APR ÇϺÎÁ¶Á÷ (À»)¸¦ ÃʱâÈ­ÇÒ ÇÊ¿ä°¡ ÀÖ¾î, ±×¸®°í Subversion API È£ÃâÀ» ÀÌ¿ëÇϱâ À§Çؼ­ pool ¸¦ ÁغñÇÏÁö ¾ÊÀ¸¸é ¾È µÇ´Â, À̶ó´Â °ÍÀÌ µË´Ï´Ù. ÀÚ¼¼ÇÑ °ÍÀº >(À»)¸¦ ºÁ ÁÖ¼¼¿ä.


1.2.2. URL ¿Í Path ÀÇ ¿ä±¸

Subversion ÀüüÀÇ ¹®Á¦·Î¼­ÀÇ ¸®¸ðÆ® ¹öÀü °ü¸® Á¶ÀÛ¿¡¼­´Â, ±¹Á¦È­(i18n) ÀÇ ¼­Æ÷Æ®¸¦ µû¶ó°¡´ÂµéÀΰ¡ ÁÖÀÇÇØ µÑ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. °á±¹,"¸®¸ðÆ®"°¡,"¿ÀÇǽº ÀÌ¿ÜÀÇ Àå¼Ò"¸¦ ÀǹÌÇÑ´Ù¸é, ±×°ÍÀº "Àü¼¼°è·ÎºÎÅÍ"¶ó°í ÇÏ´Â ÀǹÌÀ̱⵵ ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ »óȲ¿¡ ´ëÀÀÇϱâ À§Çؼ­ SubversionÀÇ Æнº Àμö¸¦ ÃëÇÏ´Â, ¸ðµç ÆÛºí¸¯ ÀÎÅÍÆäÀ̽º´Â Æнº°¡ Á¤±ÔÈ­µÇ¾î UTF-8À¸·Î encode µÇ°í ÀÖ´Â °ÍÀ¸·Î ÇÕ´Ï´Ù. ÀÌ°ÍÀº ¿¹¸¦ µé¾î, libsvn_client ÀÎÅÍÆäÀ̽º¸¦ È£ÃâÇÏ´Â, »õ·Î¿î Ŭ¶óÀ̾ðÆ® ¹ÙÀ̳ʸ®´Â ¸ðµÎ, Subversion ÇÁ·Î±×·¥ ¶óÀ̺귯¸®¿¡ Æнº¸¦ °Ç³×ÁØ´Ù Àü¿¡, ¿ì¼± Æнº¸¦ ·ÎÄà ÄÚµùÀ¸·ÎºÎÅÍ UTF-8À¸·Î º¯È¯ÇÏÁö ¾ÊÀ¸¸é ¾ÈµÇ¾î, Subversion ·ÎºÎÅÍÀÇ °á°ú Æнº¸¦, Subversion ÀÌ¿ÜÀÇ ¸ñÀûÀ¸·Î ÀÌ¿ëÇϱâ Àü¿¡´Â ·ÎÄà ÄÚµù¿¡ À纯ȯÇÏÁö ¾ÊÀ¸¸é ¾È µÈ´Ù°í ÇÏ´Â °ÍÀÔ´Ï´Ù. Çà¿îÀÇ ÀÏ·Î, SubversionÀº ÀÌ·¯ÇÑ º¯È¯ÀÌ ÇÊ¿äÇÑ ÀÓÀÇÀÇ ÇÁ·Î±×·¥ÀÌ ÀÌ¿ëÇÒ ¼ö ÀÖ´Â °Í °°Àº ÇÔ¼ö¸¦ ÁغñÇØ ÀÖ½À´Ï´Ù (subversion/include/svn_utf.h¸¦ ÂüÁ¶ÇØ ÁÖ¼¼¿ä).

¶Ç, Subversion API ´Â ¸ðµç URL Àμö°¡ ¿Ã¹Ù¸£°í URI encode µÇ°í ÀÖ´Ù °ÍÀ» ¿ä±¸ÇÕ´Ï´Ù. ±×·¡¼­ My File.txt¶ó´Â À̸§ÀÇ ÆÄÀÏ URL¸¦, file:///home/username/My File.txt (¿Í)°ú °Ç³×ÁÖ´Â ´ë½Å¿¡, file:///home/username/My%20File.txt (¿Í)°ú °Ç³×ÁÖÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù. ¿ª½Ã SubversionÀº ¾îÇø®ÄÉÀ̼ÇÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ´Â ÇïÆÛ ÇÔ¼ö¸¦ ÁغñÇØ ÀÖ½À´Ï´Ù svn_path_uri_encode ¿Í svn_path_uri_decode¸¦ »ç¿ëÇØ °¢°¢ URI ÀÇ encode¿Í µðÄڵ带 ÇÒ ¼ö ÀÖ½À´Ï´Ù.


1.2.3. C ¿Í C++ÀÌ¿ÜÀÇ ¾ð¾îÀÇ ÀÌ¿ë

C¾ð¾î ÀÌ¿ÜÀÇ °Í°ú Á¶ÇÕÇØ Subversion ÇÁ·Î±×·¥ ¶óÀ̺귯¸®¸¦ »ç¿ëÇϴµ¥ Èï¹Ì°¡ Àִٸ鿹¸¦ µé¾î PythonÀÇ ½ºÅ©¸³Æ®³ª Java ¾îÇø®ÄÉÀÌ¼Ç SubversionÀº Simplified Wrapper and Interface Generator (SWIG)¶ó°í ÇÏ´Â ÇüÅ ±×¸®°í Á¶±Ý ¼­Æ÷Æ®ÇÏ°í ÀÖ½À´Ï´Ù. Subversion¿ëÀÇ SWIG´Â, subversion/bindings/swig¿¡ ÀÖ¾î, õõÈ÷ ÀÌ¿ë °¡´ÉÇÑ »óÅ·ΠÀÚ¶ó°í ÀÖ½À´Ï´Ù. ÀÌ°ÍÀ» »ç¿ëÇϸé, ½ºÅ©¸³Æ® ¾ð¾î °íÀ¯ÀÇ µ¥ÀÌÅÍÇüÀ», SubversionÀÇ CÇÁ·Î±×·¥ ¶óÀ̺귯¸®·Î ÇÊ¿äÇÑ µ¥ÀÌÅÍÇüÀ¸·Î º¯È¯ÇÏ´Â ³ªÆÈÀ» »ç¿ëÇØ Subversion API ¸¦ °£Á¢ÀûÀ¸·Î È£ÃâÇÒ ¼ö°¡ ÀÖ°Ô µË´Ï´Ù.

¾ð¾î Á¦ÈÞ¸¦ ÅëÇؼ­ SubversionAPI ¿¡ ¾×¼¼½º ÇÏ´Â °ÍÀº ºÐ¸íÇÏ°Ô ÀÌÁ¡ÀÌ ÀÖ½À´Ï´Ù ´Ü¼øÇÔ, ÀÔ´Ï´Ù. ÀϹÝÀûÀ¸·Î, Python ³ª Perl ¶ó°í ÇÏ´Â ¾ð¾î´Â C ³ª C++ (À»)¸¦ »ç¿ëÇÏ´Â °Íº¸´Ùµµ ÈξÀ À¯¿¬ÇÏ°í ½¬¿î °ÍÀÔ´Ï´Ù. ÀÌ·¯ÇÑ ¾ð¾î°¡ ÁغñÇØ ÀÖ´Ù °í·¹º§ µ¥ÀÌÅÍÇü°ú ¹®¸Æ ÀÇÁ¸ÀÇ µ¥ÀÌÅÍÇüÀÇ Ã¼Å©¿Í °°Àº °ÍÀº, Á» ´õ Àß À¯Àú·ÎºÎÅÍÀÇ Á¤º¸¸¦ ó¸®ÇÕ´Ï´Ù. ¹ú½á ¾Æ½Ã´Â ¹Ù¿Í °°ÀÌ, Àΰ£¸¸ÀÌ ÇÁ·Î±×·¥ÀÇ ÀÔ·ÂÀ» À߸øÇØ ½ºÅ©¸³Æ®°èÀÇ ¾ð¾î´Â ´ÜÁö ±× »çÀÌ Â÷À̸¦ Á» ´õ Àß Ã³¸®ÇÒ »ÓÀÔ´Ï´Ù. ¹°·Ð, ÀÚÁÖ ÀÌ À¯¿¬¼ºÀº ÆÛÆ÷¸Õ½º¸¦ Èñ»ý¿¡ ¼¶. ÀÌ°ÍÀÌ, ¿Ö °íµµ·Î ÃÖÀûÈ­µÈ Cº£À̽ºÀÇ ÀÎÅÍÆäÀ̽º¿Í ÇÁ·Î±×·¥ ¶óÀ̺귯¸®¸¦, °­·ÂÇÏ°í À¯¿¬ÇÑ ¾ð¾î¿Í Á¶ÇÕÇØ ÀÌ¿ëÇÏ´Â °Í¿¡ »ç¶÷ÀÌ ²ø¾î ´ç±â°í Àΰ¡ÀÇ ÀÌÀ¯ÀÔ´Ï´Ù.

SubversionÀÇ Python¿ë SWIG Á¦ÈÞÀÇ ¿¹¸¦ º¾½Ã´Ù. ÀÌ ¿¹´Â ÀüÀÇ ¿¹¿Í °°Àº °ÍÀ» ÇÕ´Ï´Ù. À̹ø ÇÔ¼öÀÇ »çÀÌÁî¿Í º¹ÀâÇÔÀÇ Á¤µµ¿¡ ÁÖÀÇÀÔ´Ï´Ù.

Example 1-2. Python¸¦ »ç¿ëÇÑ ÀúÀå¼Ò(repository)Ãþ

from svn import fs
import os.path

def crawl_filesystem_dir (root, directory, pool):
  """Recursively crawl DIRECTORY under ROOT in the filesystem, and return
  a list of all the paths at or below DIRECTORY.   Use POOL for all 
  allocations. """

  # Get the directory entries for DIRECTORY.
  entries = fs.dir_entries(root, directory, pool)

  # Initialize our returned list with the directory path itself.
  paths = [directory]

  # Loop over the entries
  names = entries.keys()
  for name in names:
    # Calculate the entry's full path.
    full_path = os.path.join(basepath, name)

    # If the entry is a directory, recurse.   The recursion will return
    # a list with the entry and all its children, which we will add to
    # our running list of paths.
    if fs.is_dir(fsroot, full_path, pool):
      subpaths = crawl_filesystem_dir(root, full_path, pool)
      paths.extend(subpaths)

    # Else, it is a file, so add the entry's full path to the FILES list.
    else:
      paths.append(full_path)

  return paths

ÀüÀÇ ¿¹¿¡¼­ÀÇ C ¿¡ ÀÇÇÑ ½ÇÀåÀº Á» ´õ ÈξÀ ±ä °ÍÀ̾ú½À´Ï´Ù. C ÀÇ °°Àº routine (Àº)´Â ¸Þ¸ð¸®ÀÇ ÀÌ¿ëÀÇ ¹æ¹ý¿¡ ½Å°æÀ» »ç¿ëÇÒ ÇÊ¿ä°¡ ÀÖ¾î, ¿£Æ®¸®ÀÇ ÇØ½Ã¿Í ÆнºÀÇ ¸®½ºÆ®¸¦ Ç¥ÇöÇÏ´Â µ¶ÀÚÀûÀÎ µ¥ÀÌÅÍÇüÀÌ ÇÊ¿äÇß½À´Ï´Ù. Python ´Â ÇØ½Ã¿Í ¸®½ºÆ®(°¢°¢"dictionaries"¿Í"sequences"¶ó°í ÇÏ´Â ¸»Åõ¸¦ ÇÕ´Ï´Ù¸¸)¸¦ ÆíÀÔ µ¥ÀÌÅÍÇüÀ̶ó°í Çصµ´Â ÀÖ¾î, ÀÌ·¯ÇÑ ÇüÅ¿¡ ´ëÇÑ ÈǸ¢ÇÑ Á¶ÀÛ ¹æ¹ý ÇÏÁö¸¸ ÁغñµÇ¾î ÀÖ½À´Ï´Ù. ±×¸®°í, Python ´Â ÂüÁ¶ Ä«¿îÆ®¿Í ¾²·¹±â ÄÝ·º¼Ç (À»)¸¦ »ç¿ëÇϹǷÎ, ÀÌ ¾ð¾îÀÇ À¯Àú´Â ¸Þ¸ð¸®ÀÇ È®º¸¿Í °³¹æ¿¡ ´ëÇØ °í¹ÎÇÒ ÇÊ¿ä°¡ ¾ø½À´Ï´Ù.

ÀÌ ÀåÀÇ ÀüÀÇ ¸¶µð·Î,libsvn_client ÀÎÅÍÆäÀ̽º ¿¡ Á¢ÇØ Subversion Ŭ¶óÀ̾ðÆ®¸¦ ¾²±â À§ÇÑ ³ë·ÂÀ» °æ°¨ÇÑ´Ù°í ÇÏ´Â À¯ÀÏÇÑ ¸ñÀûÀ» À§Çؼ­(¶§¹®¿¡) ÀÖ´Ù°í Çß½À´Ï´Ù. ÀÌÇÏ´Â ÀÌ ÇÁ·Î±×·¥ ¶óÀ̺귯¸®¿¡, ¾î¶»°Ô ÇØ SWIG Á¦ÈÞ¸¦ À̶ó°í ´­·¯ ¾×¼¼½º ÇÒ ¼ö°¡ ÀÖÀ»±îÀÇ °£´ÜÇÑ ¿¹ÀÔ´Ï´Ù. Python ÀÇ ¸î ÁÙ±âÀÇ ÄÚµå·Î, ¿ÏÀüÇÏ°Ô ±â´ÉÇÏ´Â SubversionÀÇ ÀÛ¾÷ Ä«ÇǸ¦ üũ ¾Æ¿ô ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.

Example 1-3. ÀÛ¾÷ Ä«ÇǸ¦ üũ¾Æ¿ô ÇÏ´Â ´Ü¼øÇÑ ½ºÅ©¸³Æ®

#! /usr/bin/env python
import sys
from svn import util, _util, _client

def usage():
  print "Usage: " + sys.argv[0] + " URL PATH\n"
  sys.exit(0)

def run(url, path):
  # Initialize APR and get a POOL.
  _util.apr_initialize()
  pool = util.svn_pool_create(None)

  # Checkout the HEAD of URL into PATH (silently)
  _client.svn_client_checkout(None, None, url, path, -1, 1, None, pool)

  # Cleanup our POOL, and shut down APR.
  util.svn_pool_destroy(pool)
  _util.apr_terminate()

if __name__ == '__main__':
  if len(sys.argv) ! = 3:
    usage()
  run(sys.argv[1], sys.argv[2])

Çö½ÃÁ¡¿¡¼­, ÀÌ°ÍÀÌ SubversionÀÇ Python Á¦ÈÞÀ̸ç, ±×°ÍÀº °ÅÀÇ ¿Ï¼º µÈ °ÍÀÔ´Ï´Ù. Java Á¦ÈÞ¿¡ ´ëÇؼ­µµ Á¶±Ý Á¢ÇØ µÓ´Ï´Ù. SWIG ÀÎÅÍÆäÀ̽º ÆÄÀÏÀÌ ¿Ã¹Ù¸£°Ô ¼³Á¤µÇ¸é, ¸ðµç SWIG ´ëÀÀ ¾ð¾î(ÇöÀç·Î¼­´Â, Tcl, Python, Perl, Java, Ruby, Mzscheme, Guile, ±×¸®°í PHPÀÔ´Ï´Ù¸¸)ÀÇ Æ¯Á¤ÀÇ ³ªÆÈÀ» »ý¼ºÇÏ´Â °ÍÀº ÀÌ·ÐÀûÀ¸·Î´Â °£´ÜÇÑ ÀÏÀÔ´Ï´Ù. ±×·¯³ª, SWIG°¡ ÀϹÝÈ­ÇÏ´Â µµ¿òÀÌ ÇÊ¿äÇÑ º¹ÀâÇÑ API ¿¡ ´ëÇؼ­´Â, Á» ´õ Ãß°¡ÀÇ ÄÚµù ÇÏÁö¸¸ ÇÊ¿äÇÕ´Ï´Ù. SWIG ÀÚ½ÅÀÇ °Íº¸´Ù ÀÚ¼¼ÇÑ Á¤º¸´Âhttp://www.swig.org¿¡ ÀÖ´Â ÇÁ·ÎÁ§Æ® ÀÇ À¥ »çÀÌÆ®¸¦ ºÁ ÁÖ¼¼¿ä.


1.3. ÀÛ¾÷ Ä«ÇÇ °ü¸® areaÀÇ ³»ºÎ

ÀÌÀü ÁöÀûÇÑ °Íó·³, Subversion ÀÛ¾÷ Ä«ÇÇÀÇ µð·ºÅ丮ÀÇ °¢°¢Àº . svn ¶ó´Â À̸§ÀÇ Æ¯º°ÇÑ ¼­ºê µð·ºÅ丮¸¦ °®°í, °Å±â¿¡ ÀÛ¾÷ Ä«ÇÇ µð·ºÅ丮¿¡ °üÇÑ °ü¸® Á¤º¸¸¦ °Ý³³ÇÕ´Ï´Ù. Subversion ´Â. svn ÁßÀÇ Á¤º¸¸¦ ÀÌÇÏ¿Í °°Àº ÀÏÀ» ±â·ÏÇϴµ¥ ÀÌ¿ëÇÕ´Ï´Ù:

  • ¾îµð¿¡ ÀÖ´Â ÀúÀå¼Ò(repository)°¡, ÀÛ¾÷ Ä«ÇÇ µð·ºÅ丮ÀÇ ÆÄÀÏÀ̳ª ¼­ºê µð·ºÅ丮 ¿¡ ÀÇÇØ Ç¥ÇöµÇ°í ÀÖ´Â °ÍÀΰ¡.

  • ¾î´À ¸®ºñÀüÀÇ ÆÄÀÏÀ̳ª µð·ºÅ丮°¡ ÇöÀçÀÇ ÀÛ¾÷ Ä«ÇÇ¿¡ ÀÖ´Â °ÍÀΰ¡.

  • ÆÄÀÏÀ̳ª µð·ºÅ丮¿¡ ÀÌ¾î ºÙÀº À¯Àú Á¤ÀÇÀÇ ¼Ó¼º.

  • ÀÛ¾÷ Ä«ÇÇ ÆÄÀÏÀÇ ¼öÁ¤¿ø(ÆíÁýÀü) Ä«ÇÇ. files.

. svn µð·ºÅ丮¿¡ °Ý³³µÈ µ¥ÀÌÅÍ¿¡´Â ±× ¹Û¿¡µµ ¿©·¯ °¡Áö ÀÖ½À´Ï´Ù¸¸, °¡Àå Áß¿äÇÑ ¾ÆÀÌÅÛÀÇ ¸î°³Àΰ¡ÀÎ ¸¸Å­ ´ëÇØ ¼³¸íÇÕ´Ï´Ù.


1.3.1. Entries ÆÄÀÏ

. svn µð·ºÅ丮¿¡ ÀÖ´Â Á¦ÀÏ Áß¿äÇÑ ÆÄÀÏÀºentries ÆÄÀÏÀÔ´Ï´Ù. ÀÌ ÆÄÀÏÀº XML ¹®¼­·Î ±× ³»¿ëÀº ÀÛ¾÷ Ä«ÇÇ µð·ºÅ丮¾ÈÀÇ ¹öÀü °ü¸®ÇÏ¿¡ ÀÖ´Â ¸®¼Ò½º¿¡ ´ëÇÑ °ü¸® Á¤º¸ÀÇ ¸ðÀÓÀÔ´Ï´Ù. ÀúÀå¼Ò(repository) URL, ¼öÁ¤¿ø¸®ºñÀü, ÆÄÀÏÀÇ Ã¼Å© ¼¶, ¼öÁ¤¿ø ÅؽºÆ®¿Í ¼Ó¼ºÀÇ Å¸ÀÓ ½ºÅÆÇÁ, ¿¹°í¿Í Ãæµ¹ »óÅ¿¡ °üÇÑ Á¤º¸, ¸¶Áö¸·¿¡ Ä¿¹ÔÇß´ø °Í¿¡ °üÇÑ Á¤º¸(½ÇÇàÀÚ, ¸®ºñÀü, ŸÀÓ ½ºÅÆÇÁ), ·ÎÄà īÇÇ È÷½ºÅ丮Subversion Ŭ¶óÀ̾ðÆ®°¡ °ü¸®ÇÏ°í ÀÖ´Â ¸®¼Ò½º ¿¡ ºÙ¾î Èï¹Ì°¡ ÀÖ´Â Á¤º¸´Â ¸ðµÎ ¿©±â¿¡ ±â·ÏµÇ°í ÀÖ½À´Ï´Ù.

ÀÌÇÏ´Â, ½ÇÁ¦ÀÇ entries ÆÄÀÏÀÇ ¿¹ÀÔ´Ï´Ù:

Example 1-4. ÀüÇüÀûÀÎ. svn/entries ÆÄÀÏ

? xml version="1.0" encoding="utf-8"? 
wc-entries
   xmlns="svn:"
entry
   committed-rev="1"
   name="svn:this_dir"
   committed-date="2002-09-24T17:12:44. 064475Z"
   url="http://svn.red-bean.com/tests/.greek-repo/A/D"
   kind="dir"
   revision="1"/
entry
   committed-rev="1"
   name="gamma"
   text-time="2002-09-26T21:09:02. 000000Z"
   committed-date="2002-09-24T17:12:44. 064475Z"
   checksum="QSE4vWd9ZM0cMvr7/+YkXQ=="
   kind="file"
   prop-time="2002-09-26T21:09:02. 000000Z"/
entry
   name="zeta"
   kind="file"
   schedule="add"
   revision="0"/
entry
   url="http://svn.red-bean.com/tests/.greek-repo/A/B/delta"
   name="delta"
   kind="file"
   schedule="add"
   revision="0"/
entry
   name="G"
   kind="dir"/
entry
   name="H"
   kind="dir"
   schedule="delete"/
/wc-entries

¾Ëµµ·Ï(µíÀÌ), entries ÆÄÀÏÀº º»ÁúÀûÀ¸·Î´Â ¿£Æ®¸®ÀÇ ¸®½ºÆ®ÀÔ´Ï´Ù. entry ű×ÀÇ °¢°¢Àº 3°³ Áß ¾î¶² °ÍÀÎÁö¸¦ Ç¥ÇöÇÏ°í ÀÖ´Â: ÀÛ¾÷ Ä«ÇÇ µð·ºÅ丮 ÀÚ½Å(name ¼Ó¼ºÀ»"svn:this-dir"·Î ¼³Á¤ÇÏ´Â °ÍÀ¸·Î °¡¸®Åµ´Ï´Ù), ÀÛ¾÷ Ä«ÇÇ µð·ºÅ丮¿¡ ÀÖ´Â ÆÄÀÏ(kind ¼Ó¼ºÀ»"file"·Î ¼³Á¤ÇÏ´Â °ÍÀ¸·Î °¡¸®Åµ´Ï´Ù), ȤÀº ÀÛ¾÷ Ä«ÇÇÀÇ ¼­ºê µð·ºÅ丮 (kind °¡ ¿©±â¿¡¼­´Â "dir" (À¸)·Î ¼³Á¤µË´Ï´Ù). ¿£Æ®¸®°¡ ÀÌ ÆÄÀÏ¿¡ °Ý³³µÇ´Â ÆÄÀÏ°ú ¼­ºê µð·ºÅ丮´Â ¹ú½á ¹öÀü °ü¸®ÇÏ¿¡ ÀÖÀ»±î(À§ÀÇ ¿¹ÀÇ zeta ÆÄÀÏ°ú °°ÀÌ), ÀÌ ÀÛ¾÷ Ä«ÇÇ µð·ºÅ丮ÀÇ º¯°æÀÌ ´ÙÀ½¿¡ Ä¿¹ÔµÉ ¶§ ¹öÀü °ü¸®ÇÏ¿¡ Ãß°¡ÇÏ´Â °ÍÀÌ ¿¹°íµÇ°í ÀÖ´ÂÁö, ÀÔ´Ï´Ù. ¿£Æ®¸®ÀÇ °¢°¢Àº µ¶Æ¯ÇÑ À̸§À» °®°í, ƯÁ¤ÀÇ ³ëµå Á¾º°À» °¡Áý´Ï´Ù.

°³¹ßÀÚ´Â, Subversion °¡entries ÆÄÀÏÀ» ÀÐ°í ¾²±âÇÒ °æ¿ì¿¡ »ç¿ëÇϴ Ưº°ÇÑ ±ÔÄ¢¿¡ ÁÖÀÇÇØ¾ß ÇÕ´Ï´Ù. ¸ðµç ¿£Æ®¸®´Â ÀÚ½ÅÀÇ ¸®ºñÀü°ú ÀÌ¾î ºÙ¾î ÀÖ´Â URL¸¦ °¡Áö°í ÀÖ½À´Ï´Ù¸¸, »ùÇà ÆÄÀÏÁßÀÇ ¸ðµçentry űװ¡ ¸í½ÃÀûÀÎrevision ³ª url ¼Ó¼ºÀ» °¡Áö´Â °ÍÀº ¾Æ´Õ´Ï´Ù. Subversion ´Â ¿£Æ®¸®°¡ ¸í½ÃÀûÀ¸·Î ÀÌ µÎ °³ÀÇ ¼Ó¼ºÀ» °¡ÁöÁö ¾Ê´Â °Íµµ ÀÎÁ¤ÇÏ°í ÀÖ½À´Ï´Ù¸¸, ±×°ÍÀº, ±× °ªÀÌ,"svn:this-dir" ¿£Æ®¸®¿¡ ÀÖ´Â µ¥ÀÌÅÍ¿Í °°Àº°¡, °£´ÜÇÏ°Ô °è»êÇÒ ¼ö ÀÖ´Â °æ¿ìÀÔ´Ï´Ù. [5] ¶Ç, ¼­ºê µð·ºÅ丮ÀÇ ¿£Æ®¸®¿¡ ´ëÇؼ­´Â, Subversion ´Â Áß¿äÇÑ ¼Ó¼ºÀ̸§, Á¾º°, url, ¸®ºñÀü, ±×¸®°í ¿¹°í »óȲ ¸¸À» º¸Á¸Çϱâ·Î ÁÖÀÇÇØ ÁÖ¼¼¿ä. Áߺ¹ ÇÏ´Â Á¤º¸¸¦ ÁÙÀ̱â À§Çؼ­(¶§¹®¿¡), Subversion ´Â, ¼­ºê µð·ºÅ丮¿¡ °üÇÑ ¿ÏÀüÇÑ Á¤º¸ (À»)¸¦ °áÁ¤ÇÏ´Â ¹æ¹ýÀ¸·Î¼­ ±× ¼­ºê µð·ºÅ丮¿¡ ³ª¿Í °¡ ±× µð·ºÅ丮 ÀÚ½ÅÀÇ. svn/entries ÆÄÀÏÀÇ "svn:this-dir" ¿£Æ®¸®¸¦ Àеµ·Ï(µíÀÌ) Áö½ÃÇÕ´Ï´Ù. ±×·¯³ª, ¼­ºê µð·ºÅ丮¿¡ÀÇ ÂüÁ¶´Â, ±× ºÎ¸ðÀÇ entries ÆÄÀÏ¿¡ ±â·ÏµÇ°í ÀÖ¾î, ¼­ºê µð·ºÅ丮 ÇÏÁö¸¸ µð½ºÅ©·ÎºÎÅÍ »èÁ¦µÇ¾î ¹ö¸° °Í °°Àº °æ¿ì¿¡¼­µµ ±âº»ÀûÀÎ ¹öÀü °ü¸® Á¶ÀÛÀ» Çϴµ¥´Â ÃæºÐÇÑ Á¤º¸¸¦ °¡Áö°í ÀÖ½À´Ï´Ù.


1.3.2. ¼öÁ¤¿øÄ«ÇÇ¿Í ¼Ó¼º ÆÄÀÏ

¾ÕÀ¸·Î ÁÖÀÇÇÑ °Íó·³,. svnµð·ºÅ丮´Â ¶Ç ¼öÁ¤¿øÀÇ"text-base"¹öÀüÀÇ ÆÄÀÏÀ» º¸Á¸ÇÏ°í ÀÖ½À´Ï´Ù. ÀÌ°ÍÀº. svn/text-base¿¡ ÀÖ½À´Ï´Ù. ¼öÁ¤¿ø Ä«ÇÇÀÇ ÀÌÁ¡Àº, ¸î°³Àΰ¡ ÀÖ½À´Ï´Ù. ³×Æ®¿öÅ©ÀÇ Åë½Å¾øÀÌ ·ÎÄà ¼öÁ¤À» üũÇØ Â÷ºÐÀ» º¸°íÇϰųª ³×Æ®¿öÅ© Åë½Å¾øÀÌ ¼öÁ¤Çϰųª »èÁ¦ÇÑ ÆÄÀÏÀ» ¹ÙÅÁÀ¸·Î µÇµ¹¸®°Å³ª ¼­¹ö¿¡ÀÇ º¯°æÁ¡ÀÇ ¼Û½Å »çÀÌÁ ÁÙÀ̰ųª ÇÒ ¼ö ÀÖ½À´Ï´Ù±×·¯³ª, Àû¾îµµ °¢°¢ÀÇ ¹öÀü °ü¸®µÈ ÆÄÀÏÀ» µÑµð½ºÅ©»ó¿¡ º¸Á¸ÇÏ´Â ÄÚ½ºÆ®°¡ ¹ß»ýÇÕ´Ï´Ù. ÃÖ±Ù¿¡´Â, ÀÌ°ÍÀº(Á¤µµ)¸¸Å­ ¾î´À ÆÄÀÏ¿¡ ´ëÇØ ¹«½ÃÇÒ ¼ö ÀÖ´Â Á¤µµÀÇ ¹°°ÇÀÔ´Ï´Ù. ±×·¯³ª, ¹öÀü °ü¸®µÈ ÆÄÀÏÀÌ Ä¿Áö´Â °Í¿¡ µû¶ó´Â ÀÌ »óȲÀº ½ÉÇÑ °Í¿¡ µÇ¾î °©´Ï´Ù. "text-base" ÀǸ¦ ¸¸µå´ÂÁö ¾î¶²Áö¸¦ ¿É¼ÇÀ¸·Î¼­´Â, À̶ó°í ÇÏ´Â ÀÇ°ßµµ ÀÖ½À´Ï´Ù. ±×·¯³ª Áþ±Ä°Ôµµ, ¹öÀü °ü¸®ÇÏ´Â ÆÄÀÏÀÇ »çÀÌÁî°¡ Ä¿Áö´Â¿¡ µû¶ó,"ÅؽºÆ® º£À̽º"ÀÇ Á¸Àçµµ, ±× ¸¸Å­ Áß¿äÇÏ°Ô µÇ¾î °¡´Â ÆÄÀÏ·Î ÇÑ ¾ÆÁÖ Á¶±ÝÀÇ º¯°æÀ» Ä¿¹ÔÇÏ°í ½ÍÀº °Í»ÓÀε¥, ¾öû³ª°Ô Å©´Ù ÆÄÀÏÀ» ³×Æ®¿öÅ© ³Ñ¾î·Î º¸³»ÀÚ´Â, ´©°¡ »ý°¢ÇÒ±î¿ä?

"text-base"ÆÄÀÏ°ú °°Àº ¸ñÀûÀ¸·Î, ¼Ó¼º ÆÄÀÏ°ú ±× ¼öÁ¤¿ø "prop-base"Ä«ÇÇ°¡ ÀÖ½À´Ï´Ù. °¢°¢,. svn/props (¿Í)°ú. svn/prop-base ¿¡ ÀÖ½À´Ï´Ù. µð·ºÅ丮µµ ¼Ó¼ºÀ» °¡Áú ¼ö°¡ ÀÖÀ¸¹Ç·Î, . svn/dir-props ¿Í . svn/dir-prop-base ÆÄÀÏÀÌ ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ ¼Ó¼º ÆÄÀÏÀÇ °¢°¢("ÀÛ¾÷Áß"°ú"¿ø·¡ÀÇ"¹öÀü)Àº ¼Ó¼º¸í°ú ¼Ó¼ºÄ¡¸¦ °Ý³³Çϴµ¥, ´Ü¼øÇÑ"µð½ºÅ©»ó ÇؽÃ"ÆÄÀÏ Çü½Ä (À»)¸¦ »ç¿ëÇÕ´Ï´Ù.


1.4. WebDAV

WebDAV ("Web º£À̽ºÀÇ ºÐ»ê ÆíÁý°ú ¹öÀüÈ­")´Â Ç¥ÁØÀûÀÎ HTTP ÇÁ·ÎÅäÄÝÀÇ È®ÀåÀ¸·Î, ±âº»ÀûÀ¸·Î´Â Àоîµé¿© Àü¿ëÀÇ ¸ÅüÀÎ web¸¦, ÀÐ°í ¾²±â °¡´ÉÇÑ ¸Åü¿Í Çϱâ À§Çؼ­ ¼³°èµÇ¾ú½À´Ï´Ù. »ý°¢À¸·Î¼­´Â, µð·ºÅ丮¿Í ÆÄÀÏÀº ÀÐ°í ¾²±â °¡´ÉÇÑ ¿ÀºêÁ§Æ®·Î¼­Web»ó¿¡¼­ °øÀ¯ÇÒ ¼ö ÀÖ´Ù°í ÇÑ´Ù ¹°°ÇÀÔ´Ï´Ù. RFCs 2518 À¸·Î 3253 Àº, HTTP ÀÇ WebDAV/DeltaV È®Àå¿¡ ´ëÇØ ±â¼ú µÇ°í ÀÖ¾î, (´Ù¸¥ À¯¿ëÇÑ Á¤º¸¿Í ÇÔ²²)http://www.webdav.org/·Î ÀÔ¼ö °¡´ÉÇÕ´Ï´Ù.

¸î°³ÀÇ operating systemÀÇ ÆÄÀÏ ºê¶ó¿ìÀú´Â ¹ú½á WebDAV¸¦ »ç¿ëÇÑ ³×Æ®¿öÅ© µð·ºÅ丮¸¦ mount ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. Win32¿¡¼­´Â, Windows Explorer ´Â "Web Æú´õ"(±×°ÍÀº È®½ÇÈ÷, WebDAV ÇÏÁö¸¸ ÁغñÇÑ ³×Æ®¿öÅ©ÀÇ Àå¼ÒÀÔ´Ï´Ù¸¸)À̶ó°í ºÎ¸£°í ÀÖ´Â °ÍÀ», ¸¶Ä¡ ±×°ÍÀÌ º¸Åë °øÀ¯ Æú´õÀÎ°Í °°ÀÌ ÂüÁ¶ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. Mac OS X µµ ÀÌ ´É·ÂÀÌ ÀÖ¾î, Nautilus ³ª Konqueror ºê¶ó¿ìÀúµµ ±×·¸½À´Ï´Ù. (À̰͵éÀº, GNOME ¿Í KDE »ó¿¡¼­ °¢°¢ ¿òÁ÷ÀÔ´Ï´Ù).

ÀÌ°Íµé ¸ðµç °ÍÀº ¾î¶»°Ô ÇØ Subversion ¿¡ Àû¿ëµÇ°í ÀÖ´Â °ÍÀϱî¿ä? mod_dav_svn Apache ¸ðµâÀº ±× ÁÖ¿äÇÑ ³×Æ®¿öÅ© ÇÁ·ÎÅäÄݷμ­ WebDAV¿Í DeltaV·Î È®ÀåµÈ HTTP¸¦ »ç¿ëÇÏ°í ÀÖ½À´Ï´Ù. »õ·Î¿î Ưº°ÇÑ ÇÁ·ÎÅäÄÝÀ» ½ÇÀåÇÏ´Â °Íº¸´Ùµµ, ÃʱâÀÇ SubversionÀÇ ¼³°èÀÚ´Â, ´ÜÁö Subversion·Î »ç¿ëÇÑ´Ù ¹öÀü°ú ó¸®ÀÇ °³³äÀ» RFC 2518 À¸·Î 3253 ÀÌ ¿ä±¸ÇÏ´Â °³³ä¿¡ ¸ÂÃß¾ú½À´Ï´Ù. [6]

WebDAVÀÇ °Í Á» ´õ öÀúÇÑ ³íÀÇ, ¾î¶»°Ô µ¿ÀÛÇØ, SubversionÀº ±×°ÍÀ» ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö, ¿¡ ´ëÇؼ­´Â,>À» ºÁ ÁÖ¼¼¿ä. ´Ù¸¥ È­Á¦¿Í ÇÔ²², Subversion °¡ ¾î´À Á¤µµ ÀϹÝÀûÀÎ WebDAV ÀÇ »ç¾çÀ» °è½ÂÇÏ°í ÀÖ¾î ÀϹÝÀûÀÎ WebDAV Ŭ¶óÀ̾ðÆ® (¿Í)°úÀÇ »óÈ£ ¿î¿ë¼º¿¡ ¾î¶² ¿µÇâÀ» Áٱ ´ëÇÑ ³íÀÇ°¡ ÀÖ½À´Ï´Ù.


1.5. ¸Þ¸ð¸®ÇÁ¸£¸¦ »ç¿ëÇÑ ÇÁ·Î±×·¡¹Ö

C ¾ð¾î¸¦ »ç¿ëÇÑ °ÍÀÌ ÀÖ´Â °ÅÀÇ ¸ðµç °³¹ßÀÚ´Â, ¾î¶² ½ÃÁ¡¿¡ ¸Þ¸ð¸® °ü¸®·Î ÁøÀý¸Ó¸® ³ª°í ÀÖ¾ú´ø ° ÇѼû µ¹¸®´Â ÀÏÀÌ ÀÖ°ÚÁö¿ä. ÀÌ¿ëÇϱâ À§Çؼ­ ÇÊ¿äÇÑ ÃæºÐÇÑ ¸Þ¸ð¸®¸¦ È®º¸ÇØ, ±× ÀÌ¿ë »óȲÀ» ±â·ÏÇØ, ÇÊ¿ä¾ø°Ô µÇ¸é(ÀÚ) ¸Þ¸ð¸®¸¦ ÇعæÇϴ±׷¯ÇÑ Ã³¸®´Â ¸Å¿ì º¹ÀâÇÕ´Ï´Ù. ±×¸®°í ¹°·Ð, °Å±â¿¡ ½ÇÆÐÇϸé(ÀÚ), ÇÁ·Î±×·¥ÀÌ ¸Á°¡Á® ³¡³», ½ÉÇÒ ¶§¿¡´Â ÄÄÇ»ÅÍ°¡ °íÀ峪 ¹ö¸³´Ï´Ù. Çà¿î¿¡µµ, Subversion°¡ °¡¹Ý¼ºÀ» À§Çؼ­(¶§¹®¿¡) ÀÌ¿ëÇÏ°í ÀÖ´Â APR ÇÁ·Î±×·¥ ¶óÀ̺귯¸® (Àº)´Âapr_pool_tÇüÀ» ÁغñÇØ ÀÖ¾î, ÀÌ°ÍÀº ¸Þ¸ð¸®ÀÇ"Ç®"À» Ç¥ÇöÇÏ´Â °ÍÀÔ´Ï´Ù.

¸Þ¸ð¸®ÇÁ¸£´Â ÇÁ·Î±×·¥¿¡ ÀÇÇØ ÀÌ¿ëÇϱâ À§Çؼ­ È®º¸µÈ ¸Þ¸ð¸® ºí·ÏÀÇ Ãß»óÀûÀΠǥÇöÀÔ´Ï´Ù. Ç¥ÁØÀûÀÎmalloc() ÇÔ¼ö (¿Í)°ú ±× ¾ÆÁ¾À» »ç¿ëÇØ OS·ÎºÎÅÍ Á÷Á¢ ¸Þ¸ð¸®¸¦ ÃëµæÇÏ´Â ´ë½Å¿¡, APR¸¦ ¸µÅ© Çß´Ù ÇÁ·Î±×·¥Àº ´ÜÁö ¸Þ¸ð¸® Ç®À» ¸¸µå´Â ¿ä±¸¸¦ ³»´Â °ÍÀ¸·Î ½Ç½ÃÇÕ´Ï´Ù. (ÀÌ°Í¿¡´Âapr_pool_create() ÇÔ¼ö¸¦ »ç¿ëÇÕ´Ï´Ù) APR´Â OS·ÎºÎÅÍ ÀÚ¿¬½º·¯¿î »çÀÌÁîÀÇ ¸Þ¸ð¸®¸¦ È®º¸ÇØ, ±× ¸Þ¸ð¸®´Â °ð¹Ù·Î ÇÁ·Î±×·¥ ±×¸®°í »ç¿ëÇÒ ¼ö°¡ ÀÖ°Ô µË´Ï´Ù. ÇÁ·Î±×·¥ÀÌ Ç® ¸Þ¸ð¸®¸¦ ÇÊ¿ä¿Í ÇÒ °æ¿ì¿¡´Â ¾ðÁ¦¶óµµ,apr_palloc()¿Í °°Àº APR Ç® API ÇÔ¼öÀÇ ¾î¶² °ÍÀÎÁö¸¦ »ç¿ëÇÒ ¼ö°¡ ÀÖ¾î, ±×°ÍÀº Ç®·ÎºÎÅÍ ¹ü¿ëÀûÀÎ ¸Þ¸ð¸®¸¦ È®º¸ÇØ µ¹·ÁÁÝ´Ï´Ù. ÇÁ·Î±×·¥Àº ¿ä±¸ ºñÆ®¿Í Ç®·ÎºÎÅÍÀÇ ¸Þ¸ð¸®¸¦ °è¼Ó ¿ä±¸ÇÒ ¼ö°¡ ÀÖ¾î, APR´Â ±× ¿ä±¸¸¦ °è¼Ó ½ÂÀÎÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. Ç®Àº ÇÁ·Î±×·¥¿¡ ¾Æ¿ï·¯ ÀÚµ¿ÀûÀ¸·Î »çÀÌÁî°¡ ¸¹Àº±¸µçÁö, ÃÖÃÊ Ç®¿¡ Æ÷ÇԵǾî ÀÖ¾ú´ø °Íº¸´Ùµµ ¸¹Àº ¸Þ¸ð¸®¸¦ ¿ä±¸ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ÀÌ°ÍÀº ½Ã½ºÅÛ¿¡ ¸Þ¸ð¸®°¡ ¾ø¾îÁú ¶§±îÁö °è¼ÓÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.

ÀÌ°ÍÀ¸·Î Ç®ÀÇ À̾߱Ⱑ ¸¶Áö¸·À̶ó¸é, Ưº°ÇÑ ÁÖÀ§¸¦ ±â¿ïÀÏ ÇÊ¿äµµ ¾ø½À´Ï´Ù¸¸. Çà¿î¿¡µµ, ±×·¸Áö´Â ¾Ê½À´Ï´Ù. Ç®Àº ¸¸µé¾îÁö´Â °Í ¸¸À¸·Î´Â ¾Æ´Õ´Ï´Ù: ±×°ÍÀº ¶Ç Ŭ¸®¾î Çϰųª »èÁ¦ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ°Í¿¡´Â apr_pool_clear() ¿Í apr_pool_destroy() ¸¦ °¢°¢ ÀÌ¿ëÇÕ´Ï´Ù. ÀÌ°ÍÀº °³¹ßÀÚ¿¡°Ô ¾ó¸¶µçÁöÀÇȤÀº ¸îõÀÇarea¸¦ Ç®·ÎºÎÅÍ ÃëµæÇØ, ±× ÈÄ ÇÑ ¹øÀÇ ÇÔ¼ö È£ÃâÇØ, ±× ¸ðµÎ Ŭ¸®¾î ÇÏ´Â À¯¿¬¼ºÀ» ÁÝ´Ï´Ù. °Ô´Ù°¡ Ç®Àº °èÃþÀ» °¡Áö°í ÀÖ½À´Ï´Ù. ¹ú½á ¸¸µé¾îÁø ¾î´À Ç® ¿¡µµ"¼­ºê Ç®"À» ¸¸µé ¼ö°¡ ÀÖ½À´Ï´Ù. Ç®ÀÌ Å¬¸®¾î µÇ¸é(ÀÚ), ±× Ç® ÀÇ ¸ðµç ¼­ºê Ç®Àº »èÁ¦µË´Ï´Ù. ¸¸¾à Ç®À» »èÁ¦Çϸé(ÀÚ), ±× Ç® ÀڽŰú ¼­ºê Ç®ÀÇ ¾çÂÊ ¸ðµÎ°¡ »èÁ¦µË´Ï´Ù.

¸ÕÀú ÁøÇàÇϱâ Àü¿¡, °³¹ßÀÚ´Â Subversion ¿ø½Ã ÄÚµåÁß¿¡, Áö±Ý ¸»ÇÑ °Í °°Àº APR Ç® ÇÔ¼öÀÇ È£ÃâÀÌ, ±×¸¸Å­ ¸¹Áö ¾ÊÀº °Í¿¡ ´«Ä¡Ã¤°ÚÁö¿ä. APR Ç®Àº, ¸î°³ÀÇ È®Àå ¸ÞÄ«´ÏÁòÀ» °®°í ÀÖ¾î, ±×°ÍÀº Ç®¿¡ ±¹À¯ÀÇ À¯Àú µ¥ÀÌÅ͸¦ Á¢¼ÓÇÏ´Â ´É·ÂÀ̳ª, Ç®ÀÌ »èÁ¦µÉ ¶§ ºÒ·Á °¡´Â Ŭ¸° ¾÷ ÇÔ¼ö¸¦ µî·ÏÇÏ´Â ±¸Á¶µîÀÌ ÀÖ½À´Ï´Ù. SubversionÀº ÀÌ·¯ÇÑ È®Àå ±â´ÉÀ», ±×¸¸Å­ ÀÚ¸íÇÏÁö ¾Ê´Â ¹æ¹ýÀ¸·Î ÀÌ¿ëÇÕ´Ï´Ù. ±×·¡¼­ Subversion ´Â(±×¸®°í ±× Äڵ带 »ç¿ëÇÏ´Â »ç¶÷ÀÇ ´ëºÎºÐÀº) ³ªÆÈ ÇÔ¼ö ÀÌ´Ù svn_pool_create(), svn_pool_clear(), ±×¸®°í svn_pool_destroy() (À»)¸¦ Á¦°øÇÏ°í ÀÖ½À´Ï´Ù.

Ç®Àº ±âº»ÀûÀÎ ¸Þ¸ð¸® ¸Þ´ÏÁö¸ÕÆ®¿¡µµ µµ¿òÀÌ µË´Ï´Ù¸¸, ·çÇÁ³ª Àç±ÍÀûÀÎ »óȲÀ¸·Î ÀÇ Ç®ÀÇ ±¸ÃàÀº Á¤¸»·Î ÈǸ¢ÇÑ °ÍÀÔ´Ï´Ù. ·çÇÁ´Â ÀÚÁÖ ±× ¹Ýº¹ ȸ¼ö°¡ ºÎÁ¤À̸ç, Àç±ÍÀûÀº ±× ±íÀÌ°¡ ºÎÁ¤ ±×·¡¼­, ÀÌ·¯ÇÑ area¿¡¼­ÀÇ ÄÚµåÀÇ ¸Þ¸ð¸® ¼Òºñ·®Àº ¿¹ÃøÀÏ ¼±. Çà¿î¿¡µµ, ³×½ºÆ® ÇÑ ¸Þ¸ð¸®ÇÁ¸£¸¦ »ç¿ëÇϸé(ÀÚ), ÀÌ·¯ÇÑ ÀáÀçÀûÀÎ ¹«¼­¿î »óȲÀ» °£´ÜÇÏ°Ô °ü¸®ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ÀÌÇÏÀÇ ¿¹´Â, ÀÚÁÖ ÀÖ´Â ¸Å¿ì º¹ÀâÇÑ Á¤º¸¿¡¼­ÀÇ ³×½ºÆ® ÇÑ Ç®ÀÇ ±âº»ÀûÀÎ »ç¿ë¹ýÀ» ³ªÅ¸³»°í ÀÖ½À´Ï´Ù. ÀÌ »óȲÀ̶õ, µð·ºÅ丮 Æ®¸®¸¦ Àç±ÍÀûÀ¸·Î ´õµëÀ¸¸é¼­, Æ®¸®ÀÇ ¸ðµç Àå¼ÒÀΠ󸮸¦ ½ÇÇàÇÑ´Ù, ¶ó°í ÇÑ °ÍÀÔ´Ï´Ù.

Example 1-5. È¿À²ÀûÀÎ Ç®ÀÇ ÀÌ¿ë

/* Recursively crawl over DIRECTORY, adding the paths of all its file
   children to the FILES array, and doing some task to each path
   encountered.   Use POOL for the all temporary allocations, and store
   the hash paths in the same pool as the hash itself is allocated in.   */
static apr_status_t 
crawl_dir (apr_array_header_t *files,
           const char *directory,
           apr_pool_t *pool)
{
  apr_pool_t *hash_pool = files-pool;  /* array pool */
  apr_pool_t *subpool = svn_pool_create (pool);  /* iteration pool */
  apr_dir_t *dir;
  apr_finfo_t finfo;
  apr_status_t apr_err;
  apr_int32_t flags = APR_FINFO_TYPE | APR_FINFO_NAME;

  apr_err = apr_dir_open (dir, directory, pool);
  if (apr_err)
    return apr_err;

  /* Loop over the directory entries, clearing the subpool at the top of
     each iteration.   */
  for (apr_err = apr_dir_read (finfo, flags, dir);
       apr_err == APR_SUCCESS;
       apr_err = apr_dir_read (finfo, flags, dir))
    {
      const char *child_path;

      /* Skip entries for "this dir" ('. ') and its parent ('..').   */
      if (finfo.filetype == APR_DIR)
        {
          if (finfo.name[0] == '. '
               (finfo.name[1] == '\0'
                  || (finfo.name[1] == '. '  finfo.name[2] == '\0')))
            continue;
        }

      /* Build CHILD_PATH from DIRECTORY and FINFO.name.   */
      child_path = svn_path_join (directory, finfo.name, subpool);

      /* Do some task to this encountered path.  */
      do_some_task (child_path, subpool);

      /* Handle subdirectories by recursing into them, passing SUBPOOL
         as the pool for temporary allocations.   */
      if (finfo.filetype == APR_DIR)
        {
          apr_err = crawl_dir (files, child_path, subpool);
          if (apr_err)
            return apr_err;
        }

      /* Handle files by adding their paths to the FILES array.   */
      else if (finfo.filetype == APR_REG)
        {
          /* Copy the file's path into the FILES array's pool.   */
          child_path = apr_pstrdup (hash_pool, child_path);

          /* Add the path to the array.   */
          (*((const char **) apr_array_push (files))) = child_path;
        }

      /* Clear the per-iteration SUBPOOL.   */
      svn_pool_clear (subpool);
    }

  /* Check that the loop exited cleanly.  */
  if (apr_err)
    return apr_err;

  /* Yes, it exited cleanly, so close the dir.  */
  apr_err = apr_dir_close (dir);
  if (apr_err)
    return apr_err;

  /* Destroy SUBPOOL.   */
  svn_pool_destroy (subpool);

  return APR_SUCCESS;
}

ÀÌ ¿¹´Â ·çÇÁ¿Í Àç±ÍÀûÀÎ »óȲÀǾçÂÊ ¸ðµÎ¿¡¼­ÀÇ È¿À²ÀûÀÎ Ç®ÀÇ ÀÌ¿ë¹ýÀ» ¼³¸íÇÏ´Â °ÍÀÔ´Ï´Ù. °¢°¢ÀÇ Àç±Í´Â ÇÔ¼ö¿¡ °Ç³×ÁÖ´Â Ç® ÀÇ ¼­ºê Ç®À» ¸¸µå´Â °ÍÀ¸·Î ½ÃÀ۵˴ϴÙ. ÀÌ Ç®Àº ·çÇÁÀÇ area·Î ÀÌ¿ë µÇ¾î °¢°¢ÀÇ ¹Ýº¹À¸·Î Ŭ¸®¾î µË´Ï´Ù. ÀÌ °á°ú, ¸Þ¸ð¸®ÀÇ ÀÌ¿ëÀº, ´ë·«ÀûÀ¸·Î ¸»ÇØ Àç±ÍÀÇ ±íÀÌ¿¡¸¸ ºñ·ÊÇØ, ÃÖ»óÁ¤µµ µð·ºÅ丮ÀÇ ¾ÆÀ̷μ­ÀÇ ÆÄÀÏ°ú µð·ºÅ丮ÀÇ ÇÕ°è¼ö¿¡´Â ºñ·ÊÇÏÁö ¾Ê½À´Ï´Ù. ÀÌ Àç±Í ÇÔ¼öÀÇ ÃÖÃÊÀÇ È£ÃâÀÌ Á¾·áÇÑ ½ÃÁ¡¿¡¼­, °Ç³×ÁØ Ç®¿¡ º¸Á¸µÈ µ¥ÀÌÅÍ´Â ½ÇÁ¦·Î´Â ¸Å¿ì ÀÛÀº °ÍÀÌ µË´Ï´Ù. ÀÌ ÇÔ¼ö°¡,alloc() ¿Í free()ÇÔ¼ö¸¦ Çϳª ÇϳªÀÇ µ¥ÀÌÅÍ¿¡ ´ëÇؼ­ È£ÃâÇÏÁö ¾ÊÀ¸¸é ¾È µÈ´Ù°í ÇßÀ» ¶§ÀÇ º¹ÀâÇÔÀ» »ý°¢ÇØ º¸¼¼¿ä!

Ç®Àº ¸ðµç ¾îÇø®ÄÉÀ̼ǿ¡ ÀÌ»óÀûÀÎ °ÍÀº ¾Æ´ÒÁöµµ ¸ð¸¨´Ï´Ù¸¸ Subversion¿¡¼­´Â ¸Å¿ì Å¿ì´Â¿¡ ²÷½À´Ï´Ù. Subversion °³¹ßÀڷμ­ Ç®ÀÇ ÀÌ¿ë ¿¡ Ä£ÇØÁ®, ¾î¶»°Ô ±×°ÍÀ» ¿Ã¹Ù¸£°Ô »ç¿ëÇұ Á¤ÅëÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù. ¸Þ¸ð¸® ÀÌ¿ë¿¡ °ü°èÇÑ ¹ö±×¿Í ¸Þ¸ð¸® ¸®Å©´Â APIÀÇ Á¾·ù¿¡ ÀÇÇÏÁö ¾Ê°í, Áø´ÜÇØ, ¼öÁ¤ÇÏ´Â °ÍÀº ¾î·Á¿î °ÍÀÔ´Ï´Ù¸¸, APR ¿¡ ÀÇÇØ ÁغñµÈ Ç® ÀÇ ÀÛ¼ºÀº, ¸Å¿ì Æí¸®ÇØ, ½Ã°£ÀÇ Àý¾àÀ¸·Î ¿¬°áµÇ´Â ±â´ÉÀ» °¡Áö°í ÀÖ½À´Ï´Ù.


1.6. Subversion¿¡ÀÇ °øÇå

Subversion ÇÁ·ÎÁ§Æ®¿¡ ´ëÇÑ Á¤º¸ÀÇ °ø½ÄÀûÀÎ ¹®¼­´Â ¹°·Ð, ÇÁ·ÎÁ§Æ® À¥ »çÀÌÆ®ÀÇhttp://subversion.tigris.orgÀÔ´Ï´Ù. °Å±â¿¡ ¿ø½Ã Äڵ忡 ¾×¼¼½º ÇÏ´Â ¹æ¹ýÀ̳ª, ¸ÞÀϸµ¸®½ºÆ®¿¡ Âü°¡ÇÑ´Ù ¹æ¹ý¿¡ ´ëÇÑ Á¤º¸°¡ ÀÖ½À´Ï´Ù. Subversion Ä¿¹Â´ÏƼ´Â ¾ðÁ¦¶óµµ »õ·Î¿î Âü°¡ÀÚ¸¦ ȯ¿µÇÏ°í ÀÖ½À´Ï´Ù. ¸¸¾à ¿ø½Ã Äڵ带 º¯°æÇÑ´Ù°í ÇÏ´Â ÇüÅÂÀÇ °øÇå¿¡ ÀÇÇØ ÀÌ Ä¿¹Â´ÏƼ¿¡ Âü°¡ÇÏ´Â °Í¿¡ Èï¹Ì°¡ ÀÖ´Ù¸é, ¾î¶² ´À³¦¿¡ ½ÃÀÛÇϸé(ÀÚ) ÁÁÀº°¡ÀÇ ÈùÆ®¸¦ µì´Ï´Ù.


1.6.1. Ä¿¹Â´ÏƼ¿¡ÀÇ Âü°¡

Ä¿¹Â´ÏƼ¿¡ Âü°¡ÇÏ´Â ÃÖÃÊÀÇ ½ºÅÜÀº ÃÖ½ÅÀÇ Á¤º¸¸¦ ¾ðÁ¦¶óµµ ÀÔ¼öÇÒ ¼ö ÀÖ´Ù ¹æ¹ýÀ» ã¾Æ³»´Â °ÍÀÔ´Ï´Ù. ÀÌ°ÍÀ» Á¦ÀÏ È¿À²ÀûÀ¸·Î ÇÏ·Á¸é , °³¹ßÀÚÀÇ ³íÀǸ¦ À§ÇÑ ¸ÞÀϸµ¸®½ºÆ®¿¡ Âü°¡ÇØ(), Ä¿¹Ô ¸ÞÀϸµ¸®½ºÆ®¿¡ Âü°¡ÇÏ´Â °ÍÀÔ´Ï´Ù (). ÀÌ·¯ÇÑ ¸ÞÀϸµ¸®½ºÆ®¿¡ ÀÖ´Â Á¤µµ ´ë·«ÀûÀ¸·Î µû¶ó°¡´Â °Í¸¸À¸·Îµµ, Áß¿äÇÑ µðÀÚÀλóÀÇ ³íÀÇ¿¡ ¾×¼¼½º ÇÒ ¼ö ÀÖ°í, Subversion ¿ø½Ã Äڵ忡ÀÇ ½ÇÁ¦ÀÇ ¼öÁ¤À» º¼ ¼ö°¡ ÀÖ°í, ÀÌ·¯ÇÑ º¯°æÀÇ »ó¼¼ÇÑ ¸®ºä¿¡ ÀÔȸÇØ, º¯°æÀ» Á¦¾ÈÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ e-mail º£À̽ºÀÇ ³íÀÇÀÇ Àå¼Ò´Â Subversion °³¹ß¿¡¼­ÀÇ ÃÖ´ëÁß¿äÀÎ Ä¿¹Â´ÏÄÉÀÌ¼Ç ¼ö´ÜÀÔ´Ï´Ù. ´Ù¸¥ Èï¹Ì°¡ ÀÖ´Â Subversion °ü·Ã ¸®½ºÆ®¿¡ ´ëÇؼ­´Â, Web »çÀÌÆ®ÀÇ ¸ÞÀϸµ¸®½ºÆ®ÀÇ ¼½¼ÇÀ» ºÁ ÁÖ¼¼¿ä.

±×·¯³ª, ¹«¾ùÀÌ ÇÊ¿äÇÑ°¡¶ó´Â °ÍÀ» ¾î¶»°Ô ¾Ë¸é ÁÁÀº °ÍÀϱî¿ä? ÇÁ·Î±×·¡¸Ó¿¡ ÀÖ¾î, °³¹ßÀ» µ½ÀÚ°í ÇÏ´Â Å« Àǵµ¸¦ °¡Á® ÀÖÁö¸¸, ÁÁÀ¸¸é ´ã´çÀÚ¸¦ ÀâÀ» ¼ö ¾ø´Â °ÍÀº ÀÚÁÖ ÀÖ´Â °ÍÀÔ´Ï´Ù. °á±¹, ±Ü°í ½Í´Ù°í »ý°¢ÇÒ±î ÇØ Àå¼Ò°¡ ¾îµò°¡¸¦ ¹ú½á ¾Ë°í ÀÖ¾î Ä¿¹Â´ÏƼ¿¡ Âü°¡ÇÏ´Â »ç¶÷Àº ±×¸¸Å­ ¸¹Áö´Â ¾Ê½À´Ï´Ù. ±×·¯³ª, °³¹ßÀÚÀÇ ³íÀǸ¦ µÚÂÑ´Â °Í¿¡ ÀÇÇØ, ¹ú½á Á¸ÀçÇÏ°í ÀÖ´Â ¹ö±×³ª, ³­¹«ÇÏ´Â ±â´É ¿ä±¸ ¿¡ ÁÖÀǸ¦ ÇâÇÒ ¼ö°¡ ÀÖ¾î, ±× ¾î¶² °ÍÀΰ¡°¡ ´ç½ÅÀÇ Èï¹Ì¸¦ ´ç±æÁöµµ Áö ¼±. ¶Ç, ¹ÌÇØ°áÀÇ, ÇÒ´çÀÌ Á¤ÇØÁ® ÀÖÁö ¾ÊÀº ÀÛ¾÷À» ã´Â ÁÁÀº Àå¼Ò¿Í ÇØ, Subversion À¥ »çÀÌÆ®»óÀÇ Issue Tracking µ¥ÀÌŸº£À̽º°¡ ÀÖ½À´Ï´Ù. °Å±â¼­ Çö½ÃÁ¡¿¡¼­ ¹ú½á ¾Ë·ÁÁ® ÀÖ´Â ¹ö±×¿Í ±â´É ¿ä±¸ÀÇ À϶÷À» º¸´Â °ÍÀÌ ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¸¸¾à ¹«¾ùÀΰ¡ ÀÛÀº ÀϷκÎÅÍ ½ÃÀÛÇÏ°í ½Í´Ù¸é,"bite-sized" ±×·¸´Ù°í Çϴ ǥ°¡ ºÙÀº ¹®Á¦¸¦ ºÁ ÁÖ¼¼¿ä.


1.6.2. ¿ø½Ã ÄÚµåÀÇ Ãëµæ

Äڵ带 ÆíÁýÇÏ·Á¸é , ¿ì¼±Àº Äڵ带 ¼Õ¿¡ ³ÖÀ» ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. ÀÌ°ÍÀº °ø°³ÀÇ Subversion ¼Ò½º ÀúÀå¼Ò(repository)·ÎºÎÅÍ ÀÛ¾÷ Ä«ÇǸ¦ üũ¾Æ¿ô ÇÏÁö ¾ÊÀ¸¸é ¾È µÇ´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù. °£´ÜÇÏ°Ô µé¸³´Ï´Ù¸¸, ¾à°£ ±â±³ÀûÀÎ ÀÛ¾÷¿¡ µË´Ï´Ù. SubversionÀÇ ¿ø½Ã ÄÚµå´Â, Subversion Àڽſ¡ ÀÇÇØ ¹öÀü °ü¸® µÇ°í ÀÖÀ¸¹Ç·Î, ¹«¾ùÀΰ¡ ´Ù¸¥ ¹æ¹ýÀ¸·Î ¹ú½á µ¿ÀÛÇÏ´Â SubversionÀ» ÃëµæÇÏ´Â °Í¿¡ ÀÇÇØ "ÃÖÃÊÀÇ ´Ü¼­¸¦ ¾òÀ»"ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. Á¦ÀÏ º¸Åë ¹æ¹ýÀº, ÃÖ½ÅÀÇ ¹ÙÀ̳ʸ® ÆÐÅ°Áö¸¦ ´Ù¿î·ÎµåÇÑ´Ù(´ç½ÅÀÇ ¸Ó½ÅÀ¸·Î ÀÌ¿ëÇÒ ¼ö ÀÖ´Â °ÍÀÌ ÀÖ´Â °æ¿ìÀÔ´Ï´Ù¸¸), Àΰ¡, ÃÖ½ÅÀÇ ¿ø½Ã ÄÚµåÀÇ tarball (À»)¸¦ ´Ù¿ì ·ÎµåÇØ, ÀÚ½ÅÀÇ Subversion Ŭ¶óÀ̾ðÆ®¸¦ ¸¸µé±îÀÔ´Ï´Ù. ¸¸¾à ¼Ò½º·ÎºÎÅÍ »ý¼ºÇÏ´Â °ÍÀÏ ¼ö ÀÖ´ÂÀº, ¼ø¼­¿¡ ´ëÇؼ­´Â ¼Ò½º Æ®¸®ÀÇ ÃÖ»óÁ¤µµ¿¡ ÀÖ´Â INSTALL ÆÄÀÏ¿¡ ¹Ýµå½Ã ´ëÃæ ÈȾîºÁ ÁÖ¼¼¿ä.

µ¿ÀÛÇÏ´Â Subversion Ŭ¶óÀ̾ðÆ®¸¦ ¼Õ¿¡ ³ÖÀ¸¸é,http://svn.collab.net/repos/svn/trunk ¿¡ ÀÖ´Â SubversionÀÇ ¼Ò½º ÀúÀå¼Ò(repository)ÀÇ ÀÛ¾÷ Ä«ÇǸ¦ üũ¾Æ¿ô ÇÒ Áغñ ÇÏÁö¸¸ µÇ¾î ÀÖ½À´Ï´Ù: [7]

$ svn checkout http://svn.collab.net/repos/svn/trunk subversion
A  HACKING
A  INSTALL
A  README
A  autogen.sh
A  build.conf
...

À§ÀÇ Ä¿¸àµå´Â, ÃÖ÷´ÜÀÇ, ÃֽŠ¹öÀüÀÇ SubversionÀÇ ¿ø½Ã ÄÚµå (À»)¸¦, ÇöÀçÀÇ ÀÛ¾÷ µð·ºÅ丮¿¡subversion ¶ó°í ÇÑ´Ù À̸§ÀÇ ¼­ºê µð·ºÅ丮¸¦ ¸¸µé¾î üũ¾Æ¿ô ÇÕ´Ï´Ù. ºÐ¸íÇÏ°Ô, ¸¶Áö¸· Àμö´Â, °³º°ÀÇ È¯°æ¿¡ ÀÀÇØ Á¶Á¤ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. »õ·Î¿î ÀÛ¾÷ Ä«ÇÇ µð·ºÅ丮¸¦ ¾î´À °Ô ºÎ¸£·Á°í, ÀÌ Á¶ÀÛÀÌ ¿Ï·áÇϸé SubversionÀÇ ¿ø½Ã Äڵ带 Ãëµæ µÇ¾î ÀÖ½À´Ï´Ù. ¹°·Ð, ±× ¹Û¿¡µµ ¸î°³ÀÇ º¸Á¶ÀûÀÎ ÇÁ·Î±×·¥ ¶óÀ̺귯¸®°¡ ÇÊ¿äÇÏ°Ô µË´Ï´Ù(apr, apr-util, µî µî) ÀÚ¼¼ÇÑ °ÍÀº ÀÛ¾÷ Ä«ÇÇÀÇ ÃÖ»óÁ¤µµ¿¡ ÀÖ´Â INSTALL ÆÄÀÏÀ» ºÁ ÁÖ¼¼¿ä.


1.6.3. Ä¿¹Â´ÏƼÀÇ ¹æ½Ä¿¡ Á¤ÅëÇÏ´Â °Í

ÀÌ°ÍÀ¸·Î Subversion ¿ø½Ã ÄÚµåÀÇ ÃÖ½ÅÆÇÀÌ ÀÖ´Â ÀÛ¾÷ Ä«ÇǸ¦ ¼Õ¿¡ ³Ö¾ú´Ù ÀÇ·Î, ¾Æ¸¶ ÀÛ¾÷ Ä«ÇÇÀÇ ÃÖ»óÁ¤µµ µð·ºÅ丮¿¡ ÀÖ´Â HACKING ÆÄÀÏÀ» º¸¸é¼­ µð·ºÅ丮¾ÈÀ» ÀÌ°ÍÀú°Í Á¶»çÇÏ°í ½Í´Ù°í »ý°¢ÇÏ°ÚÁö¿ä. HACKING ÆÄÀÏÀº Subversion¿¡ °øÇåÇϱâ À§ÇÑ ÀϹÝÀûÀÎ ¼ö¼ÓÀÌ Æ÷ÇԵǾî ÀÖ¾î, °Å±â¿¡´Â ¾î¶»°Ô ÇØ, ³ª¸ÓÁöÀÇ ÄÚµå¿Í ¸ð¼øµÇÁö ¾Ê´Â ÇüÅ·Π´ç½ÅÀÇ ¿ø½Ã Äڵ带 ¿Ã¹Ù¸£°Ô ¾²´ÂÁö¶óµç°¡, Á¦¾ÈÇÏ°í ½ÍÀº º¯°æÁ¡¿¡ ¾î¶°ÇÑ È¿À²ÀûÀÎ º¯°æ ·Î±× ¸Þ¼¼Áö¸¦ Àû´ÂÁö, ¾î¶»°Ô º¯°æÁ¡À» Å×½ºÆ®Çϸé ÁÁÀºÁö, µîÀÌ Æ÷ÇԵ˴ϴÙ. SubversionÀÇ ¼Ò½º ÀúÀå¼Ò(repository) ¿¡ ´ëÇÑ Ä¿¹Ô ±ÇÇÑÀº ȹµæÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù½Ç·Â º»À§ÀÇ Á¤ºÎ¿¡ ÀÇÇØ. [8] HACKING ÆÄÀÏÀº ÀÚ½ÅÀÌ Á¦¾ÈÇÏ·Á ÇÏ°í ÀÖ´Â º¯°æÀÌ ±â¼úÀûÀ¸·Î °ÅºÎµÇ´Â °Í ¾ø°Ô ĪÂù¿¡ ÀûÇÕÇÑÁö ¾î¶²Áö¸¦ È®ÀÎÇϱâ À§Çؼ­´Â ÀÌ ÀÌ»ó ¾ø°í ±ÍÁßÇÑ ÀÚ·áÀÔ´Ï´Ù.


1.6.4. ÄÚµåÀÇ º¯°æ°ú Å×½ºÆ®

ÄÚµå¿Í Ä¿¹Â´ÏƼÀÇ Æú¸®½Ã¸¦ ÀÌÇØÇϸé, º¯°æ¿¡ Âø¼öÇÏ´Â °ÍÀÌ ÇÒ ¼ö ÀÖ½À´Ï´Ù. Å« ¹®Á¦¿¡ ÀÓÇÏ°í ÀÖ´Â °æ¿ì¿¡¼­µµ, °Å´ëÇÑ, ÀüºÎ ±âÁ¸ÀÇ °Í°ú ¹Ù²Ù¾î ¹ö¸®´Â °Í °°Àº ¼öÁ¤À» ÇÏ´Â ´ë½Å¿¡, ÀÛÀº, ±×·¯³ª °ü·ÃÀÇ ¾î´À º¯°æÀÇ ¸ðÀÓÀ» ¸¸µé·Á°í ÇÏ´Â °ÍÀÌ ÃÖ¼±ÀÇ ¹æ¹ýÀÔ´Ï´Ù. ÇÏ·Á ÇÏ°í ÀÖ´Â °Í¿¡ ÇÊ¿äÇÑ ÄÚµåÀÇ ¼öÁ¤À» ÇÒ ¼ö ÀÖ´Â ÇÑ ÀûÀ¸¸é, Á¦¾ÈÇÏÀÚ (À¸)·Î ÇÏ°í ÀÖ´Â º¯°æÀº ±× ¸¸Å­ °£´ÜÇÏ°Ô ÀÌÇصǰÚÁö¿ä(±×¸®°í, °ËÅäÇÏ´Â °Íµµ ÆíÇØ Áû¾îÁø´Ù). ¼öÁ¤¼¼Æ®ÀÇ °¢°¢À» º£Ç¬ ÈÄ¿¡´Â, ´ç½ÅÀÇ Subversion Æ®¸®´Â ÄÄÆÄÀÏ·¯°¡ °æ°í¸¦ Çϳªµµ ³»Áö ¾Ê´Â »óÅ°¡ µÇ¾î ÀÖ¾î¾ß ÇÕ´Ï´Ù.

Subversion ¿¡´Â ²Ï öÀúÈ÷ Çß´Ù [9] µ¥±×·¹ÀÌÆ®¸¦ üũÇϱâ À§ÇÑ Å×½ºÆ® ½ºÀ§Æ®°¡ ÀÖ¾î, Á¦¾ÈÇÏ·Á ÇÏ°í ÀÖ´Â º¯°æÀº, ¾î¶°ÇÑ Å×½ºÆ®¿¡¼­µµ ½ÇÆÐÇÏÁö ¾Ê°Ô µÇ¾î ÀÖ´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÕ´Ï´Ù. ¼Ò½º Æ®¸®ÀÇ ÃÖ»óÁ¤µµ·Îmake check (À»)¸¦ ½ÇÇàÇÏ´Â(UnixÀÇ °æ¿ì) ÀÏ·Î, ÀÚ½ÅÀÇ º¯°æÀÇ Ã¼Å©¸¦ ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ´ç½ÅÀÇ °øÇåÀÌ °ÅÀýµÇ´Â Á¦ÀÏ ºü¸¥ ¹æ¹ýÀº(ÀûÀýÇÑ ·Î±× ¸Þ¼¼Áö¸¦ ÀûÁö ¾Ê¾Ò´Ù °æ¿ì ÀÌ¿Ü´Â), Å×½ºÆ®°¡ Åë°úÇÏÁö ¾Ê´Â º¯°æÀ» º¸³»´Â °ÍÀÔ´Ï´Ù.

Á¦ÀÏ ÁÁÀº ½Ã³ª¸®¿À´Â, ½ÇÁ¦·Î ÀûÀýÇÑ Å×½ºÆ®¸¦, Å×½ºÆ® ½ºÀ§Æ®ÇÏ°Ô Ãß°¡ÇØ, ±×·¡¼­ ´ç½ÅÀÇ º¯°æÁ¡ÀÌ ½ÇÁ¦·Î ±â´ëÇÑ °Íó·³ µ¿ÀÛÇÏ´Â °ÍÀÔ´Ï´Ù. ½ÇÁ¦Á¶»ç ÀÖ°í, °¡²û »ç¶÷ÀÌ °øÇåÇÒ ¼ö ÀÖ´Â ÃÖ¼±´Â »õ·Î¿î Å×½ºÆ®¸¦ ´ÜÁö Ãß°¡ ÇÏ´Â °ÍÀÔ´Ï´Ù. ¿¡·¯ÀÇ °è±â°¡ µÇ´Â °Í °°Àº ÇâÈÄÀÇ ¼öÁ¤À¸·ÎºÎÅÍ ÁöÅ°´Â °Í °°Àº Àǹ̸¦ ´ã¾Æ, ÇöÀçÀÇ Subversion·Î µ¿ÀÛÇÏ°í ÀÖ´Â ±â´ÉÀ» À§Çؼ­(¶§¹®¿¡) µ¥±×·¹À̵åÀÇ Å×½ºÆ®¸¦ ¾µ ¼ö°¡ ÀÖ½À´Ï´Ù. ¶Ç, ¹ú½á ¾Ë·ÁÁ® ÀÖ´Â ½ÇÆи¦ º¸À̱â À§ÇÑ »õ·Î¿î Å×½ºÆ®¸¦ ¾²´Â Àϵµ·Î ¿É´Ï´Ù. ÀÌ ¸ñÀûÀ» À§Çؼ­(¶§¹®¿¡)´Â Subversion Å×½ºÆ® ½ºÀ§Æ®´Â, ¾î´À Å×½ºÆ®´Â ½ÇÆÐ ÇÏ´Â °ÍÀÌ ±â´ëµÇ°í ÀÖ´Â °ÍÀ̶ó°í ÁöÁ¤ÇÏ´Â °ÍÀ» ÀÎÁ¤ÇÕ´Ï´Ù. (XFAIL¶ó°í ÇÕ´Ï´Ù), ±×¸®°í Subversion°¡ ±â´ëÇÏ´Â ÇüÅ·Π½ÇÆÐÇÏ´Â ÇÑ, ±× Å×½ºÆ®ÀÇ °á°úÀÎ XFAIL ÀÚü´Â, ¼º°øÇß´Ù°í º¸ÀÔ´Ï´Ù. ¸¶Áö¸·À¸·Î, ÁÁÀº Å×½ºÆ® ½ºÀ§Æ®¸¦ ÁغñÇϸé ÇÒ »Ó(¸¸Å­), ÀÌÇØÇϱ⠾î·Á¿î µ¥±×·¹ÀÌÆ®ÀÇ ¹ö±× (À»)¸¦ Áø´ÜÇϱâ À§Çؼ­ ³¶ºñµÇ´Â ½Ã°£À» ÁÙÀÏ ¼ö°¡ ÀÖ½À´Ï´Ù.


1.6.5. º¯°æÁ¡ÀÇ Á¦°ø

¿ø½Ã Äڵ忡 ´ëÇÑ ¼öÁ¤À» ÇÑ ÈÄ, ¸í·áÇØ °áÁ¤µÈ ·Î±× ¸Þ¼¼Áö¸¦ ¸¸µé¾î, ±×·¯ÇÑ º¯°æÀ» ¼³¸íÇØ, ±× ÀÌÀ¯¸¦ ½á ÁÖ¼¼¿ä. ±×¸®°í email¸¦ °³¹ßÀÚ¿ë ¸ÞÀϸµ¸®½ºÆ®¿¡ º¸³», °Å±â¿¡´Â ·Î±× ¸Þ¼¼Áö¿Í svn diffÀÇ Ãâ·Â(ÀÌ°ÍÀº SubversionÀÇ ÃÖ»óÁ¤µµ ÀÛ¾÷ Ä«ÇÇ ±×¸®°í ½ÇÇàÇØ ÁÖ¼¼¿ä)¸¦ Æ÷ÇÔÇØ ÁÖ¼¼¿ä. Ä¿¹Â´ÏƼÀÇ ¸â¹ö°¡ ´ç½ÅÀÇ º¯°æÀÌ ¹Þ¾Æµé¿©Áø´Ù°í ÆÇ´ÜÇßÀ» °æ¿ì, Ä¿¹Ô ±ÇÇÑÀ» °¡Á³´Ù ´©±º°¡(SubversionÀÇ ¼Ò½º ÀúÀå¼Ò(repository)¿¡ »õ·Î¿î ¸®ºñÀüÀ» ¸¸µå´Â Çã°¡¸¦ °¡Áö°í ÀÖ´Â »ç¶÷)ÀÌ, ´ç½ÅÀÇ º¯°æÀÌ °ø°³µÈ ¿ø½Ã ÄÚµå Æ®¸®¿¡ Ãß°¡ÇÕ´Ï´Ù. ÀúÀå¼Ò(repository)¿¡ ´ëÇؼ­ º¯°æÀ» Á÷Á¢ Ä¿¹ÔÇÏ´Â ±ÇÇÑÀº, ÀÌÁ¡ÀÌ ÀÖ´Â °æ¿ì¿¡¸¸ ÀÎÁ¤µË´Ï´Ù¸¸¾à SubversionÀÇ ÀÌÇسª, ÇÁ·Î±×·¡¹ÖÀÇ ´É·ÂÀ̳ª,"ÆÀ ½ºÇǸ®Æ®"¸¦ ³ªÅ¸³»¸é, ´ç½ÅÀº ¹Ýµå½Ã ±× ±ÇÇÑÀ» ¾òÀ» ¼ö ÀÖ°ÚÁö¿ä.

Notes

[1]

Berkeley DB ÀÇ ¼±ÅÃÀº, Subversion°¡ ÇÊ¿ä·Î ÇÏ°í ÀÖ´Â ¸î°³ÀÇ ÀÚµ¿ÀûÀÎ ±â´ÉÀÌ ÀÖ½À´Ï´Ù. ±×°ÍÀº, µ¥ÀÌÅÍ ÀÏ°ü¼º, ºÒ°¡ºÐÀÇ ±âÀÔ ±â´É, º¹±¸ °¡´É¼º, ¿Â¶óÀÎ ¹é¾÷, µîÀÔ´Ï´Ù.

[2]

¿ì¸®´Â, ½Ã°£Àº ½ÇÁ¦·Î´ÂÁ¦£´ Â÷¿øÀÌ´Ù ±×·¸´Ù°í ÇÏ´Â ÀλóÀ» Âß °¡Áö°í ÀÖ´ø SFÆÄÀÏ¿¡ ¼îÅ©¸¦ Áشٰí ÇÏ´Â °ÍÀ» ÀÌÇØÇÏ°í ÀÖ°í, ´Ù¸¥ ÀÌ·ÐÀ» ¿ì¸®°¡ ¼±¾ðÇÏ´Â °Í¿¡ ÀÇÇØ »ý±ä´Ù ½É¸®ÀûÀÎ Æ®¶ó¿ì¸¶¿¡ ´ëÇؼ­´Â »ç°úÇÏÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù.

[3]

Subversion ´Â ANSI ½Ã½ºÅÛ ÄÝ°ú µ¥ÀÌÅÍÇüÀ» ÇÒ ¼ö ÀÖ´Â ÇÑ ÀÌ¿ëÇÏ°í ÀÖ½À´Ï´Ù.

[4]

Neon ¿Í Berkeley DB ´Â ±×·¯ÇÑ ÇÁ·Î±×·¥ ¶óÀ̺귯¸®ÀÇ ¿¹ÀÔ´Ï´Ù.

[5]

Áï, ¿£Æ®¸®ÀÇ URL´Â Ä£µð·ºÅ丮 URL¿Í ¿£Æ®¸® ¸íĪÀ» ¿¬°áÇÑ °Í°ú °°ÀºÀ¸·Î °£ÁÖÇÑ´Ù°í ÇÏ´Â °ÍÀÔ´Ï´Ù.

[6]

ÀÌÇØ¿Í °°ÀÌ, ¾î·µç Subversion ´Â Á» ´õ ÃÖ±ÙÀÌ µÇ¾î, °íÀ¯ÀÇ ÇÁ·ÎÅäÄÝ¿¡ ÁøÈ­Çß½À´Ï´Ù. libsvn_ra_svn ¸ðµâÀÇ ½ÇÀåÀÌ ÀÌ°ÍÀÔ´Ï´Ù.

[7]

ÀÌ ¿¹·Î üũ¾Æ¿ô ÇÏ´Â URL´Â,svn·Î ³¡³ª´Â °ÍÀº ¾ø°í,trunk¶ó°í ÇÏ´Â ¼­ºê µð·ºÅ丮°¡ µÇ¾î ÀÖ½À´Ï´Ù. ÀÌ ÀÌÀ¯¿¡ ´ëÇؼ­´Â, SubversionÀÇ ºê·£Ä¡(branch)¿Í ÅÂ±× ¸ðµ¨ÀÇ ³íÀǸ¦ ÂüÁ¶ÇØ ÁÖ¼¼¿ä.

[8]

ÀÌ°ÍÀº ¹«¾ùÀΰ¡ÀÇ ¿¤¸®Æ® ÁÖÀÇ¿Í °°ÀÌ º¸ÀÏÁöµµ ¸ð¸£Áö ¾Ê½À´Ï´Ù¸¸,"Ä¿¹Ô ±ÇÇÑÀ» ȹµæÇÑ´Ù"¶ó°í ÇÏ´Â °³³äÀº È¿À²À» °í·ÁÇÑ ÀÏÀÔ´Ï´Ù ¾ÈÀüÇØ µµ¿òÀÌ µÇ´Â ´©±º°¡ÀÇ º¯°æÀ» °ËÅäÇØ Àû¿ëÇϱâ À§ÇØ(¶§¹®¿¡) ³ë·Â¿¡ °É¸®´Â ½Ã°£°ú À§ÇèÇÑ º¯°æÀ» ¹ÙÅÁÀ¸·Î µÇµ¹¸°´Ù°í ÇÏ´Â ÀáÀçÀûÀÎ ½Ã°£°úÀÇ »çÀÌÀÇ ±ÕÇüÀÔ´Ï´Ù.

[9]

¾Æ¸¶, ÆËÄÜÀÌ¶óµµ ¸Ô°í ½Í¾îÁúÁöµµ. ¿©±â¼­ÀÇ"öÀúÇÑ"Àº, ºñ´ëÈ­ÀûÀÎ ¸Ó½ÅÀ¸·Î, ¾à 30ºÐ °É¸°´Ù°í ÇÏ´Â Á¤µµÀÇ Àǹ̷Π¹ø¿ªÇØ ÁÖ¼¼¿ä.


ID
Password
Join
Your mode of life will be changed for the better because of new developments.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2005-06-01 14:12:17
Processing time 0.0026 sec