{"id":435784,"date":"2024-01-19T08:21:41","date_gmt":"2024-01-19T07:21:41","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=dotnet&#038;p=435784"},"modified":"2024-01-19T08:21:48","modified_gmt":"2024-01-19T07:21:48","slug":"elevating-csharp-code-quality-with-qodana-a-journey-towards-perfection","status":"publish","type":"dotnet","link":"https:\/\/blog.jetbrains.com\/ko\/dotnet\/2024\/01\/19\/elevating-csharp-code-quality-with-qodana-a-journey-towards-perfection\/","title":{"rendered":"Qodana\ub97c \uc0ac\uc6a9\ud55c C# \ucf54\ub4dc \ud488\uc9c8 \uac1c\uc120: \uc644\ubcbd\uc744 \ud5a5\ud55c \uc5ec\uc815"},"content":{"rendered":"<p>JetBrains IDE\ub294 \uc5b8\uc81c\ub098 \ub2e4\uc591\ud55c \uc5b8\uc5b4\ub97c \uc9c0\uc6d0\ud558\ub294 \uac15\ub825\ud55c \uc815\uc801 \ucf54\ub4dc \ubd84\uc11d \uae30\ub2a5\uc73c\ub85c \uc798 \uc54c\ub824\uc838 \uc788\uc2b5\ub2c8\ub2e4.\u00a0<a href=\"https:\/\/www.jetbrains.com\/ko-kr\/qodana\/\" target=\"_blank\" rel=\"noopener\">Qodana<\/a> \ucd9c\uc2dc\ub97c \ud1b5\ud574 \ubaa8\ub4e0 \uac1c\ubc1c \ud504\ub85c\uc138\uc2a4\uc758 \ud575\uc2ec\uc778 \uc911\uc559 \ucf54\ub4dc \ud488\uc9c8 \ud50c\ub7ab\ud3fc, \uc989 \uc0ac\uc6a9\uc790\uc758 CI\/CD \ub3c4\uad6c\uc5d0 \uc9c0\uc2dd\uc744 \ud1b5\ud569\ud569\ub2c8\ub2e4.<\/p>\n<p>Qodana\ub294 \ucee4\ubc0b \ub610\ub294 \ud480 \ub9ac\ud018\uc2a4\ud2b8\ub85c \ud2b8\ub9ac\uac70\ub418\uba70, \ubc1c\uacac\ub41c \ubaa8\ub4e0 \ucf54\ub4dc \ud488\uc9c8 \ubc0f \ubcf4\uc548 \uc774\uc288\uc5d0 \ub300\ud55c \uc885\ud569 \ubd84\uc11d \ubcf4\uace0\uc11c(<a href=\"https:\/\/sarifweb.azurewebsites.net\/\" target=\"_blank\" rel=\"noopener\">SARIF<\/a>)\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\u00a0\uac1c\ubc1c \ud300\uc774\ub098 QA \uc5d4\uc9c0\ub2c8\uc5b4\ubfd0 \uc544\ub2c8\ub77c \ubcf4\uc548 \uad00\ub9ac\uc790\uc640 \ubc95\ubb34\/\uaddc\uc815 \uc900\uc218 \ubd80\uc11c\ub3c4 Qodana\uc5d0\uc11c \ubcf4\uace0\uc11c\ub97c \uac04\ud3b8\ud558\uac8c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-165112\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/07\/qodana_social_image.png\" alt=\"Qodana \ubc30\ub108\" width=\"1280\" height=\"720\" \/><\/figure>\n<p>Qodana\ub294 \ucd5c\uadfc .NET \ub3c4\uad6c\ub97c \uc9c0\uc6d0\ud558\uae30 \uc2dc\uc791\ud588\uc73c\uba70 \uc6b0\uc218\ud55c Rider \ud1b5\ud569 \uae30\ub2a5\ub3c4 \uc81c\uacf5\ud569\ub2c8\ub2e4.\u00a0\ubd84\uc11d \uae30\ub2a5\uc740 \uae30\uc874 <em>InspectCode<\/em>\ub97c \uae30\ubc18\uc73c\ub85c \ud569\ub2c8\ub2e4. InspectCode\ub294 <a href=\"https:\/\/blog.jetbrains.com\/dotnet\/2016\/10\/04\/establishing-a-zero-warning-policy-with-resharpers-solution-wide-analysis\/\"><em>Establishing a zero-warning policy with ReSharper\u2019s solution-wide analysis<\/em><\/a>\u00a0\ub610\ub294\u00a0<a href=\"https:\/\/blog.jetbrains.com\/dotnet\/2020\/07\/16\/resharper-command-line-tools-cross-platform-and-global-tools\/\"><em>ReSharper Command-Line Tools \u2013 Cross-Platform and Global Tool<\/em><\/a>\uc640 \uac19\uc740 \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc5d0\uc11c \uc18c\uac1c\ub41c \ubc14 \uc788\uc2b5\ub2c8\ub2e4.\u00a0InspectCode\ub294 \ucf54\ub4dc \uc774\uc288\ub97c \ubc1c\uacac\ud558\ub294 Rider \ubc0f ReSharper\uc758 \ubd84\uc11d \uae30\ub2a5\uc744 \ub3d9\uc77c\ud558\uac8c \uc2e4\ud589\ud569\ub2c8\ub2e4.\u00a0CI\/CD \uc5d0\uc774\uc804\ud2b8\ub97c \uc0ac\uc6a9\ud558\uba74 <a href=\"https:\/\/www.jetbrains.com\/help\/rider\/Code_Analysis__Solution-Wide_Analysis.html#enabling-solution-wide-analysis\" target=\"_blank\" rel=\"noreferrer noopener\">\uc194\ub8e8\uc158 \uc804\uccb4 \ubd84\uc11d<\/a>\uc744 \ub85c\uceec \uc2dc\uc2a4\ud15c\uc5d0\uc11c \uc2e4\ud589\ud560 \ud544\uc694\uac00 \uc5c6\uc73c\ubbc0\ub85c \uac1c\ubc1c \ud658\uacbd, \ubc18\uc751 \uc18d\ub3c4 \ubc0f \ubc30\ud130\ub9ac \uc218\uba85 \ud5a5\uc0c1 \ub4f1 \uc0c1\ub2f9\ud55c \uc774\uc810\uc774 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n<p align=\"center\"><a class=\"jb-download-button\" title=\"Read More\" href=\"https:\/\/www.jetbrains.com\/ko-kr\/qodana\/\" target=\"_blank\" rel=\"noopener noreferrer\" data-mce-href=\"https:\/\/www.jetbrains.com\/ko-kr\/qodana\/\" data-mce-selected=\"inline-boundary\" data-mce-><i class=\"download-icon\"><\/i>Qodana \ubb34\ub8cc\ub85c \uc0ac\uc6a9\ud574 \ubcf4\uae30<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"2560\" height=\"1440\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2024\/01\/KO-Twitter-800x418-1.jpg\" alt=\"\" class=\"wp-image-373570\"\/><\/figure>\n\n\n<p>Qodana \ubcf4\uace0\uc11c\uc758 \uc791\ub3d9 \ubc29\uc2dd\uc744 \uc9c1\uc811 \ud655\uc778\ud558\ub824\uba74 <a href=\"https:\/\/qodana.cloud\/projects\/AgRgk\/reports\/b894a\" target=\"_blank\" rel=\"noreferrer noopener\">FluentAssertions<\/a> \ub610\ub294 <a href=\"https:\/\/qodana.cloud\/projects\/3BBmd\/reports\/ObDG9\" target=\"_blank\" rel=\"noreferrer noopener\">NUKE<\/a>\uc758 \uacf5\uac1c \ubcf4\uace0\uc11c\ub97c \ucc38\uc870\ud558\uc138\uc694.\u00a0\ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c Qodana\ub97c \uc0ac\uc6a9\ud574\ubcf4\uace0, \ub2e4\uc591\ud55c CI\/CD \ud658\uacbd \ubc0f Rider\uc5d0\uc11c \uc81c\uacf5\ub418\ub294 \uc804\ubb38\uc801 \uae30\ub2a5\uc744 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\ub824\uba74 \ub2e4\uc74c \uc139\uc158\uc744 \uc77d\uc5b4\uc8fc\uc138\uc694!<\/p>\n<h2 id=\"setting-up-qodana-for-net-projects\" class=\"wp-block-heading\">.NET \ud504\ub85c\uc81d\ud2b8\uc6a9 Qodana \uc124\uc815<\/h2>\n<p>Qodana\ub294 Docker \ucee8\ud14c\uc774\ub108\uc5d0\uc11c \uc2e4\ud589\ub418\ubbc0\ub85c Docker\uac00 \ub85c\uceec \ubc0f CI\/CD \ud658\uacbd\uc5d0 \uc124\uce58\ub418\uc5b4 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.\u00a0\ub85c\uceec\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub824\uba74 <a href=\"https:\/\/github.com\/JetBrains\/qodana-cli#installation\" target=\"_blank\" rel=\"noreferrer noopener\">Qodana CLI\ub97c \uc124\uce58<\/a>\ud558\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4(<a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/quick-start.html#quickstart-analyze-project-locally\" target=\"_blank\" rel=\"noreferrer noopener\">Docker \uc9c1\uc811 \ud638\ucd9c<\/a>\ub3c4 \uac00\ub2a5).<\/p>\n<ul>\n<li>Windows\uc5d0\uc11c WinGet \uc0ac\uc6a9: <code>winget install -e --id JetBrains.QodanaCLI<\/code><\/li>\n<li>Windows\uc5d0\uc11c Chocolatey \uc0ac\uc6a9:\u00a0<code>choco install qodana<\/code><\/li>\n<li>macOS:\u00a0<code>brew install jetbrains\/utils\/qodana<\/code><\/li>\n<li>Linux:\u00a0<code>curl -fsSL https:\/\/jb.gg\/qodana-cli\/install | bash<\/code><\/li>\n<\/ul>\n<p>\ub2e4\uc74c \ub2e8\uacc4\uc5d0\uc11c <code>qodana init<\/code>\uc744 \ud638\ucd9c\ud574 \uc124\uc815 \ub9c8\ubc95\uc0ac\ub97c \ud2b8\ub9ac\uac70\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-363288\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/06\/qodana-init.png\" alt=\"Qodana \ucd08\uae30\ud654\" width=\"1918\" height=\"752\" \/><\/figure>\n<p>\uc801\uc808\ud55c Linter\uc640 \uc194\ub8e8\uc158 \ud30c\uc77c\uc744 \uc120\ud0dd\ud558\uba74 Qodana\uc5d0\uc11c \ub2e4\uc74c\uacfc \uc720\uc0ac\ud55c <code>qodana.yml<\/code> <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/qodana-yaml.html\" target=\"_blank\" rel=\"noreferrer noopener\">\uad6c\uc131 \ud30c\uc77c<\/a>\uc744 \uc0dd\uc131\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"yaml\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">version: \"1.0\"\n\nlinter: jetbrains\/qodana-dotnet:latest\n\ndotnet:\n  solution: MySolution.sln<\/pre>\n<p><em>.NET \uad00\ub828 \uc124\uc815\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/qodana-dotnet.html\" target=\"_blank\" rel=\"noreferrer noopener\">.NET\uc6a9 Qodana<\/a> \ubb38\uc11c\ub97c \ucc38\uc870\ud558\uc138\uc694.<\/em><\/p>\n<p>\uc774\uc81c <code>qodana scan --show-report<\/code> \ud638\ucd9c\ud574 \ub85c\uceec\uc5d0\uc11c Qodana \uac80\uc0ac\ub97c \uc2e4\ud589\ud560 \uc900\ube44\uac00 \ub41c \uac83\uc785\ub2c8\ub2e4.\u00a0\uac80\uc0ac\ub97c \uc644\ub8cc\ud558\uba74 Qodana\ub294 \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c <code>http:\/\/localhost:8080<\/code>\uc758 HTML \ubcf4\uace0\uc11c\ub97c \uc5fd\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-363310\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/06\/scan-initial-1.png\" alt=\"\ucd08\uae30 \uac80\uc0ac\" width=\"1754\" height=\"1792\" \/><\/figure>\n<p>\uc77c\ubc18\uc801\uc778 <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/ui-overview.html\" target=\"_blank\" rel=\"noreferrer noopener\">\uc0ac\uc6a9\uc790 \uc778\ud130\ud398\uc774\uc2a4 \uac1c\uc694<\/a>\ubfd0 \uc544\ub2c8\ub77c, <strong>\ud0dc\uadf8<\/strong> \ub4dc\ub86d\ub2e4\uc6b4\uc744 \ud65c\uc6a9\ud574 \ub300\uc0c1 \ud504\ub808\uc784\uc6cc\ud06c\ubcc4 .NET \ud504\ub85c\uc81d\ud2b8\ub97c \ud544\ud130\ub9c1\ud560 \uc218 \uc788\ub2e4\ub294 \uc810\uc774 \ub3cb\ubcf4\uc785\ub2c8\ub2e4.\u00a0\ub610\ud55c \uba4b\uc9c4 \uc120\ubc84\uc2a4\ud2b8 \ucc28\ud2b8\ub97c \uc0ac\uc6a9\ud574 \uacb0\uacfc\ub97c \ud544\ud130\ub9c1\ud558\ub294 \ubc29\ubc95\ub3c4 \ud655\uc778\ud574 \ubcf4\uc2dc\uc8e0!<\/p>\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-363321\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/06\/sunburst-chart2.jpg\" alt=\"\ub300\ud654\ud615 \uc120\ubc84\uc2a4\ud2b8 \ucc28\ud2b8\" width=\"679\" height=\"576\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/06\/sunburst-chart2.gif\" \/><\/figure>\n<p><em>\uc815\ub9d0 \ud6cc\ub96d\ud55c \uae30\ub2a5\uc785\ub2c8\ub2e4!<\/em> &#x1f60e;<\/p>\n<p>\uc870\uc0ac\ud560 \uc774\uc288\ub97c \ucc3e\uc73c\uba74 \ud574\ub2f9 \uc774\uc288\ub97c \ud655\uc7a5\ud574 \uc77c\ubc18\uc801 \uc774\uc288 \ud14d\uc2a4\ud2b8\/\uce74\ud14c\uace0\ub9ac\/\uc720\ud615 \uc678\uc758 \uc138\ubd80 \uc815\ubcf4\ub97c \ud45c\uc2dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\u00a0\uc138\ubd80 \uc815\ubcf4 \ud328\ub110\uc5d0\uc11c \uc2e4\uc81c \ucf54\ub4dc \uc2a4\ub2c8\ud3ab\uacfc \ud30c\uc77c \uacbd\ub85c \ubc0f \ub300\uc0c1 \ud504\ub808\uc784\uc6cc\ud06c\ub97c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\u00a0\ud2b9\ud788 IDE\uc5d0\uc11c \ubc14\ub85c \ud30c\uc77c\uc744 \uc5ec\ub294 <strong>Open file in Rider(Rider\uc5d0\uc11c \ud30c\uc77c \uc5f4\uae30)<\/strong> \ubc84\ud2bc\uacfc <a href=\"https:\/\/blog.jetbrains.com\/dotnet\/2023\/03\/20\/why-is-resharper-suggesting-this\/\"><em>Why is ReSharper suggesting this?(ReSharper\uc5d0\uc11c \uc774 \ud56d\ubaa9\uc744 \uc81c\uc548\ud558\ub294 \uc774\uc720)<\/em><\/a> \uc9c0\uc2dd \ubca0\uc774\uc2a4\ub85c \uc5f0\uacb0\ub418\ub294 \ud478\ud130 \ub178\ud2b8\uc5d0 \uc8fc\ubaa9\ud558\uc138\uc694.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-363332\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/06\/issue-details.png\" alt=\"\uc774\uc288 \uc138\ubd80 \uc815\ubcf4 \ubdf0\" width=\"1742\" height=\"816\" \/><\/figure>\n<h2 id=\"qodana-scans-in-cicd-environments\" class=\"wp-block-heading\">CI\/CD \ud658\uacbd\uc5d0\uc11c Qodana \uac80\uc0ac<\/h2>\n<p>Qodana\ub294 CI\/CD \ud658\uacbd\uc5d0 \ud1b5\ud569\ub420 \ub54c \ucd5c\uace0\uc758 \uc7a0\uc7ac\ub825\uc744 \ubc1c\ud718\ud569\ub2c8\ub2e4.\u00a0\ubaa8\ub4e0 \ube4c\ub4dc\uc5d0\uc11c \uc0c8\ub85c\uc6b4 \ubd84\uc11d \ubcf4\uace0\uc11c\uac00 \uc0dd\uc131\ub418\uba70, \ubcf4\uace0\uc11c\ub97c <a href=\"https:\/\/qodana.cloud\/\" target=\"_blank\" rel=\"noreferrer noopener\">Qodana Cloud<\/a>\uc5d0 \uc5c5\ub85c\ub4dc\ud558\uac70\ub098 Rider\uc5d0\uc11c \ub2e4\uc6b4\ub85c\ub4dc \ubc0f \uac80\uc0ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\u00a0\ub610\ud55c <a href=\"https:\/\/blog.jetbrains.com\/dotnet\/2016\/10\/04\/establishing-a-zero-warning-policy-with-resharpers-solution-wide-analysis\/\"><em>Establishing a zero-warning policy with ReSharper\u2019s solution-wide analysis<\/em><\/a> \ube14\ub85c\uadf8 \uac8c\uc2dc\ubb3c\uc5d0 \uc124\uba85\ub41c \uc811\uadfc \ubc29\uc2dd\uacfc \uc720\uc0ac\ud558\uac8c \ube4c\ub4dc \ud30c\uc774\ud504\ub77c\uc778\uc5d0 <em>\ud488\uc9c8 \uac8c\uc774\ud2b8<\/em>\ub97c \uc124\uc815\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.\u00a0\ucee4\ubc0b \ub610\ub294 \ud480 \ub9ac\ud018\uc2a4\ud2b8\uc5d0\uc11c \ucf54\ub4dc \uc774\uc288\uac00 \ubc1c\uc0dd\ud560 \ub54c\ub9c8\ub2e4 Qodana\ub294 \ube4c\ub4dc \uc2e4\ud328\ub97c \ud1b5\ud574 \uc0ac\uc6a9\uc790\uc5d0\uac8c \ud574\ub2f9 \uc774\uc288\ub97c \uc54c\ub9bd\ub2c8\ub2e4.<\/p>\n<p>\uac04\ub2e8\ud55c 3\ub2e8\uacc4\ub97c \uac70\uccd0 <strong>\ucf54\ub4dc \ud488\uc9c8 \uac8c\uc774\ud2b8<\/strong>\ub97c \ud65c\uc131\ud654\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\u00a0\ucc98\uc74c\ubd80\ud130 \uc2dc\uc791\ud558\ub294 \ud504\ub85c\uc81d\ud2b8\uac00 \uc544\ub2c8\ub77c\uba74, \uae30\uc874\uc758 \ubaa8\ub4e0 \uc774\uc288\ub97c <em>\ubca0\uc774\uc2a4\ub77c\uc778<\/em>(\ubc31\ub85c\uadf8\uc640 \uc720\uc0ac)\uc73c\ub85c \uc62e\uaca8 \uc7a5\uc560 \ubc1c\uc0dd \uac00\ub2a5\uc131\uc744 \ub0ae\ucd94\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/06\/baseline-download.png\" alt=\"\ubca0\uc774\uc2a4\ub77c\uc778 \ubcf4\uace0\uc11c \ub2e4\uc6b4\ub85c\ub4dc\" data-gif-src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/06\/baseline-download.gif\" \/><\/figure>\n<p>\ub450 \ubc88\uc9f8 \ub2e8\uacc4\ub85c, <code>failThreshold<\/code> \uac12\uc744 \uc0ac\uc6a9\ud574 <code>qodana.yml<\/code> \uad6c\uc131 \ud30c\uc77c\uc744 \ud655\uc7a5\ud574\uc57c \ud569\ub2c8\ub2e4.\u00a0\uc774 \ud504\ub85c\ud37c\ud2f0\ub294 \ubca0\uc774\uc2a4\ub77c\uc778\uacfc \ube44\uad50\ud560 \ub54c \ube4c\ub4dc \uc2e4\ud328 \uc5c6\uc774 \uc0c8\ub86d\uac8c \ubc1c\uc0dd\ud558\ub294 \uc774\uc288 \uac1c\uc218\ub97c \ubcf4\uc5ec\uc90d\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"yaml\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">version: \"1.0\"\n\nlinter: jetbrains\/qodana-dotnet:latest\nfailThreshold: 0\n\ndotnet:\n  solution: MySolution.sln<\/pre>\n<p>\uc138 \ubc88\uc9f8 \ub2e8\uacc4\ub85c, \ud604\uc7ac \ucf54\ub4dc \uc774\uc288 \uc9d1\ud569\uc744 <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/baseline.html\" target=\"_blank\" rel=\"noreferrer noopener\">\ubca0\uc774\uc2a4\ub77c\uc778<\/a>\uacfc \ube44\uad50\ud558\ub3c4\ub85d \ube4c\ub4dc \ud30c\uc774\ud504\ub77c\uc778\uc744 \uad6c\uc131\ud574\uc57c \ud569\ub2c8\ub2e4.\u00a0<code>--baseline qodana.sarif.json<\/code>\uc744 Qodana Scan \ud638\ucd9c\uc5d0 \uc804\ub2ec\ud558\uba74 \ub429\ub2c8\ub2e4.\u00a0<a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/quality-gate.html\" target=\"_blank\" rel=\"noreferrer noopener\">CI\/CD \ud658\uacbd\uc5d0\uc11c \ud488\uc9c8 \uac8c\uc774\ud2b8\ub97c \ud65c\uc131\ud654\ud558\ub294 \ubc29\ubc95<\/a>\uc744 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\ub824\uba74 Qodana \ubb38\uc11c\ub97c \ucc38\uc870\ud558\uc138\uc694.<\/p>\n<p>\ub610\ud55c <a href=\"https:\/\/qodana.cloud\/\" target=\"_blank\" rel=\"noreferrer noopener\">Qodana Cloud<\/a>\ub97c \ud65c\uc6a9\ud558\ub824\uba74 \ud658\uacbd \ubcc0\uc218\ub85c <code>QODANA_TOKEN<\/code>\uc744 \ucd94\uac00\ud558\uc138\uc694. \ud574\ub2f9 \ud658\uacbd \ubcc0\uc218\uac00 \ucd94\uac00\ub418\uba74 Qodana\uac00 \ubcf4\uace0\uc11c\ub97c \uc9c0\uc18d\uc801\uc73c\ub85c \uc5c5\ub85c\ub4dc\ud558\uc5ec \uacfc\uac70 \uae30\ub85d\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ubfd0 \uc544\ub2c8\ub77c \uc5b8\uc81c\ub4e0 <code>qodana show<\/code> \uba85\ub839\uc5b4\ub97c \ud1b5\ud574 \ub2e4\uc6b4\ub85c\ub4dc\ud55c \ubcf4\uace0\uc11c\ub97c \ub85c\uceec\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub2e4\uc74c Qodana \uac80\uc0ac\ub97c \uc2e4\ud589\ud558\uba74 \uc544\ub798\uc640 \uac19\uc774 \ubaa8\ub4e0 \uc774\uc288\uac00 <strong>Baseline(\ubca0\uc774\uc2a4\ub77c\uc778)<\/strong> \ud0ed\uc73c\ub85c \uc774\ub3d9\ub41c \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-364256\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/06\/scan-clean.png\" alt=\"\ud074\ub9b0 \uac80\uc0ac\" width=\"779\" height=\"464\" \/><\/figure>\n<p>\ub2e4\uc74c \uc139\uc158\uc5d0\uc11c\ub294 \uac00\uc7a5 \ub9ce\uc774 \uc0ac\uc6a9\ub418\ub294 CI\/CD \ud658\uacbd\uc5d0 Qodana\ub97c \ud1b5\ud569\ud558\ub294 \ubc29\ubc95\uc744 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.\u00a0\uc790\uc138\ud55c \ub0b4\uc6a9\uc740 <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/github.html\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub Actions<\/a>,\u00a0<a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/qodana-azure-pipelines.html\" target=\"_blank\" rel=\"noreferrer noopener\">Azure Pipelines<\/a>,\u00a0<a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/teamcity.html\" target=\"_blank\" rel=\"noreferrer noopener\">TeamCity<\/a>,\u00a0<a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/gitlab.html\" target=\"_blank\" rel=\"noopener\">GitLab<\/a>,\u00a0<a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/circleci.html\" target=\"_blank\" rel=\"noreferrer noopener\">CircleCI<\/a>,\u00a0<a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/space-automation.html\" target=\"_blank\" rel=\"noreferrer noopener\">Space Automation<\/a> \ubc0f\u00a0<a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/jenkins.html\" target=\"_blank\" rel=\"noreferrer noopener\">Jenkins<\/a> \uad00\ub828 \ubb38\uc11c\ub97c \ucc38\uc870\ud558\uc138\uc694.<\/p>\n<h3 id=\"qodana-in-github-actions\" class=\"wp-block-heading\">GitHub Actions\uc758 Qodana<\/h3>\n<p>GitHub Actions\uc5d0\uc11c \ube4c\ub4dc\ub41c \ubaa8\ub4e0 \ucee4\ubc0b \ubc0f \ud480 \ub9ac\ud018\uc2a4\ud2b8\uc758 <a href=\"https:\/\/docs.github.com\/en\/pull-requests\/collaborating-with-pull-requests\/collaborating-on-repositories-with-code-quality-features\/about-status-checks\" target=\"_blank\" rel=\"noreferrer noopener\">\uc0c1\ud0dc \uac80\uc0ac<\/a>\ub97c \uc704\ud574 Qodana\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-364267\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/06\/github-actions-checks.png\" alt=\"GitHub Actions \uac80\uc0ac\" width=\"608\" height=\"275\" \/><\/figure>\n<p>\ud2b9\ud788 \ud480 \ub9ac\ud018\uc2a4\ud2b8\uc758 \uacbd\uc6b0 \ucf54\ub4dc \uac80\ud1a0\uc790 \ubc0f \ucee4\ubbf8\ud130\uac00 \ud55c\ub208\uc5d0 \uc774\uc288\ub97c \uc989\uc2dc \ud30c\uc545\ud560 \uc218 \uc788\ub3c4\ub85d Qodana\uc5d0\uc11c \ucf54\ub4dc \uc5b4\ub178\ud14c\uc774\uc158\uc744 \ucd94\uac00\ud569\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-364278\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/06\/github-actions-annotations.png\" alt=\"GitHub \ucf54\ub4dc \uc5b4\ub178\ud14c\uc774\uc158\" width=\"908\" height=\"493\" \/><\/figure>\n<h3 id=\"qodana-in-azure-pipelines\" class=\"wp-block-heading\">Azure Pipelines\uc758 Qodana<\/h3>\n<p>Qodana\ub294 \uc5c5\uacc4 \ud45c\uc900\uc778 <a href=\"https:\/\/sarifweb.azurewebsites.net\/\" target=\"_blank\" rel=\"noreferrer noopener\">SARIF<\/a> \ud30c\uc77c\ub85c \ubcf4\uace0\uc11c\ub97c \uc0dd\uc131\ud558\ubbc0\ub85c <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=sariftools.scans\" target=\"_blank\" rel=\"noreferrer noopener\">SARIF SAST Scans(SARIF SAST \uac80\uc0ac) \ud0ed<\/a>\uc744 \ud1b5\ud574 Azure Pipelines\uc5d0 \ud1b5\ud569\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-364289\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/06\/azure-pipelines-report.png\" alt=\"Azure Pipelines SARIF \uac80\uc0ac \ud0ed\" width=\"2184\" height=\"1408\" \/><\/figure>\n<h3 id=\"qodana-in-teamcity\" class=\"wp-block-heading\">TeamCity\uc758 Qodana<\/h3>\n<p>JetBrains\uc758 \uac15\ub825\ud55c CI\/CD \ub3c4\uad6c\uc778 TeamCity\ub97c \uc0ac\uc6a9\ud558\uba74 Qodana \ubcf4\uace0\uc11c\uac00 \ube4c\ub4dc \uc138\ubd80 \uc815\ubcf4 \ubdf0\uc5d0\uc11c \ubcc4\ub3c4\uc758 \ud0ed\uc73c\ub85c \ud45c\uc2dc\ub429\ub2c8\ub2e4.\u00a0\ub2e4\ub978 \ube4c\ub4dc\uc758 \ubcf4\uace0\uc11c\uc640 \ube44\uad50\ud574 \ubcc0\uacbd \uc0ac\ud56d\uc744 \ud655\uc778\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-364300\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/06\/teamcity-report.png\" alt=\"TeamCity \ube4c\ub4dc \ud0ed\" width=\"2004\" height=\"878\" \/><\/figure>\n<p><em>\ud504\ub85c \ud301: <a href=\"https:\/\/www.jetbrains.com\/help\/teamcity\/including-third-party-reports-in-the-build-results.html\" target=\"_blank\" rel=\"noreferrer noopener\">TeamCity\uc5d0 \ub098\ub9cc\uc758 \ud0ed\uc744 \ucd94\uac00<\/a>\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4!<\/em><\/p>\n<p>\ub610\ud55c \ucf54\ub4dc \uc774\uc288\ub97c \uc2e4\ud328\ud55c \ud14c\uc2a4\ud2b8\ub85c \ucc98\ub9ac\ud558\ub294 \uac83\ub3c4 \uac00\ub2a5\ud569\ub2c8\ub2e4.\u00a0\ub530\ub77c\uc11c \uae30\uc874\uc758 <a href=\"https:\/\/www.jetbrains.com\/help\/teamcity\/investigating-and-muting-build-failures.html\" target=\"_blank\" rel=\"noreferrer noopener\">Investigating and Muting Build Failures(\ube4c\ub4dc \uc2e4\ud328 \uc870\uc0ac \ubc0f \ub044\uae30)<\/a> \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud574 \ub354 \ud6a8\uacfc\uc801\uc778 \ud300 \uc6cc\ud06c\ud50c\ub85c\ub97c \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-364311\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/06\/teamcity-assign.png\" alt=\"TeamCity \ucf54\ub4dc \uc774\uc288 \uc870\uc0ac \uacfc\uc81c\" width=\"2052\" height=\"1250\" \/><\/figure>\n<h2 id=\"qodana-reports-in-rider\" class=\"wp-block-heading\">Rider\uc758 Qodana \ubcf4\uace0\uc11c<\/h2>\n<p>Qodana\ub294 Rider \ubc0f \uae30\ud0c0 IntelliJ IDEA \ud30c\uc0dd \uc81c\ud488\uacfc \uc644\ubcbd\ud558\uac8c \ud1b5\ud569\ub429\ub2c8\ub2e4.\u00a0<a href=\"https:\/\/www.jetbrains.com\/help\/rider\/Problems_Tool_Window.html\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Problems(\ubb38\uc81c)<\/strong><\/a> \ub3c4\uad6c \ucc3d\uc758 <strong>Qodana<\/strong> \ud0ed\uc744 \uc0ac\uc6a9\ud558\uba74 \ubc1c\uacac\ub41c \ubaa8\ub4e0 \uc774\uc288\ub97c \uc0b4\ud3b4\ubcf4\uace0, \ubcc4\ub3c4\uc758 \ud328\ub110\uc5d0\uc11c \ubbf8\ub9ac \ubcf4\uace0, \ud574\uacb0\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4(<a href=\"https:\/\/www.jetbrains.com\/help\/rider\/Code_Analysis__Configuring_Warnings.html#suppress\" target=\"_blank\" rel=\"noreferrer noopener\">\uc774\uc288 \uc5b5\uc81c<\/a> \ub610\ub294 <a href=\"https:\/\/www.jetbrains.com\/help\/rider\/Code_Analysis__Configuring_Warnings.html#change_severity\" target=\"_blank\" rel=\"noreferrer noopener\">\uc2ec\uac01\ub3c4 \ubcc0\uacbd<\/a>\ub3c4 \uac00\ub2a5).<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-364322\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/06\/tool-window.png\" alt=\"Rider Qodana \ub3c4\uad6c \ucc3d\" width=\"2192\" height=\"976\" \/><\/figure>\n<p><em>\ub300\uc0c1 \ud504\ub808\uc784\uc6cc\ud06c\ubcc4 \ud544\ud130\ub9c1\uacfc \uac19\uc774 \ub3c4\uad6c \ucc3d\uc5d0 \ub354 \ub9ce\uc740 \ud544\ud130\ub9c1 \ubc0f \uadf8\ub8f9 \uc9c0\uc815 \uae30\ub2a5\uc744 \ucd94\uac00\ud560 \uacc4\ud68d\uc785\ub2c8\ub2e4.<\/em><\/p>\n<p>\uae30\ubcf8 \uc124\uc815\uc5d0 \ub530\ub77c Qodana \ubcf4\uace0\uc11c\ub97c Qodana Cloud\uc5d0\uc11c \uc790\ub3d9\uc73c\ub85c \uac00\uc838\uc624\uac70\ub098 \ubcf4\uace0\uc11c \ud30c\uc77c\uc5d0\uc11c \uc218\ub3d9\uc73c\ub85c \ub85c\ub4dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Qodana Cloud\ub97c \uc0ac\uc6a9\ud560 \uacbd\uc6b0 \uc124\uc815 \ub300\ud654\uc0c1\uc790\uc5d0\uc11c \ubc14\ub85c <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/qodana-ide-plugin.html#Log+in+to+Qodana+Cloud\" target=\"_blank\" rel=\"noreferrer noopener\">\ub85c\uadf8\uc778<\/a>\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\u00a0\ub85c\uadf8\uc778 \ud6c4 Rider\uc5d0\uc11c \ud604\uc7ac \ud504\ub85c\uc81d\ud2b8\ub97c Qodana Cloud \ud504\ub85c\uc81d\ud2b8\uc5d0 \uc5f0\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-364333\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/06\/linking-project2.png\" alt=\"Rider Qodana \ud504\ub85c\uc81d\ud2b8 \uc5f0\uacb0 \uc54c\ub9bc\" width=\"432\" height=\"145\" \/><\/figure>\n<p>Qodana Cloud \uacc4\uc815\uc774 \uc5c6\uac70\ub098 \ubcf4\uace0\uc11c\ub97c \uc218\ub3d9\uc73c\ub85c \ub85c\ub4dc\ud558\ub824\ub294 \uacbd\uc6b0\uc5d4 <strong>Open Qodana Analysis Report(Qodana \ubd84\uc11d \ubcf4\uace0\uc11c \uc5f4\uae30)<\/strong> \uc561\uc158\uc744 \uc0ac\uc6a9\ud558\uba74 \ub429\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-364355\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/06\/load-report.png\" alt=\"Qodana \ubd84\uc11d \ubcf4\uace0\uc11c \uc5f4\uae30 \uc561\uc158\" width=\"728\" height=\"289\" \/><\/figure>\n<h2 id=\"future-work\" class=\"wp-block-heading\">\ud5a5\ud6c4 \uacc4\ud68d<\/h2>\n<p>Qodana\ub294 \ube60\ub974\uac8c \uc131\uc7a5\ud558\uace0 \uc788\uc73c\uba70 \ucd5c\uadfc .NET \uc5d0\ucf54\uc2dc\uc2a4\ud15c\uc744 \uc704\ud55c \uae30\ub2a5\ub3c4 \ucc98\uc74c\uc73c\ub85c \uc120\ubcf4\uc600\uc2b5\ub2c8\ub2e4.\u00a0\uc774\ubbf8 \uc218\ub144 \ub3d9\uc548 \uc874\uc7ac\ud588\ub358 \uad6c\uc131 \uc694\uc18c(<em>InspectCode<\/em>)\ub97c \uae30\ubc18\uc73c\ub85c \uc804\uccb4 \ubd84\uc11d \uae30\ub2a5\uc774 \uc218\ud589\ub418\ubbc0\ub85c, \uc5c4\uccad\ub09c \uc2dc\ub108\uc9c0\ub97c \ub0bc \uc218 \uc788\uc2b5\ub2c8\ub2e4.\u00a0\ubb3c\ub860 Qodana \ud300\uc740 \uc55e\uc73c\ub85c \ub354 \ub9ce\uc740 \ud1b5\ud569\uc744 \uc120\ubcf4\uc77c \uacc4\ud68d\uc785\ub2c8\ub2e4!<\/p>\n<p><kbd>Alt-Enter<\/kbd>\ub97c \ud55c \ubc88 \ub20c\ub7ec\ubcf4\uc138\uc694!\u00a0\ucf54\ub4dc \uc774\uc288 \ubc0f \uc2a4\ud0c0\uc77c \uc704\ubc18\uc5d0 \ub300\ud55c \ube60\ub978 \uc218\uc815\uc744 CI\uc5d0\uc11c \uc790\ub3d9\uc73c\ub85c \uc801\uc6a9\ud560 \uc218 \uc788\ub2e4\uba74 \uc5b4\ub5a8\uae4c\uc694?\u00a0\uc774 \ubaa9\ud45c\ub294 \uc2dc\uac04\uc774 \uc18c\uc694\ub418\ub294 \uc791\uc5c5\uc774\ub098, \uac1c\ubc1c\uc790\uac00 \uc0c1\uc6a9\uad6c \ud0a4 \uc785\ub825 \uc2dc\uac04\uc744 \ub2e8\ucd95\ud558\uace0 \ud504\ub85c\uc81d\ud2b8\uc758 \ube44\uc988\ub2c8\uc2a4 \uac00\uce58\uc5d0 \ub354 \uc9d1\uc911\ud560 \uc218 \uc788\uc73c\ubbc0\ub85c \ud070 \ub3c4\uc6c0\uc774 \ub420 \uac81\ub2c8\ub2e4.<\/p>\n<p>\uc801\uadf9\uc801\uc73c\ub85c \uac1c\ubc1c \uc911\uc778 \uae30\ub2a5\uc740 <a href=\"https:\/\/www.jetbrains.com\/help\/qodana\/license-audit.html\" target=\"_blank\" rel=\"noreferrer noopener\">\ub77c\uc774\uc120\uc2a4 \uac10\uc0ac<\/a> \uae30\ub2a5\uc785\ub2c8\ub2e4.\u00a0\uc774 \uac80\uc0ac\ub294 \ud504\ub85c\uc81d\ud2b8 \ub77c\uc774\uc120\uc2a4\uac00 \uc885\uc18d\uc131(\uc608: NuGet \ud328\ud0a4\uc9c0) \ubc0f \ubaa8\ub4e0 \uc774\ud589\uc801 \uc885\uc18d\uc131 \ub77c\uc774\uc120\uc2a4 \uc900\uc218 \uc5ec\ubd80\ub97c \ud655\uc778\ud558\ub294 \ub370 \ub3c4\uc6c0\uc774 \ub429\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-364366\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/06\/license-audit.png\" alt=\"\ub77c\uc774\uc120\uc2a4 \uac10\uc0ac\" width=\"787\" height=\"395\" \/><\/figure>\n<h2 class=\"wp-block-heading\">\uacb0\ub860<\/h2>\n<p>Qodana\ub294 \ucf54\ub4dc\ubca0\uc774\uc2a4\uc5d0\uc11c \ud568\uaed8 \ucf54\ub4dc \ud488\uc9c8\uc744 \uac1c\uc120\ud558\ub294 \ud6cc\ub96d\ud55c \ub3c4\uad6c\ub85c, \ubaa8\ub4e0 JetBrains IDE \ubc0f \uc6d0\ud558\ub294 CI\/CD \ud658\uacbd\uc5d0 \uc644\ubcbd\ud788 \ud1b5\ud569\ub429\ub2c8\ub2e4.<\/p>\n<p><strong><a href=\"https:\/\/github.com\/JetBrains\/qodana-cli\" target=\"_blank\" rel=\"noreferrer noopener\">Qodana CLI<\/a>\ub97c \uc124\uce58<\/strong>\ud574 \uc194\ub8e8\uc158 \uc911 \ud558\ub098\uc5d0 \uc0ac\uc6a9\ud574 \ubcf4\uac70\ub098, <strong><a href=\"https:\/\/qodana.cloud\/\" target=\"_blank\" rel=\"noreferrer noopener\">Qodana Cloud<\/a>\ub97c \uad6c\ub3c5\ud574<\/strong> \ucf54\ub4dc \ud488\uc9c8 \uac1c\uc120\uc744 \uc190\uc27d\uac8c \uc9c0\uc18d\uc801\uc73c\ub85c \ucd94\uc801\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774 \uae00\uc744 \uc77d\uc5b4\uc8fc\uc154\uc11c \uac10\uc0ac\ud569\ub2c8\ub2e4. \uc758\uacac\uc774\ub098 \uc9c8\ubb38\uc774 \uc788\uc744 \uacbd\uc6b0 \ub313\uae00\ub780\uc5d0 \ub0a8\uaca8\uc8fc\uc138\uc694.<\/p>\n<p><em><sub>\uc774\ubbf8\uc9c0 \ud06c\ub808\ub527: <a href=\"https:\/\/unsplash.com\/photos\/AEE4G-6h858\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Jesse Gardner<\/a><\/sub><\/em><\/p>\n<p><em>\uac8c\uc2dc\ubb3c \uc6d0\ubb38 \uc791\uc131\uc790<\/em><\/p>\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/secure.gravatar.com\/avatar\/?s=200&#038;r=g\" width=\"200\" height=\"200\" alt=\"\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":964,"featured_media":435804,"comment_status":"closed","ping_status":"closed","template":"","categories":[4992,1401],"tags":[211,228,164,6359,2615],"cross-post-tag":[6687],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/dotnet\/435784"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/dotnet"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/types\/dotnet"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/users\/964"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/comments?post=435784"}],"version-history":[{"count":11,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/dotnet\/435784\/revisions"}],"predecessor-version":[{"id":438225,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/dotnet\/435784\/revisions\/438225"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/media\/435804"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/media?parent=435784"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/categories?post=435784"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/tags?post=435784"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/cross-post-tag?post=435784"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}