{"id":1646,"date":"2023-01-03T22:19:09","date_gmt":"2023-01-03T13:19:09","guid":{"rendered":"http:\/\/yoonhada.com\/?p=1646"},"modified":"2023-12-26T21:19:36","modified_gmt":"2023-12-26T12:19:36","slug":"%ed%81%b4%eb%a6%b0-%ec%95%84%ed%82%a4%ed%85%8d%ec%b2%98-net-core2%eb%b6%80-%ea%b5%ac%ed%98%84","status":"publish","type":"post","link":"http:\/\/yoonhada.com\/?p=1646","title":{"rendered":"\ud074\ub9b0 \uc544\ud0a4\ud14d\ucc98 .NET Core(2\ubd80: \uad6c\ud604)"},"content":{"rendered":"\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/700\/0*bfqz7CdZ6v4dCCgN.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">\uae68\ub057\ud55c \uc544\ud0a4\ud14d\ucc98 \uad8c\uc7a5 \uc0ac\ud56d\uc5d0 \ub530\ub77c \ube4c\ub4dc\ub41c \uacbd\uc6b0 ASP.NET Core \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \uc544\ud0a4\ud14d\ucc98\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ubcf4\uae30\uc785\ub2c8\ub2e4.&nbsp;\uc18c\uc2a4 \u2014&nbsp;<a href=\"https:\/\/docs.microsoft.com\/en-us\/dotnet\/architecture\/modern-web-apps-azure\/common-web-application-architectures\" rel=\"noreferrer noopener\" target=\"_blank\">\uc77c\ubc18\uc801\uc778 \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uc544\ud0a4\ud14d\ucc98<\/a><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"5505\"><a href=\"https:\/\/medium.com\/@nishancw\/clean-architecture-net-core-part-1-introduction-e70e1c49ef6\">\uc774\uc804 \uae30\uc0ac<\/a>&nbsp;\uc5d0 \ub530\ub77c&nbsp;\ud074\ub9b0 \uc544\ud0a4\ud14d\ucc98\uc758 \uae30\ubcf8 \uc0ac\ub840\ub97c \uc18c\uac1c\ud588\uc2b5\ub2c8\ub2e4.&nbsp;\uc774\uc81c \ub514\ub809\ud130\ub9ac \uad6c\uc870\ubd80\ud130 \uc2dc\uc791\ud558\uc5ec ASP.NET Core 3\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ube4c\ub4dc\ud560 \uac83\uc785\ub2c8\ub2e4.&nbsp;\uacc4\uc18d \uc9c4\ud589\ud558\uae30 \uc804\uc5d0 \ube60\ub978 \uc694\uc57d.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"a16c\">\uc694\uc57d<\/h1>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/700\/0*lwCWXSNctrUUYeLR.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"516e\">\uc774 \ub2e4\uc774\uc5b4\uadf8\ub7a8\uc5d0\uc11c \uc885\uc18d\uc131\uc740 \uac00\uc7a5 \uc548\ucabd \uc6d0\uc73c\ub85c \ud750\ub985\ub2c8\ub2e4.&nbsp;Application Core\ub294 \uc774 \ub2e4\uc774\uc5b4\uadf8\ub7a8\uc758 \ud575\uc2ec \uc704\uce58\uc5d0\uc11c \uc774\ub984\uc744 \ub530\uc654\uc2b5\ub2c8\ub2e4.&nbsp;\uadf8\ub9ac\uace0 \ub2e4\uc774\uc5b4\uadf8\ub7a8\uc5d0\uc11c Application Core\uac00 \ub2e4\ub978 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uacc4\uce35\uc5d0 \ub300\ud55c \uc885\uc18d\uc131\uc774 \uc5c6\uc74c\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.&nbsp;\uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \uc5d4\ud2f0\ud2f0\uc640 \uc778\ud130\ud398\uc774\uc2a4\ub294 \ubc14\ub85c \uadf8 \uc911\uc2ec\uc5d0 \uc788\uc2b5\ub2c8\ub2e4.&nbsp;\ubc14\ub85c \ubc14\uae65\uc5d0 \uc788\uc9c0\ub9cc \uc5ec\uc804\ud788 Application Core\uc5d0\ub294 \uc77c\ubc18\uc801\uc73c\ub85c \ub0b4\ubd80 \uc6d0\uc5d0 \uc815\uc758\ub41c \uc778\ud130\ud398\uc774\uc2a4\ub97c \uad6c\ud604\ud558\ub294 \ub3c4\uba54\uc778 \uc11c\ube44\uc2a4\uac00 \uc788\uc2b5\ub2c8\ub2e4.&nbsp;Application Core \uc678\ubd80\uc5d0\uc11c UI \ubc0f \uc778\ud504\ub77c \uacc4\uce35\uc740 \ubaa8\ub450 Application Core\uc5d0 \uc758\uc874\ud558\uc9c0\ub9cc \uc11c\ub85c \uc758\uc874\ud558\uc9c0\ub294 \uc54a\uc2b5\ub2c8\ub2e4(\ubc18\ub4dc\uc2dc).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"f601\">Application Core\ub294 \uc778\ud504\ub77c\uc5d0 \uc758\uc874\ud558\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0 \uc774 \uacc4\uce35\uc5d0 \ub300\ud55c \uc790\ub3d9\ud654\ub41c \ub2e8\uc704 \ud14c\uc2a4\ud2b8\ub97c \uc791\uc131\ud558\uae30\uac00 \ub9e4\uc6b0 \uc27d\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/700\/0*4Qhzb8L5ZxRIZkhF.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"beaf\">UI \uacc4\uce35\uc740 \uc778\ud504\ub77c \ud504\ub85c\uc81d\ud2b8\uc5d0 \uc815\uc758\ub41c \uc720\ud615\uc5d0 \ub300\ud55c \uc9c1\uc811\uc801\uc778 \uc885\uc18d\uc131\uc774 \uc5c6\uae30 \ub54c\ubb38\uc5d0 \ud14c\uc2a4\ud2b8\ub97c \uc6a9\uc774\ud558\uac8c \ud558\uac70\ub098 \ubcc0\ud654\ud558\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uc694\uad6c \uc0ac\ud56d\uc5d0 \ub300\ud55c \uc751\ub2f5\uc73c\ub85c \uad6c\ud604\uc744 \uad50\uccb4\ud558\ub294 \uac83\ub3c4 \ub9c8\ucc2c\uac00\uc9c0\ub85c \ub9e4\uc6b0 \uc27d\uc2b5\ub2c8\ub2e4.&nbsp;ASP.NET Core\uc758 \uc885\uc18d\uc131 \uc8fc\uc785\uc5d0 \ub300\ud55c \uae30\ubcf8 \uc81c\uacf5 \uc0ac\uc6a9 \ubc0f \uc9c0\uc6d0 \ub355\ubd84\uc5d0 \uc774 \uc544\ud0a4\ud14d\ucc98\ub294 \uc0ac\uc18c\ud558\uc9c0 \uc54a\uc740 \ubaa8\ub180\ub9ac\uc2dd \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uad6c\uc870\ud654\ud558\ub294 \uac00\uc7a5 \uc801\uc808\ud55c \ubc29\ubc95\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"c0af\">\uc804\uc81c \uc870\uac74<\/h1>\n\n\n\n<ol class=\"wp-block-list\">\n<li><a href=\"https:\/\/visualstudio.microsoft.com\/vs\/\" rel=\"noreferrer noopener\" target=\"_blank\">\ube44\uc8fc\uc5bc \uc2a4\ud29c\ub514\uc624<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/dotnet.microsoft.com\/download\/dotnet-core\" rel=\"noreferrer noopener\" target=\"_blank\">.NET Core SDK<\/a>&nbsp;(\uc0ac\uc6a9 \uc911\uc778 Visual Studio \ubc84\uc804\uc744 \uc9c0\uc6d0\ud558\ub294 SDK\ub97c \ucc3e\uc73c\uc138\uc694. \uc800\ub294 Visual Studio 2019 \ubc0f .NET Core 3.1\uc744 \uc0ac\uc6a9 \uc911\uc785\ub2c8\ub2e4.)<\/li>\n\n\n\n<li>.NET Core \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158, MVC, C#, SQL Server, \ub9c8\uc774\uadf8\ub808\uc774\uc158, ID, Entity Framework \ubc0f Visual Studio\uc5d0 \ub300\ud55c \uae30\ubcf8\uc801\uc778 \uc774\ud574<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"cff0\">Visual Studio 2017 \ub610\ub294 \uc774\uc804 \ubc84\uc804\uc744 \uc0ac\uc6a9 \uc911\uc778 \uacbd\uc6b0 .NET Core 2.1\uc774 \uc9c0\uc6d0\ub418\ub294 \ubc84\uc804\uc785\ub2c8\ub2e4.&nbsp;<a href=\"https:\/\/dotnet.microsoft.com\/download\/dotnet-core\/2.1\" rel=\"noreferrer noopener\" target=\"_blank\">\uc62c\ubc14\ub978 \ubc84\uc804 \ubc1b\uae30<\/a><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\" id=\"316c\"><strong>\uc774 \ubb38\uc11c\ub294 .NET Core\uac00 \uc544\ub2c8\ub77c Clean Architecture\ub97c \uc704\ud55c \ud504\ub85c\uc81d\ud2b8 \uad6c\uc870\ub97c \uc124\uc815\ud558\ub294 \ubc29\ubc95\uc5d0 \uad00\ud55c \uac83\uc785\ub2c8\ub2e4.<\/strong><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"c1e4\">\ud63c\ub780\uc744 \ud53c\ud558\uae30 \uc704\ud574 \uc774 \ud504\ub85c\uc81d\ud2b8\ub97c \ubcf5\uc81c\ud558\uace0 \ud504\ub85c\uc81d\ud2b8\ub97c \ud655\uc778\ud558\uc5ec \ub2e8\uacc4\ubcc4\ub85c \ubb38\uc11c\ub97c \uc77d\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/nishanc\/CleanArchitectureDemo\" rel=\"noreferrer noopener\" target=\"_blank\"><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a href=\"https:\/\/github.com\/nishanc\/CleanArchitectureDemo\" rel=\"noreferrer noopener\" target=\"_blank\">nishanc\/CleanArchitectureDemo<\/a><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/github.com\/nishanc\/CleanArchitectureDemo\" rel=\"noreferrer noopener\" target=\"_blank\">.NET Core Clean \uc544\ud0a4\ud14d\ucc98\ub97c \uae30\ubc18\uc73c\ub85c \uad6c\ucd95\ub41c \ub370\ubaa8 \ud504\ub85c\uc81d\ud2b8 &#8211; nishanc\/CleanArchitectureDemo<\/a><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/nishanc\/CleanArchitectureDemo\" rel=\"noreferrer noopener\" target=\"_blank\">github.com<\/a><\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"2b99\">\ub514\ub809\ud1a0\ub9ac \uad6c\uc870<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"8f08\">\ube48 \uc194\ub8e8\uc158\uc744 \ub9cc\ub4ed\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/700\/1*qrhnZDS8cBpY5wcCsyPksw.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">\ud30c\uc77c -&gt; \uc0c8\ub85c \ub9cc\ub4e4\uae30 -&gt; \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \ube48 \uc194\ub8e8\uc158 \ud504\ub85c\uc81d\ud2b8\ub97c \uac80\uc0c9\ud569\ub2c8\ub2e4.&nbsp;&#8216;\ube48 \uc194\ub8e8\uc158&#8217;\uc744 \uc120\ud0dd\ud558\uace0 &#8216;\ub2e4\uc74c&#8217;\uc744 \ud074\ub9ad\ud569\ub2c8\ub2e4.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/700\/1*u88nbDiQzPyvIfW_6RMSMw.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">\ud504\ub85c\uc81d\ud2b8 \uc774\ub984\uc744 \uc9c0\uc815\ud558\uace0 \uc704\uce58\ub97c \ucc3e\uc740 \ub2e4\uc74c &#8216;\ub9cc\ub4e4\uae30&#8217;\ub97c \ud074\ub9ad\ud569\ub2c8\ub2e4.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"bfb8\">\uc774\uc81c \uc194\ub8e8\uc158 \ud0d0\uc0c9\uae30\ub294 \ub2e4\uc74c\uacfc \uac19\uc544\uc57c \ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/348\/1*ZhAKrUOdiy4QMcNX1xHDMw.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"34c5\">\uc774\uc81c \uac1c\ubcc4 \ud504\ub85c\uc81d\ud2b8\ub97c \uc800\uc7a5\ud558\ub294 \ub370 \uc0ac\uc6a9\ud560 \ud3f4\ub354\ub97c \uc0dd\uc131\ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"4b1c\">\uc194\ub8e8\uc158 \ub0b4\uc5d0 \ub2e4\uc74c \ud3f4\ub354\ub97c \ub9cc\ub4dc\uc2ed\uc2dc\uc624. \uc774\uac83\uc740 \ub2e8\uc9c0 \uc81c\uc548\uc77c \ubfd0\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/676\/1*aagPXk5ayp26LUMOVLlg0Q.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">\uc194\ub8e8\uc158 -&gt; \ucd94\uac00 -&gt; \uc0c8 \uc194\ub8e8\uc158 \ud3f4\ub354\ub97c \ub9c8\uc6b0\uc2a4 \uc624\ub978\ucabd \ubc84\ud2bc\uc73c\ub85c \ud074\ub9ad\ud558\uc2ed\uc2dc\uc624.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/350\/1*lsndP6S-kqTG1_QhIimJNQ.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">\uc5ec\uae30\uc5d0 \ud45c\uc2dc\ub41c \ub300\ub85c \ud3f4\ub354\ub97c \ub9cc\ub4ed\ub2c8\ub2e4.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"4531\"><strong>\uc560\ud50c\ub9ac\ucf00\uc774\uc158<\/strong>&nbsp;\uc740 \uc778\ud130\ud398\uc774\uc2a4, \uc11c\ube44\uc2a4, \ube44\uc988\ub2c8\uc2a4 \uaddc\uce59\uc744 \uad00\ub9ac\ud569\ub2c8\ub2e4.&nbsp;<strong>\ub3c4\uba54\uc778<\/strong>&nbsp;\uc740 \uc5d4\ud2f0\ud2f0\ub85c \uad6c\uc131\ub418\uba70&nbsp;<strong>\ub370\uc774\ud130\ub294 \ub370\uc774\ud130<\/strong>&nbsp;\uc5d0 \uc561\uc138\uc2a4\ud558\ub294 \ubc29\ubc95\uc744 \uc54c\uace0&nbsp;<strong>IoC<\/strong>&nbsp;(Inversion of Control)\ub294 \uc885\uc18d\uc131 \uc8fc\uc785\uc5d0 \ub3c4\uc6c0\uc774 \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"b017\">\uc0ac\uc6a9\uc790 \uc778\ud130\ud398\uc774\uc2a4<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"b063\">UI.MVC \ud3f4\ub354 \uc544\ub798\uc5d0 MVC \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc0dd\uc131\ud574 \ubd05\uc2dc\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/598\/1*l4xUDW8wrjyc5tdLfpA8Qg.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">&#8220;CleanArchitecture.UI.MVC&#8221;\ub97c \ub9c8\uc6b0\uc2a4 \uc624\ub978\ucabd \ubc84\ud2bc\uc73c\ub85c \ud074\ub9ad -&gt; \ucd94\uac00 -&gt; \uc0c8 \ud504\ub85c\uc81d\ud2b8<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/700\/1*WhPV2k8QtGVuRbH1DDKowg.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\"><strong>ASP.NET Core \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158<\/strong>&nbsp;\uc744 \uc120\ud0dd&nbsp;\ud569\ub2c8\ub2e4.&nbsp;( \uc774 \ud504\ub85c\uc81d\ud2b8 \uc720\ud615\uc774 \ud45c\uc2dc\ub418\uc9c0 \uc54a\uc73c\uba74 \uc774&nbsp;<a href=\"https:\/\/stackoverflow.com\/questions\/55032756\/asp-net-core-3-0-not-showing-on-visual-studio-2019\" rel=\"noreferrer noopener\" target=\"_blank\">stackoverflow \uc9c8\ubb38<\/a>&nbsp;\uc744 \ub530\ub974\uc2ed\uc2dc\uc624 .)<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"228f\">\ub3d9\uc77c\ud55c \uba85\uba85 \uaddc\uce59\uc5d0 \ub530\ub77c \ud504\ub85c\uc81d\ud2b8 \uc774\ub984\uc744 &#8216;CleanArchitecture.MVC&#8217;\ub85c \uc9c0\uc815\ud558\uace0 &#8216;\ub9cc\ub4e4\uae30&#8217;\ub97c \ub204\ub985\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/700\/1*ioFiOYJwyubMO3yj6w3MBg.png\" alt=\"\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/700\/1*85A_nR5Skx0eflPZWytk5w.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\"><strong>\uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158(Model-View-Controller)<\/strong>&nbsp;\uc744 \uc120\ud0dd&nbsp;\ud558\uace0 \uc778\uc99d\uc744 &#8216;&nbsp;<strong>\uac1c\ubcc4 \uc0ac\uc6a9\uc790 \uacc4\uc815<\/strong>&nbsp;&#8216; \uc73c\ub85c \ubcc0\uacbd\ud569\ub2c8\ub2e4.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ea6e\">\uc774\ub807\uac8c \ud558\uba74 \uc0c8 \ud504\ub85c\uc81d\ud2b8\uac00 \uc0dd\uc131\ub418\uace0 \uc77c\ubd80 \ucf54\ub4dc\uac00 \uc2a4\uce90\ud3f4\ub529\ub429\ub2c8\ub2e4.&nbsp;\ud074\ub9b0 \uc544\ud0a4\ud14d\ucc98 \uc811\uadfc \ubc29\uc2dd\uc744 \ucde8\ud558\uace0 \uc788\uc73c\ubbc0\ub85c \ub098\uc911\uc5d0 \ubaa8\ub378\uc744 \ub098\uc911\uc5d0 \uc5d4\ud130\ud2f0\ub85c \uc62e\uae38 \uac83\uc785\ub2c8\ub2e4.&nbsp;\uc644\ub8cc\ub418\uba74 SQL Server \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \uac00\ub9ac\ud0a4\ub3c4\ub85d \uc5f0\uacb0 \ubb38\uc790\uc5f4\uc744 \ube60\ub974\uac8c \ubcc0\uacbd\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.&nbsp;(SQL Server\uac00 \uc124\uce58\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc740 \uacbd\uc6b0 \uc5ec\uae30\uc5d0\uc11c \uac1c\ubc1c\uc790 \ubc84\uc804\uc744 \ub2e4\uc6b4\ub85c\ub4dc\ud558\uace0 \uc5ec\uae30\uc5d0\uc11c SQL Server Management Studio\ub97c&nbsp;<a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/ssms\/download-sql-server-management-studio-ssms\" rel=\"noreferrer noopener\" target=\"_blank\">\ub2e4\uc6b4\ub85c\ub4dc&nbsp;<\/a><strong>\ud558\ub294<\/strong>&nbsp;\uac83\uc774&nbsp;<a href=\"https:\/\/www.microsoft.com\/en-us\/sql-server\/sql-server-downloads\" rel=\"noreferrer noopener\" target=\"_blank\">\uc88b\uc2b5\ub2c8\ub2e4<\/a>&nbsp;.&nbsp;)<a href=\"https:\/\/docs.microsoft.com\/en-us\/sql\/ssms\/download-sql-server-management-studio-ssms\" rel=\"noreferrer noopener\" target=\"_blank\"><\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"f40b\">\ub85c \uc774\ub3d9 \ud558\uc5ec \uc11c\ubc84\ub97c \uac00\ub9ac\ud0a4\ub3c4\ub85d \uc5f0\uacb0 \ubb38\uc790\uc5f4\uc744 \ubcc0\uacbd\ud569\ub2c8\ub2e4.&nbsp;<strong>Demo<\/strong><code>appsettings.json<\/code>&nbsp;\ub77c\ub294 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \ub9cc\ub4ed\ub2c8\ub2e4&nbsp;.<strong><\/strong><\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/nishanc.medium.com\/media\/5d0aa99af02a57b8fae94a0531404a36\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"4aa8\">\ub9c8\uc774\uadf8\ub808\uc774\uc158\uc744 \uc0ac\uc6a9\ud558\uc5ec ID \ubaa8\ub378 \ud074\ub798\uc2a4\ub85c \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \uc5c5\ub370\uc774\ud2b8\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.&nbsp;\ud328\ud0a4\uc9c0 \uad00\ub9ac\uc790 \ucf58\uc194(\ub3c4\uad6c -&gt; NuGet \ud328\ud0a4\uc9c0 \uad00\ub9ac\uc790 -&gt; \ud328\ud0a4\uc9c0 \uad00\ub9ac\uc790 \ucf58\uc194)\uc744 \uc5f4\uace0 \ub2e4\uc74c\uc744 \uc785\ub825\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">add-migration \"InitialMigration\" -Context ApplicationDbContext<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"5166\">\ub098\uc911\uc5d0 \ub2e4\ub978 \uc5d4\ud130\ud2f0\uc5d0 \ub300\ud574 \ub2e4\ub978 DbContext\ub97c \uac16\uac8c&nbsp;<strong>\ub418\ubbc0\ub85c<\/strong>&nbsp;\uc5ec\uae30\uc5d0 DbContext \ud074\ub798\uc2a4 \uc774\ub984\uc744 \uc9c0\uc815\ud588\uc2b5\ub2c8\ub2e4 .&nbsp;\uc774 \uba85\ub839\uc740 &#8220;InitialMigration&#8221;\uc774\ub77c\ub294 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4. \ube44\uc5b4 \uc788\ub294 \uac83\ucc98\ub7fc \ubcf4\uc774\uc9c0\ub9cc \uc6d0\ud558\ub294 ID \ud14c\uc774\ube14 \uc138\ud2b8\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/700\/1*p8-4skZHjRuuGtzhurqVEw.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"334a\">\uc6d0\ud558\ub294 \uacbd\uc6b0 ID \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc744 \uc704\ud55c \ub2e4\ub978 \ud504\ub85c\uc81d\ud2b8\ub3c4 \uac00\uc9c8 \uc218 \uc788\uc2b5\ub2c8\ub2e4.&nbsp;MVC \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \ud575\uc2ec \uc5d4\ud130\ud2f0\ub97c \uc774\ub3d9\ud558\uc5ec \uc774\ub97c \uc218\ud589\ud558\ub294 \ubc29\ubc95\uc744 \ubcf4\uc5ec \ub4dc\ub9ac\uaca0\uc2b5\ub2c8\ub2e4.&nbsp;\uadf8\ub7ec\ub098 \uba3c\uc800 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc744 \uc0dd\uc131\ud55c \ud6c4 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \uc5c5\ub370\uc774\ud2b8\ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\ub370\uc774\ud130\ubca0\uc774\uc2a4 \uac31\uc2e0<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"f7d4\">\uc644\ub8cc\ub418\uba74 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \uc0c8\ub85c\uc6b4 \ud14c\uc774\ube14 \uc9d1\ud569\uc774 \uc788\ub294 \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/311\/1*tnnIVdv49Q1l44oKV8xhWw.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"a19c\">\uc774 \uc2dc\uc810\uc5d0\uc11c slandered toolbar\uc5d0\uc11c \uc2dc\uc791 \ud504\ub85c\ud544\uc744 &#8216;CleanArchitecture.MVC&#8217;\ub85c \ubcc0\uacbd\ud558\uc5ec \uc774 \ud504\ub85c\uc81d\ud2b8\ub97c \uc2e4\ud589\ud558\uace0 \uc0c8 \uc0ac\uc6a9\uc790\ub97c \ub4f1\ub85d\ud558\uace0 \uc791\ub3d9\ud558\ub294\uc9c0 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/289\/1*qDO1UgK6SY_0_mwc1ZWa9g.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"c734\">\uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ubc18\uc601\ud558\ub3c4\ub85d \uc194\ub8e8\uc158 \ud3f4\ub354\uc758 \uc774\ub984\uc744 \ubc14\uafc0 \uc218 \uc788\ub2e4\ub294 \uc810\uc744 \uc9c0\uc801\ud558\uace0 \uc2f6\uc2b5\ub2c8\ub2e4. \uc81c \uc774\ub984 \uc9c0\uc815 \ubc29\uc2dd\uc744 \ub530\ub97c \ud544\uc694\ub294 \uc5c6\uc9c0\ub9cc \ubb3c\ub860 \uae68\ub057\ud55c \uc544\ud0a4\ud14d\ucc98\ub97c \uace0\uc218\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"2afb\">\ub3c4\uba54\uc778<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"185e\">\ud575\uc2ec \uc5d4\ud130\ud2f0\ub97c \ubcf4\uc720\ud560 \ub3c4\uba54\uc778 \uacc4\uce35\uc5d0 \ud074\ub798\uc2a4 \ub77c\uc774\ube0c\ub7ec\ub9ac \ud504\ub85c\uc81d\ud2b8\ub97c \ucd94\uac00\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/700\/1*F_8CK1Z-5R2N8Vr1klvt2A.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\"><strong>\ud074\ub798\uc2a4 \ub77c\uc774\ube0c\ub7ec\ub9ac<\/strong>&nbsp;\uc120\ud0dd (.NET Core)<strong><\/strong><\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/349\/1*T5TbHgAV97fHJgK_PHCMXg.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\"><strong>\ub3c4\uba54\uc778<\/strong>&nbsp;\uc811\ubbf8\uc0ac&nbsp;\ub85c \uc774\ub984 \uc9c0\uc815<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ce37\"><strong>Class1.cs<\/strong>&nbsp;\ub97c \uc81c\uac70&nbsp;\ud558\uace0 \uc0c8 \ud3f4\ub354&nbsp;<strong>Models<\/strong>&nbsp;(\ub610\ub294 Entities)\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4. \uc774 \uae30\uc0ac\uc5d0\uc11c\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac \uc2dc\uc2a4\ud15c\uc744 \uad6c\ucd95\ud55c\ub2e4\uace0 \uac00\uc815 \ud558\uace0 Models \ud3f4\ub354\uc5d0&nbsp;<strong>Book<\/strong>&nbsp;\ubaa8\ub378\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/530\/1*y0ogfBrf-4Xfx9-BwNQt3g.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">\ub9c8\uc6b0\uc2a4 \uc624\ub978\ucabd \ubc84\ud2bc -&gt; \ucd94\uac00 -&gt; \ud074\ub798\uc2a4\ub97c \ud074\ub9ad\ud558\uace0 \uc774\ub984\uc744&nbsp;<strong>Book \uc73c\ub85c \uc9c0\uc815\ud558\uace0&nbsp;<\/strong><strong>\ucd94\uac00<\/strong>&nbsp;\ub97c \ud074\ub9ad&nbsp;\ud569\ub2c8\ub2e4.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"f1f7\">\uc5d4\ud130\ud2f0\uc5d0 \uc6d0\ud558\ub294 \uc18d\uc131\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/nishanc.medium.com\/media\/2ec0215f5b2eeeb47d4575ead6421cbd\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ef23\">\uc218\uc5c5\uc744&nbsp;<strong>\uacf5\uac1c\ud588\uc2b5\ub2c8\ub2e4.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"f4f3\">\uc774\uc81c \uc774 \uc0c8 \ubaa8\ub378\ub85c \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \uc5c5\ub370\uc774\ud2b8\ud560 \uc218 \uc788\ub3c4\ub85d \uc0c8 \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ucee8\ud14d\uc2a4\ud2b8\ub97c \ub9cc\ub4e4\uc5b4 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.&nbsp;<strong>\uc778\ud504\ub77c<\/strong>&nbsp;\uacc4\uce35&nbsp;\uc5d0\uc11c \uc218\ud589\ud560 \uac83\uc785\ub2c8\ub2e4 .&nbsp;<strong>Infrastructure.Data<\/strong>&nbsp;\uc544\ub798 \uc5d0&nbsp;<strong>CleanArchitecture.Infra.Data<\/strong>&nbsp;\ub77c\ub294 \uc0c8 \ud074\ub798\uc2a4 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ucd94\uac00&nbsp;\ud558\uace0 \ud574\ub2f9 \ud3f4\ub354 \uc544\ub798\uc5d0&nbsp;<strong>Context<\/strong>&nbsp;\ub97c \ucd94\uac00 \ud569\ub2c8\ub2e4.&nbsp;<strong>\ub2e4\uc74c\uc73c\ub85c LibraryDbContext<\/strong>&nbsp;\ub77c\ub294 \ud074\ub798\uc2a4\ub97c \ub9cc\ub4ed\ub2c8\ub2e4 .<strong><\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/349\/1*5xjIu-CkRJI2NG5C2pDzgg.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"5b12\">\uacc4\uc18d\ud574\uc11c \uc774 \ud504\ub85c\uc81d\ud2b8\ub97c \uad6c\uc131\ud558\ub294 \ub370 \ud544\uc694\ud55c \ud328\ud0a4\uc9c0\ub97c \ucd94\uac00\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.&nbsp;\ud558\uc9c0\ub9cc \uadf8 \uc804\uc5d0 \ud328\ud0a4\uc9c0 \uad00\ub9ac\uc790 \ucf58\uc194\uc5d0\uc11c&nbsp;<code>dotnet restore<\/code>\uc9c0\uae08\uae4c\uc9c0 \uac00\uc9c0\uace0 \uc788\ub294 3\uac1c\uc758 \ud504\ub85c\uc81d\ud2b8\ub97c \ubaa8\ub450 \uc2e4\ud589\ud569\ub2c8\ub2e4.&nbsp;\uadf8\ub7f0 \ub2e4\uc74c&nbsp;<strong>Build -&gt; Rebuild Solution \uc744 \uc218\ud589\ud558\uc2ed\uc2dc\uc624.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/671\/1*cxwdkWUrTeblvd8yZw7WpA.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"e821\"><strong>CleanArchitecture.Infra.Data \uc758&nbsp;<\/strong><strong>\uc885\uc18d\uc131<\/strong>&nbsp;\uc744&nbsp;\ub9c8\uc6b0\uc2a4 \uc624\ub978\ucabd \ub2e8\ucd94\ub85c \ud074\ub9ad\ud558\uace0&nbsp;<strong>NuGet \ud328\ud0a4\uc9c0 \uad00\ub9ac<\/strong>&nbsp;\ub97c \uc120\ud0dd \ud558\uc2ed\uc2dc\uc624&nbsp;.&nbsp;\uadf8\ub7f0 \ub2e4\uc74c \ucc3e\uc544\ubcf4\uae30 \ud0ed\uc744 \ud074\ub9ad\ud558\uace0 \uc124\uce58\ud558\uc2ed\uc2dc\uc624.<strong><\/strong><strong><\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Microsoft.EntityFrameworkCore <br>Microsoft.EntityFrameworkCore.Design <br>Microsoft.EntityFrameworkCore.SqlServer <br>Microsoft.EntityFrameworkCore.Tools<\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\" id=\"61f9\"><strong>\ubaa8\ub450 \uc548\uc815\uc801\uc778 \ubc84\uc804(\ubbf8\ub9ac\ubcf4\uae30\uac00 \uc544\ub2d8)\uc774\uace0 \ub3d9\uc77c\ud55c \ubc84\uc804\uc778\uc9c0 \ud655\uc778\ud558\uc138\uc694.<\/strong><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"6941\"><strong>\uc774\uc81c Microsoft.EntityFrameworkCore<\/strong>&nbsp;\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 DbContext\uc5d0\uc11c LibraryDbContext\ub97c \uc0c1\uc18d\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4&nbsp;.&nbsp;<strong>CleanArchitecture.Domain.Models \uc5d0\uc11c<\/strong>&nbsp;\uc81c\uacf5\ud558\ub294 Book \uc5d4\ud130\ud2f0\ub97c \ucc38\uc870\ud558\uace0 \uc788\uc74c\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4 .&nbsp;<strong>LibraryDbContext<\/strong>&nbsp;\uc5d0 \ub2e4\uc74c \ucf58\ud150\uce20\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4.<strong><\/strong><\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/nishanc.medium.com\/media\/fe17133abc36b71be5c732b1f942b09c\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"1602\">MVC \ud504\ub85c\uc81d\ud2b8\uc758 Startup.cs\uc5d0\uc11c \uc774 \uc0c8 DbContext\ub97c \uad6c\uc131\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.&nbsp;<strong>ConfigureServices<\/strong>&nbsp;\uba54\uc11c\ub4dc&nbsp;\uc5d0 \ub2e4\uc74c \uc904\uc744 \ucd94\uac00 \ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/nishanc.medium.com\/media\/4709b932ead0f3ff94eb72ebc451f9b6\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"b1e8\">LibraryConnection \uc5f0\uacb0 \ubb38\uc790\uc5f4\uc744&nbsp;<strong>\ud655\uc778<\/strong>&nbsp;\ud558\uc5ec appsettings.json\uc5d0 \ucd94\uac00\ud574\uc57c \ud569\ub2c8\ub2e4.&nbsp;\uc774 \uc0c8 \uc5f0\uacb0 \ubb38\uc790\uc5f4\uc740 \ub3c4\uba54\uc778 \uc5d4\ud130\ud2f0\ub97c \uc800\uc7a5\ud560 \ub2e4\ub978 \ub370\uc774\ud130\ubca0\uc774\uc2a4\ub97c \uac00\ub9ac\ud0b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\"ConnectionStrings\": { <br>    \"DefaultConnection\": \"Server=.;Database=Demo;Trusted_Connection=True;MultipleActiveResultSets=true\", <br>    \"LibraryConnection\": \"Server=.;Database=Library;Trusted_Connection=True;MultipleActiveResultSets=true\" <br>}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"e3fd\">\uc644\ub8cc\ub418\uba74&nbsp;<strong>LibraryDbContext<\/strong><code>add-migration<\/code>&nbsp;\uc5d0 \ub300\ud574 \uc2e4\ud589\ud569\ub2c8\ub2e4.<strong><\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/671\/1*VZ3CVAZHSb313MVycKoXBw.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\"><strong>CleanArchitecture.Infra.Data<\/strong>&nbsp;\ub97c \uae30\ubcf8 \ud504\ub85c\uc81d\ud2b8\ub85c&nbsp;\uc120\ud0dd\ud588\ub294\uc9c0 \ud655\uc778\ud558\uc2ed\uc2dc\uc624 .<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"55be\">\uc774\ub807\uac8c \ud558\uba74 \uc778\ud504\ub77c \uc544\ub798\uc5d0 \uc0c8\ub85c\uc6b4 \ub9c8\uc774\uadf8\ub808\uc774\uc158\uc774 \uc0dd\uc131\ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/503\/1*rWfEitmWCeSB0XaSCxth4w.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ce80\">\ub2e4\uc74c\uc744 \uc0ac\uc6a9\ud558\uc5ec \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uc5c5\ub370\uc774\ud2b8,<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">\uc5c5\ub370\uc774\ud2b8 \ub370\uc774\ud130\ubca0\uc774\uc2a4 -Context LibraryDbContext<\/pre>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"85f7\">\uc560\ud50c\ub9ac\ucf00\uc774\uc158 \ucf54\uc5b4<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"d144\">\ubaa8\ub4e0 \uc11c\ube44\uc2a4, \uc778\ud130\ud398\uc774\uc2a4 \ubc0f ViewModel\uc774 \uc5ec\uae30\ub85c \uc774\ub3d9\ud569\ub2c8\ub2e4.&nbsp;\uc774\uc804 \ub2e8\uacc4\uc640 \ub9c8\ucc2c\uac00\uc9c0\ub85c &#8216;&nbsp;<strong>CleanArchitectureDemo.Application<\/strong>&nbsp;&#8216; \ud3f4\ub354 \uc544\ub798\uc5d0 CleanArchitecture.Application\uc774\ub77c\ub294&nbsp;<strong>\uc0c8<\/strong>&nbsp;\ud074\ub798\uc2a4 \ub77c\uc774\ube0c\ub7ec\ub9ac(.NET Core) \ub97c \ub9cc\ub4e4\uace0 \ub2e4\uc74c\uacfc \uac19\uc774 \ud574\ub2f9 \ud3f4\ub354\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/348\/1*XkDzuy34WTI1VhebidK43A.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"9b99\">\uc774\uc81c ViewModel\uc5d0 \ub300\ud574 \uc791\uc5c5\ud558\uaca0\uc2b5\ub2c8\ub2e4. A&nbsp;<code>view model<\/code>\ub294 \uc815\uc801 \ud14d\uc2a4\ud2b8\uc5d0 \uc0ac\uc6a9\ub418\ub4e0 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \ucd94\uac00(\ub610\ub294 \ud3b8\uc9d1 \uac00\ub2a5)\ud560 \u200b\u200b\uc218 \uc788\ub294 \uc785\ub825 \uac12(\ud14d\uc2a4\ud2b8 \uc0c1\uc790 \ubc0f \ub4dc\ub86d\ub2e4\uc6b4 \ubaa9\ub85d\uacfc \uac19\uc740)\uc5d0 \uc0ac\uc6a9\ub418\ub4e0 \ubcf4\uae30\/\ud398\uc774\uc9c0\uc5d0 \ud45c\uc2dc\ud558\ub824\ub294 \ub370\uc774\ud130\ub97c \ub098\ud0c0\ub0c5\ub2c8\ub2e4. ).&nbsp;\uadf8\uac83\uc740 \ub2f9\uc2e0\uc758&nbsp;<code>domain model<\/code>.&nbsp;\ubdf0\ub97c \uc704\ud55c \ubaa8\ub378\uc785\ub2c8\ub2e4.&nbsp;\uc989, \ub3c4\uba54\uc778 \ubaa8\ub378\uc5d0 \ub300\ud55c \ub9c8\uc2a4\ud06c\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"9404\">BookViewModel \uc774\ub77c\ub294 ViewModels \ud3f4\ub354 \uc544\ub798\uc5d0 \uc0c8 \ud074\ub798\uc2a4\ub97c \ub9cc\ub4ed\ub2c8\ub2e4&nbsp;<strong>.&nbsp;<\/strong>\ub2f9\ubd84\uac04 \uc6b0\ub9ac\ub294 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c \ucc45 \ubaa9\ub85d\uc744 \uc5bb\uc744 \uac83\uc785\ub2c8\ub2e4.&nbsp;<strong>BookViewModel.cs<\/strong>&nbsp;\uc5d0 \ub2e4\uc74c \ucf54\ub4dc\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4 .&nbsp;<strong>CleanArchitecture.Domain.Models \uc5d0\uc11c&nbsp;<\/strong><strong>\ucc45<\/strong>&nbsp;\uc744&nbsp;\uac00\uc838\uc624\uace0 \uc788\uc74c\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4 .<strong><\/strong><\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/nishanc.medium.com\/media\/579e240626cd602f65b810d90bb5f531\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"bf4e\">\uad6c\ud604\ud558\ub824\ub294 \uae30\ub2a5\uc5d0 \ub300\ud55c \uacc4\uc57d \uc5ed\ud560\uc744 \ud560 \uc0c8 \uc778\ud130\ud398\uc774\uc2a4\ub97c \ub9cc\ub4ed\ub2c8\ub2e4.&nbsp;\ub098\ub294 \ub2f9\uc2e0\uc774 \uc778\ud130\ud398\uc774\uc2a4\uc5d0 \ub300\ud574 \uc798 \uc54c\uace0 \uc788\uae30\ub97c \ubc14\ub77c\uba70 OOP\uc5d0\uc11c \uc778\ud130\ud398\uc774\uc2a4\ub97c \ub9cc\ub4dc\ub294 \uc774\uc720\ub294 \uc774 \uae30\uc0ac\uc758 \ubc94\uc704\ub97c \ubc97\uc5b4\ub098\uae30 \ub54c\ubb38\uc5d0 \uc5ec\uae30\uc5d0\uc11c \ub17c\uc758\ud558\uc9c0 \uc54a\uc744 \uac83\uc785\ub2c8\ub2e4.&nbsp;<strong>Interfaces<\/strong>&nbsp;\ud3f4\ub354\uc5d0\uc11c \uc0c8&nbsp;\uc778\ud130\ud398\uc774\uc2a4&nbsp;<strong>\ub97c<\/strong>&nbsp;\ub9cc\ub4ed\ub2c8\ub2e4 .<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/700\/1*uh_77HfPsw22CQ9MMq-RTg.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"f876\">\uc774\ub984,&nbsp;<strong>IBookService.cs<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/nishanc.medium.com\/media\/6be49239458378bc1aca0204f9a527b2\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"06c6\">\uad6c\ud604\ub420 \ub54c \uc774 \uba54\uc11c\ub4dc\ub294 \ucc45 \ubaa9\ub85d\uc744 \ubc18\ud658\ud558\uace0 ViewModel\uc5d0 \ub300\ud574\uc11c\ub9cc \uc54c\uace0 \ud575\uc2ec \ub3c4\uba54\uc778 \ubaa8\ub378\uc778 Book\uc5d0 \ub300\ud574\uc11c\ub294 \uc54c\uc9c0 \ubabb\ud558\ubbc0\ub85c \ubaa8\ub4e0 \uac83\uc744 \ud55c \uacf3\uc5d0 \ub450\ub294 \ub300\uc2e0 \uc774\ub807\uac8c \ud558\uc5ec \ud575\uc2ec \uc5d4\ud130\ud2f0\ub97c \ucd94\uc0c1\ud654\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"4904\">IBookService\uc5d0 \ub300\ud55c \uad6c\ud604\uc744 \uc791\uc131\ud558\uae30 \uc804\uc5d0 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c \ub370\uc774\ud130\ub97c \uac00\uc838\uc624\ub294 \ubc29\ubc95\uc744 \uc815\uc758\ud574\uc57c \ud569\ub2c8\ub2e4. \uc774\ub97c \uc704\ud574 \uc77c\ubc18\uc801\uc73c\ub85c .NET\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub294 \uac83\uc740 Entity Framework\ub77c\ub294 ORM\uc774\uc9c0\ub9cc&nbsp;<strong>\uc800\uc7a5\uc18c \ud328\ud134<\/strong>&nbsp;\uc744 \uc0ac\uc6a9\ud558\uc5ec \ube44\uc988\ub2c8\uc2a4\ub97c \ubd84\ub9ac\ud569\ub2c8\ub2e4. \uc751\uc6a9 \ud504\ub85c\uadf8\ub7a8\uc758 \ub17c\ub9ac \ubc0f \ub370\uc774\ud130 \uc561\uc138\uc2a4 \uacc4\uce35.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\" id=\"b039\"><strong><em>C#\uc758 \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac \ub514\uc790\uc778 \ud328\ud134\uc740 \ub3c4\uba54\uc778 \uac1c\uccb4\uc5d0 \uc561\uc138\uc2a4\ud558\uae30 \uc704\ud574 \uceec\ub809\uc158\uacfc \uac19\uc740 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub3c4\uba54\uc778\uacfc \ub370\uc774\ud130 \ub9e4\ud551 \uacc4\uce35 \uc0ac\uc774\ub97c \uc911\uc7ac\ud569\ub2c8\ub2e4.&nbsp;\uc989, \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac \ub514\uc790\uc778 \ud328\ud134\uc740 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \ub098\uba38\uc9c0 \ubd80\ubd84\uacfc \ub370\uc774\ud130 \uc561\uc138\uc2a4 \ub17c\ub9ac \uc0ac\uc774\uc5d0\uc11c \uc911\uac1c\uc790 \ub610\ub294 \uc911\uac04 \uacc4\uce35 \uc5ed\ud560\uc744 \ud55c\ub2e4\uace0 \ub9d0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/em><\/strong><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"a0c9\"><strong>CleanArchitecture.Domain<\/strong>&nbsp;\ud504\ub85c\uc81d\ud2b8&nbsp;\uc544\ub798\uc5d0 Interfaces\ub77c\ub294 \ub2e4\ub978 \ud3f4\ub354\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4 .&nbsp;<strong>IBookRepository.cs<\/strong>&nbsp;\ub77c\ub294 \uc0c8 \uc778\ud130\ud398\uc774\uc2a4\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4.<strong><\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/347\/1*5BKcU99_YiNKgr1kmCjJFA.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">\uc774 \uc2dc\uc810\uc5d0\uc11c \uc6b0\ub9ac \ud504\ub85c\uc81d\ud2b8\ub294 \ub2e4\uc74c\uacfc \uac19\uc544\uc57c \ud569\ub2c8\ub2e4.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"b380\">\ub2e4\uc74c \uba54\uc11c\ub4dc\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4. \uc774\ubc88\uc5d0\ub294 ViewModel\uc774 \uc544\ub2c8\ub77c \ub3c4\uba54\uc778 \uc5d4\ud130\ud2f0 \uc790\uccb4\uc778 Book\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/nishanc.medium.com\/media\/9d1355c233166b1613a1d855163b8ec8\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"4c6f\">\uc88b\uc2b5\ub2c8\ub2e4. \uc774 \uc2dc\uc810\uc5d0\uc11c MVC \ud504\ub85c\uc81d\ud2b8 \ub610\ub294&nbsp;<strong>Presentation Layer( \ub3c4\uba54\uc778 \uc5d4\ud130\ud2f0&nbsp;<\/strong><strong>Book<\/strong>&nbsp;\uc5d0 \ub300\ud574 \uc804\ud600 \ubaa8\ub974\ub294 )&nbsp;\uac00 &#8220;\uc774\ubd10, \ucc45 \ubaa9\ub85d\uc744 \uc6d0\ud574\uc694!&#8221;\ub77c\uace0 \ub9d0\ud558\uba74&nbsp;<strong>BookService<\/strong>&nbsp;(\uc6b0\ub9ac\uac00&nbsp;<strong>IBookService<\/strong>&nbsp;\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc544\uc9c1 \uad6c\ud604\ud558\uc9c0 \uc54a\uc558&nbsp;\uc73c\uba70&nbsp;<strong>BookService<\/strong>&nbsp;\ub294 BookRepository \uc5d0\uc11c \uac00\uc838\uc640\uc57c \ud569\ub2c8\ub2e4 (&nbsp;<strong>IBookRepository<\/strong>&nbsp;\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc544\uc9c1 \uad6c\ud604\ud558\uc9c0&nbsp;<strong>\uc54a\uc74c<\/strong>&nbsp;) .<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"79d8\">\uad6c\ud604\ud574 \ubd05\uc2dc\ub2e4.&nbsp;\uba3c\uc800,&nbsp;<strong>BookService\uc785\ub2c8\ub2e4.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"4a7b\"><strong>CleanArchitecture.Application<\/strong>&nbsp;\ud504\ub85c\uc81d\ud2b8 \uc544\ub798&nbsp;services \ud3f4\ub354 \uc544\ub798\uc5d0 \uc0c8 \ud074\ub798\uc2a4\uc778&nbsp;<strong>BookService.cs\ub97c<\/strong>&nbsp;\ucd94\uac00\ud558\uace0 IBookService \uc5d0\uc11c \uc0c1\uc18d\ud569\ub2c8\ub2e4&nbsp;<strong>.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/nishanc.medium.com\/media\/d50d9acd1c12f9d59a7ea656bd40fba8\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"b045\">\uc774\uc81c IBookRepository\ub97c \uc8fc\uc785\ud574\uc57c \ud569\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc73c\ub85c .NET\uc5d0\uc11c \uc885\uc18d\uc131 \uc8fc\uc785\uc744 \uc218\ud589\ud558\ub294 \uac83\ucc98\ub7fc \uc8fc\uc785\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/nishanc.medium.com\/media\/c31dc9484a248d633e37b5b7762c4606\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"56f7\">\ub2e4\uc74c\uc740&nbsp;<strong>BookRepository<\/strong>&nbsp;\uc785\ub2c8\ub2e4.&nbsp;<strong>CleanArchitecture.Infra.Data<\/strong>&nbsp;\ud504\ub85c\uc81d\ud2b8 \uc5d0\uc11c&nbsp;<strong>Repositories<\/strong>&nbsp;\ub77c\ub294 \uc0c8 \ud3f4\ub354&nbsp;\ub97c \ub9cc\ub4e4\uace0 \uadf8 \uc544\ub798\uc5d0 \uc0c8 \ud074\ub798\uc2a4\uc778&nbsp;<strong>BookRepository<\/strong>&nbsp;\ub97c \ub9cc\ub4ed\ub2c8\ub2e4 .<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/347\/1*dqiFBJkxfkT4w8vh_mZnXA.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"db07\"><strong>BookService<\/strong>&nbsp;\ub97c \uad6c\ud604\ud55c&nbsp;\uac83\ucc98\ub7fc&nbsp;<strong>IBookRepository<\/strong>&nbsp;\uc5d0\uc11c&nbsp;<strong>BookRepository<\/strong>&nbsp;\ub97c \uad6c\ud604 \ud55c \ub2e4\uc74c \ub370\uc774\ud130\ubca0\uc774\uc2a4 \ucee8\ud14d\uc2a4\ud2b8\ub97c \uc8fc\uc785\ud574\uc57c \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640 \ud1b5\uc2e0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/nishanc.medium.com\/media\/add1b07b98fcddd9feef295910d0421d\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"349d\">\uc6b0\ub9ac\ub294 \uc544\uc9c1&nbsp;<strong>BookService \ubc0f BookRepository<\/strong>&nbsp;\uc5d0 \uba54\uc11c\ub4dc\ub97c \uad6c\ud604\ud558\uc9c0 \uc54a\uc558 \uc73c\ubbc0\ub85c \uacc4\uc18d\ud574\uc11c \ud574\ub2f9 \uba54\uc11c\ub4dc\ub97c \uad6c\ud604\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"5c2a\">\uba3c\uc800&nbsp;<strong>BookRepository<\/strong>&nbsp;\ub85c \uc774\ub3d9 \ud558\uace0 \uc8fc\uc785\ub41c \ucee8\ud14d\uc2a4\ud2b8\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0\uc11c \ucc45\uc744 \uac80\uc0c9\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/nishanc.medium.com\/media\/0bb2b2851a1ad7dc199455e29cf51f32\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"e54c\">\ub2e4\uc74c\uc740&nbsp;<strong>BookService\uc785\ub2c8\ub2e4.<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/nishanc.medium.com\/media\/1ed4b05b591a8211774fe8f37712bee0\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"553a\">\ub2e4\uc74c\uc73c\ub85c \uc885\uc18d\uc131\uc744 \ud3ec\ud568\ud558\uace0 \ubd84\ub9ac\ud558\ub294 \ub370 \ub3c4\uc6c0\uc774 \ub418\ub294 IoC \ud504\ub85c\uc81d\ud2b8\uc758 \uad6c\ud604\uc744 \uc0b4\ud3b4\ubcfc \ud544\uc694\uac00 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"f3fe\">\ud1b5\uc81c \uc5ed\uc804<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"41c6\">\ub530\ub77c\uc11c CleanArchitectureDemo.Infrastructure.IoC \uc544\ub798\uc5d0\uc11c&nbsp;<strong>CleanArchitecture.Infrastructure.IoC<\/strong>&nbsp;\ub77c\ub294 \uc774\uc804 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c \ud588\ub358 \uac83\ucc98\ub7fc \uc0c8\ub85c\uc6b4 .NET Core \ud074\ub798\uc2a4 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4&nbsp;<strong>.&nbsp;<\/strong>Class1.cs\ub97c \uc81c\uac70\ud558\uace0 \uc885\uc18d\uc131 -&gt; NuGet \ud328\ud0a4\uc9c0 \uad00\ub9ac -&gt; \ucc3e\uc544\ubcf4\uae30 \ud0ed\uc73c\ub85c \uc774\ub3d9\ud558\uc5ec \uac80\uc0c9\ud558\uc2ed\uc2dc\uc624.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Microsoft.Extensions.DependencyInjection<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"88ac\">\uc6b0\ub9ac\uac00 \uc124\uce58\ud55c \uc774\uc804 \uc885\uc18d\uc131\uacfc \ub3d9\uc77c\ud55c \ubc84\uc804\uc744 \uc124\uce58\ud558\uace0 \uc548\uc815\uc801\uc778 \ubc84\uc804\uc778\uc9c0 \ud655\uc778\ud558\uc2ed\uc2dc\uc624.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/700\/1*yIzqnqWTpd6lYko_oeG1dA.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"adb1\">\uc774\uc81c&nbsp;<strong>CleanArchitecture.Infrastructure.IoC<\/strong>&nbsp;\ud504\ub85c\uc81d\ud2b8 \uc544\ub798\uc5d0 \uc885\uc18d\uc131 \ucee8\ud14c\uc774\ub108 \ud074\ub798\uc2a4\ub97c \uc0dd\uc131\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/350\/1*xY3jW1HoTpP-zwhZYRmayQ.png\" alt=\"\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/nishanc.medium.com\/media\/e608e82a60c70e9f942fc58fdde3416c\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"0c14\">\uc5ec\ub7ec \ud504\ub85c\uc81d\ud2b8\uc758 \uc778\ud130\ud398\uc774\uc2a4\uc640 \uad6c\ud604\uc744 \ub2e8\uc77c \ucc38\uc870 \uc9c0\uc810\uc73c\ub85c \uc5f0\uacb0\ud558\ub294 \ubc29\ubc95\uc5d0 \uc8fc\ubaa9\ud558\uc2ed\uc2dc\uc624.&nbsp;\uc774\uac83\uc774 IoC \uacc4\uce35\uc758 \ubaa9\uc801\uc785\ub2c8\ub2e4.&nbsp;\ub610\ud55c&nbsp;<strong>\ucc28\uc774\uc810<\/strong>&nbsp;\uc744 \uc54c\uace0 \uc2f6\ub2e4\uba74&nbsp;<a href=\"https:\/\/stackoverflow.com\/questions\/38138100\/addtransient-addscoped-and-addsingleton-services-differences\" rel=\"noreferrer noopener\" target=\"_blank\">\uc5ec\uae30\uc5d0\uc11c \uc790\uc138\ud55c \ub0b4\uc6a9\uc744 \uc77d\uc73c\uc2ed\uc2dc\uc624.<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"3229\">\uc774\uc81c \uc774 \uc0c8\ub85c\uc6b4 \uc11c\ube44\uc2a4 \ucee8\ud14c\uc774\ub108\uc5d0 \ub300\ud574 MVC \ud504\ub85c\uc81d\ud2b8\uc5d0 \uc54c\ub824\uc57c \ud569\ub2c8\ub2e4.&nbsp;<strong>Configure<\/strong>&nbsp;\uba54\uc11c\ub4dc \ub4a4\uc5d0 \ub2e4\uc74c \uba54\uc11c\ub4dc\ub97c \ucd94\uac00&nbsp;\ud55c \ud6c4&nbsp;<strong>Startup.cs\ub85c<\/strong>&nbsp;\uc774\ub3d9 \ud569\ub2c8\ub2e4.<strong><\/strong><\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/nishanc.medium.com\/media\/821853243bc688ccc9d330c46a2ca29a\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"d4f1\">\uc774\uc81c&nbsp;<strong>ConfigureServices<\/strong>&nbsp;\uba54\uc11c\ub4dc \ub0b4\uc5d0\uc11c \uc774 \uba54\uc11c\ub4dc\ub97c \ud638\ucd9c\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">RegisterServices(\uc11c\ube44\uc2a4);<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"cd4d\">\uc804\uccb4&nbsp;<strong>Startup.cs<\/strong>&nbsp;\ub294 \ub2e4\uc74c\uacfc&nbsp;<a href=\"https:\/\/gist.github.com\/nishanc\/c4c53ae1b55970abc3e2b9fa190cc56c\" rel=\"noreferrer noopener\" target=\"_blank\">\uac19\uc2b5\ub2c8\ub2e4<\/a>&nbsp;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"1953\">\uc774\uc81c \ubaa8\ub4e0 \ub808\uc774\uc5b4\uac00 \uc900\ube44\ub418\uc5c8\uc2b5\ub2c8\ub2e4.&nbsp;<strong>\uadf8\ub798\uc11c \ub2e4\uc74c\uc73c\ub85c \uc5ec\uae30\uc5d0\uc11c \ub17c\uc758\ud55c \ubaa8\ub4e0 \uac83\uc744 \uc0ac\uc6a9\ud558\uc5ec Controller<\/strong>&nbsp;\ub97c \uc0dd\uc131 \ud558\uace0 UI\ub97c \uad6c\ud604\ud558\ub294&nbsp;\ubc29\ubc95\uc744 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4 .<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"8e3e\"><strong>\uba3c\uc800 \ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \uc77c\ubd80 \ub370\uc774\ud130\ub97c \ucd94\uac00\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. GetBooks<\/strong>&nbsp;\uba54\uc11c\ub4dc \ub9cc \uad6c\ud604\ud558\uace0 \uc788\uc73c\ubbc0\ub85c&nbsp;\uc77c\ubd80 \ub370\uc774\ud130\ub97c \uc218\ub3d9\uc73c\ub85c \ucd94\uac00\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/nishanc.medium.com\/media\/a842b4678e7e2e9abbc83006893e574f\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"f8f9\">\ub370\uc774\ud130\ubca0\uc774\uc2a4\uc5d0 \ub370\uc774\ud130\uac00 \uc788\uc73c\uba74&nbsp;<strong>Controllers<\/strong>&nbsp;\ud3f4\ub354 \uc544\ub798&nbsp;<strong>CleanArchitecture.MVC<\/strong>&nbsp;\ud504\ub85c\uc81d\ud2b8\uc5d0 \ucee8\ud2b8\ub864\ub7ec\ub97c \uc0dd\uc131\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<strong><\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/proxy\/1*67xneU12hx1CzOnfBcHjZw.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ccbb\">Controllers \ud3f4\ub354 -&gt; \ucd94\uac00 -&gt; \ucee8\ud2b8\ub864\ub7ec\ub97c \ub9c8\uc6b0\uc2a4 \uc624\ub978\ucabd \ubc84\ud2bc\uc73c\ub85c \ud074\ub9ad \ud558\uace0 MVC \uaddc\uce59\uc5d0 \ub530\ub77c&nbsp;<strong>BookController<\/strong>&nbsp;\ub85c \uc774\ub984\uc744 \uc9c0\uc815\ud569\ub2c8\ub2e4 .&nbsp;\uadf8\ub7f0 \ub2e4\uc74c&nbsp;\ub2e4\uc74c\uacfc \uac19\uc774 \uc774 \ucee8\ud2b8\ub864\ub7ec \uc5d0&nbsp;<strong>BookService \ub97c \uc8fc\uc785\ud569\ub2c8\ub2e4.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"89ca\">\uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uacc4\uce35\uc5d0\uc11c IBookService\ub97c \ucc38\uc870\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/nishanc.medium.com\/media\/8403aee16f7967c12305d6ab3a660641\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"3560\">\uc774\uc81c BookViewModel\uc744 \ubdf0\uc5d0 \uc804\ub2ec\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/nishanc.medium.com\/media\/e803f5f65fa3cdfef88d703590d5b0ca\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"0a62\">\uc5bc\ub9c8\ub098&nbsp;<strong>\uae68\ub057\ud55c<\/strong>&nbsp;\uc9c0 \ubcf4\uc138\uc694.&nbsp;\uadf8\uac83\uc774 \uae68\ub057\ud55c \uac74\ucd95\uc758 \uc544\ub984\ub2e4\uc6c0\uc785\ub2c8\ub2e4.&nbsp;\uc774\uc81c \uc6b0\ub9ac\ub294 BookViewModel\uc744 \ubdf0\uc5d0 \uc804\ub2ec\ud588\uc2b5\ub2c8\ub2e4. \uacc4\uc18d\ud574\uc11c \ud574\ub2f9 \ubdf0\ub97c \uc815\uc758\ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"ffce\"><strong>Views<\/strong>&nbsp;\ud3f4\ub354\ub97c \ub9c8\uc6b0\uc2a4 \uc624\ub978\ucabd \ubc84\ud2bc\uc73c\ub85c \ud074\ub9ad\ud558\uace0&nbsp;<strong>Book<\/strong>&nbsp;\uc774\ub77c\ub294 \uc0c8 \ud3f4\ub354\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4 .&nbsp;<strong>Book \ud3f4\ub354<\/strong>&nbsp;\ub97c \ub9c8\uc6b0\uc2a4 \uc624\ub978\ucabd \ubc84\ud2bc \uc73c\ub85c \ud074\ub9ad\ud558\uace0&nbsp;Index.cshtml\uc774\ub77c\ub294&nbsp;<strong>Razor View<\/strong>&nbsp;\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4 .<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/proxy\/1*tKZ4X7UaRfZ_-2miOhDRTQ.png\" alt=\"\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/proxy\/1*-f3bgQk-GH-yjQ9jHlbI2Q.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"e959\"><strong>Index.cshtml<\/strong>&nbsp;\uc5d0\uc11c BookViewModel&nbsp;\uc744 \uac00\uc838\uc624\uace0 \ubaa8\ub378\uc758 \ubaa8\ub4e0 \ud56d\ubaa9(\ucc45)\uc744 \ubc18\ubcf5\ud558\uc5ec \ud14c\uc774\ube14\uc5d0 \ud45c\uc2dc\ud558\ub294 \ub2e4\uc74c \ucf54\ub4dc \uc138\uadf8\uba3c\ud2b8\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/nishanc.medium.com\/media\/30a9846157203f5d2712a47cda7227cf\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"7e24\">\uadf8\ub7f0 \ub2e4\uc74c&nbsp;<strong>Views\/Shared<\/strong>&nbsp;\uc544\ub798\uc758&nbsp;<strong>_Layout.cshtml<\/strong>&nbsp;\ub85c \uc774\ub3d9\ud558\uace0 \ubc29\uae08 \ub9cc\ub4e0 \ubcf4\uae30\uc5d0 \ub2e4\ub978 \ud0d0\uc0c9 \ub9c1\ud06c\ub97c \ucd94\uac00\ud569\ub2c8\ub2e4.&nbsp;<strong>Book<\/strong>&nbsp;\ucee8\ud2b8\ub864\ub7ec\uc640&nbsp;<strong>Index<\/strong>&nbsp;\uc791\uc5c5&nbsp;\uc744 \uac00\ub9ac\ud0b5\ub2c8\ub2e4 .<strong><\/strong><strong><\/strong><strong><\/strong><\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/nishanc.medium.com\/media\/cfeffb0cf40db9e13321f83c9633478d\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"01d1\">\uc774\uc81c MVC \ud504\ub85c\uc81d\ud2b8\ub97c \uc2e4\ud589\ud558\uace0&nbsp;<a href=\"https:\/\/localhost:5001\/Book\" rel=\"noreferrer noopener\" target=\"_blank\">https:\/\/localhost:5001\/Book<\/a>&nbsp;\uc73c\ub85c \uc774\ub3d9\ud558\uc5ec \ucc45 \uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4!<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/700\/1*_HVzPNThM7sMoHj2qAUrFA.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"434a\">\ud558\uc9c0\ub9cc \uc544\uc9c1 \ub85c\uadf8\uc778\uc744 \ud558\uc9c0 \uc54a\uc740 \uc0c1\ud0dc\uc774\uae30 \ub54c\ubb38\uc5d0 \uc0ac\uc6a9\uc790\uac00 \uc778\uc99d \uc5c6\uc774 \ub370\uc774\ud130\ub97c \ubcfc \uc218 \uc788\ub3c4\ub85d \ud5c8\uc6a9\ud558\ub294 \uac83\uc740 \ubb38\uc81c\uc774\uba70 \ud574\uacb0\ud558\uae30 \uc27d\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/nishanc.medium.com\/media\/bfeec32c512c656d7f31a6331dfd19f8\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"a878\">\ucee8\ud2b8\ub864\ub7ec \uc790\uccb4\uc758 Index() \uba54\uc11c\ub4dc\uc5d0&nbsp;<strong>[Authorize]<\/strong>&nbsp;\ud2b9\uc131\uc744 \ucd94\uac00 \ud55c \ub2e4\uc74c&nbsp;<a href=\"https:\/\/localhost:5001\/Book\" rel=\"noreferrer noopener\" target=\"_blank\">https:\/\/localhost:5001\/Book<\/a>&nbsp;\uc73c\ub85c \ub2e4\uc2dc \uc774\ub3d9\ud574 \ubd05\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/700\/1*qitYqnKRzmQ6FFzdHAKIug.png\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"1582\">\ub85c\uadf8\uc778\ud558\ub77c\ub294 \uba54\uc2dc\uc9c0\uac00 \ud45c\uc2dc\ub429\ub2c8\ub2e4. \ub610\ud55c \uc6b0\ub9ac\uac00 \uc0dd\uc131\ud55c \uc11c\ube44\uc2a4\uc640 \ub9ac\ud3ec\uc9c0\ud1a0\ub9ac\uc5d0 \uc911\ub2e8\uc810\uc744 \ubc30\uce58\ud558\uace0 \ub7f0\ud0c0\uc784\uc5d0\uc11c \uc5b4\ub5bb\uac8c \uc791\ub3d9\ud558\ub294\uc9c0 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"1e3a\">\uadf8\uac8c \ub2e4\uc57c, \uc5ec\uae30\uae4c\uc9c0 \uc640\uc918\uc11c \uace0\ub9c8\uc6cc.&nbsp;\uc774\uac83\uc740 \ubaa8\ub4e0 \uac83\uc744 \uc124\uc815\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud55c \uc18c\uac1c \uac00\uc774\ub4dc\uc77c \ubfd0\uc774\uba70 \ud074\ub9b0 \uc544\ud0a4\ud14d\ucc98\ub97c \uad6c\ud604\ud558\ub294 \ub2e4\uc591\ud55c \ubc29\ubc95\uc774 \uc788\uc9c0\ub9cc \uc5ec\uae30\uc5d0\uc11c \ub17c\uc758\ud55c \ud575\uc2ec \uac1c\ub150\uc774 \uc788\uc2b5\ub2c8\ub2e4.&nbsp;\ub530\ub77c\uc11c \ub2e4\uc74c\uc5d0 \ub354 \uad11\ubc94\uc704\ud55c \ud29c\ud1a0\ub9ac\uc5bc\uc744 \uc811\ud560 \ub54c \uae38\uc744 \uc783\uc9c0 \uc54a\uc744 \uac83\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.buymeacoffee.com\/nishanc\"><img decoding=\"async\" src=\"https:\/\/miro.medium.com\/max\/443\/1*i3KnIe4v2LtgeT6CI0AKfA.png\" alt=\"\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" id=\"8ab8\">\uc774\uac83\uc5d0\uc11c \ub354 \ub098\uc544\uac00\uace0 \uc2f6\ub2e4\uba74&nbsp;<a href=\"https:\/\/jasontaylor.dev\/\" rel=\"noreferrer noopener\" target=\"_blank\">JASON TAYLOR \uc758 \ube44\ub514\uc624\ub97c \ubcf4\uac70\ub098&nbsp;<\/a><a href=\"https:\/\/jasontaylor.dev\/clean-architecture-getting-started\/\" rel=\"noreferrer noopener\" target=\"_blank\">Clean Architecture<\/a>&nbsp;\uc5d0 \ub300\ud55c \uadf8\uc758 \ub180\ub77c\uc6b4 \uae30\uc0ac\ub97c \uc77d\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4&nbsp;.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uc774\uc804 \uae30\uc0ac&nbsp;\uc5d0 \ub530\ub77c&nbsp;\ud074\ub9b0 \uc544\ud0a4\ud14d\ucc98\uc758 \uae30\ubcf8 \uc0ac\ub840\ub97c \uc18c\uac1c\ud588\uc2b5\ub2c8\ub2e4.&nbsp;\uc774\uc81c \ub514\ub809\ud130\ub9ac \uad6c\uc870\ubd80\ud130 \uc2dc\uc791\ud558\uc5ec ASP.NET Core 3\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ube4c\ub4dc\ud560 \uac83\uc785\ub2c8\ub2e4.&nbsp;\uacc4\uc18d \uc9c4\ud589\ud558\uae30 \uc804\uc5d0 \ube60\ub978 \uc694\uc57d. \uc694\uc57d \uc774 \ub2e4\uc774\uc5b4\uadf8\ub7a8\uc5d0\uc11c \uc885\uc18d\uc131\uc740 \uac00\uc7a5 \uc548\ucabd \uc6d0\uc73c\ub85c \ud750\ub985\ub2c8\ub2e4.&nbsp;Application Core\ub294 \uc774 \ub2e4\uc774\uc5b4\uadf8\ub7a8\uc758 \ud575\uc2ec \uc704\uce58\uc5d0\uc11c \uc774\ub984\uc744 \ub530\uc654\uc2b5\ub2c8\ub2e4.&nbsp;\uadf8\ub9ac\uace0 \ub2e4\uc774\uc5b4\uadf8\ub7a8\uc5d0\uc11c Application Core\uac00 \ub2e4\ub978 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uacc4\uce35\uc5d0 \ub300\ud55c \uc885\uc18d\uc131\uc774 \uc5c6\uc74c\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.&nbsp;\uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \uc5d4\ud2f0\ud2f0\uc640 \uc778\ud130\ud398\uc774\uc2a4\ub294 \ubc14\ub85c \uadf8 \uc911\uc2ec\uc5d0 \uc788\uc2b5\ub2c8\ub2e4.&nbsp;\ubc14\ub85c \ubc14\uae65\uc5d0 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[84,80],"tags":[87],"class_list":["post-1646","post","type-post","status-publish","format-standard","hentry","category-architecture","category-project","tag-architecture"],"_links":{"self":[{"href":"http:\/\/yoonhada.com\/index.php?rest_route=\/wp\/v2\/posts\/1646","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/yoonhada.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/yoonhada.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/yoonhada.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/yoonhada.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1646"}],"version-history":[{"count":1,"href":"http:\/\/yoonhada.com\/index.php?rest_route=\/wp\/v2\/posts\/1646\/revisions"}],"predecessor-version":[{"id":1647,"href":"http:\/\/yoonhada.com\/index.php?rest_route=\/wp\/v2\/posts\/1646\/revisions\/1647"}],"wp:attachment":[{"href":"http:\/\/yoonhada.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1646"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/yoonhada.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1646"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/yoonhada.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1646"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}