MongoDBÀÇ "Know-How"°¡ ¾Æ´Ñ "Know-Why"¸¦ Àü´ÞÇØ µå¸³´Ï´Ù!MongoDB ¸Þ´º¾óÀº ¾ÆÁÖ °£°áÇÏ°í ±âº»ÀûÀÎ ³»¿ë¿¡ Ãæ½ÇÇÏ°Ô ÀÛ¼ºµÇ¾î ÀÖ´Ù. ÇÏÁö¸¸ ¹®¹ýÀ̳ª ¸í·É¸¸À¸·Î´Â DBMS¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù. ³»ºÎ ÀÛµ¿ ¹æ½ÄÀ» ¸ð¸£¸é ¼ö¸¹Àº ½ÃÇàÂø¿À¸¦ °ÅÄ¡°Ô µÇ¸ç, ÀÌ·± ½ÃÇàÂø¿À´Â °á±¹ ¼ºñ½º Ç°Áú ÀúÇÏ·Î ¿¬°áµÉ °ÍÀÌ´Ù. ÀÌ Ã¥¿¡¼´Â MongoDB ¼¹ö¸¦ »ç¿ëÇÏ´Â µ¥ ²À ÇÊ¿äÇÑ ¾ÆÅ°ÅØó¿Í ÇÔ²² MongoDB ³»ºÎ(Internal)¿¡ ´ëÇØ ÀÚ¼¼È÷ ¼³¸íÇÏ°í ÀÖ´Ù. ¶ÇÇÑ ´Ù¾çÇÑ ½ÃÇà Âø¿À¸¦ ÁÙÀ̱â À§ÇÑ ÁÖÀÇ »çÇ׵鿡 ´ëÇؼµµ ¼³¸íÇÑ´Ù.ÀÌ Ã¥Àº MongoDB ¼¹ö(ƯÈ÷ MongoDB 1.x¿Í 2.x ¹öÀü)¿¡ ½Ç¸ÁÇß´ø µ¶Àڵ鿡°Ô ´Ù½Ã ÇÑ ¹ø MongoDB ¼¹öÀÇ °¡´É¼ºÀ» º¸¿©ÁÖ°í, »õ·Î¿î DBMS ¼Ö·ç¼ÇÀ» ã°í ÀÖ´Â µ¶Àڵ鿡°Ô ´ë¾ÈÀ» Á¦½ÃÇØ ÁÙ °ÍÀ̶ó »ý°¢ÇÑ´Ù. ÀÌ Ã¥¿¡¼ ´Ù·ç´Â ³»¿ë * µ¥ÀÌÅͺ£À̽º Æ®·»µå* MongoDB º¹Á¦¿Í »þµù* WiredTiger ½ºÅ丮Áö ¿£ÁøÀÇ ³»ºÎ ±¸Á¶¿Í ÀÛµ¿ ¹æ½Ä* MongoDB À妽º¿Í Äõ¸® Æ©´×* ÇÑ±Û Àü¹® °Ë»ö°ú À§Ä¡ ±â¹Ý °Ë»ö* MongoDBÀÇ Àá±Ý°ú Æ®·£Àè¼Ç* ¿î¿µÀ» À§ÇÑ º¸¾È°ú ¹é¾÷
ÄÄÇ»ÅÍ °úÇÐÀ» Àü°øÇÏ°í, ±ÝÀ¶±ÇÀÇ CRM/DW ÇÁ·ÎÁ§Æ® ¸®´õ·Î Âü¿©ÇßÀ¸¸ç, 2³â¿©°£ DW¸¦ À§ÇÑ ETL ¼Ö·ç¼ÇÀ» °³¹ßÇß´Ù. ÀÌÈÄ ³×À̹ö¿Í ¶óÀÎÀÇ DBA·Î ±Ù¹«ÇßÀ¸¸ç ÇöÀç Ä«Ä«¿À¿¡¼ DB ¿î¿µ°ú Æ®·¯ºí½´Æà ±×¸®°í ½Å±â¼ú º¥Ä¡¸¶Å·°ú DBMS ¿£Áø ÃÖÀûȸ¦ ¼öÇàÇÏ°í ÀÖ´Ù. ¶ÇÇÑ Áö±Ý±îÁö ¹è¿î ³»¿ë°ú °æÇèÇÑ °ÍÀ» ÀüÆÄÇϱâ À§Çؼ Àú¼ú È°µ¿°ú ¼¼¹Ì³ª¸¦ ÁøÇàÇÏ°í ÀÖ´Ù. Àú¼·Î´Â ¡ºPHP 5 À¥ ÇÁ·Î±×·¡¹Ö (2007. ´ë¸²)¡»,¡ºReal MySQL(2012. À§Å°ºÏ½º)¡»,¡ºReal MariaDB(2014. À§Å°ºÏ½º)¡»°¡ ÀÖ°í, ¹ø¿ª¼·Î´Â ¡ºMySQL ¼º´É ÃÖÀûÈ(2010. À§Å°ºÏ½º)¡»°¡ ÀÖ´Ù.
01Àå: MongoDB1.1 µ¥ÀÌÅͺ£À̽º Æ®·»µå1.2 MongoDBÀÇ ¶óÀ̼±½º1.3 MongoDB ¹öÀü __1.3.1 setFeatureCompatibilityVersion ¿É¼Ç 1.4 MongoDB vs. RDBMS(MySQL) 1.5 MongoDB vs. NoSQL(HBase) 1.6 MongoDB ¾ÆÅ°ÅØó 1.7 MongoDB ¹èÆ÷ ÇüÅ __1.7.1 ´ÜÀÏ ³ëµå(Standalone) __1.7.2 ´ÜÀÏ ·¹Çø®Ä« ¼Â(Single Replica-set)__1.7.3 »þµùµÈ Ŭ·¯½ºÅÍ(Sharded Cluster) 02Àå: ½ºÅ丮Áö ¿£Áø2.1 Ç÷¯±×ÀÎ ½ºÅ丮Áö ¿£Áø__2.1.1 MongoDB ½ºÅ丮Áö ¿£Áø__2.1.2 ½ºÅ丮Áö ¿£Áø È¥ÇÕ »ç¿ë2.2 MMAPv1 ½ºÅ丮Áö ¿£Áø __2.2.1 MMAPv1 ½ºÅ丮Áö ¿£Áø ¼³Á¤ __2.2.2 µ¥ÀÌÅÍ ÆÄÀÏ ±¸Á¶ __2.2.3 MongoDB ¼¹ö »óÅ ȮÀÎ __2.2.4 ¿î¿µÃ¼Á¦ ij½Ã __2.2.5 µ¥ÀÌÅÍ ÆÄÀÏ ÇÁ·¹±×¸àÅ×ÀÌ¼Ç 2.3 WiredTiger ½ºÅ丮Áö ¿£Áø __2.3.1 WiredTiger ½ºÅ丮Áö ¿£Áø ¼³Á¤ __2.3.2 WiredTiger ½ºÅ丮ÁöÀÇ ÀúÀå ¹æ½Ä __2.3.3 µ¥ÀÌÅÍ ÆÄÀÏ ±¸Á¶__2.3.4 WiredTigerÀÇ ³»ºÎ ÀÛµ¿ ¹æ½Ä __2.3.5 °øÀ¯ ij½Ã __2.3.6 ij½Ã À̺ò¼Ç(Cache Eviction) __2.3.7 üũÆ÷ÀÎÆ®(Checkpoint) __2.3.8 MVCC(Multi Version Concurrency Control) __2.3.9 µ¥ÀÌÅÍ ºí·Ï(ÆäÀÌÁö) __2.3.10 ¿î¿µÃ¼Á¦ ij½Ã(ÆäÀÌÁö ij½Ã) __2.3.11 ¾ÐÃà __2.3.12 ¾ÏÈ£È 2.4 ¸Þ¸ð¸® ½ºÅ丮Áö ¿£Áø __2.4.1 Percona MongoDBÀÇ ¸Þ¸ð¸® ½ºÅ丮Áö ¿£Áø ¼³Á¤ __2.4.2 Percona ¸Þ¸ð¸® ½ºÅ丮Áö ¿£ÁøÀÇ Æ¯¼º2.5 ±âŸ ½ºÅ丮Áö ¿£Áø 03Àå: º¹Á¦ 3.1 º¹Á¦¶õ? __3.1.1 ÄÁ¼¾¼½º ¾Ë°í¸®Áò(Consensus Algorithm) __3.1.2 º¹Á¦ÀÇ ¸ñÀû 3.2 ·¹Çø®Ä« ¼Â ¸â¹ö __3.2.1 ÇÁ¶óÀ̸Ӹ®(Primary) __3.2.2 ¼¼ÄÁµå¸®(Secondary) __3.2.3 ¾ÆºñÅÍ(Arbiter) 3.3 ÇÁ¶óÀ̸Ӹ® ¼±Ãâ(Primary Election)__3.3.1 ÇÁ¶óÀ̸Ӹ® ÅÒ(Primary Term) __3.3.2 ÇÁ¶óÀ̸Ӹ® ½ºÅÜ ´Ù¿î(Primary Step Down) __3.3.3 ÇÁ¶óÀ̸Ӹ® ¼±Ã⠽󪸮¿À __3.3.4 ÇÁ¶óÀ̸Ӹ® ¼±Ã⠽à Á¤Á·¼ö(Quorum)ÀÇ ÀÇ¹Ì __3.3.5 ·Ñ¹é(Rollback) __3.3.6 ·Ñ¹é(Rollback) µ¥ÀÌÅÍ Àçó¸® 3.4 º¹Á¦ ¾ÆÅ°ÅØó __3.4.1 º¹Á¦ ·Î±×(OpLog) ±¸Á¶ __3.4.2 local µ¥ÀÌÅͺ£À̽º __3.4.3 Ãʱ⠵¿±âÈ(Initial Sync) __3.4.4 ½Ç½Ã°£ º¹Á¦(Replication) 3.5 º¹Á¦ ·Î±×(Operation Log) ¼³Á¤ __3.5.1 OpLog Ä÷º¼Ç Å©±â ¼³Á¤ __3.5.2 º¹Á¦ µ¿±âÈ »óÅ ȮÀÎ __3.5.3 OpLog Ä÷º¼Ç°ú ¹é¾÷ 3.6 ·¹Çø®Ä« ¼Â ¼³Á¤ __3.6.1 ÇÏÆ®ºñÆ®(Heartbeat) ¸Þ½ÃÁö ÁÖ±â¿Í ÇÁ¶óÀ̸Ӹ® ¼±Ãâ ŸÀӾƿô __3.6.2 ·¹Çø®Ä« ¼Â ¸â¹ö ¼³Á¤ 3.7 ·¹Çø®Ä« ¼Â ¹èÆ÷ __3.7.1 ·¹Çø®Ä« ¼Â ¸â¹öÀÇ ¼ö __3.7.2 DR(Disaster Recovery) ±¸¼º __3.7.3 ·¹Çø®Ä« ¼Â ¹èÆ÷ ½Ã ÁÖÀÇ »çÇ× 04Àå: »þµù 4.1 »þµù(Sharding)À̶õ? __4.1.1 »þµùÀÇ Çʿ伺__4.1.2 »þµùÀÇ Á¾·ù 4.2 MongoDB »þµù ¾ÆÅ°ÅØó __4.2.1 »þµå Ŭ·¯½ºÅÍ(Sharded Cluster) ÄÄÆ÷³ÍÆ® __4.2.2 »þµå Ŭ·¯½ºÅÍÀÇ Äõ¸® ¼öÇà ÀýÂ÷(¶ó¿ìÅÍ¿Í ÄÁÇÇ±× ¼¹öÀÇ Åë½Å) __4.2.3 ÄÁÇÇ±× ¼¹ö __4.2.4 ÄÁÇÇ±× ¼¹öÀÇ º¹Á¦ ¹æ½Ä __4.2.5 ÄÁÇÇ±× ¼¹ö °¡¿ë¼º°ú Äõ¸® ½ÇÇà __4.2.6 ¶ó¿ìÅÍ(mongos) __4.2.7 ¶ó¿ìÅÍÀÇ Äõ¸® ºÐ»ê __4.2.8 ¶ó¿ìÅÍ ¹èÆ÷ __4.2.9 ÄÁ³Ø¼Ç Ç® °ü¸® __4.2.10 ¹é¾÷ º¹±¸ ½Ã ÁÖÀÇ »çÇ× 4.3 »þµù ¾Ë°í¸®Áò __4.3.1 ûũ(Chunk) __4.3.2 ·¹ÀÎÁö »þµù(Range Sharding)__4.3.3 Çؽà »þµù(Hashed Sharding) __4.3.4 Áö¿ª ±â¹Ý »þµù(Zone Sharding) __4.3.5 »þµå Å° 4.4 ÇÁ¶óÀ̸Ӹ® »þµå 4.5 ûũ ¹ë·±½Ì __4.5.1 »þµå Ŭ·¯½ºÅÍ ¹ë·±¼ __4.5.2 ûũ ½ºÇø´(Chunk split)__4.5.3 ûũ ¸ÓÁö(Chunk merge) __4.5.4 ûũ À̵¿(Chunk migration) __4.5.5 ûũ »çÀÌÁî º¯°æ __4.5.6 Á¡º¸ ûũ(Jumbo Chunk) __4.5.7 °í¾Æ µµÅ¥¸ÕÆ®(Orphaned document) »èÁ¦ 4.6 »þµùÀ¸·Î ÀÎÇÑ Á¦¾à __4.6.1 Æ®·£Àè¼Ç __4.6.2 »þµù°ú À¯´ÏÅ© À妽º __4.6.3 Á¶Àΰú ±×·¡ÇÁ Äõ¸® __4.6.4 ±âÁ¸ Ä÷º¼Ç¿¡ »þµù Àû¿ë 05Àå: À妽º 5.1 µð½ºÅ© Àб⠹æ½Ä __5.1.1 µð½ºÅ© ÀúÀå ¸Åü__5.1.2 ·£´ý I/O¿Í ¼øÂ÷ I/O 5.2 À妽º¶õ?5.3 MongoDB À妽ºÀÇ °³¿ä __5.3.1 Ŭ·¯½ºÅ͸µ À妽º __5.3.2 À妽º ³»ºÎ __5.3.3 ·ÎÄà À妽º(Local Index)__5.3.4 À妽º Å° ¿£Æ®¸® ÀÚ·á ±¸Á¶ 5.4 B-Tree À妽º __5.4.1 ±¸Á¶ ¹× Ư¼º __5.4.2 B-Tree À妽º Å° Ãß°¡ ¹× »èÁ¦ __5.4.3 B-Tree À妽º »ç¿ë¿¡ ¿µÇâÀ» ¹ÌÄ¡´Â ¿ä¼Ò __5.4.4 B-Tree À妽º¸¦ ÅëÇÑ µ¥ÀÌÅÍ Àбâ__5.4.5 ÄÄÆÄ¿îµå À妽º(Compound Index) __5.4.6 B-Tree À妽ºÀÇ Á¤·Ä ¹× ½ºÄµ ¹æÇâ __5.4.7 B-Tree À妽ºÀÇ °¡¿ë¼º°ú È¿À²¼º5.5 ÇؽÃ(Hash) À妽º __5.5.1 Çؽà À妽ºÀÇ ±¸Á¶ ¹× Ư¼º __5.5.2 Çؽà À妽ºÀÇ °¡¿ë¼º ¹× È¿À²¼º__5.5.3 MongoDB Çؽà À妽ºÀÇ ±¸Á¶ ¹× Ư¼º__5.5.4 MongoDB Çؽà À妽ºÀÇ Á¦ÇÑ »çÇ× 5.6 ¸ÖƼ Å° À妽º __5.6.1 ¸ÖƼ Å° À妽ºÀÇ ÁÖÀÇ »çÇ× __5.6.2 ¸ÖƼ Å° À妽ºÀÇ ¼º´É __5.6.3 ¸ÖƼ Å° À妽ºÀÇ Á¦ÇÑ »çÇ× 5.7 Àü¹® °Ë»ö À妽º __5.7.1 ÇüÅÂ¼Ò ºÐ¼® ¾Ë°í¸®Áò __5.7.2 N-Gram ¾Ë°í¸®Áò__5.7.3 ÇüÅÂ¼Ò ºÐ¼®°ú N-GramÀÇ Àå´ÜÁ¡__5.7.4 Àü¹® °Ë»ö À妽ºÀÇ È°¿ë__5.7.5 ºÎÁ¤ ºñ±³¿Í ¹®Àå °Ë»ö __5.7.6 MongoDB Àü¹® °Ë»ö À妽ºÀÇ ¹öÀü ȣȯ¼º__5.7.7 Àü¹® °Ë»ö À妽ºÀÇ Á¦¾à »çÇ× 5.8 °ø°£ °Ë»ö À妽º __5.8.1 GeoHash ¾Ë°í¸®Áò__5.8.2 S2 Geometry ¾Ë°í¸®Áò __5.8.3 MongoDBÀÇ °ø°£ À妽º __5.8.4 MongoDBÀÇ ÄÄÆÄ¿îµå °ø°£ À妽º 5.9 À妽º ¼Ó¼º __5.9.1 ÇÁ¶óÀ̸Ӹ® Å°¿Í ¼¼ÄÁµå¸® À妽º __5.9.2 À¯´ÏÅ© À妽º __5.9.3 Partial À妽º¿Í Sparse À妽º __5.9.4 TTL À妽º __5.9.5 À妽º ÄÝ·¹À̼Ç(´ë¼Ò¹®ÀÚ ±¸ºÐ ¼³Á¤) __5.9.6 ¿Ü·¡ Å° 06Àå: Àá±Ý°ú Æ®·£Àè¼Ç 6.1 Àá±Ý __6.1.1 MongoDB ¿£ÁøÀÇ Àá±Ý __6.1.2 WiredTiger ½ºÅ丮Áö ¿£ÁøÀÇ Àá±Ý __6.1.3 Àá±Ý Yield __6.1.4 Àá±Ý Áø´Ü 6.2 Æ®·£Àè¼Ç __6.2.1 ¾²±â Ãæµ¹(Write Conflict) __6.2.2 ´ÜÀÏ µµÅ¥¸ÕÆ® Æ®·£Àè¼Ç(Single Document transaction) __6.2.3 ¹®ÀåÀÇ Æ®·£Àè¼Ç(Statement transaction) ó¸® 6.3 °Ý¸® ¼öÁØ__6.3.1 READ-COMMITTED __6.3.2 SNAPSHOT(REPEATABLE-READ) __6.3.3 MongoDB ¼¹öÀÇ °Ý¸® ¼öÁØ __6.3.4 MongoDB ¼¹öÀÇ °Ý¸® ¼öÁØ°ú Á¤·Ä 6.4 Read & Write Concern°ú Read Preference __6.4.1 Write Concern __6.4.2 Read Concern __6.4.3 Read Preference__6.4.4 maxStalenessSeconds ¼³Á¤__6.4.5 »þµù ȯ°æÀÇ Áߺ¹ µµÅ¥¸ÕÆ® ó¸® 07Àå: µ¥ÀÌÅÍ ¸ðµ¨¸µ 7.1 µ¥ÀÌÅͺ£À̽º¿Í Ä÷º¼Ç __7.1.1 ³×ÀÓ½ºÆäÀ̽º __7.1.2 µ¥ÀÌÅͺ£À̽º __7.1.3 Ä÷º¼Ç __7.1.4 ºä(View)__7.1.5 BSON µµÅ¥¸ÕÆ® __7.1.6 Á¦ÇÑ »çÇ× 7.2 µ¥ÀÌÅÍ Å¸ÀÔ __7.2.1 µ¥ÀÌÅÍ Å¸ÀÔ ºñ±³__7.2.2 ÇÊµå °ªÀÇ ºñ±³ ¹× Á¤·Ä __7.2.3 ¹®Àڼ°ú ÄÝ·¹ÀÌ¼Ç __7.2.4 MongoDB È®Àå JSON(Extended JSON) 7.3 ¸ðµ¨¸µ °í·Á »çÇ× __7.3.1 µµÅ¥¸ÕÆ®ÀÇ Å©±â __7.3.2 Á¤±ÔÈ¿Í ¿ªÁ¤±ÔÈ(Document Referencing vs. Embedding)__7.3.3 ¼ºê µµÅ¥¸ÕÆ®(Sub Document) __7.3.4 ¹è¿(Array) __7.3.5 Çʵå À̸§ __7.3.6 ÇÁ·¹±×¸àÅ×À̼Ç(Fragmentation)°ú Æеù(Padding)__7.3.7 µµÅ¥¸ÕÆ® À¯È¿¼º üũ __7.3.8 Á¶ÀÎ 08Àå: Äõ¸® °³¹ß°ú Æ©´× 8.1 ±âº» CRUD Äõ¸® __8.1.1 Äõ¸® ÀÛ¼º 8.2 È®Àå °Ë»ö Äõ¸® __8.2.1 ¸Ê¸®µà½º(Map Reduce) __8.2.2 Aggregation __8.2.3 Fulltext Search__8.2.4 °ø°£ °Ë»ö 8.3 ½ºÅ°¸¶ º¯°æ(DDL) __8.3.1 µ¥ÀÌÅͺ£À̽º °ü¸® __8.3.2 Ä÷º¼Ç °ü¸® __8.3.3 À妽º °ü¸® 09Àå: ½ÇÇà °èȹ ¹× Äõ¸® ÃÖÀûÈ 9.1 ½ÇÇà °èȹ __9.1.1 Äõ¸®ÀÇ Ã³¸® °úÁ¤__9.1.2 ½ÇÇà °èȹ ¼ö¸³ __9.1.3 ¿ÉƼ¸¶ÀÌÀú ¿É¼Ç__9.1.4 Ç÷£ ij½Ã __9.1.5 ½ÇÇà °èȹ ½ºÅ×ÀÌÁö __9.1.6 Äõ¸® ½ÇÇà °èȹ Çؼ® 9.2 Äõ¸® ÃÖÀûÈ __9.2.1 ½ÇÇà °èȹÀÇ Äõ¸® Æ©´× Æ÷ÀÎÆ® __9.2.2 ½½·Î¿ì Äõ¸® ·Î±× ºÐ¼® ¹× Æ©´× __9.2.3 Äõ¸® ÇÁ·ÎÆÄÀϸµ__9.2.4 À妽º ÈùÆ® 10Àå: º¸¾È 10.1 ÀÎÁõ(Authentication) __10.1.1 ³»ºÎ ÀÎÁõ __10.1.2 »ç¿ëÀÚ ÀÎÁõ 10.2 ±ÇÇÑ(Authorization) __10.2.1 ¾×¼Ç(Action) __10.2.2 ³»Àå(Built-in)µÈ ¿ªÇÒ(Role) __10.2.3 »ç¿ëÀÚ Á¤ÀÇ ¿ªÇÒ(Role)10.3 ¾ÏÈ£È(Encryption) __10.3.1 µ¥ÀÌÅÍ ¾ÏÈ£È ¹æ½Ä __10.3.2 MongoDB TDE ±¸Çö ºÎ·Ï: ¹é¾÷ ¹× º¹±¸ A.1 mongodump¿Í mongorestore¸¦ ÀÌ¿ëÇÑ ³í¸® ¹é¾÷ ¹× º¹±¸ __A.1.1 ¹é¾÷ __A.1.2 º¹±¸ A.2 ¹°¸® ¹é¾÷ ¹× º¹±¸ __A.2.1 ¼Ë´Ù¿î »óÅÂÀÇ ¹é¾÷ __A.2.2 º¹Á¦ ÁßÁö »óÅÂÀÇ ¹é¾÷ __A.2.3 ÆÄÀϽýºÅÛ ½º³À¼¦ ¹é¾÷ __A.2.4 Percona ¿Â¶óÀÎ ¹é¾÷ __A.2.5 ¹°¸® ¹é¾÷ º¹±¸A.3 PIT(Point-In-Time) º¹±¸