{"id":28,"date":"2025-04-11T01:16:58","date_gmt":"2025-04-11T01:16:58","guid":{"rendered":"https:\/\/csharp.ihavenomoney.co.kr\/netcore\/?page_id=28"},"modified":"2025-04-11T01:16:58","modified_gmt":"2025-04-11T01:16:58","slug":"error-%eb%a9%94%ec%8b%9c%ec%a7%80-%eb%a6%ac%ed%84%b4","status":"publish","type":"page","link":"https:\/\/csharp.ihavenomoney.co.kr\/netcore\/?page_id=28","title":{"rendered":"Error \uba54\uc2dc\uc9c0 \ub9ac\ud134"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Main<\/h2>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><\/div>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:c# decode:true \" >static async Task Main(string[] args)\n        {\n            var service = new MyService();\n\n            Console.WriteLine(\"Enter input (normal, error, refund):\");\n            string userInput = Console.ReadLine();\n\n            ServiceResponse&lt;string&gt; result = await service.ProcessTransactionAsync(userInput);\n\n            if (result.Error.ErrorExist)\n            {\n                Console.WriteLine($\"Error {result.Error.ResultErrorNo}: {result.Error.ResultMsg}\");\n            }\n            else\n            {\n                Console.WriteLine($\"Success: {result.Data}\");\n            }\n\n            Console.ReadLine();\n        }<\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Model<\/h2>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:default decode:true \" >namespace ConsoleSabre.Models\n{\n    public class ErrorModel\n    {\n        \/\/\/ &lt;summary&gt;\n        \/\/\/ \uac01 \ucc98\ub9ac \ub2e8\uacc4\uc5d0\uc11c\uc758 \uc5d0\ub7ec \uc720\ubb34\n        \/\/\/ &lt;\/summary&gt;\n        public bool ErrorExist { get; set; } = false;\n\n        \/\/\/ &lt;summary&gt;\n        \/\/\/ \uc5d0\ub7ec \uc704\uce58 (H: \ud638\uc2a4\ud2b8 \uc624\ub958, L: \ub85c\uceec \uc2dc\uc2a4\ud15c \uc624\ub958)\n        \/\/\/ &lt;\/summary&gt;\n        public string ErrorLocation { get; set; } = \"\";\n\n        \/\/\/ &lt;summary&gt;\n        \/\/\/ \uacb0\uacfc \uc5d0\ub7ec \ubc88\ud638\n        \/\/\/ &lt;\/summary&gt;\n        public string ResultErrorNo { get; set; } = \"0\";\n\n        \/\/\/ &lt;summary&gt;\n        \/\/\/ \uacb0\uacfc \uc5d0\ub7ec \uba54\uc2dc\uc9c0\n        \/\/\/ &lt;\/summary&gt;\n        public string ResultMsg { get; set; } = \"\";\n    }\n\n    \/\/ \uc11c\ube44\uc2a4 \uc751\ub2f5 \uacb0\uacfc\ub97c \ub2f4\uae30 \uc704\ud55c \uc81c\ub124\ub9ad \ud074\ub798\uc2a4\n    public class ServiceResponse&lt;T&gt;\n    {\n        \/\/\/ &lt;summary&gt;\n        \/\/\/ \uc5d0\ub7ec \uad00\ub828 \uc815\ubcf4\ub97c \ud3ec\ud568\ud558\ub294 \ubaa8\ub378\n        \/\/\/ &lt;\/summary&gt;\n        public ErrorModel Error { get; set; } = new ErrorModel();\n\n        \/\/\/ &lt;summary&gt;\n        \/\/\/ \uc2e4\uc81c \ubc18\ud658 \ub370\uc774\ud130 (\uc815\uc0c1 \ucc98\ub9ac \uacb0\uacfc)\n        \/\/\/ &lt;\/summary&gt;\n        public T Data { get; set; }\n    }\n}\n<\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">MyService<\/h2>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:default decode:true \" >using ConsoleSabre.Models;\n\nnamespace ConsoleSabre.Services\n{\n    public class MyService\n    {\n        \/\/ \uc5d0\ub7ec \ubc1c\uc0dd\uc2dc \ud638\ucd9c\ud560 \ube44\ub3d9\uae30 \uba54\uc11c\ub4dc (\uc2e4\uc81c \uad6c\ud604\uc5d0\uc11c\ub294 \ud2b8\ub79c\uc7ad\uc158 \ucde8\uc18c \ub4f1 \ucc98\ub9ac)\n        public async Task IgnoreTransactionLLSRQ()\n        {\n            \/\/ \uc608\uc2dc: \ube44\ub3d9\uae30 \uc791\uc5c5 \uc2dc\ubbac\ub808\uc774\uc158\n            await Task.Delay(10);\n            Console.WriteLine(\"Ignore executed.\");\n        }\n\n        \/\/ \uc138\uc158 \uc885\ub8cc\ub97c \uc704\ud55c \ube44\ub3d9\uae30 \uba54\uc11c\ub4dc (\uc2e4\uc81c \uad6c\ud604\uc5d0\uc11c\ub294 \uc138\uc158 \uc885\ub8cc \ub85c\uc9c1\uc774 \ud3ec\ud568\ub420 \uc218 \uc788\uc74c)\n        public async Task EndSession()\n        {\n            \/\/ \uc608\uc2dc: \ube44\ub3d9\uae30 \uc791\uc5c5 \uc2dc\ubbac\ub808\uc774\uc158\n            await Task.Delay(10);\n            Console.WriteLine(\"EndSession executed.\");\n        }\n\n        \/\/ \uacf5\ud1b5 \uc5d0\ub7ec \ucc98\ub9ac \ud568\uc218: \uc5d0\ub7ec \ubaa8\ub378\uc5d0 \uac12\uc744 \uc138\ud305\ud558\uace0 \ud544\uc694\ud55c \ube44\ub3d9\uae30 \ucc98\ub9ac\ub97c \uc9c4\ud589\n        private async Task&lt;bool&gt; HandleErrorAsync(ErrorModel errorModel, string errorCode, string errorMessage, string errorLocation)\n        {\n            errorModel.ErrorExist = true;\n            errorModel.ResultErrorNo = errorCode;\n            errorModel.ResultMsg = errorMessage;\n            errorModel.ErrorLocation = errorLocation; \/\/ (\uc608:L \ub85c\uceec \uc2dc\uc2a4\ud15c \uc624\ub958)\n\n            \/\/ \uacf5\ud1b5 \uc5d0\ub7ec \ucc98\ub9ac \ub85c\uc9c1 \uc2e4\ud589\n            await IgnoreTransactionLLSRQ();\n            await EndSession();\n            return true;\n        }\n\n        \/\/ \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1\uc744 \ucc98\ub9ac\ud558\ub294 \uc608\uc81c \uc11c\ube44\uc2a4 \uba54\uc11c\ub4dc\n        \/\/ \uc785\ub825 \uac12\uc5d0 \ub530\ub77c \uc815\uc0c1 \ucc98\ub9ac \ub610\ub294 \uc5d0\ub7ec \uc870\uac74\uc744 \uc2dc\ubbac\ub808\uc774\uc158 \ud569\ub2c8\ub2e4.\n        public async Task&lt;ServiceResponse&lt;string&gt;&gt; ProcessTransactionAsync(string input)\n        {\n            var response = new ServiceResponse&lt;string&gt;();\n\n            try\n            {\n                \/\/ \uc870\uac74 1: \uc785\ub825\uc774 \"error\"\uc778 \uacbd\uc6b0 \uc5d0\ub7ec \ucc98\ub9ac\n                if (string.Equals(input, \"error\", StringComparison.OrdinalIgnoreCase))\n                {\n                    await HandleErrorAsync(response.Error, \"431\", \"Simulated error occurred.\",\"\");\n                    return response;\n                }\n\n                \/\/ \uc870\uac74 2: \uc785\ub825\uc774 \"refund\"\uc778 \uacbd\uc6b0 \ub610 \ub2e4\ub978 \uc5d0\ub7ec \ucc98\ub9ac (\uc608\uc2dc: \ud658\ubd88 \uad00\ub828 \uc624\ub958)\n                if (string.Equals(input, \"refund\", StringComparison.OrdinalIgnoreCase))\n                {\n                    string errorMsg = \"Refund error: insufficient funds\";\n                    errorMsg += \". Please contact support.\";\n                    await HandleErrorAsync(response.Error, \"432\", errorMsg,\"\");\n                    return response;\n                }\n\n                \/\/ \uc815\uc0c1 \ucc98\ub9ac: \uc785\ub825 \uac12\uc744 \uae30\ubc18\uc73c\ub85c \uacb0\uacfc \ub370\uc774\ud130 \uc0dd\uc131\n                response.Data = $\"Processed input: {input}\";\n            }\n            catch (Exception ex)\n            {\n                \/\/ \uc608\uc678 \ubc1c\uc0dd \uc2dc \uc5d0\ub7ec \ucc98\ub9ac\n                await HandleErrorAsync(response.Error, \"500\", $\"Unhandled exception: {ex.Message}\", \"\");\n            }\n\n            return response;\n        }\n    }\n}\n<\/pre><\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Main Model MyService<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-28","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/csharp.ihavenomoney.co.kr\/netcore\/index.php?rest_route=\/wp\/v2\/pages\/28","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/csharp.ihavenomoney.co.kr\/netcore\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/csharp.ihavenomoney.co.kr\/netcore\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/csharp.ihavenomoney.co.kr\/netcore\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/csharp.ihavenomoney.co.kr\/netcore\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=28"}],"version-history":[{"count":1,"href":"https:\/\/csharp.ihavenomoney.co.kr\/netcore\/index.php?rest_route=\/wp\/v2\/pages\/28\/revisions"}],"predecessor-version":[{"id":29,"href":"https:\/\/csharp.ihavenomoney.co.kr\/netcore\/index.php?rest_route=\/wp\/v2\/pages\/28\/revisions\/29"}],"wp:attachment":[{"href":"https:\/\/csharp.ihavenomoney.co.kr\/netcore\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=28"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}