<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>gigabyte</title>
    <link>https://gigabyte.tistory.com/</link>
    <description>각종 프로그래밍 정보를 다루는 블로그입니다.</description>
    <language>ko</language>
    <pubDate>Thu, 2 Jul 2026 01:31:11 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>gigabyte</managingEditor>
    <item>
      <title>jquery를 사용하여 링크에서 HTML 텍스트 변경</title>
      <link>https://gigabyte.tistory.com/882</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jquery를 사용하여 링크에서 HTML 텍스트 변경&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서의 간단한 질문&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;여기를 클릭&quot; 텍스트를 변경할 수 있는 방법이 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;a id=&quot;a_tbnotesverbergen&quot; href=&quot;#nothing&quot;&amp;gt;click here&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 링크에서&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리차드.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 &lt;a href=&quot;https://api.jquery.com/text/#text-text&quot; rel=&quot;noreferrer&quot; papago-id=&quot;5-1&quot;&gt;jquery의 text() 기능&lt;/a&gt;을 사용해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일치하는 모든 요소의 결합된 텍스트 내용을 가져옵니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과는 일치하는 모든 요소의 결합된 텍스트 내용을 포함하는 문자열입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 방법은 HTML 및 XML 문서에서 모두 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;입력 요소에는 사용할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;입력 필드 텍스트에는 &lt;a href=&quot;https://api.jquery.com/val/#val1&quot; rel=&quot;noreferrer&quot; papago-id=&quot;7-1&quot;&gt;val&lt;/a&gt; 속성을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 단락에서 텍스트를 찾은 다음(html을 제거) 마지막 단락의 html을 텍스트로만 표시하도록 설정합니다(굵은 글씨가 사라졌습니다).&lt;/font&gt;&lt;/p&gt; 
 &lt;pre&gt;&lt;code&gt;var str = $(&quot;p:first&quot;).text();
$(&quot;p:last&quot;).html(str);
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;10-0&quot;&gt;단락&lt;/strong&gt; 테스트.&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단락 테스트.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마크업을 통해 다음을 수행해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('a#a_tbnotesverbergen').text('new text');
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 그것은 결과를 낳을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;a id=&quot;a_tbnotesverbergen&quot; href=&quot;#nothing&quot;&amp;gt;new text&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;찾고 있는 방법은 &lt;a href=&quot;https://api.jquery.com/text/#text-text&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;14-1&quot;&gt;jQuery의 .text()&lt;/a&gt;이며 다음과 같은 방법으로 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#a_tbnotesverbergen').text('text here');
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;$('#a_tbnotesverbergen').text('My New Link Text');
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;OR&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#a_tbnotesverbergen').html('My New Link Text or HTML');
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작업을 간단하게 수행하려면 J-query 라이브러리가 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script src=&quot;//code.jquery.com/jquery-1.11.3.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 요소를 다음과 같이 div에 넣어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div id=&quot;divClickHere&quot;&amp;gt;
&amp;lt;a id=&quot;a_tbnotesverbergen&quot; href=&quot;#nothing&quot;&amp;gt;click here&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 다음 J-Query 코드를 작성해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
$(document).ready(function(){
$(&quot;#a_tbnotesverbergen&quot;).click(function(){
$(&quot;#divClickHere a&quot;).text('Your new text');
});
});
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이것이 그 일을 완수하기 위한 가장 간단한 코드라는 것을 알았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;보시다시피 매우 간단합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원본 링크 텍스트의 경우&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    $(&quot;#sec1&quot;).text(Sector1);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어디에&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   Sector1 = 'my new link text';
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;W3 &lt;a href=&quot;http://www.w3schools.com/js/js_htmldom_html.asp&quot; rel=&quot;noreferrer&quot; papago-id=&quot;23-1&quot;&gt;학교 HTML DOM&lt;/a&gt; 변경 사항:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;세 번째 예를 보면 링크에서 텍스트를 변경할 수 있는 방법이 나와 있습니다. &quot;여기를 클릭하십시오.&quot;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;a id=&quot;a_tbnotesverbergen&quot; href=&quot;#nothing&quot;&amp;gt;click here&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var element=document.getElementById(&quot;a_tbnotesverbergen&quot;); 
element.innerHTML=&quot;New Text&quot;;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 자바스크립트로 시도해보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; document.getElementById(&quot;22IdMObileFull&quot;).text =&quot;itsClicked&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/901909/&lt;a href=&quot;https://stackoverflow.com/questions/901909/change-html-text-from-link-with-jquery&quot; target=&quot;_blank&quot; papago-id=&quot;26-1&quot;&gt;change-html-text-from-link-with-jquery&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/882</guid>
      <comments>https://gigabyte.tistory.com/882#entry882comment</comments>
      <pubDate>Sun, 27 Aug 2023 22:47:48 +0900</pubDate>
    </item>
    <item>
      <title>음수 탐지</title>
      <link>https://gigabyte.tistory.com/881</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;음수 탐지&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PHP에서 숫자가 음수인지 감지할 수 있는 방법이 있는지 궁금합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 코드가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-php prettyprint-override&quot;&gt;&lt;code&gt;$profitloss = $result-&amp;gt;date_sold_price - $result-&amp;gt;date_bought_price;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 그것이.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$profitloss&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부정적이고 만약 그렇다면, 저는 그것이 사실이라는 것을 다시 한번 강조해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;if ($profitloss &amp;lt; 0)
{
   echo &quot;The profitloss is negative&quot;;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;5-0&quot;&gt;편집&lt;/strong&gt;: 담당자에게 너무 단순한 답변이었던 것 같아 도움이 될 만한 내용이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PHP에서 우리는 정수의 절대값을 찾을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;abs()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 두 수치의 차이를 알아내려고 하면 다음과 같은 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$turnover = 10000;
$overheads = 12500;

$difference = abs($turnover-$overheads);

echo &quot;The Difference is &quot;.$difference;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 다음과 같은 결과를 낳습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;The Difference is 2500&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 당신이 찾던 것이라고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class Expression {
    protected $expression;
    protected $result;

    public function __construct($expression) {
        $this-&amp;gt;expression = $expression;
    }

    public function evaluate() {
        $this-&amp;gt;result = eval(&quot;return &quot;.$this-&amp;gt;expression.&quot;;&quot;);
        return $this;
    }

    public function getResult() {
        return $this-&amp;gt;result;
    }
}

class NegativeFinder {
    protected $expressionObj;

    public function __construct(Expression $expressionObj) {
        $this-&amp;gt;expressionObj = $expressionObj;
    }

    public function isItNegative() {
        $result = $this-&amp;gt;expressionObj-&amp;gt;evaluate()-&amp;gt;getResult();

        if($this-&amp;gt;hasMinusSign($result)) {
            return true;
        } else {
            return false;
        }
    }

    protected function hasMinusSign($value) {
        return (substr(strval($value), 0, 1) == &quot;-&quot;);
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;용도:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$soldPrice = 1;
$boughtPrice = 2;
$negativeFinderObj = new NegativeFinder(new Expression(&quot;$soldPrice - $boughtPrice&quot;));

echo ($negativeFinderObj-&amp;gt;isItNegative()) ? &quot;It is negative!&quot; : &quot;It is not negative :(&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 eval은 위험한 함수이므로 숫자가 음수인지 확인해야 하는 경우에만 사용하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:-)&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;if(x &amp;lt; 0)
if(abs(x) != x)
if(substr(strval(x), 0, 1) == &quot;-&quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 확인할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$profitloss &amp;lt; 0&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if ($profitloss &amp;lt; 0):
    echo &quot;Less than 0\n&quot;;
endif;
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;if ( $profitloss &amp;lt; 0 ) {
   echo &quot;negative&quot;;
};
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오해하지 마세요, 하지만 당신은 이런 식으로 할 수 있어요 ;)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function nagitive_check($value){
if (isset($value)){
    if (substr(strval($value), 0, 1) == &quot;-&quot;){
    return 'It is negative&amp;lt;br&amp;gt;';
} else {
    return 'It is not negative!&amp;lt;br&amp;gt;';
}
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;echo nagitive_check(-100);  // It is negative
echo nagitive_check(200);  // It is not negative!
echo nagitive_check(200-300);  // It is negative
echo nagitive_check(200-300+1000);  // It is not negative!
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;숫자에 -1을 곱해서 결과가 양성인지 확인하면 됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이와 같은 삼원 연산자를 사용하여 하나의 라이너로 만들 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;echo ($profitloss &amp;lt; 0) ? 'false' : 'true';
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;숫자가 음수인지 찾아서 올바른 형식으로 표시하는 것이 주요 아이디어라고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PHP 5.3을 사용하는 사람들은 Number Formatter Class - http://php.net/manual/en/class.&lt;a href=&quot;http://php.net/manual/en/class.numberformatter.php&quot; rel=&quot;nofollow&quot; papago-id=&quot;20-1&quot;&gt;numberformatter&lt;/a&gt;.php 를 사용하는 것에 관심이 있을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 기능뿐만 아니라 다양한 유용한 것들이 당신의 번호를 포맷할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$profitLoss = 25000 - 55000;

$a= new \NumberFormatter(&quot;en-UK&quot;, \NumberFormatter::CURRENCY); 
$a-&amp;gt;formatCurrency($profitLoss, 'EUR');
// would display (€30,000.00)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 음수에 대괄호를 사용하는 이유에 대한 참고 &lt;a href=&quot;http://www.open.edu/openlearn/money-management/introduction-bookkeeping-and-accounting/content-section-1.7&quot; rel=&quot;nofollow&quot; papago-id=&quot;21-1&quot;&gt;자료입니다.&lt;/a&gt; http://www.open.edu/openlearn/money-management/introduction-bookkeeping-and-accounting/content-section-1.7&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;3원 연산자로 쉽게 달성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$is_negative = $profitloss &amp;lt; 0 ? true : false;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 라라벨 프로젝트를 위해 헬퍼 기능을 작성했지만 어디서나 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function isNegative($value){
    if(isset($value)) {
        if ((int)$value &amp;gt; 0) {
            return false;
        }
        return (int)$value &amp;lt; 0 &amp;amp;&amp;amp; substr(strval($value), 0, 1) === &quot;-&quot;;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/6135275/&lt;a href=&quot;https://stackoverflow.com/questions/6135275/detecting-negative-numbers&quot; target=&quot;_blank&quot; papago-id=&quot;24-1&quot;&gt;detecting-negative-numbers&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/881</guid>
      <comments>https://gigabyte.tistory.com/881#entry881comment</comments>
      <pubDate>Sun, 27 Aug 2023 22:43:28 +0900</pubDate>
    </item>
    <item>
      <title>날짜가 날짜 시간과 같은지 확인하려면 어떻게 해야 합니까?오늘 저녁에?</title>
      <link>https://gigabyte.tistory.com/880</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;날짜가 날짜 시간과 같은지 확인하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;오늘 저녁에?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 조건은 항상 다음과 같이 평가됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;True&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시간을 비교하는 것이기 때문에 같은 날이라도.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from datetime import datetime

# ...

if date_num_posts &amp;lt; datetime.today(): 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;날짜가 다음 날짜와 같은지 확인하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;datetime.today()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;날짜를 비교하고 싶다면,&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;yourdatetime.date() &amp;lt; datetime.today().date()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면, 분명히,&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;yourdatetime.date() == datetime.today().date()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 당신이 그들이 &lt;em papago-id=&quot;7-1&quot;&gt;같은&lt;/em&gt; 날짜인지 확인하고 싶다면요.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://docs.python.org/library/datetime.html&quot; papago-id=&quot;8-0&quot;&gt;설명서&lt;/a&gt;는 일반적으로 유용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 또한 보통 첫번째 구글 결과입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;python thing_i_have_a_question_about&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;뱀&quot;이라는 이름의 기능/모듈에 대한 질문이 아니라면,&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;datetime&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모듈에는 특정 시점을 저장하는 세 가지 유형이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;date&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;년, 월, 일에 대해&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;time&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시간, 분, 초, 마이크로초, 시간대 정보&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;datetime&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;날짜와 시간을 결합합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;방법이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;date()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;time()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상응하는 것을 얻기 위해&lt;/font&gt;&lt;/font&gt;&lt;code&gt;date&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;time&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물건, 그리고 편리한 것이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;combine&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결합하는 기능&lt;/font&gt;&lt;/font&gt;&lt;code&gt;date&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;time&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 상태가.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;datetime&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;ul&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;월 값의 날짜만 비교해야 하는 경우 다음 코드를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;if yourdate.day == datetime.today().day:
    # do something
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 날짜 간의 차이가 허용되는지 확인해야 하는 경우 시간 &lt;a href=&quot;http://docs.python.org/release/2.6.6/library/datetime.html?highlight=timedelta#datetime.timedelta&quot; rel=&quot;noreferrer&quot; papago-id=&quot;24-1&quot;&gt;델타&lt;/a&gt;를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;if (datetime.today() - yourdate).days == 0:
    #do something
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;날짜 부분만 비교하려는 경우 다음과 같이 간단히 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;from datetime import datetime, date
if yourdatetime.date() &amp;lt; datetime.today().date()
    # do something
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시간 델타 형식은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 실제로 필요한 항목에 따라 일, 초, 밀리초, 분 등의 차이를 확인할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from datetime import datetime
if (datetime.today() - yourdate).days == 0:
    #do something
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 날짜가 정확히 동일한지 확인해야 하는 경우 시간 델타(0)를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from datetime import datetime, timedelta
if (datetime.today() - yourdate) == timedelta(0):
    #do something
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시간, 분, 초 및 마이크로초를 원하는 대로 설정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;datetime.datetime.today().replace(hour=0, minute=0, second=0, microsecond=0)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 진실의 답은 아마도 그들이 모두 0일 때 가장 좋을 것이고 당신은 단지 비교할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.date()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시대의&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 수백 번의 날짜를 비교해야 한다면 더 빠를 수도 있습니다. 왜냐하면 당신은 단지 그것을 하기만 하면 되기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;replace()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 번 대 수백 번의 전화 통화&lt;/font&gt;&lt;/font&gt;&lt;code&gt;date()&lt;/code&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;all(getattr(someTime,x)==getattr(today(),x) for x in ['year','month','day'])
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 사용하여 비교해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.date()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 예를 들어, 한 달 또는 분 단위로 비교하는 등의 경우를 위해 이 방법을 예로 남깁니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또 다른 방법은 날짜를 문자열로 변환하여 비교하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from datetime import datetime

today= datetime.today()

if today.strftime('%Y-%m-%d') == other_datetime.strftime('%Y-%m-%d'):
    print(&quot;same day as today: {0}&quot;.format(today.strftime('%Y-%m-%d')))
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/6407362/&lt;a href=&quot;https://stackoverflow.com/questions/6407362/how-can-i-check-if-a-date-is-the-same-day-as-datetime-today&quot; target=&quot;_blank&quot; papago-id=&quot;37-1&quot;&gt;how-can-i-check-if-a-date-is-the-same-day-as-datetime-today&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/880</guid>
      <comments>https://gigabyte.tistory.com/880#entry880comment</comments>
      <pubDate>Sun, 27 Aug 2023 22:39:40 +0900</pubDate>
    </item>
    <item>
      <title>sklearn에서 가져오기 오류: check_build 이름을 가져올 수 없습니다.</title>
      <link>https://gigabyte.tistory.com/879</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;sklearn에서 가져오기 오류: check_build 이름을 가져올 수 없습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;sklearn에서 가져오는 동안 다음 오류가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; from sklearn import svm

Traceback (most recent call last):
  File &quot;&amp;lt;pyshell#17&amp;gt;&quot;, line 1, in &amp;lt;module&amp;gt;
   from sklearn import svm
  File &quot;C:\Python27\lib\site-packages\sklearn\__init__.py&quot;, line 16, in &amp;lt;module&amp;gt;
   from . import check_build
ImportError: cannot import name check_build
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 파이썬 2.7, scipy-0.12.0b1 슈퍼팩, numpy-1.6.0 슈퍼팩, scikit-learn-0.11을 사용하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이 문제에 대한 몇 가지 답변을 확인했지만, 그 중 어느 것도 이 오류를 벗어날 수 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;scipy 설치 후 나를 위해 일했습니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; from sklearn import preprocessing, metrics, cross_validation

Traceback (most recent call last):
  File &quot;&amp;lt;pyshell#6&amp;gt;&quot;, line 1, in &amp;lt;module&amp;gt;
    from sklearn import preprocessing, metrics, cross_validation
  File &quot;D:\Python27\lib\site-packages\sklearn\__init__.py&quot;, line 31, in &amp;lt;module&amp;gt;
    from . import __check_build
ImportError: cannot import name __check_build
&amp;gt;&amp;gt;&amp;gt; ================================ RESTART ================================
&amp;gt;&amp;gt;&amp;gt; from sklearn import preprocessing, metrics, cross_validation
&amp;gt;&amp;gt;&amp;gt; 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러니, 껍질을 다시 시작해 보세요!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python 3.6.5 64비트 Windows 10용 솔루션:&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;code&gt;pip uninstall sklearn&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;pip uninstall scikit-learn&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;pip install sklearn&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령줄을 다시 시작할 필요는 없지만 원하는 경우 이 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 버그를 고치는 데 하루가 걸렸습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 되길 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설치 후&lt;/font&gt;&lt;/font&gt;&lt;code&gt;numpy&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;scipy&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sklearn&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여전히 오류가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;솔루션:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템 설정&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Path&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python &amp;amp; the의 변수&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PYTHONPATH&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;환경 변수&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템 변수: 추가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C:\Python34&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;경로로 사용자 변수: 새로 추가: (이름)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PYTHONPATH&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(값)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C:\Python34\Lib\site-packages;&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보통 제가 이런 종류의 오류를 받을 때, 그것을 엽니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;__init__.py&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일을 작성하고 도움말을 찾아봅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;디렉터리로 이동&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C:\Python27\lib\site-packages\sklearn&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하위 디렉터리가 있는지 확인하십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;__check_build&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫걸음으로&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 컴퓨터에 (작업 중인 sklearn 설치, Mac OSX, Python 2.7.3)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;__init__.py&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setup.py&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그들의 동료.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.pyc&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 및 이진 파일&lt;/font&gt;&lt;/font&gt;&lt;code&gt;_check_build.so&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주변을 찌르는 것.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;__init__.py&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 디렉토리에서 제가 취할 다음 단계는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sklearn/__init__.py&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 가져오기 문---check_build 항목은 내용이 올바르게 컴파일되었는지 확인하기만 하면 사전 컴파일된 이진 파일을 호출하는 것 외에는 아무 것도 하지 않는 것으로 보입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 이것은 당신 자신의 책임이며 (확실히) 해결책입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;빌드에 실패하면 곧 다른 더 큰 문제가 발생할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows에서도 동일한 문제가 발생했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Numpy+를 설치하여 해결했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/34710032/2314737&quot; papago-id=&quot;30-3&quot;&gt;이 답변&lt;/a&gt;에서 제안한 대로 http://www.lfd.uci.edu/ ~&lt;a href=&quot;http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;30-1&quot;&gt;gohlke/godlibs/#numpy&lt;/a&gt;의 MKL(여기서는 numpy+dll을 의존하는 다른 패키지보다 먼저 설치하는 것이 좋습니다).&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;python.org 에서 새로운 64비트 버전의 Python 3.4를 설치한 후 SKLEARN을 가져오는 데 문제가 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;알고 보니 SCIPY 모듈이 고장이 났고, &quot;스파이를 가져오려고&quot; 시도했을 때도 실패했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해결책은 scipy를 제거하고 pip3를 사용하여 다시 설치하는 것이었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;C:\&amp;gt; pip uninstall scipy

[lots of reporting messages deleted]

Proceed (y/n)? y
  Successfully uninstalled scipy-1.0.0

C:\Users\&amp;gt;pip3 install scipy

Collecting scipy
  Downloading scipy-1.0.0-cp36-none-win_amd64.whl (30.8MB)
    100% |████████████████████████████████| 30.8MB 33kB/s
Requirement already satisfied: numpy&amp;gt;=1.8.2 in c:\users\johnmccurdy\appdata\loca
l\programs\python\python36\lib\site-packages (from scipy)
Installing collected packages: scipy
Successfully installed scipy-1.0.0

C:\Users&amp;gt;python
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)]
 on win32
Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.
&amp;gt;&amp;gt;&amp;gt; import scipy
&amp;gt;&amp;gt;&amp;gt;
&amp;gt;&amp;gt;&amp;gt; import sklearn
&amp;gt;&amp;gt;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아나콘다 2.7 64비트를 사용한다면, 시도해보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;conda upgrade scikit-learn
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 파이썬 쉘을 다시 시작해, 나에게 효과가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동일한 문제에 직면하여 해결했을 때 두 번째 편집:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;conda upgrade scikit-learn
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나에게도 효과가 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 어떤 대답도 저에게는 통하지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;약간의 수정 후 제거된 sklearn:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;pip uninstall sklearn
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 여기서 sklearn 폴더를 제거했습니다. (시스템 및 파이썬 버전의 경로 조정)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;C:\Users\%USERNAME%\AppData\Roaming\Python\Python36\site-packages
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 이 사이트의 휠에서 설치했습니다. &lt;a href=&quot;https://www.lfd.uci.edu/~gohlke/pythonlibs/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;40-1&quot;&gt;링크&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류가 발생한 것은 아마도 다른 곳에 설치된 sklearn과 버전 충돌 때문일 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 최신 파이썬 버전(3.7)으로 신규에서 아나콘다를 설치하여 기존 코드를 새로운 설정으로 업그레이드하고 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from sklearn import cross_validation, 
from sklearn.grid_search import GridSearchCV
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from sklearn.model_selection import GridSearchCV,cross_validate
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;sklearn을 제거했다가 다시 설치할 필요가 없음&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from sklearn.model_selection import train_test_split
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 아나콘다를 다시 설치하는 것과 같은 문제를 겪었습니다. 문제를 해결했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;창에서:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;셸에서 sklearn을 삭제하려고 했습니다. pip 제거 sklearn, 다시 설치했지만 작동하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해결책:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;1- open the cmd shell.
2- cd c:\pythonVERSION\scripts
3- pip uninstall sklearn
4- open in the explorer: C:\pythonVERSION\Lib\site-packages
5- look for the folders that contains sklearn and delete them ..
6- back to cmd: pip install sklearn
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/15274696/&lt;a href=&quot;https://stackoverflow.com/questions/15274696/importerror-in-importing-from-sklearn-cannot-import-name-check-build&quot; target=&quot;_blank&quot; papago-id=&quot;50-1&quot;&gt;importerror-in-importing-from-sklearn-cannot-import-name-check-build&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/879</guid>
      <comments>https://gigabyte.tistory.com/879#entry879comment</comments>
      <pubDate>Sun, 27 Aug 2023 22:38:18 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boot 2.0.0.REASE 마이그레이션 후 &amp;quot;다른 크기의 튜플 및 별칭을 가져왔습니다&amp;quot; 예외</title>
      <link>https://gigabyte.tistory.com/878</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Spring Boot 2.0.0.REASE 마이그레이션 후 &quot;다른 크기의 튜플 및 별칭을 가져왔습니다&quot; 예외&lt;/font&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;//imports, etc.

@Entity
@Table(name = &quot;TSTRANS&quot;)
@SqlResultSetMappings(
        {                   
                @SqlResultSetMapping(name = TS_TRANS_EMP_STAT,
                        classes = {
                                @ConstructorResult(
                                        targetClass = EmpStat.class,
                                        columns = {
                                                @ColumnResult(name = &quot;EMPID&quot;, type = Long.class),
                                                @ColumnResult(name = &quot;CODE&quot;, type = String.class),
                                                @ColumnResult(name = &quot;TOTALCOUNT&quot;, type = Integer.class)
                                        }
                                )
                        })
        }
)
@NamedNativeQueries({
        @NamedNativeQuery(name = &quot;TsTrans.getStat&quot;, query = &quot;select * from SP_TASK_STATS_EMP  (:in_empid, :in_gidstr, :in_onlytodo)&quot;, resultSetMapping = TS_TRANS_EMP_STAT)
})
public class TsTrans extends TsTransCommon {
    public static final String TSTRANS_BADGE = &quot;TSTRANS_BADGE&quot;;

    private static final long serialVersionUID = -3391028108003625153L;
    public static final String TS_TRANS_EMP_STAT = &quot;TsTrans.empStat&quot;;
    public static final String TS_TRANS_SCHEDULE_STAT = &quot;TsTrans.getScheduleStat&quot;;
    public static final String TS_TRANS_FOLLOWUP = &quot;TS_TRANS_FOLLOWUP&quot;;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 실체입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// imports, etc.

public class EmpStat extends BaseStat {

    private static final long serialVersionUID = -4410895509438727581L;
    private Long mEmpid;

    public EmpStat(Long aEmpid, String aCode, Integer aTotalcount) {
        super(aCode, aTotalcount);
        mEmpid = aEmpid;
    }

    public Long getEmpid() {
        return mEmpid;
    }

    public void setEmpid(Long aEmpid) {
        mEmpid = aEmpid;
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 쿼리 반환 유형으로 명명된 비엔티티 pojo입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// imports, etc.

@Repository
public interface TsTransRepository extends TsTransCommonRepository&amp;lt;TsTrans&amp;gt; {
    List&amp;lt;EmpStat&amp;gt; getStat(@Param(&quot;in_empid&quot;) Long aEmpid, @Param(&quot;in_gidstr&quot;) String aGidstr, @Param(&quot;in_onlytodo&quot;) Boolean aOnlytodo);

}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 리포지토리 클래스입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;4-1&quot;&gt;이&lt;/strong&gt; 명명된 네이티브 쿼리를 사용하여 저장 프로시저에서 엔티티가 아닌 포조를 반환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Spring Boot 1.5.9부터 예외 없이 작동하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 Spring Boot 2.0.0에서.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;M7. 2.0.0.REASE로 마이그레이션한 후 다음과 같은 예외가 발생하기 시작했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;org.hibernate.HibernateException: Got different size of tuples and aliases
    at org.hibernate.jpa.spi.NativeQueryTupleTransformer$NativeTupleImpl.&amp;lt;init&amp;gt;(NativeQueryTupleTransformer.java:68) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
    at org.hibernate.jpa.spi.NativeQueryTupleTransformer.transformTuple(NativeQueryTupleTransformer.java:28) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
    at org.hibernate.hql.internal.HolderInstantiator.instantiate(HolderInstantiator.java:85) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
    at org.hibernate.loader.custom.CustomLoader.getResultList(CustomLoader.java:430) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2507) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
    at org.hibernate.loader.Loader.list(Loader.java:2502) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
    at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:335) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
    at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:2161) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
    at org.hibernate.internal.AbstractSharedSessionContract.list(AbstractSharedSessionContract.java:1016) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
    at org.hibernate.query.internal.NativeQueryImpl.doList(NativeQueryImpl.java:152) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
    at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1414) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
    at org.hibernate.query.Query.getResultList(Query.java:146) ~[hibernate-core-5.2.14.Final.jar:5.2.14.Final]
    at org.springframework.data.jpa.repository.query.JpaQueryExecution$CollectionExecution.doExecute(JpaQueryExecution.java:129) ~[spring-data-jpa-2.0.5.RELEASE.jar:2.0.5.RELEASE]
    at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:91) ~[spring-data-jpa-2.0.5.RELEASE.jar:2.0.5.RELEASE]
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:136) ~[spring-data-jpa-2.0.5.RELEASE.jar:2.0.5.RELEASE]
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:125) ~[spring-data-jpa-2.0.5.RELEASE.jar:2.0.5.RELEASE]
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:590) ~[spring-data-commons-2.0.5.RELEASE.jar:2.0.5.RELEASE]
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:578) ~[spring-data-commons-2.0.5.RELEASE.jar:2.0.5.RELEASE]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마이그레이션 중에 뭔가를 놓쳤습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jpa 2.1 퍼팅에서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@Query(nativeQuery = true)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리포지토리 인터페이스 메서드에 대한 주석으로 문제를 해결했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;참조:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/spring-projects/spring-data-examples/tree/master/jpa/jpa21#support-for-custom-sqlresultsetmapping-with-constructorresult&quot; rel=&quot;noreferrer&quot; papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/spring-projects/spring-data-examples/tree/master/jpa/jpa21#support-for-custom-sqlresultsetmapping-with-constructorresult&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;버그였는데, 이제 수정되었습니다: jira.spring.io/browse/&lt;a href=&quot;http://jira.spring.io/browse/DATAJPA-1280&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-1&quot;&gt;DATAJPA-1280&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Query(nativeQuery=true) 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저장소에 있는 새 메서드의 맨 위에 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변경 내용&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SqlResultSetMappings&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@SqlResultSetMappings({
    @SqlResultSetMapping(name = TS_TRANS_EMP_STAT,
        columns = {
            @ColumnResult(name = &quot;EMPID&quot;, type = Long.class),
            @ColumnResult(name = &quot;CODE&quot;, type = String.class),
            @ColumnResult(name = &quot;TOTALCOUNT&quot;, type = Integer.class)
        })
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 변화&lt;/font&gt;&lt;/font&gt;&lt;code&gt;EmpStat&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반 클래스에서 인터페이스로:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public interface EmpStat {
    Long getEMPID();
    String getCODE();
    Integer getTOTALCOUNT();
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해결책을 하나 더 찾았습니다. getStat()의 List에서 generic을 제거하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Repository
public interface TsTransRepository extends TsTransCommonRepository&amp;lt;TsTrans&amp;gt; {
    List getStat(@Param(&quot;in_empid&quot;) Long aEmpid, @Param(&quot;in_gidstr&quot;) String aGidstr, @Param(&quot;in_onlytodo&quot;) Boolean aOnlytodo);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 해결하는 방법은 여러 가지가 있으며, 대부분 다양한 jpa 및 스프링 데이터 기능의 조합입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 몇 가지 조사를 해서 https://jira.spring.io/browse/&lt;a href=&quot;https://jira.spring.io/browse/DATAJPA-1280&quot; rel=&quot;noreferrer&quot; papago-id=&quot;17-1&quot;&gt;DATAJPA-1280&lt;/a&gt; 발행에 추가했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;무엇을 할 수 있는지 알아보려면 이 프로젝트 https://github.com/EugeneNik/&lt;a href=&quot;https://github.com/EugeneNik/spring-data-datajpa-1280-example&quot; rel=&quot;noreferrer&quot; papago-id=&quot;17-3&quot;&gt;spring-data-datajpa-1280-example&lt;/a&gt; 을 보고 현재 어떤 접근 방식이 잘 작동하는지 테스트를 실행하십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 코드 변경 없이 마이그레이션을 수행할 수 있는 방법은 없지만 가장 간단한 방법은 리포지토리 방법에 클래스 투영 선언을 추가하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 매핑을 변경할 필요는 없지만 리포지토리 호출도 변경해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제를 해결하는 또 다른 방법일 뿐입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Repository
public interface TsTransRepository extends TsTransCommonRepository&amp;lt;TsTrans&amp;gt; 
{
    &amp;lt;T&amp;gt; List&amp;lt;T&amp;gt; getStat(@Param(&quot;in_empid&quot;) Long aEmpid, 
@Param(&quot;in_gidstr&quot;) String aGidstr, @Param(&quot;in_onlytodo&quot;) Boolean aOnlytodo, Class&amp;lt;T&amp;gt; beanProjection);

}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Spring Data JPA: https://jira.spring.io/browse/&lt;a href=&quot;https://jira.spring.io/browse/DATAJPA-1280&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;18-1&quot;&gt;DATAJPA-1280&lt;/a&gt; 의 이슈 보고서인 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해결 방법으로 Spring Data 릴리스 트레인 Kay-SR4(SR5는 현재 최신 버전이며 Spring Boot 2.0.0에서 사용되는 버전임)로 다운그레이드할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가만 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;spring-data-releasetrain.version&amp;gt;Kay-SR4&amp;lt;/spring-data-releasetrain.version&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 pom.xml에.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;properties&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부분.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 사람들이 지적했듯이, 이 버그는 Spring Boot 2.0.0에 도입되었고 &lt;a href=&quot;https://jira.spring.io/browse/DATAJPA-1280&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;22-1&quot;&gt;DATAJPA-1280&lt;/a&gt;에 보고되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Spring Boot 2.0.3에서 수정 및 릴리스되었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/49056084/&lt;a href=&quot;https://stackoverflow.com/questions/49056084/got-different-size-of-tuples-and-aliases-exception-after-spring-boot-2-0-0-rel&quot; target=&quot;_blank&quot; papago-id=&quot;24-1&quot;&gt;got-different-size-of-tuples-and-aliases-exception-after-spring-boot-2-0-0-rel&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/878</guid>
      <comments>https://gigabyte.tistory.com/878#entry878comment</comments>
      <pubDate>Tue, 18 Jul 2023 23:10:01 +0900</pubDate>
    </item>
    <item>
      <title>다이애나는 누구이며, 왜 그녀는 내 데이터베이스 개체를 컴파일하지 못하게 합니까?</title>
      <link>https://gigabyte.tistory.com/877</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다이애나는 누구이며, 왜 그녀는 내 데이터베이스 개체를 컴파일하지 못하게 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좋아요, 그래서 질문 제목은 약간 당황스럽지만 질문은 충분히 심각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;가끔 스키마의 개체를 컴파일하거나 덤프 파일을 가져올 때 다음 오류 메시지가 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ORA-04028: cannot generate diana for object SCOTT.VW_EMP
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 실제로 무엇을 의미하며, 어떻게 피할 수 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;관련 항목: PL/SQL, 패키지 크기, 트리 노드 구문 분석, 코드 행.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Diana는 데이터베이스 테이블의 구조와 PL/SQL 프로그램 단위의 논리를 속성 트리로 나타내는 Oracle의 인터페이스 정의 언어입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구문 분석 트리 노드 수에는 내부 제한이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴파일러 버전은 코드의 최대 행을 설정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 PL/SQL 로직의 크기와 코드 라인을 확인합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;버전이 처리할 수 있는 실제 제한을 아는 것은 불가능하거나 필요하지 않을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;패키지 크기를 올바르게 조정할 위치를 알면 문제의 절반이 해결됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나머지 절반도 해결되면 알려주세요, 감사합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류가 발생한 코드 조각을 공유해 주시겠습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 오류가 발생하는 이유를 이해하는 데 도움이 될 수 있는 설명이 있습니다. PL/SQL은 ADA라는 프로그래밍 언어를 기반으로 하기 때문에 PL/SQL에 프로그램을 작성할 때마다 트리 구조 중간 언어인 &quot;DIANA&quot; -&amp;gt; Ada에 대한 설명 중간 속성 표기법을 생성합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;DIANA는 컴파일러 및 기타 도구에서 내부적으로 사용됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작동 원리: 1) 컴파일 시 PL/SQL 소스 코드를 시스템 코드로 변환하여 해당 DIA를 생성합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하위 프로그램 또는 패키지의 DIAA 및 시스템 코드는 모두 데이터베이스에 저장됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행 시 공유 메모리 풀에 로드됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DIAEA는 종속 하위 프로그램을 컴파일하는 데 사용되며, 특히 하위 프로그램이 여전히 유효한지 확인/검증하는 데 사용됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하위 프로그램이 테이블, 보기, 동의어 또는 다른 저장된 프로시저와 같은 데이터베이스 개체를 사용할 수 있다는 것을 알고 있기 때문에 이 작업이 필요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음에 프로그램을 실행할 때 개체가 변경/변경/삭제되었을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 누군가 테이블을 떨어뜨렸을 수도 있고 저장된 프로세서 기능의 특성이 변경되었을 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DIANA를 사용하여 유효성 검사를 수행하면 시스템 코드가 실행됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로그램 제한:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;공유 메모리 풀에서 패키지 사양, ADT 사양, 독립 실행형 하위 프로그램 또는 익명 블록은 식별자, 키워드, 연산자 등과 같은 토큰에 해당하는 67108864(2**26) DIA 노드로 제한됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 PL/SQL 컴파일러에 의해 부과된 제한을 초과하지 않는 한 최대 6,000,000줄의 코드가 허용됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://docs.oracle.com/cd/E14072_01/appdev.112/e10472/limits.htm#&quot; papago-id=&quot;18-1&quot; rel=&quot;nofollow&quot;&gt;당신&lt;/a&gt;은 이 링크를 참조할 수 있습니다:&lt;a href=&quot;http://docs.oracle.com/cd/E14072_01/appdev.112/e10472/limits.htm#&quot; papago-id=&quot;18-1&quot; rel=&quot;nofollow&quot;&gt; &lt;/a&gt;http://docs.oracle.com/cd/E14072_01/appdev.112/e10472/limits.htm #&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 문제가 발생합니다. - ora-04028:&lt;/font&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원인은 다음 중 하나일 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동일한 뷰에서 선택하는 함수가 호출되는 뷰에서 선택하면 이 오류가 발생하는 버그가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스 서버, 클라이언트 또는 rman 카탈로그가 적합한 버전에 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;패치를 적용해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle 11g 인스턴스를 10.2.0.1 RMAN 카탈로그에 등록하려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작업이 성공하려면 카탈로그를 버전 10.2.0.3 이상으로 업그레이드합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오라클 &lt;a href=&quot;http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/limits.htm&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;24-1&quot;&gt;문서에 따르면&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PL/SQL은 프로그래밍 언어 Ada를 기반으로 합니다. PL/SQL은 트리 구조의 중간 언어인 Ada(DIANA)에 대한 설명 중간 속성 표기법의 변형을 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;IDL(Interface Definition Language)이라는 메타 표기법을 사용하여 정의되며, DIAA는 컴파일러 및 기타 도구에서 내부적으로 사용됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴파일 시 PL/SQL 소스 코드는 시스템에서 읽을 수 있는 m-code로 변환됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;절차 또는 패키지의 DIANA 및 m-code는 모두 데이터베이스에 저장됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행 시 공유 메모리 풀에 로드됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;DIANA는 종속 프로시저를 컴파일하는 데 사용되며, m-code는 단순히 실행됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유감스럽게도 구문 분석된 크기에서 다이아나 노드의 수를 추정할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 두 번째 장치에는 더 복잡한 SQL 문이 포함되어 있기 때문에 구문 분석 크기가 같은 두 프로그램 장치에는 각각 1500 및 2000 DIA 노드가 필요할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:571023051648&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;탐에게 묻기&lt;/font&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다이애나 노드 계산에 대한 자세한 내용은 이 책 &quot;&lt;strong papago-id=&quot;29-1&quot;&gt;Ada-Europe '93: 제12회&lt;/strong&gt; Ada-Europe &lt;strong papago-id=&quot;29-1&quot;&gt;국제 회의,&lt;/strong&gt; &quot;&lt;strong papago-id=&quot;29-1&quot;&gt;Ada&lt;/strong&gt; Sans &lt;strong papago-id=&quot;29-1&quot;&gt;Frontieres&quot;, 프랑스 파리, 1993년 &lt;/strong&gt;6월 &lt;strong papago-id=&quot;29-1&quot;&gt;14-18일을 &lt;/strong&gt;읽어보십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;29-1&quot;&gt; 의사록&quot;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 지원 참고 사항은 이 주제를 잘 다룹니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Article-ID:         &amp;lt;Note:62603.1&amp;gt;
Folder:             PLSQL
Topic:              General Information Articles
Title:              'PLS-123 Program too Large' - Size Limitations on PLSQL 
                    Packages
Document-Type:      BULLETIN
Impact:             MEDIUM
Skill-Level:        NOVICE
Server-Version:     07 to 08
Updated-Date:       13-JUN-2000 17:41:01
References:         
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;strong papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;개요&lt;/font&gt;&lt;/strong&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문서에는 PL/SQL 패키지 크기 제한에 대한 정보가 포함되어 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;한계에 도달하면 다음 오류가 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;PLS-123 Program too large
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;&lt;strong papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PL/SQL 패키지의 크기 제한&lt;/font&gt;&lt;/strong&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;8.1.3 이전 릴리스에서는 대형 프로그램으로 인해 PLS-123 오류가 발생했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제는 버그의 결과가 아니라 컴파일러의 실제 제한 때문에 발생했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PL/SQL 단위를 컴파일할 때 컴파일러는 구문 분석 트리를 작성합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PL/SQL 장치의 최대 크기는 구문 분석 트리의 크기에 따라 결정됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 트리에는 최대 개수의 다이아나 노드가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;7.3까지는 2 * * 14 (16K) 다이애나 노드를 가질 수 있었고, 8.0 ~ 8.1.3에서는 2 * 15 (32K) 다이애나 노드가 허용되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;8.1.3에서는 패키지 및 유형 본문에 대해 이 트리에 2 * * 26 (즉, 64M) 다이애나 노드를 가질 수 있도록 이 제한이 완화되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h2&gt;&lt;strong papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소스 코드 제한&lt;/font&gt;&lt;/strong&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소스 코드 줄의 측면에서 한계를 쉽게 변환할 수 있는 방법은 없지만, 소스 코드 줄당 약 5~10개의 노드가 있다는 것이 우리의 관찰이었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;8.1.3 이전 버전에서는 컴파일러가 최대 3,000줄의 코드를 깨끗하게 컴파일할 수 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;8.1.3부터는 패키지 본문과 형식 본문에 대한 제한이 완화되어 약 6,000,000줄의 코드를 가질 수 있게 되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: 이 새로운 제한은 패키지 본문 및 유형 본문에만 적용됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 이 특정 컴파일러 제한에 도달하기 전에 다른 컴파일러 제한에 도달하기 시작할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소스 코드 크기의 경우 토큰(식별자, 연산자, 함수 등)의 길이가 평균 4자라고 가정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 최대 값은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   Up to 7.3:         4 * (2 * * 14)=64K
   From 8.0 to 8.1.3: 4 * (2 * * 15)=128K
   With 8.1.3:        4 * (2 * * 25)=256M
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 대략적인 견적입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드에 공백이 많거나 식별자가 긴 경우 이보다 큰 소스 코드가 나타날 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;소스가 매우 짧은 식별자 등을 사용하는 경우 소스 코드가 이보다 작을 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 프로그램 단위당이므로 패키지 본문에 이 제한이 발생할 가능성이 높습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;h2&gt;&lt;strong papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;패키지의 현재 크기 확인 방법&lt;/font&gt;&lt;/strong&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;패키지의 크기를 확인하기 위해 사용할 수 있는 가장 가까운 관련 번호는 데이터 사전 보기 USER_OBJECT_SIZE에서 PARSED_SIZE입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 값은 SYS에 저장된 다이아나의 크기(바이트)를 제공합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;IDL_xxx$ 테이블이며 공유 풀의 크기가 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PL/SQL 코드의 DIANA 부분(컴파일 중에 사용됨)의 크기는 시스템 테이블보다 공유 풀에서 훨씬 큽니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 USER_OBJECT_SIZE의 PARSED_SIZE가 50K 이하인 경우 64K 제한과 관련된 문제가 발생하기 시작할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;패키지의 경우, DIAEA의 구문 분석된 크기 또는 크기는 사양 및 본문에 대해 별도로 적용되지 않고 전체 개체에만 적용됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;패키지에 대해 parsed_size를 선택하면 규격 및 본문에 대해 별도의 소스 및 코드 크기가 수신되지만 패키지 규격에 대해 라인에 출력되는 전체 개체에 대해 의미 있는 구문 분석 크기만 수신됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;패키지 본문의 줄에 있는 parsed_size에 대해 0이 출력됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 예에서는 이 동작을 보여 줍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CREATE OR REPLACE PACKAGE example AS  
  PROCEDURE dummy1;  
END example;  
/  
CREATE OR REPLACE PACKAGE BODY example AS  
  PROCEDURE dummy1 IS  
  BEGIN  
    NULL;  
  END;  
END;  
/  

SQL&amp;gt; start t1.sql;  

Package created.  


Package body created.  

SQL&amp;gt; select parsed_size from user_object_size where name='EXAMPLE';  


PARSED_SIZE  
-----------  
        185  
          0  


SQL&amp;gt; select * from user_object_size where name='EXAMPLE';  

  .....
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle은 DIAEA와 MCODE를 모두 데이터베이스에 저장합니다. MCODE는 실행되는 실제 코드이며, 특정 라이브러리 장치 X의 DIAEA에는 라이브러리 장치 X를 사용하여 절차를 컴파일하는 데 필요한 정보가 포함되어 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 몇 가지 참고 사항입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다이아나는 IDL로 대표됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;IDL의 선형 버전은 디스크에 저장됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제 구문 분석 트리가 작성되어 공유 풀에 저장됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 이유로 공유 풀의 DIANA 크기가 일반적으로 디스크보다 큽니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;호출된 프로시저에 대한 DIAA는 프로시저를 생성할 때만 공유 풀에 필요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로덕션 시스템에서는 공유 풀에 DIAEA가 필요하지 않습니다(단, MCODE에만 해당).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;릴리스 7.2부터는 패키지 본문의 DIAA가 버려지고 사용되지 않으며 데이터베이스에 저장되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 패키지 본체의 PARSED_SIZE(즉, DIANA의 크기)가 0인 이유입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 큰 절차와 기능은 항상 패키지 내에서 정의되어야 합니다!&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;패키지는 절차와 마찬가지로 데이터베이스의 DIAA에 저장됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 패키지를 사용하여 종속성 체인을 해제할 수 있으며, 이를 제거할 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 생산(실제) 코드는 패키지에 있어야 하며, 독립적인 절차나 기능에 있어서는 안 된다고 생각합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle 10.2.5(Unpublished Bug 9342254; 문서 ID 1505092.1 참조)에 Oracle 11.1 이상 수정이 있는 버그가 있습니다. 이 문제가 여기서 발생한 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;공유 풀의 플러시를 실행하여 해결할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ALTER SYSTEM FLUSH SHARED_POOL
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;NB. 이것은 매우 오래된 질문이지만, 다른 사람이 질문을 마주칠 경우를 대비하여 이 질문을 여기에 남깁니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Nineside와 저는 실제로 같은 회사에서 일했고, 이것을 독립적으로 발견했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;디버그 모드에서 큰 패키지를 컴파일할 때도 비슷한 문제가 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;디버깅 정보의 크기가 디버그 기호 테이블의 크기에 대한 컴파일러 제한을 초과하는 경우 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 사용하여 디버그 모드를 끌 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;alter session set plsql_debug=false; 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 전체 데이터베이스에 대해:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;alter system set plsql_debug=false;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/7764656/&lt;a href=&quot;https://stackoverflow.com/questions/7764656/who-is-diana-and-why-wont-she-let-my-database-objects-compile&quot; target=&quot;_blank&quot; papago-id=&quot;63-1&quot;&gt;who-is-diana-and-why-wont-she-let-my-database-objects-compile&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/877</guid>
      <comments>https://gigabyte.tistory.com/877#entry877comment</comments>
      <pubDate>Tue, 18 Jul 2023 23:09:20 +0900</pubDate>
    </item>
    <item>
      <title>어떤 것을 '시도'하고 예외를 포착하거나 예외를 피하는 것이 먼저 가능한지 테스트하는 것이 더 낫습니까?</title>
      <link>https://gigabyte.tistory.com/876</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 것을 '시도'하고 예외를 포착하거나 예외를 피하는 것이 먼저 가능한지 테스트하는 것이 더 낫습니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가 트해볼요까테를 테스트해 봐야 합니까?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;if&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 무가가유정당니다합나거효하언다▁something▁is정▁or▁valid니▁just.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;try&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것을 하고 예외를 잡는 것?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 가지 방법이 선호된다는 확실한 문서가 있습니까?&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;5-1&quot;&gt;한&lt;/em&gt; 가지 방법이 더 비단결적인가요?&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 다음과 같이 해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if len(my_list) &amp;gt;= 4:
    x = my_list[3]
else:
    x = 'NO_ABC'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;try:
    x = my_list[3]
except IndexError:
    x = 'NO_ABC'
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 생각들은...&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.python.org/dev/peps/pep-0020/&quot; papago-id=&quot;9-0&quot; rel=&quot;noreferrer&quot;&gt;PEP&lt;/a&gt; 20은 다음과 같이 &lt;a href=&quot;http://www.python.org/dev/peps/pep-0020/&quot; papago-id=&quot;9-0&quot; rel=&quot;noreferrer&quot;&gt;말합니다&lt;/a&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류는 절대 조용히 전달되어서는 안 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명시적으로 침묵하지 않는 한.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를사야합니다해를 사용해야 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;try&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;신에대 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;if&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소리 없이 전달되는 오류로 해석됩니까?&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 그렇다면, 당신은 이런 식으로 그것을 사용함으로써 그것을 확실히 침묵시키고, 그래서 그것을 괜찮게 만드는 것입니까?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 일을 한 가지 방법으로만 할 수 있는 상황을 말하는 것이 &lt;strong papago-id=&quot;15-1&quot;&gt;&lt;em papago-id=&quot;15-1-0&quot;&gt;아닙니다&lt;/em&gt;&lt;/strong&gt;. 예를 들어 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;try:
    import foo
except ImportError:
    import baz
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;은 당은선야합니다해호신합다▁prefer니▁should를 선호해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;try/except&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1파운드가 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;if/else&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇게 되면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속도 향상(예: 추가 검색 방지)&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클리너 코드(읽을 수 있는 줄/글꼴 표시)&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;종종, 이것들은 손에 잡힙니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;b papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속도 향상&lt;/font&gt;&lt;/b&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;긴 목록에서 다음 방법으로 요소를 찾으려는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;try:
    x = my_list[index]
except IndexError:
    x = 'NO_ABC'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시도, 제외하는 것이 가장 좋은 옵션입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;index&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 목록에 있을 수 있으며 인덱스 오류는 일반적으로 발생하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 추가 검색이 필요하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;if index &amp;lt; len(my_list)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python은&lt;b papago-id=&quot;27-0&quot;&gt; 예외를 사용할 것을 권장&lt;/b&gt;합니다. 이&lt;b papago-id=&quot;27-0&quot;&gt;&lt;em papago-id=&quot;27-0-1&quot;&gt; 예외&lt;/em&gt;&lt;/b&gt;는 &lt;b papago-id=&quot;27-0&quot;&gt;&lt;em papago-id=&quot;27-0-1&quot;&gt;Dive&lt;/em&gt;&lt;/b&gt; &lt;a href=&quot;http://www.diveintopython3.net/your-first-python-program.html#exceptions&quot; papago-id=&quot;27-2&quot; rel=&quot;noreferrer&quot;&gt;Into&lt;/a&gt; Python의 &lt;a href=&quot;http://www.diveintopython3.net/your-first-python-program.html#exceptions&quot; papago-id=&quot;27-2&quot; rel=&quot;noreferrer&quot;&gt;구문&lt;/a&gt;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예제에서는 &lt;em papago-id=&quot;27-4&quot;&gt;예외를 자동&lt;/em&gt;으로 통과시키지 않고 우아하게 처리할 뿐만 아니라 인덱스를 찾을 수 없는 &lt;em papago-id=&quot;27-6&quot;&gt;예외적&lt;/em&gt;인 경우에만 예외가 발생합니다(&lt;em papago-id=&quot;27-8&quot;&gt;따라서&lt;/em&gt; exception!).&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;b papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클리너 코드&lt;/font&gt;&lt;/b&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;공식 Python Documentation은 &lt;a href=&quot;https://docs.python.org/3/glossary.html?highlight=eafp#term-eafp&quot; rel=&quot;noreferrer&quot; papago-id=&quot;29-1&quot;&gt;EAFP&lt;/a&gt;: 허가보다 &lt;em papago-id=&quot;29-3&quot;&gt;용서를 구하는 것&lt;/em&gt;이 더 쉽다고 언급하고 &lt;a href=&quot;http://bayes.colorado.edu/PythonIdioms.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;29-5&quot;&gt;Rob&lt;/a&gt; Knight는 &lt;b papago-id=&quot;29-7&quot;&gt;오류를 피하는 대신&lt;/b&gt; 오류를 &lt;b papago-id=&quot;29-7&quot;&gt;잡는&lt;/b&gt; 것이 더 깨끗하고 코드를 읽기 쉽게 만들 수 &lt;b papago-id=&quot;29-7&quot;&gt;있다고&lt;/b&gt; 지적합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그의 예는 다음과 같이 말합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 나쁜 것 (&lt;em papago-id=&quot;30-1&quot;&gt;LBIL '뛰기 전에 살펴라'):&lt;/em&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#check whether int conversion will raise an error
if not isinstance(s, str) or not s.isdigit():
    return None
elif len(s) &amp;gt; 10:    #too many digits for int conversion
    return None
else:
    return int(s)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 나은&lt;em papago-id=&quot;31-1&quot;&gt;(EAFP: 허락보다 용서를 구하는 것&lt;/em&gt;이 더 &lt;em papago-id=&quot;31-1&quot;&gt;쉽습니다):&lt;/em&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;try:
    return int(s)
except (TypeError, ValueError, OverflowError): #int conversion failed
    return None
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우에는 완전히 다른 것을 사용해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;x = myDict.get(&quot;ABC&quot;, &quot;NO_ABC&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 일반적으로:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트가 자주 실패할 것으로 예상되는 경우&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;if&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 것에  비용이 ▁if▁use다▁relative니사▁is테합용▁test▁if스▁and▁expensive▁the▁exception▁operation▁the▁trying▁just▁catching▁to▁the을음다를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;try&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 두 가지 조건이 모두 적용되지 않는 경우 더 쉽게 읽을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;용사를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;try&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;except&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내부보다는 직접적으로&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;if&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;레이스 상태가 발생할 가능성이 있는 경우 항상 가드를 수행해야 &lt;em papago-id=&quot;39-1&quot;&gt;합니다&lt;/em&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 디렉토리가 있는지 확인하려면 다음 작업을 수행하지 마십시오.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import os, sys
if not os.path.isdir('foo'):
  try:
    os.mkdir('foo')
  except OSError, e
    print e
    sys.exit(1)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 스레드 또는 프로세스가 다음 사이에 디렉토리를 작성하는 경우&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;isdir&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mkdir&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 퇴장할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 다음 작업을 수행합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import os, sys, errno
try:
  os.mkdir('foo')
except OSError, e
  if e.errno != errno.EEXIST:
    print e
    sys.exit(1)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'foo' 디렉터리를 만들 수 없는 경우에만 종료됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 당신이 그것을 하기 전에 어떤 것이 실패할지를 확인하는 것이 사소한 것이라면, 당신은 아마도 그것을 선호해야 할 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;결국 예외(관련된 추적백 포함)를 구성하는 데 시간이 걸립니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음의 경우 예외를 사용해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예상치 못한 것들, 또는...&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; a 나이상의예논수하것뛰들는야어어넘을준리하예▁a)▁a것(▁(들▁where▁things하▁you▁of▁more(a)))&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;break&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;충분히 멀리 가지 못합니다.) 또는...&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사전에 무엇이 예외 사항을 처리할지 정확히 모르는 경우 또는...&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사전에 고장 여부를 확인하는 데 비용이 많이 드는 작업(단순히 작업을 시도하는 것보다 비용이 더 많이 드는 작업)&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;51&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;종종 실제 대답은 &quot;둘 다 아니다&quot;입니다. 예를 들어, 첫 번째 예에서, 당신이 정말로 &lt;em papago-id=&quot;51-1&quot;&gt;해야&lt;/em&gt; 할 일은 단지 사용하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.get()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본값을 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;x = myDict.get('ABC', 'NO_ABC')
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 게시물에서도 언급했듯이, 상황에 따라 다릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;특히 대규모 프로젝트에서 데이터를 사용할 때 데이터의 유효성을 미리 확인하는 대신 try/를 사용하면 몇 가지 위험이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시도 블록의 코드는 예외가 포착되기 전에 모든 종류의 혼란을 일으킬 수 있습니다. 만약 당신이 if 문으로 사전에 확인한다면 당신은 이것을 피할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TypeError(유형 오류) 또는 ValueError(값 오류)와 같은 일반적인 예외 유형을 호출한 경우, 예상했던 것과 동일한 예외를 실제로 감지하지 못할 수 있습니다. 예외가 발생할 수 있는 선에 도달하기 전이나 후에도 동일한 예외 클래스를 발생시킬 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 다음과 같이 가정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;try:
    x = my_list[index_list[3]]
except IndexError:
    x = 'NO_ABC'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;IndexError는 index_list 또는 my_list 요소를 가져올 때 발생했는지 여부에 대해 아무 말도 하지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;if 대신 try를 사용하는 것이 자동으로 전달되는 오류로 해석되어야 합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 그렇다면, 당신은 이런 식으로 그것을 사용함으로써 그것을 확실히 침묵시키고, 그래서 그것을 괜찮게 만드는 것입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;용사를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;try&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류가 전달될 수 있음을 인식하는 것으로, 오류를 자동으로 전달하는 것과 반대됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;용사를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;except&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전혀 통과하지 못하게 만들고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;용사를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;try: except:&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 경우 선호됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;if: else:&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;논리는 더 복잡합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단순함이 복잡함보다 낫고, 복잡함이 복잡함보다 낫고, 용서를 구하는 것이 허락보다 쉽습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;오류는 절대 조용히 지나가지 말아야 한다&quot;는 경고는 코드가 당신이 알고 있는 예외를 제기할 수 있는 경우와 당신의 설계가 가능성을 인정하지만 예외를 처리하는 방식으로 설계하지 않은 경우입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 보기에, 오류를 명시적으로 침묵시키는 것은 다음과 같은 일을 하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pass&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;순식간에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;except&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;블록 (block) 아정상이 &quot;무것하않것는&quot; 바올오른합류수니다야행어되하인만에서은&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt; (&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;가 잘 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;된 코드의 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;로 필요하다고 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt; 몇 번&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;중&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;입니다.)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(이것은 제가 잘 작성된 코드의 코멘트가 정말로 필요하다고 느끼는 몇 안 되는 경우 중 하나입니다.)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 특정 예제에서는 둘 다 적절하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;x = myDict.get('ABC', 'NO_ABC')
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러분이 일반적으로 이해하려는 욕구와 더 나은 예를 제시할 수 없다는 것을 인정하더라도 모두가 이것을 지적하는 이유는 상당한 경우에 동등한 부차적 단계가 실제로 존재하며, 그것들을 찾는 것이 문제를 해결하는 첫 번째 단계이기 때문입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 사용할 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;try/except&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제어 흐름에 대해서는 다음과 같이 자문해 보십시오.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언제인지 쉽게 알 수 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;try&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;블록이 성공하고 실패할 때?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 내부의 모든 &lt;em papago-id=&quot;43-1&quot;&gt;부작용&lt;/em&gt;을 알고 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;try&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 록블?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 모든 경우에 &lt;em papago-id=&quot;45-1&quot;&gt;대해&lt;/em&gt; 알고 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;try&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;블록이 예외를 던집니까?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약에 그 구현이&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;try&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변경을 차단합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 제어 흐름이 여전히 예상대로 작동합니까?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;80&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 이 질문들 중 하나 이상에 대한 답이 '아니오'라면, 아마도 여러분의 미래의 자신으로부터 많은 용서를 구할 수 있을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;81&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들면.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 최근에 다음과 같은 더 큰 프로젝트에서 코드를 보았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;try:
    y = foo(x)
except ProgrammingError:
    y = bar(x)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;82&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로그래머와 이야기를 나누면서 의도된 제어 흐름은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;83&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;x가 정수이면 y = foo(x)를 수행합니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;84&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;x가 정수 목록이면 y = bar(x)를 실행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;은 이은효있었니다습가과것▁because다니▁this 때문에 효과가 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;foo&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;50&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이면 쿼리가 할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;51&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;였고 정였를고  던집니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ProgrammingError&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;52&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한다면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;53&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리스트였습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;54&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;용사를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;try/except&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;55&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 선택하는 것은 좋지 않은 선택:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;56&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 예의이름외,,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ProgrammingError&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;57&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제 문제를 누설하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;58&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 정수가 아닙니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 이로 인해 진행 상황을 확인하기가 어렵습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;59&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 그&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ProgrammingError&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;60&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스 호출 중에 발생하여 시간을 낭비합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 그것이 밝혀진다면 상황은 정말 끔찍해질 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;foo&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;61&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예외를 발생시키거나 다른 시스템의 상태를 변경하기 전에 데이터베이스에 기록합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;62&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 여부는 불분명합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ProgrammingError&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;63&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 경우에만 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;64&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정수 목록입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 다음에 오타가 있다고 가정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;foo&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;65&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 데이터베이스 쿼리입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 또한 문제를 일으킬 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ProgrammingError&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;66&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 결과는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;bar(x)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;67&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 다음과 같은 경우에도 호출됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;x&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;68&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 정수입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이로 인해 암호화된 예외가 발생하거나 예측할 수 없는 결과가 발생할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;69&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 그&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;try/except&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;70&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;foo&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;71&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가 바뀔 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;foo&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;72&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리는 이제 그것이 목록을 어떻게 처리하는지 생각하고 그것이 확실히 해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ProgrammingError&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;73&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고, 말하자면, 그것이 아닙니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;AttributeError&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;74&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 전혀 오류가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;111&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적인 의미로 Python:&lt;a href=&quot;https://docs.python.org/2/howto/doanddont.html#exceptions&quot; papago-id=&quot;111-1&quot; rel=&quot;nofollow noreferrer&quot;&gt; 예외에서 Idioms&lt;/a&gt; 및 &lt;a href=&quot;https://docs.python.org/2/howto/doanddont.html#exceptions&quot; papago-id=&quot;111-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Anti-Idioms를 읽는 것&lt;/a&gt;을 고려할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;112&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 사람들이 언급한 것처럼 특정한 경우에는 다음을 사용해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;113&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;get(키[, 기본값])&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;114&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;키가 사전에 있는 경우 키 값을 반환하고, 그렇지 않은 경우 기본값을 반환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본값이 지정되지 않은 경우 기본값은 없음으로 설정되므로 이 메서드는 키 오류를 발생시키지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;115&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/7604636/&lt;a href=&quot;https://stackoverflow.com/questions/7604636/better-to-try-something-and-catch-the-exception-or-test-if-its-possible-first&quot; target=&quot;_blank&quot; papago-id=&quot;115-1&quot;&gt;better-to-try-something-and-catch-the-exception-or-test-if-its-possible-first&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/876</guid>
      <comments>https://gigabyte.tistory.com/876#entry876comment</comments>
      <pubDate>Tue, 18 Jul 2023 23:08:27 +0900</pubDate>
    </item>
    <item>
      <title>판다에서 인덱스 이름 제거</title>
      <link>https://gigabyte.tistory.com/875</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;판다에서 인덱스 이름 제거&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 데이터 프레임이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;In [10]: df
Out[10]: 
         Column 1
foo              
Apples          1
Oranges         2
Puppies         3
Ducks           4
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제거 방법&lt;/font&gt;&lt;/font&gt;&lt;code&gt;index name&lt;/code&gt; &lt;code&gt;foo&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 데이터 프레임에서?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;원하는 출력은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;In [10]: df
Out[10]: 
         Column 1             
Apples          1
Oranges         2
Puppies         3
Ducks           4
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 그냥 할당할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;None&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에게&lt;/font&gt;&lt;/font&gt;&lt;code&gt;index.name&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속성:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; df.index.name = None
&amp;gt;&amp;gt;&amp;gt; print(df)
         Column 1    
Apples          1
Oranges         2
Puppies         3
Ducks           4
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제게 맞는 답을 찾는 데 너무 오랜 시간이 걸렸습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래를 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df = df.rename_axis(None, axis=1)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 다른 답변들 중 일부는 다른 사람들에게 효과가 있을 것이라고 확신하지만, 확실히 저에게는 효과가 없었습니다 :(&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;del df.index.name&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;In [16]: df
Out[16]:
         Column 1
foo
Apples          1
Oranges         2
Puppies         3
Ducks           4

In [17]: del df.index.name

In [18]: df
Out[18]:
         Column 1
Apples          1
Oranges         2
Puppies         3
Ducks           4
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원본 버전&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0.18.0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;print df
         Column 1
foo              
Apples          1
Oranges         2
Puppies         3
Ducks           4

print df.index.name
foo


print df.rename_axis(None)
         Column 1
Apples          1
Oranges         2
Puppies         3
Ducks           4

print df.rename_axis(None).index.name
None

# To modify the DataFrame itself:
df.rename_axis(None, inplace=True)
print df.index.name
None
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 경우, 다음 코드를 사용하세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;판다 1.0.1에서 테스트되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df = df.rename_axis(index=None)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한 변경 - 제자리에서 수행:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df_degree.rename_axis(None, axis=1, inplace=True)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/29765548/&lt;a href=&quot;https://stackoverflow.com/questions/29765548/remove-index-name-in-pandas&quot; target=&quot;_blank&quot; papago-id=&quot;14-1&quot;&gt;remove-index-name-in-pandas&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/875</guid>
      <comments>https://gigabyte.tistory.com/875#entry875comment</comments>
      <pubDate>Tue, 18 Jul 2023 23:07:34 +0900</pubDate>
    </item>
    <item>
      <title>JAXB에서 JAXB 요소가 필요한 이유와 시기는 무엇입니까?</title>
      <link>https://gigabyte.tistory.com/874</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JAXB에서 JAXB 요소가 필요한 이유와 시기는 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 방금 JAXB(XML Binding을 위한 Java Architecture)를 배우고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;몇 가지 출처를 통해 읽으며, 한 가지 의심이 제 마음속에 떠올랐습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;JAXBElement&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;b papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle 문서는 다음과 같이 말합니다.&lt;/font&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;When XML element information can not be inferred by the derived Java representation of the XML content, a JAXBElement object is provided. This object has methods for getting and setting the object name and object value.&lt;/code&gt; &lt;a href=&quot;http://docs.oracle.com/javaee/5/tutorial/doc/bnazq.html#bnazv&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에 링크&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;b&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇다는 뜻입니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;JAXBElement&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스키마 정의 데이터 유형과 Java 데이터 유형 사이에 직접 매핑이 없을 때 사용해야 합니까?&lt;/font&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한, 아래에 나열된 코드 예제 중 하나입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.javacodegeeks.com/2011/02/jaxb-generate-xml-xsd.html&quot; papago-id=&quot;7-1&quot;&gt;내&lt;/a&gt;가 여기서 따라온 것:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; ObjectFactory factory = new ObjectFactory();

    UserT user = factory.createUserT();
    user.setUserName(&quot;Sanaulla&quot;);
    ItemT item = factory.createItemT();
    item.setItemName(&quot;Seagate External HDD&quot;);
    item.setPurchasedOn(&quot;August 24, 2010&quot;);
    item.setAmount(new BigDecimal(&quot;6776.5&quot;));

    ItemListT itemList = factory.createItemListT();
    itemList.getItem().add(item);

    ExpenseT expense = factory.createExpenseT();// we get expense object here
    expense.setUser(user);
    expense.setItems(itemList);

    JAXBContext context = JAXBContext.newInstance(&quot;generated&quot;);
    JAXBElement&amp;lt;ExpenseT&amp;gt; element = factory.createExpenseReport(expense);//why is this required
    Marshaller marshaller = context.createMarshaller();
    marshaller.setProperty(&quot;jaxb.formatted.output&quot;,Boolean.TRUE);
    marshaller.marshal(element,System.out);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ExpenseT expense = factory.createExpenseT();&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리는 얻을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ExpenseT&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물건.&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 코드에서 우리가 본다면, 우리는 창조합니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;code&gt;JAXBElement&amp;lt;ExpenseT&amp;gt; element = factory.createExpenseReport(expense);&lt;/code&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://jaxb.java.net/tutorial/section_4_1-Building-and-Marshalling-an-XML-Document.html&quot; papago-id=&quot;9-1&quot;&gt;이&lt;/a&gt; 출처에 &lt;a href=&quot;https://jaxb.java.net/tutorial/section_4_1-Building-and-Marshalling-an-XML-Document.html&quot; papago-id=&quot;9-1&quot;&gt;따르면&lt;/a&gt; 그것은 포장지입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;expense&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물건.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반면에 다음을 사용하여 검색된 개체에 대한 래퍼를 만들지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;code&gt;UserT user = factory.createUserT();&lt;/code&gt; &lt;br&gt;&lt;br&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;strong papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 제 질문은:&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt; &lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;무엇이 필요합니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;JAXBElement&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 휘감고 다니다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;expense&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용 시기&lt;/font&gt;&lt;/font&gt;&lt;code&gt;JAXBElement&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 몇 가지 사용 사례가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;JAXBElement&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필수 항목:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소는 둘 다입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;nillable=&quot;true&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;minOccurs=&quot;0&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 무엇을 합니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매핑된 필드/메모 평균에서?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;속성이 다음과 같을 때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;JAXBElement&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;null 값은 요소가 존재하지 않으며 a&lt;/font&gt;&lt;/font&gt;&lt;code&gt;JAXBElement&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;rapping null은 다음을 포함하는 XML 요소를 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;xsi:nil=&quot;true&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이름이 동일한 복합 유형의 전역 요소가 2개 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JAXB에서 클래스는 복잡한 유형에 해당하므로 어떤 루트 요소를 만났는지 캡처할 수 있는 방법이 필요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은 제가 &lt;a href=&quot;http://blog.bdoughan.com/2012/07/jaxb-and-root-elements.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;30-1&quot;&gt;작성&lt;/a&gt;한 이 기사를 참조하십시오.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 중 하나가 선택되는 구조가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;foo&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;bar&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소가 발생할 수 있으며 동일한 유형입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;JAXBElement&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단순히 마주치기 때문에 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;String&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;값이 부족하여 마셜링할 요소를 나타낼 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 포함하는 요소&lt;/font&gt;&lt;/font&gt;&lt;code&gt;xsi:nil&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속성이 포함된 문서에서 발견되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 예에서는 해당 요소에 해당하는 개체를 여전히 제거하여 속성 값을 유지할 수 있지만 JAXBElement는 여전히 요소가 null이었음을 나타낼 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JAXElement는 객체 모델에 충분한 정보가 없는 사용 사례에서 요소 이름/이름 공간을 보존하는 데 사용됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대체 그룹과 함께 사용되는 경우가 많습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JAXB 메타데이터를 사용하지 않으면 결과가 JAXBE 요소로 포장됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;@XmlRootElement 주석을 사용하여 루트 수준 JAXElement를 제거할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;외부 소스의 xsd 파일을 사용하는 경우 생성된 클래스에서 XmlRootElement 주석을 사용할 수 없는 경우 JAXElement 래퍼를 사용하여 xml을 개체로 마샬링 해제할 수 있으므로 Marshalling 프로세스 중에 JAXElement를 사용하는 것이 유용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 클래스를 지정하는 것 자체가 작동하지 않는다는 것을 알게 될 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;JAXBElement&amp;lt;Object&amp;gt; je = (JAXBElement&amp;lt;Object&amp;gt;) unmarshaller.unmarshal(objectXML);
Object = je.getValue();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 JAXB 예외가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Object obj = (Object) unmarshaller.unmarshal(objectXML);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/20396375/&lt;a href=&quot;https://stackoverflow.com/questions/20396375/why-and-when-jaxbelement-is-required-in-jaxb&quot; target=&quot;_blank&quot; papago-id=&quot;43-1&quot;&gt;why-and-when-jaxbelement-is-required-in-jaxb&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/874</guid>
      <comments>https://gigabyte.tistory.com/874#entry874comment</comments>
      <pubDate>Tue, 18 Jul 2023 23:06:47 +0900</pubDate>
    </item>
    <item>
      <title>PyMongo에서 MongoDB 컬렉션을 삭제하는 방법</title>
      <link>https://gigabyte.tistory.com/873</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PyMongo에서 MongoDB 컬렉션을 삭제하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수집이 존재하고 비어 있는 경우(수집에서 모두 제거) PyMongo에서 확인하는 방법은 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 해봤어요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;collection.remove()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;collection.remove({})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 수집을 삭제하지는 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게 하는 거지?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Pymongo의 샘플 코드와 설명:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from pymongo import MongoClient
connection = MongoClient('localhost', 27017) #Connect to mongodb

print(connection.database_names())  #Return a list of db, equal to: &amp;gt; show dbs

db = connection['testdb1']          #equal to: &amp;gt; use testdb1
print(db.list_collection_names())        #Return a list of collections in 'testdb1'
print(&quot;posts&quot; in db.list_collection_names())     #Check if collection &quot;posts&quot; 
                                            #  exists in db (testdb1)

collection = db['posts']
print(collection.count() == 0)    #Check if collection named 'posts' is empty

collection.drop()                 #Delete(drop) collection named 'posts' from db and all documents contained. 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.drop()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.remove()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.drop&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;2-1&quot;&gt;자세한&lt;/a&gt; 내용은 설명서를 참조하십시오. http://api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.drop&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;=====&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 질문을 오해해서 죄송합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컬렉션이 있는지 확인하려면 방법을 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;collection_names&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; collection_name in database.list_collection_names()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컬렉션이 비어 있는지 확인하려면 다음을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; collection.count() == 0
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;둘 다 결과적으로 True 또는 False를 반환합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용해 보셨습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;db.collection.remove();&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/9822575/&lt;a href=&quot;https://stackoverflow.com/questions/9822575/how-to-delete-a-mongodb-collection-in-pymongo&quot; target=&quot;_blank&quot; papago-id=&quot;15-1&quot;&gt;how-to-delete-a-mongodb-collection-in-pymongo&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/873</guid>
      <comments>https://gigabyte.tistory.com/873#entry873comment</comments>
      <pubDate>Tue, 18 Jul 2023 23:05:35 +0900</pubDate>
    </item>
    <item>
      <title>폭 우선 검색에서 경로를 추적하는 방법은 무엇입니까?</title>
      <link>https://gigabyte.tistory.com/872</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;폭 우선 검색에서 경로를 추적하는 방법은 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 예와 같이 폭 우선 검색의 경로를 추적하는 방법은 무엇입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/thumb/3/33/Breadth-first-tree.svg/300px-Breadth-first-tree.svg.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;키를 검색하는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;11&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1에서 11을 연결하는 가장 &lt;strong papago-id=&quot;3-1&quot;&gt;짧은&lt;/strong&gt; 목록을 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[1, 4, 7, 11]
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 먼저 http://en.wikipedia.org/wiki/&lt;a href=&quot;http://en.wikipedia.org/wiki/Breadth-first_search&quot; rel=&quot;noreferrer&quot; papago-id=&quot;4-1&quot;&gt;Breadth-first_search&lt;/a&gt; 을 살펴봤어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래는 빠른 구현으로, 목록을 사용하여 경로 대기열을 나타냅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# graph is in adjacent list representation
graph = {
        '1': ['2', '3', '4'],
        '2': ['5', '6'],
        '5': ['9', '10'],
        '4': ['7', '8'],
        '7': ['11', '12']
        }

def bfs(graph, start, end):
    # maintain a queue of paths
    queue = []
    # push the first path into the queue
    queue.append([start])
    while queue:
        # get the first path from the queue
        path = queue.pop(0)
        # get the last node from the path
        node = path[-1]
        # path found
        if node == end:
            return path
        # enumerate all adjacent nodes, construct a 
        # new path and push it into the queue
        for adjacent in graph.get(node, []):
            new_path = list(path)
            new_path.append(adjacent)
            queue.append(new_path)

print bfs(graph, '1', '11')
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인쇄할 내용:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;['1', '4', '7', '11']&lt;/code&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또 다른 방법은 각 노드에서 상위 노드로의 매핑을 유지 관리하고 인접 노드를 검사할 때 상위 노드를 기록하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;검색이 완료되면 상위 매핑에 따라 역추적하기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;graph = {
        '1': ['2', '3', '4'],
        '2': ['5', '6'],
        '5': ['9', '10'],
        '4': ['7', '8'],
        '7': ['11', '12']
        }

def backtrace(parent, start, end):
    path = [end]
    while path[-1] != start:
        path.append(parent[path[-1]])
    path.reverse()
    return path
        

def bfs(graph, start, end):
    parent = {}
    queue = []
    queue.append(start)
    while queue:
        node = queue.pop(0)
        if node == end:
            return backtrace(parent, start, end)
        for adjacent in graph.get(node, []):
            if node not in queue :
                parent[adjacent] = node # &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt; record its parent 
                queue.append(adjacent)

print bfs(graph, '1', '11')
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 코드는 주기가 없다는 가정에 근거합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아주 쉬운 코드.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;노드를 검색할 때마다 경로를 계속 추가합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;graph = {
         'A': set(['B', 'C']),
         'B': set(['A', 'D', 'E']),
         'C': set(['A', 'F']),
         'D': set(['B']),
         'E': set(['B', 'F']),
         'F': set(['C', 'E'])
         }
def retunShortestPath(graph, start, end):

    queue = [(start,[start])]
    visited = set()

    while queue:
        vertex, path = queue.pop(0)
        visited.add(vertex)
        for node in graph[vertex]:
            if node == end:
                return path + [end]
            else:
                if node not in visited:
                    visited.add(node)
                    queue.append((node, path + [node]))
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 Qiao의 첫 번째 대답이 매우 좋았습니다!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 유일하게 누락된 것은 꼭짓점을 방문한 것으로 표시하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜 우리가 그것을 해야 합니까?&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;노드 11에서 연결된 노드 13번이 있다고 가정해 보겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 우리의 목표는 노드 13을 찾는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;약간의 실행 후 대기열은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[[1, 2, 6], [1, 3, 10], [1, 4, 7], [1, 4, 8], [1, 2, 5, 9], [1, 2, 5, 10]]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;끝에 노드 번호 10이 있는 두 개의 경로가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 노드 번호 10의 경로가 두 번 확인됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 노드 번호 10에는 아이가 없기 때문에 그렇게 나쁘지 않아 보입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 정말 나쁠 수 있습니다(여기서도 우리는 이유 없이 그 노드를 두 번 확인할 것입니다...).)&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;노드 번호 13이 해당 경로에 없으므로 마지막에 노드 번호 10이 있는 두 번째 경로에 도달하기 전에 프로그램이 반환되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 우리는 그것을 다시 확인할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리가 놓치고 있는 것은 방문한 노드를 표시하고 다시 확인하지 않는 세트입니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 수정 후 qiao의 코드입니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;graph = {
    1: [2, 3, 4],
    2: [5, 6],
    3: [10],
    4: [7, 8],
    5: [9, 10],
    7: [11, 12],
    11: [13]
}


def bfs(graph_to_search, start, end):
    queue = [[start]]
    visited = set()

    while queue:
        # Gets the first path in the queue
        path = queue.pop(0)

        # Gets the last node in the path
        vertex = path[-1]

        # Checks if we got to the end
        if vertex == end:
            return path
        # We check if the current node is already in the visited nodes set in order not to recheck it
        elif vertex not in visited:
            # enumerate all adjacent nodes, construct a new path and push it into the queue
            for current_neighbour in graph_to_search.get(vertex, []):
                new_path = list(path)
                new_path.append(current_neighbour)
                queue.append(new_path)

            # Mark the vertex as visited
            visited.add(vertex)


print bfs(graph, 1, 13)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로그램의 출력은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[1, 4, 7, 11, 13]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;불필요한 재점검 없이는..&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;재미로 코드를 작성해 볼까 생각했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;graph = {
        '1': ['2', '3', '4'],
        '2': ['5', '6'],
        '5': ['9', '10'],
        '4': ['7', '8'],
        '7': ['11', '12']
        }

def bfs(graph, forefront, end):
    # assumes no cycles

    next_forefront = [(node, path + ',' + node) for i, path in forefront if i in graph for node in graph[i]]

    for node,path in next_forefront:
        if node==end:
            return path
    else:
        return bfs(graph,next_forefront,end)

print bfs(graph,[('1','1')],'11')

# &amp;gt;&amp;gt;&amp;gt;
# 1, 4, 7, 11
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주기를 원하는 경우 다음을 추가할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for i, j in for_front: # allow cycles, add this code
    if i in graph:
        del graph[i]
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 @Qiao 첫 번째 답변과 @Or의 추가를 모두 좋아합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;조금 덜 처리하기 위해 Or의 답변에 추가하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;In @Or의 답변은 방문한 노드를 추적하는 것이 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로그램이 현재보다 빨리 종료되도록 할 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;포 루프의 어느 지점에서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;current_neighbour&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 되어야 할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;end&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 짧은 경로가 발견되고 프로그램이 돌아올 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 방법을 수정하여 for 루프에 주의를 기울이겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;graph = {
1: [2, 3, 4],
2: [5, 6],
3: [10],
4: [7, 8],
5: [9, 10],
7: [11, 12],
11: [13]
}


    def bfs(graph_to_search, start, end):
        queue = [[start]]
        visited = set()

    while queue:
        # Gets the first path in the queue
        path = queue.pop(0)

        # Gets the last node in the path
        vertex = path[-1]

        # Checks if we got to the end
        if vertex == end:
            return path
        # We check if the current node is already in the visited nodes set in order not to recheck it
        elif vertex not in visited:
            # enumerate all adjacent nodes, construct a new path and push it into the queue
            for current_neighbour in graph_to_search.get(vertex, []):
                new_path = list(path)
                new_path.append(current_neighbour)
                queue.append(new_path)

                #No need to visit other neighbour. Return at once
                if current_neighbour == end
                    return new_path;

            # Mark the vertex as visited
            visited.add(vertex)


print bfs(graph, 1, 13)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력과 다른 모든 것은 동일합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 코드를 처리하는 데 시간이 더 적게 걸립니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 기능은 특히 큰 그래프에서 유용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 이것이 미래에 누군가에게 도움이 되길 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래프에 사이클이 포함되어 있으면 이와 같은 것이 더 잘 작동하지 않을까요?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from collections import deque

graph = {
    1: [2, 3, 4],
    2: [5, 6, 3],
    3: [10],
    4: [7, 8],
    5: [9, 10],
    7: [11, 12],
   11: [13]
}


def bfs1(graph_to_search, start, end):
    queue = deque([start])
    visited = {start}
    trace = {}

    while queue:
        # Gets the first path in the queue
        vertex = queue.popleft()
        # Checks if we got to the end
        if vertex == end:
            break

        for neighbour in graph_to_search.get(vertex, []):
            # We check if the current neighbour is already in the visited nodes set in order not to re-add it
            if neighbour not in visited:
            # Mark the vertex as visited
                visited.add(neighbour)
                trace[neighbour] = vertex
                queue.append(neighbour)

path = [end]
while path[-1] != start:
    last_node = path[-1]
    next_node = trace[last_node]
    path.append(next_node)

return path[::-1]

print(bfs1(graph,1, 13))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 새 노드만 방문하고 주기를 피할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;h1 papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Javascript 버전 및 먼저/모든 경로 검색...&lt;/font&gt;&lt;/h1&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PS, 원기둥이 있는 그래프는 잘 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 깡통&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;convert&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;python&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 일이야, ㅠㅠ&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;function search_path(graph, start, end, exhausted=true, method='bfs') {
    // note. Javascript Set is ordered set...
    const queue = [[start, new Set([start])]]
    const visited = new Set()
    const allpaths = []
    const hashPath = (path) =&amp;gt; [...path].join(',') // any path hashing method
    while (queue.length) {
        const [node, path] = queue.shift()
        // visited node and its path instant. do not modify it others place
        visited.add(node)
        visited.add(hashPath(path))
        for (let _node of graph.get(node) || []) {
            // the paths already has the node, loops mean nothing though.
            if (path.has(_node))
                continue;
            // now new path has no repeated nodes.
            let newpath = new Set([...path, _node])
            if (_node == end){
                allpaths.push(newpath)
                if(!exhausted) return allpaths; // found and return 
            }
            else {
                if (!visited.has(_node) || // new node till now
                   // note: search all possible including the longest path
                   visited.has(_node) &amp;amp;&amp;amp; !visited.has(hashPath(newpath))
                ) { 
                    if(method == 'bfs')
                       queue.push([_node, newpath])
                    else{
                       queue.unshift([_node, newpath])
                    }
                }
            }
        }
    }
    return allpaths
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 출력합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-json prettyprint-override&quot;&gt;&lt;code&gt;[
    [ 'A', 'C' ],
    [ 'A', 'E', 'C'],
    [ 'A', 'E', 'F', 'C' ] // including F in `A -&amp;gt; C`
]
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/8922060/&lt;a href=&quot;https://stackoverflow.com/questions/8922060/how-to-trace-the-path-in-a-breadth-first-search&quot; target=&quot;_blank&quot; papago-id=&quot;37-1&quot;&gt;how-to-trace-the-path-in-a-breadth-first-search&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/872</guid>
      <comments>https://gigabyte.tistory.com/872#entry872comment</comments>
      <pubDate>Tue, 18 Jul 2023 23:04:33 +0900</pubDate>
    </item>
    <item>
      <title>systemd 서비스 유닛에서 가상 환경을 활성화하는 방법은 무엇입니까?</title>
      <link>https://gigabyte.tistory.com/871</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;systemd 서비스 유닛에서 가상 환경을 활성화하는 방법은 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;systemd 서비스 파일에서 가상 환경을 &quot;활성화&quot;하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;systemd process와 python interpreter 사이에 셸 프로세스가 발생하는 것을 피하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 솔루션은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[Unit]
Description=fooservice
After=syslog.target network.target

[Service]
Type=simple
User=fooservice
WorkingDirectory={{ venv_home }}
ExecStart={{ venv_home }}/fooservice --serve-in-foreground
Restart=on-abort
EnvironmentFile=/etc/sysconfig/fooservice.env

[Install]
WantedBy=multi-user.target
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;/etc/sysconfig/fooservice.env&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;PATH={{ venv_home }}/bin:/usr/local/bin:/usr/bin:/bin
PYTHONIOENCODING=utf-8
PYTHONPATH={{ venv_home }}/...
VIRTUAL_ENV={{ venv_home }}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 저는 어려움을 겪고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 일부 항목 때문에 가져오기 오류가 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sys.path&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누락되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;virtualenv는 &quot;virtualenv의 Python 인터프리터에 구워집니다.&quot;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 시작할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;python&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 해당 가상 환경에서 직접 가상 환경을 활성화하거나 관리할 필요가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PATH&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신 자신.:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ExecStart={{ venv_home }}/bin/fooservice --serve-in-foreground
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ExecStart={{ venv_home }}/bin/python {{ venv_home }}/fooservice.py --serve-in-foreground
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 그것을 제거합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;EnvironmentFile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참가 신청&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정확한지 확인하려면 다음을 확인할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sys.path&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;달리기로&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;{{ venv_home }}/bin/python -m site
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 출력을 비교합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;python -m site
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;라이브러리의 경로는 실제로 가상 환경의 파이썬 인터프리터에 구워지지만, 저는 해당 가상 환경에 설치된 바이너리를 사용하는 파이썬 도구에 문제가 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 아파치 공기 흐름 서비스가 작동하지 않을 것입니다. 왜냐하면 그것이 그것을 찾을 수 없었기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gunicorn&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이진의&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제를 해결하려면 다음과 같이 하십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ExecStart&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지시, 포함&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Environment&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령(서비스 전용 환경 변수를 설정함).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ExecStart={{ virtualenv }}/bin/python {{ virtualenv }}/bin/airflow webserver
Environment=&quot;PATH={{ virtualenv }}/bin:{{ ansible_env.PATH }}&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;ExecStart&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가상 환경의 파이썬 인터프리터를 명시적으로 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PATH&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;variable - 시스템 앞에 가상 환경의 이진 폴더를 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PATH&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇게 하면 바이너리뿐만 아니라 원하는 파이썬 라이브러리를 얻을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 서비스를 구축하기 위해 책임을 사용하고 있습니다. jinja2의 꼬불꼬불한 중괄호로 이동하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 경우에는 플라스크에 필요한 환경 변수를 추가하려고 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[Service]
Environment=&quot;PATH=/xx/yy/zz/venv/bin&quot;
Environment=&quot;FLASK_ENV=development&quot;
Environment=&quot;APP_SETTINGS=config.DevelopmentConfig&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가상 환경을 사용하고 있었기 때문에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/xx/yy/zz/venv/bin&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;virtualenv 폴더의 경로입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 virtualenv를 사용하는 것이 아니라 pyenv를 사용하고 있다: 여기는 단지 shebang에서 실제 .pyenv 경로를 사용하고 그것이 PATH에 있는지 확인하기 위한 것이다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예: prod에서 실행 중인 사용자 mortenb용 pyenv 활성화 플라스크-prod&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/home/mortenb/.pyenv/versions/flask-prod/bin/python --version
Python 3.6.2
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 systemd *.service로 시작하는 플라스크 스크립트에 다음 셰방을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#!/home/mortenb/.pyenv/versions/flask-prod/bin/python3
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;ExecStart=cd /root/app/working-directory &amp;amp;&amp;amp; poetry run python my_app.py
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/37211115/&lt;a href=&quot;https://stackoverflow.com/questions/37211115/how-to-enable-a-virtualenv-in-a-systemd-service-unit&quot; target=&quot;_blank&quot; papago-id=&quot;30-1&quot;&gt;how-to-enable-a-virtualenv-in-a-systemd-service-unit&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/871</guid>
      <comments>https://gigabyte.tistory.com/871#entry871comment</comments>
      <pubDate>Tue, 18 Jul 2023 23:03:03 +0900</pubDate>
    </item>
    <item>
      <title>실행 중인 X 서버 없이 matplotlib 그래프 생성</title>
      <link>https://gigabyte.tistory.com/870</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행 중인 X 서버 없이 matplotlib 그래프 생성&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;이 질문에는 이미 다음&lt;/b&gt;과 같은 답이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;      &lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt4&quot;&gt; 
    &lt;a href=&quot;/questions/2801882/generating-a-png-with-matplotlib-when-display-is-undefined&quot; dir=&quot;ltr&quot; papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DISPLAY가 정의되지 않은 경우 matplotlib를 사용하여 PNG 생성&lt;/font&gt;&lt;/a&gt; 
    &lt;span class=&quot;question-originals-answer-count&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(13개 답변)&lt;/font&gt;&lt;/span&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;마감됨&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;4-1&quot; title=&quot;2013-12-09 12:46:47Z&quot; papago-attr-id=&quot;1&quot;&gt;9년 전&lt;/span&gt;에.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;   &lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Matplotlib에는 실행 중인 X 서버를 의미하는 $DISPLAY 환경 변수가 필요한 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부 웹 호스팅 서비스는 실행 중인 X 서버 세션을 허용하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;X 서버를 실행하지 않고 matplotlib을 사용하여 그래프를 생성할 수 있는 방법이 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[username@hostname ~]$ python2.6
Python 2.6.5 (r265:79063, Nov 23 2010, 02:02:03)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2
Type &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.
&amp;gt;&amp;gt;&amp;gt; import matplotlib.pyplot as plt
&amp;gt;&amp;gt;&amp;gt; fig = plt.figure()
Traceback (most recent call last):
  File &quot;&amp;lt;stdin&amp;gt;&quot;, line 1, in &amp;lt;module&amp;gt;
  File &quot;/home/username/lib/python2.6/matplotlib-1.0.1-py2.6-linux-i686.egg/matplotlib/pyplot.py&quot;, line 270, in figure
    **kwargs)
  File &quot;/home/username/lib/python2.6/matplotlib-1.0.1-py2.6-linux-i686.egg/matplotlib/backends/backend_tkagg.py&quot;, line 80, in new_figure_manager
    window = Tk.Tk()
  File &quot;/usr/local/lib/python2.6/lib-tk/Tkinter.py&quot;, line 1643, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable
&amp;gt;&amp;gt;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@Neil의 답변은 한 가지 방법이지만 가져오기 전에 &lt;a href=&quot;http://matplotlib.sourceforge.net/faq/howto_faq.html#matplotlib-in-a-web-application-server&quot; papago-id=&quot;8-1&quot; rel=&quot;noreferrer&quot;&gt;간단히&lt;/a&gt; &lt;a href=&quot;http://matplotlib.sourceforge.net/faq/howto_faq.html#matplotlib-in-a-web-application-server&quot; papago-id=&quot;8-1&quot; rel=&quot;noreferrer&quot;&gt;&lt;em papago-id=&quot;8-1-3&quot;&gt;전화&lt;/em&gt;&lt;/a&gt;를 걸어 정상적으로 계속할 수도 &lt;a href=&quot;http://matplotlib.sourceforge.net/faq/howto_faq.html#matplotlib-in-a-web-application-server&quot; papago-id=&quot;8-1&quot; rel=&quot;noreferrer&quot;&gt;있습니다&lt;/a&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import matplotlib as mpl
mpl.use('Agg')
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(10))
fig.savefig('temp.png')
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Agg 백엔드를 사용할 필요도 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;pdf,&lt;a href=&quot;http://matplotlib.org/faq/usage_faq.html#what-is-a-backend&quot; papago-id=&quot;10-1&quot; rel=&quot;noreferrer&quot;&gt; ps, svg, agg, 카이로 &lt;/a&gt;및&lt;a href=&quot;http://matplotlib.org/faq/usage_faq.html#what-is-a-backend&quot; papago-id=&quot;10-1&quot; rel=&quot;noreferrer&quot;&gt; gdk 백엔드&lt;/a&gt;는 모두 X 서버 없이 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 Agg 백엔드만 기본적으로 구축되므로 특정 설치에서 다른 백엔드를 사용할 수 없을 가능성이 높습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 파일의 백엔드 매개 변수를 자동으로 설정할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;matplotlib.pyplot&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지정된 렌더러를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 pylab 인터페이스를 거치지 않고 matplotlib API를 직접 사용해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 좋은 예가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.dalkescientific.com/writings/diary/archive/2005/04/23/matplotlib_without_gui.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://www.dalkescientific.com/writings/diary/archive/2005/04/23/matplotlib_without_gui.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/4931376/&lt;a href=&quot;https://stackoverflow.com/questions/4931376/generating-matplotlib-graphs-without-a-running-x-server&quot; target=&quot;_blank&quot; papago-id=&quot;15-1&quot;&gt;generating-matplotlib-graphs-without-a-running-x-server&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/870</guid>
      <comments>https://gigabyte.tistory.com/870#entry870comment</comments>
      <pubDate>Tue, 18 Jul 2023 23:01:11 +0900</pubDate>
    </item>
    <item>
      <title>boto를 사용하여 S3 버킷의 디렉토리에 파일을 업로드하는 방법</title>
      <link>https://gigabyte.tistory.com/869</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;boto를 사용하여 S3 버킷의 디렉토리에 파일을 업로드하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 파이썬을 사용하여 s3 버킷에 있는 파일을 복사하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예 : 버킷 이름 = 시험이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 양동이에는 &quot;dump&quot;와 &quot;input&quot;이라는 두 개의 폴더가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 python을 사용하여 로컬 디렉터리에서 S3 &quot;dump&quot; 폴더로 파일을 복사하고 싶습니다...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;누가 나를 도와줄 수 있나요?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;3-0&quot;&gt;참고:&lt;/strong&gt; 이 답변은 다음을 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;boto&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 사용하는 &lt;a href=&quot;https://stackoverflow.com/a/47099059/913098&quot; papago-id=&quot;4-1&quot;&gt;다른&lt;/a&gt; 답변 보기&lt;/font&gt;&lt;/font&gt;&lt;code&gt;boto3&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 &lt;a href=&quot;https://stackoverflow.com/a/32323454/913098&quot; papago-id=&quot;5-1&quot;&gt;새로운&lt;/a&gt; 것.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해보세요...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import boto
import boto.s3
import sys
from boto.s3.key import Key

AWS_ACCESS_KEY_ID = ''
AWS_SECRET_ACCESS_KEY = ''

bucket_name = AWS_ACCESS_KEY_ID.lower() + '-dump'
conn = boto.connect_s3(AWS_ACCESS_KEY_ID,
        AWS_SECRET_ACCESS_KEY)


bucket = conn.create_bucket(bucket_name,
    location=boto.s3.connection.Location.DEFAULT)

testfile = &quot;replace this with an actual filename&quot;
print 'Uploading %s to Amazon S3 bucket %s' % \
   (testfile, bucket_name)

def percent_cb(complete, total):
    sys.stdout.write('.')
    sys.stdout.flush()


k = Key(bucket)
k.key = 'my test file'
k.set_contents_from_filename(testfile,
    cb=percent_cb, num_cb=10)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;[UPDATE] 저는 파이썬 주자가 아니기 때문에 수입 명세서에 대해 알려주셔서 감사합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 자신의 소스 코드 안에 자격 증명을 넣는 것도 권장하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;AWS에서 이를 실행하는 경우 인스턴스 프로파일이 포함된 IAM 자격 증명(http://docs.aws.amazon.com/IAM/latest/UserGuide/&lt;a href=&quot;https://github.com/AdRoll/hologram&quot; rel=&quot;noreferrer&quot; papago-id=&quot;7-3&quot;&gt;id_roles_use_switch-role-ec2_instance-profiles&lt;/a&gt;.html), 을 사용하고 개발/테스트 환경에서 동일한 동작을 유지하려면 AdRoll의 홀로그램(https://github.com/AdRoll/hologram) 을 사용합니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;import boto3

s3 = boto3.resource('s3')
BUCKET = &quot;test&quot;

s3.Bucket(BUCKET).upload_file(&quot;your/local/file&quot;, &quot;dump/file&quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자격 증명을 사용하여 세션 내의 s3에 파일을 업로드합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import boto3

session = boto3.Session(
    aws_access_key_id='AWS_ACCESS_KEY_ID',
    aws_secret_access_key='AWS_SECRET_ACCESS_KEY',
)
s3 = session.resource('s3')
# Filename - File to upload
# Bucket - Bucket to upload to (the top level directory under AWS S3)
# Key - S3 object name (can contain subdirectories). If not specified then file_name is used
s3.meta.client.upload_file(Filename='input_file_path', Bucket='bucket_name', Key='s3_output_key')
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇게 복잡하게 만들 필요가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;s3_connection = boto.connect_s3()
bucket = s3_connection.get_bucket('your bucket name')
key = boto.s3.key.Key(bucket, 'some_file.zip')
with open('some_file.zip') as f:
    key.send_file(f)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이것을 사용했고 그것은 구현하기 매우 간단합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import tinys3

conn = tinys3.Connection('S3_ACCESS_KEY','S3_SECRET_KEY',tls=True)

f = open('some_file.zip','rb')
conn.upload('some_file.zip',f,'my_bucket')
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.smore.com/labs/tinys3/&quot; papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://www.smore.com/labs/tinys3/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;from boto3.s3.transfer import S3Transfer
import boto3
#have all the variables populated which are required below
client = boto3.client('s3', aws_access_key_id=access_key,aws_secret_access_key=secret_key)
transfer = S3Transfer(client)
transfer.upload_file(filepath, bucket_name, folder_name+&quot;/&quot;+filename)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 세 개의 라이너입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.upload_file&quot; rel=&quot;noreferrer&quot; papago-id=&quot;12-1&quot;&gt;boto3 설명서&lt;/a&gt;의 지침을 따르십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import boto3
s3 = boto3.resource(service_name = 's3')
s3.meta.client.upload_file(Filename = 'C:/foo/bar/baz.filetype', Bucket = 'yourbucketname', Key = 'baz.filetype')
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;몇 가지 중요한 인수는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;b papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매개 변수:&lt;/font&gt;&lt;/b&gt; &lt;/p&gt;
&lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;15-0&quot;&gt;파일&lt;/b&gt; 이름(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;) - 업로드할 파일의 경로입니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;17-0&quot;&gt;버킷&lt;/b&gt;(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;) - 업로드할 버킷의 이름입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/li&gt;
&lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;21-0&quot;&gt;키&lt;/b&gt;(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;) -- s3 버킷의 파일에 할당할 의 이름.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 이름과 같거나 선택한 다른 이름일 수 있지만 파일 형식은 동일해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;19-0&quot;&gt;참고:&lt;/b&gt; 자격 증명을 에 저장했다고 가정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;~\.aws&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html#best-practices-for-configuring-credentials&quot; papago-id=&quot;20-1&quot; rel=&quot;noreferrer&quot;&gt;boto3 설명서의 모범적인 구성 방법&lt;/a&gt;에 제시된 대로 폴더에 저장할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 기능도 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import os 
import boto
import boto.s3.connection
from boto.s3.key import Key

try:

    conn = boto.s3.connect_to_region('us-east-1',
    aws_access_key_id = 'AWS-Access-Key',
    aws_secret_access_key = 'AWS-Secrete-Key',
    # host = 's3-website-us-east-1.amazonaws.com',
    # is_secure=True,               # uncomment if you are not using ssl
    calling_format = boto.s3.connection.OrdinaryCallingFormat(),
    )

    bucket = conn.get_bucket('YourBucketName')
    key_name = 'FileToUpload'
    path = 'images/holiday' #Directory Under which file should get upload
    full_key_name = os.path.join(path, key_name)
    k = bucket.new_key(full_key_name)
    k.set_contents_from_filename(key_name)

except Exception,e:
    print str(e)
    print &quot;error&quot;   
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;boto3 사용하기&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import logging
import boto3
from botocore.exceptions import ClientError


def upload_file(file_name, bucket, object_name=None):
    &quot;&quot;&quot;Upload a file to an S3 bucket

    :param file_name: File to upload
    :param bucket: Bucket to upload to
    :param object_name: S3 object name. If not specified then file_name is used
    :return: True if file was uploaded, else False
    &quot;&quot;&quot;

    # If S3 object_name was not specified, use file_name
    if object_name is None:
        object_name = file_name

    # Upload the file
    s3_client = boto3.client('s3')
    try:
        response = s3_client.upload_file(file_name, bucket, object_name)
    except ClientError as e:
        logging.error(e)
        return False
    return True
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용: - https://boto3.amazonaws.com/v1/documentation/api/latest/guide/&lt;a href=&quot;https://boto3.amazonaws.com/v1/documentation/api/latest/guide/s3-uploading-files.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;25-1&quot;&gt;s3-uploading-files&lt;/a&gt;.html&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;import boto
from boto.s3.key import Key

AWS_ACCESS_KEY_ID = ''
AWS_SECRET_ACCESS_KEY = ''
END_POINT = ''                          # eg. us-east-1
S3_HOST = ''                            # eg. s3.us-east-1.amazonaws.com
BUCKET_NAME = 'test'        
FILENAME = 'upload.txt'                
UPLOADED_FILENAME = 'dumps/upload.txt'
# include folders in file path. If it doesn't exist, it will be created

s3 = boto.s3.connect_to_region(END_POINT,
                           aws_access_key_id=AWS_ACCESS_KEY_ID,
                           aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
                           host=S3_HOST)

bucket = s3.get_bucket(BUCKET_NAME)
k = Key(bucket)
k.key = UPLOADED_FILENAME
k.set_contents_from_filename(FILENAME)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 코드 및 S3 폴더 사진과 같은 업로드 폴더의 경우&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import boto
import boto.s3
import boto.s3.connection
import os.path
import sys    

# Fill in info on data to upload
# destination bucket name
bucket_name = 'willie20181121'
# source directory
sourceDir = '/home/willie/Desktop/x/'  #Linux Path
# destination directory name (on s3)
destDir = '/test1/'   #S3 Path

#max size in bytes before uploading in parts. between 1 and 5 GB recommended
MAX_SIZE = 20 * 1000 * 1000
#size of parts when uploading in parts
PART_SIZE = 6 * 1000 * 1000

access_key = 'MPBVAQ*******IT****'
secret_key = '11t63yDV***********HgUcgMOSN*****'

conn = boto.connect_s3(
        aws_access_key_id = access_key,
        aws_secret_access_key = secret_key,
        host = '******.org.tw',
        is_secure=False,               # uncomment if you are not using ssl
        calling_format = boto.s3.connection.OrdinaryCallingFormat(),
        )
bucket = conn.create_bucket(bucket_name,
        location=boto.s3.connection.Location.DEFAULT)


uploadFileNames = []
for (sourceDir, dirname, filename) in os.walk(sourceDir):
    uploadFileNames.extend(filename)
    break

def percent_cb(complete, total):
    sys.stdout.write('.')
    sys.stdout.flush()

for filename in uploadFileNames:
    sourcepath = os.path.join(sourceDir + filename)
    destpath = os.path.join(destDir, filename)
    print ('Uploading %s to Amazon S3 bucket %s' % \
           (sourcepath, bucket_name))

    filesize = os.path.getsize(sourcepath)
    if filesize &amp;gt; MAX_SIZE:
        print (&quot;multipart upload&quot;)
        mp = bucket.initiate_multipart_upload(destpath)
        fp = open(sourcepath,'rb')
        fp_num = 0
        while (fp.tell() &amp;lt; filesize):
            fp_num += 1
            print (&quot;uploading part %i&quot; %fp_num)
            mp.upload_part_from_file(fp, fp_num, cb=percent_cb, num_cb=10, size=PART_SIZE)

        mp.complete_upload()

    else:
        print (&quot;singlepart upload&quot;)
        k = boto.s3.key.Key(bucket)
        k.key = destpath
        k.set_contents_from_filename(sourcepath,
                cb=percent_cb, num_cb=10)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PS: 더 많은 &lt;a href=&quot;https://stackoverflow.com/questions/53664405/how-to-use-python-script-to-copy-files-from-one-bucket-to-another-bucket-at-the/53679657#53679657&quot; papago-id=&quot;27-1&quot;&gt;참조용&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템에 &lt;a href=&quot;https://docs.aws.amazon.com/cli/latest/reference/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;28-1&quot;&gt;aws 명령줄&lt;/a&gt; 인터페이스를 설치한 경우 pythons &lt;a href=&quot;https://docs.python.org/3/library/subprocess.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;28-3&quot;&gt;하위&lt;/a&gt; 프로세스 라이브러리를 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import subprocess
def copy_file_to_s3(source: str, target: str, bucket: str):
   subprocess.run([&quot;aws&quot;, &quot;s3&quot; , &quot;cp&quot;, source, f&quot;s3://{bucket}/{target}&quot;])
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마찬가지로 파일 다운로드 또는 나열과 같은 모든 종류의 AWS 클라이언트 작업에 해당 로직을 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;반환 값을 얻을 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 bot3를 수입할 필요가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 그것의 사용이 그런 식으로 의도된 것이 아니라고 생각하지만 실제로는 그렇게 하는 것이 꽤 편리하다고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 콘솔에 표시되는 업로드 상태를 확인할 수 있습니다. 예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Completed 3.5 GiB/3.5 GiB (242.8 MiB/s) with 1 file(s) remaining
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원하는 대로 방법을 수정하려면 &lt;a href=&quot;https://docs.python.org/3/library/subprocess.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;30-1&quot;&gt;하위&lt;/a&gt; 프로세스 참조와 &lt;a href=&quot;https://docs.aws.amazon.com/cli/latest/reference/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;30-3&quot;&gt;AWS CLI&lt;/a&gt; 참조를 검토하는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: 이것은 &lt;a href=&quot;https://stackoverflow.com/questions/44059769/uploading-files-to-s3-using-python/64713825#64713825&quot; papago-id=&quot;31-1&quot;&gt;유사&lt;/a&gt;한 질문에 대한 제 대답의 사본입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 보기에 주문량이 좀 더 많은 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import boto3
from pprint import pprint
from botocore.exceptions import NoCredentialsError


class S3(object):
    BUCKET = &quot;test&quot;
    connection = None

    def __init__(self):
        try:
            vars = get_s3_credentials(&quot;aws&quot;)
            self.connection = boto3.resource('s3', 'aws_access_key_id',
                                             'aws_secret_access_key')
        except(Exception) as error:
            print(error)
            self.connection = None


    def upload_file(self, file_to_upload_path, file_name):
        if file_to_upload is None or file_name is None: return False
        try:
            pprint(file_to_upload)
            file_name = &quot;your-folder-inside-s3/{0}&quot;.format(file_name)
            self.connection.Bucket(self.BUCKET).upload_file(file_to_upload_path, 
                                                                      file_name)
            print(&quot;Upload Successful&quot;)
            return True

        except FileNotFoundError:
            print(&quot;The file was not found&quot;)
            return False

        except NoCredentialsError:
            print(&quot;Credentials not available&quot;)
            return False


&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에는 버킷 &lt;strong papago-id=&quot;33-1&quot;&gt;상수&lt;/strong&gt;, &lt;strong papago-id=&quot;33-3&quot;&gt;file_to_upload&lt;/strong&gt; 및 &lt;strong papago-id=&quot;33-5&quot;&gt;file_name&lt;/strong&gt;이라는 세 가지 중요한 변수가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;BUCKET&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; S3의 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;file_to_upload_path&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;file_name&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;버킷의 결과 파일 및 경로(폴더를 추가하는 위치 또는 기타 위치)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 가지 방법이 있지만 다음과 같은 다른 스크립트에서 이 코드를 재사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import S3

def some_function():
    S3.S3().upload_file(path_to_file, final_file_name)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 액세스 문제를 생략하려면 내용 유형도 언급해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import os
image='fly.png'
s3_filestore_path = 'images/fly.png'
filename, file_extension = os.path.splitext(image)
content_type_dict={&quot;.png&quot;:&quot;image/png&quot;,&quot;.html&quot;:&quot;text/html&quot;,
               &quot;.css&quot;:&quot;text/css&quot;,&quot;.js&quot;:&quot;application/javascript&quot;,
               &quot;.jpg&quot;:&quot;image/png&quot;,&quot;.gif&quot;:&quot;image/gif&quot;,
               &quot;.jpeg&quot;:&quot;image/jpeg&quot;}

content_type=content_type_dict[file_extension]
s3 = boto3.client('s3', config=boto3.session.Config(signature_version='s3v4'),
                  region_name='ap-south-1',
                  aws_access_key_id=S3_KEY,
                  aws_secret_access_key=S3_SECRET)
s3.put_object(Body=image, Bucket=S3_BUCKET, Key=s3_filestore_path, ContentType=content_type)
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;xmlstr = etree.tostring(listings,  encoding='utf8', method='xml')
conn = boto.connect_s3(
        aws_access_key_id = access_key,
        aws_secret_access_key = secret_key,
        # host = '&amp;lt;bucketName&amp;gt;.s3.amazonaws.com',
        host = 'bycket.s3.amazonaws.com',
        #is_secure=False,               # uncomment if you are not using ssl
        calling_format = boto.s3.connection.OrdinaryCallingFormat(),
        )
conn.auth_region_name = 'us-west-1'

bucket = conn.get_bucket('resources', validate=False)
key= bucket.get_key('filename.txt')
key.set_contents_from_string(&quot;SAMPLE TEXT&quot;)
key.set_canned_acl('public-read')
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에 있는 많은 기존 답변들은 매우 복잡합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한 접근 방식은 를 사용하는 것입니다. 이는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;boto3&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저, 사용자 인증을 올바르게 수행해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;~/.aws/credentials&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 또는 환경 변수가 설정되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://cloudpathlib.drivendata.org/stable/authentication/&quot; papago-id=&quot;42-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;cloudpathlib 문서&lt;/a&gt;에서 더 많은 &lt;a href=&quot;https://cloudpathlib.drivendata.org/stable/authentication/&quot; papago-id=&quot;42-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;옵션&lt;/a&gt;을 확인할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일을 업로드하는 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;from pathlib import Path
from cloudpathlib import CloudPath

# write a local file that we will upload:
Path(&quot;test_file.txt&quot;).write_text(&quot;hello&quot;)
#&amp;gt; 5

# upload that file to S3
CloudPath(&quot;s3://drivendata-public-assets/testsfile.txt&quot;).upload_from(&quot;test_file.txt&quot;)
#&amp;gt; S3Path('s3://mybucket/testsfile.txt')

# read it back from s3
CloudPath(&quot;s3://mybucket/testsfile.txt&quot;).read_text()
#&amp;gt; 'hello'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참: 일을사여클라경드직쓸을 사용하여 직접 쓸 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;write_text&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;write_bytes&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;open&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방법들 또한.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 당신의 샘플을 약간 수정했고, 일부 수입품과 보토 샘플에 필요한 것을 얻기 위한 진행 상황을 삭제했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import boto.s3
from boto.s3.key import Key

AWS_ACCESS_KEY_ID = 'your-access-key-id'
AWS_SECRET_ACCESS_KEY = 'your-secret-access-key'

bucket_name = AWS_ACCESS_KEY_ID.lower() + '-form13'
conn = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
bucket = conn.create_bucket(bucket_name, location=boto.s3.connection.Location.DEFAULT)
filename = 'embedding.csv'

k = Key(bucket)
k.key = filename
k.set_contents_from_filename(filename)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 bot3의 예이기도 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import boto3

ACCESS_KEY = 'your-access-key'
SECRET_KEY = 'your-secret-key'

file_name='embedding.csv'
object_name=file_name
bucket_name = ACCESS_KEY.lower() + '-form13'

s3 = boto3.client('s3', aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_KEY)
s3.create_bucket(Bucket=bucket_name)
s3.upload_file(file_name, bucket_name, object_name)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/15085864/&lt;a href=&quot;https://stackoverflow.com/questions/15085864/how-to-upload-a-file-to-directory-in-s3-bucket-using-boto&quot; target=&quot;_blank&quot; papago-id=&quot;50-1&quot;&gt;how-to-upload-a-file-to-directory-in-s3-bucket-using-boto&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/869</guid>
      <comments>https://gigabyte.tistory.com/869#entry869comment</comments>
      <pubDate>Tue, 18 Jul 2023 22:58:21 +0900</pubDate>
    </item>
    <item>
      <title>시스템에서 RVM(Ruby Version Manager)을 제거하는 방법</title>
      <link>https://gigabyte.tistory.com/868</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템에서 RVM(Ruby Version Manager)을 제거하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템에서 RVM(Ruby Version Manager)을 제거하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 간단한 명령이 내장되어 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;rvm implode
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 다음 항목이 제거됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;rvm/&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;디렉토리와 그 안에 구축된 모든 루비.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;경우도 제거해야 . rvm 최 종 의 합 야 rvm 보 니 다 해 거 제 도&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;gem uninstall rvm
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Homebrew, Appt 또는 DNF 설치 시에도 제거가 필요한 요소가 남아 있을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 처음에 설치한 방법에 따라 달라집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;RVM은 더 이상 Ruby에 관여하지 않지만 정리 작업을 유지하는 데 도움이 될 수 있기 때문에 정리 단계는 선택 사항입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자의 작업한 경우&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PATH&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신도 그것들을 끄는 것이 좋을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 확인해 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.bashrc&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.profile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.bash_profile&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일, 무엇보다도.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 또한 가질 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/etc/rvmrc&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 홈 디렉토리에 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;~/.rvmrc&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제거해야 할 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 답변으로 RVM을 완전히 제거하지 못할 경우 &lt;a href=&quot;https://rvm.io/support/troubleshooting/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;14-1&quot;&gt;RVM의 문제 해결&lt;/a&gt; 페이지에는 다음 섹션이 포함됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;h2 papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템 전체 설치를 포함하여 시스템에서 모든 RVM 흔적을 완전히 지우는 방법은 무엇입니까?&lt;/font&gt;&lt;/h2&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가 다은사지스정로트크라고 이름 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;cleanout-rvm&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 확실히 사용할 수 있는 동안.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;rvm implode&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 반일사또는자용으로&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;rvmsudo rvm implode&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템 전체 설치의 경우 이 스크립트는 RVM 자체를 사용하지 않고도 RVM을 완전히 벗어나 RVM을 정리하여 흔적을 남기지 않기 때문에 유용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
 &lt;pre class=&quot;lang-sh prettyprint-override&quot;&gt;&lt;code&gt;#!/bin/bash
/usr/bin/sudo rm -rf $HOME/.rvm $HOME/.rvmrc /etc/rvmrc /etc/profile.d/rvm.sh /usr/local/rvm /usr/local/bin/rvm
/usr/bin/sudo /usr/sbin/groupdel rvm
/bin/echo &quot;RVM is removed. Please check all .bashrc|.bash_profile|.profile|.zshrc for RVM source lines and delete
or comment out if this was a Per-User installation.&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;/blockquote&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 할 때&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;implode&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 다음을 볼 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Psychologist intervened, cancelling implosion, crisis avoided :)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--force&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;rvm implode --force
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 다음 위치에서 RVM을 제거합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;rm -rf /usr/local/rvm
sudo rm /etc/profile.d/rvm.sh
sudo rm /etc/rvmrc
sudo rm ~/.rvmrc
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 파일을 확인하고 RVM에 대한 참조를 제거하거나 주석을 달 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;~/.bashrc 
~/.bash_profile 
~/.profile 
~/.zshrc
~/.zlogin
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;/etc/profile에서 다음 행을 주석 처리/제거합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; source /etc/profile.d/sm.sh
 source /etc/profile.d/rvm.sh
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;/etc/profile은 읽기 전용 파일이므로 다음을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo vim /etc/profile
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 그 변화를 뱅글뱅글하게 만든 후에!&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;:w!
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막으로 터미널을 다시 로그인/다시 시작합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@tadman의 대답에 더하여 저는 포장지를 제거했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/usr/local/bin&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 만 아니라&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/etc/profile.d/rvm&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포장지에는 다음이 포함됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;erb
gem
irb
rake
rdoc
ri
ruby
testrb
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;많은 사람들이 'rvm implode'가 그것을 한다고 생각하는 흔한 실수를 합니다. 당신은 모든 .rm 파일의 모든 추적을 삭제해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 루트에서 수동으로 삭제해야 합니다. 삭제되었는지 확인하고 사용하여 설치한 모든 루비 버전도 삭제해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;/.bash_rc 또는 /.zsh_rc에서 RVM 로드 스크립트를 제거한 후 다음을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;rm -rf /.rvm
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;rvm implode
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;rvm implode
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 다음을 사용하여 RVM 보석을 제거해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;gem uninstall rvm
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;홈 디렉토리에 남아 있는 RVM 파일이 있는지 확인하고, 있으면 제거합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;홈 디렉토리로 이동하여 숨겨진 모든 파일을 나열합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ls -a

rm  .rvm
rm  .rvmrc
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;통해 RVM을  apt-get보다 몇 가지 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;rvm implode&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;apt-get remove ruby-rvm&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제거할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;&lt;a href=&quot;https://stackoverflow.com/questions/8402827/installing-rvm-on-ubuntu&quot; papago-id=&quot;43-1&quot;&gt;Ubuntu에 RVM 설치&lt;/a&gt;&quot;를 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PATH 변수를 수정하려는 다른 셸 신입생의 경우&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;승인된 답변의 지침을 따른 후 필요한 경우 PATH 변수를 확인하고 수정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;env | grep PATH 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;rvm&quot;이 표시되면 PATH를 설정하는 위치를 파악하고 수정해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;3개의 파일로 설정하고 있었으므로 다음 파일을 모두 확인하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;vim .bashrc  
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt; &lt;font class=&quot;papago-parent&quot;&gt;명령어&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;를 &lt;font class=&quot;papago-parent&quot;&gt;사용&lt;/font&gt;하여 rvm을 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;하는 &lt;font class=&quot;papago-parent&quot;&gt;파일의 행&lt;/font&gt;을 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;합니다&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:wq를 저장하고 종료합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;code&gt;source .bashrc&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.profile 및 .bash_profile에 대해 vim 명령부터 이 프로세스를 반복합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 당신이 여전히 전화를 받고 있다면.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;env: ruby_executable_hooks: No such file or directory&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Ruby 패키지를 부를 때, 그것은 RVM이 당신에게 작은 선물을 남겼다는 것을 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$PATH&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 실행하여 문제가 되는 스크립트를 찾습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;grep '#!/usr/bin/env ruby_executable_hooks' /usr/local/bin/*
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고나서&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;rm&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;RVM&lt;/font&gt;이 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt; &lt;font class=&quot;papago-parent&quot;&gt;RVM&lt;/font&gt;으로 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt; 설치해야 &lt;font class=&quot;papago-parent&quot;&gt;합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gem&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 론이야물야.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;RVM의 문제 해결 문서에 따라 &quot;&lt;a href=&quot;https://rvm.io/support/troubleshooting&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;57-1&quot;&gt;시스템 전체 설치를 포함하여 시스템에서 모든 RVM 흔적을 완전히 지우는 방법&lt;/a&gt;은 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 'cleanout-rvm'이라는 사용자 지정 스크립트입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 확실히 사용할 수 있는 동안.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;rvm implode&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 반일사또는자용으로&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;rvmsudo rvm implode&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템 전체 설치의 경우 이 스크립트는 RVM 자체를 사용하지 않고도 RVM을 완전히 벗어나 RVM을 정리하여 흔적을 남기지 않기 때문에 유용합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
 &lt;pre&gt;&lt;code&gt;#!/bin/bash
/usr/bin/sudo rm -rf $HOME/.rvm $HOME/.rvmrc /etc/rvmrc /etc/profile.d/rvm.sh /usr/local/rvm /usr/local/bin/rvm
/usr/bin/sudo /usr/sbin/groupdel rvm
/bin/echo &quot;RVM is removed. Please check all .bashrc|.bash_profile|.profile|.zshrc for RVM source lines and delete or comment out if this was a Per-User installation.&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 Ubuntu 19.04를 실행하고 있으며 위의 모든 지침과 일부 지침을 따릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막으로, 제게 효과가 있었던 것은&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo apt autoremove rvm
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 RVM을 다시 설치하려고 하면 RVM이 실제로 사라집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;RVM은 침입적입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@Kingsley Ijomah 답변 보완...&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;경로를 수정하여 다음과 같은 작업을 수행해야 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;rvm&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령도 터미널에서 사라집니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PATH 확인하기&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;env | grep PATH
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;RVM 디렉토리를 제거하는 PATH를 수정하려면 다음을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;dir_to_remove=/home/user/.rvm/bin
PATH=:$PATH:
PATH=${PATH//:$dir_to_remove:/:}
PATH=${PATH#:}; PATH=${PATH%:}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;디렉터리가 두 개 에는 디렉터리를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dir_to_remove&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한번에 하나씩.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 sdf를 사용하고 있기 때문에 일부 rvm 및 rbenv 디렉토리를 제거해야 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;조심하세요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3558656/&lt;a href=&quot;https://stackoverflow.com/questions/3558656/how-to-remove-rvm-ruby-version-manager-from-my-system&quot; target=&quot;_blank&quot; papago-id=&quot;72-1&quot;&gt;how-to-remove-rvm-ruby-version-manager-from-my-system&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/868</guid>
      <comments>https://gigabyte.tistory.com/868#entry868comment</comments>
      <pubDate>Tue, 18 Jul 2023 22:57:47 +0900</pubDate>
    </item>
    <item>
      <title>스프링 부트를 사용하여 엑셀 파일을 읽는 방법</title>
      <link>https://gigabyte.tistory.com/867</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스프링 부트를 사용하여 엑셀 파일을 읽는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 엑셀 파일을 가져와서 내용을 저장하고 데이터베이스에 저장하는 스프링 부트 애플리케이션을 만들고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 많은 방법을 시도했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 성공하지 못했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이걸 어떻게 하는지 아는 사람?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;엑셀 파일을 가져오기 위한 컨트롤러를 어떻게 만드는지 모르겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 엑셀 파일에서 데이터를 읽기 위해 포함해야 하는 종속성이 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;드디어 해결책을 찾았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;양식을 업로드하기 위한 HTML 파일은&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;form th:action=&quot;@{/import}&quot; method=&quot;post&quot; enctype=&quot;multipart/form-data&quot;&amp;gt;
    &amp;lt;input type=&quot;file&quot; th:name=&quot;file&quot; /&amp;gt;
    &amp;lt;input th:type=&quot;submit&quot; value=&quot;Import&quot; /&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨트롤러 클래스는&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@PostMapping(&quot;/import&quot;)
public void mapReapExcelDatatoDB(@RequestParam(&quot;file&quot;) MultipartFile reapExcelDataFile) throws IOException {
    
    List&amp;lt;Test&amp;gt; tempStudentList = new ArrayList&amp;lt;Test&amp;gt;();
    XSSFWorkbook workbook = new XSSFWorkbook(reapExcelDataFile.getInputStream());
    XSSFSheet worksheet = workbook.getSheetAt(0);
    
    for(int i=1;i&amp;lt;worksheet.getPhysicalNumberOfRows() ;i++) {
        Test tempStudent = new Test();
            
        XSSFRow row = worksheet.getRow(i);
            
        tempStudent.setId((int) row.getCell(0).getNumericCellValue());
        tempStudent.setContent(row.getCell(1).getStringCellValue());
        tempStudentList.add(tempStudent);   
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;종속성을 추가해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.apache.poi&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;poi&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;3.12&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&amp;lt;!-- excel 2007 over--&amp;gt;
&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.apache.poi&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;poi-ooxml&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;3.12&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 잘 될 겁니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메이븐 종속성을 사용하여 쉽게 사용할 수 있는 Apache POI 라이브러리를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.apache.poi&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;poi-ooxml&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;3.15&amp;lt;/version&amp;gt;
  &amp;lt;/dependency&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일을 읽을 코드&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Iterator;

public class ApachePOIExcelRead {

    private static final String FILE_NAME = &quot;/tmp/MyFirstExcel.xlsx&quot;;

    public static void main(String[] args) {

        try {

            FileInputStream excelFile = new FileInputStream(new File(FILE_NAME));
            Workbook workbook = new XSSFWorkbook(excelFile);
            Sheet datatypeSheet = workbook.getSheetAt(0);
            Iterator&amp;lt;Row&amp;gt; iterator = datatypeSheet.iterator();

            while (iterator.hasNext()) {

                Row currentRow = iterator.next();
                Iterator&amp;lt;Cell&amp;gt; cellIterator = currentRow.iterator();

                while (cellIterator.hasNext()) {

                    Cell currentCell = cellIterator.next();
                    //getCellTypeEnum shown as deprecated for version 3.15
                    //getCellTypeEnum ill be renamed to getCellType starting from version 4.0
                    if (currentCell.getCellTypeEnum() == CellType.STRING) {
                        System.out.print(currentCell.getStringCellValue() + &quot;--&quot;);
                    } else if (currentCell.getCellTypeEnum() == CellType.NUMERIC) {
                        System.out.print(currentCell.getNumericCellValue() + &quot;--&quot;);
                    }

                }
                System.out.println();

            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 요구에 따라 위의 프로그램을 수정해 주세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Excel 파일 열 인덱스를 알고 있는 경우 행을 읽기 셀로 지정할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;row.getCell(0)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어디에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;row&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;과 같은 물건.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;XSSFRow row = (XSSFRow) iterator.next();&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 당신에게 도움이 되기를 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.mkyong.com/java/apache-poi-reading-and-writing-excel-file-in-java/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;14-1&quot;&gt;다음&lt;/strong&gt;과 같은 종속성도 추가할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;dependency&amp;gt;
        &amp;lt;groupId&amp;gt;org.apache.xmlbeans&amp;lt;/groupId&amp;gt;
        &amp;lt;artifactId&amp;gt;xmlbeans&amp;lt;/artifactId&amp;gt;
        &amp;lt;version&amp;gt;3.1.0&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내게 적합함&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    &amp;lt;form th:action=&quot;@{/import}&quot; method=&quot;post&quot; enctype=&quot;multipart/form-data&quot;&amp;gt;

        &amp;lt;input type=&quot;file&quot; th:name=&quot;file&quot;&amp;gt;

    &amp;lt;input th:type=&quot;submit&quot; value=&quot;Import&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code&gt;    @PostMapping(&quot;/import&quot;)
    public void mapReapExcelDatatoDB(@RequestParam(&quot;file&quot;) MultipartFile reapExcelDataFile) throws IOException {

       List&amp;lt;Test&amp;gt; tempStudentList = new ArrayList&amp;lt;Test&amp;gt;();
        XSSFWorkbook workbook = new XSSFWorkbook(reapExcelDataFile.getInputStream());
        XSSFSheet worksheet = workbook.getSheetAt(0);

        for(int i=1;i&amp;lt;worksheet.getPhysicalNumberOfRows() ;i++) {
            Test tempStudent = new Test();

            XSSFRow row = worksheet.getRow(i);

            tempStudent.setId((int) row.getCell(0).getNumericCellValue());
            tempStudent.setContent(row.getCell(1).getStringCellValue());
                tempStudentList.add(tempStudent);   
        }
    }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/50849800/&lt;a href=&quot;https://stackoverflow.com/questions/50849800/how-to-read-excel-file-using-spring-boot&quot; target=&quot;_blank&quot; papago-id=&quot;16-1&quot;&gt;how-to-read-excel-file-using-spring-boot&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/867</guid>
      <comments>https://gigabyte.tistory.com/867#entry867comment</comments>
      <pubDate>Tue, 18 Jul 2023 22:56:52 +0900</pubDate>
    </item>
    <item>
      <title>Python이 return_value 대신 MagicMock 개체를 반환합니다.</title>
      <link>https://gigabyte.tistory.com/866</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python이 return_value 대신 MagicMock 개체를 반환합니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파이썬 파일을 가지고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a.py&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 개의 클래스를 포함합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;A&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;B&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class A(object):
    def method_a(self):
        return &quot;Class A method a&quot;

class B(object):
    def method_b(self):
        a = A()
        print a.method_a()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유닛 테스트를 하고 싶습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;method_b&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수업 중에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;B&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;조롱하여&lt;/font&gt;&lt;/font&gt;&lt;code&gt;A&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일의 내용은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;testa.py&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 위해:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import unittest
import mock
import a


class TestB(unittest.TestCase):

    @mock.patch('a.A')
    def test_method_b(self, mock_a):
        mock_a.method_a.return_value = 'Mocked A'
        b = a.B()
        b.method_b()


if __name__ == '__main__':
    unittest.main()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 기대합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Mocked A&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;산출물에&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 제가 얻는 것은:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;MagicMock name='A().method_a()' id='4326621392'&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 어디서 잘못하고 있나요?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@mock.patch('a.A')&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 수업을 대체하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;A&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시험 중인 암호로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mock_a&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인&lt;/font&gt;&lt;/font&gt;&lt;code&gt;B.method_b&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 설정&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a = A()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a = mock_a()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;return_value&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mock_a&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 값을 지정하지 않았기 때문에 정규 값입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MagicMock&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것도 구성되지 않았으므로 기본 응답을 받습니다(또 다른 응답).&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MagicMock&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;) 메서드를 호출할 때 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 다음 중 하나를 수행할 수 있는 적절한 방법을 사용하도록 &lt;em papago-id=&quot;26-1&quot;&gt;구성&lt;/em&gt;할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mock_a().method_a.return_value = 'Mocked A' 
    # ^ note parentheses
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는, 아마도 더 명시적으로:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mock_a.return_value.method_a.return_value = 'Mocked A'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 코드는 그 사건에서 작동했을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a = A&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(인스턴스를 만들지 않고 클래스를 삭제), 다음과 같이&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a.method_a()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 모의 수법을 촉발시켰을 겁니다&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;객체를 조롱하는 경우 다음 구문을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@mock.patch.object(
    a.A,
    'method_a',
    lambda a: &quot;Mocked A&quot;)
def test_method_b(self):
    b = a.B()
    b.method_b()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 method_a는 람다 함수에 의해 조롱됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저의 경우, 저의 return_value는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;{&quot;key1&quot;: &quot;value1&quot;}&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 저는 이것을 캐스팅할 필요가 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dict()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;패치를 적용하기 전에.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@fixture
def mock_something(mocker: MockFixture, request: SubRequest) -&amp;gt; MagicMock:
    method_to_mock = f&quot;your_module.YourClass.some_method&quot;
    return_value = dict(request.param)
    if isinstance(return_value, Exception):
        return mocker.patch(method_to_mock, side_effect=return_value)
    return mocker.patch(method_to_mock, return_value=return_value)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/38199008/&lt;a href=&quot;https://stackoverflow.com/questions/38199008/python-returns-magicmock-object-instead-of-return-value&quot; target=&quot;_blank&quot; papago-id=&quot;37-1&quot;&gt;python-returns-magicmock-object-instead-of-return-value&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/866</guid>
      <comments>https://gigabyte.tistory.com/866#entry866comment</comments>
      <pubDate>Tue, 18 Jul 2023 22:56:16 +0900</pubDate>
    </item>
    <item>
      <title>Pymongo를 사용하여 Mongodb의 연결 시간 제한을 설정하는 방법은 무엇입니까?</title>
      <link>https://gigabyte.tistory.com/865</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Pymongo를 사용하여 Mongodb의 연결 시간 제한을 설정하는 방법은 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설정해봤습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;connectTimeoutMS&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;socketTimeoutMS&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;값은 낮지만 스크립트가 시간 초과되기까지 약 20초가 걸립니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션을 올바르게 사용하지 않는 것입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 5초 후에 스크립트를 종료하기를 원합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def init_mongo():
    mongo_connection = MongoClient('%s' %MONGO_SERVER, connectTimeoutMS=5000, socketTimeoutMS=5000)
    if mongo_connection is None:
        return

    try:
        &amp;lt;code&amp;gt;
    except:
        &amp;lt;code&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 나중에 이런 일이 생기면 제가 잘못된 선택을 한 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 찾고 있던 것은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;serverSelectionTimeoutMS&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://api.mongodb.com/python/current/api/pymongo/mongo_client.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;6-1&quot;&gt;웹&lt;/a&gt; 페이지: https://api.mongodb.com/python/current/api/pymongo/mongo_client.html 에는 다음과 같은 내용이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;connectTimeoutMS: (정수 또는 없음) 서버에 새 소켓을 연결할 때 서버를 사용할 수 없다는 결론을 내릴 때까지 서버 모니터링 중에 드라이버가 대기하는 시간(밀리초)을 제어합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본값은 20000(20초)입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(&quot;서버 모니터링&quot;이 정의되지 않은 경우)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 어쩌라고&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;IsconnectTimeout&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MS는 (나처럼) 아마추어들을 막기 위한 미끼 같은 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/39297979/&lt;a href=&quot;https://stackoverflow.com/questions/39297979/how-to-set-connection-timeout-for-mongodb-using-pymongo&quot; target=&quot;_blank&quot; papago-id=&quot;10-1&quot;&gt;how-to-set-connection-timeout-for-mongodb-using-pymongo&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/865</guid>
      <comments>https://gigabyte.tistory.com/865#entry865comment</comments>
      <pubDate>Tue, 18 Jul 2023 22:55:43 +0900</pubDate>
    </item>
    <item>
      <title>네이티브 쿼리를 사용하여 스프링 데이터에서 사용자 지정 개체 반환</title>
      <link>https://gigabyte.tistory.com/864</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;네이티브 쿼리를 사용하여 스프링 데이터에서 사용자 지정 개체 반환&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 질문은 &lt;a href=&quot;https://stackoverflow.com/questions/36328063/how-to-return-a-custom-object-from-a-spring-data-jpa-group-by-query#answer-36329166&quot; papago-id=&quot;1-1&quot;&gt;다른&lt;/a&gt; 게시물을 &lt;a href=&quot;https://stackoverflow.com/questions/36328063/how-to-return-a-custom-object-from-a-spring-data-jpa-group-by-query#answer-36329166&quot; papago-id=&quot;1-1&quot;&gt;기반&lt;/a&gt;으로 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;네이티브 쿼리로 동일한 작업을 수행하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;네이티브 쿼리는 JPQL을 허용하지 않으므로 새 인스턴스도 허용하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나의 뽀조.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class Coordinates {

    private final BigDecimal latitude
    private final BigDecimal longitude

    ...
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 데이터베이스 테이블에는 도시 둘레에 대한 좌표가 포함되어 있으므로 city_name, 위도, 경도의 세 개 열이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 도시에는 Google 지도에서 그림자 영역을 만드는 데 사용될 많은 주변 좌표(실제로 LOTS)가 포함되어 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좌표 목록을 반환하는 간단한 네이티브 쿼리를 테이블에 작성하려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/29082749/spring-data-jpa-map-the-result-to-non-entity-pojo#answer-31966870&quot; papago-id=&quot;0-1&quot;&gt;다른 게시물&lt;/a&gt;에서 답을 찾았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 사용했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SqlResultSetMapping&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 함께&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ConstructorResult&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(다른 방법은 없습니다) 언급된 게시물의 수락된 답변에 대한 댓글에 특별한 주의를 기울이며: 당신은 다음을 추가할 필요가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@NamedNativeQuery&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용된 개체에 대한 주석&lt;/font&gt;&lt;/font&gt;&lt;code&gt;interface&lt;/code&gt; &lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 엔티티 이름 앞에 다음을 &lt;strong papago-id=&quot;4-0&quot;&gt;추가&lt;/strong&gt;합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면 작동하지 않을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Entity
@Table(name = &quot;grupo_setorial&quot;)
@SqlResultSetMapping(
        name = &quot;mapeamentoDeQuadrantes&quot;,
        classes = {
                @ConstructorResult(
                        targetClass = Coordenada.class,
                        columns = {
                                @ColumnResult(name = &quot;latitude&quot;),
                                @ColumnResult(name = &quot;longitude&quot;)
                        }
                )
        }
)
@NamedNativeQuery(
        name = &quot;GrupoCensitario.obterPerimetroDosSetores&quot;,
        query = &quot;SELECT latitude as latitude, longitude as longitude FROM coordenadas where id_setor IN (:setores)&quot;,
        resultSetMapping = &quot;mapeamentoDeQuadrantes&quot;
)
public class GrupoCensitario {
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 https://jira.spring.io/browse/&lt;a href=&quot;https://jira.spring.io/browse/DATAJPA-980&quot; rel=&quot;noreferrer&quot; papago-id=&quot;12-1&quot;&gt;DATAJPA-980&lt;/a&gt; 이며, &lt;a href=&quot;https://github.com/roberthunt/spring-data-native-query-projection/tree/master/src/main/java/uk/co/rbrt&quot; rel=&quot;noreferrer&quot; papago-id=&quot;12-3&quot;&gt;이&lt;/a&gt; 문제를 보여주는 프로젝트입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Query(value = &quot;SELECT name AS name, age AS age FROM Person&quot;, nativeQuery = true)
List&amp;lt;PersonSummary&amp;gt; findAllProjectedNativeQuery();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Hibernate 5.2.11과 함께 제공되는 Spring Data JPA 2.0 GA(Kay) 릴리스에서 수정되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Spring Data 1.10.12(Ingalls) 및 1.11.8(Hopper)에서도 이 문제가 해결되었지만 작동하려면 Hibernate 5.2.11에서 실행해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 JPA의 일부인 &lt;a href=&quot;http://docs.oracle.com/javaee/5/api/javax/persistence/SqlResultSetMapping.html&quot; papago-id=&quot;15-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;sql 결과 집합&lt;/a&gt; 매핑을 &lt;a href=&quot;http://docs.oracle.com/javaee/5/api/javax/persistence/SqlResultSetMapping.html&quot; papago-id=&quot;15-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;사용&lt;/a&gt;해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최신 버전을 사용하는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;spring-data&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 또한 그것을 이용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Repositories&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 개인적으로 &lt;a href=&quot;https://stackoverflow.com/a/42905382/6267583&quot; papago-id=&quot;8-1&quot;&gt;이탈라스&lt;/a&gt;의 대답이 올바른 해결책으로 이어진다고 생각합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사실 지금은 (Spring Data)에 대해 몰랐습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Projections&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 그가 그의 예에서 보여주고 있는 것을 이해할 시간이 필요했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 링크를 추가하고 싶습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Spring Data JPA - Reference Documentation&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#projections&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;12-1&quot;&gt;투영&lt;/a&gt; 챕터를 살펴봅니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Spring Data 쿼리 메서드는 일반적으로 리포지토리에서 관리하는 집계 루트의 인스턴스를 하나 이상 반환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이러한 유형의 특정 속성을 기반으로 투영을 작성하는 것이 바람직할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Spring Data를 사용하면 전용 반환 유형을 모델링하여 관리되는 Aggregate의 부분 뷰를 보다 선택적으로 검색할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 찾은 답은:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public interface UserEventRepository extends JpaRepository&amp;lt;UserEvent, Long&amp;gt; {

    List&amp;lt;UserEvent&amp;gt; findAllByUserId(Long userId);

    @Query(value = &quot;SELECT user_id FROM user_event ue &quot; +
                   &quot;WHERE ue.user_id = :userId&quot;, nativeQuery = true)
    List&amp;lt;Long&amp;gt; findUserIdByEventId(@Param(&quot;userId&quot;) Long userId);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 List of Long - list of ids를 반환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 핵심은 nativeQuery 속성을 true로 설정하고 있다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;값 자체가 실행할 쿼리입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그게 도움이 되길 바랍니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 분명한 해결책인 것 같습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝션 솔루션이 최고였습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(예를 들어 ID로 쿼리하면 확장 CRUD 작업을 사용할 수 있습니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리에 대한 응답으로 인터페이스를 다음과 같이 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리포지토리 예제:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Query(select * from tableA where tableA = :id)
DisplayLangLongI findTableAbyId(@Param(value = &quot;id&quot;) Long id)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예제 인터페이스(DisplayLangLongI.java)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public interface DisplayLangLongI () {
        BigDecimal getLatitude();
        BigDecimal getLongitude();
        ...... (you can add more)
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인터페이스에서 표시할 파라미터/객체를 선택할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/42893870/&lt;a href=&quot;https://stackoverflow.com/questions/42893870/return-custom-object-from-spring-data-with-native-query&quot; target=&quot;_blank&quot; papago-id=&quot;32-1&quot;&gt;return-custom-object-from-spring-data-with-native-query&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/864</guid>
      <comments>https://gigabyte.tistory.com/864#entry864comment</comments>
      <pubDate>Tue, 18 Jul 2023 22:55:03 +0900</pubDate>
    </item>
    <item>
      <title>Python: 목록 요소 간의 차이점 찾기</title>
      <link>https://gigabyte.tistory.com/863</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python: 목록 요소 간의 차이점 찾기&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;숫자의 리스트가 주어졌을 때, 각각의 ()의 차이를 어떻게 찾을 수 있을까요?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;i&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;)- 제1요소 및 그 (&lt;/font&gt;&lt;/font&gt;&lt;code&gt;i+1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;)-th?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 사용하는 것이 좋습니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;lambda&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;표현이나 목록 이해?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지정된 리스트&lt;/font&gt;&lt;/font&gt;&lt;code&gt;t=[1,3,6,...]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 목표는 목록을 찾는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;v=[2,3,...]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜냐면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;3-1=2&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;6-3=3&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,기타.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; t
[1, 3, 6]
&amp;gt;&amp;gt;&amp;gt; [j-i for i, j in zip(t[:-1], t[1:])]  # or use itertools.izip in py2k
[2, 3]
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 답은 맞지만 수치 작업을 하고 있다면 numpy를 고려해 보는 것이 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;numpy를 사용하면 답은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;v = numpy.diff(t)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하기 싫으면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;numpy&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도 아니다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;zip&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 다음의 솔루션을 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; t = [1, 3, 6]
&amp;gt;&amp;gt;&amp;gt; v = [t[i+1]-t[i] for i in range(len(t)-1)]
&amp;gt;&amp;gt;&amp;gt; v
[2, 3]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시작점&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Python 3.10&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새로운 기능으로 요소의 쌍을 슬라이드하여 롤링 페어에 매핑할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from itertools import pairwise

[y-x for (x, y) in pairwise([1, 3, 6, 7])]
# [2, 3, 1]
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;중간 결과는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;pairwise([1, 3, 6, 7])
# [(1, 3), (3, 6), (6, 7)]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;및 을 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;zip&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;효율적인 결과 구축:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from itertools import tee
# python2 only:
#from itertools import izip as zip

def differences(seq):
    iterable, copied = tee(seq)
    next(copied)
    for x, y in zip(iterable, copied):
        yield y - x
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 대신 다음을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from itertools import islice

def differences(seq):
    nexts = islice(seq, 1, None)
    for x, y in zip(seq, nexts):
        yield y - x
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또, 의 사용을 회피할 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;itertools&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모듈:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def differences(seq):
    iterable = iter(seq)
    prev = next(iterable)
    for element in iterable:
        yield element - prev
        prev = element
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 솔루션은 모든 결과를 저장하고 무한 반복 가능 여부를 지원할 필요가 없는 경우 일정한 공간에서 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;솔루션의 몇 가지 마이크로 벤치마크를 다음에 제시하겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;In [12]: L = range(10**6)

In [13]: from collections import deque
In [15]: %timeit deque(differences_tee(L), maxlen=0)
10 loops, best of 3: 122 ms per loop

In [16]: %timeit deque(differences_islice(L), maxlen=0)
10 loops, best of 3: 127 ms per loop

In [17]: %timeit deque(differences_no_it(L), maxlen=0)
10 loops, best of 3: 89.9 ms per loop
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기타 제안 솔루션:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;In [18]: %timeit [x[1] - x[0] for x in zip(L[1:], L)]
10 loops, best of 3: 163 ms per loop

In [19]: %timeit [L[i+1]-L[i] for i in range(len(L)-1)]
1 loops, best of 3: 395 ms per loop

In [20]: import numpy as np

In [21]: %timeit np.diff(L)
1 loops, best of 3: 479 ms per loop

In [35]: %%timeit
    ...: res = []
    ...: for i in range(len(L) - 1):
    ...:     res.append(L[i+1] - L[i])
    ...: 
1 loops, best of 3: 234 ms per loop
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주의:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;zip(L[1:], L)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 동등하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;zip(L[1:], L[:-1])&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부터&lt;/font&gt;&lt;/font&gt;&lt;code&gt;zip&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 이미 최단 입력으로 종료되어 있습니다만, 그 때문에, 의 카피 전체가 회피됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;L&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 인덱스 액세스는 python의 메서드 호출이기 때문에 인덱스로 단일 요소에 &lt;em papago-id=&quot;32-1&quot;&gt;액세스하는&lt;/em&gt; 것은 매우 느립니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;code&gt;numpy.diff&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 변환이 필요하기 때문에 &lt;em papago-id=&quot;33-1&quot;&gt;속도&lt;/em&gt;가 느립니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;list&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 대해서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ndarray&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론, 만약 &lt;em papago-id=&quot;35-1&quot;&gt;당신&lt;/em&gt;이 이 모든 것을&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ndarray&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;36-1&quot;&gt;훨씬&lt;/em&gt; 더 빠를 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;In [22]: arr = np.array(L)

In [23]: %timeit np.diff(arr)
100 loops, best of 3: 3.02 ms per loop
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 사용하는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;v = np.diff(t)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 간단하고 읽기 쉽다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 네가 원한다면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;v&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;길이가 같다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;t&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고나서&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;v = np.diff([t[0]] + t) # for python 3.x
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;v = np.diff(t + [t[-1]])
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: 이것은 목록에 대해서만 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;numpy 어레이의 경우&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;v = np.diff(np.append(t[0], t))
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용방법&lt;/font&gt;&lt;/font&gt;&lt;code&gt;:=&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python 3.8+에서 사용할 수 있는 바다코끼리 연산자:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; t = [1, 3, 6]
&amp;gt;&amp;gt;&amp;gt; prev = t[0]; [-prev + (prev := x) for x in t[1:]]
[2, 3]
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능적 접근법:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; import operator
&amp;gt;&amp;gt;&amp;gt; a = [1,3,5,7,11,13,17,21]
&amp;gt;&amp;gt;&amp;gt; map(operator.sub, a[1:], a[:-1])
[2, 2, 2, 4, 2, 4, 4]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제너레이터 사용:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; import operator, itertools
&amp;gt;&amp;gt;&amp;gt; g1,g2 = itertools.tee((x*x for x in xrange(5)),2)
&amp;gt;&amp;gt;&amp;gt; list(itertools.imap(operator.sub, itertools.islice(g1,1,None), g2))
[1, 3, 5, 7]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인덱스 사용:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; [a[i+1]-a[i] for i in xrange(len(a)-1)]
[2, 2, 2, 4, 2, 4, 4]
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좋아, 내가 적절한 해결책을 찾은 것 같아&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;v = [x[0]-x[1] for x in zip(t[1:],t[:-1])]
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어쨌든 numpy diff 명령어는 다음과 같은 기능을 하고 있다고 생각합니다만, 완전성을 위해서 서브 벡터를 간단하게 구별할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from numpy import array as a
a(x[1:])-a(x[:-1])
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 질문의 일반화에 다음 솔루션을 추가하고자 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정기적인 경계가 있는 솔루션&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;때로는 수치 통합으로 주기적인 경계 조건을 사용하여 목록을 비교해야 할 수 있습니다(따라서 첫 번째 요소는 마지막까지의 차이를 계산합니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 numpy.roll 함수가 도움이 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;v-np.roll(v,1)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가되지 않은 솔루션&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(완전성을 위해) 또 다른 &lt;a href=&quot;https://numpy.org/doc/stable/reference/generated/numpy.ediff1d.html?highlight=ediff#numpy.ediff1d&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;56-1&quot;&gt;수치형&lt;/a&gt; 솔루션은&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;numpy.ediff1d(v)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 numpy.diff로 동작하지만 벡터에서만 동작합니다(입력 배열을 평탄화합니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과 벡터에 숫자를 추가하거나 추가할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 기능은 기상 변수(예: 비, 잠열 등)의 경우 플럭스인 누적 필드를 처리할 때 유용합니다. 첫 번째 입력은 변경되지 않고 입력 변수와 동일한 길이의 결과 목록을 원할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 너는 글을 쓸 것이다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;np.ediff1d(v,to_begin=v[0])
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 np.diff 명령어를 사용하여 이 작업을 수행할 수도 있습니다.단, 이 경우 prepend 키워드를 사용하여 시리즈에 제로를 부가해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;np.diff(v,prepend=0.0) 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 모든 솔루션은 입력과 같은 길이의 벡터를 반환합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 다음을 사용하여 차이를 쉽게 읽을 수 있는 전환 매트릭스로 변환할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;v = t.reshape((c,r)).T - t.T
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서 ★★★★★&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;c&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;= 목록 내 항목 수 및&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;r&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;목록은 기본적으로 벡터 또는 1D 배열이므로 = 1입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나의 방법이다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt;v = [1,2,3,4,5]
&amp;gt;&amp;gt;&amp;gt;[v[i] - v[i-1] for i, value in enumerate(v[1:], 1)]
[1, 1, 1, 1]
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/2400840/&lt;a href=&quot;https://stackoverflow.com/questions/2400840/python-finding-differences-between-elements-of-a-list&quot; target=&quot;_blank&quot; papago-id=&quot;66-1&quot;&gt;python-finding-differences-between-elements-of-a-list&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>list</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/863</guid>
      <comments>https://gigabyte.tistory.com/863#entry863comment</comments>
      <pubDate>Mon, 24 Apr 2023 23:27:34 +0900</pubDate>
    </item>
    <item>
      <title>.net core 2.0에서 x-powered-by 헤더를 삭제하는 방법</title>
      <link>https://gigabyte.tistory.com/862</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.net core 2.0에서 x-powered-by 헤더를 삭제하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 미들웨어를 사용하려고 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class SecurityHeadersMiddleware
{
    private readonly RequestDelegate next;

    public SecurityHeadersMiddleware(RequestDelegate next)
    {
        this.next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        context.Response.OnStarting(state =&amp;gt;
        {
            var ctx = (HttpContext)state;

            if (!ctx.Response.Headers.ContainsKey(&quot;Arr-Disable-Session-Affinity&quot;))
            {
                ctx.Response.Headers.Add(&quot;Arr-Disable-Session-Affinity&quot;, &quot;True&quot;); // Disables the Azure ARRAffinity cookie
            }

            if (ctx.Response.Headers.ContainsKey(&quot;Server&quot;))
            {
                ctx.Response.Headers.Remove(&quot;Server&quot;); // For security reasons
            }

            if (ctx.Response.Headers.ContainsKey(&quot;x-powered-by&quot;) || ctx.Response.Headers.ContainsKey(&quot;X-Powered-By&quot;))
            {
                ctx.Response.Headers.Remove(&quot;x-powered-by&quot;);
                ctx.Response.Headers.Remove(&quot;X-Powered-By&quot;);
            }

            if (!ctx.Response.Headers.ContainsKey(&quot;X-Frame-Options&quot;))
            {
                ctx.Response.Headers.Add(&quot;X-Frame-Options&quot;, &quot;DENY&quot;);
            }

            return Task.FromResult(0);
        }, context);

        await next(context);
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;x-powered-by는 응답 헤더에 asp.net로 표시됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;IIS의 일부인 Request Filtering 모듈을 사용하면 이러한 헤더를 쉽게 제거할 수 있는 것으로 알고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;헤더를 삭제하려면 다음 내용을 포함한 web.config 파일을 사이트에 저장해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;configuration&amp;gt;

  &amp;lt;!-- To customize the asp.net core module uncomment and edit the following section. 
  For more info see https://go.microsoft.com/fwlink/?linkid=838655 --&amp;gt;

  &amp;lt;system.webServer&amp;gt;
    &amp;lt;handlers&amp;gt;
      &amp;lt;remove name=&quot;aspNetCore&quot;/&amp;gt;
      &amp;lt;add name=&quot;aspNetCore&quot; path=&quot;*&quot; verb=&quot;*&quot; modules=&quot;AspNetCoreModule&quot; resourceType=&quot;Unspecified&quot;/&amp;gt;
    &amp;lt;/handlers&amp;gt;
    &amp;lt;aspNetCore processPath=&quot;%LAUNCHER_PATH%&quot; arguments=&quot;%LAUNCHER_ARGS%&quot; stdoutLogEnabled=&quot;false&quot; stdoutLogFile=&quot;.\logs\stdout&quot; /&amp;gt;
    &amp;lt;httpProtocol&amp;gt;
      &amp;lt;customHeaders&amp;gt;
        &amp;lt;remove name=&quot;X-Powered-By&quot; /&amp;gt;
      &amp;lt;/customHeaders&amp;gt;
    &amp;lt;/httpProtocol&amp;gt;
  &amp;lt;/system.webServer&amp;gt;


&amp;lt;/configuration&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 web.config를 네트워크 코어 애플리케이션의 루트 폴더에 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 x-powered-by 헤더를 삭제합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/UZSYg.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UZSYg.png&quot; alt=&quot;여기에 이미지 설명 입력&quot; papago-attr-id=&quot;1&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;ul&gt; 
 &lt;li papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@Brando Zhang 답변 외에 &quot;Server:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;응답 헤더로부터의 Kestrel:&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;-.NET 코어 1&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; var host = new WebHostBuilder()
        .UseKestrel(c =&amp;gt; c.AddServerHeader = false)
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseIISIntegration()
        .UseStartup&amp;lt;Startup&amp;gt;()
        .Build();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;- NET Core 2&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;WebHost.CreateDefaultBuilder(args)
               .UseKestrel(c =&amp;gt; c.AddServerHeader = false)
               .UseStartup&amp;lt;Startup&amp;gt;()
               .Build();
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ASP에 web.config 파일을 작성하지 않는 경우.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET Core 솔루션에서는, 이 솔루션을 삭제할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;X-Powered-By&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;IIS Manager의 헤더.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 클릭합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;ServerName&amp;gt; --&amp;gt; HTTP Response Headers --&amp;gt; X-Powered-By&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택해주세요&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Remove&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;액션.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/sdBmJ.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/sdBmJ.png&quot; alt=&quot;IIS&quot; papago-attr-id=&quot;2&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버상의 모든 Web 사이트의 헤더가 삭제됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;애초에 왜 그 정보를 공유하려고 합니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 답변 대신 구성 &lt;a href=&quot;https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/transform-webconfig&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;5-1&quot;&gt;&lt;em papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변환&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;을 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇게 하면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;web.config&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 dotnet publisher sdk를 통해 계속 생성되지만 헤더 삭제 등의 특정 태그와 혼합될 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트의 루트에 새로운 것을 작성&lt;/font&gt;&lt;/font&gt;&lt;code&gt;web.Release.config&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 파일합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-xml prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;configuration xmlns:xdt=&quot;http://schemas.microsoft.com/XML-Document-Transform&quot;&amp;gt;
  &amp;lt;location&amp;gt;

    &amp;lt;!-- To customize the asp.net core module uncomment and edit the following section. 
    For more info see https://go.microsoft.com/fwlink/?linkid=838655 --&amp;gt;
    &amp;lt;system.webServer&amp;gt;
      &amp;lt;httpProtocol xdt:Transform=&quot;InsertIfMissing&quot;&amp;gt;
        &amp;lt;customHeaders&amp;gt;
          &amp;lt;remove name=&quot;X-Powered-By&quot; /&amp;gt;
        &amp;lt;/customHeaders&amp;gt;
      &amp;lt;/httpProtocol&amp;gt;
    &amp;lt;/system.webServer&amp;gt;

  &amp;lt;/location&amp;gt;
&amp;lt;/configuration&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;9-1&quot;&gt;이것은 변환&lt;/em&gt; 파일이며 실제 파일이 아닙니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;web.config&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/45882715/&lt;a href=&quot;https://stackoverflow.com/questions/45882715/how-to-remove-x-powered-by-header-in-net-core-2-0&quot; target=&quot;_blank&quot; papago-id=&quot;23-1&quot;&gt;how-to-remove-x-powered-by-header-in-net-core-2-0&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>azure</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/862</guid>
      <comments>https://gigabyte.tistory.com/862#entry862comment</comments>
      <pubDate>Mon, 24 Apr 2023 23:27:25 +0900</pubDate>
    </item>
    <item>
      <title>iPad 멀티태스킹 지원에는 다음과 같은 방향성이 필요합니다.</title>
      <link>https://gigabyte.tistory.com/861</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iPad 멀티태스킹 지원에는 다음과 같은 방향성이 필요합니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;범용 iOS 9 앱을 Apple(Xcode 7 GM 탑재)에 제출하려고 하는데, 검토를 &lt;em papago-id=&quot;1-1&quot;&gt;위해 제출을 선택&lt;/em&gt;했을 때 iTunes Connect 번들에 대해 다음 오류 메시지가 나타납니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유효하지 않은 번들.아이패드 멀티태스킹 지원에는 다음 방향이 필요합니다.'&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;전면 방향 세로,&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;UIInterface Orientation 세로 위아래,&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;UInterfaceOrientationLandscape왼쪽,&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;인터페이스 오리엔테이션 랜드스케이프 오른쪽'&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;'를 찾았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;전면 방향 세로,&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;UIInterfaceOrientationPortraftUpsideDown' 번들 'com'.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;비트커피&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PhotoMarks.i&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;OS' 입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 앱은 세로 방향과 세로 방향 위아래 방향은 지원하지만 다른 두 방향은 지원하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 요구 사항에 대한 해결 방법이 있습니까? 아니면 모든 iOS 9 iPad 앱이 네 가지 방향을 모두 가져야 합니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iPad 멀티태스킹 지원에는 모든 방향성이 필요하지만 앱은 그렇지 않기 때문에 이 기능을 사용하지 않고&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UIRequiresFullScreen&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Xcode 프로젝트의 열쇠&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Info.plist&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일화하여 Boolean 값을 적용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;YES&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Xcode x 、 [ General ]&amp;gt; [ Targets ]아래에 있는 [Requires Full Screen]체크박스를 켜겠습니다&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yHwRI.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yHwRI.jpg&quot; alt=&quot;여기에 이미지 설명 입력&quot; papago-attr-id=&quot;1&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Xamarin을 사용 중인데 UI에서 &quot;전체 화면 필요&quot;를 지정할 수 있는 옵션이 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 나는 @Michael Wang의 대답을 약간 수정해서 따라야 했다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이하에, 이하를 참조해 주세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;텍스트 편집기에서 info.plist 파일을 열고 다음 행을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;key&amp;gt;UIRequiresFullScreen&amp;lt;/key&amp;gt;
&amp;lt;true/&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;값을 &quot;YES&quot;로 설정하려고 했지만 효과가 없었고, 예상대로였습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;궁금하실까 봐 위 행을 UISupped 아래에 배치했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;[ Interface Orientations ]섹션&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;key&amp;gt;UISupportedInterfaceOrientations~ipad&amp;lt;/key&amp;gt;
&amp;lt;array&amp;gt;
    &amp;lt;string&amp;gt;UIInterfaceOrientationPortrait&amp;lt;/string&amp;gt;
    &amp;lt;string&amp;gt;UIInterfaceOrientationPortraitUpsideDown&amp;lt;/string&amp;gt;
&amp;lt;/array&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이게 도움이 됐으면 좋겠네요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;마이클 덕분이야&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마이클이 말했듯이&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;멀티태스킹을 지원하지 않을 경우 xcodeproj 대상의 &quot;전체 화면 필요&quot;를 선택하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 다음 디바이스 방향을 확인합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;초상화&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;거꾸로&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왼쪽 가로&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오른쪽 가로&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 론칭 스토리보드를 지원해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;[디바이스 &lt;strong papago-id=&quot;23-1&quot;&gt;방향]&lt;/strong&gt;을&lt;strong papago-id=&quot;23-1&quot;&gt; 모두&lt;/strong&gt; 끄고 &lt;strong papago-id=&quot;23-1&quot;&gt;[전체 &lt;/strong&gt;화면 필요]만 &lt;strong papago-id=&quot;23-1&quot;&gt;체크&lt;/strong&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;정상적으로 동작하고 있다&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;[ Xcode ]&amp;gt; [ General ]&amp;gt; [ Requires full screen ](상태바 숨기기)를 true로 설정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Michael의 말대로 [General]&amp;gt; [ Targets ]의 [Requires Full Screen]체크박스를 켜겠습니다&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 'CFBundle Icons-ipad'도 info.plst에서 삭제합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이건 내게 효과가 있었다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;xcode의 info.plist 파일의 지원되는 인터페이스 방향 필드에 세로(상단 홈 버튼)를 추가해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/pGiAB.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/pGiAB.png&quot; alt=&quot;여기에 이미지 설명 입력&quot; papago-attr-id=&quot;2&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/32559724/&lt;a href=&quot;https://stackoverflow.com/questions/32559724/ipad-multitasking-support-requires-these-orientations&quot; target=&quot;_blank&quot; papago-id=&quot;29-1&quot;&gt;ipad-multitasking-support-requires-these-orientations&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>ios</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/861</guid>
      <comments>https://gigabyte.tistory.com/861#entry861comment</comments>
      <pubDate>Mon, 24 Apr 2023 23:27:17 +0900</pubDate>
    </item>
    <item>
      <title>Azure WebJobs ServiceBus가 예외 반환: 인가 컨텍스트에서 2개의 DNS 클레임을 발견함</title>
      <link>https://gigabyte.tistory.com/860</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Azure WebJobs ServiceBus가 예외 반환: 인가 컨텍스트에서 2개의 DNS 클레임을 발견함&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Azure WebJob을 사용하여 Azure ServiceBus 큐에서 메시지를 읽으려고 하는데 다음 메시지가 느려지고 예외가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Unhandled Exception: System.InvalidOperationException: Found 2 DNS claims in authorization context.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;AzureWebJobsServiceBus&quot;, &quot;AzureWebJobsDashboard&quot; 및 &quot;AzureWebJobsStorage&quot;라는 올바른 연결 문자열을 설정했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WebJob 프로그램 코드가 JobHostConfiguration을 사용하도록 업데이트되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class Program
{
    static void Main()
    {
        var config = new JobHostConfiguration();
        config.UseServiceBus();

        var host = new JobHost(config);
        host.RunAndBlock();
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 실제 작업 방법은&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class Functions
{
    public async static Task ServiceBusResizeRequest(
         [ServiceBusTrigger(&quot;blah&quot;)] string message,             
         TextWriter log
         )
    {            
        await log.WriteLineAsync(&quot;got message &quot; + message);
    }

}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;별도의 콘솔애플리케이션을 사용하여 큐에 정상적으로 작성 및 쓸 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 웹 작업 응용 프로그램을 실행하면 예외가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좋은 생각 있어요?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집: .net 4.6.1 사용&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해결책으로 표시된 답은 솔루션이 아니라 실패한 작업입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;에서 사용하는 솔루션.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Net Framework 4.6.1은 App.config의 routime 블록에 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;AppContextSwitchOverrides value=&quot;Switch.System.IdentityModel.DisableMultipleDNSEntriesInSANCertificate=true&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://msdn.microsoft.com/en-us/library/mt620030(v=vs.110).aspx&quot; papago-id=&quot;10-1&quot; rel=&quot;noreferrer&quot;&gt;경감: X509&lt;/a&gt; Certificate Claim Set &lt;a href=&quot;https://msdn.microsoft.com/en-us/library/mt620030(v=vs.110).aspx&quot; papago-id=&quot;10-1&quot; rel=&quot;noreferrer&quot;&gt;(&lt;/a&gt;X509 Certificate Claim Set&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://msdn.microsoft.com/en-us/library/mt620030(v=vs.110).aspx&quot; papago-id=&quot;10-1&quot; rel=&quot;noreferrer&quot;&gt;Find Claims 메서드&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;11-1&quot;&gt;현재&lt;/strong&gt; Azure WebApps/WebJob 등은 4.6.1을 지원하지 않습니다(2016년 1월 21일에 언급).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 4.6.1로 웹 구인 애플리케이션을 개발할 수 있지만 Azure로 푸시하면 다음과 같은 예외를 볼 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Job failed due to exit code -2146232576&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1월 29일 Microsoft는 NuGet &lt;strong papago-id=&quot;13-1&quot;&gt;패키지&lt;/strong&gt; WindowsAzure&lt;strong papago-id=&quot;13-1&quot;&gt; &lt;/strong&gt;버전 3.1.3을 출시했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;13-1&quot;&gt;서비스&lt;/strong&gt; 버스&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;릴리스 노트:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;• 일반: .&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Net 4.6.1+ 호환성 수정.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;WIF에 의해 반환된 여러 DNS 클레임에 대응하도록 커스텀 DNS Identity Verifier 수정&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;패키지 업그레이드로 문제가 해결되었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/34594127/4090370&quot; papago-id=&quot;17-1&quot;&gt;위의 답변&lt;/a&gt;에서 개략적으로 설명한 바와 같이, 아래의 스니펫이 도움이 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;runtime&amp;gt;
    ...
    &amp;lt;AppContextSwitchOverrides value=&quot;Switch.System.DisableMultipleDNSEntriesInSANCertificate=true&quot; /&amp;gt;
    ...
&amp;lt;runtime&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;18-4&quot;&gt;다만&lt;/strong&gt;, &lt;strong papago-id=&quot;18-2&quot;&gt;솔루션&lt;/strong&gt;의 올바른 프로젝트에 추가할 때는 주의해 주세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Azure 코드 및 Azure 참조가 포함된 프로젝트에 추가합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Microsoft는 이 문제를 해결하기 위해 새로운 패키지(새로운 이름으로)를 출시했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서...&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 제거하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Microsoft.AspNet.SignalR.ServiceBus&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;패키지,&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 인스톨 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Microsoft.AspNet.SignalR.ServiceBus3&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 패키지,&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 업그레이드하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;WindowsAzure.ServiceBus&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;패키지.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은 이쪽:https://github.com/SignalR/SignalR/issues/3548#&lt;a href=&quot;https://github.com/SignalR/SignalR/issues/3548#issuecomment-296326048&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;26-1&quot;&gt;issuecomment-296326048&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.net 4.6.1에서4.6으로 다운그레이드하면 문제가 발생하지 않을 것으로 보입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오늘 이 문제에 부딪혔는데 전혀 몰랐어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막으로 현재 사용하고 있는 Azure nuget 패키지(Webjobs, servicebus 등)와 BOOM! it WORKS를 모두 업그레이드하기로 했습니다.앞으로 이 문제에 직면하게 되면 도움이 될 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트한 후부터 실패하기 시작했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET Framework를 4.5.2에서 4.7로 수정한 것은 Nuget 패키지 &lt;strong papago-id=&quot;29-1&quot;&gt;WindowsAzure &lt;/strong&gt;업데이트뿐입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;29-1&quot;&gt;5.2.0에 대한 ServiceBus&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/34329056/&lt;a href=&quot;https://stackoverflow.com/questions/34329056/azure-webjobs-servicebus-returns-exception-found-2-dns-claims-in-authorization&quot; target=&quot;_blank&quot; papago-id=&quot;30-1&quot;&gt;azure-webjobs-servicebus-returns-exception-found-2-dns-claims-in-authorization&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>azure</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/860</guid>
      <comments>https://gigabyte.tistory.com/860#entry860comment</comments>
      <pubDate>Mon, 24 Apr 2023 23:27:09 +0900</pubDate>
    </item>
    <item>
      <title>WPF에서 작동하도록 애니메이션 gif를 가져오려면 어떻게 해야 하나요?</title>
      <link>https://gigabyte.tistory.com/859</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WPF에서 작동하도록 애니메이션 gif를 가져오려면 어떻게 해야 하나요?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하면 요? - 어떤 컨트롤 타입을 사용하면 좋을까요?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Image&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MediaElement&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; . 기기 기? 등??&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문에 대한 가장 일반적인 답변(위의 Dario)이 제대로 작동하지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과는 이상하고, 이상한 유물이 있는 끊긴 애니메이션이었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금까지 찾은 최고의 솔루션: https://github.com/&lt;a href=&quot;https://github.com/XamlAnimatedGif/WpfAnimatedGif&quot; rel=&quot;noreferrer&quot; papago-id=&quot;4-1&quot;&gt;XamlAnimatedGif&lt;/a&gt;/WpfAnimatedGif&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;NuGet과 함께 설치할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;PM&amp;gt; Install-Package WpfAnimatedGif&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;gif 이미지를 추가하고 아래와 같이 사용할 창의 새 네임스페이스에서 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Window x:Class=&quot;MainWindow&quot;
    xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
    xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
    xmlns:gif=&quot;http://wpfanimatedgif.codeplex.com&quot; &amp;lt;!-- THIS NAMESPACE --&amp;gt;
    Title=&quot;MainWindow&quot; Height=&quot;350&quot; Width=&quot;525&quot;&amp;gt;

&amp;lt;Grid&amp;gt;
    &amp;lt;!-- EXAMPLE USAGE BELOW --&amp;gt;
    &amp;lt;Image gif:ImageBehavior.AnimatedSource=&quot;Images/animated.gif&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;패키지는 매우 깔끔하며 다음과 같은 특성을 설정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Image gif:ImageBehavior.RepeatBehavior=&quot;3x&quot;
       gif:ImageBehavior.AnimatedSource=&quot;Images/animated.gif&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드에서도 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var image = new BitmapImage();
image.BeginInit();
image.UriSource = new Uri(fileName);
image.EndInit();
ImageBehavior.SetAnimatedSource(img, image);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집: Silverlight 지원&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;silverlight 프로젝트에 애니메이션 GIF 지원을 추가하려면 github.com/&lt;a href=&quot;http://github.com/XamlAnimatedGif/XamlAnimatedGif&quot; rel=&quot;noreferrer&quot; papago-id=&quot;10-1&quot;&gt;XamlAnimatedGif&lt;/a&gt;/XamlAnimatedGif를 사용하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지 컨트롤을 확장하고 Gif 디코더를 사용하여 솔루션을 게시합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; propertygif는 frames property가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;으로 만들어요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FrameIndex&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;★★★★★★★★★★★★★★★★★★★★★★★.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ChangingFrameIndex&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는, 을, 「송신원」의하는 프레임으로 변경합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FrameIndex&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(어느 쪽인가 하면)&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;【기프】10】&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class GifImage : Image
{
    private bool _isInitialized;
    private GifBitmapDecoder _gifDecoder;
    private Int32Animation _animation;

    public int FrameIndex
    {
        get { return (int)GetValue(FrameIndexProperty); }
        set { SetValue(FrameIndexProperty, value); }
    }

    private void Initialize()
    {
        _gifDecoder = new GifBitmapDecoder(new Uri(&quot;pack://application:,,,&quot; + this.GifSource), BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
        _animation = new Int32Animation(0, _gifDecoder.Frames.Count - 1, new Duration(new TimeSpan(0, 0, 0, _gifDecoder.Frames.Count / 10, (int)((_gifDecoder.Frames.Count / 10.0 - _gifDecoder.Frames.Count / 10) * 1000))));
        _animation.RepeatBehavior = RepeatBehavior.Forever;
        this.Source = _gifDecoder.Frames[0];

        _isInitialized = true;
    }

    static GifImage()
    {
        VisibilityProperty.OverrideMetadata(typeof (GifImage),
            new FrameworkPropertyMetadata(VisibilityPropertyChanged));
    }

    private static void VisibilityPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
    {
        if ((Visibility)e.NewValue == Visibility.Visible)
        {
            ((GifImage)sender).StartAnimation();
        }
        else
        {
            ((GifImage)sender).StopAnimation();
        }
    }

    public static readonly DependencyProperty FrameIndexProperty =
        DependencyProperty.Register(&quot;FrameIndex&quot;, typeof(int), typeof(GifImage), new UIPropertyMetadata(0, new PropertyChangedCallback(ChangingFrameIndex)));

    static void ChangingFrameIndex(DependencyObject obj, DependencyPropertyChangedEventArgs ev)
    {
        var gifImage = obj as GifImage;
        gifImage.Source = gifImage._gifDecoder.Frames[(int)ev.NewValue];
    }

    /// &amp;lt;summary&amp;gt;
    /// Defines whether the animation starts on it's own
    /// &amp;lt;/summary&amp;gt;
    public bool AutoStart
    {
        get { return (bool)GetValue(AutoStartProperty); }
        set { SetValue(AutoStartProperty, value); }
    }

    public static readonly DependencyProperty AutoStartProperty =
        DependencyProperty.Register(&quot;AutoStart&quot;, typeof(bool), typeof(GifImage), new UIPropertyMetadata(false, AutoStartPropertyChanged));

    private static void AutoStartPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
    {
        if ((bool)e.NewValue)
            (sender as GifImage).StartAnimation();
    }

    public string GifSource
    {
        get { return (string)GetValue(GifSourceProperty); }
        set { SetValue(GifSourceProperty, value); }
    }

    public static readonly DependencyProperty GifSourceProperty =
        DependencyProperty.Register(&quot;GifSource&quot;, typeof(string), typeof(GifImage), new UIPropertyMetadata(string.Empty, GifSourcePropertyChanged));

    private static void GifSourcePropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
    {
        (sender as GifImage).Initialize();
    }

    /// &amp;lt;summary&amp;gt;
    /// Starts the animation
    /// &amp;lt;/summary&amp;gt;
    public void StartAnimation()
    {
        if (!_isInitialized)
            this.Initialize();

        BeginAnimation(FrameIndexProperty, _animation);
    }

    /// &amp;lt;summary&amp;gt;
    /// Stops the animation
    /// &amp;lt;/summary&amp;gt;
    public void StopAnimation()
    {
        BeginAnimation(FrameIndexProperty, null);
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용 예(XAML):&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;controls:GifImage x:Name=&quot;gifImage&quot; Stretch=&quot;None&quot; GifSource=&quot;/SomeImage.gif&quot; AutoStart=&quot;True&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작은 앱은 어때? 코드 배후에:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public MainWindow()
{
  InitializeComponent();
  Files = Directory.GetFiles(@&quot;I:\images&quot;);
  this.DataContext= this;
}
public string[] Files
{get;set;}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XAML:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Window x:Class=&quot;PicViewer.MainWindow&quot;
        xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
        xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
        Title=&quot;MainWindow&quot; Height=&quot;350&quot; Width=&quot;525&quot;&amp;gt;
    &amp;lt;Grid&amp;gt;
        &amp;lt;Grid.ColumnDefinitions&amp;gt;
            &amp;lt;ColumnDefinition Width=&quot;175&quot; /&amp;gt;
            &amp;lt;ColumnDefinition Width=&quot;*&quot; /&amp;gt;
        &amp;lt;/Grid.ColumnDefinitions&amp;gt;
        &amp;lt;ListBox x:Name=&quot;lst&quot; ItemsSource=&quot;{Binding Path=Files}&quot;/&amp;gt;
        &amp;lt;MediaElement Grid.Column=&quot;1&quot; LoadedBehavior=&quot;Play&quot; Source=&quot;{Binding ElementName=lst, Path=SelectedItem}&quot; Stretch=&quot;None&quot;/&amp;gt;
    &amp;lt;/Grid&amp;gt;
&amp;lt;/Window&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 검색을 해봤는데, 오래된 MSDN 포럼의 스레드에서 몇 가지 다른 솔루션을 발견했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(링크가 작동하지 않아 삭제)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;할 수 있는 은 WinForms를 하는 것 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PictureBox&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(대부분 같은 스레드에서 몇 가지 항목을 추출) 제어하고 이렇게 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 「」에 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;System.Windows.Forms&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;WindowsFormsIntegration&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; , , , , 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;System.Drawing&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 프로젝트에 착수할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Window x:Class=&quot;GifExample.Window1&quot;
    xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
    xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
    xmlns:wfi=&quot;clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration&quot;
    xmlns:winForms=&quot;clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms&quot;
    Loaded=&quot;Window_Loaded&quot; &amp;gt;
    &amp;lt;Grid&amp;gt;
        &amp;lt;wfi:WindowsFormsHost&amp;gt;
            &amp;lt;winForms:PictureBox x:Name=&quot;pictureBoxLoading&quot;&amp;gt;
            &amp;lt;/winForms:PictureBox&amp;gt;
        &amp;lt;/wfi:WindowsFormsHost&amp;gt;
    &amp;lt;/Grid&amp;gt;
&amp;lt;/Window &amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 후 리 the the &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Window_Loaded&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 「」를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pictureBoxLoading.ImageLocation&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속성을 표시할 이미지 파일 경로에 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;private void Window_Loaded(object sender, RoutedEventArgs e)
{
    pictureBoxLoading.ImageLocation = &quot;../Images/mygif.gif&quot;;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MediaElement&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 언급되어 만, 도 언급되어 있기  이 스레드에  2개의 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Image&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;통제하기 때문에 이게 가장 간단하죠&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;MediaElement&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;MediaElement  Height=&quot;113&quot; HorizontalAlignment=&quot;Left&quot; Margin=&quot;12,12,0,0&quot; 
Name=&quot;mediaElement1&quot; VerticalAlignment=&quot;Top&quot; Width=&quot;198&quot; Source=&quot;C:\Users\abc.gif&quot;
LoadedBehavior=&quot;Play&quot; Stretch=&quot;Fill&quot; SpeedRatio=&quot;1&quot; IsMuted=&quot;False&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 내 애니메이션 이미지 컨트롤 버전이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;표준 속성 소스를 사용하여 이미지 소스를 지정할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 그것을 더욱 개선했다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 러시아인이고 프로젝트는 러시아인이기 때문에 코멘트도 러시아어로 되어 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 어쨌든 당신은 코멘트 없이도 모든 것을 이해할 수 있어야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;:)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/// &amp;lt;summary&amp;gt;
/// Control the &quot;Images&quot;, which supports animated GIF.
/// &amp;lt;/summary&amp;gt;
public class AnimatedImage : Image
{
    #region Public properties

    /// &amp;lt;summary&amp;gt;
    /// Gets / sets the number of the current frame.
    /// &amp;lt;/summary&amp;gt;
    public int FrameIndex
    {
        get { return (int) GetValue(FrameIndexProperty); }
        set { SetValue(FrameIndexProperty, value); }
    }

    /// &amp;lt;summary&amp;gt;
    /// Gets / sets the image that will be drawn.
    /// &amp;lt;/summary&amp;gt;
    public new ImageSource Source
    {
        get { return (ImageSource) GetValue(SourceProperty); }
        set { SetValue(SourceProperty, value); }
    }

    #endregion

    #region Protected interface

    /// &amp;lt;summary&amp;gt;
    /// Provides derived classes an opportunity to handle changes to the Source property.
    /// &amp;lt;/summary&amp;gt;
    protected virtual void OnSourceChanged(DependencyPropertyChangedEventArgs aEventArgs)
    {
        ClearAnimation();

        BitmapImage lBitmapImage = aEventArgs.NewValue as BitmapImage;

        if (lBitmapImage == null)
        {
            ImageSource lImageSource = aEventArgs.NewValue as ImageSource;
            base.Source = lImageSource;
            return;
        }

        if (!IsAnimatedGifImage(lBitmapImage))
        {
            base.Source = lBitmapImage;
            return;
        }

        PrepareAnimation(lBitmapImage);
    }

    #endregion

    #region Private properties

    private Int32Animation Animation { get; set; }
    private GifBitmapDecoder Decoder { get; set; }
    private bool IsAnimationWorking { get; set; }

    #endregion

    #region Private methods

    private void ClearAnimation()
    {
        if (Animation != null)
        {
            BeginAnimation(FrameIndexProperty, null);
        }

        IsAnimationWorking = false;
        Animation = null;
        Decoder = null;
    }

    private void PrepareAnimation(BitmapImage aBitmapImage)
    {
        Debug.Assert(aBitmapImage != null);

        if (aBitmapImage.UriSource != null)
        {
            Decoder = new GifBitmapDecoder(
                aBitmapImage.UriSource,
                BitmapCreateOptions.PreservePixelFormat,
                BitmapCacheOption.Default);
        }
        else
        {
            aBitmapImage.StreamSource.Position = 0;
            Decoder = new GifBitmapDecoder(
                aBitmapImage.StreamSource,
                BitmapCreateOptions.PreservePixelFormat,
                BitmapCacheOption.Default);
        }

        Animation =
            new Int32Animation(
                0,
                Decoder.Frames.Count - 1,
                new Duration(
                    new TimeSpan(
                        0,
                        0,
                        0,
                        Decoder.Frames.Count / 10,
                        (int) ((Decoder.Frames.Count / 10.0 - Decoder.Frames.Count / 10) * 1000))))
                {
                    RepeatBehavior = RepeatBehavior.Forever
                };

        base.Source = Decoder.Frames[0];
        BeginAnimation(FrameIndexProperty, Animation);
        IsAnimationWorking = true;
    }

    private bool IsAnimatedGifImage(BitmapImage aBitmapImage)
    {
        Debug.Assert(aBitmapImage != null);

        bool lResult = false;
        if (aBitmapImage.UriSource != null)
        {
            BitmapDecoder lBitmapDecoder = BitmapDecoder.Create(
                aBitmapImage.UriSource,
                BitmapCreateOptions.PreservePixelFormat,
                BitmapCacheOption.Default);
            lResult = lBitmapDecoder is GifBitmapDecoder;
        }
        else if (aBitmapImage.StreamSource != null)
        {
            try
            {
                long lStreamPosition = aBitmapImage.StreamSource.Position;
                aBitmapImage.StreamSource.Position = 0;
                GifBitmapDecoder lBitmapDecoder =
                    new GifBitmapDecoder(
                        aBitmapImage.StreamSource,
                        BitmapCreateOptions.PreservePixelFormat,
                        BitmapCacheOption.Default);
                lResult = lBitmapDecoder.Frames.Count &amp;gt; 1;

                aBitmapImage.StreamSource.Position = lStreamPosition;
            }
            catch
            {
                lResult = false;
            }
        }

        return lResult;
    }

    private static void ChangingFrameIndex
        (DependencyObject aObject, DependencyPropertyChangedEventArgs aEventArgs)
    {
        AnimatedImage lAnimatedImage = aObject as AnimatedImage;

        if (lAnimatedImage == null || !lAnimatedImage.IsAnimationWorking)
        {
            return;
        }

        int lFrameIndex = (int) aEventArgs.NewValue;
        ((Image) lAnimatedImage).Source = lAnimatedImage.Decoder.Frames[lFrameIndex];
        lAnimatedImage.InvalidateVisual();
    }

    /// &amp;lt;summary&amp;gt;
    /// Handles changes to the Source property.
    /// &amp;lt;/summary&amp;gt;
    private static void OnSourceChanged
        (DependencyObject aObject, DependencyPropertyChangedEventArgs aEventArgs)
    {
        ((AnimatedImage) aObject).OnSourceChanged(aEventArgs);
    }

    #endregion

    #region Dependency Properties

    /// &amp;lt;summary&amp;gt;
    /// FrameIndex Dependency Property
    /// &amp;lt;/summary&amp;gt;
    public static readonly DependencyProperty FrameIndexProperty =
        DependencyProperty.Register(
            &quot;FrameIndex&quot;,
            typeof (int),
            typeof (AnimatedImage),
            new UIPropertyMetadata(0, ChangingFrameIndex));

    /// &amp;lt;summary&amp;gt;
    /// Source Dependency Property
    /// &amp;lt;/summary&amp;gt;
    public new static readonly DependencyProperty SourceProperty =
        DependencyProperty.Register(
            &quot;Source&quot;,
            typeof (ImageSource),
            typeof (AnimatedImage),
            new FrameworkPropertyMetadata(
                null,
                FrameworkPropertyMetadataOptions.AffectsRender |
                FrameworkPropertyMetadataOptions.AffectsMeasure,
                OnSourceChanged));

    #endregion
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 라이브러리를 사용하고 있습니다.https://github.com/&lt;a href=&quot;https://github.com/XamlAnimatedGif/WpfAnimatedGif&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;34-1&quot;&gt;XamlAnimatedGif&lt;/a&gt;/WpfAnimatedGif&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 프로젝트에 라이브러리를 설치합니다(Package Manager Console 사용).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    PM &amp;gt; Install-Package WpfAnimatedGif
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음으로 XAML 파일에 다음 스니펫을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    &amp;lt;Window x:Class=&quot;WpfAnimatedGif.Demo.MainWindow&quot;
        xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
        xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
        xmlns:gif=&quot;http://wpfanimatedgif.codeplex.com&quot;
        Title=&quot;MainWindow&quot; Height=&quot;350&quot; Width=&quot;525&quot;&amp;gt;
        &amp;lt;Grid&amp;gt;
            &amp;lt;Image gif:ImageBehavior.AnimatedSource=&quot;Images/animated.gif&quot; /&amp;gt;
        ...
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 됐으면 좋겠다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출처 : https://github.com/&lt;a href=&quot;https://github.com/XamlAnimatedGif/WpfAnimatedGif&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;38-1&quot;&gt;XamlAnimatedGif&lt;/a&gt;/WpfAnimatedGif&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마이크 에쉬바의 코드를 수정해서 더 잘 작동하게 만들었어요&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1frame jpg png bmp 또는 mutil-frame gif 중 하나로 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URI를 컨트롤에 바인드하려면 URISource 속성을 바인드하거나 소스 속성인 비트맵이미지를 바인드하는 인메모리 스트림을 바인드합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    /// &amp;lt;summary&amp;gt; 
/// Элемент управления &quot;Изображения&quot;, поддерживающий анимированные GIF. 
/// &amp;lt;/summary&amp;gt; 
public class AnimatedImage : Image
{
    static AnimatedImage()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(AnimatedImage), new FrameworkPropertyMetadata(typeof(AnimatedImage)));
    }

    #region Public properties

    /// &amp;lt;summary&amp;gt; 
    /// Получает/устанавливает номер текущего кадра. 
    /// &amp;lt;/summary&amp;gt; 
    public int FrameIndex
    {
        get { return (int)GetValue(FrameIndexProperty); }
        set { SetValue(FrameIndexProperty, value); }
    }

    /// &amp;lt;summary&amp;gt;
    /// Get the BitmapFrame List.
    /// &amp;lt;/summary&amp;gt;
    public List&amp;lt;BitmapFrame&amp;gt; Frames { get; private set; }

    /// &amp;lt;summary&amp;gt;
    /// Get or set the repeatBehavior of the animation when source is gif formart.This is a dependency object.
    /// &amp;lt;/summary&amp;gt;
    public RepeatBehavior AnimationRepeatBehavior
    {
        get { return (RepeatBehavior)GetValue(AnimationRepeatBehaviorProperty); }
        set { SetValue(AnimationRepeatBehaviorProperty, value); }
    }

    public new BitmapImage Source
    {
        get { return (BitmapImage)GetValue(SourceProperty); }
        set { SetValue(SourceProperty, value); }
    }

    public Uri UriSource
    {
        get { return (Uri)GetValue(UriSourceProperty); }
        set { SetValue(UriSourceProperty, value); }
    }

    #endregion

    #region Protected interface

    /// &amp;lt;summary&amp;gt; 
    /// Provides derived classes an opportunity to handle changes to the Source property. 
    /// &amp;lt;/summary&amp;gt; 
    protected virtual void OnSourceChanged(DependencyPropertyChangedEventArgs e)
    {
        ClearAnimation();
        BitmapImage source;
        if (e.NewValue is Uri)
        {
            source = new BitmapImage();
            source.BeginInit();
            source.UriSource = e.NewValue as Uri;
            source.CacheOption = BitmapCacheOption.OnLoad;
            source.EndInit();
        }
        else if (e.NewValue is BitmapImage)
        {
            source = e.NewValue as BitmapImage;
        }
        else
        {
            return;
        }
        BitmapDecoder decoder;
        if (source.StreamSource != null)
        {
            decoder = BitmapDecoder.Create(source.StreamSource, BitmapCreateOptions.DelayCreation, BitmapCacheOption.OnLoad);
        }
        else if (source.UriSource != null)
        {
            decoder = BitmapDecoder.Create(source.UriSource, BitmapCreateOptions.DelayCreation, BitmapCacheOption.OnLoad);
        }
        else
        {
            return;
        }
        if (decoder.Frames.Count == 1)
        {
            base.Source = decoder.Frames[0];
            return;
        }

        this.Frames = decoder.Frames.ToList();

        PrepareAnimation();
    }

    #endregion

    #region Private properties

    private Int32Animation Animation { get; set; }
    private bool IsAnimationWorking { get; set; }

    #endregion

    #region Private methods

    private void ClearAnimation()
    {
        if (Animation != null)
        {
            BeginAnimation(FrameIndexProperty, null);
        }

        IsAnimationWorking = false;
        Animation = null;
        this.Frames = null;
    }

    private void PrepareAnimation()
    {
        Animation =
            new Int32Animation(
                0,
                this.Frames.Count - 1,
                new Duration(
                    new TimeSpan(
                        0,
                        0,
                        0,
                        this.Frames.Count / 10,
                        (int)((this.Frames.Count / 10.0 - this.Frames.Count / 10) * 1000))))
            {
                RepeatBehavior = RepeatBehavior.Forever
            };

        base.Source = this.Frames[0];
        BeginAnimation(FrameIndexProperty, Animation);
        IsAnimationWorking = true;
    }

    private static void ChangingFrameIndex
        (DependencyObject dp, DependencyPropertyChangedEventArgs e)
    {
        AnimatedImage animatedImage = dp as AnimatedImage;

        if (animatedImage == null || !animatedImage.IsAnimationWorking)
        {
            return;
        }

        int frameIndex = (int)e.NewValue;
        ((Image)animatedImage).Source = animatedImage.Frames[frameIndex];
        animatedImage.InvalidateVisual();
    }

    /// &amp;lt;summary&amp;gt; 
    /// Handles changes to the Source property. 
    /// &amp;lt;/summary&amp;gt; 
    private static void OnSourceChanged
        (DependencyObject dp, DependencyPropertyChangedEventArgs e)
    {
        ((AnimatedImage)dp).OnSourceChanged(e);
    }

    #endregion

    #region Dependency Properties

    /// &amp;lt;summary&amp;gt; 
    /// FrameIndex Dependency Property 
    /// &amp;lt;/summary&amp;gt; 
    public static readonly DependencyProperty FrameIndexProperty =
        DependencyProperty.Register(
            &quot;FrameIndex&quot;,
            typeof(int),
            typeof(AnimatedImage),
            new UIPropertyMetadata(0, ChangingFrameIndex));

    /// &amp;lt;summary&amp;gt; 
    /// Source Dependency Property 
    /// &amp;lt;/summary&amp;gt; 
    public new static readonly DependencyProperty SourceProperty =
        DependencyProperty.Register(
            &quot;Source&quot;,
            typeof(BitmapImage),
            typeof(AnimatedImage),
            new FrameworkPropertyMetadata(
                null,
                FrameworkPropertyMetadataOptions.AffectsRender |
                FrameworkPropertyMetadataOptions.AffectsMeasure,
                OnSourceChanged));

    /// &amp;lt;summary&amp;gt;
    /// AnimationRepeatBehavior Dependency Property
    /// &amp;lt;/summary&amp;gt;
    public static readonly DependencyProperty AnimationRepeatBehaviorProperty =
        DependencyProperty.Register(
        &quot;AnimationRepeatBehavior&quot;,
        typeof(RepeatBehavior),
        typeof(AnimatedImage),
        new PropertyMetadata(null));

    public static readonly DependencyProperty UriSourceProperty =
        DependencyProperty.Register(
        &quot;UriSource&quot;,
        typeof(Uri),
        typeof(AnimatedImage),
                new FrameworkPropertyMetadata(
                null,
                FrameworkPropertyMetadataOptions.AffectsRender |
                FrameworkPropertyMetadataOptions.AffectsMeasure,
                OnSourceChanged));

    #endregion
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 커스텀 컨트롤입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;WPF App Project에서 만들고 템플릿 재정의 스타일을 삭제해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 위의 Picture Box 솔루션과 동일하지만 이번에는 프로젝트에서 임베디드 리소스를 사용하기 위한 코드 배후에 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XAML의 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;WindowsFormsHost x:Name=&quot;_loadingHost&quot;&amp;gt;
  &amp;lt;Forms:PictureBox x:Name=&quot;_loadingPictureBox&quot;/&amp;gt;
&amp;lt;/WindowsFormsHost&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드 비하인드:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public partial class ProgressIcon
{
    public ProgressIcon()
    {
        InitializeComponent();
        var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(&quot;My.Namespace.ProgressIcon.gif&quot;);
        var image = System.Drawing.Image.FromStream(stream);
        Loaded += (s, e) =&amp;gt; _loadingPictureBox.Image = image;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WPF4에서는, 독자적인 키 프레임 이미지 애니메이션을 시뮬레이트 할 수 있는 것을 발견할 때까지, 이 문제가 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 애니메이션을 일련의 이미지로 분할하고 &quot;Image1.gif&quot;, &quot;Image2,gif&quot; 등의 제목을 붙입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 이미지를 솔루션 리소스로 Import합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지를 위한 기본 리소스 위치에 배치했다고 가정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지 컨트롤을 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 XAML 코드를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;중요하지 않은 것들은 제거했어요&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Image Name=&quot;Image1&quot;&amp;gt;
   &amp;lt;Image.Triggers&amp;gt;
      &amp;lt;EventTrigger RoutedEvent=&quot;Image.Loaded&quot;
         &amp;lt;EventTrigger.Actions&amp;gt;
            &amp;lt;BeginStoryboard&amp;gt;
               &amp;lt;Storyboard&amp;gt;
                   &amp;lt;ObjectAnimationUsingKeyFrames Duration=&quot;0:0:1&quot; Storyboard.TargetProperty=&quot;Source&quot; RepeatBehavior=&quot;Forever&quot;&amp;gt;
                      &amp;lt;DiscreteObjectKeyFrames KeyTime=&quot;0:0:0&quot;&amp;gt;
                         &amp;lt;DiscreteObjectKeyFrame.Value&amp;gt;
                            &amp;lt;BitmapImage UriSource=&quot;Images/Image1.gif&quot;/&amp;gt;
                         &amp;lt;/DiscreteObjectKeyFrame.Value&amp;gt;
                      &amp;lt;/DiscreteObjectKeyFrames&amp;gt;
                     &amp;lt;DiscreteObjectKeyFrames KeyTime=&quot;0:0:0.25&quot;&amp;gt;
                        &amp;lt;DiscreteObjectKeyFrame.Value&amp;gt;
                           &amp;lt;BitmapImage UriSource=&quot;Images/Image2.gif&quot;/&amp;gt;
                        &amp;lt;/DiscreteObjectKeyFrame.Value&amp;gt;
                     &amp;lt;/DiscreteObjectKeyFrames&amp;gt;
                     &amp;lt;DiscreteObjectKeyFrames KeyTime=&quot;0:0:0.5&quot;&amp;gt;
                        &amp;lt;DiscreteObjectKeyFrame.Value&amp;gt;
                           &amp;lt;BitmapImage UriSource=&quot;Images/Image3.gif&quot;/&amp;gt;
                        &amp;lt;/DiscreteObjectKeyFrame.Value&amp;gt;
                     &amp;lt;/DiscreteObjectKeyFrames&amp;gt;
                     &amp;lt;DiscreteObjectKeyFrames KeyTime=&quot;0:0:0.75&quot;&amp;gt;
                        &amp;lt;DiscreteObjectKeyFrame.Value&amp;gt;
                           &amp;lt;BitmapImage UriSource=&quot;Images/Image4.gif&quot;/&amp;gt;
                        &amp;lt;/DiscreteObjectKeyFrame.Value&amp;gt;
                     &amp;lt;/DiscreteObjectKeyFrames&amp;gt;
                     &amp;lt;DiscreteObjectKeyFrames KeyTime=&quot;0:0:1&quot;&amp;gt;
                        &amp;lt;DiscreteObjectKeyFrame.Value&amp;gt;
                           &amp;lt;BitmapImage UriSource=&quot;Images/Image5.gif&quot;/&amp;gt;
                        &amp;lt;/DiscreteObjectKeyFrame.Value&amp;gt;
                     &amp;lt;/DiscreteObjectKeyFrames&amp;gt;
                  &amp;lt;/ObjectAnimationUsingKeyFrames&amp;gt;
               &amp;lt;/Storyboard&amp;gt;
            &amp;lt;/BeginStoryboard&amp;gt;
         &amp;lt;/EventTrigger.Actions&amp;gt;
      &amp;lt;/EventTrigger&amp;gt;
   &amp;lt;/Image.Triggers&amp;gt;
&amp;lt;/Image&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Joel 게시물 덕분에 WPF의 애니메이션 GIF 지원 부재를 해결할 수 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;picture Box Loading 설정하느라 고생했으니까 코드 좀 추가해 주세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Winforms api로 인한 이미지 속성입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;애니메이션 GIF 이미지의 빌드 액션을 &quot;Content&quot;로 설정하고 Copy to 출력 디렉토리를 &quot;Copy if new&quot; 또는 &quot;always&quot;로 설정해야 했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Main Window()에서 이 메서드를 호출했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;유일한 문제는 스트림을 폐기하려고 했을 때 이미지 대신 빨간색 봉투 그래픽이 표시되었다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 그 문제를 해결해야 할 것이다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것에 의해, 비트맵 이미지를 로드해 비트맵으로 변경하는 번거로움이 없어졌습니다(더 이상 gif가 아니기 때문에, 확실히 애니메이션이 끊어졌습니다).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;private void SetupProgressIcon()
{
   Uri uri = new Uri(&quot;pack://application:,,,/WPFTest;component/Images/animated_progress_apple.gif&quot;);
   if (uri != null)
   {
      Stream stream = Application.GetContentStream(uri).Stream;   
      imgProgressBox.Image = new System.Drawing.Bitmap(stream);
   }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WPF의 대기 애니메이션의 대체 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; &amp;lt;ProgressBar Height=&quot;20&quot; Width=&quot;100&quot; IsIndeterminate=&quot;True&quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;진행 표시줄이 애니메이션으로 표시됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 위에서까지 시도했지만, 각각의 단점이 있습니다.여러분 덕분에 저는 GifImage를 만들 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Controls;
    using System.Windows;
    using System.Windows.Media.Imaging;
    using System.IO;
    using System.Windows.Threading;

    namespace IEXM.Components
    {
    public class GifImage : Image
    {
            #region gif Source, such as &quot;/IEXM;component/Images/Expression/f020.gif&quot;
            public string GifSource
            {
                    get { return (string)GetValue(GifSourceProperty); }
                    set { SetValue(GifSourceProperty, value); }
            }

            public static readonly DependencyProperty GifSourceProperty =
                    DependencyProperty.Register(&quot;GifSource&quot;, typeof(string),
                    typeof(GifImage), new UIPropertyMetadata(null, GifSourcePropertyChanged));

            private static void GifSourcePropertyChanged(DependencyObject sender,
                    DependencyPropertyChangedEventArgs e)
            {
                    (sender as GifImage).Initialize();
            }
            #endregion

            #region control the animate
            /// &amp;lt;summary&amp;gt;
            /// Defines whether the animation starts on it's own
            /// &amp;lt;/summary&amp;gt;
            public bool IsAutoStart
            {
                    get { return (bool)GetValue(AutoStartProperty); }
                    set { SetValue(AutoStartProperty, value); }
            }

            public static readonly DependencyProperty AutoStartProperty =
                    DependencyProperty.Register(&quot;IsAutoStart&quot;, typeof(bool),
                    typeof(GifImage), new UIPropertyMetadata(false, AutoStartPropertyChanged));

            private static void AutoStartPropertyChanged(DependencyObject sender,
                    DependencyPropertyChangedEventArgs e)
            {
                    if ((bool)e.NewValue)
                            (sender as GifImage).StartAnimation();
                    else
                            (sender as GifImage).StopAnimation();
            }
            #endregion

            private bool _isInitialized = false;
            private System.Drawing.Bitmap _bitmap;
            private BitmapSource _source;

            [System.Runtime.InteropServices.DllImport(&quot;gdi32.dll&quot;)]
            public static extern bool DeleteObject(IntPtr hObject);

            private BitmapSource GetSource()
            {
                    if (_bitmap == null)
                    {
                            _bitmap = new System.Drawing.Bitmap(Application.GetResourceStream(
                                     new Uri(GifSource, UriKind.RelativeOrAbsolute)).Stream);
                    }

                    IntPtr handle = IntPtr.Zero;
                    handle = _bitmap.GetHbitmap();

                    BitmapSource bs = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
                            handle, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
                    DeleteObject(handle);
                    return bs;
            }

            private void Initialize()
            {
            //        Console.WriteLine(&quot;Init: &quot; + GifSource);
                    if (GifSource != null)
                            Source = GetSource();
                    _isInitialized = true;
            }

            private void FrameUpdatedCallback()
            {
                    System.Drawing.ImageAnimator.UpdateFrames();

                    if (_source != null)
                    {
                            _source.Freeze();
                    }

               _source = GetSource();

              //  Console.WriteLine(&quot;Working: &quot; + GifSource);

                    Source = _source;
                    InvalidateVisual();
            }

            private void OnFrameChanged(object sender, EventArgs e)
            {
                    Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(FrameUpdatedCallback));
            }

            /// &amp;lt;summary&amp;gt;
            /// Starts the animation
            /// &amp;lt;/summary&amp;gt;
            public void StartAnimation()
            {
                    if (!_isInitialized)
                            this.Initialize();


             //   Console.WriteLine(&quot;Start: &quot; + GifSource);

                    System.Drawing.ImageAnimator.Animate(_bitmap, OnFrameChanged);
            }

            /// &amp;lt;summary&amp;gt;
            /// Stops the animation
            /// &amp;lt;/summary&amp;gt;
            public void StopAnimation()
            {
                    _isInitialized = false;
                    if (_bitmap != null)
                    {
                            System.Drawing.ImageAnimator.StopAnimate(_bitmap, OnFrameChanged);
                            _bitmap.Dispose();
                            _bitmap = null;
                    }
                    _source = null;
                    Initialize();
                    GC.Collect();
                    GC.WaitForFullGCComplete();

             //   Console.WriteLine(&quot;Stop: &quot; + GifSource);
            }

            public void Dispose()
            {
                    _isInitialized = false;
                    if (_bitmap != null)
                    {
                            System.Drawing.ImageAnimator.StopAnimate(_bitmap, OnFrameChanged);
                            _bitmap.Dispose();
                            _bitmap = null;
                    }
                    _source = null;
                    GC.Collect();
                    GC.WaitForFullGCComplete();
               // Console.WriteLine(&quot;Dispose: &quot; + GifSource);
            }
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용방법:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;localComponents:GifImage x:Name=&quot;gifImage&quot; IsAutoStart=&quot;True&quot; GifSource=&quot;{Binding Path=value}&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메모리 누수가 발생하지 않고, gif 이미지 자신의 타임라인을 애니메이션화했기 때문에 시험해 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WebBrowser 컨트롤을 사용하는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;gif 가 Web상에 있는 경우는, XAML 로 송신원을 설정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;WebBrowser Source=&quot;https://media.giphy.com/media/Ent2j55lyQipa/giphy.gif&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로컬 파일인 경우 코드 뒤에서 소스를 생성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XAML:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;WebBrowser x:Name=&quot;WebBrowser&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드 비하인드:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;private void Window_Loaded(object sender, RoutedEventArgs e)
{
    string curDir = Directory.GetCurrentDirectory();
    this.WebBrowser.Source = new Uri(String.Format(&quot;file:///{0}/10-monkey.gif&quot;, curDir));
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전에도 비슷한 문제에 직면했었는데, 나는 게임을 해야 했다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.gif&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일에 저장하십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택의 여지가 두 가지 있었어요&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WinForms에서 PictureBox 사용&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://wpfanimatedgif.codeplex.com/&quot; papago-id=&quot;61-1&quot; rel=&quot;nofollow&quot;&gt;codeplex.&lt;/a&gt;com의&lt;a href=&quot;http://wpfanimatedgif.codeplex.com/&quot; papago-id=&quot;61-1&quot; rel=&quot;nofollow&quot;&gt; &lt;/a&gt;WPFAnimatedGif와 같은 서드파티 라이브러리를 사용합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 버전&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PictureBox&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 프로젝트에서는 외부 라이브러리를 사용할 수 없었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 제가 직접 만든 건데&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Bitmap&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;힘을 빌려서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ImageAnimator&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 왜냐하면, 표준&lt;/font&gt;&lt;/font&gt;&lt;code&gt;BitmapImage&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 의 재생을 지원하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.gif&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일을 표시합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;완전한 예:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;code&gt;XAML&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Window x:Class=&quot;PlayGifHelp.MainWindow&quot;
        xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
        xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
        Title=&quot;MainWindow&quot; Height=&quot;350&quot; Width=&quot;525&quot; Loaded=&quot;MainWindow_Loaded&quot;&amp;gt;

    &amp;lt;Grid&amp;gt;
        &amp;lt;Image x:Name=&quot;SampleImage&quot; /&amp;gt;
    &amp;lt;/Grid&amp;gt;
&amp;lt;/Window&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Code behind&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    Bitmap _bitmap;
    BitmapSource _source;

    private BitmapSource GetSource()
    {
        if (_bitmap == null)
        {
            string path = Directory.GetCurrentDirectory();

            // Check the path to the .gif file
            _bitmap = new Bitmap(path + @&quot;\anim.gif&quot;);
        }

        IntPtr handle = IntPtr.Zero;
        handle = _bitmap.GetHbitmap();

        return Imaging.CreateBitmapSourceFromHBitmap(handle, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
    }

    private void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        _source = GetSource();
        SampleImage.Source = _source;
        ImageAnimator.Animate(_bitmap, OnFrameChanged);
    }

    private void FrameUpdatedCallback()
    {
        ImageAnimator.UpdateFrames();

        if (_source != null)
        {
            _source.Freeze();
        }

        _source = GetSource();

        SampleImage.Source = _source;
        InvalidateVisual();
    }

    private void OnFrameChanged(object sender, EventArgs e)
    {
        Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(FrameUpdatedCallback));
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;Bitmap&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;URI 디렉티브를 &lt;em papago-id=&quot;29-1&quot;&gt;지원&lt;/em&gt;하지 않기 때문에 로드합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.gif&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 디렉토리에서 파일을 가져옵니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 작은 개선&lt;/font&gt;&lt;/font&gt;&lt;code&gt;GifImage.Initialize()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메서드: GIF 메타데이터에서 적절한 프레임 타이밍을 읽어냅니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    private void Initialize()
    {
        _gifDecoder = new GifBitmapDecoder(new Uri(&quot;pack://application:,,,&quot; + this.GifSource), BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);

        int duration=0;
        _animation = new Int32AnimationUsingKeyFrames();
        _animation.KeyFrames.Add(new DiscreteInt32KeyFrame(0, KeyTime.FromTimeSpan(new TimeSpan(0))));
        foreach (BitmapFrame frame in _gifDecoder.Frames)
        {
            BitmapMetadata btmd = (BitmapMetadata)frame.Metadata;
            duration += (ushort)btmd.GetQuery(&quot;/grctlext/Delay&quot;);
            _animation.KeyFrames.Add(new DiscreteInt32KeyFrame(_gifDecoder.Frames.IndexOf(frame)+1, KeyTime.FromTimeSpan(new TimeSpan(duration*100000))));
        }            
         _animation.RepeatBehavior = RepeatBehavior.Forever;
        this.Source = _gifDecoder.Frames[0];            
        _isInitialized = true;
    }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제가 해결되었는지 모르겠지만 가장 &lt;a href=&quot;https://github.com/XamlAnimatedGif/WpfAnimatedGif&quot; papago-id=&quot;73-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;좋은&lt;/a&gt; 방법은 WpfAnimatedGid &lt;a href=&quot;https://github.com/XamlAnimatedGif/WpfAnimatedGif&quot; papago-id=&quot;73-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;라이브러리&lt;/a&gt;를 사용하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 매우 쉽고, 간단하고, 사용하기 쉽다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;2줄의 XAML 코드와 약 5줄의 C# 코드만 있으면 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 기능을 사용하는 방법에 대해 필요한 모든 세부 정보가 표시됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것도 바퀴를 재발명하는 대신 사용한 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;75-1&quot;&gt;WpfAnimatedGif&lt;/strong&gt; 사용을 권장하는 메인 응답에 추가하여 애니메이션을 &lt;strong papago-id=&quot;75-3&quot;&gt;실제로 실행&lt;/strong&gt;하기 위해 &lt;strong papago-id=&quot;75-3&quot;&gt;이미지&lt;/strong&gt;를 Gif와 스왑하는 &lt;strong papago-id=&quot;75-3&quot;&gt;경우&lt;/strong&gt; 마지막에 다음 행을 추가해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ImageBehavior.SetRepeatBehavior(img, new RepeatBehavior(0));
ImageBehavior.SetRepeatBehavior(img, RepeatBehavior.Forever);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var image = new BitmapImage();
image.BeginInit();
image.UriSource = new Uri(fileName);
image.EndInit();
ImageBehavior.SetAnimatedSource(img, image);
ImageBehavior.SetRepeatBehavior(img, new RepeatBehavior(0));
ImageBehavior.SetRepeatBehavior(img, RepeatBehavior.Forever);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;77&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드를 확인해 주세요.이것이 도움이 되었기를 바랍니다:)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;         public async Task GIF_Animation_Pro(string FileName,int speed,bool _Repeat)
                    {
    int ab=0;
                        var gif = GifBitmapDecoder.Create(new Uri(FileName), BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
                        var getFrames = gif.Frames;
                        BitmapFrame[] frames = getFrames.ToArray();
                        await Task.Run(() =&amp;gt;
                        {


                            while (ab &amp;lt; getFrames.Count())
                            {
                                Thread.Sleep(speed);
try
{
                                Dispatcher.Invoke(() =&amp;gt;
                                {
                                    gifImage.Source = frames[ab];
                                });
                                if (ab == getFrames.Count - 1&amp;amp;&amp;amp;_Repeat)
                                {
                                    ab = 0;

                                }
                                ab++;
            }
 catch
{
}

                            }
                        });
                    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;78&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;     public async Task GIF_Animation_Pro(Stream stream, int speed,bool _Repeat)
            {
 int ab = 0;   
                var gif = GifBitmapDecoder.Create(stream , BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
                var getFrames = gif.Frames;
                BitmapFrame[] frames = getFrames.ToArray();
                await Task.Run(() =&amp;gt;
                {


                    while (ab &amp;lt; getFrames.Count())
                    {
                        Thread.Sleep(speed);
    try
    {


                     Dispatcher.Invoke(() =&amp;gt;
                        {
                            gifImage.Source = frames[ab];
                        });
                        if (ab == getFrames.Count - 1&amp;amp;&amp;amp;_Repeat)
                        {
                            ab = 0;

                        }
                        ab++;
    }
     catch{} 



                    }
                });
            }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;79&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WebBrowser UI Control을 사용하여 html 문자열을 HTML 이미지 태그로 설정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;80&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XML:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    &amp;lt;WebBrowser Name=&quot;webBrowser1&quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;81&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C#: f&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-cs prettyprint-override&quot;&gt;&lt;code&gt;    webBrowser1.NavigateToString(        
      @&quot;&amp;lt;img src=&quot;&quot;arrow-24.png&quot;&quot;/&amp;gt;&quot;
    );
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;82&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/210922/&lt;a href=&quot;https://stackoverflow.com/questions/210922/how-do-i-get-an-animated-gif-to-work-in-wpf&quot; target=&quot;_blank&quot; papago-id=&quot;82-1&quot;&gt;how-do-i-get-an-animated-gif-to-work-in-wpf&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>WPF</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/859</guid>
      <comments>https://gigabyte.tistory.com/859#entry859comment</comments>
      <pubDate>Mon, 24 Apr 2023 23:27:01 +0900</pubDate>
    </item>
    <item>
      <title>선택한 항목을 버튼의 명령 매개 변수로 전달하려면 어떻게 해야 합니까?</title>
      <link>https://gigabyte.tistory.com/858</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택한 항목을 버튼의 명령 매개 변수로 전달하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 상황은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;ListBox ItemsSource=&quot;{Binding Path=AvailableUsers}&quot;&amp;gt;
    &amp;lt;ListBox.ItemTemplate&amp;gt;
        &amp;lt;DataTemplate&amp;gt;
            &amp;lt;TextBlock Text=&quot;{Binding Path=Id}&quot;/&amp;gt;
        &amp;lt;/DataTemplate&amp;gt;
    &amp;lt;/ListBox.ItemTemplate&amp;gt;
&amp;lt;/ListBox&amp;gt;
&amp;lt;Button Command=&quot;{Binding Path=Load}&quot; CommandParameter={???? What goes here ????}/&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 원하는 것은 ListBox에서 현재 선택된 ID를 전달하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 다음과 같은 뷰 모델이 뒤에 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-cs prettyprint-override&quot;&gt;&lt;code&gt;public class ViewModel : DependencyObject
{
    ICommand Load { get; set; }

    // dependency property but I didn't bother to write it out like one
    List&amp;lt;User&amp;gt; AvailableUsers { get; set}
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;xaml을 사용하여 현재 선택된 아이템을 발송하려면 어떻게 해야 하나요?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 시험해 보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;ol&gt; 
 &lt;li papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;목록 상자 이름 지정&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CommandParameter를 다음으로 업데이트합니다.&lt;/font&gt;&lt;/font&gt;&lt;p&gt;&lt;/p&gt; 
  &lt;blockquote&gt; 
   &lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CommandParameter=&quot;{바인딩 요소 이름=listBox1, 경로=선택됨&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아이템}&quot;&lt;/font&gt;&lt;/p&gt;
  &lt;/blockquote&gt;&lt;/li&gt; 
&lt;/ol&gt;
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/18257516/&lt;a href=&quot;https://stackoverflow.com/questions/18257516/how-to-pass-listbox-selecteditem-as-command-parameter-in-a-button&quot; target=&quot;_blank&quot; papago-id=&quot;8-1&quot;&gt;how-to-pass-listbox-selecteditem-as-command-parameter-in-a-button&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>WPF</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/858</guid>
      <comments>https://gigabyte.tistory.com/858#entry858comment</comments>
      <pubDate>Mon, 24 Apr 2023 23:26:36 +0900</pubDate>
    </item>
    <item>
      <title>Azure DevOps 파이프라인의 여러 단계에서 변수 공유</title>
      <link>https://gigabyte.tistory.com/857</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Azure DevOps 파이프라인의 여러 단계에서 변수 공유&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스크립트에서 ADO 파이프라인 간에 커스텀 변수를 공유하는 방법을 찾고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래는 저의 2단계 대본입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하고 있어요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;curProjVersion&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하다&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가가제 대고 ?고 고???&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;stages:
- stage: Build
  displayName: Build stage
  jobs:
  - job: VersionCheck
    pool:
      vmImage: 'ubuntu-latest'
    displayName: Version Check
    continueOnError: false
    steps:

      - script: |
          echo &quot;##vso[task.setvariable variable=curProjVersion;isOutput=true]1.4.5&quot;
        name: setCurProjVersion
        displayName: &quot;Collect Application Version ID&quot;

- stage: Deploy
  displayName: Deploy stage
  dependsOn: Build
  variables:
    curProjVersion1: $[ dependencies.Build.VersionCheck.outputs['setCurProjVersion.curProjVersion'] ]
  jobs:
  - job: 
    steps: 
      - script: |
          echo $(curProjVersion1)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;갱신일 :&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단계별 변수 공유 기능은 &lt;a href=&quot;https://learn.microsoft.com/en-us/azure/devops/release-notes/2020/sprint-168-update#jobs-can-access-output-variables-from-previous-stages&quot; rel=&quot;noreferrer&quot; papago-id=&quot;5-1&quot;&gt;현재 Sprint&lt;/a&gt; 168에서 출시되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전 단계의 출력 변수에 액세스하려면 다음 형식을 사용하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;stageDependencies.{stageName}.{jobName}.outputs['{stepName}.{variableName}'] 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오리지널:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Azure DevOps 파이프라인의 여러 단계에서 변수 공유&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유감스럽게도 한 단계에서 정의한 변수를 공유하여 다른 단계로 전달하는 것은 지원되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 기능은 추가할 예정이지만, 지금까지는 지원되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 이 &lt;a href=&quot;https://github.com/microsoft/azure-pipelines-tasks/issues/4743&quot; rel=&quot;noreferrer&quot; papago-id=&quot;10-1&quot;&gt;Github&lt;/a&gt; 문제를 따라갈 수 있습니다. 많은 사람들이 당신과 같은 요구를 가지고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 그것을 추적할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금까지는 멀티 &lt;a href=&quot;https://learn.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&amp;amp;tabs=yaml%2Cbatch#set-a-multi-job-output-variable&quot; rel=&quot;noreferrer&quot; papago-id=&quot;11-1&quot;&gt;작업 출력&lt;/a&gt; 변수 설정만 지원했지만 이는 YAML만 지원합니다. Classic Editor의 경우 이 기능을 릴리스에 추가할 계획이 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;회피책의 경우 단계 전에 변수를 미리 정의할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 한 가지 중요한 것은 그 가치를 한 단계에서 바꾸는 것이다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;새 값을 다음 단계로 전달할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;새 값을 가진 변수의 수명은 단계에서만 존재합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 점을 언급해야 할까요?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;stageDependencies&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 is is is is is is is is is is is is에서 사용할 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;condition&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이스&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 일자리에서 이용할 수 있지만, 직접 무대에서는 이용할 수 없다(적어도 현재로서는.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-yaml prettyprint-override&quot;&gt;&lt;code&gt;stages:
- stage: A
  jobs:
  - job: JA
    steps:
    - script: |
        echo &quot;This is job Foo.&quot;
        echo &quot;##vso[task.setvariable variable=doThing;isOutput=true]Yes&quot; #The variable doThing is set to true
      name: DetermineResult
    - script: echo $(DetermineResult.doThing)
      name: echovar
  - job: JA_2
    dependsOn: JA
    condition: eq(dependencies.JA.outputs['DetermineResult.doThing'], 'Yes')
    steps:
    - script: |
        echo &quot;This is job Bar.&quot;

#stage B runs if DetermineResult task set doThing variable n stage A
- stage: B
  dependsOn: A
  jobs:
  - job: JB
    condition: eq(stageDependencies.A.JA.outputs['DetermineResult.doThing'], 'Yes') #map doThing and check if true
    variables:
      varFromStageA: $[ stageDependencies.A.JA.outputs['DetermineResult.doThing'] ]
    steps:
    - bash: echo &quot;Hello world stage B first job&quot;
    - script: echo $(varFromStageA)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작업이 이전 단계의 변수에 액세스할 수 있게 되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력 변수는 여전히 작업 내부의 단계에 의해 생성됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 하는 것이 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dependencies.jobName.outputs['stepName.variableName']&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에서는, 「」를 해 주세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;stageDependencies.stageName.jobName.outputs['stepName.variableName']&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/azure/devops/release-notes/2020/sprint-168-update#azure-pipelines-1&quot; rel=&quot;noreferrer&quot; papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://learn.microsoft.com/en-us/azure/devops/release-notes/2020/sprint-168-update#azure-pipelines-1&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2020년 5월 4일부터 이용 가능합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/azure/devops/release-notes/2020/sprint-168-update#jobs-can-access-output-variables-from-previous-stages&quot; rel=&quot;noreferrer&quot; papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작업은 이전 단계의 출력 변수에 액세스할 수 있습니다.&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 출력 변수를 YAML 기반 파이프라인의 여러 단계에서 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 통해 한 단계에서 다음 단계로 전송되는 데 도움이 되는 정보(예: 실행/정지 결정 또는 생성된 출력의 ID)를 전달할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전 단계의 결과(상태)와 작업도 이용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력 변수는 여전히 작업 내부의 단계에 의해 생성됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 하는 것이 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dependencies.jobName.outputs['stepName.variableName']&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에서는, 「」를 해 주세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;stageDependencies.stageName.jobName.outputs['stepName.variableName']&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메모&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 파이프라인의 각 단계는 YAML 파일의 직전 단계에 따라 달라집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 각 단계에서 이전 단계의 출력 변수를 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;종속성 그래프를 변경할 수 있습니다. 그러면 사용 가능한 출력 변수도 변경됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 스테이지 3이 스테이지 1의 변수를 필요로 하는 경우, 스테이지 1에 대한 명확한 의존성을 선언해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;29-0&quot;&gt;Azure&lt;/strong&gt; DevOps 버전 Dev17의 스테이지 &lt;strong papago-id=&quot;29-0&quot;&gt;조건용&lt;/strong&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;에이전트 버전 2.153.1이 설치된 M153.5는 다음과 같이 동작합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-yaml prettyprint-override&quot;&gt;&lt;code&gt;stages:
- stage: A
  jobs:
  - job: JA
    steps:
    - script: |
        echo &quot;This is job Foo.&quot;
        echo &quot;##vso[task.setvariable variable=doThing;isOutput=true]Yes&quot; #The variable doThing is set to 'Yes'
      name: DetermineResult

#stage B runs if DetermineResult task set doThing variable on stage A
- stage: B
  dependsOn: A
  condition: eq(dependencies.A.outputs['JA.DetermineResult.doThing'], 'Yes')
  jobs:
  - job: JB
    steps:
    - bash: echo &quot;Hello world stage B first job&quot;

&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;30-0&quot;&gt;주의&lt;/strong&gt;: 스테이지에서 속성 레이아웃은 작업에 비해 다릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;dependencies.{stage name}.outputs['{job name}.{script name}.{variable name}']&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;31-0&quot;&gt;참고&lt;/strong&gt;: 'stageDependencies'가 있는 식은 다음 오류 메시지와 함께 실패했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;YAML 빌드 파이프라인을 로드하는 동안 오류가 발생했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;인식할 수 없는 값: '스테이지 종속성'입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;식: 및 (항상()), eq(스테이지 의존관계) 내의 XX 위치에 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;A.출력[']&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JA.DeterminineResult.doThing', 'Yes')를 선택합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은 https://go.&lt;a href=&quot;https://go.microsoft.com/fwlink/?linkid=842996&quot; papago-id=&quot;32-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;microsoft&lt;/a&gt;.com/fwlink/?&lt;a href=&quot;https://go.microsoft.com/fwlink/?linkid=842996&quot; papago-id=&quot;32-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;linkid=842996&lt;/a&gt;을 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;33-0&quot;&gt;보너스&lt;/strong&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;34-1&quot;&gt;종속&lt;/em&gt; 스테이지의 &lt;em papago-id=&quot;34-1&quot;&gt;상태&lt;/em&gt;에 액세스 하는 방법에 대해서는, 다음의 메뉴얼을 참조해 주세요.&lt;a href=&quot;https://learn.microsoft.com/en-us/azure/devops/pipelines/process/stages?view=azure-devops&amp;amp;tabs=yaml#conditions&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;34-3&quot;&gt;link&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;35-0&quot;&gt;대응&lt;/strong&gt;하는 문서:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&amp;amp;tabs=yaml%2Cbatch#use-output-variables-from-tasks&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;태스크의 출력 변수 사용&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/azure/devops/pipelines/process/expressions?view=azure-devops#stage-to-stage-dependencies&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스테이지간 의존관계&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 단계의 출력을 사용하려면 단계인지 작업 수준인지에 따라 구문을 사용해야 합니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; at른른른른른른른른른른른른 at at at at at at at at at at at at at at at at.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dependencies.STAGE.outputs['JOB.TASK.VARIABLE']&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 따라 할 수 &lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 이러한 변수는 조건에서 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작업 수준에서 다른 단계의 변수를 참조하는 형식은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;stageDependencies.STAGE.JOB.outputs['TASK.VARIABLE']&lt;/code&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;42-0&quot;&gt;주의&lt;/em&gt;: 기본적으로 파이프라인의 각 단계는 YAML 파일의 직전 단계에 따라 달라집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 단계 직전 이외의 단계를 참조할 필요가 있는 경우 다음 명령을 추가하여 이 자동 기본값을 재정의할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dependsOn&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스테이지로 이동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;네, 가능합니다. 다음과 같은 stageDependencies가 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-yaml prettyprint-override&quot;&gt;&lt;code&gt;stages:
- stage: Build
  displayName: Build stage
  jobs:
  - job: VersionCheck
    pool:
      vmImage: 'ubuntu-latest'
    displayName: Version Check
    continueOnError: false
    steps:

      - script: |
          echo &quot;##vso[task.setvariable variable=curProjVersion;isOutput=true]1.4.5&quot;
        name: setCurProjVersion
        displayName: &quot;Collect Application Version ID&quot;

- stage: Deploy
  displayName: Deploy stage
  dependsOn: Build
  variables:
    curProjVersion1: $[ stageDependencies.Build.VersionCheck.outputs['setCurProjVersion.curProjVersion'] ]
  jobs:
  - job: 
    steps: 
      - script: |
          echo $(curProjVersion1)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변경에 주의해 주세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$[ dependencies.Build.VersionCheck.outputs['setCurProjVersion.curProjVersion'] ]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$[ stageDependencies.Build.VersionCheck.outputs['setCurProjVersion.curProjVersion'] ]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출처 :&lt;a href=&quot;https://jimferrari.com/2023/01/05/pass-variables-across-jobs-and-stages-in-azure-devops-pipelines/&quot; papago-id=&quot;47-1&quot; rel=&quot;nofollow noreferrer&quot;&gt; &lt;/a&gt;https://jimferrari.com/2023/01/05/&lt;a href=&quot;https://jimferrari.com/2023/01/05/pass-variables-across-jobs-and-stages-in-azure-devops-pipelines/&quot; papago-id=&quot;47-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;pass-variables-across-jobs-and-stages-in-azure-devops-pipelines&lt;/a&gt;/&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문을 접하는 모든 사용자를 위한 업데이트로, &lt;a href=&quot;https://github.com/microsoft/azure-pipelines-tasks/issues/4743#issuecomment-614654346&quot; papago-id=&quot;48-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;단계&lt;/a&gt; 간 전달 변수가 &lt;a href=&quot;https://github.com/microsoft/azure-pipelines-tasks/issues/4743#issuecomment-614654346&quot; papago-id=&quot;48-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;구현되었으므로 앞으로 &lt;/a&gt;몇&lt;a href=&quot;https://github.com/microsoft/azure-pipelines-tasks/issues/4743#issuecomment-614654346&quot; papago-id=&quot;48-1&quot; rel=&quot;nofollow noreferrer&quot;&gt; 주 내에 출시될 것&lt;/a&gt;으로 보입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;글로벌 변수를 정의하고 Powershell을 사용하여 단계 변수 값을 글로벌 변수에 할당할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Write-Output (&quot;##vso[task.setvariable variable=globalVar;]$stageVar&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전역 변수는 yaml 자체 또는 변수 그룹에서 정의할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;빈 값으로 var를 초기화합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예: yaml&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  variables:
    globalVar: ''
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;트리거를 정의한 직후와 단계를 정의하기 전에 변수를 정의할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;trigger:
- master
  variables:
    VarA: aaaaa
    VarB: bbbbb
stages:
- stage: Build  
  jobs:
  - job: Build
    pool:
      vmImage: 'vs2017-win2016'
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/57485621/&lt;a href=&quot;https://stackoverflow.com/questions/57485621/share-variables-across-stages-in-azure-devops-pipelines&quot; target=&quot;_blank&quot; papago-id=&quot;53-1&quot;&gt;share-variables-across-stages-in-azure-devops-pipelines&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>azure</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/857</guid>
      <comments>https://gigabyte.tistory.com/857#entry857comment</comments>
      <pubDate>Mon, 24 Apr 2023 23:26:30 +0900</pubDate>
    </item>
    <item>
      <title>SQL Server에서 동일한 예외를 다시 던지는 방법</title>
      <link>https://gigabyte.tistory.com/856</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL Server에서 동일한 예외를 다시 던지는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방금 시행 블록에서 발생한 것과 동일한 예외를 SQL Server에 다시 던지고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 같은 메시지를 보낼 수 있지만 같은 오류를 던지고 싶다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;BEGIN TRANSACTION
    BEGIN TRY
        INSERT INTO Tags.tblDomain (DomainName, SubDomainId, DomainCode, Description)
            VALUES(@DomainName, @SubDomainId, @DomainCode, @Description)
        COMMIT TRANSACTION
    END TRY
    
    BEGIN CATCH
        declare @severity int; 
        declare @state int;

        select @severity=error_severity(), @state=error_state();

        RAISERROR(@@Error,@ErrorSeverity,@state);
        ROLLBACK TRANSACTION
    END CATCH
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;code&gt;RAISERROR(@@Error, @ErrorSeverity, @state);&lt;/code&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 행에는 에러가 표시되지만, 그런 기능을 원합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로 인해  50000이하지만, 에러 번호 50000을 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@@error&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프런트 엔드에서 이 오류를 캡처하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;catch (SqlException ex)
{
    if ex.number==2627
    MessageBox.show(&quot;Duplicate value cannot be inserted&quot;);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 기능을 원합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 기능을 통해서는 달성할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;raiseerror&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;백엔드에 커스텀에러 메시지를 표시하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;RAISEERROR&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 ErrorNo를 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;pre&gt;&lt;code&gt;Msg 2627, Level 14, State 1, Procedure spOTest_DomainInsert,
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;14행 UNIQE KEY 제약 조건 'UK_DomainCode' 위반.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;개체 'Tags.tblDomain'에 중복 키를 삽입할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문이 종료되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;stored procedure에 실행이 필요한 쿼리가 여러 개 포함되어 있는데 프런트 엔드에서 예외를 처리하려면 try catch block을 사용하지 않는 단점은 무엇입니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 2012에서는 throw 스테이트먼트가 도입되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ee677615.aspx&quot; papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://msdn.microsoft.com/en-us/library/ee677615.aspx&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매개 변수 없이 DLOW 문이 지정된 경우 CATCH 블록 안에 표시되어야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것에 의해, 검출된 예외가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;BEGIN TRY
    BEGIN TRANSACTION
    ...
    COMMIT TRANSACTION
END TRY
BEGIN CATCH
    ROLLBACK TRANSACTION;
    THROW
END CATCH
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음으로 에러가 발생하여 오류 메시지가 보고되었을 때 일련의 문을 롤백하기 위한 완전한 기능의 클린 코드샘플을 나타냅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;begin try
    begin transaction;

    ...

    commit transaction;
end try
begin catch
    if @@trancount &amp;gt; 0 rollback transaction;
    throw;
end catch
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 2012 이전&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;begin try
    begin transaction;
    
    ...
    
    commit transaction;
end try
begin catch
    declare @ErrorMessage nvarchar(max), @ErrorSeverity int, @ErrorState int;
    select @ErrorMessage = ERROR_MESSAGE() + ' Line ' + cast(ERROR_LINE() as nvarchar(5)), @ErrorSeverity = ERROR_SEVERITY(), @ErrorState = ERROR_STATE();
    if @@trancount &amp;gt; 0 rollback transaction;
    raiserror (@ErrorMessage, @ErrorSeverity, @ErrorState);
end catch
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CATCH 블록 내부로 재투입(SQL2012 이전 코드, SQL2012 이상에서는 Drow 문 사용):&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DECLARE
    @ErrorMessage nvarchar(4000) = ERROR_MESSAGE(),
    @ErrorNumber int = ERROR_NUMBER(),
    @ErrorSeverity int = ERROR_SEVERITY(),
    @ErrorState int = ERROR_STATE(),
    @ErrorLine int = ERROR_LINE(),
    @ErrorProcedure nvarchar(200) = ISNULL(ERROR_PROCEDURE(), '-');
SELECT @ErrorMessage = N'Error %d, Level %d, State %d, Procedure %s, Line %d, ' + 'Message: ' + @ErrorMessage;
RAISERROR (@ErrorMessage, @ErrorSeverity, 1, @ErrorNumber, @ErrorSeverity, @ErrorState, @ErrorProcedure, @ErrorLine)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택사항은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류를 발견하지 않음(거품이 일게 함)&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;커스텀 키우기&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL은 어떤 시점에서 reraise 명령 또는 특정 오류만 탐지하는 기능을 도입할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 지금은 회피책을 사용하세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;미안하다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;할 수 없습니다. 엔진만이 5만 미만의 오차를 발생시킬 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;네가 할 수 있는 건 그렇게 보이는 &lt;em papago-id=&quot;22-1&quot;&gt;예외&lt;/em&gt;를 두는 것뿐이야&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/1882788/sql-server-rethrow-exception-with-the-original-exception-number/1883148#1883148&quot; papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 제 답을 보세요.&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;질문자가 고객 측 거래를 이용해 원하는 일을 한 건 좀 바보같아요&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좋아, 이건 회피책이야...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;:-)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DECLARE @Error_Number INT
BEGIN TRANSACTION 
    BEGIN TRY
    INSERT INTO Test(Id, Name) VALUES (newID(),'Ashish') 
    /* Column 'Name' has unique constraint on it*/
    END TRY
    BEGIN CATCH

            SELECT ERROR_NUMBER()
            --RAISERROR (@ErrorMessage,@Severity,@State)
            ROLLBACK TRAN
    END CATCH
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;catch block에 주목하면 에러가 발생하지 않고 실제 에러 번호가 반환됩니다(트랜잭션이 롤백됩니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 에 들어갑니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예외를 검출하는 대신 ExecuteScalar()를 사용하면 원하는 실제 에러 번호를 취득하고 적절한 번호를 표시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int errorNumber=(int)command.ExecuteScalar();
if(errorNumber=&amp;lt;SomeNumber&amp;gt;)
{
    MessageBox.Show(&quot;Some message&quot;);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이게 도움이 됐으면 좋겠는데&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집 :- 주의사항입니다.해당 레코드의 수를 취득하여 ExecuteNonQuery를 사용하려고 하면 위의 솔루션이 작동하지 않을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면, 당신이 필요로 하는 것에 어울릴 것 같아요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;알려줘.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류가 발생한 후 저장 프로시저 실행을 중지하고 호출 프로그램으로 오류를 버블링하려면 다음 코드를 사용하여 오류를 발생시킬 수 있는 각 문을 따릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;If @@ERROR &amp;gt; 0
Return
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저장 프로시저에서의 실행이 오류 발생 후에도 계속된다는 것을 알고 놀랐습니다.이것을 깨닫지 못하면 버그를 추적하기 어려워질 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 유형의 오류 처리는 병렬입니다(이전).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;넷) Visual Basic 6.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL Server 2012에서 Throw 명령어를 기대하고 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아직 2012년으로 이행하지 않았기 때문에 원래 에러 코드의 버블업을 구현하는 방법 중 하나는 캐치 블록에서 (다시) 던지고 있는 예외의 텍스트 메시지 부분을 사용하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;발신자 코드의 캐치 블록에 해석하기 위한 XML 텍스트 등, 몇개의 구조를 포함할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;트랜잭션 내에서 SQL 문을 실행하고 오류를 코드에 입력할 때 이러한 시나리오에 대한 래퍼 저장 프로시저를 생성할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CREATE PROCEDURE usp_Execute_SQL_Within_Transaction
(
    @SQL nvarchar(max)
)
AS

SET NOCOUNT ON

BEGIN TRY
    BEGIN TRANSACTION
        EXEC(@SQL)
    COMMIT TRANSACTION
END TRY

BEGIN CATCH
    DECLARE @ErrorMessage nvarchar(max), @ErrorSeverity int, @ErrorState int
    SELECT @ErrorMessage = N'Error Number: ' + CONVERT(nvarchar(5), ERROR_NUMBER()) + N'. ' + ERROR_MESSAGE() + ' Line ' + CONVERT(nvarchar(5), ERROR_LINE()), @ErrorSeverity = ERROR_SEVERITY(), @ErrorState = ERROR_STATE()
    ROLLBACK TRANSACTION
    RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState)
END CATCH

GO

-- Test it
EXEC usp_Execute_SQL_Within_Transaction @SQL = 'SELECT 1; SELECT 2'
EXEC usp_Execute_SQL_Within_Transaction @SQL = 'SELECT 1/0; SELECT 2'
EXEC usp_Execute_SQL_Within_Transaction @SQL = 'EXEC usp_Another_SP'
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설계상의 관점에서, 원래의 에러 번호와 커스텀 메세지에 예외를 두는 목적은 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어느 정도 애플리케이션과 데이터베이스 간의 인터페이스 계약이 깨집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;원래 오류를 찾아 더 높은 코드로 처리하려면 데이터베이스에서 처리하지 마십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 예외를 발견하면 사용자에게 표시되는 메시지를 원하는 메시지로 변경할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 나는 그것을 하지 않을 것이다. 왜냐하면 그것은 너의 데이터베이스 코드를 흐음 '잘못'하게 만들기 때문이다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 사람이 말한 것처럼, 독자적인 에러 코드 세트(50000 이상)를 정의하고, 대신에 에러 코드를 폐기할 필요가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 무결성 문제('복제된 값은 허용되지 않습니다')를 잠재적인 비즈니스 문제(ZIP 코드가 잘못되었습니다), '기준과 일치하는 행을 찾을 수 없습니다' 등)와 별도로 지정할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/2481273/&lt;a href=&quot;https://stackoverflow.com/questions/2481273/how-to-rethrow-the-same-exception-in-sql-server&quot; target=&quot;_blank&quot; papago-id=&quot;35-1&quot;&gt;how-to-rethrow-the-same-exception-in-sql-server&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>sql-server</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/856</guid>
      <comments>https://gigabyte.tistory.com/856#entry856comment</comments>
      <pubDate>Mon, 24 Apr 2023 23:26:20 +0900</pubDate>
    </item>
    <item>
      <title>UITextField의 초기 키보드 애니메이션에서 매우 느린 지연/지연</title>
      <link>https://gigabyte.tistory.com/855</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;UITextField의 초기 키보드 애니메이션에서 매우 느린 지연/지연&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좋아, 이 문제 때문에 미치겠어.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;키보드를 터치한 후 키보드가 뜨는 데 약 3~4초 정도 걸립니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UITextField&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;앱이 출시된 후 처음 키보드가 뜨면 애니메이션이 바로 시작됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;처음에는 이미지를 너무 많이 로드하거나&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UITableView&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만, 저는 단지 새로운 프로젝트를 만들었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UITextField&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금도 이 문제를 겪고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;iOS 5, Xcode ver 4.2를 사용하고 있으며 iPhone 4S로 동작하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#import &quot;ViewController.h&quot;

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 20, 280, 30)];
    textField.borderStyle = UITextBorderStyleRoundedRect;
    textField.delegate = self;
    [self.view addSubview:textField];
}

@end
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 앱에서 공통적인 문제입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금으로서는 내가 좀 더 좋게 할 수 있는 유일한 방법은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;textField&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 있어서 긴급 구조원이 되다/구호출하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;viewDidAppear&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이 방법으로 문제가 완전히 해결되지는 않습니다. 뷰가 로드될 때 지연이 로딩될 뿐입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 클릭하면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;textField&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;뷰가 로드되면 바로 문제가 발생합니다.뷰가 로드된 후 textField를 터치하기 전에 3~4초 정도 기다리면 지연이 발생하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제를 피하기 위해 이색 해킹을 구현하기 전에 다음과 같이 하십시오. 디버깅 세션을 중지하고, 앱을 멀티태스킹에서 종료하고, 기기를 컴퓨터에서 분리한 후 해당 아이콘을 눌러 앱을 정상적으로 실행합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;디바이스가 접속되어 있는 동안에만 지연이 발생하는 경우는 적어도2건 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제는 당초 생각했던 것처럼 첫 번째 설치에만 국한된 것이 아니라 앱을 실행할 때마다 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 이 문제를 완벽하게 해결하는 솔루션이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  // Preloads keyboard so there's no lag on initial keyboard appearance.
  UITextField *lagFreeField = [[UITextField alloc] init];
  [self.window addSubview:lagFreeField];
  [lagFreeField becomeFirstResponder];
  [lagFreeField resignFirstResponder];
  [lagFreeField removeFromSuperview];
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;네, 최신 아이폰4도 몇 초 지연됐어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;진정하라구.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 이유로 인해 앱이 디버깅의 Xcode에서 처음 로드될 때만 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Release 했을 때는 딜레이가 안 돼요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그냥 잊어버려...&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 이미 알려진 문제.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;키보드의 프리로드가 유망할 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;[&lt;a href=&quot;http://web.archive.org/web/20120708055451/http://blog.weareuproar.com/preloading-the-uikeyboard&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;17-1&quot;&gt;UIKeyboard 프리로드]체크박스&lt;/a&gt;를 켜겠습니다&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부 추가 읽기 자료:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/1628915/initial-iphone-virtual-keyboard-display-is-slow-for-a-uitextfield-is-this-hack&quot; papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;UITextField의 경우 아이폰 가상 키보드 초기 표시가 느립니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 해킹이 필요한가요?&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/8862659/uitextfield-keyboard-blocks-runloop-while-loading&quot; papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로드하는 동안 UITextField 키보드 블록이 루프를 실행합니까?&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.iphonedevsdk.com/forum/iphone-sdk-development/12114-uitextfield-loooong-delay-when-first-tapped.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://www.iphonedevsdk.com/forum/iphone-sdk-development/12114-uitextfield-loooong-delay-when-first-tapped.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Swift에서 Vadoff 솔루션을 사용하려면 didFinishLaunchingWithOptions에 다음을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Preloads keyboard so there's no lag on initial keyboard appearance.
let lagFreeField: UITextField = UITextField()
self.window?.addSubview(lagFreeField)
lagFreeField.becomeFirstResponder()
lagFreeField.resignFirstResponder()
lagFreeField.removeFromSuperview()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iOS8에서는 동작하고 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;블록 내 코드가 메인 큐에 추가되어 비동기적으로 실행됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(메인 스레드를 잠그지 않음)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;dispatch_async(dispatch_get_main_queue(), ^(void){
      [textField becomeFirstResponder];
 });
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/19668174/168594&quot; papago-id=&quot;25-1&quot;&gt;이&lt;/a&gt; 답을 보세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이들은 &lt;a href=&quot;https://github.com/mbrandonw/UIResponder-KeyboardCache&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;25-3&quot;&gt;UIResponder+KeyboardCache&lt;/a&gt;를 제안합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;심플하고 멋져요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;iOS 7에서 테스트 완료.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;UIViewController가 느리게 표시되는 관련 문제는 UITextField의 커스텀 글꼴 대신 시스템 글꼴을 사용하여 해결되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제에는 시스템 폰트를 사용하는 것도 문제가 되지 않을까요?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 오류는 iOS 9.2.1에서 해결된 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;단말기를 업그레이드한 후 단말기가 컴퓨터에 연결되어 있을 때 텍스트 필드를 누르고 키보드가 나타날 때까지의 지연 시간이 없어졌습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 선택된 답변으로 인해 iOS 11에서 BAD_XC 크래시가 발생합니다. 수정하려면 앱에서 삭제하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;viewController의 뷰가 로드되었을 때 viewDidAppear와 같이 아래 코드를 추가할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어플리케이션뿐만 아니라 : Finish Launching With Options :&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;UITextField *lagFreeField = [[UITextField alloc] init];
[self.window addSubview:lagFreeField];
[lagFreeField becomeFirstResponder];
[lagFreeField resignFirstResponder];
[lagFreeField removeFromSuperview];
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/9357026/&lt;a href=&quot;https://stackoverflow.com/questions/9357026/super-slow-lag-delay-on-initial-keyboard-animation-of-uitextfield&quot; target=&quot;_blank&quot; papago-id=&quot;30-1&quot;&gt;super-slow-lag-delay-on-initial-keyboard-animation-of-uitextfield&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Objective-C</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/855</guid>
      <comments>https://gigabyte.tistory.com/855#entry855comment</comments>
      <pubDate>Mon, 24 Apr 2023 23:26:12 +0900</pubDate>
    </item>
    <item>
      <title>iOS 8에서 위치 서비스가 작동하지 않음</title>
      <link>https://gigabyte.tistory.com/854</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iOS 8에서 위치 서비스가 작동하지 않음&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iOS 7에서 정상적으로 동작하던 앱이 iOS 8 SDK에서는 동작하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;CLLocationManager&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로케이션을 반환하지 않고 [설정]-&amp;gt; [&lt;em papago-id=&quot;2-3&quot;&gt;로케이션&lt;/em&gt; 서비스]&lt;em papago-id=&quot;2-1&quot;&gt;아래&lt;/em&gt;에 앱이 표시되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 문제에 대해 구글을 검색해 봤지만 아무 것도 나오지 않았어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;뭐가 잘못됐나요?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 결국 내 문제를 스스로 해결하게 되었다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;8 SDK, iOS 8 SDK에 있다고 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;requestAlwaysAuthorization&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 로케이션의 경우)  (「」)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;requestWhenInUseAuthorization&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가 있는 ) ('포그라운드'의 경우):&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CLLocationManager&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 로케이션 업데이트를 시작하기 전에 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; '있다'가 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NSLocationAlwaysUsageDescription&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★★★★★★★★★★★★★★★」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NSLocationWhenInUseUsageDescription&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 누르다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Info.plist&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프롬프트에 표시되는 메시지와 함께 표시됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것들을 더하면 내 문제가 해결된다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/iuOzB.jpg&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/iuOzB.jpg&quot; alt=&quot;여기에 이미지 설명 입력&quot; papago-attr-id=&quot;1&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은 &lt;a href=&quot;http://nevan.net/2014/09/core-location-manager-changes-in-ios-8/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;12-1&quot;&gt;Core-Location-Manager-Changes-in-ios-8&lt;/a&gt;을 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 같은 문제로 머리를 뽑고 있었어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Xcode는 다음 오류를 나타냅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MapKit&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로케이션 인증을 요구하지 않고 로케이션을 갱신합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 전화해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-[CLLocationManager requestWhenInUseAuthorization]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★★★★★★★★★★★★★★★」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-[CLLocationManager requestAlwaysAuthorization]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 번째&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 위의 중 하더라도 에 info.plist에 info.plist의  한 가 표시되지 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NSLocationAlwaysUsageDescription&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★★★★★★★★★★★★★★★」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NSLocationWhenInUseUsageDescription&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 행을 info.plist에 추가합니다.여기서 문자열 값은 사용자 위치에 액세스해야 하는 이유를 나타냅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;key&amp;gt;NSLocationWhenInUseUsageDescription&amp;lt;/key&amp;gt;
&amp;lt;string&amp;gt;This application requires location services to work&amp;lt;/string&amp;gt;

&amp;lt;key&amp;gt;NSLocationAlwaysUsageDescription&amp;lt;/key&amp;gt;
&amp;lt;string&amp;gt;This application requires location services to work&amp;lt;/string&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Xcode 5에서 이 프로젝트를 시작한 이후 이 엔트리가 누락된 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Xcode 6은 이러한 키에 대한 기본 엔트리를 추가할 수 있지만 확인되지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 두 가지 &lt;a href=&quot;https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html&quot; papago-id=&quot;23-1&quot;&gt;설정&lt;/a&gt;에 대한 자세한 내용은 여기를 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iOS 7과의 하위 호환성을 확인하려면 사용자가 iOS 8 또는 iOS 7을 실행하고 있는지 확인해야 합니다. 예를 들어 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#define IS_OS_8_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] &amp;gt;= 8.0)

//In ViewDidLoad
if(IS_OS_8_OR_LATER) {
   [self.locationManager requestAlwaysAuthorization];
}

[self.locationManager startUpdatingLocation];
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;- (void)startLocationManager
{
    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.distanceFilter = kCLDistanceFilterNone; //whenever we move
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;

    [locationManager startUpdatingLocation];
    [locationManager requestWhenInUseAuthorization]; // Add This Line


}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; info File 에도.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;플리스트&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;img src=&quot;https://i.stack.imgur.com/bQcRQ.png&quot; alt=&quot;여기에 이미지 설명 입력&quot; papago-attr-id=&quot;2&quot;&gt;&lt;/p&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Apple 문서에 따르면:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://developer.apple.com/documentation/corelocation/requesting_permission_to_use_location_services&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://developer.apple.com/documentation/corelocation/requesting_permission_to_use_location_services&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://developer.apple.com/documentation/corelocation/cllocationmanager/1620562-requestwheninuseauthorization&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://developer.apple.com/documentation/corelocation/cllocationmanager/1620562-requestwheninuseauthorization&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 8의 ,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NSLocationWhenInUseUsageDescription&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NSLocationAlwaysUsageDescription&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Info.plist 。&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 하기 전에, 에게, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」, 「 」의 어느 쪽인가에 전화하는 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[self.myLocationManager requestWhenInUseAuthorization]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★★★★★★★★★★★★★★★」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[self.myLocationManager requestAlwaysAuthorization]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 필요에 따라.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Info.plist 。&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 허가를 해주면, 그것은 평상시와 같은 업무입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;권한을 거부하면 대리인에게 위치 업데이트에 대한 알림이 전달되지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;- (void)viewDidLoad
{
    
    [super viewDidLoad];
    self.locationManager = [[CLLocationManager alloc] init];
    
    self.locationManager.delegate = self;
    if([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]){
        NSUInteger code = [CLLocationManager authorizationStatus];
        if (code == kCLAuthorizationStatusNotDetermined &amp;amp;&amp;amp; ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)] || [self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)])) {
            // choose one request according to your business.
            if([[NSBundle mainBundle] objectForInfoDictionaryKey:@&quot;NSLocationAlwaysUsageDescription&quot;]){
                [self.locationManager requestAlwaysAuthorization];
            } else if([[NSBundle mainBundle] objectForInfoDictionaryKey:@&quot;NSLocationWhenInUseUsageDescription&quot;]) {
                [self.locationManager  requestWhenInUseAuthorization];
            } else {
                NSLog(@&quot;Info.plist does not contain NSLocationAlwaysUsageDescription or NSLocationWhenInUseUsageDescription&quot;);
            }
        }
    }
    [self.locationManager startUpdatingLocation];
}

&amp;gt;  #pragma mark - CLLocationManagerDelegate

    - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
    {
        NSLog(@&quot;didFailWithError: %@&quot;, error);
        UIAlertView *errorAlert = [[UIAlertView alloc]
                                   initWithTitle:@&quot;Error&quot; message:@&quot;Failed to Get Your Location&quot; delegate:nil cancelButtonTitle:@&quot;OK&quot; otherButtonTitles:nil];
        [errorAlert show];
    }
    
    - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
    {
        NSLog(@&quot;didUpdateToLocation: %@&quot;, newLocation);
        CLLocation *currentLocation = newLocation;
        
        if (currentLocation != nil) {
            longitudeLabel.text = [NSString stringWithFormat:@&quot;%.8f&quot;, currentLocation.coordinate.longitude];
            latitudeLabel.text = [NSString stringWithFormat:@&quot;%.8f&quot;, currentLocation.coordinate.latitude];
        }
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iOS 8에서는 로케이션을 작동시키려면 다음 두 가지 작업을 추가로 수행해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Info.plist에 키를 추가하고 Location Manager에게 시작을 요청하는 권한을 요청합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;새로운 로케이션 인가에는 2개의 Info.plist 키가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 키 중 하나 또는 둘 다 필요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;키가 둘 다 없는 경우 startUpdatingLocation을 호출할 수 있지만 Location Manager가 실제로 시작되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 대리인에게 실패 메시지를 발송하지 않습니다(시작하지 않았기 때문에 실패할 수 없습니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 키 중 하나 또는 둘 다 추가해도 명시적으로 인가를 요청하지 않아도 실패합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 먼저 다음 키 중 하나 또는 모두를 Info.plist 파일에 추가해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;NSLocation&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;When In Use Usage 설명&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;NSLocation&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Always Usage 설명&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 두 키 모두 문자열이 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로케이션 서비스가 필요한 이유를 설명합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;iOS 7과 같이 &quot;Location is required to find your where&quot;와 같은 문자열을 입력할 수 있습니다.이 문자열은 InfoPlist.strings 파일에서 현지화할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/aQuZf.png&quot; alt=&quot;여기에 이미지 설명 입력&quot; papago-attr-id=&quot;3&quot;&gt;&lt;/p&gt;&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Xcode 5로 컴파일할 수 있는 솔루션:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#ifdef __IPHONE_8_0
    NSUInteger code = [CLLocationManager authorizationStatus];
    if (code == kCLAuthorizationStatusNotDetermined &amp;amp;&amp;amp; ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)] || [self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)])) {
        // choose one request according to your business.
        if([[NSBundle mainBundle] objectForInfoDictionaryKey:@&quot;NSLocationAlwaysUsageDescription&quot;]){
            [self.locationManager requestAlwaysAuthorization];
        } else if([[NSBundle mainBundle] objectForInfoDictionaryKey:@&quot;NSLocationWhenInUseUsageDescription&quot;]) {
            [self.locationManager  requestWhenInUseAuthorization];
        } else {
            NSLog(@&quot;Info.plist does not contain NSLocationAlwaysUsageDescription or NSLocationWhenInUseUsageDescription&quot;);
        }
    }
#endif
    [self.locationManager startUpdatingLocation];
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위치를 묻는 이전 코드는 iOS 8에서 작동하지 않습니다. 위치 인증에 대해 다음 방법을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;- (void)requestAlwaysAuthorization
{
    CLAuthorizationStatus status = [CLLocationManager authorizationStatus];

    // If the status is denied or only granted for when in use, display an alert
    if (status == kCLAuthorizationStatusAuthorizedWhenInUse || status ==        kCLAuthorizationStatusDenied) {
        NSString *title;
        title = (status == kCLAuthorizationStatusDenied) ? @&quot;Location services are off&quot; :   @&quot;Background location is not enabled&quot;;
        NSString *message = @&quot;To use background location you must turn on 'Always' in the Location Services Settings&quot;;

        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:title
                                                            message:message
                                                           delegate:self
                                                  cancelButtonTitle:@&quot;Cancel&quot;
                                                  otherButtonTitles:@&quot;Settings&quot;, nil];
        [alertView show];
    }
    // The user has not enabled any location services. Request background authorization.
    else if (status == kCLAuthorizationStatusNotDetermined) {
        [self.locationManager requestAlwaysAuthorization];
    }
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 1) {
        // Send the user to the Settings for this app
        NSURL *settingsURL = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
        [[UIApplication sharedApplication] openURL:settingsURL];
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iOS 8에서는 로케이션을 작동시키려면 다음 두 가지 작업을 추가로 수행해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Info.plist에 키를 추가하고 Location Manager에게 시작을 요청하는 권한을 요청합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;info.plist:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;key&amp;gt;NSLocationUsageDescription&amp;lt;/key&amp;gt;
&amp;lt;string&amp;gt;I need location&amp;lt;/string&amp;gt;
&amp;lt;key&amp;gt;NSLocationAlwaysUsageDescription&amp;lt;/key&amp;gt;
&amp;lt;string&amp;gt;I need location&amp;lt;/string&amp;gt;
&amp;lt;key&amp;gt;NSLocationWhenInUseUsageDescription&amp;lt;/key&amp;gt;
&amp;lt;string&amp;gt;I need location&amp;lt;/string&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드에 추가&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (IS_OS_8_OR_LATER)
{
    [locationmanager requestWhenInUseAuthorization];

    [locationmanager requestAlwaysAuthorization];
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Swift 개발자의 일반적인 오류 중 하나는 다음과 같습니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ''에 '하다'에 ''에 대한 값을 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NSLocationWhenInUseUsageDescription&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★★★★★★★★★★★★★★★」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NSLocationAlwaysUsageDescription&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래도 승인을 요청하는 창이 뜨지 &lt;em papago-id=&quot;49-1&quot;&gt;않으면&lt;/em&gt; 줄을 그었는지 확인합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;var locationManager = CLLocationManager()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 View Controller »&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;viewDidLoad&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 전화&lt;/font&gt;를 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;, &lt;font class=&quot;papago-parent&quot;&gt;전화&lt;/font&gt;를 걸어도&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;locationManager.requestWhenInUseAuthorization()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이치노&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;viewDidLoad&quot; &quot;locationManager&quot; &quot;ViewDidLoad&quot; &quot;LocationManager&quot; &quot;ViewDidLoad&quot; &quot;LocationManager&quot; &quot;ViewDidLoad&quot; &quot;LocationManager&quot; &quot;ViewDid&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;var locationManager = CLLocationManager()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스 메서드의 최상위에 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;★★의 앞&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[locationManager startUpdatingLocation];&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iOS8 로케이션서비스 요청은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)])
    [locationManager requestAlwaysAuthorization];
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;★★★를 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Info.plist&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &quot; &quot; 를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NSLocationAlwaysUsageDescription&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;값를 들어, 「」등)을 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;We do our best to preserve your battery life.&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;앱이 열려 있는 동안에만 위치 서비스가 필요한 경우 다음을 대체합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;requestAlwaysAuthorization&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;requestWhenInUseAuthorization&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;...&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;NSLocationAlwaysUsageDescription&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NSLocationWhenInUseUsageDescription&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iOS8로 업그레이드된 앱을 작업하다가 위치정보가 작동하지 않게 되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;[ Debug ]영역에서 다음과 같은 오류가 발생할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;Trying to start MapKit location updates without prompting for location authorization. Must call -[CLLocationManager requestWhenInUseAuthorization] or -[CLLocationManager requestAlwaysAuthorization] first.&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 사용법&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 번째 추가는 &quot; &quot; &quot; 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NSLocationAlwaysUsageDescription&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;Cisco.plist&quot;는 다음과 같이 입력합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/N4M21.png&quot; alt=&quot;여기에 이미지 설명을 입력하십시오.&quot; papago-attr-id=&quot;4&quot;&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 키의 값을 입력하지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아직 동작하고 있고, 사내 앱이기 때문에 신경 쓰지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또, 이미 로케이션 서비스를 이용하고 싶다고 하는 타이틀이 있기 때문에, 불필요한 것은 하고 싶지 않았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음으로 iOS 8의 조건을 작성했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
    [_locationManager requestAlwaysAuthorization];
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 후에, 「 」를 참조해 주세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;locationManager:didChangeAuthorizationStatus:&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'''콜:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:  (CLAuthorizationStatus)status
{
    [self gotoCurrenLocation];
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 이제 모든 것이 잘 작동한다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;항상 그렇듯이 &lt;a href=&quot;https://developer.apple.com/library/prerelease/ios/documentation/CoreLocation/Reference/CLLocationManager_Class/index.html#//apple_ref/occ/instm/CLLocationManager/requestWhenInUseAuthorization&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;73-1&quot;&gt;설명서&lt;/a&gt;를 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하위 호환성을 갖춘 솔루션:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SEL requestSelector = NSSelectorFromString(@&quot;requestWhenInUseAuthorization&quot;);
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined &amp;amp;&amp;amp;
    [self.locationManager respondsToSelector:requestSelector]) {
    [self.locationManager performSelector:requestSelector withObject:NULL];
} else {
    [self.locationManager startUpdatingLocation];
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;NSLocation 설정&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Info.plist의 WhenInUseUsageDescription 키&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Xcode 경고를 생성하지 않는 하위 호환성 솔루션:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SEL requestSelector = NSSelectorFromString(@&quot;requestWhenInUseAuthorization&quot;);
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined &amp;amp;&amp;amp;
  [self.locationManager respondsToSelector:requestSelector]) {
((void (*)(id, SEL))[self.locationManager methodForSelector:requestSelector])(self.locationManager, requestSelector);
  [self.locationManager startUpdatingLocation];
} else {
  [self.locationManager startUpdatingLocation];
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NSLocationWhenInUseUsageDescription&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Info.plist&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;48-0&quot;&gt;iOS 버전&lt;/strong&gt; 11.&lt;strong papago-id=&quot;48-0&quot;&gt;0+&lt;/strong&gt;의 경우: 셋업&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NSLocationAlwaysAndWhenInUseUsageDescription&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Info.plist&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;50&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 키와 ..&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 2번으로 하다&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;83&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 ios 8의 문제입니다.이것을 코드에 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (IS_OS_8_OR_LATER)
{
    [locationmanager requestWhenInUseAuthorization];

    [locationmanager requestAlwaysAuthorization];
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;84&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;및 info.plist:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; &amp;lt;key&amp;gt;NSLocationUsageDescription&amp;lt;/key&amp;gt;
 &amp;lt;string&amp;gt;I need location&amp;lt;/string&amp;gt;
 &amp;lt;key&amp;gt;NSLocationAlwaysUsageDescription&amp;lt;/key&amp;gt;
 &amp;lt;string&amp;gt;I need location&amp;lt;/string&amp;gt;
 &amp;lt;key&amp;gt;NSLocationWhenInUseUsageDescription&amp;lt;/key&amp;gt;
 &amp;lt;string&amp;gt;I need location&amp;lt;/string&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;85&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iOS 8에서 사용자 위치에 액세스하려면 다음을 추가해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;NSLocationAlwaysUsageDescription in the Info.plist 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;86&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자에게 현재 위치를 가져올 수 있는 권한을 요청합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;87&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;87-0&quot;&gt;목표-C&lt;/strong&gt; 절차 아래 지침을 따르십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;88&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;88-0&quot;&gt;iOS-11&lt;/strong&gt;의 경우 iOS 11의 경우 다음 답변을 참조하십시오. &lt;a href=&quot;https://stackoverflow.com/a/46339284/3024579&quot; papago-id=&quot;88-2&quot;&gt;iOS 11 위치&lt;/a&gt; 액세스&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;89&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 개의 키를 목록에 추가하고 아래 그림과 같은 메시지를 제공해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; 1. NSLocationAlwaysAndWhenInUseUsageDescription 
 2. NSLocationWhenInUseUsageDescription
 3. NSLocationAlwaysUsageDescription
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/bXyB3.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/bXyB3.png&quot; alt=&quot;여기에 이미지 설명 입력&quot; papago-attr-id=&quot;5&quot;&gt;&lt;/a&gt; &lt;strong papago-id=&quot;90&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iOS-10 이하의 경우:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;NSLocationWhenInUseUsageDescription
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JIwZ0.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JIwZ0.png&quot; alt=&quot;여기에 이미지 설명 입력&quot; papago-attr-id=&quot;6&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers;
if([locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]){
    [locationManager requestWhenInUseAuthorization];
}else{
    [locationManager startUpdatingLocation];
} 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;91&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위임 방식&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#pragma mark - Lolcation Update 
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
    NSLog(@&quot;didFailWithError: %@&quot;, error);
    UIAlertView *errorAlert = [[UIAlertView alloc]
                               initWithTitle:@&quot;Error&quot; message:@&quot;Failed to Get Your Location&quot; delegate:nil cancelButtonTitle:@&quot;OK&quot; otherButtonTitles:nil];
    [errorAlert show];
}
-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
{
    switch (status) {
        case kCLAuthorizationStatusNotDetermined:
        case kCLAuthorizationStatusRestricted:
        case kCLAuthorizationStatusDenied:
        {
            // do some error handling
        }
            break;
        default:{
            [locationManager startUpdatingLocation];
        }
            break;
    }
}
- (void)locationManager:(CLLocationManager *)manager
     didUpdateLocations:(NSArray *)locations
{
    CLLocation *location = [locations lastObject];
    userLatitude =  [NSString stringWithFormat:@&quot;%f&quot;, location.coordinate.latitude] ;
    userLongitude =  [NSString stringWithFormat:@&quot;%f&quot;,location.coordinate.longitude];
    [locationManager stopUpdatingLocation];
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;92&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;신속한 절차&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;93&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음의 순서에 따릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;94&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;94-0&quot;&gt;iOS-11&lt;/strong&gt;의 경우 iOS 11의 경우 다음 답변을 참조하십시오. &lt;a href=&quot;https://stackoverflow.com/a/46339284/3024579&quot; papago-id=&quot;94-2&quot;&gt;iOS 11 위치&lt;/a&gt; 액세스&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;95&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 개의 키를 목록에 추가하고 아래 그림과 같은 메시지를 제공해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; 1. NSLocationAlwaysAndWhenInUseUsageDescription 
 2. NSLocationWhenInUseUsageDescription
 3. NSLocationAlwaysUsageDescription
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/cHdfe.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/cHdfe.png&quot; alt=&quot;여기에 이미지 설명 입력&quot; papago-attr-id=&quot;7&quot;&gt;&lt;/a&gt; &lt;strong papago-id=&quot;96&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iOS-10 이하의 경우:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/utuWG.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/utuWG.png&quot; alt=&quot;여기에 이미지 설명 입력&quot; papago-attr-id=&quot;8&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import CoreLocation
class ViewController: UIViewController ,CLLocationManagerDelegate {
var locationManager = CLLocationManager()

//MARK- Update Location 
func updateMyLocation(){
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyThreeKilometers;
    if locationManager.respondsToSelector(#selector(CLLocationManager.requestWhenInUseAuthorization)){
       locationManager.requestWhenInUseAuthorization()
    }
    else{
        locationManager.startUpdatingLocation()
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;97&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위임 방식&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//MARK: Location Update
func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
    NSLog(&quot;Error to update location :%@&quot;,error)
}
func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
    switch status {
    case .NotDetermined: break
    case .Restricted: break
    case .Denied:
            NSLog(&quot;do some error handling&quot;)
        break
    default:
        locationManager.startUpdatingLocation()
    }
}
func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
     let location = locations.last! as CLLocation
    var latitude = location.coordinate.latitude
    var longitude = location.coordinate.longitude

}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;51&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;51-1&quot;&gt;Xamarin&lt;/strong&gt;을 사용하는 사용자의 경우, Xamarin 5.5.3 Build 6 또는 XCode 6.1의 드롭다운에서 사용할 수 없었기 때문에 수동으로 info.plist에 키를 추가해야 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NSLocationUsageDescription&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;52&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 그 에 「이러다」라고 하는 「이러다만, 그 에 「이러다」라고 하는 사태가 발생했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CLLocationManager&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;53&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 사용하다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;        // ** Don't forget to add NSLocationWhenInUseUsageDescription in MyApp-Info.plist and give it a string

        self.locationManager = [[CLLocationManager alloc] init];
        self.locationManager.delegate = self;
        // Check for iOS 8. Without this guard the code will crash with &quot;unknown selector&quot; on iOS 7.
        if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
            [self.locationManager requestWhenInUseAuthorization];
        }
        [self.locationManager startUpdatingLocation];


    // Location Manager Delegate Methods    
    - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
    {
        NSLog(@&quot;%@&quot;, [locations lastObject]);

}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;101&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 Info.plist 파일을 가진 모든 사용자를 위한 작은 도우미...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;find . -name Info.plist | xargs -I {} /usr/libexec/PlistBuddy -c 'Add NSLocationWhenInUseUsageDescription string' {} 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;102&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요한 태그를 현재 디렉토리(및 하위 폴더)의 모든 Info.plist 파일에 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;103&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또 다른 예는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;find . -name Info.plist | xargs -I {} /usr/libexec/PlistBuddy -c 'Set NSLocationWhenInUseUsageDescription $YOURDESCRIPTION' {} 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;104&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 모든 파일에 설명이 추가됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;105&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;105-1&quot;&gt;이러한&lt;/strong&gt; 업데이트를 위해 코코아 키 정보를 항상 사용할 수 있습니다. 다음 링크입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW26&quot; rel=&quot;nofollow&quot; papago-id=&quot;106&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html #//apple_ref/doc/uid/TP40009251-SW26&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;107&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;즐거운 시간 되세요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;108&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iOS9에서도 유사한 오류가 발생합니다(Xcode 7 및 Swift 2에서 작동).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;108-1&quot;&gt;위치 인증을 요청하지 않고 MapKit 위치 업데이트를 시작하려고 합니다.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;108-1&quot;&gt; CLLocationManager 요청을 호출해야 합니다.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;108-1&quot;&gt;사용시&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;108-1&quot;&gt;인증] 또는 [CLLocation Manager 요청]&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;108-1&quot;&gt;[ Always Authorization ]를 클릭합니다.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;튜토리얼을 팔로우하고 있었는데 튜터가 iOS8과 Swift 1.2를 사용하고 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Xcode 7과 Swift 2에 몇 가지 변경이 있습니다.이 코드를 발견하면 문제없이 동작합니다(도움이 필요한 경우).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import UIKit
import MapKit
import CoreLocation

class MapViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate {

    // MARK: Properties
    @IBOutlet weak var mapView: MKMapView!

    let locationManager = CLLocationManager()

    override func viewDidLoad() {
        super.viewDidLoad()

        self.locationManager.delegate = self
        self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
        self.locationManager.requestWhenInUseAuthorization()
        self.locationManager.startUpdatingLocation()
        self.mapView.showsUserLocation = true

    }

    // MARK: - Location Delegate Methods

    func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        let location = locations.last
        let center = CLLocationCoordinate2D(latitude: location!.coordinate.latitude, longitude: location!.coordinate.longitude)
        let region = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 1, longitudeDelta: 1))
        self.mapView.setRegion(region, animated: true)
    }

    func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
        print(&quot;Errors: &quot; + error.localizedDescription)
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;109&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막으로 info.plist에 입력했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;정보 속성 목록: &lt;strong papago-id=&quot;109-1&quot;&gt;NSLocation&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;109-1&quot;&gt;InUseUsageDescription&lt;/strong&gt; 값: &lt;strong papago-id=&quot;109-3&quot;&gt;앱에 직원을 위한 위치&lt;/strong&gt; 서버가 &lt;strong papago-id=&quot;109-3&quot;&gt;필요한 경우&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;110&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iOS에서 사용자 위치에 액세스하기 위해.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 개의 키를 추가해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;111&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;NSLocation&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;When In Use Usage 설명&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;112&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;NSLocation&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Always Usage 설명&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;113&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Info.plist 파일로 변환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    &amp;lt;key&amp;gt;NSLocationWhenInUseUsageDescription&amp;lt;/key&amp;gt;
    &amp;lt;string&amp;gt;Because I want to know where you are!&amp;lt;/string&amp;gt;
    &amp;lt;key&amp;gt;NSLocationAlwaysUsageDescription&amp;lt;/key&amp;gt;
    &amp;lt;string&amp;gt;Want to know where you are!&amp;lt;/string&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;114&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 이미지를 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/LZ1df.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/LZ1df.png&quot; alt=&quot;Info.plist 이미지&quot; papago-attr-id=&quot;9&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;ol&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;54&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 추가 ★★&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NSLocationWhenInUseUsageDescription&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;55&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★★★★★★★★★★★★★★★」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NSLocationAlwaysUsageDescription&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;56&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 사용)하는 문자열 (GPS 사용)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;info.plist&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;57&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;타の타&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;119&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 실행하여 권한 요청:&lt;/font&gt;&lt;/p&gt; &lt;p papago-id=&quot;120&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;[self init Location Manager: location Manager];&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;58&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서 ★★★★★&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;initLocationManager&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;59&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 말합니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// asks for GPS authorization on iOS 8
-(void) initLocationManager:(CLLocationManager *) locationManager{

    locationManager = [[CLLocationManager alloc]init];

    if([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)])
        [locationManager requestAlwaysAuthorization];
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;60&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가 각 에 는, 해 주세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;info.plist&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;61&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 타겟에 대해 앱은 사용자에게 묻지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;if&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;62&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 7 및 7과의 호환성을 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;respondsToSelector:&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;63&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;7 및 method iOS 7의 하는 것만이  미래의 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;64&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저에게 있어서 문제는 그 수업이&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CLLocationManagerDelegate&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;65&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 때문에 모든 위임 메서드가 호출되지 않았습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;흔한 상황은 아니지만 누군가를 도울 수 있을 때를 대비해서 언급해야겠다고 생각했어요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;66&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 그 는 in in in in in in in in in in in in에 추가한다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;InfoPlist.strings&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;67&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;67-1&quot;&gt;iOS&lt;/strong&gt; 8&lt;strong papago-id=&quot;67-1&quot;&gt;.4&lt;/strong&gt;에서는 iPad &lt;strong papago-id=&quot;67-1&quot;&gt;mini &lt;/strong&gt;2 입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것도 효과가 있어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;키를 세팅하지 않아요&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NSLocationWhenInUseUsageDescription&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;68&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 「 」에서는, 「 」라고 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Info.plist&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;69&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;133&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;133-0&quot;&gt;InfoPlist.strings&lt;/em&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;NSLocationWhenInUseUsageDescription&quot; = &quot;I need GPS information....&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;70&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://nevan.net/2014/09/core-location-manager-changes-in-ios-8/&quot; papago-id=&quot;70-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;이&lt;/a&gt; 실타래에 &lt;a href=&quot;http://nevan.net/2014/09/core-location-manager-changes-in-ios-8/&quot; papago-id=&quot;70-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;의하면&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;as in iOS 7&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;71&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;InfoPlist.strings&quot; 입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 테스트에서는,는, 할 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;InfoPlist.strings&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;72&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;137&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 가장 먼저 해야 할 일은 다음 중 하나의 &amp;gt; 키를 Info.plist 파일에 추가하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li papago-id=&quot;138&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;NSLocation&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;When In Use Usage 설명&lt;/font&gt;&lt;/li&gt; 
  &lt;li papago-id=&quot;139&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;NSLocation&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Always Usage 설명&lt;/font&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p papago-id=&quot;140&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 두 키 모두 위치 서비스가 필요한 이유를 설명하는 문자열을 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;iOS 7과 같이 &quot;Location is required to find your where&quot;와 같은 문자열을 &lt;strong papago-id=&quot;140-1&quot;&gt;입력&lt;/strong&gt;할 수 있습니다.&lt;strong papago-id=&quot;140-1&quot;&gt;이&lt;/strong&gt; 문자열은 InfoPlist.strings 파일에서 현지화할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;141&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;갱신:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;73&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/27517837/419348&quot; papago-id=&quot;73-1&quot;&gt;의 방식이 &lt;/a&gt;더 &lt;a href=&quot;https://stackoverflow.com/a/27517837/419348&quot; papago-id=&quot;73-1&quot;&gt;좋다고&lt;/a&gt; 생각합니다&lt;a href=&quot;https://stackoverflow.com/a/27517837/419348&quot; papago-id=&quot;73-1&quot;&gt;.&lt;/a&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;키 추가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Info.plist&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;74&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;InfoPlist.strings&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;75&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;145&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/24062509/&lt;a href=&quot;https://stackoverflow.com/questions/24062509/location-services-not-working-in-ios-8&quot; target=&quot;_blank&quot; papago-id=&quot;145-1&quot;&gt;location-services-not-working-in-ios-8&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Objective-C</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/854</guid>
      <comments>https://gigabyte.tistory.com/854#entry854comment</comments>
      <pubDate>Mon, 24 Apr 2023 23:26:04 +0900</pubDate>
    </item>
    <item>
      <title>시스템 변환그림그리기.아이콘에서 시스템으로Media.ImageSource</title>
      <link>https://gigabyte.tistory.com/853</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템 변환&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그림그리기.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아이콘에서 시스템으로&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Media.ImageSource&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아이콘 핸들에 대응하는 관리되지 않는 경계/관리되지 않는 경계에 걸쳐 IntPtr을 마셜링했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;FromHandle() 메서드로 아이콘으로 변환하는 것은 간단하며 최근까지 만족스러웠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로, 호스팅된 WinForm이 애플리케이션의 기본(WPF-tastic) UI를 깨는 것을 막기 위해 연주한 MTA/STA 춤은 너무 불안정하기 때문에 더 이상 사용할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 WinForm은 없어져야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 Icon의 ImageSource 버전을 입수하려면 어떻게 해야 하나요?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Image Source Converter를 사용해 봤지만 소용이 없었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이와는 별도로 관련된 아이콘의 &lt;em papago-id=&quot;5-1&quot;&gt;일부&lt;/em&gt;에 대한 기본 리소스를 얻을 수 있습니다. 아이콘은 일반적으로 응용 프로그램의 어셈블리 외부에 존재합니다(실제로 관리되지 않는 dll에 존재합니다).&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가 객체를 생성하지 않고 간단한 변환 방법:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    public static ImageSource ToImageSource(this Icon icon)
    {
        ImageSource imageSource = Imaging.CreateBitmapSourceFromHIcon(
            icon.Handle,
            Int32Rect.Empty,
            BitmapSizeOptions.FromEmptyOptions());

        return imageSource;
    }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 시험해 보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Icon img;

Bitmap bitmap = img.ToBitmap();
IntPtr hBitmap = bitmap.GetHbitmap();

ImageSource wpfBitmap =
     Imaging.CreateBitmapSourceFromHBitmap(
          hBitmap, IntPtr.Zero, Int32Rect.Empty, 
          BitmapSizeOptions.FromEmptyOptions());
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;8-0&quot;&gt;업데이트&lt;/strong&gt;: Alex의 제안을 통합하여 확장 방법으로 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;internal static class IconUtilities
{
    [DllImport(&quot;gdi32.dll&quot;, SetLastError = true)]
    private static extern bool DeleteObject(IntPtr hObject);

    public static ImageSource ToImageSource(this Icon icon)
    {            
        Bitmap bitmap = icon.ToBitmap();
        IntPtr hBitmap = bitmap.GetHbitmap();

        ImageSource wpfBitmap = Imaging.CreateBitmapSourceFromHBitmap(
            hBitmap,
            IntPtr.Zero,
            Int32Rect.Empty,
            BitmapSizeOptions.FromEmptyOptions());

        if (!DeleteObject(hBitmap))
        {
            throw new Win32Exception();
        }

        return wpfBitmap;
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ImageSource wpfBitmap = img.ToImageSource();
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일회용 스트림을 사용할 때는 거의 항상 '사용' 블록을 사용하여 리소스를 올바르게 해제하는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;using (MemoryStream iconStream = new MemoryStream())
{
   icon.Save(iconStream);
   iconStream.Seek(0, SeekOrigin.Begin);

   this.TargetWindow.Icon = System.Windows.Media.Imaging.BitmapFrame.Create(iconStream);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어디에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;icon&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소스 시스템입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그림그리기.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아이콘 및&lt;/font&gt;&lt;/font&gt;&lt;code&gt;this.TargetWindow&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대상 시스템입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;창문들.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;창문이요.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;MemoryStream iconStream = new MemoryStream();
myForm.Icon.Save(iconStream);
iconStream.Seek(0, SeekOrigin.Begin);
_wpfForm.Icon = System.Windows.Media.Imaging.BitmapFrame.Create(iconStream);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 몇 가지 사례를 통해 제 자신에게 최고의 품질의 아이콘을 만들어냈습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;바이트 배열에서 아이콘을 로드합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;캐시 부하를 사용하는 이유는 캐시 부하를 사용하지 않으면 메모리 스트림을 폐기할 때 폐기된 예외가 발생하기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   internal static ImageSource ToImageSource(this byte[] iconBytes)
    {
        if (iconBytes == null)
            throw new ArgumentNullException(nameof(iconBytes));
        using (var ms = new MemoryStream(iconBytes))
        {
            return BitmapFrame.Create(ms, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
        }
    }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비슷한 예로 개발자의 사용 사례만 조정하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    [DllImport(&quot;shell32.dll&quot;)]
    public static extern IntPtr ExtractIcon(IntPtr hInst, string file, int nIconIndex);

    [DllImport(&quot;user32.dll&quot;, SetLastError = true)]
    static extern bool DestroyIcon(IntPtr hIcon);

    /// &amp;lt;summary&amp;gt;
    /// Gets application icon from main .exe.
    /// &amp;lt;/summary&amp;gt;
    /// &amp;lt;param name=&quot;setToObject&quot;&amp;gt;object to which to set up icon&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&quot;bAsImageSource&quot;&amp;gt;true if get it as &quot;ImageSource&quot; (xaml technology), false if get it as &quot;Icon&quot; (winforms technology)&amp;lt;/param&amp;gt;
    /// &amp;lt;returns&amp;gt;true if successful.&amp;lt;/returns&amp;gt;
    public bool GetIcon(object setToObject, bool bAsImageSource)
    {
        String path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
        path = Path.Combine(path, &quot;yourmainexecutableName.exe&quot;);
        int iIconIndex = 0;

        // If your application contains multiple icons, then
        // you could change iIconIndex here.

        object o2set = null;
        IntPtr hIcon = ExtractIcon(IntPtr.Zero, path, iIconIndex);
        if (hIcon == IntPtr.Zero)
            return false;

        Icon icon = (Icon)Icon.FromHandle(hIcon);
        if (bAsImageSource)
        {
            o2set = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
                icon.ToBitmap().GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, 
                System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
        } else {
            icon = (Icon)icon.Clone();
        }

        DestroyIcon(hIcon);
        setToObject.GetType().GetProperty(&quot;Icon&quot;).SetValue(setToObject, o2set);
        return true;
    } //GetIcon
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제에 대한 정말 간단한 해결책이 있다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;순서:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(1) Solution Explorer -&amp;gt; Resources.resx (2)의 리소스에 이미지를 추가하고 솔루션 탐색기의 &quot;Resources&quot; 디렉토리 내의 이미지 속성을 편집하여 &quot;Build action&quot;을 &quot;Resource&quot;로 변경합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;xaml에 다음 추가...&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아이콘=&quot;리소스/이미지 이름&quot; (여기서 &quot;이미지 이름&quot;은 리소스에 추가한 이미지의 이름입니다.) 지점 (1)을 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/1127647/&lt;a href=&quot;https://stackoverflow.com/questions/1127647/convert-system-drawing-icon-to-system-media-imagesource&quot; target=&quot;_blank&quot; papago-id=&quot;21-1&quot;&gt;convert-system-drawing-icon-to-system-media-imagesource&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>WPF</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/853</guid>
      <comments>https://gigabyte.tistory.com/853#entry853comment</comments>
      <pubDate>Mon, 24 Apr 2023 23:25:48 +0900</pubDate>
    </item>
    <item>
      <title>ASP에서 웹 앱의 기본 URL을 얻으려면 어떻게 해야 합니까?NET MVC?</title>
      <link>https://gigabyte.tistory.com/852</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ASP에서 웹 앱의 기본 URL을 얻으려면 어떻게 해야 합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET MVC?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ASP의 루트 URL을 빠르게 판별하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET MVC 어플리케이션&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, IIS가 http&lt;a href=&quot;http://example.com/foo/bar&quot; rel=&quot;noreferrer&quot; papago-id=&quot;1-1&quot;&gt;://example&lt;/a&gt;.com/foo/bar,에서 응용 프로그램을 지원하도록 설정되어 있는 경우, 요청에서 현재 URL을 가져와 작업을 재루팅할 때 깨지기 쉬운 방법으로 잘라내지 않고 신뢰할 수 있는 방법으로 해당 URL을 얻을 수 있어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본 URL이 필요한 이유는 이 웹 어플리케이션이 콜백 목적으로 루트를 필요로 하는 다른 웹 어플리케이션을 발신자 웹 어플리케이션으로 호출하기 때문입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Request 객체를 사용할 수 있는 경우 다음을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;string.Format(&quot;{0}://{1}{2}&quot;, Request.Url.Scheme, Request.Url.Authority, Url.Content(&quot;~&quot;));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용할 수 없는 경우는, 다음의 콘텍스트를 사용해 액세스 할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var request = HttpContext.Current.Request
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에 나와 있는 것 중 어느 것도 도움이 되지 않았지만, 몇 가지 답을 사용하여 뭔가 효과를 볼 수 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public string GetBaseUrl()
{
    var request = HttpContext.Current.Request;
    var appUrl = HttpRuntime.AppDomainAppVirtualPath;

    if (appUrl != &quot;/&quot;) 
        appUrl = &quot;/&quot; + appUrl;

    var baseUrl = string.Format(&quot;{0}://{1}{2}&quot;, request.Url.Scheme, request.Url.Authority, appUrl);

    return baseUrl;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ASP 업데이트&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET Core / MVC 6:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;ASP.NET Core&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특히 코드에 깊이 빠져 있는 경우에는 이 프로세스가 조금 더 고통스럽게 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;2가지 옵션을 사용하여&lt;/font&gt;&lt;/font&gt;&lt;code&gt;HttpContext&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1) 고객으로부터 전달하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;controller&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var model = new MyClass(HttpContext);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 나서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;model&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;private HttpContext currentContext;

public MyClass(HttpContext currentContext)
{
    this.currentContext = currentContext;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2) 아마도 더 깔끔한 방법은 당신의 클래스에 주입하는 것입니다. 이것은 당신의 수업에서 유형을 등록하는 것부터 시작합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Startup:&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddMvc();

    services.AddTransient&amp;lt;MyClass, MyClass&amp;gt;();
    services.TryAddSingleton&amp;lt;IHttpContextAccessor, HttpContextAccessor&amp;gt;();
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 주사해 주세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;private HttpContext currentContext;

public MyClass(IHttpContextAccessor httpContextAccessor)
{
    currentContext = httpContextAccessor.HttpContext;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어느 쪽이든 최신 정보는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.NET Core&lt;/code&gt; &lt;code&gt;GetBaseUrl()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public string GetBaseUrl()
{
    var request = currentContext.Request;

    var host = request.Host.ToUriComponent();

    var pathBase = request.PathBase.ToUriComponent();

    return $&quot;{request.Scheme}://{host}{pathBase}&quot;;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Url.Content(&quot;~/&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MVC3 레이저 구문:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Url.Content(&quot;~/&quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에 게시된 답변의 확장 또는 수정일 수도 있지만, 저는 다음 행을 사용하여 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Request.Url.GetLeftPart(UriPartial.Authority) + Url.Content(&quot;~&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;경로가 다음과 같은 경우:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;http://host/iis_foldername/controller/action&lt;/code&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음에 수신합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;http://host/iis_foldername/&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 스니펫은 MVC4에서 나에게 잘 작동하며, 이 스니펫은 필요 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;HttpContext&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이용 가능:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;System.Web.HttpRuntime.AppDomainAppVirtualPath
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;IIS에 의존할 때의 문제는 IIS 바인딩이 퍼블릭 URL(WCF)과 다를 수 있다는 것입니다.특히 멀티홈 실가동 머신의 경우는 그렇습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Configuration을 사용하여 외부 목적을 위해 명시적으로 &quot;base&quot; URL을 정의하는 경향이 있습니다.이는 Request 객체에서 URL을 추출하는 것보다 약간 더 성공적이기 때문입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;절대 기준 URL의 경우 이를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTTP 와 HTTPS 의 양쪽 모두에서 동작합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;new Uri(Request.Url, Url.Content(&quot;~&quot;))
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://devio.wordpress.com/2009/10/19/get-absolut-url-of-asp-net-application/&quot; papago-id=&quot;25-0&quot;&gt;이것은 asp.&lt;/a&gt;net &lt;a href=&quot;http://devio.wordpress.com/2009/10/19/get-absolut-url-of-asp-net-application/&quot; papago-id=&quot;25-0&quot;&gt;속성을 MVC로 변환한 것&lt;/a&gt;입니다.이것은 거의 모두 singing all dancing get root url 메서드입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도우미 클래스 선언:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;namespace MyTestProject.Helpers
{
    using System.Web;

    public static class PathHelper
    {
        public static string FullyQualifiedApplicationPath(HttpRequestBase httpRequestBase)
        {
            string appPath = string.Empty;

            if (httpRequestBase != null)
            {
                //Formatting the fully qualified website url/name
                appPath = string.Format(&quot;{0}://{1}{2}{3}&quot;,
                            httpRequestBase.Url.Scheme,
                            httpRequestBase.Url.Host,
                            httpRequestBase.Url.Port == 80 ? string.Empty : &quot;:&quot; + httpRequestBase.Url.Port,
                            httpRequestBase.ApplicationPath);
            }

            if (!appPath.EndsWith(&quot;/&quot;))
            {
                appPath += &quot;/&quot;;
            }

            return appPath;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용방법:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨트롤러에서 사용하려면:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;PathHelper.FullyQualifiedApplicationPath(ControllerContext.RequestContext.HttpContext.Request)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보기에서 사용하려면:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@using MyTestProject.Helpers

PathHelper.FullyQualifiedApplicationPath(Request)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MVC _Layout.cshtml:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;base href=&quot;@Request.GetBaseUrl()&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그게 우리가 쓰는 거야!&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public static class ExtensionMethods
{
public static string GetBaseUrl(this HttpRequestBase request)
        {
          if (request.Url == (Uri) null)
            return string.Empty;
          else
            return request.Url.Scheme + &quot;://&quot; + request.Url.Authority + VirtualPathUtility.ToAbsolute(&quot;~/&quot;);
        }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 조작은, 부하 밸런서에서도 정상적으로 동작합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@{
    var urlHelper = new UrlHelper(Html.ViewContext.RequestContext);
    var baseurl = urlHelper.Content(“~”);
}

&amp;lt;script&amp;gt;
    var base_url = &quot;@baseurl&quot;;
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특히 비표준 포트 번호를 사용하는 경우 Request를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Url.Authority는 처음에는 좋은 리드처럼 보이지만 LB 환경에서는 실패합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HttpContext를 조사하는 정적 메서드를 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 호스트 ID에 따라 사용할 URL(개발 서버 또는 라이브 서버)을 결정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Http Context는 더 쉬운 방법을 제공할 수도 있지만, 이것이 제가 발견한 첫 번째 옵션이며, 정상적으로 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보기에서 다음 스크립트를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
    var BASE_URL = '&amp;lt;%= ResolveUrl(&quot;~/&quot;) %&amp;gt;';
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ASP의 경우.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET MVC 4는 조금 다릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;string url = HttpContext.Request.Url.AbsoluteUri;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 ASP에서 동작하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET MVC 4 모든 컨트롤러 액션에서 1stline은 전체 url+Query String을 가져옵니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 번째 줄 로컬 경로 및 쿼리 제거, 마지막 '/' 기호.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막 위치에 '/' 기호를 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Uri url = System.Web.HttpContext.Current.Request.Url;
string UrlLink = url.OriginalString.Replace(url.PathAndQuery,&quot;&quot;);
UrlLink = String.Concat(UrlLink,&quot;/&quot; );
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;심플한 html과 ASP로.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET 또는 ASP.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;태그를 사용하는 경우 NET MVC:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;a href=&quot;~/#about&quot;&amp;gt;About us&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http&lt;a href=&quot;http://example.com/appAlias/&quot; papago-id=&quot;39-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;://&lt;/a&gt;example.com/&lt;a href=&quot;http://example.com/appAlias/&quot; papago-id=&quot;39-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;appAlias&lt;/a&gt;/과 같은 복제 별칭을 가진 URL의 경우...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 시험해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var req = HttpContext.Current.Request;
string baseUrl = string.Format(&quot;{0}://{1}/{2}&quot;, req.Url.Scheme, req.Url.Authority, req.ApplicationPath);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹 페이지 자체:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;hidden&quot; id=&quot;basePath&quot; value=&quot;@string.Format(&quot;{0}://{1}{2}&quot;,
  HttpContext.Current.Request.Url.Scheme,
  HttpContext.Current.Request.Url.Authority,
  Url.Content(&quot;~&quot;))&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Javascript에서:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function getReportFormGeneratorPath() {
  var formPath = $('#reportForm').attr('action');
  var newPath = $(&quot;#basePath&quot;).val() + formPath;
  return newPath;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 MVC 프로젝트에 도움이 됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 저의 솔루션이었습니다(API 컨트롤러에서 .net core 3.1을 사용).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;string baseUrl = $&quot;{Request.Scheme}://{Request.Headers.Where(h =&amp;gt; h.Key == &quot;Host&quot;).First().Value}&quot;;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MVC 4의 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;String.Format(&quot;{0}://{1}{2}&quot;, Url.Request.RequestUri.Scheme, Url.Request.RequestUri.Authority, ControllerContext.Configuration.VirtualPathRoot);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 내 _Layout.cshtml의 머리 속에 넣었다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; &amp;lt;base href=&quot;~/&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어쩌면 그게 더 나은 해결책일지도 몰라.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@{
   var baseUrl = @Request.Host(&quot;/&quot;);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;a href=&quot;@baseUrl&quot; class=&quot;link&quot;&amp;gt;Base URL&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;@{
    var baseurl = Request.Url.Scheme + &quot;://&quot; + Request.Url.Host + &quot;:&quot; + Request.Url.Port + Url.Content(&quot;~&quot;);
}
@baseurl
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://localhost:49626/TEST/&quot; papago-id=&quot;48-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;--output&lt;/a&gt; http&lt;a href=&quot;http://localhost:49626/TEST/&quot; papago-id=&quot;48-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;://localhost: 49626/TEST/&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.net core 3.1에서는 다음 방법을 사용했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$&quot;{Request.Scheme}://{Request.Host}{Url.Content(&quot;~/&quot;)}&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 것이 나에게 확실하게 작용했다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var request = HttpContext.Request;
                        var appUrl = System.Web.HttpRuntime.AppDomainAppVirtualPath;

                        if (appUrl != &quot;/&quot;)
                            appUrl = &quot;/&quot; + appUrl + &quot;/&quot;;

                        var newUrl = string.Format(&quot;{0}://{1}{2}{3}/{4}&quot;, request.Url.Scheme, request.UrlReferrer.Host, appUrl, &quot;Controller&quot;, &quot;Action&quot;);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것도 쓸 수 있어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;면도기는 다른 것보다 사용하는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://ml-software.ch/posts/getting-the-base-url-for-an-asp-net-core-mvc-web-application-in-your-static-javascript-files&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://ml-software.ch/posts/getting-the-base-url-for-an-asp-net-core-mvc-web-application-in-your-static-javascript-files&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;utf-8&quot; /&amp;gt;
    &amp;lt;base href='@Url.AbsoluteContent(&quot;~/&quot;)'&amp;gt;
    &amp;lt;title&amp;gt;@ViewBag.Title - ASP.NET Core Web Application&amp;lt;/title&amp;gt;
    &amp;lt;!-- ... --&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유틸리티 클래스와 같은 프로젝트의 정적 클래스에 다음 함수를 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;utility.cs &lt;strong papago-id=&quot;54-0&quot;&gt;콘텐츠:&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public static class Utility
{
    public static string GetBaseUrl()
    {
        var request = HttpContext.Current.Request;
        var urlHelper = new UrlHelper(request.RequestContext);
        var baseUrl = $&quot;{request.Url.Scheme}://{request.Url.Authority}{urlHelper.Content(&quot;~&quot;)}&quot;;
        return baseUrl;
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어디서든 이 코드를 사용하여 즐기십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var baseUrl = Utility.GetBaseUrl();
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 줄에 BaseUrl을 가져옵니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;string baseUrl = new Uri(Request.Url, Url.Content(&quot;~&quot;)).AbsoluteUri;

//output example: https://stackoverflow.com
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/1288046/&lt;a href=&quot;https://stackoverflow.com/questions/1288046/how-can-i-get-my-webapps-base-url-in-asp-net-mvc&quot; target=&quot;_blank&quot; papago-id=&quot;57-1&quot;&gt;how-can-i-get-my-webapps-base-url-in-asp-net-mvc&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>ASP.NET</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/852</guid>
      <comments>https://gigabyte.tistory.com/852#entry852comment</comments>
      <pubDate>Mon, 24 Apr 2023 23:25:40 +0900</pubDate>
    </item>
    <item>
      <title>리모트 서버에서 특정 브랜치를 꺼냅니다.</title>
      <link>https://gigabyte.tistory.com/851</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리모트 서버에서 특정 브랜치를 꺼냅니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 칩시다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;xyz&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 해야 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;xyz&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원격 서버(예: &lt;a href=&quot;http://en.wikipedia.org/wiki/GitHub&quot; papago-id=&quot;3-1&quot; rel=&quot;noreferrer&quot;&gt;GitHub&lt;/a&gt;)에서 기존 브랜치에 병합합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;xyz&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제역지 포포???&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;5-1&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/1072261/push-and-pull-branches-in-git&quot; papago-id=&quot;5-1-0&quot;&gt;Push branchs to&lt;/a&gt;&lt;/em&gt; Git에 &lt;em papago-id=&quot;5-1&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/1072261/push-and-pull-branches-in-git&quot; papago-id=&quot;5-1-0&quot;&gt;대한&lt;/a&gt;&lt;/em&gt; 답변은 &quot;! [rejected]&quot;라는 오류와 &quot;non fastforward&quot;를 나타냅니다.&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 에러 「![거부]」와 「빠르지 않다」가 표시된다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Git은 브랜치 변경 사항을 현재 마스터로 병합할 수 없기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 지점을 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;master&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 싶다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;other-branch&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 다음 중 하나:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ git pull origin other-branch
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Git은 기본적으로 다음과 같은 작업을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ git fetch origin other-branch &amp;amp;&amp;amp; git merge other-branch
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아, 아, 아, 아.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pull&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;...&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fetch&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 '아예'가 붙습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;merge&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ,의 경우, 이의 경우&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pull&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;-ing, Git은 Marge만 &lt;em papago-id=&quot;15-1&quot;&gt;합니다&lt;/em&gt;.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;other-branch&lt;/code&gt; &lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;16-2&quot;&gt;Fast&lt;/em&gt; Forward Merge를 실행할 수 있는지 확인합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;16-4&quot;&gt;빨리&lt;/em&gt; 감기 병합은 병합하려는 브랜치 헤드가 병합하려는 브랜치 헤드의 &lt;em papago-id=&quot;16-6&quot;&gt;직계&lt;/em&gt; 하위 항목인 병합입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 이 기록 트리가 있는 경우 병합&lt;/font&gt;&lt;/font&gt;&lt;code&gt;other-branch&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; merge가 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;O-O-O-O-O-O
^         ^
master    other-branch
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단, 이것은 고속 전송 머지는 &lt;em papago-id=&quot;18-1&quot;&gt;아닙니다&lt;/em&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    v master
O-O-O
\
 \-O-O-O-O
         ^ other-branch
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제를 해결하려면 &lt;em papago-id=&quot;19-1&quot;&gt;먼저&lt;/em&gt; 리모트브런치를 가져옵니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ git fetch origin other-branch
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 다음 분파로 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;master&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;）)) 、 [ ] 、 [ ] 、 [ Merge Conflicts ]를 클릭합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ git merge origin/other-branch
# Fix merge conflicts, if they occur
# Add merge conflict fixes
$ git commit    # And commit the merge!
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 브랜치를 하고, 한 브랜치를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git pull&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이데올로기 때문에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git branch -f remote_branch_name origin/remote_branch_name
git checkout remote_branch_name
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;후자는 로컬 운영입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://help.github.com/articles/fork-a-repo&quot; papago-id=&quot;25-1&quot; rel=&quot;noreferrer&quot;&gt;또는&lt;/a&gt; 포킹에 관한 &lt;a href=&quot;https://help.github.com/articles/fork-a-repo&quot; papago-id=&quot;25-1&quot; rel=&quot;noreferrer&quot;&gt;GitHub 문서&lt;/a&gt;와 더 잘 어울립니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git branch -f new_local_branch_name upstream/remote_branch_name
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안전한 접근방식은 먼저 로컬브런치(xyz)를 작성한 후 리모트브런치를 로컬로 끌어당기는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# create a local branch
git checkout -b xyz

# make sure you are on the newly created branch
git branch

# finally pull the remote branch to your local branch
git pull origin xyz

&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리모트 브런치를 로컬브런치로 풀 수 있는 구문을 다음에 나타냅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git pull {repo} {remotebranchname}:{localbranchname}

git pull origin xyz:xyz
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 좋은 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git checkout -b &amp;lt;new_branch&amp;gt; &amp;lt;remote repo name&amp;gt;/&amp;lt;new_branch&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;git fetch&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 최신 브랜치 리스트를 가져옵니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 이제 은 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git checkout MyNewBranch&lt;/code&gt; &lt;/p&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;완료:)&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;em papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은 &lt;a href=&quot;http://git-scm.com/docs/git-fetch&quot; papago-id=&quot;32-1&quot;&gt;문서&lt;/a&gt;: &lt;a href=&quot;http://git-scm.com/docs/git-fetch&quot; papago-id=&quot;32-1&quot;&gt;git&lt;/a&gt; fetch를 참조하십시오.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제를 완전히 이해하고 있는지는 모르겠지만, 기존 브랜치를 이렇게 꺼냅니다(적어도 나에게는 효과가 있습니다).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git pull origin BRANCH
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 오리진/브런치에서 로컬브런치가 생성되었다고 가정합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 말하면, GitHub에서 빼야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;the-branch-I-want&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git fetch origin
git branch -f the-branch-I-want origin/the-branch-I-want
git checkout the-branch-I-want
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것에 의해, 리모트 브랜치를 다른 브랜치로 통합하기 전에 취득할 수 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git fetch repo xyz:xyz
git checkout xyz
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;GitHub에서 브랜치를 꺼내기 위해 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git checkout --track origin/the-branch-name
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지점 이름이 정확히 동일한지 확인하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;했다&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git branch -f new_local_branch_name origin/remote_branch_name
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git branch -f new_local_branch_name upstream/remote_branch_name
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@innaM in @ 。&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;업스트림&lt;/font&gt;/&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;이&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;)&lt;/font&gt; &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 '/remote_name'은 '/remote_remote_name'을 클릭합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 하지 않았다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git fetch origin&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;바와 , 대신  대체하여&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;upstream&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;origin&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;츠키다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;git pull &amp;lt;gitreponame&amp;gt; &amp;lt;branchname&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보통 코드에 repo만 할당되어 있다면 gitreponame이 원본이 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;47-1&quot;&gt;git remote -v&lt;/strong&gt;에서 repo 목록을 확인할 수 있는 것처럼 두 개의 repo를 작업하는 경우, 이것은 현재 코드에 할당된 repo의 수를 보여줍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;BranchName은 대응하는 gitreponame에 존재해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 두 명령을 사용하여 repo를 추가하거나 제거할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git remote add &amp;lt;gitreponame&amp;gt; &amp;lt;repourl&amp;gt;
git remote remove &amp;lt;gitreponame&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;너도 할 수 있어&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git pull -r origin master
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Marge 경합이 있는 경우 수정&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git rebase --continue
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;-r은 기본 재배치용입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것으로 브랜치 구조가 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;        v  master       
o-o-o-o-o
     \o-o-o
          ^ other branch
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;        v  master       
o-o-o-o-o-o-o-o
              ^ other branch
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 더 깨끗한 역사로 이어질 것이다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;주의: 이미 other-branch를 origin(또는 기타 리모트)으로 푸시한 경우 rebase 후 강제로 브랜치를 푸시해야 할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git push -f origin other-branch
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로 시험해 볼 수 있다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git branch -a
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★★★★★★★★★★★★★★★」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git fetch&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최신 지점 목록을 가져옵니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;git checkout theBranch&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;//합니다//지점에 접속합니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;git checkout -b &quot;yourNewBranch&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;//  Branch」/「The Branch」에 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거면 되겠네요.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 「」는 「」로컬브런치).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;remote_repo&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 및 &quot; &quot; &quot; 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;remote_branch&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;★★★★★★★★★★★★★★★★★★★★★★★★★★★★」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code&gt;git pull &amp;lt;remote_repo&amp;gt; &amp;lt;remote_branch&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git pull origin remote_master
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서 「」는, 「」를 참조해 주세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;local_branch&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;★★★★★★★★★★★★★★★★★★★★★★★★★★★★」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code&gt;git pull &amp;lt;remote_repo&amp;gt; &amp;lt;remote_branch&amp;gt;:&amp;lt;local_branch&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git pull origin remote_master:local_master
&lt;/code&gt;&lt;/pre&gt;&lt;h2 papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리모트에서 로컬로 새로운 브랜치를 도입하는 심플한 솔루션&lt;/font&gt;&lt;/h2&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원격 분기 가져오기&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;git fetch xyz&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로컬로 그 지점으로 전환하다&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;git switch xyz&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막으로 를 실행하여 로컬브런치에 xyz가 표시되는지 여부를 확인합니다.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;git branch&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt;&lt;h2 papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로컬 사용자는 마스터브런치와 XYZ 브런치를 개별적으로 갱신해야 한다&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 게시물들 중 어느 것도 원래 질문에 답하지 않습니다!&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리모트 서버(GitHub 등)에서 브랜치 xyz를 꺼내 로컬 리포에 있는 기존 브랜치 xyz에 결합하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Push branchs to Git에 대한 답변은 &quot;! [rejected]&quot;라는 오류와 &quot;non fastforward&quot;를 나타냅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 「Marge」를  하는 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;xyz&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;으로 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;xyz&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 저장소  브런치가 의 「 Branch」를 「interning.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;xyz&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;같은 리모트 브랜치로 「풀」을 실행합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;심플!&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git checkout xyz
git pull origin xyz
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;79&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런데 사용자가 에러를 냈어요!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 업데이트는 작동하지 않았어. 왜?&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;39-0&quot;&gt;만약 이게&lt;/strong&gt; 실패한다면, 그건 두 가지와는 아무 관련이 없다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;xyz&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원격 저장소 및 로컬 저장소의 분기를 병합할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;원격 저장소의 &lt;strong papago-id=&quot;40-1&quot;&gt;마스터&lt;/strong&gt; 분기가 로컬 저장소에 없는 새 커밋으로 변경된 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Fast Forward 메시지는 아마도 다음 메시지가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;xyz&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리모트 리포의 브랜치가 로컬리포를 갱신할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;xyz&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;42-1&quot;&gt;로컬 repo가 먼저&lt;/strong&gt; 리모트 &lt;strong papago-id=&quot;42-1&quot;&gt;repo에서 마스터 브랜치에 추가&lt;/strong&gt;된 모든 &lt;strong papago-id=&quot;42-1&quot;&gt;변경을 가져올&lt;/strong&gt; 때까지 브랜치합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 다른 개발자가 리모트마스터 브랜치에 추가한 새로운 커밋 또는 변경일 수 있습니다.다른 개발자가 리모트마스터 브랜치에 추가한 변경은 다음 기본 설정을 다시 실행합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;xyz&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리모트 마스터의 새로운 커밋 헤드의 끝으로 이동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;로컬 repo 사용자는 마스터브런치 끝에 추가된 새로운 커밋이 없기 때문에 변경을 Marge할 방법이 없습니다.따라서 로컬 repo 사용자는 이 변경을 갱신할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;xyz&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;repo의 로컬 마스터 브런치가 merge로 업데이트될 때까지 기본 변경을 다시 지정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pull&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,첫번째.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 로컬 마스터를 리모트마스터의 업데이트로 갱신합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pull&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 그 다음에, 를 사용해 주세요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;xyz&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;분점&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pull&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;50&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또...&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git checkout master
git pull origin

git checkout xyz
git pull origin xyz
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;51&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기억해, a&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pull&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;52&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그냥...&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fetch&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;53&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고나서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;merge&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;54&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리모트 레포에서 로컬 레포에 현재 주력하고 있는 브랜치의 레포까지.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;96&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/1709177/&lt;a href=&quot;https://stackoverflow.com/questions/1709177/pull-a-certain-branch-from-the-remote-server&quot; target=&quot;_blank&quot; papago-id=&quot;96-1&quot;&gt;pull-a-certain-branch-from-the-remote-server&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>GIT</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/851</guid>
      <comments>https://gigabyte.tistory.com/851#entry851comment</comments>
      <pubDate>Mon, 24 Apr 2023 23:25:30 +0900</pubDate>
    </item>
    <item>
      <title>각도에서의 INPUT 요소에 대한 ngModel 내 파이프 사용</title>
      <link>https://gigabyte.tistory.com/850</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각도에서의 INPUT 요소에 대한 ngModel 내 파이프 사용&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML 입력 필드가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input 
    [(ngModel)]=&quot;item.value&quot; 
    name=&quot;inputField&quot; 
    type=&quot;text&quot; 
/&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;값의 형식을 지정하고 기존 파이프를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.... 
[(ngModel)]=&quot;item.value | useMyPipeToFormatThatValue&quot; 
....
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 오류 메시지가 나타납니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작업 표현식에 파이프를 포함할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 컨텍스트에서 파이프를 사용하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;템플리트 문에서는 템플리트 &lt;a href=&quot;https://angular.io/docs/ts/latest/guide/template-syntax.html#!#expression-operators&quot; papago-id=&quot;6-1&quot; rel=&quot;noreferrer&quot;&gt;표현식&lt;/a&gt; 연산자(파이프, 네비게이터 저장)를 &lt;a href=&quot;https://angular.io/docs/ts/latest/guide/template-syntax.html#!#expression-operators&quot; papago-id=&quot;6-1&quot; rel=&quot;noreferrer&quot;&gt;사용&lt;/a&gt;할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;(ngModelChange)=&quot;Template statements&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;
 &lt;strike papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(ng모델 변경)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;=&quot; item.value | use MyPipeToFormat&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ThatValue=$event&quot;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/strike&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://angular.io/guide/template-syntax#template-statements&quot; rel=&quot;noreferrer&quot; papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://angular.io/guide/template-syntax#template-statements&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;템플릿 식과 마찬가지로 템플릿 문은 JavaScript와 유사한 언어를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;템플릿 문 파서는 템플릿 표현식 파서와 다르며 특히 기본 할당(=)과 체인 표현식(; 또는 )을 모두 지원합니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단, 특정 JavaScript &lt;strong papago-id=&quot;10-1&quot;&gt;구문은 허용&lt;/strong&gt;되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;신규&lt;/font&gt;&lt;/li&gt; 
  &lt;li papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;증분 및 감소 연산자, ++ 및 --&lt;/font&gt;&lt;/li&gt; 
  &lt;li papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;+= 및 -=와 같은 연산자 할당&lt;/font&gt;&lt;/li&gt; 
  &lt;li papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비트 연산자 | 및 &amp;amp;&lt;/font&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;strong papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;템플릿 표현식 연산자&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 다음과 같이 작성해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;input [ngModel]=&quot;item.value | useMyPipeToFormatThatValue&quot; 
      (ngModelChange)=&quot;item.value=$event&quot; name=&quot;inputField&quot; type=&quot;text&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://plnkr.co/edit/0CQVXl1Y9UsDp5TCszSk?p=preview&quot; rel=&quot;noreferrer&quot; papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;플런커의 예&lt;/font&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;input [ngModel]=&quot;item.value | useMyPipeToFormatThatValue&quot; 
      (ngModelChange)=&quot;item.value=$event&quot; name=&quot;inputField&quot; type=&quot;text&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서의 해결책은 바인딩을 단방향 바인딩과 이벤트바인딩으로 분할하는 것입니다.이러한 구문은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[(ngModel)]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에워싸고마워요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;code&gt;[]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 단방향 바인딩 구문입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 이벤트 바인딩 구문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;함께 사용하는 경우 -&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[()]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular는 이를 속기로 인식하고 컴포넌트 오브젝트 값에 대한 단방향 바인딩 및 이벤트바인딩 형식으로 양방향 바인딩을 배선합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용할 수 없는 이유&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[()]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파이프는 단방향 바인딩에서만 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 단방향 바인딩에서만 작동하도록 파이프를 분할하고 이벤트를 별도로 처리해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은 &lt;a href=&quot;https://angular.io/docs/ts/latest/guide/template-syntax.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;25-1&quot;&gt;각도 템플릿&lt;/a&gt; 구문을 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;input [ngModel]=&quot;item.value | currency&quot; (ngModelChange)=&quot;item.value=$event&quot;
name=&quot;name&quot; type=&quot;text&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 수용된 답변에 한 가지 포인트를 더 추가하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;입력 컨트롤의 유형이 텍스트가 아니면 파이프가 작동하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명심하고 시간을 절약하세요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 솔루션을 시험해 보았습니다만, 모델에 표시되는 값은 형식화된 값입니다.그 후 반환되어 currency Pipe 에러가 표시됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 어쩔 수 없이&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  [ngModel]=&quot;transfer.amount | currency:'USD':true&quot;
                                   (blur)=&quot;addToAmount($event.target.value)&quot;
                                   (keypress)=&quot;validateOnlyNumbers($event)&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 addToAmount-&amp;gt; change on blur의 함수로 인해 ngModelChange에서 커서 문제가 발생하였습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;removeCurrencyPipeFormat(formatedNumber){
    return formatedNumber.replace(/[$,]/g,&quot;&quot;)
  }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 숫자가 아닌 다른 값도 제거합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;validateOnlyNumbers(evt) {
  var theEvent = evt || window.event;
  var key = theEvent.keyCode || theEvent.which;
  key = String.fromCharCode( key );
  var regex = /[0-9]|\./;
  if( !regex.test(key) ) {
    theEvent.returnValue = false;
    if(theEvent.preventDefault) theEvent.preventDefault();
  }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;[(ngModel)]로 양방향 모델을 바인딩하는 대신 [ngModel]을 사용해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 수동 변경 이벤트를 (ngModelChange)와 함께 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 컴포넌트의 쌍방향 입력에 대한 공용 규칙입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이벤트 이미터의 파이프가 잘못되어 있기 때문입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;My Solution은 아래에 제시되어 있습니다.searchDetail은 객체입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;p-calendar  [ngModel]=&quot;searchDetail.queryDate | date:'MM/dd/yyyy'&quot;  (ngModelChange)=&quot;searchDetail.queryDate=$event&quot; [showIcon]=&quot;true&quot; required name=&quot;queryDate&quot; placeholder=&quot;Enter the Query Date&quot;&amp;gt;&amp;lt;/p-calendar&amp;gt;

&amp;lt;input id=&quot;float-input&quot; type=&quot;text&quot; size=&quot;30&quot; pInputText [ngModel]=&quot;searchDetail.systems | json&quot;  (ngModelChange)=&quot;searchDetail.systems=$event&quot; required='true' name=&quot;systems&quot;
            placeholder=&quot;Enter the Systems&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;양방향 바인딩으로 인해 다음 오류가 발생하지 않도록 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was 
checked.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 함수를 호출하여 모델을 변경할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input 
  [ngModel]=&quot;item.value&quot; 
  (ngModelChange)=&quot;getNewValue($event)&quot; 
  name=&quot;inputField&quot; 
  type=&quot;text&quot; 
/&amp;gt;

import { UseMyPipeToFormatThatValuePipe } from './path';

  //...
  constructor(
    private useMyPipeToFormatThatValue: UseMyPipeToFormatThatValuePipe,
  )
  //....
  getNewValue(ev: any): any {
    item.value= this.useMyPipeToFormatThatValue.transform(ev);
  }  
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 오류를 방지할 수 있는 더 좋은 방법이 있으면 좋겠습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/39642882/&lt;a href=&quot;https://stackoverflow.com/questions/39642882/using-pipes-within-ngmodel-on-input-elements-in-angular&quot; target=&quot;_blank&quot; papago-id=&quot;38-1&quot;&gt;using-pipes-within-ngmodel-on-input-elements-in-angular&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>angular</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/850</guid>
      <comments>https://gigabyte.tistory.com/850#entry850comment</comments>
      <pubDate>Mon, 24 Apr 2023 23:25:21 +0900</pubDate>
    </item>
    <item>
      <title>Eclipse에서 단일 JUnit 테스트 실행</title>
      <link>https://gigabyte.tistory.com/849</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Eclipse에서 단일 JUnit 테스트 실행&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트 스위트가 여러 개 있는 경우 코드 에디터의 컨텍스트메뉴 또는 JUnit 뷰에서 단일 유닛테스트를 실행하려고 하면 단일 테스트가 아닌 스위트 전체를 실행할 필요가 있는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;디세블로 해서 이 동작을 변경하여 테스트를 실행하도록 요청할 수 있는 방법이 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;패키지 안에서 탐색기가 클래스를 펼칩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 방법이 표시됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행할 방법을 오른쪽 클릭하여 컨텍스트메뉴에서 [Run As]-&amp;gt; [ JUnit ]를 선택합니다(Eclipse 3.4.1에서 방금 테스트 완료).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 JUnit 결과 보기에서 단일 항목에서 &quot;실행&quot;을 선택하여 테스트를 다시 실행하는 것도 같은 방식으로 작동합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 아는 가장 빠른 방법:&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;++(&lt;kbd papago-id=&quot;4-3&quot;&gt;Shift&lt;/kbd&gt;&lt;kbd papago-id=&quot;4-5&quot;&gt;↑&lt;/kbd&gt;커서를 현재 메서드 선언으로 이동),&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;++(&lt;kbd papago-id=&quot;5-3&quot;&gt;Shift&lt;/kbd&gt;&lt;kbd papago-id=&quot;5-5&quot;&gt;x&lt;/kbd&gt;또는 디버깅의 경우)를 누른 다음 ('Run &lt;em papago-id=&quot;5-11&quot;&gt;JUnit&lt;/em&gt; Test&lt;em papago-id=&quot;5-11&quot;&gt;'&lt;/em&gt;의 경우 단축키),&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트 결과 확인,&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;+ &lt;kbd papago-id=&quot;7-3&quot;&gt;←&lt;/kbd&gt;를 눌러 이전 코드 행으로 돌아갑니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 테스트를 실행하는 경우 스텝1과 4를 건너뛸 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Eclipse 3.5에서는 테스트 주자를 JUnit 3으로 변경하여 이 문제를 해결할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 JUnit 3 테스트에만 적용되며 JUnit 4 테스트는 적용되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 테스트 주자를 변경할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;개요 탐색기에서 테스트 방법 중 하나를 마우스 오른쪽 버튼으로 클릭합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;[ Run As ]-&amp;gt; [ Run Configurations ]를 선택합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'테스트' 탭에서 '단일 테스트 실행'을 선택합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Test Runner 드롭다운에서 'JUnit 3'을 선택합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 버전에서도 동작할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JUnit 4.8.2입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 클릭합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Outline&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하고 [ ]를 선택합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Run As -&amp;gt; JUnit Test&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에서 [를하여 [Test method name]를 선택할 도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Run As -&amp;gt; Junit Test&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또, 1 개의 유닛 테스트(메서드)를 디버깅 할 수 있는, 생산성이 뛰어난 키보드만의 방법을 추가해 보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 중 하나를 사용하여 메서드 이름으로 커서를 이동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;kbd papago-id=&quot;22-0&quot;&gt;Ctrl&lt;/kbd&gt;++&lt;kbd papago-id=&quot;22-2&quot;&gt;Shift&lt;/kbd&gt;&lt;kbd papago-id=&quot;22-4&quot;&gt;Up&lt;/kbd&gt; 또는&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;kbd papago-id=&quot;23-0&quot;&gt;Ctrl&lt;/kbd&gt;++&lt;kbd papago-id=&quot;23-2&quot;&gt;Shift&lt;/kbd&gt;&lt;kbd papago-id=&quot;23-4&quot;&gt;Down&lt;/kbd&gt; 또는&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;+ 그런 다음 메서드의 이름을 입력합니다&lt;kbd papago-id=&quot;24-0&quot;&gt;Ctrl&lt;/kbd&gt;.&lt;kbd papago-id=&quot;24-2&quot;&gt;o&lt;/kbd&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;커서가 메서드 이름(또는 메서드 이름 바로 앞)에 있으면 다음을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;kbd papago-id=&quot;26-0&quot;&gt;Alt&lt;/kbd&gt;++&lt;kbd papago-id=&quot;26-2&quot;&gt;Shift&lt;/kbd&gt;&lt;kbd papago-id=&quot;26-4&quot;&gt;D&lt;/kbd&gt; -&amp;gt; (디버깅)&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;kbd papago-id=&quot;27-0&quot;&gt;Alt&lt;/kbd&gt;++&lt;kbd papago-id=&quot;27-2&quot;&gt;Shift&lt;/kbd&gt;&lt;kbd papago-id=&quot;27-4&quot;&gt;X&lt;/kbd&gt; -&amp;gt; (실행)&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트를 실행한 후 다음 작업을 수행하여 커서가 있던 위치로 돌아갈 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;kbd papago-id=&quot;29-0&quot;&gt;Alt&lt;/kbd&gt;+&lt;kbd papago-id=&quot;29-2&quot;&gt;Back&lt;/kbd&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 방법으로 거의 리플리케이션과 같은 동작을 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;kbd papago-id=&quot;31-0&quot;&gt;Ctrl&lt;/kbd&gt;++&lt;kbd papago-id=&quot;31-2&quot;&gt;Shift&lt;/kbd&gt;&lt;kbd papago-id=&quot;31-4&quot;&gt;Up&lt;/kbd&gt; 및 ++&lt;kbd papago-id=&quot;31-8&quot;&gt;Shift&lt;/kbd&gt;&lt;kbd papago-id=&quot;31-10&quot;&gt;X&lt;/kbd&gt; -&amp;gt; &lt;kbd papago-id=&quot;31-16&quot;&gt;Back&lt;/kbd&gt;및 +&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;중단점을 빠르게 설정할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;kbd papago-id=&quot;33-0&quot;&gt;Ctrl&lt;/kbd&gt;+&lt;kbd papago-id=&quot;33-2&quot;&gt;Shift&lt;/kbd&gt;+&lt;kbd papago-id=&quot;33-4&quot;&gt;B&lt;/kbd&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;+가 아니라 단축키 ++&lt;kbd papago-id=&quot;5-7&quot;&gt;Shift&lt;/kbd&gt;&lt;kbd papago-id=&quot;5-9&quot;&gt;X&lt;/kbd&gt; -&amp;gt; 를 사용합니다.&lt;kbd papago-id=&quot;5-3&quot;&gt;F11&lt;/kbd&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 이클립스는 현재 열려 있는 파일을 JUnit 테스트로 실행합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;녹색 재생 버튼은 마지막으로 선택한 실행 구성만 실행합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 ++&lt;kbd papago-id=&quot;36-3&quot;&gt;Shift&lt;/kbd&gt;&lt;kbd papago-id=&quot;36-5&quot;&gt;X&lt;/kbd&gt; -&amp;gt;와 함께 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일내의 테스트 방법명을 오른쪽 클릭하고, 「실행」-&amp;gt; 「Junit Test」를 선택합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;케플러와 JUnit 4와 항상 함께 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하나의 테스트 방법만 실행합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(패키지 탐색기 또는 프로젝트 탐색기)에서 클래스를 펼칩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 방법이 표시됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행할 방법을 오른쪽 클릭하여 컨텍스트메뉴에서 [Run As -&amp;gt; JUnit]를 선택합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;a href=&quot;https://i.stack.imgur.com/UMeKS.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/UMeKS.png&quot; alt=&quot;여기에 이미지 설명 입력&quot; papago-attr-id=&quot;1&quot;&gt;&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Eclipse 3.4.1과 JUnit 4의 테스트 러너에서도 같은 문제가 있었습니다.단일 테스트를 실행할 수 없었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 다른 곳에서 문제를 해결할 수 있는 제안을 찾았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 시험 수업은 여전히 junit.framework를 연장하고 있었다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트 케이스&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Test Case의 연장을 정지했을 때, 모든 것이 정상적으로 동작해, JUnit 4 테스트 러너로 싱글 JUnit 테스트를 실행할 수 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 JUnit 4 주석에서는 아사트 메서드를 위해 정적 Import를 사용해야 했지만 이미 실행했습니다. Test Case 상속을 삭제한 것은 아닙니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 개의 파일에 여러 개의 테스트가 있으며 특정 파일의 테스트만 실행하는 경우 해당 파일을 오른쪽 클릭하여 [Run as -&amp;gt; junit test]를 선택합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 테스트가 있는 파일에 포함된 하나의 테스트만 실행하려면 아웃라인 뷰에 파일의 모든 테스트 방법이 나열되고 단일 테스트 방법을 마우스 오른쪽 버튼으로 클릭하여 JUNit 테스트로 실행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 됐으면 좋겠다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전 릴리스에서는 동작했지만, 이클립스 3.4.2에서는 동작하지 않습니다(패키지 탐색기에서 단일 메서드를 실행하고 junit 뷰에서 단일 junit 테스트를 실행해 보았습니다).&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;3.4.2는 이전 버전에서와 같이 작동하지 않는다는 점에 동의합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JUnit 보기에서 테스트 그룹의 단일 테스트를 마우스 오른쪽 버튼으로 클릭하고 해당 테스트만 실행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;최신 버전에서는 항상 모든 것을 실행하도록 요구됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 이 보기에서는 먼저 클릭한 테스트를 실행하고 나머지는 &quot;Unrooted Tests&quot;라는 롤업으로 덤프합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 누가 이걸 알아내면 어떻게 해야 하는지 알고 싶어요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코멘트를 몇 개 읽어 보면, 작업중의 코드에 초점을 두지 않고, 변경시에 변경하는 코드에 대해서 테스트를 실행하는 것에 흥미가 있는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이클립스 플러그인이 있어요&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;'&lt;a href=&quot;http://infinitest.github.io/&quot; rel=&quot;nofollow&quot; papago-id=&quot;45-1&quot;&gt;무한&lt;/a&gt;' 참조.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트에서 단일 테스트 방법을 의미하는 경우 키 바인딩을 사용하여 &quot;&lt;strong papago-id=&quot;46-1&quot;&gt;선택된 &lt;/strong&gt;멤버의 &lt;strong papago-id=&quot;46-1&quot;&gt;테스트 실행&quot;&lt;/strong&gt;을 사용합니다&lt;strong papago-id=&quot;46-1&quot;&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트 메서드 내에 있는 경우 해당 테스트 메서드만 실행됩니다.클래스 범위에 커서가 있으면 클래스 전체가 실행됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;디폴트 바인딩을 Ctrl+r처럼 사용하기 쉬운 것으로 변경했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래를 참조해 주세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QZkWE.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QZkWE.png&quot; alt=&quot;Eclipse 기본 설정 → 일반 → 키&quot; papago-attr-id=&quot;2&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(키 엔트리가 표시되지 않으면 &lt;a href=&quot;https://marketplace.eclipse.org/content/moreunit&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;49-1&quot;&gt;MoreUnit&lt;/a&gt; 플러그인에서 가져올 수 있습니다.어쨌든 이 플러그인은 훌륭합니다.필요할 수도 있습니다.)&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/646307/&lt;a href=&quot;https://stackoverflow.com/questions/646307/running-a-single-junit-test-in-eclipse&quot; target=&quot;_blank&quot; papago-id=&quot;50-1&quot;&gt;running-a-single-junit-test-in-eclipse&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Eclipse</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/849</guid>
      <comments>https://gigabyte.tistory.com/849#entry849comment</comments>
      <pubDate>Mon, 24 Apr 2023 23:25:14 +0900</pubDate>
    </item>
    <item>
      <title>bash에서 2개 이상의 어레이를 동시에 반복합니다.</title>
      <link>https://gigabyte.tistory.com/848</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;bash에서 2개 이상의 어레이를 동시에 반복합니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2개의 어레이가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;array=(
  Vietnam
  Germany
  Argentina
)
array2=(
  Asia
  Europe
  America
)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 두 어레이를 동시에 루프합니다.즉, 두 어레이의 첫 번째 요소에서 명령을 호출하고 두 번째 요소에서 동일한 명령을 호출하는 등의 작업을 수행합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;유사 코드:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for c in ${array[*]}
do
  echo -e &quot; $c is in ......&quot;
done
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거 어떻게 해?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니샨의 대답과 그 코멘트를 통해 우리는 당신이 무엇을 원하는지 알 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 같은 것을 &lt;em papago-id=&quot;0-1&quot;&gt;bashier&lt;/em&gt; 스타일로 나타냅니다.for loop을 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.gnu.org/software/bash/manual/bashref.html#Looping-Constructs&quot; papago-id=&quot;0-3&quot; rel=&quot;noreferrer&quot;&gt;참조&lt;/a&gt; 매뉴얼의 &quot;&lt;a href=&quot;http://www.gnu.org/software/bash/manual/bashref.html#Looping-Constructs&quot; papago-id=&quot;0-3&quot; rel=&quot;noreferrer&quot;&gt;&lt;em papago-id=&quot;0-3-0&quot;&gt;루핑&lt;/em&gt;&lt;/a&gt; &lt;a href=&quot;http://www.gnu.org/software/bash/manual/bashref.html#Looping-Constructs&quot; papago-id=&quot;0-3&quot; rel=&quot;noreferrer&quot;&gt;구성&lt;/a&gt;&quot; 섹션을 &lt;a href=&quot;http://www.gnu.org/software/bash/manual/bashref.html#Looping-Constructs&quot; papago-id=&quot;0-3&quot; rel=&quot;noreferrer&quot;&gt;참조&lt;/a&gt;하십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 쓰고 있어요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;printf&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신&lt;/font&gt;&lt;/font&gt;&lt;code&gt;echo&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#!/bin/bash

array=( &quot;Vietnam&quot; &quot;Germany&quot; &quot;Argentina&quot; )
array2=( &quot;Asia&quot; &quot;Europe&quot; &quot;America&quot; )

for i in &quot;${!array[@]}&quot;; do
    printf &quot;%s is in %s\n&quot; &quot;${array[i]}&quot; &quot;${array2[i]}&quot;
done
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 방법으로는 다음과 같은 연관 배열을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#!/bin/bash

declare -A continent

continent[Vietnam]=Asia
continent[Germany]=Europe
continent[Argentina]=America

for c in &quot;${!continent[@]}&quot;; do
    printf &quot;%s is in %s\n&quot; &quot;$c&quot; &quot;${continent[$c]}&quot;
done
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하고 싶은 일에 따라서는, 이 두 번째 가능성을 고려해 보는 것이 좋다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;단, 두 번째 가능성에서는 필드가 표시되는 순서를 쉽게 제어할 수 없습니다(연관 배열이므로 별로 놀랄 일도 아닙니다).&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 배열이 올바르게 정렬되어 있는 경우 인덱스를 돌립니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;array=(
  Vietnam
  Germany
  Argentina
)
array2=(
  Asia
  Europe
  America
)

for index in ${!array[*]}; do 
  echo &quot;${array[$index]} is in ${array2[$index]}&quot;
done

Vietnam is in Asia
Germany is in Europe
Argentina is in America
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어레이 및 어레이에 대한 루프오버가 필요2&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;i=0
while [ $i -lt ${#array[*]} ]; do
    echo ${array[$i]} is in ${array2[$i]}
    i=$(( $i + 1));
done

Vietnam is in Asia
Germany is in Europe
Argentina is in America
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;3-0&quot;&gt;편집:&lt;/strong&gt; 다음 항목을 사용하지 마십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tr&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도입에 근거하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;공백이 포함된 배열 요소에는 작동하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;코멘트가 관련성을 유지하기 위해 삭제하지 않는다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 답변 대신 글렌 잭맨의 코멘트를 참조하십시오.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;/편집&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 루프 없이 다음 옵션을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;paste &amp;lt;(tr ' ' '\n' &amp;lt;&amp;lt;&amp;lt; ${array[*]}) &amp;lt;(tr ' ' '\n' &amp;lt;&amp;lt;&amp;lt; ${array2[*]}) | sed 's/\t/ is in /'
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특히 질문의 경우 (3개의 아이템으로 배열)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for i in $(seq 0 2) ; do
  echo &quot;${array1[$i]} is in ${array2[$i]}&quot;
done
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 개의 변수가 여러 줄을 가진 두 개의 문자열인 경우 다음과 같이 하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;listA=$(echo -e &quot;Vietnam\nGermany\nArgentina&quot;)
listB=$(echo -e &quot;Asia\nEurope\nAmerica&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우의 해결 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;while read strA &amp;lt;&amp;amp;3 &amp;amp;&amp;amp; read strB &amp;lt;&amp;amp;4; do
   echo &quot;$strA is in $strB&quot;
done 3&amp;lt;&amp;lt;&amp;lt;&quot;$listA&quot; 4&amp;lt;&amp;lt;&amp;lt;&quot;$listB&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 두 가지 이유로 이 답을 여기에 추가한다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저, imo false taged duplicate(&lt;a href=&quot;https://stackoverflow.com/questions/28725333/looping-over-pairs-of-values-in-bash/61367055&quot; papago-id=&quot;5-1&quot;&gt;bash&lt;/a&gt;의 값 쌍 &lt;a href=&quot;https://stackoverflow.com/questions/28725333/looping-over-pairs-of-values-in-bash/61367055&quot; papago-id=&quot;5-1&quot;&gt;위에 루프)&lt;/a&gt;가 여기에 표시됩니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;둘째, 시나리오는 약간 다르지만 이 답변은 주제에 대한 귀중한 지식을 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문에서는 2개의 어레이가 반복됩니다.복제된 어레이에서는 연결된 값에 대해 중첩된 반복이 존재하므로 값 쌍에 대해 반복됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 값 쌍의 배열에서 값 쌍에 대한 반복입니다. 도움이 되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;PAIRS=(&quot;Vietnam Asia&quot; \
&quot;Germany Europe&quot; \
&quot;Argentina America&quot;)

for pair in &quot;${PAIRS[@]}&quot;
do
set -- $pair
echo &quot;$1 is in $2&quot;
done
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주의:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;set -- e&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들면...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 첫 번째 반복에 대한 첫 번째 및 두 번째 매개 변수로서 베트남과 아시아가 사용됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/17403498/&lt;a href=&quot;https://stackoverflow.com/questions/17403498/iterate-over-two-arrays-simultaneously-in-bash&quot; target=&quot;_blank&quot; papago-id=&quot;24-1&quot;&gt;iterate-over-two-arrays-simultaneously-in-bash&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>bash</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/848</guid>
      <comments>https://gigabyte.tistory.com/848#entry848comment</comments>
      <pubDate>Wed, 19 Apr 2023 23:09:34 +0900</pubDate>
    </item>
    <item>
      <title>브랜치에서 커밋을 삭제하려면 어떻게 해야 합니까?</title>
      <link>https://gigabyte.tistory.com/847</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;브랜치에서 커밋을 삭제하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지점 이력에서 커밋을 삭제하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git reset --hard HEAD&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splited&quot;&gt;&lt;strong papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;★★★★&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt; &lt;code&gt;git reset --hard&lt;/code&gt; &lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;4-0&quot;&gt;작업 디렉토리의 변경&lt;/em&gt;이 삭제됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 명령을 실행하기 전에 유지할 &lt;strong papago-id=&quot;4-2&quot;&gt;로컬 변경 내용을 저장&lt;/strong&gt;하십시오.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 그 커밋에 앉아 있다고 가정한다면, 이 명령어는 그것을 망칠 것이다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git reset --hard HEAD~1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;HEAD~1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;머리 앞의 커밋을 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'보다 낫다'의 볼 수 있어요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git log&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;백업할 커밋의 커밋 ID를 찾은 후 다음을 수행합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git reset --hard &amp;lt;sha1-commit-id&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미 밀었다면 힘껏 밀어야 없앨 수 있어...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git push origin HEAD --force
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;11-0&quot;&gt;그러나&lt;/strong&gt; 다른 사용자가 꺼낸 경우 새 분기를 시작하는 것이 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜냐하면 그들이 끌어당기면, 그것은 단지 그들의 일에 합쳐질 것이고, 당신은 그것을 다시 밀어 올릴 수 있기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;밀었다면,  밀다를 하는 것이  수도 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git revert&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변경을 원래대로 되돌리는 「미러 이미지」커밋을 작성합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하다, 하다, 하다, 양양양 로로다다 만기 만기다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로 -- 고로 --&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git reset --hard HEAD&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;진행 중인 작업을 없애고 싶다면 좋습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 최신 커밋으로 리셋되고 작업 트리 및 인덱스의 모든 변경 내용이 지워집니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'한  할  '삭제 '삭제', '삭제', '삭제'한 커밋이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git reflog&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가비지가 수집되지 않은 경우.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;커밋을 아직 푸시하지 않은 경우 를 사용하여 커밋을 삭제할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;우선, 그 커밋이 얼마나 오래 전(약)인지 확인합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 다음 작업을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git rebase -i HEAD~N
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;~N&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 기본 하는 것을 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;N&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;commits)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;N&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 숫자여야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;HEAD~10&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 Git이 제공하는 파일을 편집하여 문제의 커밋을 삭제할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 파일을 저장하면 Git은 삭제한 커밋이 존재하지 않는 것처럼 다음 커밋을 모두 고쳐 씁니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Git Book에는 사진과 예시로 &lt;a href=&quot;http://git-scm.com/book/en/Git-Branching-Rebasing&quot; rel=&quot;noreferrer&quot; papago-id=&quot;24-1&quot;&gt;재기입하는 좋은 섹션&lt;/a&gt;이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;25-1&quot;&gt;단&lt;/em&gt;, 다른 곳에서 밀었던 것을 변경할 경우 강제 밀기를 계획하지 않는 한 다른 접근법이 필요하므로 주의해 주십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또 다른 방법은 제가 개인적으로 좋아하는 명령어 중 하나입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git rebase -i &amp;lt;commit&amp;gt;~1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-i&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 사용법&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 이후 편집자는 모든 커밋을 나열하기 시작합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;삭제할 커밋이 포함된 행을 삭제하고 파일을 저장합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본 재배치 작업은 나머지 작업을 수행하고 해당 커밋만 삭제한 후 다른 모든 작업을 다시 로그로 재생합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Git 사용 실수로 인해 작업을 커밋한 사람이 왜 모든 작업을 삭제하려고 하는지 알 수 없어서 이 답변을 첨부합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작업을 유지하고 commit 명령어(repo를 푸시하기 전에 포착한 명령어)를 'undo'하고 싶은 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git reset --soft HEAD~1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;31-0&quot;&gt;마지막&lt;/strong&gt; 커밋 이후 진행 중인 작업을 파기하지 않는 한 &lt;strong papago-id=&quot;31-0&quot;&gt;--hard&lt;/strong&gt; 플래그를 &lt;strong papago-id=&quot;31-0&quot;&gt;사용하지 마십시오&lt;/strong&gt;.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;커밋 전체의 삭제&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git rebase -p --onto SHA^ SHA
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;삭제할 참조로 &quot;SHA&quot;를 바꿉니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 명령어의 &quot;^&quot;는 리터럴입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://sethrobertson.github.io/GitFixUm/fixup.html#change_deep&quot; rel=&quot;noreferrer&quot; papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://sethrobertson.github.io/GitFixUm/fixup.html#change_deep&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;repo에서 commit 2 &amp;amp; 4를 삭제하고 싶다고 합시다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(새로운 커밋의 수가 클수록 커밋은 0이 가장 오래된 커밋이고 4가 최신 커밋입니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;commit 0 : b3d92c5
commit 1 : 2c6a45b
commit 2 : &amp;lt;any_hash&amp;gt;
commit 3 : 77b9b82
commit 4 : &amp;lt;any_hash&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주의: &lt;strong papago-id=&quot;36-1&quot;&gt;사용&lt;/strong&gt; 중이므로 &lt;strong papago-id=&quot;36-1&quot;&gt;repo에 대한 관리자 권한이 있어야 합니다&lt;/strong&gt;.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--hard&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★★★★★★★★★★★★★★★」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-f&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;git checkout b3d92c5&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막으로 사용 가능한 커밋을 체크합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;git checkout -b repair&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이치노&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;git cherry-pick 77b9b82&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;3번입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;git cherry-pick 2c6a45b&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1번입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;git checkout master&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;체크아웃 마스터&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;git reset --hard b3d92c5&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마스터를 사용 가능한 마지막 커밋으로 리셋합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;git merge repair&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이치노&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;git push -f origin master&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이치노&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;pre&gt;&lt;code&gt;git rebase -i HEAD~2
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 '2'는 기본 설정을 변경할 커밋 수입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;'git rebase -i HEAD`
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 커밋을 기본 재배치하는 경우.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 다음 옵션 중 하나를 선택할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;p, pick = use commit&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;r, reword = use commit, but edit the commit message
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code&gt;e, edit = use commit, but stop for amending
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code&gt;s, squash = use commit, but meld into previous commit
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code&gt;f, fixup = like &quot;squash&quot;, but discard this commit's log message
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code&gt;x, exec = run command (the rest of the line) using shell
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code&gt;d, drop = remove commit
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 행은 순서를 변경할 수 있으며 위에서 아래로 실행됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 한 줄을 삭제하면 그 약속은 사라집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 모든 항목을 제거하면 기본 재설정이 중단됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;빈 커밋은 코멘트 아웃됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 커밋은 옵션 &quot;d&quot; 또는 커밋이 있는 행 삭제 옵션을 사용하여 간단히 삭제할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;#[빠른 답변]&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 여러 가지 대안이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;strong papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대안 1:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt; git rebase -i &amp;lt;YourCommitId&amp;gt;~1
&lt;/code&gt;&lt;/pre&gt; 
  &lt;blockquote&gt; 
   &lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원래대로 되돌릴 커밋 수에 대한 YourCommitId를 변경합니다.&lt;/font&gt;&lt;/p&gt; 
  &lt;/blockquote&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;strong papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대안 2:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt; git reset --hard YourCommitId
 git push &amp;lt;origin&amp;gt; &amp;lt;branch&amp;gt; --force
&lt;/code&gt;&lt;/pre&gt; 
  &lt;blockquote&gt; 
   &lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원래대로 되돌릴 커밋 수에 대한 YourCommitId를 변경합니다.&lt;/font&gt;&lt;/p&gt; 
  &lt;/blockquote&gt; 
  &lt;blockquote&gt; 
   &lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;진행 중인 작업이 손실될 수 있으므로 이 옵션은 권장하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
  &lt;/blockquote&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;strong papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대안 3:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt; git reset --soft HEAD~1
&lt;/code&gt;&lt;/pre&gt; 
  &lt;blockquote&gt; 
   &lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;커밋을 실행 취소하기만 하면 작업을 계속할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
  &lt;/blockquote&gt; &lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변경 내용을 공개하지 않은 경우 최신 커밋을 삭제하려면 다음 작업을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ git reset --hard HEAD^
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(커밋되지 않은 변경도 모두 삭제되므로 주의하여 사용하십시오).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;삭제할 커밋을 이미 게시한 경우 &lt;a href=&quot;http://www.kernel.org/pub/software/scm/git/docs/git-revert.html&quot; papago-id=&quot;63-1&quot; rel=&quot;noreferrer&quot; title=&quot;git-revert - 기존 커밋을 되돌립니다.&quot; papago-attr-id=&quot;6&quot;&gt;git&lt;/a&gt; revert를 &lt;a href=&quot;http://www.kernel.org/pub/software/scm/git/docs/git-revert.html&quot; papago-id=&quot;63-1&quot; rel=&quot;noreferrer&quot; title=&quot;git-revert - 기존 커밋을 되돌립니다.&quot; papago-attr-id=&quot;7&quot;&gt;사용&lt;/a&gt;합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ git revert HEAD
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이력 강제 변경&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막 커밋을 삭제할 뿐만 아니라 마지막 n개의 커밋의 특정 커밋을 삭제할 경우 다음 절차를 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;git rebase -i HEAD~&amp;lt;number of commits to go back&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, (그래서)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git rebase -i HEAD~5&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;5번&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 다음 에서 '먹다'를 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pick&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로로 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;drop&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이치&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이치노&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일!!&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가 변경 이력&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;★★를 해 보세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git revert &amp;lt;commit hash&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. Revert는 지정된 커밋을 취소하는 &lt;em papago-id=&quot;38-3&quot;&gt;새로운&lt;/em&gt; 커밋을 &lt;a href=&quot;https://www.atlassian.com/git/tutorials/undoing-changes/git-revert&quot; rel=&quot;noreferrer&quot; papago-id=&quot;38-1&quot;&gt;만듭니다&lt;/a&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;git reset --hard commitId

git push &amp;lt;origin&amp;gt; &amp;lt;branch&amp;gt; --force
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PS: CommitId는 원래대로 되돌리는 것을 말합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최신 커밋을 수정하려면 다음 작업을 수행하여 커밋을 취소하고 해당 커밋 내의 파일을 분할 해제할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git reset HEAD~1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 파일을 스테이징한 git add 명령어 이전의 상태로 저장소를 되돌립니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;변경 내용은 작업 디렉토리에 저장됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;HEAD~1은 브랜치의 현재 팁 아래에 있는 커밋을 나타냅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;77&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;N 커밋을 해제하고 작업 디렉토리에 코드 변경을 보관하는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git reset HEAD~N
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;78&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최신 커밋을 삭제하고 코드 변경을 유지하고 싶지 않은 경우 &quot;하드&quot; 리셋을 실행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git reset --hard HEAD~1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;79&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마찬가지로 마지막 N개의 커밋을 폐기하고 코드 변경을 유지하지 않을 경우 다음 절차를 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git reset --hard HEAD~N
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;80&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로컬 브랜치에서 삭제하려면&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git reset --hard HEAD~1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;81&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원격 분기에서 삭제하려면&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git push origin HEAD --force
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;82&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 실행 중인 커밋을 삭제하지만 데이터를 삭제하지 않으려면 다음과 같이 하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git reset --soft HEAD~1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;83&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 실행 중인 커밋을 삭제하고 관련 데이터를 삭제하려는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git reset --hard HEAD~1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;84&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추신: 이러한 명령어는 로컬 커밋만 삭제합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;85&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출처 : https://gist.github.com/sagarjethi/&lt;a href=&quot;https://gist.github.com/sagarjethi/c07723b2f4fa74ad8bdf229166cf79d8&quot; rel=&quot;noreferrer&quot; papago-id=&quot;85-1&quot;&gt;c07723b2f4fa74ad8bdf229166cf79d8&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;86&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막 커밋 삭제&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;87&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 마지막 커밋은&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt; 
&lt;p papago-id=&quot;88&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;git 푸시 오리진 +aa61ab32^: 마스터&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;89&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 커밋을 삭제하고 나서, 다음의 간단한 방법으로 간단하게 이 커밋을 삭제할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;90&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;순서&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;91&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 브런치를 현재 커밋의 부모로 리셋합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;92&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리모콘에 강제로 밀어 넣습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;pre&gt;&lt;code&gt;git reset HEAD^ --hard

git push origin -f
&lt;/code&gt;&lt;/pre&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;93&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정 커밋에 대해 리셋하는 것은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git reset bb676878^ --hard

git push origin -f
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;39-1&quot;&gt;인텔리J&lt;/strong&gt; 유저라면, 인터페이스는 훌륭합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;클릭 한 &lt;strong papago-id=&quot;39-3&quot;&gt;번&lt;/strong&gt;으로 효과를 동시에 확인할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 플레이스의 바로 가기:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Cmd + 9&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MacOS mac mac mac mac mac mac mac mac mac mac&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/qUdqU.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/qUdqU.png&quot; alt=&quot;여기에 이미지 설명 입력&quot; papago-attr-id=&quot;2&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;96&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 위해 하나의 명확한 파이프라인을 게시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;97&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스텝 1: git 로그를 사용하여 커밋 ID를 가져옵니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git log
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ndzyE.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ndzyE.png&quot; alt=&quot;여기에 이미지 설명 입력&quot; papago-attr-id=&quot;3&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;98&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2단계: git reset을 사용하여 이전 버전으로 돌아갑니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git reset --hard &amp;lt;your commit id&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;99&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 모든 명령어는 커밋 전 상태로 워크 트리 및 인덱스의 상태를 복원하지만 저장소 상태는 복원하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 보면, 「삭제된」커밋은 실제로 삭제되지 않고, 현재의 브랜치 끝에 있는 커밋이 아닙니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://git-scm.com/book/ch9-1.html&quot; papago-id=&quot;41-1&quot;&gt;자기 명령&lt;/a&gt;으로 커밋을 제거할 방법은 없다고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;유일한 방법은 로그에서 삭제하고 다시 로그를 작성한 후&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git prune --expire -now&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;102&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;커밋과 복귀를 표시하여 이력을 유지하려면 다음 명령을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git revert GIT_COMMIT_HASH
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;103&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;되돌리는 이유를 설명하는 메시지를 입력한 후 다음을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git push  
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 할 때&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git log&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot; 및 &quot;&quot; 메시지가 모두 됩니다. &quot;commit&quot; 、 &quot;commit&quot; 、 &quot;commit&quot; 、 &quot;commit&quot; 、 &quot;commit&quot; 、 &quot;commit&quot; 、 &quot;commit&quot; 、 &quot;commit&quot; you 、 &quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;106&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;107&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;되돌리는 브랜치를 체크 아웃 한 후 로컬 작업 복사를 리모트서버의 최신 커밋으로 리셋 합니다(그 후의 모든 것은 bye-bye).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 위해 SourceTree에서 를 오른쪽 클릭하여 [Reset BRANCHNAME to this commit]를 선택합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령행은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git reset --hard COMMIT_ID
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;108&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리모트로부터 지점을 체크 아웃 한 지 얼마 되지 않았기 때문에, 로컬의 변경은 불필요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 만약 그렇게 한다면 그들을 잃게 될 거야&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;109&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 리포지토리의 로컬 디렉터리로 이동하고 다음 명령을 실행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git -c diff.mnemonicprefix=false -c core.quotepath=false \
push -v -f --tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;110&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 로컬 저장소의 현재 커밋 뒤에 있는 커밋이 모두 지워지고 해당 브랜치만 지워집니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;111&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실수:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splited&quot;&gt;I &lt;/font&gt;&lt;code&gt;git rebase -i --root&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;브랜치에서는 마스터와는 다른 첫 번째 커밋을 다시 쓸 수 있다고 생각하고 있었습니다(&lt;em papago-id=&quot;45-1&quot;&gt;GitHub&lt;/em&gt; for &lt;em papago-id=&quot;45-1&quot;&gt;Windows&lt;/em&gt;의 디폴트 뷰는 마스터와 비교하여 전체를 숨길 수 있습니다).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;113&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;900개 이상의 커밋이 Sublime에 로딩되는 동안 실리콘 밸리 수염을 길렀습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;900명 이상의 모든 사람이 태연하게 재기동하여 지금까지의 커밋 시간을 리셋하고 있기 때문에, 저는 배터리를 충전하고 면도를 진행했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;114&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Git를 누르고 원래 시간을 유지하기로 결심하고 이 로컬 저장소를 삭제하고 리모트에서 다시 복제했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;115&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;삭제하려고 했던 마스터에 최근 불필요한 커밋을 다시 추가했기 때문에 이렇게 진행되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;116&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 옵션 사용:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 싶지 않았다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git revert&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 커밋을 에 둘 수  - Git을 우위에 둘 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;git reset --hard HEAD&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;reflog&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이자 유일한 「」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;HEAD&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;50&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 - Git - 다습다다 다다다다 다다다 。&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;122&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최신 SHA를 얻기 위해 github.com에서 원격 저장소를 확인했습니다.- 마이너 승소입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;51&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해 보니 ★★★★★★★★★★★★★★★★★.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git reset --hard &amp;lt;SHA&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;52&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1... 2...&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;이 이겼다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;커밋이 돌아왔습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 기트&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;53&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 시용 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git rebase -i &amp;lt;SHA&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;54&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 그 후 라인을 삭제합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아쉽지만 소용이 없었어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;&lt;em papago-id=&quot;54-1&quot;&gt;여기&lt;/em&gt;서 한 &lt;em papago-id=&quot;54-1&quot;&gt;줄을 삭제하면 &lt;/em&gt;그&lt;em papago-id=&quot;54-1&quot;&gt; 커밋&lt;/em&gt;은 사라집니다.&quot; 아...&lt;a href=&quot;https://www.dropbox.com/s/swukg8jqui0wc69/2.8.3.txt&quot; papago-id=&quot;54-5&quot; rel=&quot;noreferrer&quot;&gt; 2.8.&lt;/a&gt;3&lt;a href=&quot;https://www.dropbox.com/s/swukg8jqui0wc69/2.8.3.txt&quot; papago-id=&quot;54-5&quot; rel=&quot;noreferrer&quot;&gt; 릴리즈&lt;/a&gt; 노트의 &lt;em papago-id=&quot;54-3&quot;&gt;n00b&lt;/em&gt;에 &lt;em papago-id=&quot;54-1&quot;&gt;새로운&lt;/em&gt; &lt;em papago-id=&quot;54-3&quot;&gt;기능을 트롤링합니다&lt;/em&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;127&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해결 방법:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;git rebase -i &amp;lt;SHA&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;55&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;d, drop = remove commit&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;56&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;130&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;확인을 위해 다른 지점에 체크 아웃을 했는데 voila - 마스터에서 가져오기/풀링에 대한 숨김 커밋이 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://twitter.com/holman/status/706006896273063936&quot; rel=&quot;noreferrer&quot; papago-id=&quot;131&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://twitter.com/holman/status/706006896273063936&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;132&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좋은 하루 되세요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;133&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막 커밋을 망친 경우(잘못된 메시지, 일부 변경사항 추가를 잊어버린 경우)를 퍼블릭리포에 푸시하기 전에 수정해야 하는 경우 다음을 사용하지 않을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git commit --amend -m &quot;New message here&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;134&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새롭게 스테이징된 변경이 있는 경우, 변경은 (삭제하려고 하는) 마지막 커밋과 결합되어 그 커밋을 대체하게 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;135&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 커밋을 푸시한 후 수정하면 히스토리를 다시 쓰는 것이므로 이 커밋을 실행하면 그 의미를 이해할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;136&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전 커밋 메시지를 사용하고 싶은 경우 '-m' 대신 '--no-edit' 옵션을 전달할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;137&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문서: http://git-scm.com/docs/&lt;a href=&quot;http://git-scm.com/docs/git-commit.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;137-1&quot;&gt;git-commit&lt;/a&gt;.html&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;138&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미 푸시한 경우 먼저 HEAD&lt;em papago-id=&quot;138-1&quot;&gt;($&lt;/em&gt;GIT_COMMIT_HASH_HERE&lt;em papago-id=&quot;138-1&quot;&gt;)&lt;/em&gt;에서 원하는 커밋을 찾은 후 다음을 실행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git reset --hard $GIT_COMMIT_HASH_HERE
git push origin HEAD --force
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;139&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 repo가 복제된 각 위치에서 다음을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git reset --hard origin/master
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;140&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;커밋 및 푸시 시 보통 수행하는 작업(커밋을 푸시한 사람이 있는 경우 문제 해결):&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git reset --hard HEAD~1

git push -f origin
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;141&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 도움이 되기를 바란다&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;git reset --hard HEAD~1&lt;/code&gt; &lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;57&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 이제 이전의 우두머리에 있게 될 것이다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;뭇뭇나&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 사용하다&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;143&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로컬 브랜치로 리셋&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git reset --hard HEAD~&amp;lt;Number of commit&amp;gt; So git reset --hard HEAD~3
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;144&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원점으로 강제 푸시&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git push -f origin
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;145&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 이미 밀었다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부 커밋을 원격으로 반환해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;많은 변형을 시도했지만, Git Bush를 통해 Justin이 &lt;a href=&quot;https://stackoverflow.com/users/425964/justin&quot; papago-id=&quot;145-3&quot;&gt;제공&lt;/a&gt;하는 &lt;a href=&quot;https://stackoverflow.com/a/41927515/6352712&quot; papago-id=&quot;145-1&quot;&gt;이것&lt;/a&gt;만 잘 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git reset --hard $GIT_COMMIT_HASH_HERE
git push origin HEAD --force
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;// display git commit log    
$ git log --pretty=oneline --abbrev-commit

// show last two commit and open in your default editor
// then delete second commit line and save it
$ git rebase -i HEAD~2
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;146&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;레퍼런스:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://ncona.com/2011/07/how-to-delete-a-commit-in-git-local-and-remote/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;146-1&quot;&gt;git, local 및 remote에서 커밋을 삭제하는 방법&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;147&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;임시 폴더로 코드 백업을 가져옵니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 명령어는 서버와 동일하게 리셋됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git reset --hard HEAD
git clean -f
git pull
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;148&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변경을 유지하고 최근 커밋을 삭제할 경우&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git reset --soft HEAD^
git pull
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ilul5.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ilul5.png&quot; alt=&quot;삭제, 로컬 커밋&quot; papago-attr-id=&quot;4&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;58&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 이미지와 같이 revert&quot;test change 2&quot; commit (SHA1 ID: &lt;strong papago-id=&quot;58-1&quot;&gt;015b5220c50e3dfbb1063f23789de92ae1d3481a2&lt;/strong&gt;)를 삭제하고 싶습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gitk&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;59&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령어)를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;151&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 때문에, (아래의 모든 커맨드는 로컬에서만 동작합니다)를 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;삭제 후 푸시 필요):&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;code&gt;git reset --hard 515b5220c50e3dfbb1063f23789d92ae1d3481a2&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;60&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;//그 커밋을 백업합니다(&lt;strong papago-id=&quot;60-1&quot;&gt;테스트 변경&lt;/strong&gt; 4 &lt;strong papago-id=&quot;60-1&quot;&gt;커밋&lt;/strong&gt;의 SHA1 ID는 &lt;strong papago-id=&quot;60-3&quot;&gt;515b5220c50e3dfbb1063f23789ae1d3481a2&lt;/strong&gt;).&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;git reset --hard HEAD~1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;61&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;// 한번 커밋하기 합니다.// 한 번 더 커밋하기 전에 백업합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;git reset --hard HEAD^&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;62&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 git//git에서 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;155&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;삭제 후:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/aEPtg.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/aEPtg.png&quot; alt=&quot;삭제 커밋 후&quot; papago-attr-id=&quot;5&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;156&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/1338728/&lt;a href=&quot;https://stackoverflow.com/questions/1338728/how-do-i-delete-a-commit-from-a-branch&quot; target=&quot;_blank&quot; papago-id=&quot;156-1&quot;&gt;how-do-i-delete-a-commit-from-a-branch&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>GIT</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/847</guid>
      <comments>https://gigabyte.tistory.com/847#entry847comment</comments>
      <pubDate>Wed, 19 Apr 2023 23:09:26 +0900</pubDate>
    </item>
    <item>
      <title>부호화를 수동으로 지정하지 않고 C# 내의 문자열을 일관된 바이트 형식으로 표시하려면 어떻게 해야 합니까?</title>
      <link>https://gigabyte.tistory.com/846</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부호화를 수동으로 지정하지 않고 C# 내의 문자열을 일관된 바이트 형식으로 표시하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;「」를  해야 ?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;string&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; a까지&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;byte[]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;「 」 「 」 。 &quot; 。&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET(C#)는?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스트링을 암호화합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;변환하지 않고 암호화할 수 있지만, 여기서 인코딩이 재생되는 이유를 알고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또, 부호화가 고려되어야 하는 이유는 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열이 저장되어 있는 바이트를 간단하게 얻을 수 없습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자 인코딩에 의존하는 이유는 무엇입니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 답변과는 달리 바이트를 해석할 필요가 없다면 &lt;em papago-id=&quot;6-1&quot;&gt;&lt;strong papago-id=&quot;6-1-0&quot;&gt;인코딩&lt;/strong&gt;&lt;/em&gt;에 대해 걱정할 필요가 없습니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;말씀하신 것처럼 단순히 &quot;&lt;em papago-id=&quot;7-1&quot;&gt;문자열이 저장된 바이트를 얻는&lt;/em&gt; 것&lt;em papago-id=&quot;7-1&quot;&gt;&quot;&lt;/em&gt;이 목표입니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(물론 바이트에서 문자열을 재구성할 수 있습니다.)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 목표를 위해 왜 사람들이 계속 당신에게 암호화가 필요하다고 말하는지 솔직히 &lt;em papago-id=&quot;9-1&quot;&gt;이해&lt;/em&gt;할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 이것에 대한 인코딩에 대해 걱정할 필요가 없습니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 다음 작업을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;static byte[] GetBytes(string str)
{
    byte[] bytes = new byte[str.Length * sizeof(char)];
    System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
    return bytes;
}

// Do NOT use on arbitrary bytes; only use on GetBytes's output on the SAME system
static string GetString(byte[] bytes)
{
    char[] chars = new char[bytes.Length / sizeof(char)];
    System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length);
    return new string(chars);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하고 있는 프로그램(또는 다른 프로그램)이 바이트를 &lt;em papago-id=&quot;11-1&quot;&gt;해석&lt;/em&gt;하려고 하지 않는 한(분명히 의도하고 있다고는 말하지 않았지만) 이 방법에는 &lt;strong papago-id=&quot;11-3&quot;&gt;문제&lt;/strong&gt;가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;암호화에 대해 걱정하는 것은 진짜 이유 없이 당신의 삶을 더 복잡하게 만들 뿐이다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 접근방식의 기타 이점:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열에 잘못된 문자가 포함되더라도 상관없습니다. 데이터를 가져오고 원래 문자열을 재구성할 수 있기 때문입니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;13-1&quot;&gt;바이트만 보고 있기&lt;/em&gt; 때문에 똑같이 부호화 및 디코딩됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다만, 특정의 인코딩을 사용하고 있는 경우는, 무효인 문자를 인코딩/복호화하는 문제가 발생합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은, 문자열(&lt;a href=&quot;http://en.wikipedia.org/wiki/UTF-8&quot; rel=&quot;noreferrer&quot; papago-id=&quot;15-3&quot;&gt;ASCII&lt;/a&gt;, UTF-8, ...)의 부호화에 의해서 다릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;byte[] b1 = System.Text.Encoding.UTF8.GetBytes (myString);
byte[] b2 = System.Text.Encoding.ASCII.GetBytes (myString);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부호화가 중요한 이유는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;string pi = &quot;\u03a0&quot;;
byte[] ascii = System.Text.Encoding.ASCII.GetBytes (pi);
byte[] utf8 = System.Text.Encoding.UTF8.GetBytes (pi);

Console.WriteLine (ascii.Length); //Will print 1
Console.WriteLine (utf8.Length); //Will print 2
Console.WriteLine (System.Text.Encoding.ASCII.GetString (ascii)); //Will print '?'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ASCII는 단순히 특수문자를 다룰 수 있는 장비가 아니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내부적으로는,&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET 프레임워크는 UTF-16을 &lt;a href=&quot;https://en.wikipedia.org/wiki/UTF-16&quot; papago-id=&quot;19-1&quot; rel=&quot;noreferrer&quot;&gt;사용&lt;/a&gt;하여 스트링을 나타냅니다.따라서 단순히 그 바이트를 정확하게 취득할 필요가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET 사용, 사용&lt;/font&gt;&lt;/font&gt;&lt;code&gt;System.Text.Encoding.Unicode.GetBytes (...)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;「 &lt;em papago-id=&quot;21-1&quot;&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms404377.aspx&quot; papago-id=&quot;21-1-0&quot; rel=&quot;noreferrer&quot;&gt;」&lt;/a&gt;&lt;/em&gt;의 「&lt;em papago-id=&quot;21-1&quot;&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms404377.aspx&quot; papago-id=&quot;21-1-0&quot; rel=&quot;noreferrer&quot;&gt;문자 부호화&lt;/a&gt;&lt;/em&gt;」를 참조해 주세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;21-1&quot;&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms404377.aspx&quot; papago-id=&quot;21-1-0&quot; rel=&quot;noreferrer&quot;&gt;자세한&lt;/a&gt;&lt;/em&gt; 것은, &lt;em papago-id=&quot;21-1&quot;&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms404377.aspx&quot; papago-id=&quot;21-1-0&quot; rel=&quot;noreferrer&quot;&gt;NET&lt;/a&gt;&lt;/em&gt; Framework(MSDN)를 참조해 주세요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;받아들여진 답은 매우 복잡하다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;포함을 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이에 대한 NET 클래스:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const string data = &quot;A string with international characters: Norwegian: ÆØÅæøå, Chinese: 喂 谢谢&quot;;
var bytes = System.Text.Encoding.UTF8.GetBytes(data);
var decoded = System.Text.Encoding.UTF8.GetString(bytes);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요 없다면 바퀴를 재발명하지 마...&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;BinaryFormatter bf = new BinaryFormatter();
byte[] bytes;
MemoryStream ms = new MemoryStream();

string orig = &quot;喂 Hello 谢谢 Thank You&quot;;
bf.Serialize(ms, orig);
ms.Seek(0, 0);
bytes = ms.ToArray();

MessageBox.Show(&quot;Original bytes Length: &quot; + bytes.Length.ToString());

MessageBox.Show(&quot;Original string Length: &quot; + orig.Length.ToString());

for (int i = 0; i &amp;lt; bytes.Length; ++i) bytes[i] ^= 168; // pseudo encrypt
for (int i = 0; i &amp;lt; bytes.Length; ++i) bytes[i] ^= 168; // pseudo decrypt

BinaryFormatter bfx = new BinaryFormatter();
MemoryStream msx = new MemoryStream();            
msx.Write(bytes, 0, bytes.Length);
msx.Seek(0, 0);
string sx = (string)bfx.Deserialize(msx);

MessageBox.Show(&quot;Still intact :&quot; + sx);

MessageBox.Show(&quot;Deserialize string Length(still intact): &quot; 
    + sx.Length.ToString());

BinaryFormatter bfy = new BinaryFormatter();
MemoryStream msy = new MemoryStream();
bfy.Serialize(msy, sx);
msy.Seek(0, 0);
byte[] bytesy = msy.ToArray();

MessageBox.Show(&quot;Deserialize bytes Length(still intact): &quot; 
   + bytesy.Length.ToString());
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 인기 있는 질문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;질문 작성자가 무엇을 묻고 있는지, 그리고 그것이 가장 일반적인 요구와는 다르다는 것을 이해하는 것이 중요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;불필요한 코드의 오용을 막기 위해 후자부터 대답했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h1 papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적인 요구&lt;/font&gt;&lt;/h1&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 문자열에는 문자 집합과 인코딩이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;「」를 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;System.String&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로 늘어선 것에 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;System.Byte&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자 집합과 인코딩이 남아 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;28-1&quot;&gt;대부분의 경우 필요한 문자 집합과 인코딩 및 를 알 수 있습니다.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;28-1&quot;&gt;NET을 사용하면, 간단하게 「변환과 함께 카피」할 수 있습니다.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;적절한 것을 선택하기만 하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Encoding&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 누릅니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// using System.Text;
Encoding.UTF8.GetBytes(&quot;.NET String to byte array&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변환에서는 대상 문자 세트 또는 인코딩이 원본에 있는 문자를 지원하지 않는 경우를 처리해야 할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예외, 대체 또는 건너뛰기 중에서 선택할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;디폴트 정책에서는 '?'를 치환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// using System.Text;
var text = Encoding.ASCII.GetString(Encoding.ASCII.GetBytes(&quot;You win €100&quot;)); 
                                                      // -&amp;gt; &quot;You win ?100&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전환이 반드시 무손실인 것은 아닙니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★의 경우:★★&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;System.String&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유니코드&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유일한 혼란스러운 것은 그것이다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET 는, 문자 세트의 이름을, 그 문자 세트의 특정의 부호화의 이름으로 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Encoding.Unicode&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;라고 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Encoding.UTF16&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;37-0&quot;&gt;대부분의 용도는 이것으로 끝입니다.&lt;/em&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;37-0&quot;&gt; 그게 네가 필요한 거라면, 여기서 그만 읽어.&lt;/em&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;인코딩이 무엇인지 모를 경우 &lt;a href=&quot;http://www.joelonsoftware.com/articles/Unicode.html&quot; papago-id=&quot;37-2&quot; rel=&quot;nofollow noreferrer&quot;&gt;재미있는&lt;/a&gt; Joel &lt;a href=&quot;http://www.joelonsoftware.com/articles/Unicode.html&quot; papago-id=&quot;37-2&quot; rel=&quot;nofollow noreferrer&quot;&gt;Spolsky&lt;/a&gt; 기사를 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;h1 papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정 니즈&lt;/font&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 저자의 질문은 다음과 같습니다. &quot;모든 문자열은 바이트 배열로 저장됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜 단순히 그 바이트를 가질 수 없는 거죠?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그는 어떤 전환도 원하지 않는다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.microsoft.com/en-us/download/confirmation.aspx?id=7029&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;41-1&quot;&gt;C# 사양&lt;/a&gt;부터:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C# 의 문자 및 문자열 처리에서는, Unicode 인코딩을 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;char 타입은 UTF-16 코드 유닛을 나타내고 문자열 타입은 UTF-16 코드 유닛의 시퀀스를 나타냅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 늘 변환(UTF-16에서 UTF-16으로)을 요구하면 원하는 결과를 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Encoding.Unicode.GetBytes(&quot;.NET String to byte array&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 암호화에 대한 언급을 피하려면 다른 방법으로 해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;중간 데이터 유형이 허용 가능한 경우 이를 위한 개념적 단축키가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;.NET String to byte array&quot;.ToCharArray()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원하는 데이터 유형을 얻을 수 없지만, &lt;a href=&quot;https://stackoverflow.com/a/10380166/2226988&quot; papago-id=&quot;45-1&quot;&gt;Mehrdad의 답변&lt;/a&gt;에는 BlockCopy를 &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.buffer.blockcopy%28v=vs.110%29.aspx&quot; papago-id=&quot;45-3&quot; rel=&quot;nofollow noreferrer&quot;&gt;사용&lt;/a&gt;하여 이 Char 배열을 바이트 배열로 변환하는 방법이 나와 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이것은 문자열을 두 번 복사합니다!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또, 부호화 고유의 코드(데이터 타입)를 너무 명시적으로 사용하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;System.Char&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;String이 저장되어 있는 실제 바이트에 도달하려면 포인터를 사용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fixed&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하면 valuesstatement의  수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C# 사 c :&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;[For] 타입 문자열 표현식... 이니셜라이저는 문자열의 첫 번째 문자의 주소를 계산합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 코드를 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RuntimeHelpers.OffsetToStringData&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;raw &quot;는 필요한 바이트 수를 복사합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// using System.Runtime.InteropServices
unsafe byte[] GetRawBytes(String s)
{
    if (s == null) return null;
    var codeunitCount = s.Length;
    /* We know that String is a sequence of UTF-16 code units 
       and such code units are 2 bytes */
    var byteCount = codeunitCount * 2; 
    var bytes = new byte[byteCount];
    fixed(void* pRaw = s)
    {
        Marshal.Copy((IntPtr)pRaw, bytes, 0, byteCount);
    }
    return bytes;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@CodesInChaos가 지적했듯이 결과는 기계의 엔디안성에 따라 달라집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 질문 작성자는 그것과 관련이 없다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1글자는 &lt;strong papago-id=&quot;53-1&quot;&gt;1바이트 이상&lt;/strong&gt;(최대 6바이트)으로 나타낼 수 있으며 인코딩에 따라 이러한 바이트는 다르게 취급되기 때문에 부호화를 고려해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Joel은 다음과 같은 글을 올렸습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;a href=&quot;http://www.joelonsoftware.com/articles/Unicode.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 소프트웨어 개발자는 Unicode와 문자 집합에 대해 절대적으로 알아야 합니다(변명 없음).&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫  방법)은 다른했습니다. '알겠습니다.'를.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;System.Text.Encoding&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;임스스네&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;후속 질문: 인코딩을 선택해야 하는 이유는 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜 스트링 클래스 자체에서 그걸 얻을 수 없는 거죠?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정답은 두 부분으로 나누어져 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우선 문자열 &lt;em papago-id=&quot;60-1&quot;&gt;클래스&lt;/em&gt;에서 내부적으로 사용되는 바이트는 &lt;em papago-id=&quot;60-1&quot;&gt;중요&lt;/em&gt;하지 않으며, 바이트가 사용되었다고 가정할 때마다 버그가 발생할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하고 있는 프로그램이 에 완전히 포함되어 있는 경우.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;네트워크상에서 데이터를 송신하고 있는 경우에서도, 네트워크상에서 문자열의 바이트 어레이를 취득하는 것에 대해 걱정할 필요는 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 을 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Net Serialization: 데이터 전송에 대해 우려합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제 바이트에 대한 걱정이 없어졌습니다.시리얼라이제이션 포메터가 대신합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한편, 이러한 바이트를 보증할 수 없는 장소에 송신하고 있는 경우는, 로부터 데이터가 풀 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;순시리얼라이즈드 스트림?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 인코딩에 대해 걱정할 필요가 있습니다. 왜냐하면 이 외부 시스템은 분명히 관심을 가지기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 문자열에서 사용되는 내부 바이트는 중요하지 않습니다.따라서, 수신측에서 이 인코딩에 대해 명시적으로 지정할 수 있도록 인코딩을 선택해야 합니다.이 인코딩은 에서 내부적으로 사용되는 인코딩과 동일합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그물.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 가능하면 문자열 변수에 의해 메모리에 저장된 실제 바이트를 사용하면 바이트 스트림을 만드는 작업이 줄어들 수 있다는 점을 이해합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다만, 출력의 내용을 상대측에서 확실히 이해시키는 것, 및 &lt;em papago-id=&quot;24-1&quot;&gt;부호화&lt;/em&gt;를 명시적으로 실시할 필요가 있는 것을 확인하는 것에 비하면, 그다지 중요하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 내부 바이트를 일치시키려면 이미 다음 명령을 선택하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Unicode&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이치노&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;고르다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Unicode&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;27-1&quot;&gt;&lt;strong papago-id=&quot;27-1-0&quot;&gt;encoding&lt;/strong&gt;&lt;/em&gt;은 tell 입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;[Net] : 기본 바이트를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;새로운 Unicode-Plus가 나올 때 이 인코딩을 선택해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로그램을 중단하지 않고 더 새롭고 더 나은 인코딩 모델을 사용하려면 Net Runtime이 자유로워야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 현재(그리고 예측 가능한 미래) 유니코드 인코딩을 선택하는 것만으로 원하는 것을 얻을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스트링을 와이어로 고쳐 써야 한다는 것도 중요합니다.또한 &lt;em papago-id=&quot;67-1&quot;&gt;일치&lt;/em&gt;하는 인코딩을 &lt;em papago-id=&quot;67-1&quot;&gt;사용하는 경우&lt;/em&gt;에도 비트 &lt;em papago-id=&quot;67-1&quot;&gt;패턴&lt;/em&gt;의 적어도 일부 변환이 필요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴퓨터는 Big vs Little Endian, 네트워크 바이트 순서, 패킷화, 세션 정보 등을 고려해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/10380166&quot; papago-id=&quot;28-1&quot;&gt;메흐드라드&lt;/a&gt;의 올바른 답변이 효과가 있다는 것을 보여주기 위해, 그의 접근법은 &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.runtime.serialization.formatters.binary.binaryformatter%28v=VS.100%29.aspx&quot; papago-id=&quot;28-3&quot; rel=&quot;noreferrer&quot;&gt;짝&lt;/a&gt;이 없는 대리 &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.runtime.serialization.formatters.binary.binaryformatter%28v=VS.100%29.aspx&quot; papago-id=&quot;28-3&quot; rel=&quot;noreferrer&quot;&gt;캐릭터&lt;/a&gt;(많은 사람들이 나의 답변에 반대했지만, 모든 사람이 똑같이 죄를 지었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;System.Text.Encoding.UTF8.GetBytes&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;System.Text.Encoding.Unicode.GetBytes&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;으로는 상위 수 . 즉, 상위 대리 문자를 유지할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;d800&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 상위 를 값인 &quot;예&quot;, &quot;예&quot;, &quot;예&quot;, &quot;예&quot;, &quot;예&quot;, &quot;예&quot;, &quot;예&quot;, &quot;예&quot;, &quot;예&quot;로.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fffd&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;using System;

class Program
{     
    static void Main(string[] args)
    {
        string t = &quot;爱虫&quot;;            
        string s = &quot;Test\ud800Test&quot;; 

        byte[] dumpToBytes = GetBytes(s);
        string getItBack = GetString(dumpToBytes);

        foreach (char item in getItBack)
        {
            Console.WriteLine(&quot;{0} {1}&quot;, item, ((ushort)item).ToString(&quot;x&quot;));
        }    
    }

    static byte[] GetBytes(string str)
    {
        byte[] bytes = new byte[str.Length * sizeof(char)];
        System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
        return bytes;
    }

    static string GetString(byte[] bytes)
    {
        char[] chars = new char[bytes.Length / sizeof(char)];
        System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length);
        return new string(chars);
    }        
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;T 54
e 65
s 73
t 74
? d800
T 54
e 65
s 73
t 74
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 기능을&lt;strong papago-id=&quot;74-1&quot;&gt; 시스템&lt;/strong&gt;에서 사용해 보십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;74-1&quot;&gt;Text. 부호화 중.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;74-1&quot;&gt;UTF8.GetBytes&lt;/strong&gt; 또는 &lt;strong papago-id=&quot;74-3&quot;&gt;시스템.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;74-3&quot;&gt;Text. 부호화 중.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;74-3&quot;&gt;유니코드&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;74-3&quot;&gt;GetBytes&lt;/strong&gt;. 상위 대리 문자를 값 &lt;strong papago-id=&quot;74-5&quot;&gt;fffd&lt;/strong&gt;로 대체하기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문에서 움직임이 있을 때마다 페어링되지 않은 대리 문자가 포함된 문자열도 유지할 수 있는 시리얼라이저(Microsoft 또는 서드파티제의 컴포넌트)를 생각하고 있습니다.&lt;strong papago-id=&quot;75-1&quot;&gt;시리얼라이즈에는 때때로&lt;/strong&gt; 페어링되지 않은 &lt;strong papago-id=&quot;75-1&quot;&gt;대리 &lt;/strong&gt;문자가 포함되어 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;75-1&quot;&gt;NET&lt;/strong&gt;. 이게 잠을 못 자게 하는 건 아니지만누군가 가끔 제 대답에 대해 결점이 있다고 코멘트하는 게 좀 짜증나지만 짝이 없는 대리모 캐릭터에 대해서는 똑같이 결점이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 에서는 「」를 사용하고  것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;System.Buffer.BlockCopy&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;BinaryFormatter&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ツ&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;79&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;谢谢！&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;80&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드보다 훨씬 적은 코드를 사용해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;System.Text.Encoding.UTF8.GetBytes(&quot;TEST String&quot;);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;81&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;음, 제가 모든 답을 읽어봤는데 암호나 짝이 없는 대리인을 떨어뜨리는 연쇄반응에 관한 거였어요&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;82&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 문자열이 암호 해시를 저장하는 바이트 배열에서 작성된 &lt;a href=&quot;http://en.wikipedia.org/wiki/Microsoft_SQL_Server&quot; papago-id=&quot;82-1&quot; rel=&quot;noreferrer&quot;&gt;SQL&lt;/a&gt; Server에서 &lt;a href=&quot;http://en.wikipedia.org/wiki/Microsoft_SQL_Server&quot; papago-id=&quot;82-1&quot; rel=&quot;noreferrer&quot;&gt;가져온&lt;/a&gt; 경우 문제가 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 삭제하면 비활성 해시가 저장되고 XML에 저장할 경우 그대로 둡니다(XML 라이터가 페어링되지 않은 대리모에 대한 예외를 삭제하기 때문입니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;83&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 바이트 &lt;a href=&quot;http://en.wikipedia.org/wiki/Base64&quot; rel=&quot;noreferrer&quot; papago-id=&quot;83-1&quot;&gt;배열&lt;/a&gt;의 Base64 인코딩을 사용합니다만, 인터넷에서는 C#에 해결책이 1개밖에 없습니다.또한 버그가 포함되어 있기 때문에 버그를 수정하고 되돌리기 절차를 기술했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 있습니다, 미래의 구글러 여러분:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public static byte[] StringToBytes(string str)
{
    byte[] data = new byte[str.Length * 2];
    for (int i = 0; i &amp;lt; str.Length; ++i)
    {
        char ch = str[i];
        data[i * 2] = (byte)(ch &amp;amp; 0xFF);
        data[i * 2 + 1] = (byte)((ch &amp;amp; 0xFF00) &amp;gt;&amp;gt; 8);
    }

    return data;
}

public static string StringFromBytes(byte[] arr)
{
    char[] ch = new char[arr.Length / 2];
    for (int i = 0; i &amp;lt; ch.Length; ++i)
    {
        ch[i] = (char)((int)arr[i * 2] + (((int)arr[i * 2 + 1]) &amp;lt;&amp;lt; 8));
    }
    return new String(ch);
}
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt; 
 &lt;p papago-id=&quot;84&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또, 부호화를 고려해야 하는 이유에 대해서도 설명해 주세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열이 저장되어 있는 바이트를 간단하게 얻을 수 없습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜 이렇게 인코딩에 의존합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;!!&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;85&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;문자열의 바이트&quot; 같은 것은 존재하지 않기 때문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;86&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열(또는 일반적으로 텍스트)은 문자, 숫자 및 기타 기호로 구성됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그게 다예요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 컴퓨터는 문자에 대해 아무것도 모르고 바이트만 처리할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 컴퓨터를 사용하여 텍스트를 저장하거나 전송하려면 문자를 바이트로 변환해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게 하는 거야?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 암호화가 이루어집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;87&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부호화는 논리 문자를 물리 바이트로 변환하는 규칙에 불과합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 간단하고 잘 알려진 인코딩은 ASCII입니다.영어로 쓰면 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 언어의 경우 Unicode의 맛을 가장 안전하게 선택할 수 있도록 보다 완전한 인코딩이 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;88&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, &quot;인코딩을 사용하지 않고 문자열의 바이트를 얻으려고 하는 것&quot;은 &quot;언어를 사용하지 않고 텍스트를 쓰는 것&quot;만큼 불가능합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;89&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;덧붙여서, 저는 여러분(그리고 그 점에 대해서는 누구라도)에게 이 작은 지혜를 읽어보라고 강력히 권합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.joelonsoftware.com/articles/Unicode.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;89-1&quot;&gt;모든 소프트웨어 개발자는 Unicode와 문자 집합에 대해 절대적으로 알아야 합니다(변명 없음).&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하는 C#&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;string&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; a까지&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;byte&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 스위칭:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public static byte[] StrToByteArray(string str)
{
   System.Text.UTF8Encoding  encoding=new System.Text.UTF8Encoding();
   return encoding.GetBytes(str);
}
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;byte[] strToByteArray(string str)
{
    System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
    return enc.GetBytes(str);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;93&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C# 7.2와 함께 릴리즈된 에서는 스트링의 기본 메모리 표현을 관리 대상 바이트 배열로 캡처하는 표준 기술은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;byte[] bytes = &quot;rubbish_\u9999_string&quot;.AsSpan().AsBytes().ToArray();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;94&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터를 다시 변환하는 것은 사실상 데이터를 어떤 식으로든 해석하고 있다는 것을 의미하지만, 완전성을 위해 데이터를 다시 변환하는 것은 쉽지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;string s;
unsafe
{
    fixed (char* f = &amp;amp;bytes.AsSpan().NonPortableCast&amp;lt;byte, char&amp;gt;().DangerousGetPinnableReference())
    {
        s = new string(f);
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NonPortableCast&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★★★★★★★★★★★★★★★」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DangerousGetPinnableReference&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 짓을 하면 안 된다는 주장을 더 펼치면 안 돼요&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;「 」로 에 주의해 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Span&amp;lt;T&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://www.nuget.org/packages/System.Memory&quot; papago-id=&quot;43-1&quot; rel=&quot;noreferrer&quot;&gt;를 &lt;/a&gt;사용하려면 시스템을 설치해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://www.nuget.org/packages/System.Memory&quot; papago-id=&quot;43-1&quot; rel=&quot;noreferrer&quot;&gt;메모리 NuGet&lt;/a&gt; 패키지&lt;/font&gt;&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼에도 불구하고, &lt;em papago-id=&quot;44-1&quot;&gt;실제&lt;/em&gt; 원래의 질문과 후속 코멘트는 기본 메모리가 &quot;해석&quot;되지 않았음을 암시합니다(이러한 수단은 그대로 쓰기의 필요 이상으로 수정되거나 읽히지 않았음을 가정함). 이는 일부 구현이 있음을 나타냅니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Stream&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터를 문자열로 추론하는 대신 클래스를 사용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;102&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열과 바이트 배열 간의 변환에 다음 코드를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;string s = &quot;Hello World&quot;;

// String to Byte[]

byte[] byte1 = System.Text.Encoding.Default.GetBytes(s);

// OR

byte[] byte2 = System.Text.ASCIIEncoding.Default.GetBytes(s);

// Byte[] to string

string str = System.Text.Encoding.UTF8.GetString(byte1);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;103&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;확실하지는 않지만 문자열은 정보를 문자 배열로 저장하기 때문에 바이트 단위로 비효율적입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;구체적으로 Char의 정의는 &quot;Unicode 문자를 나타냅니다&quot;입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;104&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 예를 들어 보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;String str = &quot;asdf éß&quot;;
String str2 = &quot;asdf gh&quot;;
EncodingInfo[] info =  Encoding.GetEncodings();
foreach (EncodingInfo enc in info)
{
    System.Console.WriteLine(enc.Name + &quot; - &quot; 
      + enc.GetEncoding().GetByteCount(str)
      + enc.GetEncoding().GetByteCount(str2));
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;105&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Unicode 응답은 두 경우 모두 14바이트인데 반해 UTF-8 응답은 첫 번째가 9바이트, 두 번째가 7바이트에 불과하다는 점에 유의하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열에서  사용할  &quot; &quot; &quot;를 사용하십시오.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Encoding.Unicode&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 스토리지 공간에서는 비효율적입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;108&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;중요한 문제는 문자열의 글리프는 32비트(문자 코드의 경우 16비트)가 소요되지만 바이트에는 8비트밖에 여유가 없다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ASCII 문자만 포함하는 문자열로 제한하지 않는 한 일대일 매핑은 존재하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Text.Encoding에는 문자열을 바이트[]에 매핑하는 방법이 많이 있습니다.정보 손실을 방지하고 클라이언트가 바이트[]를 문자열에 매핑해야 할 때 사용하기 쉬운 것을 선택해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;109&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Utf8은 일반적인 인코딩으로, 콤팩트하고 손실되지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;110&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;용도:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    string text = &quot;string&quot;;
    byte[] array = System.Text.Encoding.UTF8.GetBytes(text);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;111&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[0] = 115
[1] = 116
[2] = 114
[3] = 105
[4] = 110
[5] = 103
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;112&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 빠른 방법&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public static byte[] GetBytes(string text)
{
    return System.Text.ASCIIEncoding.UTF8.GetBytes(text);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;113&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Makotosan 님의 코멘트로 편집이 &lt;strong papago-id=&quot;113-0&quot;&gt;&lt;em papago-id=&quot;113-0-0&quot;&gt;최선&lt;/em&gt;&lt;/strong&gt;의 방법입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Encoding.UTF8.GetBytes(text)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;114&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;OP의 질문에 가장 가까운 접근법은 Tom Blodget으로, 실제로 오브젝트에 들어가 바이트를 추출합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;String Object의 구현에 따라 다르기 때문에 가장 가깝다고 말합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;Can't I simply get what bytes the string has been stored in?&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;115&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;네, 하지만 여기서 근본적인 오류가 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;String은 대상 데이터 구조를 가질 수 있는 개체입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;우린 이미 알고 있어요 짝이 없는 대리인들을 보관할 수 있으니까요&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;길이가 저장될 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;각각의 '쌍' 대리인에 대한 포인터를 유지하여 빠르게 계산할 수 있게 할 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기타. 이러한 추가 바이트는 모두 문자 데이터의 일부가 아닙니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;116&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원하는 것은 배열 내의 각 문자의 바이트입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 '인코딩'이 등장합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;디폴트로는 UTF-16LE가 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;라운드 트립 이외의 바이트 자체에 관심이 없는 경우 디폴트를 포함한 임의의 인코딩을 선택하고 나중에 변환할 수 있습니다(기본 인코딩, 코드 포인트, 버그 수정, 페어링되지 않은 대용품 등 허용되는 동일한 파라미터가 있다고 가정).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;117&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 왜 '인코딩'을 마법에 맡길까요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 바이트를 얻을 수 있는지 알 수 있도록 인코딩을 지정하는 것은 어떨까요?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;Why is there a dependency on character encodings?&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;118&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(이 컨텍스트에서) 부호화는 단순히 문자열을 나타내는 바이트를 의미합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열 개체의 바이트가 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열이 저장된 바이트를 원하는 경우 - 여기서 질문이 순진하게 질문됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열 객체가 포함할 수 있는 다른 모든 이진 데이터가 아니라 문자열을 나타내는 연속 배열의 문자열 바이트를 사용하려고 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;119&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 문자열이 저장되는 방식은 관련이 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;바이트 배열에서 &quot;Encoded&quot; 문자열을 바이트로 만들어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;120&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 Tom Bloget의 대답이 마음에 든다. 왜냐하면 그는 당신을 '문자열 객체의 바이트' 방향으로 안내했기 때문이다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;구현에 따라 다르긴 하지만, 그가 내부를 훔쳐보고 있기 때문에 문자열의 복사본을 재구성하는 것은 어려울 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Mehrdad의 답변은 개념적인 수준에서 오해를 불러일으키기 때문에 잘못되었다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이치노&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그의 특정 솔루션은 짝을 이루지 않은 대리인을 보존할 수 있도록 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 이것은 구현에 의존합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 특정 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;GetBytes&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;UTF-8을 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;123&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 (Mehrdad의 솔루션)에 대해 생각을 바꿨습니다.이것은 문자열의 바이트를 얻는 것이 아니라 문자열에서 생성된 문자 배열의 바이트를 얻는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;부호화에 관계없이 c#의 문자 데이터형은 고정 크기입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 통해 일관된 길이의 바이트 배열을 생성할 수 있으며 바이트 배열의 크기에 따라 문자 배열을 복제할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 인코딩이 UTF-8이지만 각 문자가 최대 utf8 값을 수용하기 위해6 바이트인 경우에도 동작합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자 인코딩은 문제가 되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;124&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 변환이 사용되었습니다.각 문자를 고정 크기 상자(c#의 문자 유형)에 넣습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 그 표현이 무엇인지는 중요하지 않습니다. 엄밀히 말하면 OP에 대한 답변입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러니까, 어쨌든 변환하는 거라면...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜 'encode'를 하지 않는가?&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;p papago-id=&quot;125&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에서 문자열을 바이트[]로 변환하려면 어떻게 해야 하나요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정 인코딩을 수동으로 지정하지 않고 NET(C#)을 사용할 수 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;126&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 문자열.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET은 텍스트를 UTF-16 코드 유닛의 시퀀스로 나타내므로 바이트는 이미 UTF-16의 메모리에 부호화되어 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;127&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메흐르다드의 대답&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;50&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/10380166/369792&quot; papago-id=&quot;50-1&quot;&gt;Mehrdad의 답변&lt;/a&gt;을 사용할 수 있지만 문자가 UTF-16이기 때문에 실제로는 인코딩을 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ToCharArray를 호출하여 &lt;a href=&quot;https://referencesource.microsoft.com/#mscorlib/system/string.cs,d78d4544220d96be&quot; rel=&quot;noreferrer&quot; papago-id=&quot;50-3&quot;&gt;소스를 조사하면&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char[]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;51&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메모리에 직접 카피합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 할당된 바이트 배열에 데이터를 복사합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 후드 아래에서는 &lt;em papago-id=&quot;51-1&quot;&gt;기본&lt;/em&gt; 바이트를 두 번 복사하고 콜 후에 사용되지 않는 char 배열을 할당합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;130&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;톰 블로젯의 대답&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;52&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Tom &lt;a href=&quot;https://stackoverflow.com/a/20321003/369792&quot; papago-id=&quot;52-0&quot;&gt;Blodget의 답변&lt;/a&gt;은 Mehrdad보다 20-30% 빠릅니다.이것은 char 어레이를 할당하고 바이트를 복사하는 중간 단계를 건너뛰기 때문입니다.&lt;a href=&quot;https://stackoverflow.com/a/20321003/369792&quot; papago-id=&quot;52-0&quot;&gt;다만&lt;/a&gt;, 이 경우,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/unsafe&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;53&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt; 것이&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt; &lt;font class=&quot;papago-parent&quot;&gt;생각&lt;/font&gt;합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인코딩을 사용하고 싶지 않다면 이 방법이 좋을 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 「」에 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fixed&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;54&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;별도의 바이트 배열을 할당하여 바이트를 복사할 필요도 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;134&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 인코딩을 고려해야 하는 이유는 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열이 저장되어 있는 바이트를 간단하게 얻을 수 없습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자 인코딩에 의존하는 이유는 무엇입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;55&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜냐하면 그것이 그것을 하는 올바른 방법이기 때문이다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;string&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;56&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상화입입니니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;137&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;잘못된 문자의 문자열이 있는 경우 인코딩을 사용하면 문제가 발생할 수 있지만, 이 경우 문제가 발생하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;잘못된 문자로 데이터를 문자열에 가져오는 경우 잘못된 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;처음에는 바이트 배열 또는 Base64 인코딩을 사용해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;57&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;「 」를 사용하고 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;System.Text.Encoding.Unicode&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;58&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드 복원력이 향상됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드가 실행되는 시스템의 &lt;a href=&quot;https://en.wikipedia.org/wiki/Endianness&quot; rel=&quot;noreferrer&quot; papago-id=&quot;58-1&quot;&gt;엔디안성&lt;/a&gt;에 대해 걱정할 필요는 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 버전의 CLR에서 다른 내부 문자 인코딩이 사용되는지는 걱정할 필요가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;59&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제는 왜 인코딩을 걱정하느냐가 아니라 왜 그것을 무시하고 다른 것을 사용하느냐는 것이라고 생각합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부호화는 일련의 바이트에서 문자열의 추상화를 나타내는 것을 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;System.Text.Encoding.Unicode&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;60&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 엔디안 바이트 순서 인코딩이 약간 제공되며 현재와 미래의 모든 시스템에서 동일하게 수행됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;61&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하여 a를 할 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;string&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;62&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; a까지&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;byte array&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;63&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;네트워크&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;string s_unicode = &quot;abcéabc&quot;;
byte[] utf8Bytes = System.Text.Encoding.UTF8.GetBytes(s_unicode);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;145&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열의 기본 바이트 복사본을 원하는 경우 다음과 같은 함수를 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;145-1&quot;&gt;하지만, &lt;/strong&gt;그 이유를 알기 위해 계속 &lt;strong papago-id=&quot;145-1&quot;&gt;읽어서&lt;/strong&gt;는 안 됩니다&lt;strong papago-id=&quot;145-1&quot;&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[DllImport(
        &quot;msvcrt.dll&quot;,
        EntryPoint = &quot;memcpy&quot;,
        CallingConvention = CallingConvention.Cdecl,
        SetLastError = false)]
private static extern unsafe void* UnsafeMemoryCopy(
    void* destination,
    void* source,
    uint count);

public static byte[] GetUnderlyingBytes(string source)
{
    var length = source.Length * sizeof(char);
    var result = new byte[length];
    unsafe
    {
        fixed (char* firstSourceChar = source)
        fixed (byte* firstDestination = result)
        {
            var firstSource = (byte*)firstSourceChar;
            UnsafeMemoryCopy(
                firstDestination,
                firstSource,
                (uint)length);
        }
    }

    return result;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;146&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 함수는 문자열의 기초가 되는 바이트 복사본을 매우 빠르게 가져옵니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 바이트는 시스템에서 인코딩되는 방식에 관계없이 얻을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 인코딩은 거의 확실히 UTF-16LE이지만, 실장에 대해서는 신경 쓸 필요가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;147&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그냥 전화하는 게 더 &lt;strong papago-id=&quot;147-1&quot;&gt;안전하고,&lt;/strong&gt; 더 &lt;strong papago-id=&quot;147-1&quot;&gt;간단하고&lt;/strong&gt;, 더&lt;strong papago-id=&quot;147-1&quot;&gt; 신뢰&lt;/strong&gt;할 수 있을 거야&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;System.Text.Encoding.Unicode.GetBytes()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;148&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 거의 같은 결과를 얻을 수 있고 입력이 용이하며 바이트는 라운드 트립할 뿐만 아니라 Unicode로 바이트 표현도 할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;System.Text.Encoding.Unicode.GetString()
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;64&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지 않은 이다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;String&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;65&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로로 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Byte[]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;66&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;★★★★&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public static unsafe Byte[] GetBytes(String s)
{
    Int32 length = s.Length * sizeof(Char);
    Byte[] bytes = new Byte[length];

    fixed (Char* pInput = s)
    fixed (Byte* pBytes = bytes)
    {
        Byte* source = (Byte*)pInput;
        Byte* destination = pBytes;

        if (length &amp;gt;= 16)
        {
            do
            {
                *((Int64*)destination) = *((Int64*)source);
                *((Int64*)(destination + 8)) = *((Int64*)(source + 8));

                source += 16;
                destination += 16;
            }
            while ((length -= 16) &amp;gt;= 16);
        }

        if (length &amp;gt; 0)
        {
            if ((length &amp;amp; 8) != 0)
            {
                *((Int64*)destination) = *((Int64*)source);

                source += 8;
                destination += 8;
            }

            if ((length &amp;amp; 4) != 0)
            {
                *((Int32*)destination) = *((Int32*)source);

                source += 4;
                destination += 4;
            }

            if ((length &amp;amp; 2) != 0)
            {
                *((Int16*)destination) = *((Int16*)source);

                source += 2;
                destination += 2;
            }

            if ((length &amp;amp; 1) != 0)
            {
                ++source;
                ++destination;

                destination[0] = source[0];
            }
        }
    }

    return bytes;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;152&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비록 우아하지는 않더라도, 인정받는 앤서보다 훨씬 빠릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;10000,000회 이상의 Stopwatch 벤치마크를 다음에 나타냅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[Second String: Length 20]
Buffer.BlockCopy: 746ms
Unsafe: 557ms

[Second String: Length 50]
Buffer.BlockCopy: 861ms
Unsafe: 753ms

[Third String: Length 100]
Buffer.BlockCopy: 1250ms
Unsafe: 1063ms
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;153&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하려면 프로젝트 빌드 속성에서 &quot;안전하지 않은 코드 허용&quot;을 선택해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 따라서.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET Framework 3.5, 이 메서드는 String 확장으로도 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public static unsafe class StringExtensions
{
    public static Byte[] ToByteArray(this String s)
    {
        // Method Code
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;154&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;바이트를 사용하여 무엇을 할 것인지를 묻는 질문에 &lt;a href=&quot;https://stackoverflow.com/questions/472906/how-do-i-get-a-consistent-byte-representation-of-strings-in-c-sharp-without-manu?rq=1#comment290510_472906&quot; papago-id=&quot;154-1&quot;&gt;다음&lt;/a&gt;과 같이 대답했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;155&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;암호화할 거야&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;변환하지 않고 암호화할 수 있지만, 여기서 인코딩이 재생되는 이유를 알고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그냥 바이트만 줘. 내가 말하는 거야.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;156&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 암호화된 데이터를 네트워크를 통해 전송할지, 나중에 메모리에 다시 로드할지, 아니면 다른 프로세스로 스트리밍할지 여부에 관계없이 어떤 시점에서 암호를 &lt;em papago-id=&quot;156-1&quot;&gt;해독할지&lt;/em&gt;는 분명합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 정답은 통신 프로토콜을 정의하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;통신 프로토콜은 프로그래밍 언어 및 관련 런타임의 구현 세부 정보 측면에서 &lt;strong papago-id=&quot;156-3&quot;&gt;정의해서&lt;/strong&gt;는 안 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에는 몇 가지 이유가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;157&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 언어 또는 런타임으로 구현된 프로세스와 통신할 필요가 있을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(예를 들어 다른 머신에서 실행 중인 서버나 JavaScript 브라우저 클라이언트에 문자열을 보내는 서버 등이 포함됩니다).&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;158&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 프로그램은 향후 다른 언어 또는 런타임으로 재실장될 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;159&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.NET 실장에서는 문자열의 내부 표현이 변경될 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 억지스럽게 들릴지 모르지만, &lt;a href=&quot;https://www.vojtechruzicka.com/java-9-compact-strings/&quot; papago-id=&quot;159-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;실제로는 Java&lt;/a&gt; 9에서 &lt;a href=&quot;https://www.vojtechruzicka.com/java-9-compact-strings/&quot; papago-id=&quot;159-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;메모리&lt;/a&gt; 사용을 줄이기 위해 &lt;a href=&quot;https://www.vojtechruzicka.com/java-9-compact-strings/&quot; papago-id=&quot;159-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;일어난 일&lt;/a&gt;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이유가 없어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET은 선례를 따를 수 없었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/14942142/1394393&quot; papago-id=&quot;159-3&quot;&gt;Sket&lt;/a&gt;은 UTF-16이 현재 최적이 아닐 수 있다는 것을 시사하고 있으며, 이는 유니코드의 이모티콘과 다른 블록들을 표현하기 위해 2바이트 이상을 필요로 하기 때문에 향후 내부 표현이 변경될 가능성을 증가시킨다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;160&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(완전히 다른 프로세스 또는 향후 같은 프로그램과) 통신하려면 &lt;strong papago-id=&quot;160-1&quot;&gt;프로토콜&lt;/strong&gt;을 엄격하게 정의하여 작업하거나 실수로 버그를 생성하는 어려움을 최소화해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 따라 다릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET의 내부 표현은 엄격하거나 명확하지 않으며 일관성이 보장되지도 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;표준 &lt;em papago-id=&quot;160-3&quot;&gt;부호화&lt;/em&gt;는 향후 실패하지 않는 엄밀한 정의입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;161&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 부호화를 지정하지 않으면 &lt;em papago-id=&quot;161-1&quot;&gt;일관성&lt;/em&gt; 요건을 충족할 수 없습니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;162&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이후 프로세스의 퍼포먼스가 현저하게 향상되었을 경우 UTF-16을 직접 사용할 수도 &lt;em papago-id=&quot;162-1&quot;&gt;있습니다&lt;/em&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET 에서는, 내부 또는 그 외의 이유로 사용되고 있습니다만, 그 부호화를 명시적으로 선택해, 에 의존하지 않고 코드로 명시적으로 변환을 실행할 필요가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET의 사내 실장.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;163&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 인코딩을 선택하여 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;using System.Text;

// ...

Encoding.Unicode.GetBytes(&quot;abc&quot;); # UTF-16 little endian
Encoding.UTF8.GetBytes(&quot;abc&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;164&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보시는 바와 같이 임베디드 부호화 오브젝트만 사용하는 것이 독자/라이터 메서드를 구현하는 것보다 코드도 적습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;165&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열은 다음과 같은 이유로 몇 가지 다른 방법으로 바이트 배열로 변환할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET은 Unicode를 지원하며 Unicode는 UTF라고 불리는 몇 가지 차분 인코딩을 표준화합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;바이트 표현 길이는 다르지만 스트링이 부호화되면 스트링에 다시 부호화할 수 있지만 스트링이 하나의 UTF로 부호화되어 다른 UTF로 디코딩될 경우 를 망칠 수 있다는 가정 하에 디코딩될 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;166&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 .NET은 비 Unicode 인코딩을 지원하지만 일반적으로는 유효하지 않습니다(ASCII 등의 실제 문자열에서 Unicode 코드 포인트의 제한된 서브셋이 사용되는 경우에만 유효합니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내부적으로는,&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET은 UTF-16을 지원하지만 스트림 표현에는 보통 UTF-8이 사용됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 또한 인터넷의 표준적인 사실이기도 하다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;67&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도 없이  배열로의  및 역직렬화는  「」에서 서포트되고 있습니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;System.Text.Encoding&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;68&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인 인코딩을&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ASCIIEncoding&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;69&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 UTF4' UTF')&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;System.Text.UnicodeEncoding&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;70&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; UTF-16)를 지원합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;171&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.text.encoding.aspx&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;171-1&quot;&gt; 링크를 참조&lt;/a&gt;합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;71&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 사용하여 :&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;System.Text.Encoding.GetBytes&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;72&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는, 「」를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;System.Text.Encoding.GetChars&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;73&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;System.String(char[])&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;74&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;a href=&quot;http://unicode.org/,%20http://unicode.org/faq/utf_bom.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 페이지를 참조해 주세요.&lt;/font&gt;&lt;/font&gt;&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;177&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;string myString = //... some string

System.Text.Encoding encoding = System.Text.Encoding.UTF8; //or some other, but prefer some UTF is Unicode is used
byte[] bytes = encoding.GetBytes(myString);

//next lines are written in response to a follow-up questions:

myString = new string(encoding.GetChars(bytes));
byte[] bytes = encoding.GetBytes(myString);
myString = new string(encoding.GetChars(bytes));
byte[] bytes = encoding.GetBytes(myString);

//how many times shall I repeat it to show there is a round-trip? :-)
&lt;/code&gt;&lt;/pre&gt;&lt;h1 papago-id=&quot;178&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원하는 바이트의 용도에 따라 달라집니다.&lt;/font&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;179&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜냐하면, 타일러가 &lt;a href=&quot;https://chat.stackoverflow.com/transcript/message/39942929#39942929&quot; papago-id=&quot;179-1&quot;&gt;적절하게&lt;/a&gt; 말했듯이, &quot;스트링은 순수한 데이터가 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;정보도 &lt;a href=&quot;http://www.diffen.com/difference/Data_vs_Information&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;179-3&quot;&gt;있습니다&lt;/a&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 정보는 문자열 작성 시 상정된 부호화입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;h3 papago-id=&quot;180&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열에 저장된 (텍스트가 아닌) 이항 데이터가 있다고 가정합니다.&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;em papago-id=&quot;181&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 OP의 자신의 질문에 대한 코멘트를 바탕으로 한 것으로, OP의 사용 예에 대한 힌트를 이해하면 맞는 질문입니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;76&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위에서 설명한 인코딩이 가정되었기 때문에 이진 데이터를 문자열에 저장하는 것은 잘못된 접근 방식일 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;string&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;77&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;byte[]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;78&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(어레이가 더 적절했을 텐데)가 시작도 하기 전에 이미 싸움에서 졌습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;REST 요구/응답 또는 스트링을 전송해야 하는 &lt;em papago-id=&quot;78-1&quot;&gt;어떤&lt;/em&gt; 방법으로든 바이트를 송신하고 있다면 &lt;a href=&quot;https://stackoverflow.com/q/201479/1739000&quot; papago-id=&quot;78-3&quot;&gt;Base64가&lt;/a&gt; 적절한 접근법입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h3 papago-id=&quot;185&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;알 수 없는 인코딩을 가진 텍스트 문자열이 있는 경우&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;em papago-id=&quot;186&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 사람들은 모두 이 틀린 문제에 잘못 답했어요.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;79&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 그대로하게 표시되는 는, 하면 UTF 로 하는 부호화)를.하는 「」( 「UTF」)를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;System.Text.Encoding.???.GetBytes()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;80&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 인코딩을 선택했는지 바이트를 제공하는 사용자에게 알립니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;189&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를&lt;strong papago-id=&quot;189-1&quot;&gt; &lt;/strong&gt;사용하고 있는 경우.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;189-1&quot;&gt;NET&lt;/strong&gt; Core &lt;strong papago-id=&quot;189-3&quot;&gt;또는 &lt;/strong&gt;시스템&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 메모리&lt;strong papago-id=&quot;189-5&quot;&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;189-5&quot;&gt;NET&lt;/strong&gt; Framework는&lt;strong papago-id=&quot;189-7&quot;&gt; 스팬&lt;/strong&gt;과 &lt;strong papago-id=&quot;189-9&quot;&gt;메모리를 &lt;/strong&gt;&lt;strong papago-id=&quot;189-7&quot;&gt;통해&lt;/strong&gt; 매우 효율적인 마샬링 메커니즘을 이용할 수 &lt;strong papago-id=&quot;189-5&quot;&gt;있습니다&lt;/strong&gt;&lt;strong papago-id=&quot;189-7&quot;&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;189-9&quot;&gt;문자열&lt;/strong&gt; 메모리를 바이트 범위로 효과적으로 재해석할 수 있습니다&lt;strong papago-id=&quot;189-9&quot;&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;바이트 스팬이 있으면 다른 타입으로 다시 정리하거나 어레이에 복사하여 시리얼화할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;190&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 사람의 의견을 요약하면 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;83&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 종류의 시리얼라이제이션 표현을 저장하는 것은 시스템엔디안성, 컴파일러 최적화 및 실행 문자열 내부 표현의 변경에 영향을 받습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET ★★★&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;ul&gt; 
   &lt;li papago-id=&quot;191&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;장기 보관 방지&lt;/font&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;81&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;른른른 른른 른 츠키노&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;ul&gt; 
     &lt;li papago-id=&quot;192&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에는 다른 머신, 프로세서 아키텍처 등이 포함됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET 런타임, 컨테이너 등&lt;/font&gt;&lt;/li&gt; 
     &lt;li papago-id=&quot;193&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에는 비교, 포맷, 암호화, 문자열 조작, 현지화, 문자 변환 등이 포함됩니다.&lt;/font&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;82&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자 인코딩에 대한 추측을 피합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;ul&gt; 
     &lt;li papago-id=&quot;195&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;디폴트 인코딩은 실제로는 &lt;strong papago-id=&quot;195-1&quot;&gt;UTF-16LE&lt;/strong&gt;이지만 컴파일러/런타임이 내부 표현을 선택할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2 papago-id=&quot;198&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행&lt;/font&gt;&lt;/h2&gt; 
&lt;pre class=&quot;lang-cs prettyprint-override&quot;&gt;&lt;code&gt;public static class MarshalExtensions
{
   public static ReadOnlySpan&amp;lt;byte&amp;gt; AsBytes(this string value) =&amp;gt; MemoryMarshal.AsBytes(value.AsSpan());
   public static string AsString(this ReadOnlySpan&amp;lt;byte&amp;gt; value) =&amp;gt; new string(MemoryMarshal.Cast&amp;lt;byte, char&amp;gt;(value));
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;199&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예&lt;/font&gt;&lt;/h2&gt; 
&lt;pre class=&quot;lang-cs prettyprint-override&quot;&gt;&lt;code&gt;static void Main(string[] args)
{
    string str1 = &quot;你好，世界&quot;;
    ReadOnlySpan&amp;lt;byte&amp;gt; span = str1.AsBytes();
    string str2 = span.AsString();

    byte[] bytes = span.ToArray();

    Debug.Assert(bytes.Length &amp;gt; 0);
    Debug.Assert(str1 == str2);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;200&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;퍼튜어 인사이트&lt;/font&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;201&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C++에서는 이것은 &lt;strong papago-id=&quot;201-1&quot;&gt;refret_cast&lt;/strong&gt;와 거의 동등하며, C에서는 시스템의 단어 유형(char)에 대한 캐스트와 거의 동등합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;202&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의&lt;strong papago-id=&quot;202-1&quot;&gt; &lt;/strong&gt;최신 버전.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;202-1&quot;&gt;NET Core &lt;/strong&gt;Runtime(&lt;strong papago-id=&quot;202-1&quot;&gt;CoreCLR),&lt;/strong&gt; 스팬에 대한 연산은 컴파일러의 내장 함수 및 다양한 최적화를 효과적으로 &lt;strong papago-id=&quot;202-1&quot;&gt;호출&lt;/strong&gt;합니다.이것에 의해, 때때로 경계 체크가 불필요해지기 때문에, 메모리의 안전성을 유지하면서 뛰어난 퍼포먼스를 얻을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;메모리가 CLR에 의해 할당되고 스팬이 관리되지 않는 메모리 할당자에서 포인터에서 파생되지 않았다고 가정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;203&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주의사항&lt;/font&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;204&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 방법에서는 문자열에서 Read Only Span &amp;lt;char&lt;strong papago-id=&quot;204-1&quot;&gt;&amp;gt;&lt;/strong&gt;을 반환하는 CLR에서 지원되는 메커니즘을 사용합니다.또, 이 스팬에 반드시 내부 스트링 레이아웃 전체가 포함되는 것은 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;204-3&quot;&gt;읽기 전용 범위 &amp;lt;&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열은 불변하기 때문에 변환을 실행할 필요가 있는 경우 복사본을 작성해야 함을 &lt;strong papago-id=&quot;204-3&quot;&gt;나타냅니다.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;205&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴퓨터는 원시 바이너리 데이터, 원시 비트만 인식합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1비트는 0 또는 1의 이진수입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;8비트 숫자는 바이트입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 바이트는 0 ~255 사이의 숫자입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;206&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ASCII는 숫자를 문자로 변환하는 테이블입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;0 ~ 31 의 숫자는, 탭, 새로운 행등의 컨트롤입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;32 ~ 126 의 숫자는 인쇄 가능한 문자입니다.문자 a, 숫자 1, % 기호, 밑줄 _&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;207&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ASCII에서는 33개의 컨트롤 문자와 95개의 인쇄 가능한 문자가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;208&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ASCII는 현재 가장 일반적으로 사용되는 문자 인코딩입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Unicode 테이블의 첫 번째 엔트리는 ASCII이며 ASCII 문자 세트와 일치합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;209&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ASCII는 7비트 문자 세트입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;0 ~ 127 의 숫자입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;8비트를 사용하면 최대 255비트를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;210&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ASCII에 대한 가장 일반적인 대체 방법은 ASCII와 호환되지 않는 EBCDIC으로, 현재도 IBM 컴퓨터와 데이터베이스에 존재합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;211&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1바이트, 그래서 8비트 숫자는 요즘 컴퓨터 공학에서 가장 일반적인 단위입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 바이트는 0 ~255 사이의 숫자입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;212&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ASCII 는, 0 ~127 의 각 번호에 대한 의미를 정의합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;213&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;128 ~ 255 의 숫자에 관련 붙여진 문자는, 사용하는 문자 인코딩에 의해서 다릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 널리 사용되는 2개의 문자 인코딩은 windows1252와 UTF-8입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;214&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows 1252에서 € 기호에 해당하는 숫자는 128.1 바이트 : [A0]입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Unicode 데이터베이스에서 € 기호는 8364입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;215&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 8364라는 번호를 드리겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;토우바이트 : [20, AC]&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;UTF-8의 유로 기호는 14844588입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;3 바이트 : [E282AC]&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;216&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 원시 데이터를 몇 가지 드리겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;20AC로 합시다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows 1252 문자 2개입니까? £ 또는 Unicode € 기호 1개입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;217&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;미가공 데이터를 더 드리겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;E282AC.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows 1252에서는 82는 할당되지 않은 문자이므로 Windows 1252는 아닐 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;macRoman &quot;‚¨&quot;&quot; 또는 OEM 437 &quot;éó&quot;&quot; 또는 UTF-8 &quot; &quot;&quot;&quot; 기호일 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;218&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자 인코딩의 특성과 통계 정보를 바탕으로 원시 바이트 스트림의 인코딩을 추측할 수 있지만 신뢰할 수 있는 방법은 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;UTF-8에서는 128 ~255 의 번호 자체는 무효입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;é는 일부 언어(프랑스어)에서 일반적이기 때문에 값 E9이 문자로 둘러싸인 바이트가 많을 경우 아마도 Windows1252 인코딩 문자열(E9 바이트는 é 문자를 나타냄)일 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;219&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열을 나타내는 원시 바이트의 스트림이 있는 경우 추측을 시도하는 것보다 일치하는 인코딩을 알아두는 것이 훨씬 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;220&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 한 때 널리 사용되었던 다양한 인코딩의 1개의 원시 바이트 스크린샷입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/byOVk.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/byOVk.png&quot; alt=&quot;다양한 인코딩으로 표시되는 1바이트 문자&quot; papago-attr-id=&quot;1&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;221&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 가지 방법:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public static byte[] StrToByteArray(this string s)
{
    List&amp;lt;byte&amp;gt; value = new List&amp;lt;byte&amp;gt;();
    foreach (char c in s.ToCharArray())
        value.Add(c.ToByte());
    return value.ToArray();
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;222&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public static byte[] StrToByteArray(this string s)
{
    s = s.Replace(&quot; &quot;, string.Empty);
    byte[] buffer = new byte[s.Length / 2];
    for (int i = 0; i &amp;lt; s.Length; i += 2)
        buffer[i / 2] = (byte)Convert.ToByte(s.Substring(i, 2), 16);
    return buffer;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;223&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 위보다 아래 쪽을 더 자주 사용하는 편이에요.속도를 벤치마킹한 적은 없어요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;224&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/472906/&lt;a href=&quot;https://stackoverflow.com/questions/472906/how-do-i-get-a-consistent-byte-representation-of-strings-in-c-sharp-without-manu&quot; target=&quot;_blank&quot; papago-id=&quot;224-1&quot;&gt;how-do-i-get-a-consistent-byte-representation-of-strings-in-c-sharp-without-manu&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>string</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/846</guid>
      <comments>https://gigabyte.tistory.com/846#entry846comment</comments>
      <pubDate>Wed, 19 Apr 2023 23:09:16 +0900</pubDate>
    </item>
    <item>
      <title>PropertyChanged 이벤트는 항상 null입니다.</title>
      <link>https://gigabyte.tistory.com/845</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PropertyChanged 이벤트는 항상 null입니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음(약어) xaml이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;TextBlock Text=&quot;{Binding Path=statusMsg, UpdateSourceTrigger=PropertyChanged}&quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;싱글톤 클래스가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class StatusMessage : INotifyPropertyChanged
{   
    private static StatusMessage instance = new StatusMessage();

    private StatusMessage() { }

    public static StatusMessage GetInstance()
    {
        return instance;
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged(string status)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(status));
        }
    }

    private string statusMessage;
    public string statusMsg
    {
        get
        {
            return statusMessage;
        }
        set
        {
            statusMessage = value;
            OnPropertyChanged(&quot;statusMsg&quot;);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 내 메인 윈도우 컨스트럭터:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;StatusMessage testMessage = StatusMessage.GetInstance();
testMessage.statusMsg = &quot;This is a test msg&quot;;    
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트 메시지를 표시하는 텍스트 블록을 가져올 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;디버깅을 통해 코드를 모니터링하면 Property Changed는 항상 늘이 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;좋은 생각 있어요?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;고마워 제롬!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Data Context를 설정하면 정상적으로 동작합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트를 위해 메인 윈도 컨스트럭터에 다음 항목을 추가했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; this.DataContext = testMessage;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오늘 이걸 우연히 만나서 시간을 허비했고, 결국 알아냈죠.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 당신과 다른 사람들의 시간을 절약하는 데 도움이 되기를 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이벤트에 가입자가 없고 단순히 이벤트를 다음과 같이 선언한 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public event EventHandler SomeEventHappened;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;8-0&quot;&gt;그러면 null 참조가 필요&lt;/strong&gt;합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제를 해결하려면 다음과 같이 선언합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public event EventHandler SomeEventHappened = delegate { };
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 다음과 같이 호출할 때 null 참조가 되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SomeEventHappened()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 패턴은 {} 위임으로 초기화하지 않고 대신 null을 확인하는 &lt;em papago-id=&quot;10-1&quot;&gt;것&lt;/em&gt;입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var eventToRaise = SomeEventHappened;
if( eventToRaise != null )
{
    SomeEventHappened()
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;OnPropertyChanged 문자열은 대소문자를 구분하므로 속성 이름과 정확히 일치해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변경해 보다&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;OnPropertyChanged(&quot;StatusMsg&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;OnPropertyChanged(&quot;statusMsg&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;14-0&quot;&gt;업데이트:&lt;/strong&gt; 또한 StatusMsg(대문자 'S')에 바인딩되어 있다는 것을 알게 되었습니다.그래서 컨트롤이 속성에 바인딩되어 있지 않은 것도 업데이트되지 않은 이유입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약을 위해:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나도 비슷한 문제가 있었지만 나의 실수는 inotify를 시행한 수업이었다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Property Changed는 비공개입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;공개하면서 내 사건이 해결됐어&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 경우엔 이렇게 하면 효과가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public partial class MainWindow : Window, INotifyPropertyChanged
{
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = this;    // this row fixed everything
    }
    ****
    Some code here with properties etc
    ***
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또 다른 점 - PropertyChanged가 null인 경우 속성을 UI 필드에 직접 할당하는 대신 개체를 DataContext에 바인드한 다음 경로를 설정해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨트롤의 데이터 바인딩 속성에 기존 데이터를 할당한 경우 PropertyChanged 이벤트가 null인 것도 확인했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;TextBlock Name=&quot;CarTireStatus&quot; Text=&quot;{Binding TireStatus}&quot; &amp;gt;Bad Text!&amp;lt;/TextBlock&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 기능은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;TextBlock Name=&quot;CarTireStatus&quot; Text=&quot;{Binding TireStatus}&quot; &amp;gt;&amp;lt;/TextBlock&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PropertyChanged 이벤트 개체를 null로 관찰할 때 확인해야 할 항목이 몇 가지 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이벤트를 발생시킬 때 인수로 전달된 속성 이름이 실제로 대상 속성의 이름과 일치하는지 확인하십시오.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;바인딩하는 속성이 포함된 개체의 인스턴스를 하나만 사용하고 있는지 확인하십시오.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;항목 2의 경우 바인딩되는 속성을 숨기는 개체의 클래스 생성자에 중단점을 배치하기만 하면 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;중단점이 여러 번 트리거되면 문제가 발생하여 실행 시 XAML을 통해 호출되는 하나의 인스턴스로만 개체의 인스턴스 수를 해결해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 이 클래스를 싱글톤 패턴으로 구현하여 런타임에 개체의 인스턴스를 하나만 보장할 수 있도록 하는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스토리를 완성하기 위해 바인딩된 &lt;strong papago-id=&quot;25-1&quot;&gt;속성&lt;/strong&gt;이 스태틱하고 PropertyChanged 이벤트가 &lt;strong papago-id=&quot;25-3&quot;&gt;스태틱하지&lt;/strong&gt; 않은 &lt;strong papago-id=&quot;25-3&quot;&gt;경우&lt;/strong&gt;에도 늘이 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한 수정은 다음과 같이 다른 스태틱이벤트를 선언하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public event PropertyChangedEventHandler PropertyChanged;
public static event PropertyChangedEventHandler StaticPropertyChanged;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PropertyChanged?.Invoke()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★★★★★★★★★★★★★★★」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;StaticPropertyChanged?.Invoke()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대상 속성이 정적인지 여부에 따라 달라집니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비슷한 문제가 있었습니다만, 위의 어느 해결책도 도움이 되지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요한 것은 빌드된 c# Propertychanged를 사용하는 것뿐입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전에 propertyChanged(우연히 변경)를 구현했는데 아무것도 표시되지 않았습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 지시에 따라 속성 이름이 올바른지 확인하고 새 값이 올바르게 할당되었는지 확인하는 경우 단일톤을 사용하여 뷰 모델의 인스턴스 하나를 보증하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;UI에서 DataContext를 성공적으로 할당했습니다. 시각적 트리가 완료된 후 속성 갱신을 강제하는 모든 작업이 완료되었는지 확인하십시오. 즉, 창의 Loaded 이벤트가 아니라 속성 새로 고침을 버튼으로 이동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;같은 문제가 있었기 때문에 이 말을 하게 되었습니다.Infragistics NetAdvantage 리본 창의 Loaded 이벤트에서 뷰 모델 데이터 속성을 새로 고쳤을 때 PropertyChanged 이벤트가 항상 null이었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/1512627/&lt;a href=&quot;https://stackoverflow.com/questions/1512627/propertychanged-event-always-null&quot; target=&quot;_blank&quot; papago-id=&quot;31-1&quot;&gt;propertychanged-event-always-null&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>WPF</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/845</guid>
      <comments>https://gigabyte.tistory.com/845#entry845comment</comments>
      <pubDate>Wed, 19 Apr 2023 23:08:57 +0900</pubDate>
    </item>
    <item>
      <title>마우스 커서로 WPF 창을 최대화하려면 어떻게 해야 합니까?</title>
      <link>https://gigabyte.tistory.com/844</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마우스 커서로 WPF 창을 최대화하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Window &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.windows.window.windowstartuplocation.aspx?ppud=4&quot; rel=&quot;noreferrer&quot; papago-id=&quot;1-1&quot;&gt;Startup Location&lt;/a&gt; 속성의 MSDN 매뉴얼에 따라 다음 절차를 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CenterScreen을 설정하면 마우스 커서가 포함된 화면 중앙에 창이 배치됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.windows.windowstartuplocation.centerscreen.aspx?ppud=4&quot; rel=&quot;noreferrer&quot; papago-id=&quot;3-1&quot;&gt;CenterScreen&lt;/a&gt; 필드의 MSDN 문서 자체는 다음과 같이 명확하게 정의하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;창의 시작 위치는 창이 열리는 화면 중앙입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한 테스트에서는 이것이 정상적으로 동작하고 있는 것을 알 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Main Window.xaml&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Window x:Class=&quot;CenterScreenTest.MainWindow&quot;
    xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
    xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;&amp;gt;

    &amp;lt;Button Click=&quot;button_Click&quot;&amp;gt;Open Window&amp;lt;/Button&amp;gt;
&amp;lt;/Window&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MainWindow.xaml.cs&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;using System.Windows;

namespace CenterScreenTest
{
    public partial class MainWindow
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        void button_Click(object sender, RoutedEventArgs e)
        {
            Window window = new Window();
            window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
            window.Show();
        }
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;듀얼 모니터 시스템에서 테스트하면 버튼을 클릭하면 새 창이 마우스 커서가 있는 화면 중앙에 표시됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;8-1&quot;&gt;그게&lt;/em&gt; 바로 작동 방식이야&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;9-0&quot;&gt;그러나&lt;/strong&gt; 창을 표시하기 전에 최대화하도록 설정하면 새 창은 응용 프로그램을 실행한 디스플레이에서만 최대화됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;button_클릭 이벤트핸들러를 다음과 같이 변경하여 의미를 확인합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;void button_Click(object sender, RoutedEventArgs e)
{
    Window window = new Window();
    window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
    window.WindowState = WindowState.Maximized;
    window.Show();
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;10-0&quot;&gt;이제 마우스 커서가 버튼을 클릭할 때 어디에 있든 응용 프로그램이 실행되는 화면에서만 창이 최대화됩니다.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;창을 표시한 후 창 상태를 &lt;em papago-id=&quot;10-2&quot;&gt;최대값&lt;/em&gt;으로 설정하면 CenterScreen이 올바르게 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 사용자가 창을 최대화하는 것과 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;void button_Click(object sender, RoutedEventArgs e)
{
    Window window = new Window();
    window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
    window.Show();
    window.WindowState = WindowState.Maximized;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 여기서의 문제는 윈도우를 표시한 후 최대화하려면 시간이 더 오래 걸리고 내 앱과 같은 앱에서는 윈도우가 즉시 제자리로 들어가야 한다는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해결책을 아는 사람?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;XAML로 설정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Window Height=&quot;300&quot; Width=&quot;300&quot; WindowState=&quot;Maximized&quot;&amp;gt;
&amp;lt;/Window&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SizeToContent를 &lt;em papago-id=&quot;14-3&quot;&gt;수동&lt;/em&gt;으로 &lt;em papago-id=&quot;14-1&quot;&gt;설정&lt;/em&gt;해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은 다른 답변을 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MSDN WPF 포럼에서도 같은 질문을 하고, 다음과 &lt;a href=&quot;http://social.msdn.microsoft.com/Forums/en/wpf/thread/4d4bb558-cd1e-4f5c-9a4c-5151aad7f97b&quot; papago-id=&quot;15-1&quot; rel=&quot;noreferrer&quot;&gt;같은 훌륭한&lt;/a&gt; 회피책으로 &lt;a href=&quot;http://social.msdn.microsoft.com/Forums/en/wpf/thread/4d4bb558-cd1e-4f5c-9a4c-5151aad7f97b&quot; papago-id=&quot;15-1&quot; rel=&quot;noreferrer&quot;&gt;답변&lt;/a&gt;을 얻었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;void button_Click(object sender, RoutedEventArgs e)
{
    Window window = new Window();
    window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
    window.SourceInitialized += (s, a) =&amp;gt; window.WindowState = WindowState.Maximized;
    window.Show();
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또, Microsoft 에 이 &lt;a href=&quot;https://connect.microsoft.com/VisualStudio/feedback/details/571758/windowstartuplocation-centerscreen-does-not-work-if-window-is-maximized&quot; rel=&quot;noreferrer&quot; papago-id=&quot;16-1&quot;&gt;문제에 관한&lt;/a&gt; 버그 리포트를 제출하고 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;창부터 시작하여 XAML 마크업에 다음과 같이 추가하여 최대화할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Window Height=&quot;300&quot; Width=&quot;300&quot; 
  WindowState=&quot;Maximized&quot;
  SizeToContent=&quot;Manual&quot;&amp;gt;
&amp;lt;/Window&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;18-1&quot;&gt;속성&lt;/em&gt; WindowState는 &lt;em papago-id=&quot;18-3&quot;&gt;SizeToContent&lt;/em&gt;의 하위 항목입니다. 즉, 실제 최대화를 원하는 경우 &lt;em papago-id=&quot;18-5&quot;&gt;후자&lt;/em&gt;의 Manual을 설정해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 &lt;em papago-id=&quot;18-7&quot;&gt;SizeToContent&lt;/em&gt;를 높이 &lt;em papago-id=&quot;18-11&quot;&gt;또는&lt;/em&gt; &lt;em papago-id=&quot;18-9&quot;&gt;너비&lt;/em&gt;로 설정할 수 있습니다(한 차원에서는 창을 최대화하고 다른 차원에서는 컨트롤의 크기를 기반으로 계산된 크기를 따르는 경우).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Window Height=&quot;300&quot; Width=&quot;300&quot; 
  WindowState=&quot;Maximized&quot;
  SizeToContent=&quot;Width&quot;&amp;gt;
&amp;lt;/Window&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 경우 창 스팬이 위에서 아래로 이동하지만 반드시 왼쪽에서 오른쪽 가장자리로 이동하지는 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;키 조합 ++&lt;kbd papago-id=&quot;19-3&quot;&gt;Shift&lt;/kbd&gt;&lt;kbd papago-id=&quot;19-5&quot;&gt;Up&lt;/kbd&gt; 를 누르는 것과 같습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SizeToContent가 SizeToContent로 설정되어 있는지 확인합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;수동, 그렇지 않으면 작동하지 않을 거야.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3121900/&lt;a href=&quot;https://stackoverflow.com/questions/3121900/how-can-i-make-a-wpf-window-maximized-on-the-screen-with-the-mouse-cursor&quot; target=&quot;_blank&quot; papago-id=&quot;21-1&quot;&gt;how-can-i-make-a-wpf-window-maximized-on-the-screen-with-the-mouse-cursor&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>WPF</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/844</guid>
      <comments>https://gigabyte.tistory.com/844#entry844comment</comments>
      <pubDate>Wed, 19 Apr 2023 23:08:50 +0900</pubDate>
    </item>
    <item>
      <title>WPF의 페이지 로드 시 콤보 상자에 기본 텍스트 &amp;quot;--Select Team --&amp;quot;을 표시하는 방법</title>
      <link>https://gigabyte.tistory.com/843</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WPF의 페이지 로드 시 콤보 상자에 기본 텍스트 &quot;--Select Team --&quot;을 표시하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WPF 앱의 MVP 앱에는 콤보 박스가 있어 데이터베이스에서 가져온 데이터를 표시합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;콤보 상자에 추가된 항목을 표시하기 전에 다음과 같은 기본 텍스트를 표시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot; --팀 선택 --&quot;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 페이지 로드 시 텍스트가 표시되고 선택 시 텍스트가 지워지고 항목이 표시되어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DB에서 데이터를 선택하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 콤보 상자에서 항목을 선택할 때까지 기본 텍스트를 표시해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안내 부탁드립니다&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 쉬운 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;ComboBox Name=&quot;MyComboBox&quot;
 IsEditable=&quot;True&quot;
 IsReadOnly=&quot;True&quot;
 Text=&quot;-- Select Team --&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 옵션을 추가해야 하는 것은 분명하지만 이것이 가장 간단한 방법입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이 방법에는 콤보 상자 내의 텍스트는 편집할 수 없지만 선택할 수 있다는 단점이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 지금까지 제가 발견한 모든 대안들의 낮은 품질과 복잡성을 고려할 때, 이것이 아마도 가장 좋은 선택일 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;할 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;IValueConverter&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Grid&amp;gt;
   &amp;lt;ComboBox
       x:Name=&quot;comboBox1&quot;
       ItemsSource=&quot;{Binding MyItemSource}&quot;  /&amp;gt;
   &amp;lt;TextBlock
       Visibility=&quot;{Binding SelectedItem, ElementName=comboBox1, Converter={StaticResource NullToVisibilityConverter}}&quot;
       IsHitTestVisible=&quot;False&quot;
       Text=&quot;... Select Team ...&quot; /&amp;gt;
&amp;lt;/Grid&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 다시 사용할 수 있는 컨버터 클래스가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class NullToVisibilityConverter : IValueConverter
{
    #region Implementation of IValueConverter

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value == null ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }

    #endregion
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막으로 리소스 섹션에서 컨버터를 선언해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Converters:NullToVisibilityConverter x:Key=&quot;NullToVisibilityConverter&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 Converters는 컨버터 클래스를 배치한 장소입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;xmlns:Converters=&quot;clr-namespace:MyProject.Resources.Converters&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 접근법의 가장 좋은 점은 뒤에 있는 코드에 코드가 반복되지 않는다는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Tri Q의 답변은 마음에 들지만, 이러한 가치 변환기를 사용하는 것은 매우 귀찮습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PaulB는 이벤트 핸들러를 사용했지만, 그것도 불필요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;순수 XAML 솔루션은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;ContentControl Content=&quot;{Binding YourChoices}&quot;&amp;gt;
    &amp;lt;ContentControl.ContentTemplate&amp;gt;
        &amp;lt;DataTemplate&amp;gt;
            &amp;lt;Grid&amp;gt;
                &amp;lt;ComboBox x:Name=&quot;cb&quot; ItemsSource=&quot;{Binding}&quot;/&amp;gt;
                &amp;lt;TextBlock x:Name=&quot;tb&quot; Text=&quot;Select Something&quot; IsHitTestVisible=&quot;False&quot; Visibility=&quot;Hidden&quot;/&amp;gt;
            &amp;lt;/Grid&amp;gt;
            &amp;lt;DataTemplate.Triggers&amp;gt;
                &amp;lt;Trigger SourceName=&quot;cb&quot; Property=&quot;SelectedItem&quot; Value=&quot;{x:Null}&quot;&amp;gt;
                    &amp;lt;Setter TargetName=&quot;tb&quot; Property=&quot;Visibility&quot; Value=&quot;Visible&quot;/&amp;gt;
                &amp;lt;/Trigger&amp;gt;
            &amp;lt;/DataTemplate.Triggers&amp;gt;
        &amp;lt;/DataTemplate&amp;gt;
    &amp;lt;/ContentControl.ContentTemplate&amp;gt; 
&amp;lt;/ContentControl&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아무도 순수한 자말 용액이 복잡해야 한다고 말하지 않았다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 텍스트 상자에 데이터 트리거가 하나 있는 간단한 예가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여백과 원하는 위치&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Grid&amp;gt;
    &amp;lt;ComboBox x:Name=&quot;mybox&quot; ItemsSource=&quot;{Binding}&quot;/&amp;gt;
    &amp;lt;TextBlock Text=&quot;Select Something&quot; IsHitTestVisible=&quot;False&quot;&amp;gt;
           &amp;lt;TextBlock.Style&amp;gt;
                &amp;lt;Style TargetType=&quot;TextBlock&quot;&amp;gt;
                      &amp;lt;Setter Property=&quot;Visibility&quot; Value=&quot;Hidden&quot;/&amp;gt;
                      &amp;lt;Style.Triggers&amp;gt;
                            &amp;lt;DataTrigger Binding=&quot;{Binding ElementName=mybox,Path=SelectedItem}&quot; Value=&quot;{x:Null}&quot;&amp;gt;
                                  &amp;lt;Setter Property=&quot;Visibility&quot; Value=&quot;Visible&quot;/&amp;gt;
                             &amp;lt;/DataTrigger&amp;gt;
                      &amp;lt;/Style.Triggers&amp;gt;
                &amp;lt;/Style&amp;gt;
           &amp;lt;/TextBlock.Style&amp;gt;
     &amp;lt;/TextBlock&amp;gt;
&amp;lt;/Grid&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;IsEditable=&quot;True&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ComboBox&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;「&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;」. 「 」가 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Text&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 of의 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ComboBox&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;직접 지원되는지는 알 수 없지만 선택 항목이 null이 아닌 경우 레이블로 콤보를 덮어쓰고 숨김으로 설정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Grid&amp;gt;
   &amp;lt;ComboBox Text=&quot;Test&quot; Height=&quot;23&quot; SelectionChanged=&quot;comboBox1_SelectionChanged&quot; Name=&quot;comboBox1&quot; VerticalAlignment=&quot;Top&quot; ItemsSource=&quot;{Binding Source=ABCD}&quot;  /&amp;gt;
   &amp;lt;TextBlock IsHitTestVisible=&quot;False&quot; Margin=&quot;10,5,0,0&quot; Name=&quot;txtSelectTeam&quot; Foreground=&quot;Gray&quot; Text=&quot;Select Team ...&quot;&amp;gt;&amp;lt;/TextBlock&amp;gt;
&amp;lt;/Grid&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 선택한 핸들러에서 변경...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    txtSelectTeam.Visibility = comboBox1.SelectedItem == null ? Visibility.Visible : Visibility.Hidden;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/16782339/3283203&quot; papago-id=&quot;25-1&quot;&gt;IceForge의 답변&lt;/a&gt;을 바탕으로 재사용 가능한 솔루션을 준비했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;xaml 스타일:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Style x:Key=&quot;ComboBoxSelectOverlay&quot; TargetType=&quot;TextBlock&quot;&amp;gt;
    &amp;lt;Setter Property=&quot;Grid.ZIndex&quot; Value=&quot;10&quot;/&amp;gt;
    &amp;lt;Setter Property=&quot;Foreground&quot; Value=&quot;{x:Static SystemColors.GrayTextBrush}&quot;/&amp;gt;
    &amp;lt;Setter Property=&quot;Margin&quot; Value=&quot;6,4,10,0&quot;/&amp;gt;
    &amp;lt;Setter Property=&quot;IsHitTestVisible&quot; Value=&quot;False&quot;/&amp;gt;
    &amp;lt;Setter Property=&quot;Visibility&quot; Value=&quot;Hidden&quot;/&amp;gt;
    &amp;lt;Style.Triggers&amp;gt;
        &amp;lt;DataTrigger Binding=&quot;{Binding}&quot; Value=&quot;{x:Null}&quot;&amp;gt;
            &amp;lt;Setter Property=&quot;Visibility&quot; Value=&quot;Visible&quot;/&amp;gt;
        &amp;lt;/DataTrigger&amp;gt;
    &amp;lt;/Style.Triggers&amp;gt;
&amp;lt;/Style&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용 예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Grid&amp;gt;
     &amp;lt;ComboBox x:Name=&quot;cmb&quot;
               ItemsSource=&quot;{Binding Teams}&quot; 
               SelectedItem=&quot;{Binding SelectedTeam}&quot;/&amp;gt;
     &amp;lt;TextBlock DataContext=&quot;{Binding ElementName=cmb,Path=SelectedItem}&quot;
               Text=&quot; -- Select Team --&quot; 
               Style=&quot;{StaticResource ComboBoxSelectOverlay}&quot;/&amp;gt;
&amp;lt;/Grid&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;콤보 박스로는 시도하지 않았지만 다른 컨트롤로도 작동했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.ageektrapped.com/blog/the-missing-net-4-cue-banner-in-wpf-i-mean-watermark-in-wpf/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시대에 뒤떨어진 블로그 포스트&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그는 여기에 비침을 표시하기 위해 장식 레이어를 사용합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HappyNomad의 솔루션은 매우 좋았고, 결국 이 약간 다른 솔루션에 도달하는 데 도움을 주었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;ComboBox x:Name=&quot;ComboBoxUploadProject&quot; 
    Grid.Row=&quot;2&quot;
    Width=&quot;200&quot; 
    Height=&quot;23&quot;                           
    Margin=&quot;64,0,0,0&quot;
    ItemsSource=&quot;{Binding projectList}&quot;
    SelectedValue =&quot;{Binding projectSelect}&quot; 
    DisplayMemberPath=&quot;projectName&quot;
    SelectedValuePath=&quot;projectId&quot;
    &amp;gt;
    &amp;lt;ComboBox.Template&amp;gt;
        &amp;lt;ControlTemplate TargetType=&quot;ComboBox&quot;&amp;gt;
            &amp;lt;Grid&amp;gt;
                &amp;lt;ComboBox x:Name=&quot;cb&quot; 
                    DataContext=&quot;{Binding RelativeSource={RelativeSource TemplatedParent}}&quot; 
                    ItemsSource=&quot;{Binding ItemsSource, RelativeSource={RelativeSource TemplatedParent}}&quot;
                    SelectedValue =&quot;{Binding SelectedValue, RelativeSource={RelativeSource TemplatedParent}}&quot; 
                    DisplayMemberPath=&quot;projectName&quot;
                    SelectedValuePath=&quot;projectId&quot;
                    /&amp;gt;
                &amp;lt;TextBlock x:Name=&quot;tb&quot; Text=&quot;Select Item...&quot; Margin=&quot;3,3,0,0&quot; IsHitTestVisible=&quot;False&quot; Visibility=&quot;Hidden&quot;/&amp;gt;
            &amp;lt;/Grid&amp;gt;
            &amp;lt;ControlTemplate.Triggers&amp;gt;
                &amp;lt;Trigger SourceName=&quot;cb&quot; Property=&quot;SelectedItem&quot; Value=&quot;{x:Null}&quot;&amp;gt;
                    &amp;lt;Setter TargetName=&quot;tb&quot; Property=&quot;Visibility&quot; Value=&quot;Visible&quot;/&amp;gt;
                &amp;lt;/Trigger&amp;gt;
            &amp;lt;/ControlTemplate.Triggers&amp;gt;
        &amp;lt;/ControlTemplate&amp;gt;
    &amp;lt;/ComboBox.Template&amp;gt;
&amp;lt;/ComboBox&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 쉬운 방법은 CompositeCollection을 사용하여 데이터베이스에서 기본 텍스트와 데이터를 ComboBox에서 직접 병합하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    &amp;lt;ComboBox x:Name=&quot;SelectTeamComboBox&quot; SelectedIndex=&quot;0&quot;&amp;gt;
        &amp;lt;ComboBox.ItemsSource&amp;gt;
            &amp;lt;CompositeCollection&amp;gt;
                &amp;lt;ComboBoxItem Visibility=&quot;Collapsed&quot;&amp;gt;-- Select Team --&amp;lt;/ComboBoxItem&amp;gt;
                &amp;lt;CollectionContainer Collection=&quot;{Binding Source={StaticResource ResourceKey=MyComboOptions}}&quot;/&amp;gt;
            &amp;lt;/CompositeCollection&amp;gt;
        &amp;lt;/ComboBox.ItemsSource&amp;gt;
    &amp;lt;/ComboBox&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 리소스에서 StaticResource를 정의하여 CollectionContainer의 직접 바인딩이 제대로 작동하지 않기 때문에 ComboBox 옵션을 DataContext에 바인딩합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Window.Resources&amp;gt;
    &amp;lt;CollectionViewSource Source=&quot;{Binding}&quot; x:Key=&quot;MyComboOptions&quot; /&amp;gt;
&amp;lt;/Window.Resources&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 xaml에서만 ComboBox 옵션을 정의할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   &amp;lt;ComboBox x:Name=&quot;SelectTeamComboBox&quot; SelectedIndex=&quot;0&quot;&amp;gt;
        &amp;lt;ComboBox.ItemsSource&amp;gt;
            &amp;lt;CompositeCollection&amp;gt;
                &amp;lt;ComboBoxItem Visibility=&quot;Collapsed&quot;&amp;gt;-- Select Team --&amp;lt;/ComboBoxItem&amp;gt;
                &amp;lt;ComboBoxItem &amp;gt;Option 1&amp;lt;/ComboBoxItem&amp;gt;
                &amp;lt;ComboBoxItem &amp;gt;Option 2&amp;lt;/ComboBoxItem&amp;gt;
            &amp;lt;/CompositeCollection&amp;gt;
        &amp;lt;/ComboBox.ItemsSource&amp;gt;
    &amp;lt;/ComboBox&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 사항을 권장합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동작을 정의하다&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public static class ComboBoxBehaviors
{
    public static readonly DependencyProperty DefaultTextProperty =
        DependencyProperty.RegisterAttached(&quot;DefaultText&quot;, typeof(String), typeof(ComboBox), new PropertyMetadata(null));

    public static String GetDefaultText(DependencyObject obj)
    {
        return (String)obj.GetValue(DefaultTextProperty);
    }

    public static void SetDefaultText(DependencyObject obj, String value)
    {
        var combo = (ComboBox)obj;

        RefreshDefaultText(combo, value);

        combo.SelectionChanged += (sender, _) =&amp;gt; RefreshDefaultText((ComboBox)sender, GetDefaultText((ComboBox)sender));

        obj.SetValue(DefaultTextProperty, value);
    }

    static void RefreshDefaultText(ComboBox combo, string text)
    {
        // if item is selected and DefaultText is set
        if (combo.SelectedIndex == -1 &amp;amp;&amp;amp; !String.IsNullOrEmpty(text))
        {
            // Show DefaultText
            var visual = new TextBlock()
            {
                FontStyle = FontStyles.Italic,
                Text = text,
                Foreground = Brushes.Gray
            };

            combo.Background = new VisualBrush(visual)
            {
                Stretch = Stretch.None,
                AlignmentX = AlignmentX.Left,
                AlignmentY = AlignmentY.Center,
                Transform = new TranslateTransform(3, 0)
            };
        }
        else
        {
            // Hide DefaultText
            combo.Background = null;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 동작&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;ComboBox Name=&quot;cmb&quot; Margin=&quot;72,121,0,0&quot; VerticalAlignment=&quot;Top&quot;
          local:ComboBoxBehaviors.DefaultText=&quot;-- Select Team --&quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/16782339/3283203&quot; papago-id=&quot;38-0&quot;&gt;IceForge의 대답&lt;/a&gt;은 매우 비슷했고, AFIK가 이 문제에 대한 가장 쉬운 해결책입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 동작하고 있지 않기 때문에(적어도, 텍스트는 실제로 표시되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결국 콤보 상자의 선택한 항목이 null이 아닌 경우 텍스트 블록의 &quot;가시성&quot; 속성을 &quot;숨김&quot;으로 설정할 수 없습니다. 기본적으로는 &lt;a href=&quot;https://stackoverflow.com/a/1237774/3283203&quot; papago-id=&quot;39-1&quot;&gt;트리거&lt;/a&gt;에서 null이 &lt;a href=&quot;https://stackoverflow.com/a/1237774/3283203&quot; papago-id=&quot;39-1&quot;&gt;아님을 &lt;/a&gt;선택할 수 &lt;a href=&quot;https://stackoverflow.com/a/1237774/3283203&quot; papago-id=&quot;39-1&quot;&gt;없으므로&lt;/a&gt; 트리거와 동일한 위치에서 XAML의 Setter를 사용하여 이러한 방식으로 설정해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 그를 기반으로 한 실제 솔루션입니다. 누락된 세터는 트리거 바로 앞에 배치됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;ComboBox x:Name=&quot;combo&quot;/&amp;gt;
&amp;lt;TextBlock Text=&quot;--Select Team--&quot; IsHitTestVisible=&quot;False&quot;&amp;gt;
    &amp;lt;TextBlock.Style&amp;gt;
        &amp;lt;Style TargetType=&quot;TextBlock&quot;&amp;gt;

            &amp;lt;Style.Setters&amp;gt;
                &amp;lt;Setter Property=&quot;Visibility&quot; Value=&quot;Hidden&quot;/&amp;gt;
            &amp;lt;/Style.Setters&amp;gt;

            &amp;lt;Style.Triggers&amp;gt;
                &amp;lt;DataTrigger Binding=&quot;{Binding ElementName=combo,Path=SelectedItem}&quot; Value=&quot;{x:Null}&quot;&amp;gt;
                    &amp;lt;Setter Property=&quot;Visibility&quot; Value=&quot;Visible&quot;/&amp;gt;
                &amp;lt;/DataTrigger&amp;gt;
            &amp;lt;/Style.Triggers&amp;gt;
        &amp;lt;/Style&amp;gt;
    &amp;lt;/TextBlock.Style&amp;gt;
&amp;lt;/TextBlock&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;베스트 프랙티스가 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 잘 작동한다...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;ComboBox GotFocus=&quot;Focused&quot;  x:Name=&quot;combobox1&quot; HorizontalAlignment=&quot;Left&quot; Margin=&quot;8,29,0,0&quot; VerticalAlignment=&quot;Top&quot; Width=&quot;128&quot; Height=&quot;117&quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드 배후에 있다&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public partial class MainWindow : Window
{
    bool clearonce = true;
    bool fillonce = true;
    public MainWindow()
    {
        this.InitializeComponent();          
        combobox1.Items.Insert(0, &quot; -- Select Team --&quot;);
        combobox1.SelectedIndex = 0;
    }

    private void Focused(object sender, RoutedEventArgs e)
    {
            if(clearonce)
            {
                combobox1.Items.Clear();
                clearonce = false;
            }
            if (fillonce)
            {
              //fill the combobox items here 
                for (int i = 0; i &amp;lt; 10; i++)
                {
                    combobox1.Items.Insert(i, i);
                }
                fillonce = false;
            }           
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 &lt;a href=&quot;https://stackoverflow.com/a/836463/724485&quot; papago-id=&quot;43-1&quot;&gt;게시물에 언급&lt;/a&gt;된 워터마크가 이 경우에 적합하다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;약간의 코드가 필요하지만 콤보박스나 텍스트박스(패스워드박스도 포함)에 재사용할 수 있으므로 이 방법을 선호합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트에서 Is Null Converter 클래스를 사용하고 있는데 효과가 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에 c#의 코드가 있습니다.사용된 트리거는 null이 아닌 값을 지원하지 않기 때문에 Converter라는 이름의 폴더를 만들고 그 폴더에 이 클래스를 추가합니다.Is Null Converter는 이 작업을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; public class IsNullConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return (value == null);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new InvalidOperationException(&quot;IsNullConverter can only be used OneWay.&quot;);
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;xaml 파일에 네임스페이스를 이렇게 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;xmlns:Converters=&quot;clr-namespace:TymeSheet.Converter&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수단&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;xmlns:Converters=&quot;clr-namespace:YourProjectName.Converter&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리소스 아래의 이 행을 사용하여 xaml 코드를 통해 사용할 수 있도록 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Converters:IsNullConverter x:Key=&quot;isNullConverter&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 xaml 코드입니다.여기서 트리거를 사용했기 때문에 콤보박스에서 항목을 선택할 때마다 텍스트의 가시성이 거짓이 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;TextBlock Text=&quot;Select Project&quot; IsHitTestVisible=&quot;False&quot; FontFamily=&quot;/TimeSheet;component/Resources/#Open Sans&quot; FontSize=&quot;14&quot; Canvas.Right=&quot;191&quot; Canvas.Top=&quot;22&quot;&amp;gt;
                        &amp;lt;TextBlock.Resources&amp;gt;
                            &amp;lt;Converters:IsNullConverter x:Key=&quot;isNullConverter&quot;/&amp;gt;
                        &amp;lt;/TextBlock.Resources&amp;gt;
                        &amp;lt;TextBlock.Style&amp;gt;
                            &amp;lt;Style TargetType=&quot;TextBlock&quot;&amp;gt;
                                &amp;lt;Style.Triggers&amp;gt;
                                    &amp;lt;DataTrigger Binding=&quot;{Binding ElementName=ProjectComboBox,Path=SelectedItem,Converter={StaticResource isNullConverter}}&quot; Value=&quot;False&quot;&amp;gt;
                                        &amp;lt;Setter Property=&quot;Visibility&quot; Value=&quot;Hidden&quot;/&amp;gt;
                                    &amp;lt;/DataTrigger&amp;gt;
                                &amp;lt;/Style.Triggers&amp;gt;
                            &amp;lt;/Style&amp;gt;
                        &amp;lt;/TextBlock.Style&amp;gt;
                    &amp;lt;/TextBlock&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;//X&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AML 드 am&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;/p&gt; 
&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;// View Model 코드&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    private CategoryModel _SelectedCategory;
    public CategoryModel SelectedCategory
    {
        get { return _SelectedCategory; }
        set
        {
            _SelectedCategory = value;
            OnPropertyChanged(&quot;SelectedCategory&quot;);
        }
    }

    private ObservableCollection&amp;lt;CategoryModel&amp;gt; _Categories;
    public ObservableCollection&amp;lt;CategoryModel&amp;gt; Categories
    {
        get { return _Categories; }
        set
        {
            _Categories = value;
            _Categories.Insert(0, new CategoryModel()
            {
                CategoryId = 0,
                CategoryName = &quot; -- Select Category -- &quot;
            });
            SelectedCategory = _Categories[0];
            OnPropertyChanged(&quot;Categories&quot;);

        }
    }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;조금 늦었지만..&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보다 간단한 방법은 IsDummy=true 매개 변수를 사용하여 목록에 더미 데이터 항목을 추가하고 HitTestVisible이 아니며 HitTestVisible의 높이가 1픽셀(Converter 사용)이므로 표시되지 않도록 하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Selection Changed에 등록하고 인덱스를 더미 아이템인덱스로 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 매력적으로 작동하며, 이렇게 하면 콤보 박스의 스타일과 색상, 그리고 당신의 어플리케이션 테마를 망치지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;InitializeComponent()
yourcombobox.text=&quot; -- Select Team --&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 코드는 이를 실현하는 가장 간단한 방법을 보여줍니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;창 로드 후 를 사용하여 콤보 상자의 텍스트를 선언합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;콤보 상자의 텍스트 속성입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 DatePicker, Textbox 및 기타 컨트롤로도 확장할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집: 아래 코멘트에 따르면 이는 해결책이 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게 작동시켰는지 확실치 않고 프로젝트도 확인할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최신 XAML에 대한 답변을 업데이트해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 SO 질문을 찾아 이 질문에 대한 해결책을 찾아본 결과 업데이트된 XAML 사양에는 단순한 솔루션이 포함되어 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 &quot;Placeholder&quot;라는 속성을 사용하여 이 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 간단합니다(Visual Studio 2015).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;ComboBox x:Name=&quot;Selection&quot; PlaceholderText=&quot;Select...&quot;&amp;gt;
    &amp;lt;x:String&amp;gt;Item 1&amp;lt;/x:String&amp;gt;
    &amp;lt;x:String&amp;gt;Item 2&amp;lt;/x:String&amp;gt;
    &amp;lt;x:String&amp;gt;Item 3&amp;lt;/x:String&amp;gt;
&amp;lt;/ComboBox&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;콤보박스를 이렇게 코드 뒤에 있는 데이터베이스 데이터로 바인딩하기 전에 이 작업을 수행했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Combobox.Items.Add(&quot;-- Select Team --&quot;);
Combobox.SelectedIndex = 0;
&lt;/code&gt;&lt;/pre&gt;&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;콤보 박스 위에 라벨을 붙입니다.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;레이블의 내용을 콤보 상자 텍스트 속성에 바인딩합니다.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;콤보 상자의 불투명도를 0, Opacity=0으로 설정합니다.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;콤보 상자에 기본 텍스트 쓰기 텍스트 속성&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;      &amp;lt;ComboBox Name=&quot;cb&quot;
        Text=&quot;--Select Team--&quot; Opacity=&quot;0&quot; 
        Height=&quot;40&quot; Width=&quot;140&quot; &amp;gt;
         &amp;lt;ComboBoxItem Content=&quot;Manchester United&quot; /&amp;gt;
         &amp;lt;ComboBoxItem Content=&quot;Lester&quot; /&amp;gt;
     &amp;lt;/ComboBox&amp;gt;
 &amp;lt;/Grid&amp;gt;
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 오래된 것이지만, MVVM 스타일의 아이디어가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Stylet MVVM 프레임워크를 사용하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;표시 내용:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;UserControl x:Class=&quot;ComboBoxWithPlaceholderTextView&quot;
         xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
         xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
         xmlns:mc=&quot;http://schemas.openxmlformats.org/markup-compatibility/2006&quot; 
         xmlns:d=&quot;http://schemas.microsoft.com/expression/blend/2008&quot;
         xmlns:s=&quot;https://github.com/canton7/Stylet&quot;
         mc:Ignorable=&quot;d&quot;
         &amp;gt;
&amp;lt;Grid&amp;gt;
    &amp;lt;ComboBox
                ItemsSource=&quot;{Binding ItemsSource}&quot;
                SelectedItem=&quot;{Binding SelectedItem}&quot;
                DropDownOpened=&quot;{s:Action DropDownOpened}&quot;
                DropDownClosed=&quot;{s:Action DropDownClosed}&quot;
                IsDropDownOpen=&quot;{Binding IsDropDownOpened}&quot;
                /&amp;gt;

&amp;lt;/Grid&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;[ View Model ]에 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class ComboBoxWithPlaceholderTextViewModel : Screen
{
    private List&amp;lt;string&amp;gt; _itemsSource;
    private string _placeholderText;
    private string _selectedItem;
    private bool _isDropDownOpened;

    public bool IsDropDownOpened
    {
        get =&amp;gt; _isDropDownOpened;
        set
        {
            if (value == _isDropDownOpened)
            {
                return;
            }
            SetAndNotify(ref _isDropDownOpened, value);
        }
    }

    public string SelectedItem
    {
        get
        {
            return _selectedItem;
        }

        set
        {
            SetAndNotify(ref _selectedItem, value);
        }
    }

    public string PlaceholderText
    {
        get { return _placeholderText; }
        set 
        {
            if (value == _placeholderText)
            {
                return;
            }
            SetAndNotify(ref _placeholderText, value);
        }
    }

    public List&amp;lt;string&amp;gt; ItemsSource
    {
        get { return _itemsSource; }
        set 
        { 
            SetAndNotify(ref _itemsSource, value);
            if (!IsDropDownOpened &amp;amp;&amp;amp; (string.IsNullOrEmpty(SelectedItem) || !SelectedItem.Equals(PlaceholderText)))
            {
                ItemsSource.Insert(0, PlaceholderText);
                SelectedItem = ItemsSource[0];
            }
        }
    }

    public void DropDownOpened()
    {
         ItemsSource.RemoveAt(0);
        SelectedItem = null;
    }

    public void DropDownClosed()
    {
        if (SelectedItem is null)
        {
            ItemsSource.Insert(0, PlaceholderText);
            SelectedItem = ItemsSource[0];
        }
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 텍스트가 콤보에서 이스케이프되는지 여부는 신경 쓰지 않아도 되지만 자리 표시자 텍스트가 선택되었는지 여부는 신경 써야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;IsEditable 속성만 true로 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;ComboBox Name=&quot;comboBox1&quot;            
          Text=&quot;--Select Team--&quot;
          IsEditable=&quot;true&quot;  &amp;lt;---- that's all!
          IsReadOnly=&quot;true&quot;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이게 좀 오래된 건 알지만, 이런 방식은 어때?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;DataTemplate x:Key=&quot;italComboWM&quot;&amp;gt;
    &amp;lt;TextBlock FontSize=&quot;11&quot; FontFamily=&quot;Segoe UI&quot; FontStyle=&quot;Italic&quot; Text=&quot;--Select an item--&quot; /&amp;gt;
&amp;lt;/DataTemplate&amp;gt;

&amp;lt;ComboBox EmptySelectionBoxTemplate=&quot;{StaticResource italComboWM}&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/1426050/&lt;a href=&quot;https://stackoverflow.com/questions/1426050/how-to-display-default-text-select-team-in-combo-box-on-pageload-in-wpf&quot; target=&quot;_blank&quot; papago-id=&quot;71-1&quot;&gt;how-to-display-default-text-select-team-in-combo-box-on-pageload-in-wpf&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>WPF</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/843</guid>
      <comments>https://gigabyte.tistory.com/843#entry843comment</comments>
      <pubDate>Wed, 19 Apr 2023 23:08:42 +0900</pubDate>
    </item>
    <item>
      <title>한 열에서 구별 선택</title>
      <link>https://gigabyte.tistory.com/842</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 열에서 구별 선택&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL Server를 사용하여 다음을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ID  SKU     PRODUCT
=======================
1   FOO-23  Orange
2   BAR-23  Orange
3   FOO-24  Apple
4   FOO-25  Orange
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 되고 싶다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;1   FOO-23  Orange
3   FOO-24  Apple
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문으로는 거기까지 갈 수 없어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하나의 열에서만 구별을 선택하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT 
[ID],[SKU],[PRODUCT]
FROM [TestData] 
WHERE ([PRODUCT] = 
(SELECT DISTINCT [PRODUCT] FROM [TestData] WHERE ([SKU] LIKE 'FOO-%')) 
ORDER BY [ID]
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL Server 2005 이후를 사용하고 있는 경우 ROW_NUMBER()와 함께 CTE를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT  *
FROM    (SELECT ID, SKU, Product,
                ROW_NUMBER() OVER (PARTITION BY PRODUCT ORDER BY ID) AS RowNumber
         FROM   MyTable
         WHERE  SKU LIKE 'FOO%') AS a
WHERE   a.RowNumber = 1
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 간단한 해결책은 하위 쿼리를 사용하여 쿼리와 일치하는 최소 ID를 찾는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하는 서브쿼리에서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;GROUP BY&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DISTINCT&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT * FROM [TestData] WHERE [ID] IN (
   SELECT MIN([ID]) FROM [TestData]
   WHERE [SKU] LIKE 'FOO-%'
   GROUP BY [PRODUCT]
)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 시험해 보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT 
    t.*
    FROM TestData t
        INNER JOIN (SELECT
                        MIN(ID) as MinID
                        FROM TestData
                        WHERE SKU LIKE 'FOO-%'
                   ) dt ON t.ID=dt.MinID
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splited&quot;&gt;&lt;strong papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;OP가 Samle 출력을 수정한 후(이전에는 결과 행이 하나만 있었고 지금은 모두 표시됨), 다음 쿼리가 올바른 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;declare @TestData table (ID int, sku char(6), product varchar(15))
insert into @TestData values (1 ,  'FOO-23'      ,'Orange')
insert into @TestData values (2 ,  'BAR-23'      ,'Orange')
insert into @TestData values (3 ,  'FOO-24'      ,'Apple')
insert into @TestData values (4 ,  'FOO-25'      ,'Orange')

--basically the same as @Aaron Alton's answer:
SELECT
    dt.ID, dt.SKU, dt.Product
    FROM (SELECT
              ID, SKU, Product, ROW_NUMBER() OVER (PARTITION BY PRODUCT ORDER BY ID) AS RowID
              FROM @TestData
              WHERE  SKU LIKE 'FOO-%'
         ) AS dt
    WHERE dt.RowID=1
    ORDER BY dt.ID
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;6년 전에 물어봤다는 건 알지만, 지식은 여전히 지식이에요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 SQL Server 2000에서 실행해야 했기 때문에 위의 솔루션과는 다릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DECLARE @TestData TABLE([ID] int, [SKU] char(6), [Product] varchar(15))
INSERT INTO @TestData values (1 ,'FOO-23', 'Orange')
INSERT INTO @TestData values (2 ,'BAR-23', 'Orange')
INSERT INTO @TestData values (3 ,'FOO-24', 'Apple')
INSERT INTO @TestData values (4 ,'FOO-25', 'Orange')

SELECT DISTINCT  [ID] = ( SELECT TOP 1 [ID]  FROM @TestData Y WHERE Y.[Product] = X.[Product])
                ,[SKU]= ( SELECT TOP 1 [SKU] FROM @TestData Y WHERE Y.[Product] = X.[Product])
                ,[PRODUCT] 
            FROM @TestData X  
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 버전은 기본적으로 다른 몇 가지 답변과 동일하지만 일부 인라인 값을 사용하여 SQL Server Management Studio에 붙여넣기를 복사하여 테스트하고 불필요한 테이블을 생성하지 않고 테스트할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;WITH [TestData]([ID],[SKU],[PRODUCT]) AS
(
    SELECT *
    FROM (
        VALUES
        (1,   'FOO-23',  'Orange'),
        (2,   'BAR-23',  'Orange'),
        (3,   'FOO-24',  'Apple'),
        (4,   'FOO-25',  'Orange')
    )
    AS [TestData]([ID],[SKU],[PRODUCT])
)

SELECT * FROM [TestData] WHERE [ID] IN 
(
    SELECT MIN([ID]) 
    FROM [TestData] 
    GROUP BY [PRODUCT]
)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ID  SKU     PRODUCT
1   FOO-23  Orange
3   FOO-24  Apple
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 다음 사항을 무시해 왔다...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;WHERE ([SKU] LIKE 'FOO-%')
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 작성자의 코드 결함의 일부일 뿐 질문의 일부가 아니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 있는 사람들에게 도움이 될 것 같지 않아요.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;SELECT min (id) AS 'ID', min(sku) AS 'SKU', Product
    FROM TestData
    WHERE sku LIKE 'FOO%' -- If you want only the sku that matchs with FOO%
    GROUP BY product 
    ORDER BY 'ID'
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 시험해 보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;SELECT * FROM [TestData] WHERE Id IN(SELECT DISTINCT MIN(Id) FROM [TestData] GROUP BY Product)&lt;/code&gt; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/966176/&lt;a href=&quot;https://stackoverflow.com/questions/966176/select-distinct-on-one-column&quot; target=&quot;_blank&quot; papago-id=&quot;17-1&quot;&gt;select-distinct-on-one-column&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>sql-server</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/842</guid>
      <comments>https://gigabyte.tistory.com/842#entry842comment</comments>
      <pubDate>Wed, 19 Apr 2023 23:08:27 +0900</pubDate>
    </item>
    <item>
      <title>MS Word 테이블을 Excel 시트로 내보내기 위한 매크로</title>
      <link>https://gigabyte.tistory.com/841</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MS Word 테이블을 Excel 시트로 내보내기 위한 매크로&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;표가 많은 워드 문서가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 테이블을 다른 Excel 시트로 내보내기 위한 매크로 작성 방법을 아는 사람이 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;답변: http://www.mrexcel.com/forum/&lt;a href=&quot;http://www.mrexcel.com/forum/showthread.php?t=36875&quot; rel=&quot;noreferrer&quot; papago-id=&quot;2-1&quot;&gt;showthread&lt;/a&gt;.php?t=36875&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 Word에서 엑셀의 활성 워크시트로 표를 읽어내는 코드입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Word에 두 개 이상의 표가 있는 경우, Word 문서와 표 번호를 입력하라는 메시지가 나타납니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Sub ImportWordTable()
Dim wdDoc As Object
Dim wdFileName As Variant
Dim TableNo As Integer 'table number in Word
Dim iRow As Long 'row index in Excel
Dim iCol As Integer 'column index in Excel

wdFileName = Application.GetOpenFilename(&quot;Word files (*.doc),*.doc&quot;, , _
&quot;Browse for file containing table to be imported&quot;)

If wdFileName = False Then Exit Sub '(user cancelled import file browser)

Set wdDoc = GetObject(wdFileName) 'open Word file

With wdDoc
    TableNo = wdDoc.tables.Count
    If TableNo = 0 Then
        MsgBox &quot;This document contains no tables&quot;, _
        vbExclamation, &quot;Import Word Table&quot;
    ElseIf TableNo &amp;gt; 1 Then
        TableNo = InputBox(&quot;This Word document contains &quot; &amp;amp; TableNo &amp;amp; &quot; tables.&quot; &amp;amp; vbCrLf &amp;amp; _
        &quot;Enter table number of table to import&quot;, &quot;Import Word Table&quot;, &quot;1&quot;)
    End If
    With .tables(TableNo)
        'copy cell contents from Word table cells to Excel cells
        For iRow = 1 To .Rows.Count
            For iCol = 1 To .Columns.Count
                Cells(iRow, iCol) = WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text)
            Next iCol
        Next iRow
    End With
End With

Set wdDoc = Nothing

End Sub
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 매크로는 Word가 아닌 Excel에 삽입하여 워크시트나 워크북 이벤트 코드 모듈이 아닌 표준 매크로 모듈에 삽입해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 수행하려면 VBA(키보드 Alt-TMV)로 이동하여 매크로 모듈(Alt-IM)을 삽입하고 코드를 코드페인에 붙여넣습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 (Alt-TMM)과 마찬가지로 Excel 인터페이스에서 매크로를 실행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;100 이상의 페이지 테이블이 실제로 각 페이지의 개별 테이블인 경우와 같이 문서에 많은 테이블이 있는 경우, 이 코드를 쉽게 수정하여 모든 테이블을 읽을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 지금으로서는 모두 하나의 연속 테이블로 수정이 필요없기를 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;계속 탁월하게.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이먼&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;VBAexpert Excel 컨설팅 (다른 생애 : http://&lt;a href=&quot;http://damonostrander.com&quot; rel=&quot;noreferrer&quot; papago-id=&quot;8-1&quot;&gt;damonostrander&lt;/a&gt;.com )&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 테이블을 루프하여 이 &lt;a href=&quot;http://www.mrexcel.com/forum/showthread.php?t=36875&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;9-1&quot;&gt;테이블을 변경&lt;/a&gt;했습니다(선택한 테이블부터 시작).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Option Explicit

Sub ImportWordTable()

Dim wdDoc As Object
Dim wdFileName As Variant
Dim tableNo As Integer 'table number in Word
Dim iRow As Long 'row index in Excel
Dim iCol As Integer 'column index in Excel
Dim resultRow As Long
Dim tableStart As Integer
Dim tableTot As Integer

On Error Resume Next

ActiveSheet.Range(&quot;A:AZ&quot;).ClearContents

wdFileName = Application.GetOpenFilename(&quot;Word files (*.doc),*.doc&quot;, , _
&quot;Browse for file containing table to be imported&quot;)

If wdFileName = False Then Exit Sub '(user cancelled import file browser)

Set wdDoc = GetObject(wdFileName) 'open Word file

With wdDoc
    tableNo = wdDoc.tables.Count
    tableTot = wdDoc.tables.Count
    If tableNo = 0 Then
        MsgBox &quot;This document contains no tables&quot;, _
        vbExclamation, &quot;Import Word Table&quot;
    ElseIf tableNo &amp;gt; 1 Then
        tableNo = InputBox(&quot;This Word document contains &quot; &amp;amp; tableNo &amp;amp; &quot; tables.&quot; &amp;amp; vbCrLf &amp;amp; _
        &quot;Enter the table to start from&quot;, &quot;Import Word Table&quot;, &quot;1&quot;)
    End If

    resultRow = 4

    For tableStart = 1 To tableTot
        With .tables(tableStart)
            'copy cell contents from Word table cells to Excel cells
            For iRow = 1 To .Rows.Count
                For iCol = 1 To .Columns.Count
                    Cells(resultRow, iCol) = WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text)
                Next iCol
                resultRow = resultRow + 1
            Next iRow
        End With
        resultRow = resultRow + 1
    Next tableStart
End With

End Sub
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 트릭: Word에서 테이블 내의 테이블을 추출하는 방법을 알아냅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 정말 그러고 싶어?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TC&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이먼과 @Tim 정말 감사합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;docx 파일을 열도록 수정하고 사용자가 이스케이프를 확인한 후 워크시트 클리어 라인을 이동했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최종 코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Option Explicit

Sub ImportWordTable()

Dim wdDoc As Object
Dim wdFileName As Variant
Dim tableNo As Integer      'table number in Word
Dim iRow As Long            'row index in Excel
Dim iCol As Integer         'column index in Excel
Dim resultRow As Long
Dim tableStart As Integer
Dim tableTot As Integer

On Error Resume Next

wdFileName = Application.GetOpenFilename(&quot;Word files (*.docx),*.docx&quot;, , _
&quot;Browse for file containing table to be imported&quot;)

If wdFileName = False Then Exit Sub '(user cancelled import file browser)

ActiveSheet.Range(&quot;A:AZ&quot;).ClearContents

Set wdDoc = GetObject(wdFileName) 'open Word file

With wdDoc
    tableNo = wdDoc.tables.Count
    tableTot = wdDoc.tables.Count
    If tableNo = 0 Then
        MsgBox &quot;This document contains no tables&quot;, _
        vbExclamation, &quot;Import Word Table&quot;
    ElseIf tableNo &amp;gt; 1 Then
        tableNo = InputBox(&quot;This Word document contains &quot; &amp;amp; tableNo &amp;amp; &quot; tables.&quot; &amp;amp; vbCrLf &amp;amp; _
        &quot;Enter the table to start from&quot;, &quot;Import Word Table&quot;, &quot;1&quot;)
    End If

    resultRow = 4

    For tableStart = tableNo To tableTot
        With .tables(tableStart)
            'copy cell contents from Word table cells to Excel cells
            For iRow = 1 To .Rows.Count
                For iCol = 1 To .Columns.Count
                    Cells(resultRow, iCol) = WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text)
                Next iCol
                resultRow = resultRow + 1
            Next iRow
        End With
        resultRow = resultRow + 1
    Next tableStart
End With

End Sub
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드 섹션은 각 테이블을 루프하여 Excel로 복사하는 섹션입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블 번호를 카운터로 사용하여 참조하는 워크시트를 동적으로 업데이트하는 워크시트 개체를 생성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;With .tables(TableNo)
'copy cell contents from Word table cells to Excel cells
For iRow = 1 To .Rows.Count
For iCol = 1 To .Columns.Count
Cells(iRow, iCol) = WorksheetFunction.Clean(.cell(iRow, iCol).Range.Text)
Next iCol
Next iRow
End With
End With
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/4465212/&lt;a href=&quot;https://stackoverflow.com/questions/4465212/macro-to-export-ms-word-tables-to-excel-sheets&quot; target=&quot;_blank&quot; papago-id=&quot;16-1&quot;&gt;macro-to-export-ms-word-tables-to-excel-sheets&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Excel</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/841</guid>
      <comments>https://gigabyte.tistory.com/841#entry841comment</comments>
      <pubDate>Wed, 19 Apr 2023 23:08:19 +0900</pubDate>
    </item>
    <item>
      <title>Swift: 스위치 문의 테스트 클래스 유형</title>
      <link>https://gigabyte.tistory.com/840</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Swift: 스위치 문의 테스트 클래스 유형&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Swift에서는 'is'를 사용하여 객체의 클래스 유형을 확인할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이걸 어떻게 '스위치' 블록에 통합할 수 있을까요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;불가능할 것 같아서 어떻게 하면 좋을까요?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반드시 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;is&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 있어서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;switch&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;블록. Swift Programming Language의 &quot;Any and AnyObject에 대한 유형 캐스팅&quot;을 참조하십시오(단,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Any&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론입니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들면 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for thing in things {
    switch thing {
    case 0 as Int:
        println(&quot;zero as an Int&quot;)
    case 0 as Double:
        println(&quot;zero as a Double&quot;)
    case let someInt as Int:
        println(&quot;an integer value of \(someInt)&quot;)
    case let someDouble as Double where someDouble &amp;gt; 0:
        println(&quot;a positive double value of \(someDouble)&quot;)
// here it comes:
    case is Double:
        println(&quot;some other double value that I don't want to print&quot;)
    case let someString as String:
        println(&quot;a string value of \&quot;\(someString)\&quot;&quot;)
    case let (x, y) as (Double, Double):
        println(&quot;an (x, y) point at \(x), \(y)&quot;)
    case let movie as Movie:
        println(&quot;a movie called '\(movie.name)', dir. \(movie.director)&quot;)
    default:
        println(&quot;something else&quot;)
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;case is - &lt;strong papago-id=&quot;7-1&quot;&gt;case is&lt;/strong&gt; Int,&lt;strong papago-id=&quot;7-1&quot;&gt; is&lt;/strong&gt; String&lt;strong papago-id=&quot;7-1&quot;&gt;:&quot;&lt;/strong&gt; 작업의 예를 제시하면 여러 개의 케이스를 함께 사용하여 유사한 오브젝트 유형에 대해 동일한 액티비티를 수행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 &lt;strong papago-id=&quot;7-3&quot;&gt;&quot;&lt;/strong&gt;는 OR &lt;strong papago-id=&quot;7-5&quot;&gt;연산자&lt;/strong&gt;처럼 형식을 구분합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;switch value{
case is Int, is String:
    if value is Int{
        print(&quot;Integer::\(value)&quot;)
    }else{
        print(&quot;String::\(value)&quot;)
    }
default:
    print(&quot;\(value)&quot;)
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;http://swiftstub.com/246372683/?v=gm&quot; papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데모 링크&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;값이 없는 경우 임의의 객체:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스위프트 4&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;func test(_ val:Any) {
    switch val {
    case is NSString:
        print(&quot;it is NSString&quot;)
    case is String:
        print(&quot;it is a String&quot;)
    case is Int:
        print(&quot;it is int&quot;)
    default:
        print(val)
    }
}


let str: NSString = &quot;some nsstring value&quot;
let i:Int=1
test(str) 
// it is NSString
test(i) 
// it is int
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 다음 구문을 좋아합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;switch thing {
case _ as Int: print(&quot;thing is Int&quot;)
case _ as Double: print(&quot;thing is Double&quot;)
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 기능을 빠르게 확장할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;switch thing {
case let myInt as Int: print(&quot;\(myInt) is Int&quot;)
case _ as Double: print(&quot;thing is Double&quot;)
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/25724527/&lt;a href=&quot;https://stackoverflow.com/questions/25724527/swift-test-class-type-in-switch-statement&quot; target=&quot;_blank&quot; papago-id=&quot;13-1&quot;&gt;swift-test-class-type-in-switch-statement&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>SWiFT</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/840</guid>
      <comments>https://gigabyte.tistory.com/840#entry840comment</comments>
      <pubDate>Wed, 19 Apr 2023 23:08:10 +0900</pubDate>
    </item>
    <item>
      <title>'찾기'를 사용하여 특정 날짜에 작성된 파일을 검색하려면 어떻게 해야 합니까?</title>
      <link>https://gigabyte.tistory.com/839</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'찾기'를 사용하여 특정 날짜에 작성된 파일을 검색하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot; papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;마감되었습니다.&lt;/b&gt; 이 질문은 충족되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;/help/closed-questions&quot; papago-id=&quot;1-3&quot;&gt;스택&lt;/a&gt; 오버플로우 &lt;a href=&quot;/help/closed-questions&quot; papago-id=&quot;1-3&quot;&gt;가이드라인&lt;/a&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 답변을 받고 있지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; 
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;     &lt;/font&gt;&lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
  &lt;hr class=&quot;my12 outline-none baw0 bb bc-powder-400&quot;&gt; 
  &lt;div class=&quot;fw-nowrap fc-black-600&quot;&gt; 
   &lt;div class=&quot;d-flex fd-column lh-md&quot;&gt; 
    &lt;div class=&quot;mb0 d-flex&quot;&gt; 
     &lt;div class=&quot;flex--item mr8&quot;&gt; 
      &lt;svg aria-hidden=&quot;true&quot; class=&quot;svg-icon iconLightbulb&quot; width=&quot;18&quot; height=&quot;18&quot; viewBox=&quot;0 0 18 18&quot;&gt;
       &lt;path d=&quot;M15 6.38A6.48 6.48 0 0 0 7.78.04h-.02A6.49 6.49 0 0 0 2.05 5.6a6.31 6.31 0 0 0 2.39 5.75c.49.39.76.93.76 1.5v.24c0 1.07.89 1.9 1.92 1.9h2.75c1.04 0 1.92-.83 1.92-1.9v-.2c0-.6.26-1.15.7-1.48A6.32 6.32 0 0 0 15 6.37ZM4.03 5.85A4.49 4.49 0 0 1 8 2.02a4.48 4.48 0 0 1 5 4.36 4.3 4.3 0 0 1-1.72 3.44c-.98.74-1.5 1.9-1.5 3.08v.1H7.2v-.14c0-1.23-.6-2.34-1.53-3.07a4.32 4.32 0 0 1-1.64-3.94ZM10 18a1 1 0 0 0 0-2H7a1 1 0 1 0 0 2h3Z&quot;&gt;&lt;/path&gt;
      &lt;/svg&gt; 
     &lt;/div&gt; 
     &lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문은 &lt;a href=&quot;/help/on-topic&quot; papago-id=&quot;2-1&quot;&gt;프로그래머가 주로 사용&lt;/a&gt;하는 특정 &lt;a href=&quot;/help/on-topic&quot; papago-id=&quot;2-1&quot;&gt;프로그래밍&lt;/a&gt; 문제,&lt;a href=&quot;/help/on-topic&quot; papago-id=&quot;2-1&quot;&gt; 소프트웨어 &lt;/a&gt;알고리즘 또는 &lt;a href=&quot;/help/on-topic&quot; papago-id=&quot;2-1&quot;&gt;소프트웨어 도구에 대한&lt;/a&gt; 질문은 아닌 것으로 보입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;질문이 다른 &lt;a href=&quot;https://stackexchange.com/sites&quot; papago-id=&quot;2-3&quot;&gt;스택 Exchange 사이트&lt;/a&gt;에서 토픽에 포함될 것으로 생각되는 경우, 질문에 대한 답변이 가능한 위치에 대해 코멘트를 남길 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;mb0 mt6 d-flex&quot;&gt; 
     &lt;p class=&quot;ml24 pl2&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;3-1&quot; title=&quot;2013-08-01 18:25:07Z&quot; papago-attr-id=&quot;1&quot;&gt;9년 전에 문&lt;/span&gt;을 닫았어요&lt;/font&gt;&lt;/p&gt; 
    &lt;/div&gt; 
    &lt;div class=&quot;ml24 pl2&quot;&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
  &lt;/div&gt; 
  &lt;div class=&quot;mt24 d-flex gsx gs8&quot;&gt; 
   &lt;a class=&quot;s-btn s-btn__outlined flex--item js-post-notice-edit-post&quot; href=&quot;/posts/158044/edit&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문을 개선하다&lt;/font&gt;&lt;/a&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; UNIX  방법&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;find&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정 날짜에 작성된 파일을 검색할 수 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Max가 지적한 바와 같이 할 수 없지만 수정 또는 액세스된 파일을 확인하는 것은 그리 어렵지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 오늘까지 &lt;a href=&quot;http://virtuelvis.com/2008/10/how-to-use-find-to-search-for-files-created-on-a-specific-date/&quot; papago-id=&quot;7-1&quot; rel=&quot;noreferrer&quot;&gt;튜토리얼&lt;/a&gt;을 썼거든요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 본질은 사용법이다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-newerXY&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★★★★★★★★★★★★★★★」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;! -newerXY&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;2007년 6월 7일에 수정된 모든 파일을 찾으려면:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ find . -type f -newermt 2007-06-07 ! -newermt 2007-06-08
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2008년 9월 29일에 액세스 된 모든 파일을 검색하려면:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ find . -type f -newerat 2008-09-29 ! -newerat 2008-09-30
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 같은 날 권한이 변경된 파일:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ find . -type f -newerct 2008-09-29 ! -newerct 2008-09-30
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 파일에 대한 권한을 변경하지 않으면 일반적으로 'c'는 작성 날짜에 해당합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하여 파일 및 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/home/&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요에 따라 기간을 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;find /home/ -ctime time_period
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;time_period의 예:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 전: 30일 전:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-ctime +30&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;: 30일 전:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-ctime -30&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전 : 정 30일30 일 :&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-ctime 30&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 단계지만 이렇게 하는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 특정 날짜/시간을 가진 파일을 만듭니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 파일은 2008-10-01 자정입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;touch -t 0810010000 /tmp/t
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 위의 파일보다 최신 파일 또는 오래된 파일(파일 수정 날짜 기준)을 모두 찾을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;액세스된 파일 상태 및 &lt;strong papago-id=&quot;23-3&quot;&gt;변경&lt;/strong&gt;된 파일 상태에 대해 &lt;strong papago-id=&quot;23-1&quot;&gt;-anewer&lt;/strong&gt;를 사용할 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;find / -newer /tmp/t
find / -not -newer /tmp/t
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;터치 기능을 사용하여 두 개의 파일을 생성하여 특정 날짜 사이의 파일을 볼 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;touch -t 0810010000 /tmp/t1
touch -t 0810011000 /tmp/t2
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 두 날짜 및 시간 사이의 파일이 검색됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;find / -newer /tmp/t1 -and -not -newer /tmp/t2
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;find ./ -type f -ls |grep '10 Sep'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[root@pbx etc]# find /var/ -type f -ls | grep &quot;Dec 24&quot;
791235    4 -rw-r--r--   1 root     root           29 Dec 24 03:24 /var/lib/prelink/full
798227  288 -rw-r--r--   1 root     root       292323 Dec 24 23:53 /var/log/sa/sar24
797244  320 -rw-r--r--   1 root     root       321300 Dec 24 23:50 /var/log/sa/sa24
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럴수는 없어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;-c 스위치는 권한이 마지막으로 변경된 시간을 알려주고 -a는 최신 액세스 시간을 테스트하며 -m은 수정 시간을 테스트합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대부분의 Linux 버전(ext3)에서 사용되는 파일 시스템은 &quot;작성 시간&quot; 레코드를 지원하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;미안!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@Max: 작성 시간이 적절합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단, 다음 중 하나에 대해 경과일수를 계산하려면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-atime&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-ctime&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-mtime&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 식을 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ELAPSED_DAYS=$(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;2008-09-24&quot;를 원하는 날짜로 대체하면 EXCIDS_DAYS가 오늘까지의 일수로 설정됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(갱신: 결과에서 1을 빼서 일치시킵니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;find&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 날짜 반올림).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 2008년 9월 24일에 변경된 파일을 찾으려면 다음 명령을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;find . -type f -mtime $(( ( $(date +%s) - $(date -d '2008-09-24' +%s) ) / 60 / 60 / 24 - 1 ))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은, 사용의 버전이&lt;/font&gt;&lt;/font&gt;&lt;code&gt;find&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 지원하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-newerXY&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@Arve:의 답변에 기재되어 있는 술어.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;-atime, -ctime 및 -mtime 스위치를 검색하면 원하는 수준에 근접할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;cp `ls -ltr | grep 'Jun 14' | perl -wne 's/^.*\s+(\S+)$/$1/; print $1 . &quot;\n&quot;;'` /some_destination_dir
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;14일보다 오래된 파일을 모두 삭제하는 스크립트에서 다음 스크립트를 찾았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CNT=0
for i in $(find -type f -ctime +14); do
  ((CNT = CNT + 1))
  echo -n &quot;.&quot; &amp;gt;&amp;gt; $PROGRESS
  rm -f $i
done
echo deleted $CNT files, done at $(date &quot;+%H:%M:%S&quot;) &amp;gt;&amp;gt; $LOG
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;man find&quot;를 조금 더 추가하여 -ctime / -atime 등의 파라미터를 찾는 것이 도움이 될 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/158044/&lt;a href=&quot;https://stackoverflow.com/questions/158044/how-to-use-find-to-search-for-files-created-on-a-specific-date&quot; target=&quot;_blank&quot; papago-id=&quot;43-1&quot;&gt;how-to-use-find-to-search-for-files-created-on-a-specific-date&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>bash</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/839</guid>
      <comments>https://gigabyte.tistory.com/839#entry839comment</comments>
      <pubDate>Wed, 19 Apr 2023 23:08:03 +0900</pubDate>
    </item>
    <item>
      <title>컴퓨터가 시작될 때 PowerShell 스크립트를 실행하는 방법은 무엇입니까?</title>
      <link>https://gigabyte.tistory.com/838</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴퓨터가 시작될 때 PowerShell 스크립트를 실행하는 방법은 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지 폴더를 모니터링하는 PowerShell 스크립트가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;컴퓨터 부팅 후 이 스크립트를 자동으로 실행하는 방법을 찾아야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이미 다음 방법을 시도했지만, 효과가 없었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;msconfig&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부팅에 PowerShell 스크립트를 추가했는데 해당 목록에서 PowerShell 스크립트를 찾을 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;바로 가기를 만들어 시작 폴더에 놓습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;운이 없다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe -File &quot;C:\Doc\Files\FileMonitor.ps1&quot;
&lt;/code&gt;&lt;/pre&gt; &lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -File &quot;C:\Doc\Files\FileMonitor.ps1&quot;
&lt;/code&gt;&lt;/pre&gt; &lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell 스크립트는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;$folder = &quot;C:\\Doc\\Files&quot;
$dest = &quot;C:\\Doc\\Files\\images&quot;
$filter = &quot;*.jpg&quot;

$fsw = new-object System.IO.FileSystemWatcher $folder, $filter -Property @{
    IncludeSubDirectories=$false
    NotifyFilter = [System.IO.NotifyFilters]'FileName, LastWrite'
}

$onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {

    Start-Sleep -s 10
    Move-Item -Path C:\Doc\Files\*.jpg C:\Doc\Files\images
}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;taskschd.msc&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아직 동작하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 제가 찾은 게 있어요. 아마 그게 디버깅에 도움이 될 거예요.&lt;/font&gt;&lt;/p&gt; &lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell 창을 열고 스크립트를 실행하면 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 명령 프롬프트에서 실행하면&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;powershell.exe -File &quot;C:\Doc\Files\FileMonitor.ps1&quot;
&lt;/code&gt;&lt;/pre&gt; &lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 작동하지 않을 것이다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;허가 문제인지 아닌지는 잘 모르겠습니다.&lt;/font&gt;&lt;/p&gt; &lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고로 PowerShell 3.0이 설치되어 있고 $host 라고 입력하면&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;버전에는 3이 표시됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 powershell.exe는 아직 v1.0인 것 같습니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기동할 때마다 PowerShell 스크립트를 자동으로 실행할 수 있게 되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 파일을해야 합니다.첫 번째 은 Powershell 스크립트 Powershell 스크립트).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;script.ps1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;되는 명령어( &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; ( &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; &quot; 명령어프롬프트를 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;startup.cmd&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 참조해 주세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 번째 파일은 컴퓨터 부팅 시 실행해야 하는 파일입니다.단순히 .ps1을 스타트업 폴더에 복사 붙여넣는 것은 동작하지 않습니다.스크립트를 실제로 실행하는 것은 아니기 때문입니다.메모장으로 파일을 엽니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell을 사용하여 .ps1을 실행하는 .cmd를 실행해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자, 이제 충분히 지껄이고 스텝으로 넘어갑시다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.ps1 스크립트를 생성하여 폴더에 저장합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 심플함을 위해 그것을 내 바탕화면에 놓았다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;경로는 다음과 같습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;%USER Profile%\&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;19-1&quot;&gt;데스크톱&lt;/strong&gt;\script&lt;strong papago-id=&quot;19-1&quot;&gt;.ps1&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.cmd 파일을 생성하여 에 저장합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;%AppData%\&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Microsoft\&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows \ Start Menu \ Programs \ Startup \ &lt;strong papago-id=&quot;21-1&quot;&gt;startup &lt;/strong&gt;.&lt;strong papago-id=&quot;21-1&quot;&gt; cmd&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 부팅 시 매번 cmd 파일이 실행됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://khailiangtech.wordpress.com/2011/06/07/how-to-create-a-cmd-command-file/&quot; papago-id=&quot;22-1&quot; rel=&quot;noreferrer&quot;&gt;도움&lt;/a&gt;이 필요한 경우 .&lt;a href=&quot;https://khailiangtech.wordpress.com/2011/06/07/how-to-create-a-cmd-command-file/&quot; papago-id=&quot;22-1&quot; rel=&quot;noreferrer&quot;&gt;cmd &lt;/a&gt;파일을 &lt;a href=&quot;https://khailiangtech.wordpress.com/2011/06/07/how-to-create-a-cmd-command-file/&quot; papago-id=&quot;22-1&quot; rel=&quot;noreferrer&quot;&gt;작성하는 방법에 대한 링크가 여기에 있습니다&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;ol start=&quot;3&quot;&gt; 
 &lt;li papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;텍스트 에디터를 사용하여 .cmd 파일을 열고 다음 행을 입력합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code&gt;PowerShell -Command &quot;Set-ExecutionPolicy Unrestricted&quot; &amp;gt;&amp;gt; &quot;%TEMP%\StartupLog.txt&quot; 2&amp;gt;&amp;amp;1
PowerShell %USERPROFILE%\Desktop\script.ps1 &amp;gt;&amp;gt; &quot;%TEMP%\StartupLog.txt&quot; 2&amp;gt;&amp;amp;1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 다음 두 가지 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell의 실행 정책을 제한 없음으로 설정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;스크립트를 실행하는 데 필요합니다.그렇지 않으면 PowerShell에서는 실행할 수 없습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell을 사용하여 지정된 경로에 있는 .ps1 스크립트를 실행합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드는 PowerShell v1.0 전용입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell v2.0을 실행하고 있다면 조금 다를 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://msdn.microsoft.com/en-us/library/azure/jj130675.aspx&quot; papago-id=&quot;27-1&quot; rel=&quot;noreferrer&quot;&gt;어떤&lt;/a&gt; 경우든 이 소스에서 .cmd 코드를 &lt;a href=&quot;https://msdn.microsoft.com/en-us/library/azure/jj130675.aspx&quot; papago-id=&quot;27-1&quot; rel=&quot;noreferrer&quot;&gt;확인&lt;/a&gt;합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol start=&quot;4&quot;&gt; 
 &lt;li papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.cmd 파일을 저장합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 .ps1 및 .cmd 파일이 각각의 경로에 있고 각 파일의 스크립트로 모두 설정되었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예약된 작업으로 설정하고 &quot;시작 시&quot;에 대한 작업 트리거를 설정할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;shell:startup에 배치한 바로 가기를 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;바로 가기에는 다음이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 상::&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Command &quot;C:\scripts\script.ps1&quot;&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(필요에 따라 스크립트\cripts.ps1 추가)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★★★★★★★★★★★★★★★★★:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C:\scripts&lt;/code&gt; &lt;/p&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(스크립트가 있는 폴더와 함께 스크립트 추가)&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 로그인하지 않은 경우에도 시작 시 자동으로 실행되는 스케줄러 작업을 만들 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;schtasks /create /tn &quot;FileMonitor&quot; /sc onstart /delay 0000:30 /rl highest /ru system /tr &quot;powershell.exe -file C:\Doc\Files\FileMonitor.ps1&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell에서 Admin으로 이 명령을 한 번 실행하면 일정 작업이 생성됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 작업을 나열할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;schtasks /Query /TN &quot;FileMonitor&quot; /V /FO List
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 삭제해 주세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;schtasks /Delete /TN &quot;FileMonitor&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 @&lt;a href=&quot;https://stackoverflow.com/a/20575334/5079799&quot; papago-id=&quot;40-1&quot;&gt;mjolinor simple&lt;/a&gt; answer [Use Task Scheduler]의 확장에 불과합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 &quot;작업 스케줄러&quot;가 &lt;em papago-id=&quot;41-1&quot;&gt;올바른&lt;/em&gt; 방법이라는 것을 알았지만, 제가 원하는 방식으로 작업을 진행하기 위해서는 약간의 노력이 필요했고, 다른 사람들을 위해 저의 결과를 게시해야겠다고 생각했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 문제:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력을 로그로 리디렉션하는 중&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell 창 숨기기&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주의:하려면 , 「」를 참조해 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ExecutionPolicy&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;으로 작업 스케줄러에서  보이는 은 '다르다'입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Action&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;럴 、  、 네 、 it 、  it it it it it it it it 。&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Start a Program&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로그램/스크립트:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;powershell
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인수 추가(옵션):&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;-windowstyle hidden -command full\path\script.ps1 &amp;gt;&amp;gt; &quot;%TEMP%\StartupLog.txt&quot; 2&amp;gt;&amp;amp;1&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주의:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;「」가 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-File&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그도 할 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-File&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; Path,이 리다이렉트는  경로의 일부로 간주되어 실패합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-command&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;할 수 를 들어, 리다이렉트에는, 「하다」라고 하는 명령어 또는 명령어를 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-windowstyle hidden&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell 창 power power power power 。&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 모든 것을 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Write-Host&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로로 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Write-Output&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 대본에도 있어요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시작 폴더에 바로 가기를 만들고 입력하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;PowerShell &quot;&amp;amp; 'PathToFile\script.ps1'&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이게 제일 쉬운 방법이에요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전제 조건:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1. &quot;관리자로서 실행&quot; 옵션을 사용하여 powershell을 시작합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2. 다음을 사용하여 서명되지 않은 스크립트 실행을 활성화합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;set-executionpolicy remotesigned
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;3. powershell 스크립트를 준비하고 경로를 파악합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$path = &quot;C:\Users\myname\myscript.ps1&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;순서:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1. 트리거를 설정합니다.「New-JobTrigger (&lt;a href=&quot;https://learn.microsoft.com/en-us/powershell/module/psscheduledjob/new-jobtrigger?view=powershell-5.1&quot; papago-id=&quot;66-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;PSScheduledJob) &lt;/a&gt;- &lt;a href=&quot;https://learn.microsoft.com/en-us/powershell/module/psscheduledjob/new-jobtrigger?view=powershell-5.1&quot; papago-id=&quot;66-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;PowerShell &lt;/a&gt;| &lt;a href=&quot;https://learn.microsoft.com/en-us/powershell/module/psscheduledjob/new-jobtrigger?view=powershell-5.1&quot; papago-id=&quot;66-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Microsoft&lt;/a&gt; Docs 」도 참조해 주세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$trigger = New-JobTrigger -AtStartup -RandomDelay 00:00:30
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2. 스케줄된 작업을 등록합니다.「&lt;a href=&quot;https://learn.microsoft.com/en-us/powershell/module/psscheduledjob/register-scheduledjob?view=powershell-5.1&quot; papago-id=&quot;67-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Register-Scheduled &lt;/a&gt;Job (&lt;a href=&quot;https://learn.microsoft.com/en-us/powershell/module/psscheduledjob/register-scheduledjob?view=powershell-5.1&quot; papago-id=&quot;67-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;PSScheduled &lt;/a&gt;Job) - &lt;a href=&quot;https://learn.microsoft.com/en-us/powershell/module/psscheduledjob/register-scheduledjob?view=powershell-5.1&quot; papago-id=&quot;67-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;PowerShell &lt;/a&gt;| &lt;a href=&quot;https://learn.microsoft.com/en-us/powershell/module/psscheduledjob/register-scheduledjob?view=powershell-5.1&quot; papago-id=&quot;67-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Microsoft&lt;/a&gt; Docs 」도 참조해 주세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Register-ScheduledJob -Trigger $trigger -FilePath $path -Name MyScheduledJob
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하실 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Get-ScheduledJob -Name MyScheduledJob&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;3. Windows 부팅)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;restart /r&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;합니다.  라고 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Get-Job -name MyScheduledJob
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;「&lt;a href=&quot;https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/get-job?view=powershell-7&quot; papago-id=&quot;71-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;취업」(&lt;/a&gt;Microsoft&lt;a href=&quot;https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/get-job?view=powershell-7&quot; papago-id=&quot;71-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;)&lt;/a&gt;도 참조해 주세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/get-job?view=powershell-7&quot; papago-id=&quot;71-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;PowerShell.&lt;/a&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/get-job?view=powershell-7&quot; papago-id=&quot;71-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;코어) - PowerShell | Microsoft 문서&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고 자료:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;a href=&quot;https://superuser.com/questions/106360/how-to-enable-execution-of-powershell-scripts&quot; papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell 스크립트 실행을 활성화하는 방법 - 슈퍼 사용자&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://devblogs.microsoft.com/scripting/use-powershell-to-create-job-that-runs-at-startup/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell을 사용하여 부팅 시 실행 작업 생성| 스크립트 작성 블로그&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ps1을 이 폴더에 복사하고 필요에 따라 만듭니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기동할 때마다(사용자 로그온 전) 실행됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;C:\Windows\System32\GroupPolicy\Machine\Scripts\Startup
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또, 사용의 OS 빌드로 이용할 수 있는 경우는, GPEDIT.msc 를 사용해 실행할 수도 있습니다(저레벨의 OS는 사용할 수 없는 경우가 있습니다).&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;할 때는  파라미터를 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-ExecutionPolicy Bypass&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell.exe PowerShell.exe로 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;PowerShell.exe -ExecutionPolicy Bypass&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 시스템 워처를 기동하는 스크립트도 있습니다만, 스크립트 창이 닫히면 워처는 종료됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가 원래대로 .powershell은 원래대로되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파워셸&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이것을 하기 위해 많은 방법을 시도했지만, 실제로 효과가 있었던 것은 http://www.methos-it.com/blogs/&lt;a href=&quot;http://www.methos-it.com/blogs/keep-your-powershell-script-open-when-executed&quot; rel=&quot;nofollow&quot; papago-id=&quot;27-1&quot;&gt;keep-your-powershell-script-open-when-executed&lt;/a&gt;의 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;param ( $Show )
if ( !$Show ) 
{
    PowerShell -NoExit -File $MyInvocation.MyCommand.Path 1
    return
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;걸걸 、 대에에에에든 든든든 。&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;powershell.exe -noexit -command &quot;&amp;amp; \path\to\script.ps1&quot;&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;84&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows 의 기동시에 실행할 Powershell 스크립트를 지정하는 비교적 짧은 경로는, 다음과 &lt;a href=&quot;https://i.stack.imgur.com/v3a8e.png&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;84-0&quot;&gt;&lt;img alt=&quot;여기에 이미지 설명 입력&quot; papago-id=&quot;84-0-0&quot; src=&quot;https://i.stack.imgur.com/v3a8e.png&quot; papago-attr-id=&quot;3&quot;&gt;&lt;/a&gt;같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;85&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows 버튼(Windows 버튼+r)을 클릭합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;86&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 입력합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;87&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;셸: 개요&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ol start=&quot;3&quot;&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;88&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마우스 오른쪽 버튼을 클릭하여 새 &lt;strong papago-id=&quot;88-1&quot;&gt;바로&lt;/strong&gt; 가기를 만들고 컨텍스트 메뉴에서 메뉴 항목을 선택합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;신기능=&amp;gt;바로가기&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;89&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스크립트에 대한 바로 가기를 만듭니다. 예:&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;90&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C:\Windows\&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템32\&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows PowerShell\v1.0\powershell.exe - NoProfile - 명령어 &quot;C:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;\Users\someuser\Documents\&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows PowerShell\Scripts\somesscript.ps1&quot;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;91&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;91-1&quot;&gt;No&lt;/strong&gt; Profile 사용 주의: $profile 파일에 많은 초기화를 넣는 경우 Powershell 스크립트를 실행하기 위해 이 파일을 로드하는 것은 비효율적입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NoProfile은 프로파일파일 로드를 건너뛰고 Powershell 스크립트를 실행하기 전에 실행할 필요가 없는 경우 지정하는 것이 현명합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;92&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;숏컷이 작성되어 있습니다.Powershell 아이콘과 숏컷 글리프가 있는 (.lnk 파일):&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;93&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이건 나한테 효과가 있었어.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 세부 정보를 사용하여 스케줄링된 작업을 생성했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;트리거 : 기동 시&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;94&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;액션: 프로그램/스크립트: powershell.exe 인수: -file&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;95&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시작 탭의 작업 관리자에서 스크립트 및 시작 예약 내용을 볼 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 예약된 시작 항목에 새 항목을 추가하는 방법입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;96&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 탐색기를 열고 셸:시작 버튼 =&amp;gt; 실행을 통해 위치를 표시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;97&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;탐색기 셸: 개요&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;98&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해당 폴더를 마우스 오른쪽 버튼으로 클릭하고 컨텍스트 메뉴에서 새 바로 가기를 선택합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 입력합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;99&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C:\Windows\&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템32\&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows PowerShell\v1.0\powershell.exe - NoProfile - 명령어 &quot;C:\myfolder\somescript.ps1&quot;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;100&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 $profile 스크립트를 시작하지 않고 Powershell 스크립트가 부팅되므로 실행 속도가 빨라집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 powershell 스크립트가 확실하게 시작됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;101&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;shell:startup 폴더는 다음 위치에 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;102&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;$env: APPDATA\Microsoft\&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;창문들&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;103&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 폴더에 넣습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;104&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시작 메뉴\프로그램\시작&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;105&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;통상과 같이, Microsoft 에서는 패스에 공백이 포함되어 있는 경우는, 조금 번거롭기 때문에, 풀 패스에 따옴표를 붙이거나, Powershell내의 탭을 클릭하기만 하면 자동 완성됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행 정책에 대해 걱정하지 않으려면 다음을 사용하여 배치 스크립트에 넣을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스크립트가 작동하지 않는다고 하는 시간이 절반이나 되기 때문에 사이트의 기술자에게 스크립트를 실행시킬 때 자주 사용합니다만, 실제로는 실행 정책이 정의되어 있지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 실행 정책이 일반적으로 스크립트 실행을 차단하는 경우에도 스크립트가 실행됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기동시에 실행할 필요가 있는 경우.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 단일 사용자의 경우 shell&lt;strong papago-id=&quot;31-1&quot;&gt;&lt;em papago-id=&quot;31-1-0&quot;&gt;:startup&lt;/em&gt;&lt;/strong&gt; &lt;strong papago-id=&quot;31-3&quot;&gt;&lt;em papago-id=&quot;31-3-0&quot;&gt;또는&lt;/em&gt;&lt;/strong&gt; PC에 로그인하는 모든 사용자의 경우 shell&lt;strong papago-id=&quot;31-3&quot;&gt;&lt;em papago-id=&quot;31-3-0&quot;&gt;:common&lt;/em&gt;&lt;/strong&gt; startup 중 &lt;strong papago-id=&quot;31-1&quot;&gt;&lt;em papago-id=&quot;31-1-0&quot;&gt;하나&lt;/em&gt;&lt;/strong&gt;에 배치할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;cmd.exe /c Powershell.exe -ExecutionPolicy ByPass -File &quot;c:\path\to\script.ps1&quot;&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;108&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도메인이 있고 스크립트&lt;strong papago-id=&quot;108-1&quot;&gt;&lt;em papago-id=&quot;108-1-0&quot;&gt;(스타트업&lt;/em&gt;&lt;/strong&gt;/셧다운&lt;strong papago-id=&quot;108-1&quot;&gt;&lt;em papago-id=&quot;108-1-0&quot;&gt;)&lt;/em&gt;&lt;/strong&gt;에 배치되어 &lt;strong papago-id=&quot;108-3&quot;&gt;&lt;em papago-id=&quot;108-3-0&quot;&gt;있는&lt;/em&gt;&lt;/strong&gt; 경우(&lt;strong papago-id=&quot;108-3&quot;&gt;&lt;em papago-id=&quot;108-3-0&quot;&gt;컴퓨터&lt;/em&gt;&lt;/strong&gt; 구성 &lt;strong papago-id=&quot;108-3&quot;&gt;&lt;em papago-id=&quot;108-3-0&quot;&gt;또는&lt;/em&gt;&lt;/strong&gt; 사용자 &lt;strong papago-id=&quot;108-3&quot;&gt;&lt;em papago-id=&quot;108-3-0&quot;&gt;구성)&lt;/em&gt;&lt;/strong&gt;에 GPO를 작성하는 것이 가장 좋은 방법입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;108-3&quot;&gt;&lt;em papago-id=&quot;108-3-0&quot;&gt;Windows Settings&lt;/em&gt;&lt;/strong&gt;\Scripts&lt;strong papago-id=&quot;108-3&quot;&gt;&lt;em papago-id=&quot;108-3-0&quot;&gt;(시작/셧다운).&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 ** 아래에 Startup 등의 &lt;strong papago-id=&quot;108-5&quot;&gt;&lt;em papago-id=&quot;108-5-0&quot;&gt;디렉토리&lt;/em&gt;&lt;/strong&gt;를 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;109&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;\\yourdomain.com\netlogon\&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;110&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;GPO에서 참조할 수 있도록 배치했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래야 DC가 그걸 집행할 권리가 있다는 걸 알 수 있지&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;DC에서 스크립트를 참조하면 아래에 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;111&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C:\Windows\&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SYSVOL\domain\scripts\Startup\&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;112&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 &lt;strong papago-id=&quot;112-1&quot;&gt;netlogon&lt;/strong&gt;의 로컬 패스이기 때문입니다.&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;p papago-id=&quot;113&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 PowerShell 명령을 실행하여 &lt;strong papago-id=&quot;113-3&quot;&gt;사용자&lt;/strong&gt; 로그인 시 작업 스케줄러를 통해 PowerShell 스크립트를 실행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre class=&quot;lang-powershell prettyprint-override&quot;&gt;&lt;code&gt;Register-ScheduledTask -TaskName &quot;SOME TASKNAME&quot; -Trigger (New-ScheduledTaskTrigger -AtLogon) -Action (New-ScheduledTaskAction -Execute &quot;${Env:WinDir}\System32\WindowsPowerShell\v1.0\powershell.exe&quot; -Argument &quot;-WindowStyle Hidden -Command `&quot;&amp;amp; 'C:\PATH\TO\FILE.ps1'`&quot;&quot;) -RunLevel Highest -Force;
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;114&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;114-0&quot;&gt;&lt;code papago-id=&quot;114-0-0&quot;&gt;-AtLogOn&lt;/code&gt;&lt;/strong&gt; - 사용자가 로그온할 때 트리거가 작업을 시작함을 나타냅니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;115&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;115-0&quot;&gt;&lt;code papago-id=&quot;115-0-0&quot;&gt;-AtStartup&lt;/code&gt;&lt;/strong&gt; - 시스템이 시작될 때 트리거가 작업을 시작함을 나타냅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;116&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;116-0&quot;&gt;&lt;code papago-id=&quot;116-0-0&quot;&gt;-WindowStyle Hidden&lt;/code&gt;&lt;/strong&gt; - 부팅 시 PowerShell 창을 표시하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;116-2&quot;&gt;필요하지 않은 경우 제거합니다.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;117&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;117-0&quot;&gt;&lt;code papago-id=&quot;117-0-0&quot;&gt;-RunLevel Highest&lt;/code&gt;&lt;/strong&gt; - PowerShell을 관리자로 실행합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;117-2&quot;&gt;필요하지 않은 경우 제거합니다.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;118&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추신.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong papago-id=&quot;119&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요한 경우 아래의 PowerShell 명령을 실행하여 PowerShell 스크립트 실행을 활성화합니다.&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre class=&quot;lang-powershell prettyprint-override&quot;&gt;&lt;code&gt;Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy Unrestricted -Force;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;120&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;120-0&quot;&gt;&lt;code papago-id=&quot;120-0-0&quot;&gt;Bypass&lt;/code&gt;&lt;/strong&gt; - 아무것도 차단되지 않았으며 경고나 프롬프트가 표시되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;121&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;121-0&quot;&gt;&lt;code papago-id=&quot;121-0-0&quot;&gt;Unrestricted&lt;/code&gt;&lt;/strong&gt; - 모든 구성 파일을 로드하고 모든 스크립트를 실행합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;인터넷에서 다운로드한 서명되지 않은 스크립트를 실행하면 실행 전에 사용 권한을 묻는 메시지가 표시됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/7g9Ya.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/7g9Ya.png&quot; alt=&quot;여기에 이미지 설명 입력&quot; papago-attr-id=&quot;2&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;122&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 사람들은 이런 도구가 필요 없다는 걸 알고 있어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 초보자분들에게 특히 유용할 것 같아요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자동 시작 도구 Windows 로그인 시 앱 또는 스크립트를 자동으로 실행하는 프로세스를 단순화하는 휴대용 프리웨어입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자동 부팅을 위한 3가지 옵션을 제공합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;123&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작업 스케줄러&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;124&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스타트업 폴더&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;125&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;레지스트리 실행 키&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;126&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 툴의 가장 좋은 점은 Powershell 스크립트(.Ps1)를 지원하는 것입니다.즉, 3가지 방법 모두 시스템 부팅 시 Powershell 스크립트를 자동으로 실행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;127&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https&lt;a href=&quot;https://disk.yandex.com.tr/d/dFzyB2Fu4lC-Ww&quot; papago-id=&quot;127-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;://&lt;/a&gt;disk.yandex.com.tr/d/&lt;a href=&quot;https://disk.yandex.com.tr/d/dFzyB2Fu4lC-Ww&quot; papago-id=&quot;127-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;dFzyB2Fu4lC-Ww&lt;/a&gt; 다운로드&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;128&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출처 : https://www.&lt;a href=&quot;https://www.portablefreeware.com/forums/viewtopic.php?f=4&amp;amp;t=25761&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;128-1&quot;&gt;portablefreeware&lt;/a&gt;.com/forums/viewtopic.php?f=4&amp;amp;t=25761&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;129&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 찾은 게 하나 있어&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell 스크립트 내에서 Write-Host를 사용하고 있으며 작업 스케줄러(위의 게시물 참조)를 사용하는 경우 명령줄에서 모든 출력을 얻을 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;powershell.exe -command C:\scripts\script.ps1 &amp;gt;&amp;gt; &quot;C:\scripts\logfile.log&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;130&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 PowerShell 스크립트에서 정상적으로 실행된 명령어 출력만 볼 수 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;131&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금까지의 결론은 PowerShell이 Out-File을 사용하여 다른 명령 또는 이 경우 로그 파일로 출력한다는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;132&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 &amp;gt;&amp;gt; 대신 *&amp;gt;를 사용하면 PowerShell 스크립트의 모든 출력을 CLI에서 얻을 수 있으며 스크립트 내에서 계속 쓰기 호스트를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;powershell.exe -command C:\scripts\script.ps1 *&amp;gt; &quot;C:\scripts\logfile.log&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://lazyadmin.nl/powershell/output-to-file/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;133&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://lazyadmin.nl/powershell/output-to-file/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;134&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 로그인에 관계없이 백그라운드에서 스크립트를 실행할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;135&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;태스크 스케줄러의 태스크 내에서 &quot;Run when user is logon or not&quot;을 설정하고 비밀번호 프롬프트에 호스트 이름\username을 입력한 다음 비밀번호를 입력합니다(이 경우 Admin 권한을 가진 계정).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하였습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Set-ExecutionPolicy RemoteSigned -Scope CurrentUser&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스크립트 실행 문제를 회피할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래도 프로세스별로 실행하는 것이 더 나았을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;음음음음&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;138&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/20575257/&lt;a href=&quot;https://stackoverflow.com/questions/20575257/how-do-i-run-a-powershell-script-when-the-computer-starts&quot; target=&quot;_blank&quot; papago-id=&quot;138-1&quot;&gt;how-do-i-run-a-powershell-script-when-the-computer-starts&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>PowerShell</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/838</guid>
      <comments>https://gigabyte.tistory.com/838#entry838comment</comments>
      <pubDate>Wed, 19 Apr 2023 23:07:55 +0900</pubDate>
    </item>
    <item>
      <title>글로벌 변수 작성 방법</title>
      <link>https://gigabyte.tistory.com/837</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;글로벌 변수 작성 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;View Controller 간에 공유해야 하는 글로벌 변수가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Objective-C에서는 정적 변수를 정의할 수 있지만 Swift에서는 글로벌 변수를 정의할 방법을 찾을 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 그것을 하는 방법을 알고 계십니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Swift 공식 &lt;a href=&quot;https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html#//apple_ref/doc/uid/TP40014097-CH14-XID_382&quot; rel=&quot;noreferrer&quot; papago-id=&quot;4-1&quot;&gt;프로그래밍&lt;/a&gt; 가이드:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전역 변수는 함수, 메서드, 폐쇄 또는 유형 컨텍스트 외부에 정의되는 변수입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;전역 상수와 변수는 항상 느릿느릿 계산됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 파일에서 정의할 수 있으며 현재 파일에 액세스할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;module&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아무 곳이나.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 파일 내의 범위 외 어딘가에 정의할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;할 필요가 없다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;static&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 글로벌 변수가 느릿느릿 계산됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; var yourVariable = &quot;someString&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 모듈의 모든 위치에서 액세스할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단, 글로벌 변수는 응용 프로그램 상태에 적합하지 않고 주로 버그의 원인이 되므로 이를 피해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/24868120/how-to-create-global-variable-in-swift/24868789#24868789&quot; papago-id=&quot;3-1&quot;&gt;이&lt;/a&gt; 답변에서 보듯이 Swift에서는 이들을 캡슐화할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;struct&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어디에나 접속할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Swift에서도 정적 변수 또는 상수를 정의할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;캡슐화 위치&lt;/font&gt;&lt;/font&gt;&lt;code&gt;struct&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;struct MyVariables {
    static var yourVariable = &quot;someString&quot;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 변수는 모든 클래스 또는 어디에서나 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let string = MyVariables.yourVariable
println(&quot;Global variable:\(string)&quot;)

//Changing value of it
MyVariables.yourVariable = &quot;anotherString&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메서드 또는 클로저 이외의 방법으로 정의된 글로벌 변수는 private 키워드를 사용하여 범위를 제한할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import UIKit

// MARK: Local Constants

private let changeSegueId = &quot;MasterToChange&quot;
private let bookSegueId   = &quot;MasterToBook&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 클래스에서 사용할 경우 다음을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public var yourVariable = &quot;something&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1개의 클래스만으로 사용하는 경우는, 다음과 같이 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var yourVariable = &quot;something&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제로 전역 변수를 원하지 않고 대신 앱이 종료되어도 지속되는 값을 저장하려면 다음과 같이 하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;뷰 컨트롤러 간에 실제로 데이터를 전달하지 않고 단순히 글로벌 변수를 저장하려는 경우 다음과 같이 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Swift 5에서 이 작업을 수행하는 방법에 대한 자세한 설명은 다음과 같습니다.https://www.hackingwithswift.com/example-code/system/&lt;a href=&quot;https://www.hackingwithswift.com/example-code/system/how-to-save-user-settings-using-userdefaults&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;19-1&quot;&gt;how-to-save-user-settings-using-userdefaults&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요약:.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;값을 설정하려면:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let defaults = UserDefaults.standard
defaults.set(&quot;value&quot;, forKey: &quot;key&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;String 값을 가져오려면:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let key = defaults.object(forKey: &quot;StringKey&quot;) as? [String] ?? [String]()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정수 값을 가져오려면:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let key = defaults.integer(forKey: &quot;IntegerKey&quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/26195262/&lt;a href=&quot;https://stackoverflow.com/questions/26195262/how-to-create-a-global-variable&quot; target=&quot;_blank&quot; papago-id=&quot;24-1&quot;&gt;how-to-create-a-global-variable&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>SWiFT</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/837</guid>
      <comments>https://gigabyte.tistory.com/837#entry837comment</comments>
      <pubDate>Wed, 19 Apr 2023 23:07:45 +0900</pubDate>
    </item>
    <item>
      <title>WPF와 Silverlight의 비교</title>
      <link>https://gigabyte.tistory.com/836</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WPF와 Silverlight의 비교&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot; papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;이 질문에는 이미 답변&lt;/b&gt;이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;     &lt;/font&gt;&lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot; papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;닫힘&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;2-1&quot; title=&quot;2012-05-06 14:31:32Z&quot; papago-attr-id=&quot;1&quot;&gt;10년&lt;/span&gt; 전에요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;   &lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;중복 가능성:&lt;/font&gt;&lt;/strong&gt;&lt;br&gt; &lt;a href=&quot;https://stackoverflow.com/questions/629927/what-is-the-difference-between-wpf-and-silverlight-application&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WPF 어플리케이션과 Silverlight 어플리케이션의 차이점은 무엇입니까?&lt;/font&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WPF와 Silverlight의 정확한 차이점은 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 매우 폭넓은 질문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리 회사는 최근 두 기술의 차이점을 설명하는 백서를 작성했는데, 약 70페이지 분량입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아쉽게도 아직 출판되지 않았거나 링크를 드리도록 하겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;b&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드플렉스: 코드플렉스:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;a href=&quot;http://wpfslguidance.codeplex.com/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://wpfslguidance.codeplex.com/http.codeplex.com/&lt;/font&gt;&lt;/font&gt;&lt;/a&gt;&lt;/font&gt; &lt;/b&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 요약해 보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WPF는 완전한 에 액세스할 수 있는 씩 Windows 클라이언트플랫폼입니다&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;네트워크 프레임워크&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Silverlight는 의 서브셋에 액세스할 수 있는 브라우저 기반 기술입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Net Framework(CoreCLR이라고 불립니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 프레임워크 내에서 일상적으로 사용되는 방법 및 개체를 사용하면 차이를 알 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 String 클래스의 Split() 메서드는 Silverlight에서는 3개의 오버라이드가 있지만에서는 6개의 오버라이드가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;네트워크 프레임워크&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 차이점을 많이 볼 수 있을 거예요.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WPF 내에서 모든 시각적 렌더링 요소는 Visual Base 클래스에서 파생됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Silverlight에서는 그렇지 않습니다.대신 Control에서 파생됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;단, 두 테크놀로지 모두 계층 상위의 DependencyObject 클래스에서 파생됩니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WPF는 현재 Silverlight보다 더 많은 사용자 컨트롤을 출하 또는 이용할 수 있습니다.단, 이 차이는 Silverlight Toolkit과 향후 Silverlight 3 릴리즈를 통해 완화되고 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WPF는 3종류의 루티드이벤트(다이렉트, 버블링 및 터널링)를 지원합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Silverlight는 직접 버블링만 지원합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Silverlight의 다음 버전에서는 데이터 바인딩에 대한 많은 차이가 다소 완화될 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 Silverlight는 바인딩 모드, OneWayToSource 또는 Explorer UpdateSourceTrigger를 지원하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 Silverlight는 설정되어 있지 않은 경우 기본적으로 OneWay 데이터 바인딩이 되며 WPF는 의존관계 속성으로 지정된 기본 모드를 사용합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Silveright는 MultiBinding을 지원하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Silverlight는 XmlDataProvider를 지원하지만 ObjectDataProvider는 지원하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;WPF는 양쪽 모두를 지원합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Silverlight는 비동기 네트워크 호출만 할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;WPF 에는, 풀 액세스권이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;네트워크 스택으로 임의의 타입의 콜을 발신할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 현재 Silverlight는 SOAP을 지원하지만 SOAP 장애 예외를 네이티브로 처리할 수 없습니다(이는 Silverlight 3에서 변경될 수 있습니다).&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;암호화에는 큰 차이가 있습니다(Silverlight는 네임스페이스에 20개의 클래스가 있으며 WPF는 107에 액세스 할 수 있습니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 Silverlight는 4개의 해시 알고리즘과 AES 암호화 프로토콜만 지원합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Silverlight는 아직 명령어, 검증, 인쇄, XPS 문서, 음성, 3D, 프리즈 가능 객체 또는 Windows Desktop과의 InterOp을 지원하지 않습니다.이 모든 것은 WPF에서 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Silverlight는 브라우저 인터op, 타임라인 마커, 딥 줌 등 다양한 미디어 스트리밍 옵션을 지원합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;WPF는 아직 이러한 기능을 지원하지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;70페이지 분량의 문서를 글머리 기호로 줄이려다 보니 결코 완벽하지 않다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막으로, 이러한 모든 차이에도 불구하고, 마이크로소프트는 두 기술 사이의 격차를 줄이려고 노력하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Silverlight Toolkit과 WPF Toolkit은 모두 각 테크놀로지의 몇 가지 결점에 대응하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Silverlight 3은 현재 이용할 수 없는 많은 기능(엘리먼트 간 데이터 바인딩 등)을 추가할 예정입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 코어 라이브러리의 차이로 인해 프레임워크에는 항상 몇 가지 차이가 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WPF는 에서 Windows 응용 프로그램을 개발하기 위한 Windows 데스크톱테크놀로지입니다&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;네트워크 프레임워크&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Silverlight는 Windows와 MAC 모두에서 브라우저 플러그인으로 완전히 지원되는 웹 기술입니다(Flash와 유사한 방식으로).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Linux(Moonlight)에서 Silverlight를 실행하기 위한 플러그인도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WPF와 Silverlight 양쪽에서 제공되는 기능(사용자 인터페이스 컴포넌트와 XAML 지원 측면에서)은 유사성이 있지만 Silverlight는 WPF 기능의 서브셋을 포함하는 매우 작은 프레임워크입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Silverlight의 새로운 버전에는 WPF에서 찾을 수 없는 기능이 포함되어 있기 때문에 실제로는 서브셋이 아닙니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WPF에서는 Silverlight에 없는 기능: DirectX를 기반으로 한 완전한 3D 엔진, Windows 7 태스크바 썸네일 및 시스템 레지스트리 가용성 등의 Windows 통합 및 완전한 에 대한 액세스.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle 데이터베이스 지원을 포함한 NET Framework.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 SL은 WPF 앱이 완전한 시스템 액세스로 완전한 신뢰를 실행할 수 있는 파일 시스템 전체 등에 대한 액세스를 방지하는 안전한 샌드박스에서 실행됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전술한 바와 같이 SL은 VisualStateManager 등의 테크놀로지를 Microsoft가 지원하는 WPF 툴킷을 통해 WPF에 세컨더리적으로 도입했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트에 최적인 테크놀로지를 판단하려면 , 다음의 간단한 방법을 참조해 주세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹 연결이 끊긴 상태에서 실행되도록 되어 있는 앱을 작성하거나 위에 나열된 것과 같은 Windows 특정 기능에 액세스해야 하는 앱을 작성하려면 WPF를 사용하는 것이 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;플랫폼에 구애받지 않는 웹 지원 애플리케이션인 Silverlight는 적절한 선택입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아아아아아아아아아아아아아아아아아아아.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Flex와 Adobe Air의 차이와 거의 비슷하다고 할 수 있지만, 이는 다소 오해의 소지가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WPF는 (API를 통해 공개되는) 일련의 테크놀로지입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET Framework 3.0 이후 사용자는 화면에 그리기 위해 에 액세스할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WPF API의 대부분은 Silverlight 앱에서 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 SL 앱은 화면에 그리는 것 이상을 해야 하기 때문에 WPF 외에도 많은 API가 Silverlight에서 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/944608/&lt;a href=&quot;https://stackoverflow.com/questions/944608/wpf-vs-silverlight&quot; target=&quot;_blank&quot; papago-id=&quot;33-1&quot;&gt;wpf-vs-silverlight&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>WPF</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/836</guid>
      <comments>https://gigabyte.tistory.com/836#entry836comment</comments>
      <pubDate>Wed, 19 Apr 2023 23:07:39 +0900</pubDate>
    </item>
    <item>
      <title>Objective-C에서 딜러를 작성하려면 어떻게 해야 합니까?</title>
      <link>https://gigabyte.tistory.com/835</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Objective-C에서 딜러를 작성하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 대표자들이 어떻게 일하는지 알고 있고, 어떻게 그들을 사용할 수 있는지 알고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 어떻게 만들까요?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;은 Objective-C에 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;delegate&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하다&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 만들려면 원하는 위임 메서드를 구현하는 클래스를 정의하고 해당 클래스를 위임 프로토콜 구현으로 표시합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 들어,를 들면, '아까다', '아까다', '다'가 있다고 합시다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UIWebView&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대리자의 메서드를 구현하려면 다음과 같은 클래스를 만들 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@interface MyClass&amp;lt;UIWebViewDelegate&amp;gt;
// ...
@end

@implementation MyClass
- (void)webViewDidStartLoad:(UIWebView *)webView { 
    // ... 
}
@end
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 MyClass 인스턴스를 만들어 웹 보기의 위임자로 할당할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;MyClass *instanceOfMyClass = [[MyClass alloc] init];
myWebView.delegate = instanceOfMyClass;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에에  。&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UIWebView&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하는지 확인하기 한 코드를  수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;webViewDidStartLoad:&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메시지를 사용하고 필요에 따라 발송합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if([self.delegate respondsToSelector:@selector(webViewDidStartLoad:)]) {
    [self.delegate webViewDidStartLoad:self];
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 일반적으로 &quot;Delegate Property&quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;weak&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;) 또는 (ARC의 경우)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;assign&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(Pre-ARC) 오브젝트의 위임자가 그 오브젝트에 대한 강한 참조를 가지고 있는 경우가 많기 때문에 루프를 유지하는 것을 피하기 위해 (예를 들어 뷰 컨트롤러는 대부분의 경우 포함된 뷰의 위임자)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;강의에 참가하기 위한 딜러 만들기&lt;/font&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대리인을 정의하려면 프로토콜에 &lt;a href=&quot;http://www.google.ca/search?q=site:developer.apple.com+protocols+objective+c&amp;amp;btnI&quot; rel=&quot;noreferrer&quot; papago-id=&quot;15-1&quot;&gt;대한 Apple Docs&lt;/a&gt;에서 설명한 대로 대리인의 메서드를 선언해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 보통 정식 프로토콜을 선언합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;선언은 UI WebView.h에서 바꿔 말하면 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@protocol UIWebViewDelegate &amp;lt;NSObject&amp;gt;
@optional
- (void)webViewDidStartLoad:(UIWebView *)webView;
// ... other methods here
@end
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 클래스와 하며, 인 &quot;Displicthe abstract base class&quot; 。&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UIWebViewDelegate&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt; 프로토콜을 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위임 구현자는 다음 프로토콜을 채택해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@interface MyClass &amp;lt;UIWebViewDelegate&amp;gt;
// ...
@end
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 프로토콜에 메서드를 구현합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@optional&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 위임방법과 로) ('대부분의 위임방식에 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-respondsToSelector:&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정 메서드를 호출하기 전에 이 메서드를 호출합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h3 papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명명&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위임 메서드는 일반적으로 위임 클래스 이름부터 시작하여 이름이 지정되며 위임 개체를 첫 번째 매개 변수로 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그들은 또한 종종 유언장, 해야 할 것, 또는 실행한 것을 사용한다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;so,는,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;webViewDidStartLoad:&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 뷰가 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;loadStarted&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 (매개변수를 사용하지 않음)입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h3 papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속도 최적화&lt;/font&gt;&lt;/h3&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메시지를 보낼 때마다 대리인이 셀렉터에 응답하는지 여부를 확인하는 대신 대리인이 설정될 때 해당 정보를 캐시할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 위한 매우 깨끗한 방법 중 하나는 다음과 같이 비트필드를 사용하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@protocol SomethingDelegate &amp;lt;NSObject&amp;gt;
@optional
- (void)something:(id)something didFinishLoadingItem:(id)item;
- (void)something:(id)something didFailWithError:(NSError *)error;
@end

@interface Something : NSObject
@property (nonatomic, weak) id &amp;lt;SomethingDelegate&amp;gt; delegate;
@end

@implementation Something {
  struct {
    unsigned int didFinishLoadingItem:1;
    unsigned int didFailWithError:1;
  } delegateRespondsTo;
}
@synthesize delegate;

- (void)setDelegate:(id &amp;lt;SomethingDelegate&amp;gt;)aDelegate {
  if (delegate != aDelegate) {
    delegate = aDelegate;

    delegateRespondsTo.didFinishLoadingItem = [delegate respondsToSelector:@selector(something:didFinishLoadingItem:)];
    delegateRespondsTo.didFailWithError = [delegate respondsToSelector:@selector(something:didFailWithError:)];
  }
}
@end
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 대리인이 할 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;delegateRespondsTo&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;structure를 송신하는 것이  「」를 으로 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-respondsToSelector:&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반복해서.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h3 papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비공식 대표자&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로토콜이 존재하기 전에는 일반적으로 다음과 같은 카테고리를 &lt;a href=&quot;http://www.google.ca/search?q=site:developer.apple.com+category+objective+c&amp;amp;btnI&quot; papago-id=&quot;31-1&quot; rel=&quot;noreferrer&quot;&gt;사용&lt;/a&gt;했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NSObject&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위임자가 구현할 수 있는 방법을 선언합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 들어, 「」라고 하는 것은,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CALayer&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도 이렇게 있어요, 하다, 하다, 하다, 하다, 하다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@interface NSObject(CALayerDelegate)
- (void)displayLayer:(CALayer *)layer;
// ... other methods here
@end
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;라도 '실장'할 수 을 알 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;displayLayer:&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 같은 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-respondsToSelector:&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 메서드를 호출하기 위해 위에서 설명한 대로 접근합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 이 하고 &quot; &quot;를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;delegate&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(프로토콜을 준수한다고 선언할 수 없습니다.)&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;라이브러리에서 으로 사용되고 에서는 위의  현대적인 해야 합니다.이을 일으키기 입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 왜냐하면 이 접근법이 오염을 일으키기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NSObject&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(오타 및 유사한 오류에 대해 컴파일러가 경고하는 것을 어렵게 합니다).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;승인된 답변은 훌륭하지만, 1분간의 답변을 원하는 경우 다음을 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MyClass.h 파일은 다음과 같습니다(댓글이 있는 대리자 행 추가).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#import &amp;lt;BlaClass/BlaClass.h&amp;gt;

@class MyClass;             //define class, so protocol can see MyClass
@protocol MyClassDelegate &amp;lt;NSObject&amp;gt;   //define delegate protocol
    - (void) myClassDelegateMethod: (MyClass *) sender;  //define delegate method to be implemented within another class
@end //end protocol

@interface MyClass : NSObject {
}
@property (nonatomic, weak) id &amp;lt;MyClassDelegate&amp;gt; delegate; //define MyClassDelegate as delegate

@end
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MyClass.m 파일은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#import &quot;MyClass.h&quot;
@implementation MyClass 
@synthesize delegate; //synthesise  MyClassDelegate delegate

- (void) myMethodToDoStuff {
    [self.delegate myClassDelegateMethod:self]; //this will call the method implemented in your other class    
}

@end
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 클래스(이 경우 MyVC라는 이름의 UIViewController)에서 대리인을 사용하려면 다음 절차를 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#import &quot;MyClass.h&quot;
@interface MyVC:UIViewController &amp;lt;MyClassDelegate&amp;gt; { //make it a delegate for MyClassDelegate
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MyVC.m:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;myClass.delegate = self;          //set its delegate to self somewhere
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위임 방식 구현&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;- (void) myClassDelegateMethod: (MyClass *) sender {
    NSLog(@&quot;Delegates are great!&quot;);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위임 지원을 작성하기 위해 정식 프로토콜 방법을 사용할 때 다음과 같은 사항을 추가하여 적절한 유형 검사(비록 런타임, 컴파일 시간이 아님)를 보장할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (![delegate conformsToProtocol:@protocol(MyDelegate)]) {
    [NSException raise:@&quot;MyDelegate Exception&quot;
                format:@&quot;Parameter does not conform to MyDelegate protocol at line %d&quot;, (int)__LINE__];
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(setDelegate) 코드를 입력합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 통해 실수를 최소화할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아마 이것은 당신이 놓치고 있는 것과 비슷할 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C++와 같은 관점에서 온 경우, 딜러들은 조금 익숙해지는데 시간이 걸리지만 기본적으로는 '일만 할 뿐'입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;NSWindow에 위임자로 쓴 일부 개체를 설정하지만 개체에는 여러 위임 메서드 중 하나 또는 몇 가지에 대한 구현(메서드)만 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 무슨  래서 so so so so so so so so so so so so so so, 리 so so so so so?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NSWindow&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.객관적-c의 '오브젝티브-c합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오브젝티브-c만 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;respondsToSelector&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가 그 호출하고 입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 objective-c의 작동 방식입니다. 즉, 필요에 따라 메서드를 검색합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 것은 , ,  '자기 물건으로 하는 것', '자기 물건으로 하는 것', '자기 물건으로 하는 것', ' 물건으로 하는 거 있잖아요.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예예 、 를를 、 ,를 、&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NSArray&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 종류의사물 에서, 만이 27개의 다른 을 가지고 있다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-(void)setToBue;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;에 &lt;font class=&quot;papago-parent&quot;&gt;콜&lt;/font&gt;을 하기 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setToBlue&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요한 18개 모두에 대해 다음과 같은 정보를 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for (id anObject in myArray)
{
  if ([anObject respondsToSelector:@selector(@&quot;setToBlue&quot;)])
     [anObject setToBlue]; 
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또를 '유지하다'로  것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;nil&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 안에서&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MyClass dealloc&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;★★★★★★ 。&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래의 간단한 단계별 튜토리얼을 확인하여 딜러가 iOS에서 어떻게 작동하는지 이해하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;a href=&quot;http://rdcworld-iphone.blogspot.in/2013/02/delegate-in-ios.html&quot;&gt;&lt;strong papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iOS에서의 위임&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2개의 View Controller(데이터를 1개에서 다른 것으로 송신하기 위한)를 작성했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;FirstViewController 구현 위임(데이터 제공)&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SecondViewController가 위임(데이터를 수신함)을 선언합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;애플이 권장하는 모범 사례로서 대표자(정의상 프로토콜)는 다음을 준수하는 것이 좋습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NSObject&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로토콜입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@protocol MyDelegate &amp;lt;NSObject&amp;gt;
    ...
@end
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를하여 대리자  반드시 할 필요가 )를 할 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@optional&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 붙입니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@protocol MyDelegate &amp;lt;NSObject&amp;gt;
    ...
    ...
      // Declaration for Methods that 'must' be implemented'
    ...
    ...
    @optional
    ...
      // Declaration for Methods that 'need not necessarily' be implemented by the class conforming to your delegate
    ...
@end
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 ( &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;respondsToSelector&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(위임자에게 적합한) 뷰가 옵션 메서드를 실제로 구현했는지 여부를 확인합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일단 대표자를 이해하면 이 모든 답변이 타당하다고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;개인적으로 저는 C/C++의 나라에서 왔고, 그 전에 Fortran 등의 절차적 언어에서 왔기 때문에 C++ 패러다임에서 유사한 유사점을 찾는 것에 대한 저의 2분간의 견해가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C++/Java 프로그래머에게 딜러에 대해 설명하면 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;딜러란 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이들은 다른 클래스 내의 클래스에 대한 정적 포인터입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;포인터를 할당하면 해당 클래스의 함수/메서드를 호출할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 클래스의 일부 함수는 다른 클래스로 &quot;위임&quot;됩니다(C++ 월드에서는 클래스 객체 포인터에 의한 포인터).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로토콜이란 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;개념적으로는 위임 클래스로 할당하는 클래스의 헤더 파일과 유사한 목적으로 기능합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로토콜은 클래스 내에서 포인터를 위임자로 설정한 클래스에서 구현해야 하는 메서드를 정의하는 명시적인 방법입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게 하면 C++에서 비슷한 걸 할 수 있을까요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 C++에서 실행하려고 하면 클래스 정의에서 클래스(개체)에 대한 포인터를 정의한 후 기본 클래스에 위임으로 추가 함수를 제공하는 다른 클래스에 연결합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;단, 이 배선은 코드 내에서 유지되어야 하며 서툴고 오류가 발생하기 쉽습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;목표 C는 프로그래머가 이 decipliine을 유지하는 데 능숙하지 않다고 가정하고 컴파일러 제한을 제공하여 클린 구현을 강제합니다.&lt;/font&gt;&lt;/p&gt;&lt;h1 papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스위프트 버전&lt;/font&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;77&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대표자는 다른 반에서 일을 하는 반일 뿐이다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 코드를 읽고 Swift에서 이 작업을 수행하는 방법을 보여주는 다소 바보 같은(그러나 희망적으로 계몽적인) Playground의 예를 들어보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// A protocol is just a list of methods (and/or properties) that must
// be used by any class that adopts the protocol.
protocol OlderSiblingDelegate: class {
    // This protocol only defines one required method
    func getYourNiceOlderSiblingAGlassOfWater() -&amp;gt; String
}

class BossyBigBrother {
    
    // The delegate is the BossyBigBrother's slave. This position can 
    // be assigned later to whoever is available (and conforms to the 
    // protocol).
    weak var delegate: OlderSiblingDelegate?
    
    func tellSomebodyToGetMeSomeWater() -&amp;gt; String? {
        // The delegate is optional because there might not be anyone
        // nearby to boss around.
        return delegate?.getYourNiceOlderSiblingAGlassOfWater()
    }
}

// PoorLittleSister conforms to the OlderSiblingDelegate protocol
class PoorLittleSister: OlderSiblingDelegate {

    // This method is repquired by the protocol, but the protocol said
    // nothing about how it needs to be implemented.
    func getYourNiceOlderSiblingAGlassOfWater() -&amp;gt; String {
        return &quot;Go get it yourself!&quot;
    }
    
}

// initialize the classes
let bigBro = BossyBigBrother()
let lilSis = PoorLittleSister()

// Set the delegate 
// bigBro could boss around anyone who conforms to the 
// OlderSiblingDelegate protocol, but since lilSis is here, 
// she is the unlucky choice.
bigBro.delegate = lilSis

// Because the delegate is set, there is a class to do bigBro's work for him.
// bigBro tells lilSis to get him some water.
if let replyFromLilSis = bigBro.tellSomebodyToGetMeSomeWater() {
    print(replyFromLilSis) // &quot;Go get it yourself!&quot;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;78&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제로 딜러는 다음과 같은 상황에서 자주 사용됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;79&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스가 일부 정보를 다른 클래스에 전달할 필요가 있는 경우&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;80&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스에서 다른 클래스가 사용자 정의할 수 있도록 허용하려는 경우&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;81&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위임 클래스가 필요한 프로토콜을 준수한다는 점을 제외하고 클래스는 서로에 대해 미리 알 필요가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;82&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 다음 두 기사를 읽을 것을 강력히 추천한다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그들은 내가 &lt;a href=&quot;https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;82-1&quot;&gt;대표자들&lt;/a&gt;을 문서보다 더 잘 이해할 수 있도록 도와주었다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;http://www.andrewcbancroft.com/2015/03/26/what-is-delegation-a-swift-developers-guide/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;83&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위임이란?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;– Swift 개발자 가이드&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.andrewcbancroft.com/2015/04/08/how-delegation-works-a-swift-developer-guide/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;84&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위임 구조 – 신속한 개발자 가이드&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;85&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좋아요, 이건 질문에 대한 답은 아니지만, 만약 당신이 당신 자신의 대리인을 만드는 방법을 찾고 있다면, 아마도 훨씬 더 간단한 것이 당신에게 더 나은 답이 될 수 있을 거예요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;86&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 거의 필요하지 않기 때문에 나의 대표자들을 거의 실행하지 않는다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;위임 개체에 대해 위임자를 하나만 가질 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 통지보다 일방적인 커뮤니케이션/데이터 전달을 위해 대리인을 필요로 하는 경우.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;87&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;NSNotification은 여러 수신자에게 개체를 전달할 수 있으며 매우 사용하기 쉽습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 동작합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;88&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MyClass.m 파일은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#import &quot;MyClass.h&quot;
@implementation MyClass 

- (void) myMethodToDoStuff {
//this will post a notification with myClassData (NSArray in this case)  in its userInfo dict and self as an object
[[NSNotificationCenter defaultCenter] postNotificationName:@&quot;myClassUpdatedData&quot;
                                                    object:self
                                                  userInfo:[NSDictionary dictionaryWithObject:selectedLocation[@&quot;myClassData&quot;] forKey:@&quot;myClassData&quot;]];
}
@end
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;89&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 클래스에서 알림을 사용하려면:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스를 옵서버로 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(otherClassUpdatedItsData:) name:@&quot;myClassUpdatedData&quot; object:nil];
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;90&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실렉터를 실장합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;- (void) otherClassUpdatedItsData:(NSNotification *)note {
    NSLog(@&quot;*** Other class updated its data ***&quot;);
    MyClass *otherClass = [note object];  //the object itself, you can call back any selector if you want
    NSArray *otherClassData = [note userInfo][@&quot;myClassData&quot;]; //get myClass data object and do whatever you want with it
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;91&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵저버로서 수업을 빼는 것을 잊지 마세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;92&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작성한 클래스가 있으며 이벤트가 발생했을 때 이를 통지할 수 있도록 위임 속성을 선언한다고 가정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@class myClass;

@protocol myClassDelegate &amp;lt;NSObject&amp;gt;

-(void)myClass:(MyClass*)myObject requiredEventHandlerWithParameter:(ParamType*)param;

@optional
-(void)myClass:(MyClass*)myObject optionalEventHandlerWithParameter:(ParamType*)param;

@end


@interface MyClass : NSObject

@property(nonatomic,weak)id&amp;lt; MyClassDelegate&amp;gt; delegate;

@end
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, ''을 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MyClass&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; file 파일)및한 후  파일(「」)의 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MyClass&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 타입type 。&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;id&amp;lt; MyClassDelegate&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는를 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MyClassDelegate&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;50&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;weak로  수 유지 사이클을  매우 는 &quot;heak&quot;을&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 유지 사이클을 방지하기 위해 매우 중요합니다(대부분 딜러가 유지).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MyClass&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;51&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 대리인을 유지로 선언한 경우 둘 다 서로를 유지하며 둘 다 해제되지 않습니다).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;52&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;으로는 '의례적인 방법'이 '의례적인 방법'이 '의례적인 방법'으로 넘어간다는 을 알 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MyClass&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;53&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; parameter.가 instance의 입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 위임자가 몇 가지 메서드를 호출하는 경우의 베스트 프랙티스입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MyClass&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;54&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 및 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MyClassDelegate&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;55&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 개로&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MyClass&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;56&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 들어 여러 개의 &quot;&quot; &quot; &quot; &quot; &quot; &quot;   경우&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UITableView's&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;57&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ViewController&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;58&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 「」라고 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UITableViewDelegate&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;59&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모두에게요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;60&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 그 에.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MyClass&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;61&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if([_delegate respondsToSelector:@selector(myClass: requiredEventHandlerWithParameter:)])
{
     [_delegate myClass:self requiredEventHandlerWithParameter:(ParamType*)param];
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;109&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 위임자가 호출하려는 프로토콜 메서드에 응답하는지 여부를 확인합니다. 위임자가 프로토콜 메서드를 구현하지 않으면 앱이 충돌합니다(프로토콜 메서드가 필요하더라도).&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;110&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자신의 대리인을 작성하려면 먼저 프로토콜을 작성하고 구현하지 않고 필요한 메서드를 선언해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 위임 또는 위임 메서드를 구현할 헤더 클래스에 이 프로토콜을 구현하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;111&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로토콜은 다음과 같이 선언해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@protocol ServiceResponceDelegate &amp;lt;NSObject&amp;gt;

- (void) serviceDidFailWithRequestType:(NSString*)error;
- (void) serviceDidFinishedSucessfully:(NSString*)success;

@end
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;112&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 몇 가지 작업을 수행해야 하는 서비스 클래스입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대리인을 정의하는 방법과 대리인을 설정하는 방법을 보여 줍니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;태스크 완료 후 구현 클래스에서는 딜러가 메서드를 호출합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@interface ServiceClass : NSObject
{
id &amp;lt;ServiceResponceDelegate&amp;gt; _delegate;
}

- (void) setDelegate:(id)delegate;
- (void) someTask;

@end

@implementation ServiceClass

- (void) setDelegate:(id)delegate
{
_delegate = delegate;
}

- (void) someTask
{
/*

   perform task

*/
if (!success)
{
[_delegate serviceDidFailWithRequestType:@”task failed”];
}
else
{
[_delegate serviceDidFinishedSucessfully:@”task success”];
}
}
@end
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;113&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 클래스는 서비스 클래스를 호출하는 기본 뷰 클래스입니다.이 클래스는 대리자를 직접 설정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 프로토콜은 헤더 클래스에서 구현됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@interface viewController: UIViewController &amp;lt;ServiceResponceDelegate&amp;gt;
{
ServiceClass* _service;
}

- (void) go;

@end

@implementation viewController

//
//some methods
//

- (void) go
{
_service = [[ServiceClass alloc] init];
[_service setDelegate:self];
[_service someTask];
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;114&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이상입니다. 이 클래스에서 위임 메서드를 구현함으로써 작업/태스크가 완료되면 제어가 다시 시작됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;115&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대리인을 작성하는 간단한 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;62&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일에 .&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;h 파일에 프로토콜을 만듭니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 @후을 @class로 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt; As the protocol I am going to use is UIViewController class&amp;gt;.&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;117&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;117-0&quot;&gt;스텝 &lt;/strong&gt;: &lt;strong papago-id=&quot;117-0&quot;&gt;1 &lt;/strong&gt;: UIViewController 클래스의 서브클래스가 되는 &quot;YourViewController&quot;라는 이름의 새 클래스 프로토콜을 만들고 이 클래스를 두 번째 ViewController에 할당합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;118&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;118-0&quot;&gt;순서 &lt;/strong&gt;: &lt;strong papago-id=&quot;118-0&quot;&gt;2 &lt;/strong&gt;: &quot;YourViewController&quot; 파일로 이동하여 다음과 같이 변경합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#import &amp;lt;UIKit/UIkit.h&amp;gt;
@class YourViewController;

@protocol YourViewController Delegate &amp;lt;NSObject&amp;gt;

 @optional
-(void)defineDelegateMethodName: (YourViewController *) controller;

@required
-(BOOL)delegateMethodReturningBool: (YourViewController *) controller;

  @end
  @interface YourViewController : UIViewController

  //Since the property for the protocol could be of any class, then it will be marked as a type of id.

  @property (nonatomic, weak) id&amp;lt; YourViewController Delegate&amp;gt; delegate;

@end
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;119&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로토콜 동작에 정의된 메서드는 프로토콜 정의의 일부로 @optional 및 @required로 제어할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;120&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;순서: 3:&lt;/font&gt;&lt;/strong&gt; &lt;strong papago-id=&quot;121&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위임자의 실시&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    #import &quot;delegate.h&quot;

   @interface YourDelegateUser ()
     &amp;lt;YourViewControllerDelegate&amp;gt;
   @end

   @implementation YourDelegateUser

   - (void) variousFoo {
      YourViewController *controller = [[YourViewController alloc] init];
      controller.delegate = self;
   }

   -(void)defineDelegateMethodName: (YourViewController *) controller {
      // handle the delegate being called here
   }

   -(BOOL)delegateMethodReturningBool: (YourViewController *) controller {
      // handle the delegate being called here
      return YES;
   }

   @end
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;122&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;//메서드를 호출하기 전에 메서드가 정의되어 있는지 여부를 테스트합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; - (void) someMethodToCallDelegate {
     if ([[self delegate] respondsToSelector:@selector(defineDelegateMethodName:)]) {
           [self.delegate delegateMethodName:self]; 
     }
  }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;63&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;은 ★★★★★★★★★★★★★★★★★★★★★★★★★★★」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Swift&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;64&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;「」의 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;delegate&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;65&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;126&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 대리인이란 무엇일까요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;…소프트웨어 개발에는 일반적으로 발생하는 문제를 특정 컨텍스트 내에서 해결하는 데 도움이 되는 일반적인 재사용 가능한 솔루션 아키텍처가 있습니다. 이를테면 이러한 &quot;구조&quot;는 설계 패턴으로 가장 잘 알려져 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;위임은 특정 이벤트가 발생할 때 한 개체가 다른 개체로 메시지를 보낼 수 있도록 하는 설계 패턴입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;오브젝트 A가 오브젝트 B를 호출하여 액션을 실행한다고 가정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;조치가 완료되면 객체 A는 B가 작업을 완료했음을 알고 필요한 조치를 취해야 합니다. 이 작업은 딜러의 도움을 받아 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;127&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 자세한 설명은 Swift를 사용하여 클래스 간에 데이터를 전달하는 커스텀 대리인을 만드는 방법을 보여 드리겠습니다. 이&lt;a href=&quot;https://github.com/jamesrochabrun/DelegateTutorial&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;127-1&quot;&gt; 스타터 프로젝트를 다운로드 또는 복제하여 실행합니다.&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;66&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 두 클래스가  수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ViewController A&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;67&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ★★★★★★★★★★★★★★★★★」&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ViewController B&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;68&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 두 을 누르면 .의 배경색이 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ViewController&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;69&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;무무복 ?? ???&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 그럼 이제 B클래스에 대한 뷰를 탭 했을 때 A클래스의 배경색도 쉽게 바꿀 수 있도록 생각해 봅시다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;132&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제는 이 뷰가 클래스 B의 일부이며 클래스 A에 대해 전혀 모른다는 것입니다.따라서 이 두 클래스 간에 통신할 방법을 찾아야 합니다.이것이 위임이 빛을 발하는 부분입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;실장을 6단계로 나누었으므로, 필요에 따라서 커닝 시트로 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;133&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스텝 1: ClassBVC 파일에서 플러그마 마크1을 찾아 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//MARK: step 1 Add Protocol here.
protocol ClassBVCDelegate: class {
func changeBackgroundColor(_ color: UIColor?)
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;70&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 '만들다'를 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;protocol&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;71&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;B를 사용하다&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로토콜 내에서는 구현 요건에 따라 원하는 수의 함수를 만들 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인 '이러다'를 할 수 있는 가 하나 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UIColor&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;72&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt; 의전, &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;, &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;, &lt;font class=&quot;papago-parent&quot;&gt;의전&lt;/font&gt;, 의전, &lt;font class=&quot;papago-parent&quot;&gt;의전&lt;/font&gt;, 의전, &lt;font class=&quot;papago-parent&quot;&gt;의전, &lt;/font&gt;의전, 의전, 의전, 의전, 의전, 의전, 의전, 의전, 의전, 의전, 의전, 의전, 의전, 의전, 의전, 의전, &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;delegate&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;73&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 클래스 이름의 끝에 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ClassBVCDelegate&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;74&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;75&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 2:를 찾습니다: 프래그마 마크2는 프래그마 마크2로 하겠습니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ClassVBC&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;76&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 덧붙입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//MARK: step 2 Create a delegate property here.
weak var delegate: ClassBVCDelegate?
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;77&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 위임  됩니다.이은 반드시 이 속성을 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;protocol&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;78&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;타이핑하다&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션이어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 속성 앞에 weak 키워드를 추가하여 유지 사이클과 메모리 누수 가능성을 방지해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재로서는 그것이 무엇을 의미하는지 모르는 경우에는 이 키워드를 추가하는 것을 잊지 마십시오.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;79&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;: handleTap 3단계에서 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;method&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;80&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ClassBVC&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;81&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 덧붙입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//MARK: step 3 Add the delegate method call here.
delegate?.changeBackgroundColor(tapGesture.view?.backgroundColor)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;82&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;앱을 실행하고 화면을 탭하면 새로운 동작을 볼 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 맞지만, 제가 지적하고 싶은 것은 앱이 대리인을 호출해도 크래시 되지 않는다는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 옵션값으로 작성하기 때문에 위임된 것이 존재하지 않는 경우에도 크래시 되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 이제 ,, 볼로 요?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ClassAVC&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;83&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일링하여 위임받은 것을 만듭니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;84&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 4: 내에서 .handleTap은 4의  마크입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ClassAVC&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;85&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'나'는 '나'가 아니라 '나'가 아니라 '나'는 '나'가 아니라 '나'는 '나'입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//MARK: step 4 conform the protocol here.
class ClassAVC: UIViewController, ClassBVCDelegate {
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;86&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재&lt;/font&gt; &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt; AVC는&lt;font class=&quot;papago-parent&quot;&gt; AVC&lt;/font&gt;를 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ClassBVCDelegate&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;87&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;protocol을&quot;Type '(클래스)(클래스(클래스)를 입력하세요)&quot;라는하고 있는 을 알 수 .&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AVC™ '클래스B'&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;VDelegate' 프로토콜을 준수하지 않으며, 이는 단지 아직 프로토콜의 메서드를 사용하지 않았다는 것을 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 클래스 A가 프로토콜을 채택할 때 클래스 B와 계약을 체결하는 것과 같으며 이 계약에는 &quot;나를 채택하는 모든 클래스는 내 기능을 사용해야 합니다!&quot;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이치노&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;88&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한 메모:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 당신이 여기서 온다면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Objective-C&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;89&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그, 그  수  저나 만한 것은, 이 방법, 이 방법, 이 방법, 이 방법, 이 방법, 이 방법, 이 방법 등이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Swift&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;90&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에서는 옵션인 '무조건'을 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;protocols&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;91&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 수 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;protocol&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;92&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;protocol&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;93&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;★★★★★★ 。&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;94&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;protocols&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;95&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 오브젝트에 대해 하나의 책임을 부여한다는 개념을 따르지만, 구현 내용에 따라 달라질 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;160&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://www.avanderlee.com/swift-2-0/optional-protocol-methods/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;160-0&quot;&gt;여기 옵션&lt;/a&gt; 메서드에 대한 좋은 기사가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;161&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;5단계: prepare for segue 메서드에서 5단계 플러그마크를 찾아 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//MARK: step 5 create a reference of Class B and bind them through the `prepareforsegue` method.
if let nav = segue.destination as? UINavigationController, let classBVC = nav.topViewController as? ClassBVC {
classBVC.delegate = self
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;96&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에서는 그냥  '아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 예.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ClassBVC&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;97&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 해 주는데, 자신이다, 자기 자신이다, 자기 자신이다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 쎄,, 란란란&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ClassAVC&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;98&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;★★★★★★★★★★★★★★★★★!&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;99&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 6:으로 6에서 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ClassAVC&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;100&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 그럼 이제 이 해 볼까요?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;protocol&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;101&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;func &lt;strong papago-id=&quot;101-1&quot;&gt;changeBackgroundColor&lt;/strong&gt; 라고 입력하면 자동으로 완료됨을 알 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 안에 실장을 추가할 수 있습니다.이 예에서는 배경색을 변경하여 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//MARK: step 6 finally use the method of the contract
func changeBackgroundColor(_ color: UIColor?) {
view.backgroundColor = color
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;168&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 앱을 실행하세요!&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;Delegates&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;102&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 널려 있어서  못하고 될.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tableview&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;103&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에서는 많은 의 '위임 '위임', ''&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UIKIT&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;104&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 및  많은 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;frameworks&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;105&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한, 그들은 이러한 주요 문제들을 해결한다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;173&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물체가 단단히 결합되지 않도록 하십시오.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;174&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오브젝트를 서브클래스 할 필요 없이 동작과 외관을 변경할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;175&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;임의 개체로 작업을 처리할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;106&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대리인을  이것만 거입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 방금 커스텀 딜리버를 구현했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것만으로 많은 문제를 생각하고 있는 것을 알고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위임을 이해하는 것은 매우 중요한 디자인 패턴입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;iOS&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;107&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오브젝트 간에 1대 1의 관계가 있다는 것을 항상 염두에 두십시오.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;178&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오리지널 &lt;a href=&quot;https://medium.com/compileswift/implementing-delegates-in-swift-step-by-step-d3211cbac3ef&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;178-1&quot;&gt;튜토리얼&lt;/a&gt;은 이쪽에서 보실 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;179&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;답변은 실제로 이루어지지만, 대리인을 만들기 위한 &quot;치트 시트&quot;를 드리고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DELEGATE SCRIPT

CLASS A - Where delegate is calling function

@protocol &amp;lt;#Protocol Name#&amp;gt; &amp;lt;NSObject&amp;gt;

-(void)delegateMethod;

@end

@interface &amp;lt;#Some ViewController#&amp;gt; : &amp;lt;#UIViewController#&amp;gt; 

@property (nonatomic, assign) id &amp;lt;&amp;lt;#Protocol Name#&amp;gt;&amp;gt; delegate;

@end


@implementation &amp;lt;#Some ViewController#&amp;gt; 

-(void)someMethod {
    [self.delegate methodName];
}

@end




CLASS B - Where delegate is called 

@interface &amp;lt;#Other ViewController#&amp;gt; (&amp;lt;#Delegate Name#&amp;gt;) {}
@end

@implementation &amp;lt;#Other ViewController#&amp;gt; 

-(void)otherMethod {
    CLASSA *classA = [[CLASSA alloc] init];

    [classA setDelegate:self];
}

-delegateMethod() {

}

@end
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;180&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;View Controller.h&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@protocol NameDelegate &amp;lt;NSObject&amp;gt;

-(void)delegateMEthod: (ArgType) arg;

@end

@property id &amp;lt;NameDelegate&amp;gt; delegate;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;181&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;View Controller.m&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[self.delegate delegateMEthod: argument];
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;182&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MainViewController.m&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ViewController viewController = [ViewController new];
viewController.delegate = self;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;183&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방법:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;-(void)delegateMEthod: (ArgType) arg{
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;184&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 관점에서는 위임 메서드에 대해 별도의 클래스를 만들면 원하는 장소에서 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;185&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;[ Custom Drop Down Class . h ]으로 이동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;typedef enum
{
 DDSTATE,
 DDCITY
}DropDownType;

@protocol DropDownListDelegate &amp;lt;NSObject&amp;gt;
@required
- (void)dropDownDidSelectItemWithString:(NSString*)itemString     DropDownType:(DropDownType)dropDownType;
@end
@interface DropDownViewController : UIViewController
{
 BOOL isFiltered;
}
@property (nonatomic, assign) DropDownType dropDownType;
@property (weak) id &amp;lt;DropDownListDelegate&amp;gt; delegate;
@property (strong, nonatomic) NSMutableArray *array1DropDown;
@property (strong, nonatomic) NSMutableArray *array2DropDown;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;186&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 후 in.m 파일 오브젝트를 사용하여 어레이를 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
CGFloat rowHeight = 44.0f;
return rowHeight;
}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return isFiltered?[self.array1DropDown count]:[self.array2DropDown count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *simpleTableIdentifier = @&quot;TableCell&quot;;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}

if (self.delegate) {
    if (self.dropDownType == DDCITY) {
        cell.textLabel.text = [self.array1DropDown objectAtIndex:indexPath.row];
    }
    else if (self.dropDownType == DDSTATE) {
        cell.textLabel.text = [self.array2DropDown objectAtIndex:indexPath.row];
    }
}
return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
 [self dismissViewControllerAnimated:YES completion:^{
    if(self.delegate){
        if(self.dropDownType == DDCITY){
            [self.delegate dropDownDidSelectItemWithString:[self.array1DropDown objectAtIndex:indexPath.row] DropDownType:self.dropDownType];
        }
        else if (self.dropDownType == DDSTATE) {
            [self.delegate dropDownDidSelectItemWithString:[self.array2DropDown objectAtIndex:indexPath.row] DropDownType:self.dropDownType];
        }
    }
}];
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;187&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서는 모두 커스텀 위임 클래스로 설정됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 원하는 곳에서 위임 방법을 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어...&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;188&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 후 다른 뷰컨트롤러 Import에서&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;189&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이와 같은 위임 메서드를 호출하기 위한 작업을 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;- (IBAction)dropDownBtn1Action:(id)sender {
DropDownViewController *vehicleModelDropView = [[DropDownViewController alloc]init];
vehicleModelDropView.dropDownType = DDCITY;
vehicleModelDropView.delegate = self;
[self presentViewController:vehicleModelDropView animated:YES completion:nil];
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;190&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 콜 대리자 방식 이후&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;- (void)dropDownDidSelectItemWithString:(NSString *)itemString DropDownType:(DropDownType)dropDownType {
switch (dropDownType) {
    case DDCITY:{
        if(itemString.length &amp;gt; 0){
            //Here i am printing the selected row
            [self.dropDownBtn1 setTitle:itemString forState:UIControlStateNormal];
        }
    }
        break;
    case DDSTATE: {
        //Here i am printing the selected row
        [self.dropDownBtn2 setTitle:itemString forState:UIControlStateNormal];
    }

    default:
        break;
}
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;191&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위임:- 작성&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@protocol addToCartDelegate &amp;lt;NSObject&amp;gt;

-(void)addToCartAction:(ItemsModel *)itemsModel isAdded:(BOOL)added;

@end
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;192&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전송하고 데이터를 보내는 보기에 위임자를 할당하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[self.delegate addToCartAction:itemsModel isAdded:YES];
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;//1.
//Custom delegate 
@protocol TB_RemovedUserCellTag &amp;lt;NSObject&amp;gt;

-(void)didRemoveCellWithTag:(NSInteger)tag;

@end

//2.
//Create a weak reference in a class where you declared the delegate
@property(weak,nonatomic)id &amp;lt;TB_RemovedUserCellTag&amp;gt; removedCellTagDelegate;

//3. 
// use it in the class
  [self.removedCellTagDelegate didRemoveCellWithTag:self.tag];

//4. import the header file in the class where you want to conform to the protocol
@interface MyClassUsesDelegate ()&amp;lt;TB_RemovedUserCellTag&amp;gt;

@end
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;193&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;//5. 클래스 .m - (void)didRemoveCellWithTag: (NSInterger)태그 {NSLog@(&quot;Tag %d&quot;, tag)에서 메서드를 구현합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;194&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;}&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;195&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 온라인으로 제품을 구입하면 배송/배송 등 다른 팀에서 처리하는 과정을 거칩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 배송이 완료되면 배송팀은 배송팀에 통지해야 합니다.이 정보를 방송하는 것은 다른 사람에게 오버헤드가 되기 때문에/벤더는 이 정보를 필요한 사람에게만 전달하고 싶을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;196&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 앱의 관점에서 보면 이벤트는 온라인 주문이 될 수 있고, 다른 팀은 여러 뷰가 될 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;197&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 Shipping View를 Shipping team으로, Delivery View를 Delivery team으로 코드화한 예입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//Declare the protocol with functions having info which needs to be communicated
protocol ShippingDelegate : class {
    func productShipped(productID : String)
}
//shippingView which shows shipping status of products
class ShippingView : UIView
{

    weak var delegate:ShippingDelegate?
    var productID : String

    @IBAction func checkShippingStatus(sender: UIButton)
    {
        // if product is shipped
        delegate?.productShipped(productID: productID)
    }
}
//Delivery view which shows delivery status &amp;amp; tracking info
class DeliveryView: UIView,ShippingDelegate
{
    func productShipped(productID : String)
    {
        // update status on view &amp;amp; perform delivery
    }
}

//Main page on app which has both views &amp;amp; shows updated info on product whole status
class ProductViewController : UIViewController
{
    var shippingView : ShippingView
    var deliveryView : DeliveryView

    override func viewDidLoad() {
        super.viewDidLoad()
        // as we want to update shipping info on delivery view, so assign delegate to delivery object
        // whenever shipping status gets updated it will call productShipped method in DeliveryView &amp;amp; update UI.
        shippingView.delegate = deliveryView
        //
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;198&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 장의 그림은 천 마디 이상의 단어이다:-P&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MAak9.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MAak9.png&quot; alt=&quot;cpp-objc&quot; papago-attr-id=&quot;1&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;108&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; ''&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;greeter&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;109&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;110&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Objective-C 코드는 &lt;em papago-id=&quot;110-1&quot;&gt;대리자&lt;/em&gt;로 알려져 있으며 이는 순수 가상 함수의 클래스를 구현하는 객체에 대한 C++ 포인터에 지나지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;202&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/626898/&lt;a href=&quot;https://stackoverflow.com/questions/626898/how-do-i-create-delegates-in-objective-c&quot; target=&quot;_blank&quot; papago-id=&quot;202-1&quot;&gt;how-do-i-create-delegates-in-objective-c&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>ios</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/835</guid>
      <comments>https://gigabyte.tistory.com/835#entry835comment</comments>
      <pubDate>Wed, 19 Apr 2023 23:07:31 +0900</pubDate>
    </item>
    <item>
      <title>월별 및 연도별 SQL 그룹화</title>
      <link>https://gigabyte.tistory.com/834</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;월별 및 연도별 SQL 그룹화&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;month-year&quot; - &quot;9-2011&quot;과 같이 &quot;date&quot; 열을 표시하려면 SQL 쿼리에 무엇을 써야 할지 잘 모르겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT MONTH(date) + '.' + YEAR(date) AS Mjesec, SUM(marketingExpense) AS SumaMarketing, SUM(revenue) AS SumaZarada 
FROM [Order]
WHERE (idCustomer = 1) AND (date BETWEEN '2001-11-3' AND '2011-11-3')
GROUP BY MONTH(date), YEAR(date)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 저는 첫 번째 열의 데이터를 월만 표시하는 것이 아니라 월과 연도를 표시하는 것으로 변경하고 싶습니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;SELECT CAST(MONTH(date) AS VARCHAR(2)) + '-' + CAST(YEAR(date) AS VARCHAR(4)) AS Mjesec, SUM(marketingExpense) AS SumaMarketing, SUM(revenue) AS SumaZarada 
FROM [Order]
WHERE (idCustomer = 1) AND (date BETWEEN '2001-11-3' AND '2011-11-3')
GROUP BY CAST(MONTH(date) AS VARCHAR(2)) + '-' + CAST(YEAR(date) AS VARCHAR(4))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 @40-Love에서 언급한 바와 같이 선행 0을 사용하여 캐스팅할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;GROUP BY 
  CAST(YEAR(date) AS VARCHAR(4)) + '-' + right('00' + CAST(MONTH(date) AS VARCHAR(2)), 2) 
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MS SQL 구문처럼 보이기 때문에 MS SQL인 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;같은 걸 넣으셔야 돼요&lt;/font&gt;&lt;/font&gt;&lt;code&gt;group by&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 있는 것처럼&lt;/font&gt;&lt;/font&gt;&lt;code&gt;select&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Select MONTH(date)+'-'+YEAR(date), ....
...
...
...
group by MONTH(date)+'-'+YEAR(date)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 SQL Server 2012는 format() 함수를 사용하는 것이 좋습니다. 보다 단순합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT format(date,'MM.yyyy') AS Mjesec, SUM(marketingExpense) AS SumaMarketing, SUM(revenue) AS SumaZarada 
FROM [Order]
WHERE (idCustomer = 1) AND (date BETWEEN '2001-11-3' AND '2011-11-3')
GROUP BY format(date,'MM.yyyy')
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;곱셈을 시도하여 년과 월을 한 숫자가 되도록 조정할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 테스트에 따르면, 이건 더 빨리 달려요&lt;/font&gt;&lt;/font&gt;&lt;code&gt;format(date,'yyyy.MM')&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전년도에는 분류를 하는 것을 선호합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MS SQL Server Express 버전 12.0에서 작성된 코드입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT (YEAR(Date) * 100) + MONTH(Date) AS yyyyMM
FROM [Order]
...
GROUP BY (YEAR(Date) * 100) + MONTH(Date)
ORDER BY yyyyMM
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;Yet another alternative: 

Select FORMAT(date,'MM.yy')
...
...
group by FORMAT(date,'MM.yy')
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 제대로 이해했다면.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;요청에 따라 결과를 그룹화하려면 Group By 절이 선택 문장과 동일한 식이어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;GROUP BY MONTH(date) + '.' + YEAR(date)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;날짜를 &quot;month-date&quot; 형식으로 표시하려면 , 「.」를 「-」로 변경합니다.전체 구문은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT MONTH(date) + '-' + YEAR(date) AS Mjesec, SUM(marketingExpense) AS
SumaMarketing, SUM(revenue) AS SumaZarada 
FROM [Order]
WHERE (idCustomer = 1) AND (date BETWEEN '2001-11-3' AND '2011-11-3')
GROUP BY MONTH(date) + '.' + YEAR(date)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마리아를 위해서&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;DB:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT DATE_FORMAT(date, '%m-%Y')
FROM [Order]
GROUP BY 
DATE_FORMAT(date, '%m-%Y')
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;링크:&lt;a href=&quot;https://mariadb.com/kb/en/library/date_format/&quot; papago-id=&quot;15-1&quot; rel=&quot;noreferrer&quot;&gt; &lt;/a&gt;https://mariadb.com/kb/en/library/&lt;a href=&quot;https://mariadb.com/kb/en/library/date_format/&quot; papago-id=&quot;15-1&quot; rel=&quot;noreferrer&quot;&gt;date_format&lt;/a&gt;/&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;postgresql에서는 날짜 형식 함수(to_char)와 날짜별 그룹화를 사용하여 유사한 쿼리를 작성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT to_char (datum, 'MM-YYYY') AS mjesec 
FROM test 
GROUP BY datum 
ORDER BY datum;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL-Server에서도 그런 일이 가능하겠지요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;몇 년이 지난 후에도, 그것은 여전히 나에게 문제가 되었다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 포럼에서는 2012년 이전 SQL Server에 적합한 솔루션을 찾을 수 없었기 때문에 이 해결 방법을 제안합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ORDER BY&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;절:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT 
  CONVERT(DATE, CAST(DAY(0) AS NVARCHAR) + '/' + 
    CAST(MONTH(GETDATE()) AS NVARCHAR) + '/' + 
    CAST(YEAR(GETDATE()) AS NVARCHAR), 105)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 결과:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;2022-08-01
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;확실히, 의 교환을 실시합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;GETDATE()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;관련 분야와 함께.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;누군가에게 도움이 되었으면 좋겠어요.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;datetime 데이터 유형의 필드를 유지하려면 다음을 사용하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, o.[date]), 0) AS Mjesec, SUM(marketingExpense) AS SumaMarketing, SUM(revenue) AS SumaZarada 
FROM [Order] o
WHERE (idCustomer = 1) AND (o.[date] BETWEEN '2001-11-3' AND '2011-11-3')
GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, o.[date]), 0)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 시간, 일, 주, 연도별로 그룹으로 쉽게 변경할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누군가에게 도움이 됐으면 좋겠는데&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안부 전해 주세요!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/5406170/&lt;a href=&quot;https://stackoverflow.com/questions/5406170/sql-grouping-by-month-and-year&quot; target=&quot;_blank&quot; papago-id=&quot;27-1&quot;&gt;sql-grouping-by-month-and-year&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>sql-server</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/834</guid>
      <comments>https://gigabyte.tistory.com/834#entry834comment</comments>
      <pubDate>Wed, 19 Apr 2023 23:07:11 +0900</pubDate>
    </item>
    <item>
      <title>Excel 어레이에 논리 OR을 적용하는 방법</title>
      <link>https://gigabyte.tistory.com/833</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Excel 어레이에 논리 OR을 적용하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2개의 어레이를 OR하여 Excel을 어레이로 만들려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 2개의 어레이를&lt;/font&gt;&lt;/font&gt;&lt;code&gt;A1:A3&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;있다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;7&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;8&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-3&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;B1:B3&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;있다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;4&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-8&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-8&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 매우 간단할 것입니다만, 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;OR ( A1:A3 &amp;gt; 0 ; B1:B3 &amp;gt; 0 )
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;돌아온다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;TRUE&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기대했던 배열 대신&lt;/font&gt;&lt;/font&gt;&lt;code&gt;(TRUE, TRUE, FALSE)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 이런 더러운 속임수도 쓸 수 있지&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(((A1:A3 &amp;gt; 0)*1 + (B1:B3 &amp;gt; 0)*1) &amp;gt;= 1) *1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누가 그걸 유지하려 하겠어?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또 CSE(+)&lt;kbd papago-id=&quot;16-1&quot;&gt;Ctrl&lt;/kbd&gt;&lt;kbd papago-id=&quot;16-3&quot;&gt;Shift&lt;/kbd&gt;&lt;kbd papago-id=&quot;16-5&quot;&gt;Enter&lt;/kbd&gt; Formulas(http://www.mrexcel.com/articles/&lt;a href=&quot;http://www.mrexcel.com/articles/CSE-array-formulas-excel.php&quot; rel=&quot;noreferrer&quot; papago-id=&quot;16-7&quot;&gt;CSE-array-formulas-excel&lt;/a&gt;.php))에 검색어가 있을 것 같은데 정말 흑마법 같다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 쉬운 걸 놓쳤나?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;궁금하신 분들을 위해 제가 만들고자 하는 공식은 물론 조금 더 복잡합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(을 통해) 계산하려고 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SUMPRODUCT&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;) 모든 행의 위치&lt;/font&gt;&lt;/font&gt;&lt;code&gt;(status == A OR status == B) AND Date = some cell&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 찾는 수술실은 제 수술실 중 하나일 뿐이에요&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SUMPRODUCT&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;셀에는 정의되어 있지 않습니다(너무 간단합니다).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 설명한 바와 같이 OR 또는 AND는 단일 결과만 반환하기 때문에 일반적으로 &quot;array formula&quot;에 사용할 수 없습니다(AND는 모든 조건이 TRUE인 경우에만 TRUE이고, OR은 TRUE인 경우 예상대로 TRUE이므로 예에서는 6개 값 중 하나 이상이 양수이면 TRUE가 됩니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;OR 대신 +를 효과적으로 사용하여 제안과 유사한 방법을 사용할 수 있습니다. 하지만 처음 두 *1은 + 공소수이므로 이 정도면 충분합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;=((A1:A3 &amp;gt; 0) + (B1:B3 &amp;gt; 0) &amp;gt;0) *1&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비록 당신이 이것저것일 수 있는 하나의 컬럼을 가지고 있다면, 그것은 확실히 상호 배타적이기 때문에, 아마도 그것은 단지 필요할 것이다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;=(A1:A3=&quot;A&quot;)+(A1:A3=&quot;B&quot;)&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;em papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;8년 후...&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;=BITOR(A1:A3&amp;gt;0,B1:B3&amp;gt;0)      for a 0 or 1 binary response
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;=BITOR(A1:A3&amp;gt;0,B1:B3&amp;gt;0)=1    for a FALSE or TRUE boolean response
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CTRL+SHIFT+ENTER를 기억하세요!&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AND, OR 및 XOR은 어레이에 적합하지 않은 것 같지만 BITAND, BITOR 및 NOT는 정상입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;배열을 사용하기 쉬운 XOR을 수행하려면 XOR을 다른 연산자로 분할해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;=BITAND(BITOR(A1:A3,B1:B3),BITOR(NOT(A1:A3),NOT(B1:B3)))=1
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;깔끔하고 비교적 쉬운 방법은 nested IF 문을 사용하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;IF(A1:A3 &amp;gt; 0, TRUE, IF(B1:B3 &amp;gt; 0, TRUE, FALSE))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;A의 숫자가 0보다 크면 TRUE를 반환하고 그렇지 않으면 B의 숫자가 0보다 크면 TRUE를 반환하고 그렇지 않으면 FALSE를 반환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 자신의 OR 함수를 작성하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;AND에서도 같은 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;조건과 조건이 있는 한 다른 모든 것을 만들 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블 내 특정 데이터의 중위수에 대해 배열 공식을 수행했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 데이터 내에는 X, Y 및 Z 그룹이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;X와 Y의 두 가지 유형의 데이터에 대한 중위수를 얻고 싶었기 때문에 배열 내에서 OR 문을 사용할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원래 데이터 세트에 새 열을 만들었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;열 A=X 또는 A=Y, 디스플레이 &quot;1&quot;, 디스플레이 &quot;0&quot;이 아닌 경우였습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음으로 모든 데이터 그룹이 1 또는 0으로 재분류되었기 때문에 어레이 내에 OR 문이 필요 없게 되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 나에게 효과가 있었고, 나는 이 새로운 IF 문을 망치지 않고 새로운 데이터를 복사하여 원래의 테이블에 쉽게 붙여넣을 수 있기 때문에 업데이트하기가 쉽다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;IF&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어레이 결과에 따라 기능하며 시리즈 1과 0이 OR로 표시됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;IF(((A1:A3&amp;gt;0)+(B1:B3&amp;gt;0)),1,0)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이게 가장 쉬운 방법인 것 같아요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 @barry houdini에 동의하지만 또한 지적하고 싶은 것은 열이 같든 다르든 상관없습니다. + 또는 *는 OR/AND에 대해 해결합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;OR 수신인:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;=(A1:A3=&quot;A&quot;)+(B1:B3=&quot;B&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수신인 및 수신인:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;=(A1:A3=&quot;A&quot;)*(A1:A3=&quot;B&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 작동 중인 샘플 공식입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;={MAX(IF((('Stock Statement Dec2019'!$A$2:$A$676=Synthesis!$A$12)*('Stock Statement Dec2019'!$B$2:$B$676=Synthesis!A13));'Stock Statement Dec2019'!$Q$2:$Q$676))}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/10130598/&lt;a href=&quot;https://stackoverflow.com/questions/10130598/how-to-apply-a-logical-or-to-an-array-in-excel&quot; target=&quot;_blank&quot; papago-id=&quot;43-1&quot;&gt;how-to-apply-a-logical-or-to-an-array-in-excel&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</description>
      <category>source</category>
      <category>Excel</category>
      <author>gigabyte</author>
      <guid isPermaLink="true">https://gigabyte.tistory.com/833</guid>
      <comments>https://gigabyte.tistory.com/833#entry833comment</comments>
      <pubDate>Fri, 14 Apr 2023 21:47:34 +0900</pubDate>
    </item>
  </channel>
</rss>