¼ÒÇÁÆ®¿þ¾îÀÇ º¹À⼺À» ´Ù½º·Á¶ó!¼ÒÇÁÆ®¿þ¾îÀÇ º¹À⼺Àº µµ¸ÞÀο¡¼ ±âÀÎÇÏ°í, ±×·¯ÇÑ º¹À⼺À» ¾î¶»°Ô ´Ù·ç´À³Ä°¡ ÇÁ·ÎÁ§Æ®ÀÇ ¼ºÆи¦ Á¿ìÇÑ´Ù. µµ¸ÞÀÎ ÁÖµµ ¼³°è(Domain-Driven Design)´Â º¹ÀâÇÑ ¿ä°ÇÀ» Áö´Ñ ¼ÒÇÁÆ®¿þ¾î¸¦ °³¹ßÇÏ´Â Á¢±Ù¹ýÀÇ Çϳª´Ù. µµ¸ÞÀÎ ÁÖµµ ¼³°è¿¡¼´Â ¼ÒÇÁÆ®¿þ¾î ÇÁ·ÎÁ§Æ®°¡ ÇÙ½É µµ¸ÞÀΰú µµ¸ÞÀÎ ·ÎÁ÷¿¡ ÁýÁßÇÏ°í, º¹ÀâÇÑ ¼³°è´Â ¸ðµ¨À» ±â¹ÝÀ¸·Î ÇØ¾ß ÇÑ´Ù´Â ÀüÁ¦¿¡¼ Ãâ¹ßÇØ À¯¿ëÇÑ ¼ÒÇÁÆ®¿þ¾î¸¦ °³¹ßÇÏ´Â Çè³ÇÑ ¿©Á¤¿¡¼ Áß¿äÇÑ ¼³°è °áÁ¤À̳ª Àü·«Àû »ç°í¿Í ¾È¸ñÀÌ ÇÊ¿äÇÒ ¶§¸¶´Ù ±¸½ÉÁ¡ ¿ªÇÒÀ» ÇÒ °ÍÀÌ´Ù.ÀúÀÚÀÎ ¿¡¸¯ ¿¡¹Ý½ºÀÇ ¿À·£ °æÇè°ú ÅëÂû·ÂÀÌ ºüÁü¾øÀÌ ´ã±ä ¡ºµµ¸ÞÀÎ ÁÖµµ ¼³°è¡»´Â º¹ÀâÇÑ ¼ÒÇÁÆ®¿þ¾î¸¦ °³¹ßÇÏ´Â ÇÁ·ÎÁ§Æ®¿¡¼ ÀÇ»ç°áÁ¤ÀÇ ±â¹ÝÀÌ µÇ´Â Ʋ°ú ¼³°è ³íÀÇ¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Â ¾îÈÖ¸¦ Á¦°øÇÑ´Ù. ´Ü¼øÈ÷ ¼³°è³ª ÇÁ·Î¼¼½º¿¡ °üÇÑ Ã¥À» ³Ê¸Ó ¡ºµµ¸ÞÀÎ ÁÖµµ ¼³°è¡»´Â ±× ÀÌ»óÀÇ ½Ç¿ëÀûÀÌ°í ÇÕ¸®ÀûÀÎ Á¢±Ù¹ý°ú ¼³°è ¹× ¸ðµ¨¸µ ±â¹ý, ¿ì¼ö ½Çõ¹ýÀ» µ¶ÀÚ¿¡°Ô Á¦½ÃÇÑ´Ù. ¡ºµµ¸ÞÀÎ ÁÖµµ ¼³°è¡»´Â ºñ´Ü ¼ÒÇÁÆ®¿þ¾î °³¹ßÀÚ¸¸ÀÌ ¾Æ´Ï¶ó ¼ÒÇÁÆ®¿þ¾î ÇÁ·ÎÁ§Æ®¿¡ Âü¿©ÇÏ´Â ¸ðµç À̵éÀÌ º¹À⼺À̶ó´Â µµÀü°úÁ¦¸¦ ´Ù½º·Á¼ ¼ÒÇÁÆ®¿þ¾î ÇÁ·ÎÁ§Æ®¸¦ ¿Ã¹Ù¸¥ ±æ·Î À̲ø¾î ³ª°¡´Â µ¥ µµ¿òµÉ °ÍÀÌ´Ù.
¢Ã 01ºÎ µ¿ÀÛÇÏ´Â µµ¸ÞÀÎ ¸ðµ¨ ¸¸µé±âµµ¸ÞÀÎ ÁÖµµ ¼³°è¿¡¼ÀÇ ¸ðµ¨ÀÇ À¯¿ë¼º¼ÒÇÁÆ®¿þ¾îÀÇ º»Áú01Àå Áö½Ä Ž±¸È¿°úÀûÀÎ ¸ðµ¨¸µÀÇ ¿ä¼ÒÁö½Ä Ž±¸Áö¼ÓÀûÀÎ ÇнÀÁö½ÄÀÌ Ç³ºÎÇÑ ¼³°è½ÉÃþ ¸ðµ¨02Àå ÀÇ»ç¼ÒÅë°ú ¾ð¾î »ç¿ëUBIQUITOUS LANGUAGE (º¸Æí ¾ð¾î)Å©°Ô ¼Ò¸®³»¾î ¸ðµ¨¸µÇϱâÇÑ ÆÀ, ÇÑ ¾ð¾î¹®¼¿Í ´ÙÀ̾î±×·¥- ±Û·Î ¾´ ¼³°è ¹®¼- ½ÇÇà °¡´ÉÇÑ ±â¹Ý¼³¸íÀ» À§ÇÑ ¸ðµ¨03Àå ¸ðµ¨°ú ±¸ÇöÀÇ ¿¬°èMODEL-DRIVEN DESIGN (¸ðµ¨ ÁÖµµ ¼³°è)¸ðµ¨¸µ Æз¯´ÙÀÓ°ú µµ±¸ Áö¿ø³»ºÎ µå·¯³»±â: ¿Ö ¸ðµ¨ÀÌ »ç¿ëÀÚ¿¡°Ô Áß¿äÇÑ°¡HANDS-ON MODELER (½ÇõÀû ¸ðµ¨·¯)¢Ã 02ºÎ ¸ðµ¨ ÁÖµµ ¼³°èÀÇ ±âº» ¿ä¼Ò04Àå µµ¸ÞÀÎÀÇ °Ý¸®LAYERED ARCHITECTURE (°èÃþÇü ¾ÆÅ°ÅØó)- °èÃþ °£ °ü°è ¼³Á¤- ¾ÆÅ°ÅØó ÇÁ·¹ÀÓ¿öÅ©µµ¸ÞÀÎ °èÃþÀº ¸ðµ¨ÀÌ »ì¾Æ°¡´Â °÷SMART UI(Áö´ÉÇü UI) "¾ÈƼ ÆÐÅÏ"´Ù¸¥ Á¾·ùÀÇ °Ý¸®05Àå ¼ÒÇÁÆ®¿þ¾î¿¡¼ Ç¥ÇöµÇ´Â ¸ðµ¨¿¬°ü°ü°èENTITY (¿£Æ¼Æ¼, ÂüÁ¶°´Ã¼¶ó°íµµ ÇÔ)- ENTITY ¸ðµ¨¸µ- ½Äº° ¿¬»êÀÇ ¼³°èVALUE OBJECT (°ª °´Ã¼)- VALUE OBJECTÀÇ ¼³°è- VALUE OBJECT¸¦ Æ÷ÇÔÇÑ ¿¬°ü°ü°è ¼³°èSERVICE(¼ºñ½º)- SERVICE¿Í °Ý¸®µÈ µµ¸ÞÀÎ °èÃþ- ±¸¼º ´ÜÀ§- SERVICE¿¡ Á¢±ÙÇϱâMODULE(¸ðµâ, ÆÐÅ°Áö¶ó°íµµ ÇÔ)- ±â¹ÎÇÑ MODULE- ÀÎÇÁ¶ó½ºÆ®·°Ã³ ÁÖµµ ÆÐÅ°ÁöÈÀÇ ÇÔÁ¤¸ðµ¨¸µ Æз¯´ÙÀÓ- °´Ã¼ Æз¯´ÙÀÓÀÌ Áö¹èÀûÀÎ ÀÌÀ¯- °´Ã¼ ¼¼°è¿¡¼ °´Ã¼°¡ ¾Æ´Ñ °Íµé- Æз¯´ÙÀÓÀÌ È¥ÀçÇÒ ¶§ MODEL-DRIVEN DESIGN °í¼öÇϱâ06Àå µµ¸ÞÀÎ °´Ã¼ÀÇ »ý¸íÁÖ±âAGGREGATE (ÁýÇÕ)FACTORY (ÆÑÅ͸®)- FACTORY¿Í FACTORYÀÇ À§Ä¡ ¼±Á¤- »ý¼ºÀÚ¸¸À¸·Î ÃæºÐÇÑ °æ¿ì- ÀÎÅÍÆäÀ̽º ¼³°è- ºÒº¯½Ä ·ÎÁ÷ÀÇ À§Ä¡- ENTITY FACTORY¿Í VALUE OBJECT FACTORY- ÀúÀåµÈ °´Ã¼ÀÇ À籸¼ºREPOSITORY (¸®ÆÄÁöÅ͸®)- REPOSITORY¿¡ ÁúÀÇÇϱâ- Ŭ¶óÀ̾ðÆ® Äڵ尡 REPOSITORY ±¸ÇöÀ» ¹«½ÃÇÑ´Ù (°³¹ßÀÚ´Â ±×·¸Áö ¾ÊÁö¸¸)- REPOSITORY ±¸Çö- ÇÁ·¹ÀÓ¿öÅ©ÀÇ È°¿ë- FACTORY¿ÍÀÇ °ü°è°ü°èÇü µ¥ÀÌÅͺ£À̽º¸¦ À§ÇÑ °´Ã¼ ¼³°è07Àå ¾ð¾îÀÇ »ç¿ë(È®Àå ¿¹Á¦)ȹ° ÇØ¿î ½Ã½ºÅÛ ¼Ò°³µµ¸ÞÀÎ °Ý¸®: ÀÀ¿ë ±â´É ¼Ò°³ENTITY¿Í VALUE OBJECTÀÇ ±¸ºÐ- ¿ªÇÒ°ú ±× ¹ÛÀÇ ¼Ó¼ºÇØ¿î µµ¸ÞÀÎÀÇ ¿¬°ü°ü°è ¼³°èAGGREGATEÀÇ °æ°èREPOSITORYÀÇ ¼±Á¤½Ã³ª¸®¿À ¿¬½À- ¿¹Á¦ ¾ÖÇø®ÄÉÀÌ¼Ç ±â´É: ȹ°ÀÇ ¸ñÀûÁö º¯°æ- ¿¹Á¦ ¾ÖÇø®ÄÉÀÌ¼Ç ±â´É: ¹Ýº¹ ¾÷¹«°´Ã¼ »ý¼º- Cargo¿¡ ´ëÇÑ FACTORY¿Í »ý¼ºÀÚ- Handling Event Ãß°¡¸®ÆÑÅ͸µÇÒ ½Ã°£: Cargo AGGREGATEÀÇ ¼³°è ´ë¾ÈÇØ¿î ¸ðµ¨ÀÇ MODULE»õ·Î¿î ±â´É µµÀÔ: ÇÒ´ç·® °Ë»ç- µÎ ½Ã½ºÅÛÀÇ ¿¬°è- ¸ðµ¨ °È: ¾÷¹« ºÐ¾ß ³ª´©±â- ¼º´É ÃÖÀûÈÃÖÁ¾ °ËÅä¢Ã 03ºÎ ´õ ½ÉÃþÀûÀÎ ÅëÂû·ÂÀ» ÇâÇÑ ¸®ÆÑÅ͸µ¸®ÆÑÅ͸µ ¼öÁؽÉÃþ ¸ðµ¨½ÉÃþ ¸ðµ¨/À¯¿¬ÇÑ ¼³°è¹ß°ß °úÁ¤08Àå µµ¾àµµ¾à¿¡ °üÇÑ ÀÏÈ- ±¦ÂúÀº ¸ðµ¨À̱â´Â ÇÏÁö¸¸¡¦¡¦- µµ¾à- ´õ ½ÉÃþÀûÀÎ ¸ðµ¨- ³ÃÁ¤ÇÑ °áÁ¤- °á¸»±âȸ±âº»¿¡ ÁýÁßÇ϶óÈıâ : ¿¬ÀÌÀº »õ·Î¿î ÅëÂû·ÂÀÇ ÃâÇö09Àå ¾Ï½ÃÀûÀÎ °³³äÀ» ¸íÈ®ÇÏ°Ô°³³ä ÆÄÇìÄ¡±â- ¾ð¾î¿¡ ±Í ±â¿ï¿©¶ó- ¾î»öÇÑ ºÎºÐÀ» Á¶»çÇ϶ó- ¸ð¼øÁ¡¿¡ ´ëÇØ ±íÀÌ °í¹ÎÇ϶ó- ¼ÀûÀ» Âü°íÇ϶ó- ½ÃµµÇÏ°í ¶Ç ½ÃµµÇ϶ó´Ù¼Ò ºÒ¸íÈ®ÇÑ °³³äÀÇ ¸ðµ¨¸µ- ¸í½ÃÀûÀÎ Á¦¾àÁ¶°Ç- µµ¸ÞÀÎ °´Ã¼·Î¼ÀÇ ÇÁ·Î¼¼½ºSPECIFICATION (¸í¼¼)- SPECIFICATIONÀÇ Àû¿ë°ú ±¸Çö10Àå À¯¿¬ÇÑ ¼³°èINTENTION-REVEALING INTERFACE (Àǵµ¸¦ µå·¯³»´Â ÀÎÅÍÆäÀ̽º)SIDE -EFFECT-FREE FUNCTION (ºÎ¼öÈ¿°ú°¡ ¾ø´Â ÇÔ¼ö)ASSERTION (´ÜÁ¤)CONCEPTUAL CONTOUR (°³³äÀû À±°û)STANDALONE CLASS (µ¶¸³Çü Ŭ·¡½º)CLOSURE OF OPERATION (¿¬»êÀÇ ´ÝÈû)¼±¾ðÀû ¼³°è- µµ¸ÞÀÎ Æ¯È ¾ð¾î¼±¾ðÀûÀÎ Çü½ÄÀÇ ¼³°è- SPECIFICATIONÀ» ¼±¾ðÀûÀÎ Çü½ÄÀ¸·Î È®ÀåÇϱâ¹ÞÀ½°¢- ¼ºê µµ¸ÞÀÎÀ¸·Î ºÐÇÒÇ϶ó- °¡´ÉÇÏ´Ù¸é Á¤¸³µÈ Á¤Çüȸ¦ È°¿ëÇ϶ó11Àå ºÐ¼® ÆÐÅÏÀÇ Àû¿ë12Àå ¸ðµ¨°ú µðÀÚÀÎ ÆÐÅÏÀÇ ¿¬°áSTRATEGY (POLICY¶ó°íµµ ÇÔ)COMPOSITE (º¹ÇÕü)±×·¸´Ù¸é FLYWEIGHT´Â?13Àå ´õ ½ÉÃþÀûÀÎ ÅëÂû·ÂÀ» ÇâÇÑ ¸®ÆÑÅ͸µ½ÃÀÛÁ¶»çÆÀ¼±Çà ±â¼ú°³¹ßÀÚ¸¦ À§ÇÑ ¼³°èŸÀ̹ÖÀ§±â¸¦ ±âȸ·Î¢Ã 04ºÎ Àü·«Àû ¼³°è14Àå ¸ðµ¨ÀÇ ¹«°á¼º À¯ÁöBOUNDED CONTEXT (Á¦ÇÑµÈ ÄÁÅؽºÆ®)- BOUNDED CONTEXT ¾ÈÀÇ ±Õ¿ ÀνÄCONTINUOUS INTEGRATION (Áö¼ÓÀûÀÎ ÅëÇÕ)CONTEXT MAP (ÄÁÅؽºÆ® ¸Ê)- CONTEXT °æ°è¿¡¼ÀÇ Å×½ºÆ®- CONTEXT MAPÀÇ Á¶Á÷È¿Í ¹®¼ÈBOUNDED CONTEXT °£ÀÇ °ü°èSHARED KERNEL (°øÀ¯ Ä¿³Î)CUSTOMER/SUPPLIER DEVELOPMENTTEAM (°í°´/°ø±ÞÀÚ °³¹ß ÆÀ)CONFORMIST (ÁؼöÀÚ)ANTICORRUPTION LAYER (¿À·ù ¹æ? °èÃþ)- ANTICORRUPTION LAYERÀÇ ÀÎÅÍÆäÀ̽º ¼³°è- ANTICORRUPTION LAYERÀÇ ±¸Çö- ±³ÈÆÀûÀÎ À̾߱âSEPARATE WAYS (°¢ÀÚÀÇ ±æ)OPEN HOST SERVICE (°ø°³ È£½ºÆ® ¼ºñ½º)PUBLISHED LANGUAGE (°øÇ¥µÈ ¾ð¾î)ÄÚ³¢¸® ÅëÀÏÇϱâ¸ðµ¨ÀÇ ÄÁÅؽºÆ® Àü·« ¼±ÅÃ- ÆÀ ÀÇ»ç°áÁ¤ ¶Ç´Â ±× ÀÌ»ó- ¿ì¸® ÀÚ½ÅÀ» ÄÁÅؽºÆ®¿¡ ¹èÄ¡Çϱâ- °æ°èÀÇ º¯Çü- º¯°æÇÒ ¼ö ¾ø´Ù´Â »ç½ÇÀ» ÀÎÁ¤Çϱâ: ¿ÜºÎ ½Ã½ºÅÛÀÇ ¹¦»ç- ¿ÜºÎ ½Ã½ºÅÛ°úÀÇ °ü°è- ¼³°è ÁßÀÎ ½Ã½ºÅÛ- °³º° ¸ðµ¨ÀÇ Æ¯¼öÇÑ ¿ä±¸»çÇ× ÃæÁ·Çϱâ- ¹èÄ¡- ŸÇùÁ¡- ÇÁ·ÎÁ§Æ®°¡ ÀÌ¹Ì ÁøÇà ÁßÀÏ ¶§º¯Çü- CONTEXT º´ÇÕ: SEPARATE WAYS ¡æ SHARED KERNEL- CONTEXT º´ÇÕ: SHARED KERNEL ¡æ CONTINUOUS INTEGRATION- ·¹°Å½Ã ½Ã½ºÅÛÀÇ ´Ü°èÀû Æó±â- OPEN HOST SERVICE ¡æ PUBLISHED LANGUAGE15Àå µð½ºÆ¿·¹À̼ÇCORE DOMAIN (ÇÙ½É µµ¸ÞÀÎ)- CORE ¼±ÅÃ- ´©°¡ ±× ÀÏÀ» ÇÒ °ÍÀΰ¡?µð½ºÆ¿·¹À̼ÇÀÇ ´Ü°èÀû È®´ëGENERIC SUBDOMAIN (ÀÏ¹Ý ÇÏÀ§ µµ¸ÞÀÎ)- ÀϹÝÈ°¡ Àç»ç¿ë °¡´ÉÇÏ´Ù´Â Àǹ̴ ¾Æ´Ï´Ù- ÇÁ·ÎÁ§Æ® À§Çè °ü¸®DOMAIN VISION STATEMENT (µµ¸ÞÀÎ ºñÀü ¼±¾ð¹®)HIGHLIGHTED CORE (°Á¶µÈ ÇÙ½É)- µð½ºÆ¿·¹ÀÌ¼Ç ¹®¼- Ç¥½ÃµÈ CORE- ÇÁ·Î¼¼½º µµ±¸·Î¼ÀÇ µð½ºÆ¿·¹ÀÌ¼Ç ¹®¼COHESIVE MECHANISM (ÀÀÁý·Â ÀÖ´Â ¸ÞÄ¿´ÏÁò)- GENERIC SUBDOMAIN°ú COHESIVE MECHANISM- MECHANISMÀÌ CORE DOMAINÀÇ ÀϺÎÀÎ °æ¿ì¼±¾ðÀû Çü½ÄÀÇ µð½ºÆ¿·¹À̼ÇSEGREGATED CORE (ºÐ¸®µÈ ÇÙ½É)- SEGREGATED CORE¸¦ ¸¸µå´Â µ¥ µå´Â ºñ¿ë- ¹ßÀüÇÏ´Â ÆÀÀÇ ÀÇ»ç°áÁ¤ABSTRACT CORE (Ãß»óÈµÈ ÇÙ½É)½ÉÃþ ¸ðµ¨ÀÇ µð½ºÆ¿·¹À̼Ǹ®ÆÑÅ͸µÀÇ ´ë»ó ¼±ÅÃ16Àå ´ë±Ô¸ð ±¸Á¶EVOLVING ORDER (¹ßÀüÇÏ´Â Áú¼)SYSTEM METAPHOR (½Ã½ºÅÛ ÀºÀ¯)- "¹Ì¼÷ÇÑ ÀºÀ¯"¿Í ±×°ÍÀÌ ÇÊ¿ä ¾ø´Â ÀÌÀ¯RESPONSIBILITY LAYER (Ã¥ÀÓ °èÃþ)- ÀûÀýÇÑ °èÃþÀÇ ¼±ÅÃKNOWLEDGE LEVEL (Áö½Ä ¼öÁØ)PLUGGABLE COMPONENT FRAMEWORK (ÂøÅ»½Ä ÄÄÆ÷³ÍÆ® ÇÁ·¹ÀÓ¿öÅ©)±¸Á¶´Â ¾ó¸¶³ª Á¦¾à¼ºÀ» Áö³à¾ß Çϴ°¡?Àß ¸Â¾Æ¶³¾îÁö´Â ±¸Á¶¸¦ ÇâÇÑ ¸®ÆÑÅ͸µ- ÃÖ¼ÒÁÖÀÇ- ÀÇ»ç¼ÒÅë°ú ÀÚ±â ÈÆ·Ã- À籸Á¶È°¡ À¯¿¬ÇÑ ¼³°è¸¦ ³º´Â´Ù- µð½ºÆ¿·¹À̼ÇÀº ºÎÇϸ¦ ÁÙÀδÙ17Àå Àü·«ÀÇ Á¾ÇÕ´ë±Ô¸ð ±¸Á¶¿Í BOUNDED CONTEXT¿ÍÀÇ °áÇÕ´ë±Ô¸ð ±¸Á¶¿Í µð½ºÆ¿·¹À̼ǰúÀÇ °áÇÕÆò°¡ ¸ÕÀú´©°¡ Àü·«À» ¼¼¿ì´Â°¡?- ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ß¿¡¼ â¹ßÇÏ´Â ±¸Á¶- °í°´(¾ÖÇø®ÄÉÀÌ¼Ç °³¹ßÆÀ) Áß½ÉÀÇ ¾ÆÅ°ÅØó ÆÀÀü·«Àû ¼³°è °áÁ¤À» À§ÇÑ 6°¡Áö Çʼö ¿ä¼Ò- ±â¼ú ÇÁ·¹ÀÓ¿öÅ©µµ ¸¶Âù°¡Áö´Ù- Á¾ÇÕ°èȹÀ» Á¶½ÉÇ϶ó¢Ã °á·Ð¸ÎÀ½¸»¾ÕÀ» ³»´Ùº¸¸çºÎ·Ï ÀÌ Ã¥¿¡ Æ÷ÇÔµÈ ÆÐÅÏÀÇ »ç¿ë¹ýÆÐÅÏ À̸§¿ë¾î ¼³¸íÂü°í ¹®Çå»çÁø ÇùÂùã¾Æº¸±â