{"id":2152,"date":"2022-02-18T17:26:16","date_gmt":"2022-02-18T08:26:16","guid":{"rendered":"http:\/\/blog.moramcnt.com\/?p=2152"},"modified":"2022-02-18T18:02:02","modified_gmt":"2022-02-18T09:02:02","slug":"msa%ea%b5%ac%ec%84%b1%eb%a7%a4%eb%89%b4%ec%96%bc","status":"publish","type":"post","link":"http:\/\/blog.moramcnt.com\/?p=2152","title":{"rendered":"MSA\uad6c\uc131\ub9e4\ub274\uc5bc"},"content":{"rendered":"<h1><a name=\"_Toc53749172\"><\/a><strong>1.\u00a0\u00a0\u00a0 <\/strong><strong>\ubb38\uc11c \uac1c\uc694<\/strong><\/h1>\n<p>&nbsp;<\/p>\n<h2><a name=\"_Toc427929697\"><\/a><a name=\"_Toc427930345\"><\/a><a name=\"_Toc53749173\"><\/a><strong>1.1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong><strong>\ubb38\uc11c\uc758 \ubaa9\uc801<\/strong><\/h2>\n<p>\ubcf8 \ubb38\uc11c\ub294 MSA \uae30\ubc18\uc758 API \uc0d8\ud50c \uc11c\ubc84, \uac8c\uc774\ud2b8\uc6e8\uc774 \uc11c\ubc84, \uc720\ub808\uce74 \uc11c\ubc84 \ub4f1\uc5d0 \ub300\ud55c \uad6c\ucd95 \uad00\ub828 \uc808\ucc28\uc5d0 \ub300\ud558\uc5ec \uae30\uc220\ud558\uace0 \uc788\ub2e4.<\/p>\n<p><a name=\"_Toc427764013\"><\/a><a name=\"_Toc427929698\"><\/a><a name=\"_Toc427930346\"><\/a><\/p>\n<h2><a name=\"_Toc53749174\"><\/a><strong>1.2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong><strong>\uc2dc\uc2a4\ud15c \uad6c\uc131\ub3c4<\/strong><\/h2>\n<p>\ubcf8 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \uad6c\ud604\ub418\uace0\uc790 \ud558\ub294 \uc2dc\uc2a4\ud15c \uad6c\uc131\ub3c4\uc774\ub2e4.<\/p>\n<p><a name=\"_Toc152609490\"><\/a><a name=\"_Toc152682161\"><\/a><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image001.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2153\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image001.png\" alt=\"\" width=\"609\" height=\"540\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h1><a name=\"_Toc53749175\"><\/a><strong>2.\u00a0\u00a0\u00a0 <\/strong>\uad00\ub828 \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158 \uc124\uce58<\/h1>\n<h2><a name=\"_Toc53749176\"><\/a><strong>2.1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong><strong>JDK <\/strong><strong>\uc124\uce58<\/strong><\/h2>\n<p>JDK 1.8\uc774\uc0c1\uc73c\ub85c \ubcf8 \ubb38\uc11c\uc5d0\uc11c\ub294 64\ube44\ud2b8\uc6a9 JDK15\ub97c \uae30\uc900\uc73c\ub85c \ud55c\ub2e4.<\/p>\n<ul>\n<li>\ub2e4\uc6b4\ub85c\ub4dc URL : <a href=\"https:\/\/www.oracle.com\/java\/technologies\/javase-jdk15-downloads.html\">https:\/\/www.oracle.com\/java\/technologies\/javase-jdk15-downloads.html<\/a><\/li>\n<\/ul>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image002.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2155 aligncenter\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image002.png\" alt=\"\" width=\"500\" height=\"381\" \/><\/a><\/p>\n<h2><a name=\"_Toc53749177\"><\/a><strong>2.2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong><strong>Eclipse <\/strong><strong>\uc124\uce58<\/strong><\/h2>\n<h3><a name=\"_Toc53749178\"><\/a><strong>2.2.1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>\uc774\ud074\ub9bd\uc2a4 \uc124\uce58<\/h3>\n<p>&#8211; https:\/\/www.eclipse.org\/downloads\/packages\/ \uc5d0\uc11c 64 \ube44\ud2b8\uc6a9 Eclipse IDE for Enterprise Java Developers \uc744 \uc120\ud0dd<\/p>\n<p>&nbsp;<\/p>\n<h3><a name=\"_Toc53749179\"><\/a><strong>2.2.2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>Spring Boot STS(Spring Tool Suite) \uc124\uce58<\/h3>\n<p>Help &gt; Eclipse Marketplace \ub97c \uc120\ud0dd\ud55c\ud6c4\uc5d0 STS \ub97c \uc785\ub825\ud558\uc5ec \uac80\uc0c9\ud55c\ud6c4\uc5d0, Spring Tools 4 (aka Spring Tool Suite 4) \ub97c \uc120\ud0dd\ud558\uc5ec \uc124\uce58\ud55c\ub2e4.<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image003.png\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-2156 aligncenter\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image003.png\" alt=\"\" width=\"622\" height=\"713\" \/><\/a><\/p>\n<h3><a name=\"_Toc53749180\"><\/a><strong>2.2.3\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>\ub86c\ubcf5(Lombok) \uc124\uce58<\/h3>\n<p>Getter\uc640 Setter\ub97c \uc790\ub3d9\uc73c\ub85c \uc0dd\uc131\ud574\uc8fc\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub85c Visual Studio Code\uc5d0\uc11c\ub294 \ubcc4\ub2e4\ub978 \uc124\uce58 \uc5c6\uc5b4 \uac1c\ubc1c IDE\uc758 \uc778\ud154\ub9ac\uc804\ud2b8\uac00 \uc798 \ub098\uc654\uc9c0\ub9cc, \uc774\ud074\ub9bd\uc2a4\ub294 \ubcc4\ub3c4\ub85c \uc124\uce58\ud574\uc8fc\uc5b4\uc57c \ub3d9\uc791\ud55c\ub2e4.<\/p>\n<ul>\n<li>\ud0d0\uc0c9\uae30\ub85c \ud574\ub2f9 \uacc4\uc815\uc758 maven repository\uc5d0 \ub4e4\uc5b4\uac00\uc11c \ubc84\uc804\uc744 \ud655\uc778<\/li>\n<\/ul>\n<p>C:\\Users\\\uacc4\uc815\\.m2\\repository\\org\\projectlombok\\lombok\\\ubc84\uc804<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>\ub86c\ubcf5 \uc124\uce58 \uad00\ub9ac\uc790 \uc2e4\ud589<\/li>\n<\/ul>\n<p>\uc544\ub798 \uba85\ub839\uc744 \ud1b5\ud574 \uc2e4\ud589<\/p>\n<p>Java -jar lombok-\ubc84\uc804.jar<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image004.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2157 aligncenter\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image004.png\" alt=\"\" width=\"783\" height=\"157\" \/><\/a><\/p>\n<ul>\n<li>\uc774\ud074\ub9bd\uc2a4 \uc704\uce58\uc9c0\uc815<\/li>\n<\/ul>\n<p>\u201cSpecify location\u2026\u201d \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec \uc774\ud074\ub9bd\uc2a4\uac00 \uc124\uce58\ub418\uc5b4 \uc788\ub294 \uc704\uce58 \uc9c0\uc815\ud558\uace0<\/p>\n<p>\u201cInstall\/Update\u201d \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec \uc124\uce58\uc644\ub8cc<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image005.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2158 aligncenter\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image005.png\" alt=\"\" width=\"727\" height=\"426\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2><a name=\"_Toc53749181\"><\/a><strong>2.3\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong><strong>Postman <\/strong><strong>\uc124\uce58<\/strong><\/h2>\n<p>API \uc11c\ubc84\ub97c \ud638\ucd9c\ud558\uc5ec \uacb0\uacfc\ub97c \ud655\uc778\ud558\uae30\uac00 \uc6a9\uc774\ud558\ubbc0\ub85c \ud14c\uc2a4\ud2b8\ud560 \ub54c \ub9ce\uc774 \uc0ac\uc6a9\ub418\ub294 \ud234\uc774\ub2e4.<\/p>\n<p><a href=\"https:\/\/www.postman.com\/downloads\/\">https:\/\/www.postman.com\/downloads\/<\/a> \uc5d0\uc11c 64\ube44\ud2b8\uc6a9\uc744 \ub2e4\uc6b4\ubc1b\uc544 \uc124\uce58\ud55c\ub2e4.<\/p>\n<p>\uc124\uce58 \ud6c4 Signin\uc744 \ud074\ub9ad\ud558\uc5ec \ub85c\uadf8\uc778\ud558\uba74 \ub418\uace0, \uacc4\uc815\uc774 \uc5c6\uc73c\uba74 \uac00\uc785\ud558\uba74 \ub41c\ub2e4.<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image006.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2159 aligncenter\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image006.png\" alt=\"\" width=\"597\" height=\"397\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>\uc0ac\uc6a9\ubc29\ubc95\uc740 \ud0ed \uc606\uc5d0 \u201c+\u201d \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec \uc0c8\ub85c\uc6b4 Request\ub97c \uc0dd\uc131\ud558\uc5ec \uc2e4\ud589\ud558\uba74 \ub41c\ub2e4.<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image007.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2160 aligncenter\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image007.png\" alt=\"\" width=\"459\" height=\"159\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>\uc77c\ub840\ub85c Method\ub97c GET\uc73c\ub85c \ud558\uace0, url\uc744 \uc785\ub825\ud558\uace0 Send \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uba74 \ud558\ub2e8\uc5d0 \uacb0\uacfc\uac00 \ucd9c\ub825\ub41c\ub2e4.<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image008.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2161 aligncenter\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image008.png\" alt=\"\" width=\"700\" height=\"438\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h1><a name=\"_Toc53749182\"><\/a><strong>3.\u00a0\u00a0\u00a0 <\/strong>\uba54\uc774\ube10(Maven) \uae30\ubc18\uc758 Spring Boot \ud504\ub85c\uc81d\ud2b8 \uc0dd\uc131<\/h1>\n<p>\uc774\ud074\ub9bd\uc2a4\ub97c \ub744\uc6cc \uc544\ub798\uc640 \uac19\uc774 \uc6cc\ud06c\uc2a4\ud398\uc774\uc2a4\ub97c \ub9cc\ub4e0\ub2e4.<\/p>\n<ul>\n<li>D:\\Projects\\45.ValfacSolutions\\02.Solutions\\MsaSolution<\/li>\n<\/ul>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image009.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2162 aligncenter\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image009.png\" alt=\"\" width=\"615\" height=\"279\" \/><\/a><\/p>\n<h2><a name=\"_Toc53749183\"><\/a><strong>3.1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>\ucd5c\uc0c1\ub2e8 \ubd80\ubaa8 \ud504\ub85c\uc81d\ud2b8 \uc0dd\uc131<\/h2>\n<ul>\n<li>File &gt; New &gt; Other \ub97c \ud074\ub9ad\ud55c\ud6c4 Spring Boot\ub97c \uc120\ud0dd\ud55c\ud6c4 Spring Starter Project\ub97c \uc120\ud0dd<\/li>\n<\/ul>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image010.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2163 aligncenter\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image010.png\" alt=\"\" width=\"511\" height=\"493\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>\ud504\ub85c\uc81d\ud2b8 \uc815\ubcf4 \uc785\ub825<\/li>\n<\/ul>\n<p>\ubcf8 \uc0d8\ud50c\uc5d0\uc11c\ub294 store\ub77c\ub294 \uc774\ub984\uc73c\ub85c \ud504\ub85c\uc81d\ud2b8\ub97c \uad6c\uc131\ud558\uc600\ub2e4.<\/p>\n<p>&#8211; Name : store<\/p>\n<p>&#8211; Group :store<\/p>\n<p>&#8211; Artifact : store<\/p>\n<p>&#8211; Description : Store Project<\/p>\n<p>&#8211; Package : store<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image011.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2164 aligncenter\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image011.png\" alt=\"\" width=\"553\" height=\"725\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>\uc2a4\ud504\ub9c1 \ubd80\ud2b8 \ubc84\uc804 \ubc0f \ud504\ub85c\uc81d\ud2b8 \uc885\uc18d\uc131 \uc785\ub825<\/li>\n<\/ul>\n<p>\uc544\ub798\uc640 \uac19\uc774 Spring Boot Version\uc744 \ud604\uc7ac \ucd5c\uc2e0\uc778 2.3.4\ub97c \uc120\ud0dd\ud558\uace0, 3\uac00\uc9c0 \uc885\uc18d\uc131\uc744 \uccb4\ud06c\ud558\uc5ec \ucd94\uac00\ud55c\ud6c4\uc5d0 \u201cFinish\u201d \ubc84\ud2bc\uc744 \ud074\ub9ad\ud558\uc5ec \ud504\ub85c\uc81d\ud2b8\ub97c \uc0dd\uc131\ud55c\ub2e4.<\/p>\n<p>&#8211; Developer Tools &gt; Spring Boot DevTools<\/p>\n<p>&#8211; Developer Tools &gt; Lombok<\/p>\n<p>&#8211; Web &gt; Spring Web<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image012.png\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-2165 aligncenter\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image012.png\" alt=\"\" width=\"488\" height=\"664\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>xml \ud30c\uc77c \uc218\uc815<\/li>\n<\/ul>\n<p>\uc544\ub798\uc640 \uac19\uc774 &lt;packaging&gt;<strong>pom<\/strong>&lt;\/packaging&gt;\ub97c \ucd94\uac00\ud55c\ub2e4.<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image013.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2166 aligncenter\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image013.png\" alt=\"\" width=\"523\" height=\"225\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<h2><a name=\"_Toc53749184\"><\/a><strong>3.2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>\ud558\uc704 \uc790\uc2dd \ubaa8\ub4c8 \uc0dd\uc131<\/h2>\n<p>\ucd5c\uc0c1\ub2e8 \ubd80\ubaa8 \uba54\uc774\ube10 \ud504\ub85c\uc81d\ud2b8 \ubc11\uc5d0 \ub538\ub9b0 \uc790\uc2dd \ubaa8\ub4c8\uc740 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<p>&nbsp;<\/p>\n<table style=\"width: 55.9087%;\" border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td style=\"width: 24.6206%;\" width=\"142\"><strong>\uba85\uce6d<\/strong><\/td>\n<td style=\"width: 29.1737%;\" width=\"170\"><strong>\ubaa8\ub4c8\uba85<\/strong><\/td>\n<td style=\"width: 16.3575%;\" width=\"93\"><strong>\ud3ec\ud2b8<\/strong><\/td>\n<td style=\"width: 27.8246%;\" width=\"161\"><strong>\ube44\uace0<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 24.6206%;\" width=\"142\">\uc720\ub808\uce74 \uc11c\ubc84<\/td>\n<td style=\"width: 29.1737%;\" width=\"170\">store-eureka-server<\/td>\n<td style=\"width: 16.3575%;\" width=\"93\">8761<\/td>\n<td style=\"width: 27.8246%;\" width=\"161\"><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 24.6206%;\" width=\"142\">\uac8c\uc774\ud2b8\uc6e8\uc774\uc11c\ubc84<\/td>\n<td style=\"width: 29.1737%;\" width=\"170\">store-gateway-server<\/td>\n<td style=\"width: 16.3575%;\" width=\"93\">5001<\/td>\n<td style=\"width: 27.8246%;\" width=\"161\"><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 24.6206%;\" width=\"142\">\ud68c\uc0ac API(\uc0d8\ud50c)<\/td>\n<td style=\"width: 29.1737%;\" width=\"170\">store-corp-api<\/td>\n<td style=\"width: 16.3575%;\" width=\"93\">5002<\/td>\n<td style=\"width: 27.8246%;\" width=\"161\"><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 24.6206%;\" width=\"142\">\uc0ac\uc6a9\uc790 API(\uc0d8\ud50c)<\/td>\n<td style=\"width: 29.1737%;\" width=\"170\">store-user-api<\/td>\n<td style=\"width: 16.3575%;\" width=\"93\">5003<\/td>\n<td style=\"width: 27.8246%;\" width=\"161\"><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 24.6206%;\" width=\"142\">\ubc31\uc5d4\ub4dc \uc6f9<\/td>\n<td style=\"width: 29.1737%;\" width=\"170\">store-backend-web<\/td>\n<td style=\"width: 16.3575%;\" width=\"93\">8080<\/td>\n<td style=\"width: 27.8246%;\" width=\"161\">Feign Client \ud3ec\ud568<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<h3><a name=\"_Toc53749185\"><\/a><strong>3.2.1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>\uac8c\uc774\ud2b8\uc6e8\uc774 \uc11c\ubc84<\/h3>\n<p>\uc544\ub798\uc640 \uac19\uc774 Maven Module\uc744 \uc0dd\uc131\ud55c\ub2e4.<\/p>\n<ul>\n<li>File &gt; New &gt; Other\uc5d0\uc11c Maven &gt; Maven Module\uc744 \uc120\ud0dd\ud558\uace0 \u201cNext\u201d \ubc84\ud2bc \ud074\ub9ad<\/li>\n<\/ul>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image014.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2167 aligncenter\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image014.png\" alt=\"\" width=\"511\" height=\"493\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>\ubaa8\ub4c8\uba85 \uc785\ub825<\/li>\n<\/ul>\n<p>\u201ccreate a simple project\u201d \ub97c \uccb4\ud06c \ud558\uace0, Module Name\uc5d0 \u201cstore-gateway-server\u201d\ub97c \uc785\ub825\ud558\uace0 \u201cNext\u201d \ubc84\ud2bc\uc744 \ud074\ub9ad\ud55c\ub2e4.<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image015.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2168 aligncenter\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image015.png\" alt=\"\" width=\"479\" height=\"430\" \/><\/a><\/p>\n<ul>\n<li>\uae30\ud0c0 \ubaa8\ub4c8\uc815\ubcf4\ub97c \uc785\ub825\ud558\uace0 \u201cFinish\u201d \ubc84\ud2bc \ud074\ub9ad<\/li>\n<\/ul>\n<p>&#8211; Group Id : store.gateway.server<\/p>\n<p>&#8211; Version : 0.0.1-SNAPSHOT<\/p>\n<p>&#8211; Packaging: jar<\/p>\n<p>&#8211; Name : Store Gateway Server<\/p>\n<p>&#8211; Description : Store Gateway Server Project<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image016.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2169 aligncenter\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image016.png\" alt=\"\" width=\"602\" height=\"540\" \/><\/a><\/p>\n<ul>\n<li>\ucd5c\uc0c1\ub2e8 \ubd80\ubaa8 \ud504\ub85c\uc81d\ud2b8\uc758 xml \ud30c\uc77c \ud655\uc778 \ubc0f \uc218\uc815<\/li>\n<\/ul>\n<p>&#8211; \uc704\uc5d0\uc11c \uc0dd\uc131\ud55c store-gateway-server \uba54\uc774\ube10 \ubaa8\ub4c8\uc774 \uc790\ub3d9\uc801\uc73c\ub85c \ucd94\uac00\ub41c \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\ub2e4.<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image017.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-2170 aligncenter\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image017.png\" alt=\"\" width=\"800\" height=\"335\" \/><\/a><\/p>\n<p>&#8211; \ub610\ud55c \ub137\ud50c\ub9ad\uc2a4\uc758 Zuul\uc744 \uc0ac\uc6a9\ud558\uae30 \uc704\ud574 \ubd80\ubaa8 pom.xml\uc5d0\ub3c4 \uc885\uc18d\uc131\uc744 \ucd94\uac00\ud574\uc57c \ud55c\ub2e4.<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td width=\"604\">&nbsp;<\/p>\n<p>(\uc911 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\ub7b5)<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;modules&gt;<\/p>\n<p><strong>&lt;module&gt;store-gateway-server&lt;\/module&gt;<\/strong><\/p>\n<p>&lt;\/modules&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;repositories&gt;<\/p>\n<p>&lt;repository&gt;<\/p>\n<p>&lt;id&gt;spring-snapshots&lt;\/id&gt;<\/p>\n<p>&lt;name&gt;Spring Snapshots&lt;\/name&gt;<\/p>\n<p>&lt;url&gt;https:\/\/repo.spring.io\/snapshot&lt;\/url&gt;<\/p>\n<p>&lt;snapshots&gt;<\/p>\n<p>&lt;enabled&gt;true&lt;\/enabled&gt;<\/p>\n<p>&lt;\/snapshots&gt;<\/p>\n<p>&lt;\/repository&gt;<\/p>\n<p>&lt;repository&gt;<\/p>\n<p>&lt;id&gt;spring-milestones&lt;\/id&gt;<\/p>\n<p>&lt;name&gt;Spring Milestones&lt;\/name&gt;<\/p>\n<p>&lt;url&gt;https:\/\/repo.spring.io\/milestone&lt;\/url&gt;<\/p>\n<p>&lt;snapshots&gt;<\/p>\n<p>&lt;enabled&gt;false&lt;\/enabled&gt;<\/p>\n<p>&lt;\/snapshots&gt;<\/p>\n<p>&lt;\/repository&gt;<\/p>\n<p>&lt;\/repositories&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;properties&gt;<\/p>\n<p>&lt;java.version&gt;11&lt;\/java.version&gt;<\/p>\n<p><strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;spring-cloud.version&gt;Hoxton.SR5&lt;\/spring-cloud.version&gt;<\/strong><\/p>\n<p>&lt;\/properties&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;dependencies&gt;<\/p>\n<p>&lt;dependency&gt;<\/p>\n<p>&lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;<\/p>\n<p>&lt;artifactId&gt;spring-boot-starter-web&lt;\/artifactId&gt;<\/p>\n<p>&lt;\/dependency&gt;<\/p>\n<p>&lt;dependency&gt;<\/p>\n<p>&lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;<\/p>\n<p>&lt;artifactId&gt;spring-boot-devtools&lt;\/artifactId&gt;<\/p>\n<p>&lt;scope&gt;runtime&lt;\/scope&gt;<\/p>\n<p>&lt;optional&gt;true&lt;\/optional&gt;<\/p>\n<p>&lt;\/dependency&gt;<\/p>\n<p>&lt;dependency&gt;<\/p>\n<p>&lt;groupId&gt;org.projectlombok&lt;\/groupId&gt;<\/p>\n<p>&lt;artifactId&gt;lombok&lt;\/artifactId&gt;<\/p>\n<p>&lt;optional&gt;true&lt;\/optional&gt;<\/p>\n<p>&lt;\/dependency&gt;<\/p>\n<p>&lt;dependency&gt;<\/p>\n<p>&lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;<\/p>\n<p>&lt;artifactId&gt;spring-boot-starter-test&lt;\/artifactId&gt;<\/p>\n<p>&lt;scope&gt;test&lt;\/scope&gt;<\/p>\n<p>&lt;exclusions&gt;<\/p>\n<p>&lt;exclusion&gt;<\/p>\n<p>&lt;groupId&gt;org.junit.vintage&lt;\/groupId&gt;<\/p>\n<p>&lt;artifactId&gt;junit-vintage-engine&lt;\/artifactId&gt;<\/p>\n<p>&lt;\/exclusion&gt;<\/p>\n<p>&lt;\/exclusions&gt;<\/p>\n<p>&lt;\/dependency&gt;<\/p>\n<p>&lt;\/dependencies&gt;<\/p>\n<p>&nbsp;<\/p>\n<p><strong>&lt;dependencyManagement&gt;<\/strong><\/p>\n<p><strong>&lt;dependencies&gt;<\/strong><\/p>\n<p><strong>&lt;dependency&gt;<\/strong><\/p>\n<p><strong>&lt;groupId&gt;org.springframework.cloud&lt;\/groupId&gt;<\/strong><\/p>\n<p><strong>&lt;artifactId&gt;spring-cloud-dependencies&lt;\/artifactId&gt;<\/strong><\/p>\n<p><strong>&lt;version&gt;${spring-cloud.version}&lt;\/version&gt;<\/strong><\/p>\n<p><strong>&lt;type&gt;pom&lt;\/type&gt;<\/strong><\/p>\n<p><strong>&lt;scope&gt;import&lt;\/scope&gt;<\/strong><\/p>\n<p><strong>&lt;\/dependency&gt;<\/strong><\/p>\n<p><strong>&lt;\/dependencies&gt;<\/strong><\/p>\n<p><strong>&lt;\/dependencyManagement&gt;<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>&lt;build&gt;<\/p>\n<p>&lt;plugins&gt;<\/p>\n<p>&lt;plugin&gt;<\/p>\n<p>&lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;<\/p>\n<p>&lt;artifactId&gt;spring-boot-maven-plugin&lt;\/artifactId&gt;<\/p>\n<p>&lt;\/plugin&gt;<\/p>\n<p>&lt;\/plugins&gt;<\/p>\n<p>&lt;\/build&gt;<\/p>\n<p>&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>\ud574\ub2f9 \uc790\uc2dd \ubaa8\ub4c8(store-gateway-server)\uc758 xml\uc5d0\ub3c4 \uc2a4\ud504\ub9c1 \ubd80\ud2b8 \uad00\ub828 \uc885\uc18d\uc131 \uba85\uae30<\/li>\n<\/ul>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td width=\"604\">&lt;project xmlns=<em>&#8220;http:\/\/maven.apache.org\/POM\/4.0.0&#8221;<\/em> xmlns:xsi=<em>&#8220;http:\/\/www.w3.org\/2001\/XMLSchema-instance&#8221;<\/em> xsi:schemaLocation=<em>&#8220;http:\/\/maven.apache.org\/POM\/4.0.0 https:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd&#8221;<\/em>&gt;<\/p>\n<p>&lt;modelVersion&gt;4.0.0&lt;\/modelVersion&gt;<\/p>\n<p><u>&lt;<\/u><u>parent<\/u><u>&gt;<\/u><\/p>\n<p>&lt;groupId&gt;store&lt;\/groupId&gt;<\/p>\n<p>&lt;artifactId&gt;store&lt;\/artifactId&gt;<\/p>\n<p>&lt;version&gt;0.0.1-SNAPSHOT&lt;\/version&gt;<\/p>\n<p>&lt;\/parent&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;groupId&gt;store.gateway.server&lt;\/groupId&gt;<\/p>\n<p>&lt;artifactId&gt;store-gateway-server&lt;\/artifactId&gt;<\/p>\n<p><u>&lt;<\/u><u>version<\/u><u>&gt;<\/u><u>0.0.1-SNAPSHOT<\/u><u>&lt;\/<\/u><u>version<\/u><u>&gt;<\/u><\/p>\n<p>&lt;name&gt;Store Gateway Server&lt;\/name&gt;<\/p>\n<p>&lt;description&gt;Store Gateway Server Project&lt;\/description&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;dependencies&gt;<\/p>\n<p>&lt;!&#8211; \uc8fc\uc6b8(Zuul) &#8211;&gt;<\/p>\n<p>&lt;dependency&gt;<\/p>\n<p>&lt;groupId&gt;org.springframework.cloud&lt;\/groupId&gt;<\/p>\n<p>&lt;artifactId&gt;spring-cloud-starter-netflix-zuul&lt;\/artifactId&gt;<\/p>\n<p>&lt;\/dependency&gt;<\/p>\n<p>&lt;\/dependencies&gt;<\/p>\n<p>&lt;\/project&gt;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<ul>\n<li>\ud328\ud0a4\uc9c0 \uc0dd\uc131<\/li>\n<\/ul>\n<p>\uc18c\uc2a4\ub97c \uc0dd\uc131\ud558\uae30\uc704\ud574 \uba3c\uc800 \ud328\ud0a4\uc9c0\ub97c \ub9cc\ub4e0\ub2e4.<\/p>\n<p>&#8211; \ud328\ud0a4\uc9c0\uba85 : store.gateway.server<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image018.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2171\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image018.png\" alt=\"\" width=\"511\" height=\"427\" \/><\/a><\/p>\n<ul>\n<li>Application.java \ud30c\uc77c\uc0dd\uc131<\/li>\n<\/ul>\n<p>&#8211; New &gt; Class\ub85c main\uc774 \uc788\ub294 Application \ud30c\uc77c\uc0dd\uc131<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image019.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2172\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image019.png\" alt=\"\" width=\"529\" height=\"631\" \/><\/a><\/p>\n<ul>\n<li>Application.java \ud30c\uc77c\uc218\uc815<\/li>\n<\/ul>\n<p>Annotation\uc5d0 @EnableZuulProxy \ub4f1\uc744 \uc785\ub825<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td width=\"604\"><strong>@EnableZuulProxy<\/strong><\/p>\n<p>@SpringBootApplication<\/p>\n<p>public class Application<\/p>\n<p>{<\/p>\n<p>public static void main(String[] args)<\/p>\n<p>{<\/p>\n<p>SpringApplication.run(Application.class, args);<\/p>\n<p>}<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<ul>\n<li>\ud658\uacbd\uc124\uc815\ud30c\uc77c \ucd94\uac00<\/li>\n<\/ul>\n<p>\uc5b4\ud50c\ub9ac\ucf00\uc774\uc158 \uc124\uc815\uc5d0 \ud544\uc694\ud55c \ud658\uacbd\uc124\uc815 \ud30c\uc77c\ub85c resources \ud3f4\ub354\uc5d0 application.yml \uc774\ub77c\ub294 \uc774\ub984\uc73c\ub85c \ub9cc\ub4e4\uace0 \uc544\ub798\uc640 \uac19\uc774 \uc791\uc131\ud55c\ub2e4.<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image020.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2173\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image020.png\" alt=\"\" width=\"511\" height=\"598\" \/><\/a><\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td width=\"553\">spring:<\/p>\n<p>application:<\/p>\n<p>name: store-gateway-server<\/p>\n<p>&nbsp;<\/p>\n<p>server:<\/p>\n<p>port: 5001<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p># \uc8fc\uc6b8<\/p>\n<p>zuul:<\/p>\n<p>routes:<\/p>\n<p>store-corp-api:<\/p>\n<p>path: \/corpsvc\/**<\/p>\n<p>url: http:\/\/localhost:5002<\/p>\n<p>stripPrefix: true<\/p>\n<p>&nbsp;<\/p>\n<p>store-user-api:<\/p>\n<p>path: \/usersvc\/**<\/p>\n<p>url: http:\/\/localhost:5003<\/p>\n<p>stripPrefix: true<\/p>\n<p>&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>Zuul \uc124\uc815\uc740 \uac8c\uc774\ud2b8\uc6e8\uc774\ub97c \ud1b5\ud574 \ub2e4\uc74c\uc808\uc5d0\uc11c \ub2e4\uc624\ub294 \ud68c\uc0acAPI\uc640 \uc0ac\uc6a9\uc790API\uc5d0\uac8c \ub77c\uc6b0\ud305\ud574\uc8fc\ub294 \uae30\ub2a5\uc774\ub2e4.<\/p>\n<p>\uac00\ub839 <a href=\"http:\/\/localhost:5001\/corpsvc\/api\/corp\/findAll\">http:\/\/localhost:5001\/corpsvc\/api\/corp\/findAll<\/a>\u00a0 \uacfc \uac19\uc774 \uac8c\uc774\ud2b8\uc6e8\uc774(5001\ud3ec\ud2b8)\ub97c \ud1b5\ud574 \ud328\uc2a4\uac00 \/corpsvc\/** \ud615\ud0dc\ub85c \ub4e4\uc5b4\uc624\ub294 \uacbd\uc6b0\ub294 URL\uc744<\/p>\n<p><a href=\"http:\/\/localhost:5002\/api\/corp\/findAll\">http:\/\/localhost:5002\/api\/corp\/findAll<\/a> \ub85c \uc694\uccad\ud558\uc5ec \ubc18\ud658\ud558\uac8c \ub41c\ub2e4.<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>\uc2e4\ud589<\/li>\n<\/ul>\n<p>\uc704\uc5d0\uc11c \uc791\uc131\ud55c \uc18c\uc2a4\ub97c \uc2e4\ud589\ud558\ub824\uba74 Run AS &gt; Spring Boot App \ub97c \uc120\ud0dd\ud558\uc5ec \uc2e4\ud589\ud558\uba74 \ub41c\ub2e4.<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image021.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2174\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image021.png\" alt=\"\" width=\"689\" height=\"680\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3><a name=\"_Toc53749186\"><\/a><strong>3.2.2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>\ud68c\uc0ac API(\uc0d8\ud50c)<\/h3>\n<p>\uc544\ub798\uc640 \uac19\uc774 Maven Module\uc744 \uc0dd\uc131\ud55c\ub2e4.<\/p>\n<ul>\n<li>File &gt; New &gt; Other\uc5d0\uc11c Maven &gt; Maven Module\uc744 \uc120\ud0dd\ud558\uace0 \u201cNext\u201d \ubc84\ud2bc \ud074\ub9ad<\/li>\n<\/ul>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image014.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2167\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image014.png\" alt=\"\" width=\"511\" height=\"493\" \/><\/a><\/p>\n<ul>\n<li>\ubaa8\ub4c8\uba85 \uc785\ub825<\/li>\n<\/ul>\n<p>\u201ccreate a simple project\u201d \ub97c \uccb4\ud06c \ud558\uace0, Module Name\uc5d0 \u201cstore-corp-api\u201d\ub97c \uc785\ub825\ud558\uace0 \u201cNext\u201d \ubc84\ud2bc\uc744 \ud074\ub9ad\ud55c\ub2e4.<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image022.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2176\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image022.png\" alt=\"\" width=\"602\" height=\"540\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>\uae30\ud0c0 \ubaa8\ub4c8\uc815\ubcf4\ub97c \uc785\ub825\ud558\uace0 \u201cFinish\u201d \ubc84\ud2bc \ud074\ub9ad<\/li>\n<\/ul>\n<p>&#8211; Group Id : store.corp.api<\/p>\n<p>&#8211; Version : 0.0.1-SNAPSHOT<\/p>\n<p>&#8211; Packaging: jar<\/p>\n<p>&#8211; Name : Store Corp API<\/p>\n<p>&#8211; Description : Store Corp API Project<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image023.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2177\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image023.png\" alt=\"\" width=\"602\" height=\"540\" \/><\/a><\/p>\n<ul>\n<li>\ud328\ud0a4\uc9c0 \uc0dd\uc131<\/li>\n<\/ul>\n<p>\uc18c\uc2a4\ub97c \uc0dd\uc131\ud558\uae30\uc704\ud574 \uba3c\uc800 \ud328\ud0a4\uc9c0\ub97c \ub9cc\ub4e0\ub2e4.<\/p>\n<p>&#8211; \ud328\ud0a4\uc9c0\uba85 : store.corp.api<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image024.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2178\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image024.png\" alt=\"\" width=\"511\" height=\"427\" \/><\/a><\/p>\n<ul>\n<li>Applicaiton.java \ud30c\uc77c\uc0dd\uc131<\/li>\n<\/ul>\n<p>&#8211; New &gt; Class\ub85c main\uc774 \uc788\ub294 Application \ud30c\uc77c\uc0dd\uc131<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image025.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2179\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image025.png\" alt=\"\" width=\"529\" height=\"631\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>Applicaiton.java \ud30c\uc77c\uc218\uc815<\/li>\n<\/ul>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td width=\"604\">@SpringBootApplication<\/p>\n<p>@EnableAutoConfiguration<\/p>\n<p><strong>public<\/strong> <strong>class<\/strong> Application<\/p>\n<p>{<\/p>\n<p><strong>public<\/strong> <strong>static<\/strong> <strong>void<\/strong> main(String[] args)<\/p>\n<p>{<\/p>\n<p>SpringApplication.<em>run<\/em>(Application.<strong>class<\/strong>, args);<\/p>\n<p>}<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>\ud658\uacbd\uc124\uc815\ud30c\uc77c \ucd94\uac00<\/li>\n<\/ul>\n<p>\uc5b4\ud50c\ub9ac\ucf00\uc774\uc158 \uc124\uc815\uc5d0 \ud544\uc694\ud55c \ud658\uacbd\uc124\uc815 \ud30c\uc77c\ub85c resources \ud3f4\ub354\uc5d0 application.yml \uc774\ub77c\ub294 \uc774\ub984\uc73c\ub85c \ub9cc\ub4e4\uace0 \uc544\ub798\uc640 \uac19\uc774 \uc791\uc131\ud55c\ub2e4.<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image026.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2180\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image026.png\" alt=\"\" width=\"511\" height=\"598\" \/><\/a><\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td width=\"553\">spring:<\/p>\n<p>application:<\/p>\n<p>name: store-corp-api<\/p>\n<p>&nbsp;<\/p>\n<p>server:<\/p>\n<p>port: 5002<\/p>\n<p>&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>\ucee8\ud2b8\ub864\ub7ec \ud328\ud0a4\uc9c0 \uc791\uc131<\/li>\n<\/ul>\n<p>&#8211; store.corp.api.controllers<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image027.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2181\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image027.png\" alt=\"\" width=\"511\" height=\"427\" \/><\/a><\/p>\n<ul>\n<li>\ucee8\ud2b8\ub864\ub7ec \uc791\uc131 : CorpController.java<\/li>\n<\/ul>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image028.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2182\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image028.png\" alt=\"\" width=\"529\" height=\"631\" \/><\/a><\/p>\n<ul>\n<li>\uc2e4\ud589<\/li>\n<\/ul>\n<p>\uc704\uc5d0\uc11c \uc791\uc131\ud55c \uc18c\uc2a4\ub97c \uc2e4\ud589\ud558\ub824\uba74 Run AS &gt; Spring Boot App \ub97c \uc120\ud0dd\ud558\uc5ec \uc2e4\ud589\ud558\uba74 \ub41c\ub2e4.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h3><a name=\"_Toc53749187\"><\/a><strong>3.2.3\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>\uc0ac\uc6a9\uc790 API(\uc0d8\ud50c)<\/h3>\n<p>\ud68c\uc0ac API[\uc0d8\ud50c]\uacfc \ub3d9\uc77c\ud558\uac8c Maven Module\uc744 \uc0dd\uc131\ud55c\ub2e4.<\/p>\n<ul>\n<li>\ubaa8\ub4c8\uba85 : store- user -api<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul>\n<li>\ubaa8\ub4c8\uc815\ubcf4<\/li>\n<\/ul>\n<p>&#8211; Group Id : store.user.api<\/p>\n<p>&#8211; Version : 0.0.1-SNAPSHOT<\/p>\n<p>&#8211; Packaging: jar<\/p>\n<p>&#8211; Name : Store User API<\/p>\n<p>&#8211; Description : Store User API Project<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>\ud328\ud0a4\uc9c0 \uc0dd\uc131<\/li>\n<\/ul>\n<p>&#8211; \ud328\ud0a4\uc9c0\uba85 : store.user.api<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>java \ud30c\uc77c\uc0dd\uc131 \ubc0f \uc218\uc815<\/li>\n<\/ul>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td width=\"553\">@SpringBootApplication<\/p>\n<p>@EnableAutoConfiguration<\/p>\n<p><strong>public<\/strong> <strong>class<\/strong> Application<\/p>\n<p>{<\/p>\n<p><strong>public<\/strong> <strong>static<\/strong> <strong>void<\/strong> main(String[] args)<\/p>\n<p>{<\/p>\n<p>SpringApplication.<em>run<\/em>(Application.<strong>class<\/strong>, args);<\/p>\n<p>}<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<ul>\n<li>\ud658\uacbd\uc124\uc815\ud30c\uc77c \ucd94\uac00<\/li>\n<\/ul>\n<p>&#8211; resources\\application.yml<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td width=\"553\">spring:<\/p>\n<p>application:<\/p>\n<p>name: store-user-api<\/p>\n<p>&nbsp;<\/p>\n<p>server:<\/p>\n<p>port: 5003<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<ul>\n<li>\ucee8\ud2b8\ub864\ub7ec \ud328\ud0a4\uc9c0 \uc791\uc131<\/li>\n<\/ul>\n<p>&#8211; store.user.api.controllers<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>\ucee8\ud2b8\ub864\ub7ec \uc791\uc131 : UserController.java<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul>\n<li>\uc2e4\ud589<\/li>\n<\/ul>\n<p>\uc704\uc5d0\uc11c \uc791\uc131\ud55c \uc18c\uc2a4\ub97c \uc2e4\ud589\ud558\ub824\uba74 Run AS &gt; Spring Boot App \ub97c \uc120\ud0dd\ud558\uc5ec \uc2e4\ud589\ud558\uba74 \ub41c\ub2e4.<\/p>\n<h3><a name=\"_Toc53749188\"><\/a><strong>3.2.4\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>\uc720\ub808\uce74 \uc11c\ubc84<\/h3>\n<p>\uc720\ub808\uce74\ub294 MSA\ub97c \ub3d9\uc801 \ub4f1\ub85d \ubc0f \ud0d0\uc0c9, \ubd80\ud558\ubd84\uc0b0\ucc98\ub9ac \uae30\ub2a5\uc744 \ud55c\ub2e4.<\/p>\n<p>\uc720\ub808\uce74\ub294 \uc704\uc640 \ub3d9\uc77c\ud558\uac8c Maven Module\ub85c \uc0dd\uc131\ud55c\ub2e4.<\/p>\n<ul>\n<li>File &gt; New &gt; Other\uc5d0\uc11c Maven &gt; Maven Module\uc744 \uc120\ud0dd\ud558\uace0 \u201cNext\u201d \ubc84\ud2bc \ud074\ub9ad<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul>\n<li>\ubaa8\ub4c8\uba85 \uc785\ub825<\/li>\n<\/ul>\n<p>\u201ccreate a simple project\u201d \ub97c \uccb4\ud06c \ud558\uace0, Module Name\uc5d0 \u201cstore-eureka-server\u201d\ub97c \uc785\ub825\ud558\uace0 \u201cNext\u201d \ubc84\ud2bc\uc744 \ud074\ub9ad\ud55c\ub2e4.<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image029.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2183\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image029.png\" alt=\"\" width=\"602\" height=\"540\" \/><\/a><\/p>\n<ul>\n<li>\uae30\ud0c0 \ubaa8\ub4c8\uc815\ubcf4\ub97c \uc785\ub825\ud558\uace0 \u201cFinish\u201d \ubc84\ud2bc \ud074\ub9ad<\/li>\n<\/ul>\n<p>&#8211; Group Id : store.eureka.server<\/p>\n<p>&#8211; Version : 0.0.1-SNAPSHOT<\/p>\n<p>&#8211; Packaging: jar<\/p>\n<p>&#8211; Name : Store Eureka Server<\/p>\n<p>&#8211; Description : Store Eureka Server Project<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image030.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2184\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image030.png\" alt=\"\" width=\"602\" height=\"540\" \/><\/a><\/p>\n<ul>\n<li>xml \ud30c\uc77c \ud655\uc778 \ubc0f \uc218\uc815<\/li>\n<\/ul>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td width=\"604\">&lt;dependency&gt;<\/p>\n<p>&lt;groupId&gt;org.springframework.cloud&lt;\/groupId&gt;<\/p>\n<p>&lt;artifactId&gt;spring-cloud-starter-netflix-eureka-server&lt;\/artifactId&gt;<\/p>\n<p>&lt;\/dependency&gt;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<ul>\n<li>\ud328\ud0a4\uc9c0 \uc0dd\uc131<\/li>\n<\/ul>\n<p>\uc18c\uc2a4\ub97c \uc0dd\uc131\ud558\uae30\uc704\ud574 \uba3c\uc800 \ud328\ud0a4\uc9c0\ub97c \ub9cc\ub4e0\ub2e4.<\/p>\n<p>&#8211; \ud328\ud0a4\uc9c0\uba85 : store.eureka.server<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image031.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2185\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image031.png\" alt=\"\" width=\"511\" height=\"427\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>Application.java \ud30c\uc77c\uc0dd\uc131<\/li>\n<\/ul>\n<p>&#8211; New &gt; Class\ub85c main\uc774 \uc788\ub294 Application \ud30c\uc77c\uc0dd\uc131<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>Application.java \ud30c\uc77c\uc218\uc815<\/li>\n<\/ul>\n<p>\uc720\ub808\uce74 \uc11c\ubc84\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c, @EnableEurekaServer Annotation\uc744 \uc785\ub825<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td width=\"604\">&nbsp;<\/p>\n<p>@EnableEurekaServer<\/p>\n<p>@SpringBootApplication<\/p>\n<p><strong>public<\/strong> <strong>class<\/strong> Application<\/p>\n<p>{<\/p>\n<p><strong>public<\/strong> <strong>static<\/strong> <strong>void<\/strong> main(String[] args)<\/p>\n<p>{<\/p>\n<p>SpringApplication.<em>run<\/em>(Application.<strong>class<\/strong>, args);<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>\ud658\uacbd\uc124\uc815\ud30c\uc77c \ucd94\uac00<\/li>\n<\/ul>\n<p>\uc5b4\ud50c\ub9ac\ucf00\uc774\uc158 \uc124\uc815\uc5d0 \ud544\uc694\ud55c \ud658\uacbd\uc124\uc815 \ud30c\uc77c\ub85c resources \ud3f4\ub354\uc5d0 application.yml \uc774\ub77c\ub294 \uc774\ub984\uc73c\ub85c \ub9cc\ub4e4\uace0 \uc544\ub798\uc640 \uac19\uc774 \uc791\uc131\ud55c\ub2e4.<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td width=\"553\">spring:<\/p>\n<p>application:<\/p>\n<p>name: store-eureka-server<\/p>\n<p>&nbsp;<\/p>\n<p>server:<\/p>\n<p>port: 8761<\/p>\n<p>&nbsp;<\/p>\n<p>eureka:<\/p>\n<p>client:<\/p>\n<p>register-with-eureka: false<\/p>\n<p>fetch-registry: false<\/p>\n<p>&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<ul>\n<li>\uc2e4\ud589 \ubc0f \uc720\ub808\uce74 \uc11c\ubc84 \uc811\uc18d<\/li>\n<\/ul>\n<p>\uc704\uc5d0\uc11c \uc791\uc131\ud55c \uc18c\uc2a4\ub97c \uc2e4\ud589\ud558\ub824\uba74 Run AS &gt; Spring Boot App \ub97c \uc120\ud0dd\ud558\uc5ec \uc2e4\ud589\ud558\uba74 \ub41c\ub2e4.<\/p>\n<p>\uadf8\ud6c4\uc5d0 \uc6f9 \ube0c\ub77c\uc6b0\uc838\uc5d0\uc11c\u00a0 <a href=\"http:\/\/localhost:8761\/\">http:\/\/localhost:8761\/<\/a> \ub85c \uc811\uc18d\ud558\uba74 \uc720\ub808\uce74\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \ud398\uc774\uc9c0\ub97c \ubcfc\uc218 \uc788\ub2e4.<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image033.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2186\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image033.png\" alt=\"\" width=\"773\" height=\"514\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>MSA \ud074\ub77c\uc774\uc5b8\ud2b8 \ub4f1\ub85d<\/li>\n<\/ul>\n<p>\uc704 \ud654\uba74\uc5d0\uc11c\ub294 \ub4f1\ub85d\ub41c MSA \ud074\ub77c\uc774\uc5b8\ud2b8\uc758 \uc815\ubcf4\ub97c \ubcfc \uc218 \uc788\ub294\ub370 \ud604\uc7ac \ub4f1\ub85d\ub41c MSA \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \uc5c6\uc73c\ubbc0\ub85c \uc544\ub798\uc640 \uac19\uc774 \ub4f1\ub85d \ud574\uc57c \ud55c\ub2e4.<\/p>\n<p>&nbsp;<\/p>\n<p>&#8211; \uac01 MSA\ud074\ub77c\uc774\uc5b8\ud2b8\ubcc4 \uc885\uc18d\uc131 \ucd94\uac00<\/p>\n<p>store-gateway-server, store-corp-api, store-user-api \ubaa8\ub4c8\uc744 \uc720\ub808\uce74 \ud074\ub77c\uc774\uc5b8\ud2b8\ub85c<\/p>\n<p>\uc124\uc815\ud55c\ub2e4. \ub530\ub77c\uc11c \uac01 \ubaa8\ub4c8\uc5d0 \uc885\uc18d\uc131\uc744 \ucd94\uac00\ud55c\ub2e4.<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td width=\"604\">&lt;dependency&gt;<\/p>\n<p>&lt;groupId&gt;org.springframework.cloud&lt;\/groupId&gt;<\/p>\n<p>&lt;artifactId&gt;spring-cloud-starter-netflix-eureka-client&lt;\/artifactId&gt;<\/p>\n<p>&lt;\/dependency&gt;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>&#8211; \uac01 \ubaa8\ub4c8\uc758 Application.java \uc5d0 @EnableDiscoveryClient \uc544\ub178\ud14c\uc774\uc158\uc744 \ucd94\uac00<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td width=\"604\">&nbsp;<\/p>\n<p>@EnableDiscoveryClient<\/p>\n<p>@SpringBootApplication<\/p>\n<p><strong>public<\/strong> <strong>class<\/strong> Application<\/p>\n<p>{<\/p>\n<p><strong>public<\/strong> <strong>static<\/strong> <strong>void<\/strong> main(String[] args)<\/p>\n<p>{<\/p>\n<p>SpringApplication.<em>run<\/em>(Application.<strong>class<\/strong>, args);<\/p>\n<p>}<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>&#8211; \uac01 \ubaa8\ub4c8\uc758 application.yml\uc5d0 \uc720\ub808\uce74 \uc124\uc815 \ucd94\uac00<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td width=\"553\">spring:<\/p>\n<p>application:<\/p>\n<p>name: store-gateway-server<\/p>\n<p>&nbsp;<\/p>\n<p>server:<\/p>\n<p>port: 5001<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>eureka:<\/p>\n<p>client:<\/p>\n<p>serviceUrl:<\/p>\n<p>defaultZone: http:\/\/localhost:8761\/eureka<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>&#8211; \uac01 \ubaa8\ub4c8\uc744 RUN\uc2dc\ud0a4\uace0 \uc720\ub808\uce74 \ucf58\uc194(<a href=\"http:\/\/localhost:8761\/\">http:\/\/localhost:8761\/<\/a>)\uc744 \ub9b4\ub85c\ub4dc \ud574\ubcf4\uba74 \ub2e4\uc74c\uacfc \uac19\uc774 \ub4f1\ub85d\ub41c MSA \ud074\ub77c\uc774\uc5b8\ud2b8\ub97c \ud655\uc778\ud560\uc218 \uc788\ub2e4.<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image034.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2187\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image034.png\" alt=\"\" width=\"816\" height=\"158\" \/><\/a><\/p>\n<ul>\n<li>\uac8c\uc774\ud2b8\uc6e8\uc774 \uc124\uc815<\/li>\n<\/ul>\n<p>\uc720\ub808\uce74\ub97c \uc774\uc6a9 \ud560 \ub54c \ub294 \uc774\uc804\uc5d0 \uac8c\uc774\ud2b8\uc6e8\uc774\uc11c\ubc84\uc758 \ud658\uacbd\uc124\uc815\uc744 \uc544\ub798\ucc98\ub7fc \uc218\uc815\ub418\uc5b4\uc57c \ud55c\ub2e4.<\/p>\n<p>\uc774\uc804\uc5d0\ub294 URL\ub85c \ud638\ucd9c\ub418\uc5c8\uc9c0\ub9cc, \uc720\ub808\uce74 \uc774\uc6a9\uc2dc\uc5d0\ub294 serviceId\ub85c \ucc98\ub9ac\ud558\uba74 \ub41c\ub2e4.<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td width=\"604\"># \uc8fc\uc6b8<\/p>\n<p>zuul:<\/p>\n<p>routes:<\/p>\n<p>store-corp-api:<\/p>\n<p>path: \/corpsvc\/**<\/p>\n<p>serviceId: store-corp-api<\/p>\n<p>#url: http:\/\/localhost:5002<\/p>\n<p>stripPrefix: true<\/p>\n<p>&nbsp;<\/p>\n<p>store-user-api:<\/p>\n<p>path: \/usersvc\/**<\/p>\n<p>serviceId: store-user-api<\/p>\n<p>#url: http:\/\/localhost:5003<\/p>\n<p>stripPrefix: true<\/p>\n<p>&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>\ucc38\uace0\ub85c \uc704\uc758 serviceId\ub294 \ubc18\ub4dc\uc2dc \uc544\ub798\ucc98\ub7fc \uac01\uc11c\ubc84\uc758 application.yml\uc5d0 \uc815\uc758\ub41c<\/p>\n<p>\uc774\ub984(spring.application.name) \uc774\uc5b4\uc57c \ud55c\ub2e4.<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td width=\"604\">spring:<\/p>\n<p>application:<\/p>\n<p>name: store-user-api<\/p>\n<p>&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<h3><a name=\"_Toc53749189\"><\/a><strong>3.2.5\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>\ubc31\uc5d4\ub4dc \uc6f9(Backend Web)<\/h3>\n<p>\ubc31\uc5d4\ub4dc \uc6f9\uc5d0\uc11c\ub294 JSP\uc0c1\uc5d0\uc11c ajax\ub97c \uc774\uc6a9\ud558\uc5ec MSA\ub85c \uc811\uadfc\ud558\uc5ec \ub370\uc774\ud130\ub97c \uac00\uc838\uc624\ub294 \ubc29\ubc95,\u00a0 Feign \ud074\ub77c\uc774\uc5b8\ud2b8\ub97c \uc774\uc6a9\ud558\uc5ec \ub370\uc774\ud130\ub97c \uac00\uc838\uc624\ub294 \ubc29\ubc95\uc5d0 \ub300\ud558\uc5ec \uad6c\ud604\ud558\uc600\ub2e4.<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>Module\ub85c \ubaa8\ub4c8\uc0dd\uc131<\/li>\n<\/ul>\n<p>&#8211; \ubaa8\ub4c8\uba85 : store-backend-web<\/p>\n<p>&#8211; Group Id : store.backend.web<\/p>\n<p>&#8211; Version : 0.0.1-SNAPSHOT<\/p>\n<p>&#8211; Packaging: jar<\/p>\n<p>&#8211; Name : Store Backend Web<\/p>\n<p>&#8211; Description : Store Backend\u00a0 Project<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>xml \ud30c\uc77c \ucd94\uac00<\/li>\n<\/ul>\n<p>&#8211; \ud1b0\ucea3\uad00\ub828 \ub77c\uc774\ube0c\ub7ec\ub9ac(Jasper)<\/p>\n<p>&#8211; JSTL \ub77c\uc774\ube0c\ub7ec\ub9ac<\/p>\n<p>&#8211; Feign \ud074\ub77c\uc774\uc5b8\ud2b8<\/p>\n<p>&#8211; \uc720\ub808\uce74 \ud074\ub77c\uc774\uc5b8\ud2b8<\/p>\n<p>&#8211; Graceful Shutdown \ub77c\uc774\ube0c\ub7ec\ub9ac : \uc167\ub2e4\uc6b4\uc2dc \uc548\uc804\ud558\uac8c \uc885\ub8cc\ud558\uae30 \uc704\ud574\uc11c \uc0ac\uc6a9<\/p>\n<p>&#8211; \ubaa8\ub378 \ub9e4\ud37c<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td width=\"604\">&nbsp;<\/p>\n<p>&lt;!&#8211; \ud1b0\ucea3\ud30c\uc11c(Jasper) &#8211;&gt;<\/p>\n<p>&lt;dependency&gt;<\/p>\n<p>&lt;groupId&gt;org.apache.tomcat.embed&lt;\/groupId&gt;<\/p>\n<p>&lt;artifactId&gt;tomcat-embed-jasper&lt;\/artifactId&gt;<\/p>\n<p>&lt;\/dependency&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;!&#8211; JSTL \ub77c\uc774\ube0c\ub7ec\ub9ac &#8211;&gt;<\/p>\n<p>&lt;dependency&gt;<\/p>\n<p>&lt;groupId&gt;javax.servlet&lt;\/groupId&gt;<\/p>\n<p>&lt;artifactId&gt;jstl&lt;\/artifactId&gt;<\/p>\n<p>&lt;\/dependency&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;!&#8211; Feign \ud074\ub77c\uc774\uc5b8\ud2b8 &#8211;&gt;<\/p>\n<p>&lt;dependency&gt;<\/p>\n<p>&lt;groupId&gt;org.springframework.cloud&lt;\/groupId&gt;<\/p>\n<p>&lt;artifactId&gt;spring-cloud-starter-openfeign&lt;\/artifactId&gt;<\/p>\n<p>&lt;\/dependency&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;!&#8211; \uc720\ub808\uce74 \ud074\ub77c\uc774\uc5b8\ud2b8 &#8211;&gt;<\/p>\n<p>&lt;dependency&gt;<\/p>\n<p>&lt;groupId&gt;org.springframework.cloud&lt;\/groupId&gt;<\/p>\n<p>&lt;artifactId&gt;spring-cloud-starter-netflix-eureka-client&lt;\/artifactId&gt;<\/p>\n<p>&lt;\/dependency&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;!&#8211; graceful\ud55c \uc885\ub8cc \ucc98\ub9ac &#8211;&gt;<\/p>\n<p>&lt;dependency&gt;<\/p>\n<p>&lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;<\/p>\n<p>&lt;artifactId&gt;spring-boot-starter-actuator&lt;\/artifactId&gt;<\/p>\n<p>&lt;\/dependency&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&lt;!&#8211; \ubaa8\ub378 \ub9e4\ud37c &#8211;&gt;<\/p>\n<p>&lt;dependency&gt;<\/p>\n<p>&lt;groupId&gt;org.modelmapper&lt;\/groupId&gt;<\/p>\n<p>&lt;artifactId&gt;modelmapper&lt;\/artifactId&gt;<\/p>\n<p>&lt;version&gt;${modelmapper.version}&lt;\/version&gt;<\/p>\n<p>&lt;\/dependency&gt;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>\ud328\ud0a4\uc9c0 \uc0dd\uc131 \ubc0f java \ud30c\uc77c\uc0dd\uc131<\/li>\n<\/ul>\n<p>&#8211; \ud328\ud0a4\uc9c0\uba85 : store.backend.web<\/p>\n<p>&#8211; Application.java : \ud574\ub2f9 \ubaa8\ub4c8\uc774 \uc720\ub808\uce74 \ud074\ub77c\uc774\uc5b8\ud2b8\uc774\ubbc0\ub85c, @EnableDiscoveryClient \uc544\ub178\ud14c\uc774\uc158\uacfc, FeignClient\ub97c \uc0ac\uc6a9\ud558\uae30 \uc704\ud55c @EnableFeignClients\uc744 \uc785\ub825\ud55c\ub2e4.<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td width=\"553\">&nbsp;<\/p>\n<p>@EnableDiscoveryClient<\/p>\n<p>@EnableFeignClients<\/p>\n<p>@SpringBootApplication<\/p>\n<p><strong>public<\/strong> <strong>class<\/strong> Application<\/p>\n<p>{<\/p>\n<p><strong>public<\/strong> <strong>static<\/strong> <strong>void<\/strong> main(String[] args)<\/p>\n<p>{<\/p>\n<p>SpringApplication.<em>run<\/em>(Application.<strong>class<\/strong>, args);<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<ul>\n<li>\ud658\uacbd\uc124\uc815\ud30c\uc77c(resouces\/application.yml) \ucd94\uac00<\/li>\n<\/ul>\n<p>&#8211; jsp\ud30c\uc77c\uc758 \uc704\uce58 \ubc0f \ud655\uc7a5\uc790 \ub4f1\uc5d0 \ub300\ud55c \uc124\uc815<\/p>\n<p>&#8211; \uc2e4\ud589\uc911\uc778 \uc4f0\ub808\ub4dc\uac00 \uc788\ub294\uacbd\uc6b0 \ucc98\ub9ac \ud6c4 \uc885\ub8cc\ud560 \uc218 \uc788\ub3c4\ub85d \ud558\uae30 \uc704\ud55c \uc6b0\uc544\ud55c \uc885\ub8cc\ucc98\ub9ac\uc5d0 \ub300\ud55c \uc124\uc815<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td width=\"553\"># \uc2a4\ud504\ub9c1 \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158 \uba85(\uc720\ub808\uce74\uc5d0\uc11c \uc0ac\uc6a9\ub428)<\/p>\n<p>spring:<\/p>\n<p>application:<\/p>\n<p>name: store-backend-web<\/p>\n<p>&nbsp;<\/p>\n<p># \uc2a4\ud504\ub9c1 JSP \uc124\uc815<\/p>\n<p>mvc:<\/p>\n<p>view:<\/p>\n<p>prefix: \/WEB-INF\/jsp\/<\/p>\n<p>suffix: .jsp<\/p>\n<p>&nbsp;<\/p>\n<p># \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158 \ud3ec\ud2b8<\/p>\n<p>server:<\/p>\n<p>port: 8080<\/p>\n<p>&nbsp;<\/p>\n<p># \uc720\ub808\uce74 \uc124\uc815<\/p>\n<p>eureka:<\/p>\n<p>client:<\/p>\n<p>serviceUrl:<\/p>\n<p>defaultZone: http:\/\/localhost:8761\/eureka<\/p>\n<p>&nbsp;<\/p>\n<p># \uc6b0\uc544\ud55c \uc885\ub8cc \ucc98\ub9ac<\/p>\n<p>management:<\/p>\n<p>endpoints:<\/p>\n<p><u>shutdown<\/u>:<\/p>\n<p>enabled: true<\/p>\n<p><u>sensitive<\/u>: false<\/p>\n<p>web:<\/p>\n<p>exposure:<\/p>\n<p>include: &#8220;*&#8221;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>\uad50\ucc28 \ucd9c\ucc98 \ub9ac\uc18c\uc2a4 \uacf5\uc720(Cross-Origin Resource Sharing, CORS) \uc124\uc815<\/li>\n<\/ul>\n<p>Ajax \ub610\ub294 Axios \uc5d0\uc11c \ub2e4\ub978 \ub3c4\uba54\uc778\uc73c\ub85c \ucf5c\ud558\uae30 \uc704\ud574 Cors \uc124\uc815\ud558\uc5ec \ud5c8\ub77d\uc744 \ud574\uc8fc\uc5b4\uc57c\ud55c\ub2e4.<\/p>\n<p>store.backend.web.config \ud328\ud0a4\uc9c0\uc5d0 WebConfig.java \ud30c\uc77c\uc744 \uc0dd\uc131\ud558\uace0 \uc544\ub798\ucc98\ub7fc \uae30\uc220\ud55c\ub2e4.<\/p>\n<p>&nbsp;<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td width=\"604\">@Configuration<\/p>\n<p><strong>public<\/strong> <strong>class<\/strong> WebConfig<\/p>\n<p>{<\/p>\n<p><strong>public<\/strong> <strong>void<\/strong> <u>addCorsMappins<\/u>(CorsRegistry clsCors)<\/p>\n<p>{<\/p>\n<p>clsCors.addMapping(&#8220;\/**&#8221;)<\/p>\n<p>.allowedOrigins(&#8220;*&#8221;);<\/p>\n<p>}<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>Feign \ud074\ub77c\uc774\uc5b8\ud2b8<\/li>\n<\/ul>\n<p>Feign \ud074\ub77c\uc774\uc5b8\ud2b8\ub294 \uc778\ud130\ud398\uc774\uc2a4\uc640 \uc544\ub178\ud14c\uc774\uc158\ub9cc\uc73c\ub85c\ub3c4 API\uc11c\ubc84\ub85c\ubd80\ud130 \ub370\uc774\ud130\ub97c \ubcf4\ub2e4 \ub354 \uc2f6\uac8c \uc218\uc2e0\ubc1b\uae30 \uc704\ud55c \ud074\ub77c\uc774\uc5b8\ud2b8\uc774\ub2e4.<\/p>\n<p>store.backend.web.corpuser.client \ub77c\ub294 \ud328\ud0a4\uc9c0\ub97c \ub9cc\ub4e4\uace0 \uc544\ub798\uc640 \uac19\uc774 \ud074\ub77c\uc774\uc5b8\ud2b8\ub97c \ub9cc\ub4e0\ub2e4.<\/p>\n<p>&#8211; CorpClient.java : store-corp-api \uc11c\ubc84\ub85c\ubd80\ud130 \ub370\uc774\ud130\ub97c \uc218\uc2e0\ud558\ub294 Feign \ud074\ub77c\uc774\uc5b8\ud2b8<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td width=\"553\">\/\/@FeignClient(name=&#8221;store-<u>corp<\/u>&#8211;<u>api<\/u>&#8220;)<\/p>\n<p>@<u>FeignClient<\/u>(name=&#8221;store-corp-api&#8221;, url=&#8221;http:\/\/localhost:5001&#8243;)<\/p>\n<p><strong>public<\/strong> <strong>interface<\/strong> CorpClient<\/p>\n<p>{<\/p>\n<p>\/\/@GetMapping(&#8220;\/<u>api<\/u>\/<u>corp<\/u>\/findAll&#8221;)<\/p>\n<p>@GetMapping(&#8220;\/corpsvc\/api\/corp\/findAll&#8221;)<\/p>\n<p>List&lt;CorpMast&gt; findAll();<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&#8211; UserClient.java : store-user-api \uc11c\ubc84\ub85c\ubd80\ud130 \ub370\uc774\ud130\ub97c \uc218\uc2e0\ud558\ub294 Feign \ud074\ub77c\uc774\uc5b8\ud2b8<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td width=\"604\">\/\/@FeignClient(name=&#8221;store-user-<u>api<\/u>&#8220;)<\/p>\n<p>@FeignClient(name=&#8221;store-user-api&#8221;, url=&#8221;http:\/\/localhost:5001&#8243;)<\/p>\n<p><strong>public<\/strong> <strong>interface<\/strong> UserClient<\/p>\n<p>{<\/p>\n<p>\/\/@GetMapping(&#8220;\/<u>api<\/u>\/user\/findAll&#8221;)<\/p>\n<p>@GetMapping(&#8220;\/usersvc\/api\/user\/findAll&#8221;)<\/p>\n<p>List&lt;UserMast&gt; findAll();<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<ul>\n<li>FeignClient\ub294 name\uacfc url\uc744 \uc801\uc5b4\uc57c\ud558\ub294\ub370 URL\uc774 \uc5c6\uc73c\uba74, \uc720\ub808\uce74\ub97c \uc774\uc6a9\ud558\uae30 \ub54c\ubb38\uc5d0 \uc720\ub808\uce74\uc5d0 \ub4f1\ub85d\ub41c \uba85\uce6d\uc73c\ub85c \ub3d9\uc791\ud558\uac8c \ub41c\ub2e4. \uc989 \uac01 API\uc11c\ubc84\uc758 yml\uc5d0 \uae30\ub85d\ud55c name\uc73c\ub85c \uc11c\ubc84\ub97c \ucc3e\uc544\uac00\uae30 \ub54c\ubb38\uc5d0 \uba85\uce6d\uc774 application.yml\uc5d0 \ub4f1\ub85d\ud55c \uc774\ub984\uacfc \ub3d9\uc77c\ud574\uc57c \ud55c\ub2e4.<\/li>\n<li>URL\uc774 5001\ubc88\ud3ec\ud1a0\ub97c \uc0ac\uc6a9\ud55c\ub2e4\ub294 \ub73b\uc740 \uac8c\uc774\ud2b8\uc6e8\uc5b4 \uc11c\ubc84\ub97c \uc774\uc6a9\ud558\uc5ec \uc811\uc18d\ud55c\ub2e4\ub294 \ub73b\uc774\ub2e4. \ub530\ub77c\uc11c GetMappinig\uc5d0\uc11c\ub294 \uac8c\uc774\ud2b8\uc6e8\uc5b4\uc11c\ubc84\uc758 yml\uc5d0 \uc815\uc758\ub41c \/corpsvc\/\ub098 \/usersvc\/\ub97c \ubd99\uc5b4\uc8fc\uc5b4\uc57c \ud55c\ub2e4.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>Service \uc791\uc131<\/li>\n<\/ul>\n<p>\uc704\uc5d0\uc11c \ub9cc\ub4e0 FeignClient\ub97c \uc774\uc6a9\ud558\uc5ec \uc11c\ube44\uc2a4\ub97c \ub9cc\ub4e0\ub2e4.<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td width=\"604\">&nbsp;<\/p>\n<p>@Service<\/p>\n<p>public class CorpUserService<\/p>\n<p>{<\/p>\n<p>@Autowired<\/p>\n<p>CorpClient mClsCorpClient; \/\/ \ud68c\uc0acFeign \ud074\ub77c\uc774\uc5b8\ud2b8<\/p>\n<p>@Autowired<\/p>\n<p>UserClient mClsUserClient; \/\/ \uc0ac\uc6a9\uc790Feign \ud074\ub77c\uc774\uc5b8\ud2b8<\/p>\n<p>@Autowired<\/p>\n<p>ModelMapper mClsModelMapper;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ \ubaa8\ub378\ub9e4\ud37c<\/p>\n<p>&nbsp;<\/p>\n<p>\/**<\/p>\n<p>* \ud68c\uc0ac\uc815\ubcf4\ub97c \ub9ac\ud134\ud55c\ub2e4.<\/p>\n<p>* @return<\/p>\n<p>*\/<\/p>\n<p>public ResponseEntity&lt;?&gt; selectCorpData()<\/p>\n<p>{<\/p>\n<p>return ResponseEntity.ok(mClsCorpClient.findAll());<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>\/**<\/p>\n<p>* \uc0ac\uc6a9\uc790\uc815\ubcf4\ub97c \ub9ac\ud134\ud55c\ub2e4.<\/p>\n<p>* @return<\/p>\n<p>*\/<\/p>\n<p>public ResponseEntity&lt;?&gt; selectUserData()<\/p>\n<p>{<\/p>\n<p>return ResponseEntity.ok(mClsUserClient.findAll());<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>\/**<\/p>\n<p>* \ud68c\uc0ac\uc640 \uc0ac\uc6a9\uc790\uc815\ubcf4\ub97c \uc870\ud569\ud558\uc5ec \ub9ac\ud134\ud55c\ub2e4.<\/p>\n<p>* @return<\/p>\n<p>*\/<\/p>\n<p>public ResponseEntity&lt;?&gt; selectCombineData()<\/p>\n<p>{<\/p>\n<p>Map&lt;String, CorpUser&gt; hmBuffer = new HashMap&lt;String, CorpUser&gt;();<\/p>\n<p>&nbsp;<\/p>\n<p>for(CorpMast clsCorp : mClsCorpClient.findAll())<\/p>\n<p>{<\/p>\n<p>\/\/ CorpMast\uc5d0\uc11c CorpUser\ub85c \ubcf5\uc0ac<\/p>\n<p>CorpUser clsDest = mClsModelMapper.map(clsCorp, CorpUser.class);<\/p>\n<p>clsDest.user = new ArrayList&lt;UserMast&gt;();<\/p>\n<p>hmBuffer.put(clsCorp.corpId, clsDest);<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>for(UserMast clsUser : mClsUserClient.findAll())<\/p>\n<p>{<\/p>\n<p>String strKey = clsUser.corpId;<\/p>\n<p>if(hmBuffer.containsKey(strKey))<\/p>\n<p>{<\/p>\n<p>\/\/ CorpUser\uc758 user\uc5d0 \ucd94\uac00<\/p>\n<p>CorpUser clsDest = hmBuffer.get(strKey);<\/p>\n<p>clsDest.user.add(clsUser);<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>List&lt;CorpUser&gt; lstCorpUser = new ArrayList&lt;&gt;(hmBuffer.values());<\/p>\n<p>return ResponseEntity.ok(lstCorpUser);<\/p>\n<p>}<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>Controller \uc791\uc131<\/li>\n<\/ul>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td width=\"604\">&nbsp;<\/p>\n<p>@Controller<\/p>\n<p><strong>public<\/strong> <strong>class<\/strong> CorpUserController<\/p>\n<p>{<\/p>\n<p>@Autowired<\/p>\n<p>CorpUserService mClsService;<\/p>\n<p>&nbsp;<\/p>\n<p>@RequestMapping(value=&#8221;\/&#8221;)<\/p>\n<p><strong>public<\/strong> String index()<\/p>\n<p>{<\/p>\n<p><strong>return<\/strong> &#8220;index&#8221;;<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>@RequestMapping(value=&#8221;\/selectCorpData&#8221;)<\/p>\n<p><strong>public<\/strong> ResponseEntity&lt;?&gt; selectCorpData()<\/p>\n<p>{<\/p>\n<p><strong>return<\/strong> mClsService.selectCorpData();<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>@RequestMapping(value=&#8221;\/selectUserData&#8221;)<\/p>\n<p><strong>public<\/strong> ResponseEntity&lt;?&gt; selectUserData()<\/p>\n<p>{<\/p>\n<p><strong>return<\/strong> mClsService.selectUserData();<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>@RequestMapping(value=&#8221;\/selectCombineData&#8221;)<\/p>\n<p><strong>public<\/strong> ResponseEntity&lt;?&gt; selectCombineData()<\/p>\n<p>{<\/p>\n<p><strong>return<\/strong> mClsService.selectCombineData();<\/p>\n<p>}<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>JSP \ud30c\uc77c\uc791\uc131<\/li>\n<\/ul>\n<p>\uc704 Controller.java \uc5d0\uc11c \u201c\/\u201d\ub97c \uc785\ub825\ud558\uba74 index\ub97c \ud638\ucd9c\ud558\ub3c4\ub85d \ucf54\ub529 \ub418\uc5b4 \uc788\uae30 \ub54c\ubb38\uc5d0<\/p>\n<p>src\\main\\webapp\\jsp \uc5d0 index.jsp \ud30c\uc77c\uc744 \ub9cc\ub4e4\uace0 \uc0d8\ud50c\uc744 \ub9cc\ub4e4\uba74 \ub41c\ub2e4.<\/p>\n<p>Spring boot\uc5d0\uc11c static \ud30c\uc77c\uc758 \uc704\uce58\ub294 \u201csrc\\main\\resources\\static\u201d \uc774\ubbc0\ub85c Javascript,<\/p>\n<p>stylesheet, image \ub4f1\uc740 \uc774\uacf3\uc5d0 \ub123\uc5b4\ub450\uace0 \uc694\uccad\ud558\uba74 \ub41c\ub2e4.<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image035.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2188\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image035.png\" alt=\"\" width=\"292\" height=\"177\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\ucf54\ub529\uc774 \uc644\ub8cc\ub418\uba74 <a href=\"http:\/\/localhost:8080\/\">http:\/\/localhost:8080\/<\/a> \uc73c\ub85c \uc811\uc18d\ud558\uba74 \uc791\uc131\ub41c \ud654\uba74\uc744 \ubcfc\uc218 \uc788\ub2e4.<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image036.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2189\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image036.png\" alt=\"\" width=\"1600\" height=\"860\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h1><a name=\"_Toc53749190\"><\/a><strong>4.\u00a0\u00a0\u00a0 <\/strong>\uc2a4\uc6e8\uac70(Swagger)<\/h1>\n<p>API\uc5d0 \ub300\ud55c \ubb38\uc11c\ud654 \ubc0f \uc2dc\uac01\ud654\ub97c \uc704\ud55c \ud504\ub808\uc784\uc6cc\ud06c\ub85c, springfox \ub77c\uc774\ube0c\ub7ec\ub9ac\uc640 springdoc \ub77c\uc774\ube0c\ub7ec\ub9ac\uac00 \uc788\ub2e4. \uae30\uc874\uc5d0\ub294 springfox\ub97c \ub9ce\uc774 \uc0ac\uc6a9\ud558\uc5ec \ubb38\uc11c\ud654\ub97c \ud558\uc600\uc73c\ub098, OpenAPI 3.0 \uc9c0\uc6d0\uc774 \ub2a6\uace0 \uc624\ub958\uac00 \ub9ce\uc544 \ub098\uc911\uc744 \uc0dd\uac01\ud558\uc5ec springdoc\uc744 \uc0ac\uc6a9\ud558\uae30\ub85c \ud558\uc600\ub2e4.<\/p>\n<p>springdoc-openapi\uac00 \uc9c0\uc6d0\ud558\uace0 \uc788\ub294 \ud56d\ubaa9\uc740 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<ul>\n<li>OpenAPI 3<\/li>\n<li>Spring Boot(V1, V2)<\/li>\n<li>JSR-303(@NotNull, @Min, @Max, @Size)<\/li>\n<li>Swagger-ui<\/li>\n<li>OAuth 2<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h2><a name=\"_Toc53749191\"><\/a><strong>4.1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>\uc758\uc874\uc131 \ucd94\uac00(POM.xml)<\/h2>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td width=\"604\">&lt;dependency&gt;<\/p>\n<p>&lt;groupId&gt;org.springdoc&lt;\/groupId&gt;<\/p>\n<p>&lt;artifactId&gt;springdoc-openapi-ui&lt;\/artifactId&gt;<\/p>\n<p>&lt;version&gt;1.4.1&lt;\/version&gt;<\/p>\n<p>&lt;\/dependency&gt;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<h2><a name=\"_Toc53749192\"><\/a><strong>4.2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>\ud658\uacbd\uc124\uc815(SpringDocConfig.java)<\/h2>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td width=\"559\">@Configuration<\/p>\n<p><strong>public<\/strong> <strong>class<\/strong> SpringDocConfig<\/p>\n<p>{<\/p>\n<p>@Bean<\/p>\n<p><strong>public<\/strong> OpenAPI openAPI()<\/p>\n<p>{<\/p>\n<p><strong>return<\/strong> <strong>new<\/strong> OpenAPI().info(<strong>new<\/strong> Info().title(&#8220;\ud68c\uc0ac API&#8221;)<\/p>\n<p>.description(&#8220;\ud68c\uc0ac AOI\uc5d0 \ub300\ud55c \uc0d8\ud50c \uc785\ub2c8\ub2e4.&#8221;)<\/p>\n<p>.version(&#8220;v0.0.1&#8221;)<\/p>\n<p>.license(<strong>new<\/strong> License()<\/p>\n<p>.name(&#8220;Apache 2.0&#8221;).url(&#8220;http:\/\/springdoc.org&#8221;)));<\/p>\n<p>}<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2><a name=\"_Toc53749193\"><\/a><strong>4.3\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>Controller<\/h2>\n<ul>\n<li>Tag : \ud074\ub798\uc2a4\uc5d0 \ub300\ud55c \uc124\uba85<\/li>\n<li>Operation : \uba54\uc18c\ub4dc\uc5d0 \ub300\ud55c \uc124\uba85<\/li>\n<li>ApiResponses: API \uc751\ub2f5\uc5d0 \ub300\ud55c \uc124\uba85 \ubc0f \ub9ac\ud134 \ud074\ub798\uc2a4 \uba85\uc2dc<\/li>\n<li>Parameter : \uba54\uc18c\ub4dc\uc5d0 \ub300\ud55c \ud30c\ub77c\ubbf8\ud130 \uc124\uba85<\/li>\n<\/ul>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td width=\"604\">@RestController<\/p>\n<p>@RequestMapping(&#8220;\/api\/corp&#8221;)<\/p>\n<p><strong>@Tag(name=&#8221;CorpController&#8221;, description=&#8221;<\/strong><strong>\ud68c\uc0ac\uc815\ubcf4 \ucee8\ud2b8\ub864\ub7ec&#8221;)<\/strong><\/p>\n<p>public class CorpController<\/p>\n<p>{<\/p>\n<p>@Autowired<\/p>\n<p>private CorpService mClsService;<\/p>\n<p>&nbsp;<\/p>\n<p>@GetMapping(value = &#8220;findAll&#8221;)<\/p>\n<p><strong>@Operation(summary=&#8221;<\/strong><strong>\ud68c\uc0ac\uc815\ubcf4 \uac80\uc0c9&#8221;, description=&#8221;\ud68c\uc0ac\uc815\ubcf4\ub97c \uac80\uc0c9 \ud569\ub2c8\ub2e4.&#8221;)<\/strong><\/p>\n<p><strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @ApiResponses(value = { <\/strong><\/p>\n<p><strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @ApiResponse(responseCode = &#8220;200&#8221;, description = &#8220;<\/strong><strong>\ud68c\uc0ac\uc815\ubcf4\ub97c \ub9ac\ud134\ud55c\ub2e4.&#8221;, <\/strong><\/p>\n<p><strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 content= { @Content(schema = @Schema(implementation = CorpMast.class)) }<\/strong><\/p>\n<p><strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ),<\/strong><\/p>\n<p><strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 @ApiResponse(responseCode = &#8220;404&#8221;, description = &#8220;<\/strong><strong>\ud68c\uc0ac\uc815\ubcf4\ub97c \ucc3e\uc744\uc218 \uc5c6\uc2b5\ub2c8\ub2e4.&#8221;)<\/strong><\/p>\n<p><strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 })\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong><\/p>\n<p>public ResponseEntity&lt;?&gt; findAll<strong>(@Parameter(description=&#8221;<\/strong><strong>\uae30\ubcf8 \ud30c\ub77c\ubbf8\ud130 \uc815\ubcf4&#8221;)<\/strong><\/p>\n<p>@ModelAttribute final BaseParam clsParam) throws Exception<\/p>\n<p>{<\/p>\n<p>return ResponseEntity.ok(mClsService.findAll(clsParam));<\/p>\n<p>}<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<h2><a name=\"_Toc53749194\"><\/a><strong>4.4\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>Model<\/h2>\n<ul>\n<li>Schema : \ubaa8\ub378\uc758 \ud074\ub798\uc2a4 \ub610\ub294 \uba64\ubc84\ubcc0\uc218\uc5d0 \ub300\ud55c \uc124\uba85<\/li>\n<\/ul>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"1\">\n<tbody>\n<tr>\n<td width=\"604\">@Getter<\/p>\n<p>@Setter<\/p>\n<p><strong>@Schema(description=&#8221;\uae30\ubcf8 \ud30c\ub77c\ubbf8\ud130 \uc815\ubcf4&#8221;)<\/strong><\/p>\n<p>public class BaseParam implements Serializable<\/p>\n<p>{<\/p>\n<p>private static final long serialVersionUID = 1L;<\/p>\n<p>&nbsp;<\/p>\n<p>@Schema(description=&#8221;\uc18c\ud2b8&#8221;)<\/p>\n<p>public String sorts;<\/p>\n<p>&nbsp;<\/p>\n<p>@Schema(description=&#8221;\ud398\uc774\uc9c0NO&#8221;)<\/p>\n<p>public Integer pageNo;<\/p>\n<p>&nbsp;<\/p>\n<p>@Schema(description=&#8221;\ud398\uc774\uc9c0\uc0ac\uc774\uc988&#8221;)<\/p>\n<p>public Integer pageSize = 10;<\/p>\n<p>&nbsp;<\/p>\n<p><strong>@Schema(description=&#8221;<\/strong><strong>\ud68c\uc0acID&#8221;, example=&#8221;moramcnt&#8221;, required = true)<\/strong><\/p>\n<p>public String corpId;<\/p>\n<p>&nbsp;<\/p>\n<p>@Schema(description=&#8221;\uc0ac\uc6a9\uc790ID&#8221;)<\/p>\n<p>public String userId;<\/p>\n<p>&nbsp;<\/p>\n<p>@Schema(description=&#8221;\ud0c0\uc774\ud2c0&#8221;)<\/p>\n<p>public String title;<\/p>\n<p>&nbsp;<\/p>\n<p>@Schema(description=&#8221;\ud3ec\ub9f7&#8221;)<\/p>\n<p>public String format;<\/p>\n<p>&nbsp;<\/p>\n<p>@Schema(description=&#8221;\uae30\ud0c0 \ub370\uc774\ud130 \uc804\uc1a1&#8221;)<\/p>\n<p>public String data;<\/p>\n<p>&nbsp;<\/p>\n<p>@Schema(description=&#8221;\uac80\uc0c9 \uc870\uac74&#8221;)<\/p>\n<p>public String searchCondition;<\/p>\n<p>&nbsp;<\/p>\n<p>@Schema(description=&#8221;\uac80\uc0c9\uc5b4&#8221;)<\/p>\n<p>public String searchValue;<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<h2><a name=\"_Toc53749195\"><\/a><strong>4.5\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>swagger-ui<\/h2>\n<p><a href=\"http:\/\/localhost:5002\/swagger-ui.html\">http:\/\/localhost:5002\/swagger-ui.html<\/a> \uc73c\ub85c \uc811\uc18d\ud558\uc5ec \ud655\uc778<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image037.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2190\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image037.png\" alt=\"\" width=\"811\" height=\"436\" \/><\/a><\/p>\n<ul>\n<li>\uba54\uc18c\ub4dc \ud14c\uc2a4\ud2b8<\/li>\n<\/ul>\n<p>\u201c\/api\/corp\/findAll \ud68c\uc0ac\uc815\ubcf4 \uac80\uc0c9\u201d \uc744 \ud074\ub9ad\ud558\uc5ec \u201cTry it out\u201d\ubc84\ud2bc\uc744 \ud074\ub9ad \ud55c\ud6c4, \ud30c\ub77c\ubbf8\ud130 \ud56d\ubaa9\uc911 corpId\ub97c valuefactory\ub77c\uace0 \uc218\uc815\ud55c\ud6c4\uc5d0 execute \ubc84\ud2bc\uc744 \ud074\ub9ad\ud55c\ub2e4.<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image038.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2191\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image038.png\" alt=\"\" width=\"750\" height=\"253\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\ud074\ub9ad\ud6c4 \ud558\ub2e8\uc5d0\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 valuefactory\uc5d0 \ub300\ud55c \uacb0\uacfc\uac00 \ub098\ud0c0\ub098\uac8c \ub41c\ub2e4.<\/p>\n<p><a href=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image039.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2192\" src=\"http:\/\/blog.moramcnt.com\/wp-content\/uploads\/2022\/02\/image039.png\" alt=\"\" width=\"889\" height=\"362\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>1.\u00a0\u00a0\u00a0 \ubb38\uc11c \uac1c\uc694 &nbsp; 1.1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \ubb38\uc11c\uc758 \ubaa9\uc801 \ubcf8 \ubb38\uc11c\ub294 MSA \uae30\ubc18\uc758 API \uc0d8\ud50c \uc11c\ubc84, \uac8c\uc774\ud2b8\uc6e8\uc774 \uc11c\ubc84, \uc720\ub808\uce74 \uc11c\ubc84 \ub4f1\uc5d0 \ub300\ud55c \uad6c\ucd95 \uad00\ub828 \uc808\ucc28\uc5d0 \ub300\ud558\uc5ec \uae30\uc220\ud558\uace0 \uc788\ub2e4. 1.2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \uc2dc\uc2a4\ud15c \uad6c\uc131\ub3c4 \ubcf8 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \uad6c\ud604\ub418\uace0\uc790 \ud558\ub294 \uc2dc\uc2a4\ud15c \uad6c\uc131\ub3c4\uc774\ub2e4. &nbsp; &nbsp; 2.\u00a0\u00a0\u00a0 \uad00\ub828 \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158 \uc124\uce58 2.1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 JDK \uc124\uce58 JDK 1.8\uc774\uc0c1\uc73c\ub85c \ubcf8 \ubb38\uc11c\uc5d0\uc11c\ub294 64\ube44\ud2b8\uc6a9 JDK15\ub97c \uae30\uc900\uc73c\ub85c \ud55c\ub2e4. \ub2e4\uc6b4\ub85c\ub4dc URL : [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[6,2],"tags":[270,269,268],"class_list":["post-2152","post","type-post","status-publish","format-standard","hentry","category-java","category-2","tag-eureka","tag-gateway","tag-mas"],"_links":{"self":[{"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=\/wp\/v2\/posts\/2152","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2152"}],"version-history":[{"count":4,"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=\/wp\/v2\/posts\/2152\/revisions"}],"predecessor-version":[{"id":2194,"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=\/wp\/v2\/posts\/2152\/revisions\/2194"}],"wp:attachment":[{"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2152"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2152"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.moramcnt.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2152"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}