{"id":3529,"date":"2021-09-27T20:37:34","date_gmt":"2021-09-27T11:37:34","guid":{"rendered":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=3529"},"modified":"2021-09-28T00:04:54","modified_gmt":"2021-09-27T15:04:54","slug":"top-10-microservices-design-patterns-and-principles","status":"publish","type":"post","link":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=3529","title":{"rendered":"\ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4\ub97c \uc704\ud55c \ub514\uc790\uc778 \ud328\ud134\uacfc \uc6d0\uce59 Top 10"},"content":{"rendered":"<h1>\ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4\ub97c \uc704\ud55c \ub514\uc790\uc778 \ud328\ud134\uacfc \uc6d0\uce59 Top 10<\/h1>\n<p><a href=\"https:\/\/javarevisited.blogspot.com\/2021\/09\/microservices-design-patterns-principles.html?m=1\">\ucc38\uc870<\/a><\/p>\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=BnS6343GTkY&amp;list=WL&amp;index=1\">\ubc30\ub2ec\uc758\ubbfc\uc871 \ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4 \uc5ec\ud589\uae30<\/a> \ub9e4\uc6b0 \ucd94\ucc9c!!<\/p>\n<p>\ub9c8\uc774\ud06c\ub85c \uc11c\ube44\uc2a4\ub97c \uc704\ud55c \ub514\uc790\uc778 \ud328\ud134\uacfc \uc124\uacc4 \uc6d0\uce59\uc744 \uc124\uba85\ud569\ub2c8\ub2e4.<\/p>\n<p>\ub9c8\uc774\ud06c\ub85c \uc11c\ube44\uc2a4\ub97c \uad6c\uc131\ud558\uc9c0 \uc54a\ub294\ub2e4\uace0 \ud558\ub354\ub77c\ub3c4,<br \/>\n\uc5ec\uae30\uc11c \uc124\uba85\ud558\ub294 \ub514\uc790\uc778\ud328\ud134\uacfc \uc6d0\uce59\uc744 \uc801\uc6a9\ud558\uba74,<br \/>\nSPOF \ub77c\ub358\uac00 \ubd80\ud558\ubd84\uc0b0\uc744 \ud6a8\uc728\uc801\uc73c\ub85c \ud560 \uc218 \uc788\ub294 \uc124\uacc4\ub97c \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h2>1. Database per Microservice<\/h2>\n<p>Single Main Database \ub294 <code>SPOF<\/code> \ub85c \uc791\ub3d9\ud558\uba70,<br \/>\n\ubd80\ud558\uac00 \uc9d1\uc911\ub418\uc5b4 \ub9e4\uc6b0 \uc704\ud5d8\ud55c \ud328\ud134\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc11c\ube44\uc2a4 \ub2e8\uc704\ub85c Database \ub97c \ubd84\ub9ac\ud558\uc5ec,<br \/>\n\uc7a5\uc560\uac00 \ud655\uc0b0\ub418\ub294 \uac83\uc744 \ub9c9\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc608\ub97c \ub4e4\uc5b4, TV \uc5d0 \uad11\uace0\ub97c \ud574\uc11c \uc774\ubca4\ud2b8 \uc11c\ube44\uc2a4\uac00 \ubd80\ud558\ub97c \ubc1b\uc544 \uc7a5\uc560\uac00 \ubc1c\uc0dd\ud55c \uc0c1\ud669\uc785\ub2c8\ub2e4.<br \/>\nSingle Main Database \ub77c\uba74 \uc774\ubca4\ud2b8 \uc11c\ube44\uc2a4\ub9cc \uc7a5\uc560\ub97c \ubc1b\ub294\uac8c \uc544\ub2c8\ub77c,<br \/>\n\uc8fc\ubb38\uc785\ub825\uae4c\uc9c0 \uc7a5\uc560\uac00 \ud655\uc0b0\ub420 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<h2>2. Event Sourcing<\/h2>\n<p>\uc11c\ube44\uc2a4\ub97c \ubd84\ub9ac\ud558\uc5ec\ub3c4, \ud0c0 \uc11c\ube44\uc2a4\uc758 API \ub97c \uc9c1\uc811 \ud638\ucd9c\ud558\uac8c \ub418\uba74,<br \/>\n\uc5ec\uc804\ud788 \ud558\ub098\uc758 \uc11c\ube44\uc2a4 \uc7a5\uc560 \ub610\ub294 \uc9c0\uc5f0\uc774 \ud0c0 \uc11c\ube44\uc2a4\uc5d0 \uc804\ud30c\ub418\uac8c \ub429\ub2c8\ub2e4.<\/p>\n<p>Kafka \ub4f1\uacfc \uac19\uc740 <code>Queue<\/code> \uc2dc\uc2a4\ud15c\uc5d0 \uc774\ubca4\ud2b8\ub97c \uc800\uc7a5\ud558\uace0,<br \/>\n\ud0c0 \uc11c\ube44\uc2a4\ub294 Queue \uc5d0 \uc800\uc7a5\ub41c \uc774\ubca4\ud2b8\ub97c \uac00\uc838\uc640 \uc5c5\ub370\uc774\ud2b8\ud558\uba74,<br \/>\n\ud558\ub098\uc758 \uc11c\ube44\uc2a4\uc758 \uc7a5\uc560\uac00 \ud0c0 \uc11c\ube44\uc2a4\ub85c \uc804\ud30c\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/p>\n<h2>3. CQRS<\/h2>\n<p><code>CQRS<\/code> \ub294 <code>Command Query Segmentation<\/code> \uc744 \uc758\ubbf8\ud569\ub2c8\ub2e4.<\/p>\n<p>Commands \uc640 Queries \ub97c \ubd84\ub9ac\ud558\ub294 \uac83\uc744 \uc758\ubbf8\ud558\uba70,<br \/>\nInsert\/Update\/Delete \uc640 Read \ub97c \ubd84\ub9ac\ud569\ub2c8\ub2e4.<\/p>\n<p>\ubcf5\uc7a1\ub3c4\ub97c \uc904\uc77c \uc218 \uc788\uc9c0\ub9cc, \uce90\uc2dc\ub97c \uc5b4\ub5bb\uac8c \uc124\uacc4\ud560\uc9c0 \uace0\ubbfc\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.<\/p>\n<h2>4. Saga<\/h2>\n<p>\uc11c\ube44\uc2a4\uac04 \ud2b8\ub79c\uc81d\uc158\uc774 \ud544\uc694\ud55c \uacbd\uc6b0,<br \/>\n\ub354 \uc774\uc0c1 Database \uc5d0\uc11c \uc81c\uacf5\ud558\ub358 \ud2b8\ub79c\uc81d\uc158\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uace0,<br \/>\nApplication \uc5d0\uc11c \ud2b8\ub79c\uc81d\uc158\uc744 \uc218\ud589\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<p>\uc8fc\ubb38 \uc11c\ube44\uc2a4 \/ \ucfe0\ud3f0 \uc11c\ube44\uc2a4 \/ \ud3ec\uc778\ud2b8 \uc11c\ube44\uc2a4 \uac00 \ubd84\ub9ac\ub418\uc5b4 \uc788\ub294 \uacbd\uc6b0,<br \/>\n\uc8fc\ubb38 \ubc1c\uc0dd\uc2dc \ucfe0\ud3f0\uc11c\ube44\uc2a4 \ubc0f \ud3ec\uc778\ud2b8\uc11c\ube44\uc2a4\uc5d0 \uc774\ubca4\ud2b8\ub97c \ubc1c\uc0dd\uc2dc\ud0a4\uace0,<br \/>\n\ubaa8\ub4e0 \uc11c\ube44\uc2a4\uac00 \uc131\uacf5\ud558\uba74 \uc8fc\ubb38\uc11c\ube44\uc2a4\ub97c \uc644\ub8cc\ud558\uace0,<br \/>\n\ucfe0\ud3f0 \ub610\ub294 \ud3ec\uc778\ud2b8 \uc11c\ube44\uc2a4\uac00 \uc2e4\ud328\ud558\uba74,<br \/>\n\uc8fc\ubb38 \uc11c\ube44\uc2a4\uc5d0\uc11c \ubaa8\ub4e0 \uc11c\ube44\uc2a4\uc5d0 \uc2e4\ud328 \uc774\ubca4\ud2b8\ub97c \uc804\uc1a1\ud558\ub294 \ubc29\uc2dd\uc785\ub2c8\ub2e4.<\/p>\n<h2>5. BFF<\/h2>\n<h2>6. API Gateway<\/h2>\n<h2>7. Strangler<\/h2>\n<h2>8. Circuit Breaker<\/h2>\n<h2>9. Externalized Configuration<\/h2>\n<h2>10. Consumer-Driven Contract Tracing<\/h2>\n","protected":false},"excerpt":{"rendered":"<p>\ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4\ub97c \uc704\ud55c \ub514\uc790\uc778 \ud328\ud134\uacfc \uc6d0\uce59 Top 10 \ucc38\uc870 \ubc30\ub2ec\uc758\ubbfc\uc871 \ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4 \uc5ec\ud589\uae30 \ub9e4\uc6b0 \ucd94\ucc9c!! \ub9c8\uc774\ud06c\ub85c \uc11c\ube44\uc2a4\ub97c \uc704\ud55c \ub514\uc790\uc778 \ud328\ud134\uacfc \uc124\uacc4 \uc6d0\uce59\uc744 \uc124\uba85\ud569\ub2c8\ub2e4. \ub9c8\uc774\ud06c\ub85c \uc11c\ube44\uc2a4\ub97c \uad6c\uc131\ud558\uc9c0 \uc54a\ub294\ub2e4\uace0 \ud558\ub354\ub77c\ub3c4, \uc5ec\uae30\uc11c \uc124\uba85\ud558\ub294 \ub514\uc790\uc778\ud328\ud134\uacfc \uc6d0\uce59\uc744 \uc801\uc6a9\ud558\uba74, SPOF \ub77c\ub358\uac00 \ubd80\ud558\ubd84\uc0b0\uc744 \ud6a8\uc728\uc801\uc73c\ub85c \ud560 \uc218 \uc788\ub294 \uc124\uacc4\ub97c \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. 1. Database per Microservice Single Main Database \ub294 SPOF \ub85c \uc791\ub3d9\ud558\uba70, \ubd80\ud558\uac00 \uc9d1\uc911\ub418\uc5b4\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=3529\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[22],"tags":[],"class_list":["post-3529","post","type-post","status-publish","format-standard","hentry","category-web"],"_links":{"self":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/3529","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3529"}],"version-history":[{"count":11,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/3529\/revisions"}],"predecessor-version":[{"id":3541,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/3529\/revisions\/3541"}],"wp:attachment":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3529"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3529"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3529"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}