<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>mycopycode</title>
    <link>https://mycopycode.tistory.com/</link>
    <description>각종 프로그래밍 정보를 다루는 블로그입니다.</description>
    <language>ko</language>
    <pubDate>Mon, 8 Jun 2026 09:14:04 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>mycopycode</managingEditor>
    <item>
      <title>안드로이드에서 애니메이션 없이 활동을 전환하는 방법?</title>
      <link>https://mycopycode.tistory.com/1486</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;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인텐트 플래그를 제대로 사용하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FLAG_ACTIVITY_NO_ANIMATION&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android Manifest 파일에 저장되어 있습니까?&lt;/font&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;intent-filter&amp;gt;
        &amp;lt;data android:name=&quot;android.content.Intent.FLAG_ACTIVITY_NO_ANIMATION&quot; /&amp;gt;
    &amp;lt;/intent-filter&amp;gt;
&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;data&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;활동 간 전환 시 애니메이션을 비활성화하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용할 수 있습니다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;getWindow().setWindowAnimations(0);&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;create나 resume에서 하는 것이 낫지만 플래그를 사용하는 것이 더 좋은 방법이 아닐까요?&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 class=&quot;lang-java prettyprint-override&quot;&gt;&lt;code&gt;    Intent intent = new Intent(v.getContext(), newactivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    getContext().startActivity(intent);
&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;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; &amp;lt;style name=&quot;noAnimTheme&quot; parent=&quot;android:Theme&quot;&amp;gt;
   &amp;lt;item name=&quot;android:windowAnimationStyle&quot;&amp;gt;@null&amp;lt;/item&amp;gt;
&amp;lt;/style&amp;gt;
&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;   &amp;lt;activity android:name=&quot;.ui.ArticlesActivity&quot; android:theme=&quot;@style/noAnimTheme&quot;&amp;gt;
    &amp;lt;/activity&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;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://developer.android.com/reference/android/R.attr.html#windowEnterAnimation&quot; papago-id=&quot;10-1&quot;&gt;http://developer.android.com/reference/android/R.attr.html#windowEnterAnimation&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;overridePendingTransition&lt;/strong&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;다음에 수행할 명시적 전환 애니메이션을 지정하려면 startActivity(Intent) 또는 finish의 맛 중 하나가 끝나면 바로 호출합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&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;this.startActivity(new Intent(v.getContext(), newactivity.class));
this.overridePendingTransition(0, 0);
&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;this.startActivity(new Intent(v.getContext(), newactivity.class).addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION));
&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;@Override
public void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}
&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;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;item name=&quot;android:windowAnimationStyle&quot;&amp;gt;@null&amp;lt;/item&amp;gt;
&amp;lt;item name=&quot;android:windowDisablePreview&quot;&amp;gt;true&amp;lt;/item&amp;gt;
&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;minSdkVersion 14&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;res/styles.xml&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&gt;&lt;code&gt;&amp;lt;item name=&quot;android:windowAnimationStyle&quot;&amp;gt;@null&amp;lt;/item&amp;gt;
&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;&amp;lt;resources&amp;gt;
    &amp;lt;!-- Base application theme. --&amp;gt;
    &amp;lt;style name=&quot;AppTheme&quot; parent=&quot;Theme.AppCompat.Light.NoActionBar&quot;&amp;gt;
        ...
        &amp;lt;item name=&quot;android:windowAnimationStyle&quot;&amp;gt;@null&amp;lt;/item&amp;gt;
    &amp;lt;/style&amp;gt;
    ...
&amp;lt;/resources&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;건배!&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;Intent intent = new Intent(Activity1.this, Activity2.class);
overridePendingTransition(0, 0);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);
&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&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;FLAG_ACTIVITY_NO_ANIMATION&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;Activity&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;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/3187817/android-how-to-disable-the-wipe-effect-when-starting-a-new-activity&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;Android:테마를 재정의하는 자신만의 스타일 만들기&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;style name=&quot;noAnimationStyle&quot; parent=&quot;android:Theme&quot;&amp;gt;
    &amp;lt;item name=&quot;android:windowAnimationStyle&quot;&amp;gt;@null&amp;lt;/item&amp;gt;
&amp;lt;/style&amp;gt;
&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;pre&gt;&lt;code&gt;&amp;lt;activity android:name=&quot;.MainActivity&quot;
    android:theme=&quot;@style/noAnimationStyle&quot;&amp;gt;
&amp;lt;/activity&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/6972295/how-to-switch-activity-without-animation-in-android&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>Android</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1486</guid>
      <comments>https://mycopycode.tistory.com/1486#entry1486comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:43:37 +0900</pubDate>
    </item>
    <item>
      <title>다음에 어울리는 형제를 찾는 효율적이고 간결한 방법?</title>
      <link>https://mycopycode.tistory.com/1485</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;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;공식적인 jQuery API를 고수하는 것은 다음을 사용하는 것 이외에 주어진 선택기와 일치하는 요소의 다음 형제를 찾는 더 간결하지만 덜 효율적인 방법이 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;nextAll&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;:first&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;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 공식 API라고 할 때 내부 해킹, 바로 Sizzle로 이동, 믹스에 플러그인 추가 등을 의미합니다. (만약 제가 그렇게 해야 한다면 그렇게 하세요, 하지만 이 질문은 그게 아닙니다.)&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;&amp;lt;div&amp;gt;One&amp;lt;/div&amp;gt;
&amp;lt;div class='foo'&amp;gt;Two&amp;lt;/div&amp;gt;
&amp;lt;div&amp;gt;Three&amp;lt;/div&amp;gt;
&amp;lt;div class='foo'&amp;gt;Four&amp;lt;/div&amp;gt;
&amp;lt;div&amp;gt;Five&amp;lt;/div&amp;gt;
&amp;lt;div&amp;gt;Six&amp;lt;/div&amp;gt;
&amp;lt;div&amp;gt;Seven&amp;lt;/div&amp;gt;
&amp;lt;div class='foo'&amp;gt;Eight&amp;lt;/div&amp;gt;
&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;div&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;this&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;click&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;handler, what)을 선택하고 &quot;div.foo&quot; 선택기와 일치하는 다음 형제 div를 찾고 싶습니다. 제가 할 수 있는 것은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var nextFoo = $(this).nextAll(&quot;div.foo:first&quot;);
&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;...그리고 작동합니다(예를 들어 &quot;Five&quot;로 시작하면 &quot;Six&quot;와 &quot;Seven&quot;을 건너뛰고 &quot;Eight&quot;를 찾으면). 하지만 투박하고 여러 선택기 중 첫 번째 선택기와 일치하려면 훨씬 투박해집니다. (물론 원시 DOM 루프보다 &lt;strong papago-id=&quot;10-1&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;pre&gt;&lt;code&gt;var nextFoo = $(this).nextMatching(&quot;div.foo&quot;);
&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&gt;&lt;/font&gt;&lt;code&gt;nextMatching&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&gt;&lt;code&gt;next(selector)&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;저는 항상 작성하고 추가할 수 있지만, 그렇게 하고 공개된 API를 고수하면 일이 상당히 비효율적이 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들면, 순진한 ï브.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;next&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;jQuery.fn.nextMatching = function(selector) {
    var match;

    match = this.next();
    while (match.length &amp;gt; 0 &amp;amp;&amp;amp; !match.is(selector)) {
        match = match.next();
    }
    return match;
};
&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;a href=&quot;http://jsperf.com/jquery-next-loop-vs-nextall-first&quot; papago-id=&quot;12-1&quot; rel=&quot;noreferrer&quot;&gt;&lt;em papago-id=&quot;12-1-0&quot;&gt;현저&lt;/em&gt;&lt;/a&gt;하게 &lt;a href=&quot;http://jsperf.com/jquery-next-loop-vs-nextall-first&quot; papago-id=&quot;12-1&quot; rel=&quot;noreferrer&quot;&gt;느립니다&lt;/a&gt;.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;nextAll(&quot;selector:first&quot;)&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;nextAll&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 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;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 물론, 저는 그냥 던지지는 못합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;:first&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;pre&gt;&lt;code&gt;jQuery.fn.nextMatching = function(selector) {
    return this.nextAll(selector + &quot;:first&quot;); // &amp;lt;== WRONG
};
&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;...div.foo와 같은 간단한 선택기에서는 작동하지만, &quot;div.foo, div.bar &quot;과 같은 제가 말한 &quot;여러 개 중 하나&quot; 옵션에서는 작동하지 않기 때문입니다.&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;strong papago-id=&quot;17-0&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;.nextAll()&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;.first()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과에 따라, 하지만 jQuery는 단지 첫번째를 찾기 위해 모든 형제자매들을 방문해야 할 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;처음을 제외한 모든 결과를 버릴 수 있도록 전체 목록을 검토하는 것보다 일치하는 결과가 나오면 중단했으면 합니다. (비록 정말 &lt;em papago-id=&quot;19-1&quot;&gt;빠르게&lt;/em&gt; 발생하는 것 같지만, 앞서 링크된 &lt;a href=&quot;http://jsperf.com/jquery-next-loop-vs-nextall-first&quot; rel=&quot;noreferrer&quot; papago-id=&quot;19-3&quot;&gt;속도 비교&lt;/a&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;a href=&quot;http://api.jquery.com/multiple-selector/&quot; papago-id=&quot;27-1&quot;&gt;다중&lt;/a&gt; 선택기를 &lt;a href=&quot;http://api.jquery.com/multiple-selector/&quot; papago-id=&quot;27-1&quot;&gt;다음&lt;/a&gt;과 같이 결과에 전달하여 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var nextFoo = $(this).nextAll(&quot;div.foo, div.something, div.else&quot;).first();
&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;em papago-id=&quot;20-0&quot;&gt;편집:&lt;/em&gt; 비교를 위해 테스트 제품군에 추가되었습니다. &lt;em papago-id=&quot;20-0&quot;&gt;http://jsperf.com/jquery-next-loop-vs-nextall-first/2&lt;/em&gt; 이 방법은 간단한 방법을 제공하기 때문에 훨씬 더 빠릅니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.nextAll()&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 class=&quot;papago-parent&quot;&gt;당신이 순수하게 자바스크립트로 할 수 있는 어떤 루프보다도 &lt;em papago-id=&quot;21-1&quot;&gt;훨씬&lt;/em&gt; 빠릅니다.&lt;/font&gt;&lt;/font&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;first&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;pre&gt;&lt;code&gt;jQuery.fn.nextMatching = function(selector) {
    return this.nextAll(selector).first();
}
&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;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 &lt;a href=&quot;http://api.jquery.com/next-siblings-selector/&quot; papago-id=&quot;33-1&quot; rel=&quot;nofollow&quot;&gt;형제 선택기(&quot;이전 &lt;/a&gt;~&lt;a href=&quot;http://api.jquery.com/next-siblings-selector/&quot; papago-id=&quot;33-1&quot; rel=&quot;nofollow&quot;&gt; 형제&quot;)&lt;/a&gt; 사용&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;jQuery.fn.nextMatching = function nextMatchTest(selector) {
     return $(&quot;~ &quot; + selector, this).first()
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;http://jsperf.com/jquery-next-loop-vs-nextall-first/10&quot; rel=&quot;nofollow&quot; papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://jsperf.com/jquery-next-loop-vs-nextall-first/10&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;true&quot;&gt; 
 &lt;div class=&quot;snippet-code snippet-currently-hidden&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;jQuery.fn.nextMatching = function nextMatchTest(selector) {
     return $(&quot;~ &quot; + selector, this).first()
};
   var nextFoo = $(&quot;div:first&quot;).nextMatchTest(&quot;div.foo&quot;);
   console.log(nextFoo)&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;div&amp;gt;One&amp;lt;/div&amp;gt;
&amp;lt;div class='foo'&amp;gt;Two&amp;lt;/div&amp;gt;
&amp;lt;div&amp;gt;Three&amp;lt;/div&amp;gt;
&amp;lt;div class='foo'&amp;gt;Four&amp;lt;/div&amp;gt;
&amp;lt;div&amp;gt;Five&amp;lt;/div&amp;gt;
&amp;lt;div&amp;gt;Six&amp;lt;/div&amp;gt;
&amp;lt;div&amp;gt;Seven&amp;lt;/div&amp;gt;
&amp;lt;div class='goo'&amp;gt;Eight&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;hr&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고, 비교 테스트에 아직 추가되거나 시도되지 않았습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제로 보다 더 효율적인지는 확실하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.nextAll()&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 class=&quot;papago-parent&quot;&gt;여러 쉼표로 구분된 선택기 문자열 인수를 구문 분석하려고 시도합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;selector&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&gt;&lt;code&gt;.first()&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;code&gt;this&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;code&gt;selector&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;.nextMatchTest()&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; 크롬 37에서 동일한 결과를 반환하는 것처럼 보입니다. 즉, 11.&lt;/font&gt;&lt;/font&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;v2&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.fn.nextMatching = function (selector) {
    var elem = /,/.test(selector) ? selector.split(&quot;,&quot;) : selector
    , sel = this.selector
    , ret = $.isArray(elem) ? elem.map(function (el) {
        return $(sel + &quot; ~ &quot; + $(el).selector).first()[0]
    }) : $(sel + &quot; ~ &quot; + elem).first();
    return selector ? $(ret) : this
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;true&quot;&gt; 
 &lt;div class=&quot;snippet-code snippet-currently-hidden&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;$.fn.nextMatching = function (selector) {
    var elem = /,/.test(selector) ? selector.split(&quot;,&quot;) : selector
    , sel = this.selector
    , ret = $.isArray(elem) ? elem.map(function (el) {
        return $(sel + &quot; ~ &quot; + $(el).selector).first()[0]
    }) : $(sel + &quot; ~ &quot; + elem).first();
    return selector ? $(ret) : this
};

var div = $(&quot;div:first&quot;)
    , foo = div.nextMatching()
    , nextFoo = div.nextMatching(&quot;div.foo&quot;)
    , nextFooMultiple = div.nextMatching(&quot;div.foo, div.goo&quot;);
nextFooMultiple.css(&quot;color&quot;, &quot;green&quot;);
nextFoo.css(&quot;color&quot;, &quot;blue&quot;);
console.log(foo);&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;div&amp;gt;One&amp;lt;/div&amp;gt;
&amp;lt;div class='foo'&amp;gt;Two&amp;lt;/div&amp;gt;
&amp;lt;div&amp;gt;Three&amp;lt;/div&amp;gt;
&amp;lt;div class='foo'&amp;gt;Four&amp;lt;/div&amp;gt;
&amp;lt;div&amp;gt;Five&amp;lt;/div&amp;gt;
&amp;lt;div&amp;gt;Six&amp;lt;/div&amp;gt;
&amp;lt;div&amp;gt;Seven&amp;lt;/div&amp;gt;
&amp;lt;div class='goo'&amp;gt;Eight&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&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/4933236/efficient-concise-way-to-find-next-matching-sibling&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>jQuery</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1485</guid>
      <comments>https://mycopycode.tistory.com/1485#entry1485comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:43:29 +0900</pubDate>
    </item>
    <item>
      <title>왜 탈참조를 가리켜 탈참조라고 합니까?</title>
      <link>https://mycopycode.tistory.com/1484</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 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;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;em papago-id=&quot;5-1&quot;&gt;가리킵니다&lt;/em&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;에르고(Ergo), 포인터의 &lt;em papago-id=&quot;5-3&quot;&gt;참조&lt;/em&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;em papago-id=&quot;6-1&quot;&gt;디-접두사&lt;/em&gt;는 라틴어 전치사의 &lt;em papago-id=&quot;6-3&quot;&gt;의미&lt;/em&gt;에서 온 것일 가능성이 높습니다. &lt;em papago-id=&quot;6-5&quot;&gt;디-접두사&lt;/em&gt;는 &quot;&lt;em papago-id=&quot;6-7&quot;&gt;참조에서 참조&lt;/em&gt;(또는 목적어)를 얻는&quot; 의미로 생각할 수 있을 것 같습니다.&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;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;something&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;something&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;something&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;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위키사전에는 프로그래밍과 관련된 정의만 포함되어 있습니다. http://en.wiktionary.org/wiki/dereference&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;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/2915791/why-is-dereferencing-a-pointer-called-dereferencing&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>C</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1484</guid>
      <comments>https://mycopycode.tistory.com/1484#entry1484comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:43:21 +0900</pubDate>
    </item>
    <item>
      <title>jQuery .hasClass() vs.is()</title>
      <link>https://mycopycode.tistory.com/1483</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery .hasClass() vs.is()&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;$('#foo').hasClass('bar');
&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;$('#foo').is('.bar');
&lt;/code&gt;&lt;/pre&gt;&lt;h2 papago-id=&quot;3&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;4&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;결과는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZYuAO.gif&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://jsperf.com/hasclass-vs-is-so&quot; rel=&quot;noreferrer&quot; papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://jsperf.com/hasclass-vs-is-so&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;hr&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;is('.class')&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;is(':checked')&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;is&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;em papago-id=&quot;3-1&quot;&gt;많은 작업&lt;/em&gt;을 수행합니다.&lt;/font&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;hasClass&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&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;is&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;hasClass&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;filter&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;hasClass&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;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;function usingIs() {
for (var i=0; i&amp;lt;10000;i++) {
 $('div#example-0').is('.test');
}
}

function usingHas(){
for (var i=0; i&amp;lt;10000;i++) {
 $('div#example-0').hasClass('test');
}
}

usingIs();
usingHas();
&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;사용Is: 3191.663ms&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;Has 사용: 2362.523ms&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;em papago-id=&quot;21-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;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'&lt;strong papago-id=&quot;11-0&quot;&gt;큰&lt;/strong&gt; 차이는 없습니다. 제 요점은 10000 사이클을 수행해야 0.8초의 차이를 볼 수 있다는 것입니다.&lt;/font&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;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;hasClass&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;하지만 속도가 35% 향상된 것은 인정합니다.&lt;/font&gt;&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&gt;&lt;/font&gt;&lt;code&gt;$('#foo').hasClass('bar');&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&gt;&lt;code&gt;.hasClass&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;.is&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;a href=&quot;http://jsperf.com/jquery-selector-vs-hasclass/2&quot; rel=&quot;noreferrer&quot; papago-id=&quot;17-1&quot;&gt;테스트&lt;/a&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;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/4901553/jquery-hasclass-vs-is&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>jQuery</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1483</guid>
      <comments>https://mycopycode.tistory.com/1483#entry1483comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:43:15 +0900</pubDate>
    </item>
    <item>
      <title>PACKET_MMAP 및 PACKET_TX_RING을 사용한 데이터 전송 속도가 &amp;quot;정상&amp;quot;보다 느림(없음)</title>
      <link>https://mycopycode.tistory.com/1482</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PACKET_MMAP 및 PACKET_TX_RING을 사용한 데이터 전송 속도가 &quot;정상&quot;보다 느림(없음)&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;저는 PACKET_MMAP 소켓 옵션을 사용하여 원시 소켓을 통해 데이터를 전송할 링 버퍼를 생성하는 트래픽 생성기를 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;code&gt;sendto&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&gt;&lt;code&gt;sendto&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&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;sendto&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;단일 프레임이 사용자 지정 메모리의 버퍼에서 커널 메모리의 SK 버퍼로 복사된 다음 커널은 패킷을 DMA용 NIC가 액세스하는 메모리로 복사하고 프레임을 자체 하드웨어 버퍼로 전송하도록 NIC에 신호를 보내고 전송 대기열을 지정해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PACKET_MMAP socket 옵션을 사용할 때 매핑된 메모리는 응용 프로그램에 의해 할당되고 원시 소켓에 연결됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;응용 프로그램은 매핑된 버퍼에 패킷을 넣고 호출합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sendto&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;커널이 패킷을 SK에 복사해야 하는 대신 매핑된 버퍼에서 패킷을 직접 읽을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 성능 향상은 여러 프레임을 복사하기 위한 sys-call 하나와 NIC 하드웨어 버퍼에 저장하기 위한 각 프레임에 대한 복사 작업 하나를 줄이는 것입니다.&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;strong papago-id=&quot;7-0&quot;&gt;PACKET_MMAP를 사용하는 소켓의 성능을 &quot;정상&quot; 소켓(단일 패킷이 들어있는 차 버퍼)과 비교할 때 성능상의 이점은 전혀 없습니다.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;7-0&quot;&gt; 이게 왜죠?&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Tx 모드에서 PACKET_MMAP를 사용할 때 각 링 블록에 하나의 프레임만 넣을 수 있지만(Rx 모드와 같이 링 블록당 여러 프레임이 아닌) 256개의 블록을 만들고 있으므로 256개의 프레임을 한 번에 보내야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sendto&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;전화 맞죠?&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;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; PACKET_MMAP 의 ,&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;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;packet_tx_mmap()&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;bensley@ubuntu-laptop:~/C/etherate10+$ sudo taskset -c 1 ./etherate_mt -I 1
Using inteface lo (1)
Running in Tx mode
1. Rx Gbps 0.00 (0) pps 0   Tx Gbps 17.65 (2206128128) pps 1457152
2. Rx Gbps 0.00 (0) pps 0   Tx Gbps 19.08 (2385579520) pps 1575680
3. Rx Gbps 0.00 (0) pps 0   Tx Gbps 19.28 (2409609728) pps 1591552
4. Rx Gbps 0.00 (0) pps 0   Tx Gbps 19.31 (2414260736) pps 1594624
5. Rx Gbps 0.00 (0) pps 0   Tx Gbps 19.30 (2411935232) pps 1593088
&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 class=&quot;papago-parent&quot;&gt; PACKET_MMAP 이 ,&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;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;packet_tx()&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;bensley@ubuntu-laptop:~/C/etherate10+$ sudo taskset -c 1 ./etherate_mt -I 1
Using inteface lo (1)
Running in Tx mode
1. Rx Gbps 0.00 (0) pps 0   Tx Gbps 18.44 (2305001412) pps 1522458
2. Rx Gbps 0.00 (0) pps 0   Tx Gbps 20.30 (2537520018) pps 1676037
3. Rx Gbps 0.00 (0) pps 0   Tx Gbps 20.29 (2535744096) pps 1674864
4. Rx Gbps 0.00 (0) pps 0   Tx Gbps 20.26 (2533014354) pps 1673061
5. Rx Gbps 0.00 (0) pps 0   Tx Gbps 20.32 (2539476106) pps 1677329
&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;packet_tx()&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;packet_tx_mmap()&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;packet_tx&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템 호출 및 복사본이 훨씬 적어야 한다는 것을 알고 있기 때문에 PACKET_MMAP가 훨씬 더 빠르지 않은 이유는 무엇입니까?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;void *packet_tx_mmap(void* thd_opt_p) {

    struct thd_opt *thd_opt = thd_opt_p;
    int32_t sock_fd = setup_socket_mmap(thd_opt_p);
    if (sock_fd == EXIT_FAILURE) exit(EXIT_FAILURE);

    struct tpacket2_hdr *hdr;
    uint8_t *data;
    int32_t send_ret = 0;
    uint16_t i;

    while(1) {

        for (i = 0; i &amp;lt; thd_opt-&amp;gt;tpacket_req.tp_frame_nr; i += 1) {

            hdr = (void*)(thd_opt-&amp;gt;mmap_buf + (thd_opt-&amp;gt;tpacket_req.tp_frame_size * i));
            data = (uint8_t*)(hdr + TPACKET_ALIGN(TPACKET2_HDRLEN));

            memcpy(data, thd_opt-&amp;gt;tx_buffer, thd_opt-&amp;gt;frame_size);
            hdr-&amp;gt;tp_len = thd_opt-&amp;gt;frame_size;
            hdr-&amp;gt;tp_status = TP_STATUS_SEND_REQUEST;

        }

        send_ret = sendto(sock_fd, NULL, 0, 0, NULL, 0);
        if (send_ret == -1) {
            perror(&quot;sendto error&quot;);
            exit(EXIT_FAILURE);
        }

        thd_opt-&amp;gt;tx_pkts  += thd_opt-&amp;gt;tpacket_req.tp_frame_nr;
        thd_opt-&amp;gt;tx_bytes += send_ret;

    }

    return NULL;

}
&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;setup_socket()&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;setup_socket_mmap()&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;void *packet_tx(void* thd_opt_p) {

    struct thd_opt *thd_opt = thd_opt_p;

    int32_t sock_fd = setup_socket(thd_opt_p); 

    if (sock_fd == EXIT_FAILURE) {
        printf(&quot;Can't create socket!\n&quot;);
        exit(EXIT_FAILURE);
    }

    while(1) {

        thd_opt-&amp;gt;tx_bytes += sendto(sock_fd, thd_opt-&amp;gt;tx_buffer,
                                    thd_opt-&amp;gt;frame_size, 0,
                                    (struct sockaddr*)&amp;amp;thd_opt-&amp;gt;bind_addr,
                                    sizeof(thd_opt-&amp;gt;bind_addr));
        thd_opt-&amp;gt;tx_pkts += 1;

    }

}
&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;소켓 설정 기능의 유일한 차이점은 아래에 있지만, 기본적으로 SOCCET_RX_RING 또는 SOCCET_TX_RING을 설정하기 위한 요구 사항입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Set the TPACKET version, v2 for Tx and v3 for Rx
// (v2 supports packet level send(), v3 supports block level read())
int32_t sock_pkt_ver = -1;

if(thd_opt-&amp;gt;sk_mode == SKT_TX) {
    static const int32_t sock_ver = TPACKET_V2;
    sock_pkt_ver = setsockopt(sock_fd, SOL_PACKET, PACKET_VERSION, &amp;amp;sock_ver, sizeof(sock_ver));
} else {
    static const int32_t sock_ver = TPACKET_V3;
    sock_pkt_ver = setsockopt(sock_fd, SOL_PACKET, PACKET_VERSION, &amp;amp;sock_ver, sizeof(sock_ver));
}

if (sock_pkt_ver &amp;lt; 0) {
    perror(&quot;Can't set socket packet version&quot;);
    return EXIT_FAILURE;
}


memset(&amp;amp;thd_opt-&amp;gt;tpacket_req, 0, sizeof(struct tpacket_req));
memset(&amp;amp;thd_opt-&amp;gt;tpacket_req3, 0, sizeof(struct tpacket_req3));

//thd_opt-&amp;gt;block_sz = 4096; // These are set else where
//thd_opt-&amp;gt;block_nr = 256;
//thd_opt-&amp;gt;block_frame_sz = 4096;

int32_t sock_mmap_ring = -1;
if (thd_opt-&amp;gt;sk_mode == SKT_TX) {

    thd_opt-&amp;gt;tpacket_req.tp_block_size = thd_opt-&amp;gt;block_sz;
    thd_opt-&amp;gt;tpacket_req.tp_frame_size = thd_opt-&amp;gt;block_sz;
    thd_opt-&amp;gt;tpacket_req.tp_block_nr = thd_opt-&amp;gt;block_nr;
    // Allocate per-frame blocks in Tx mode (TPACKET_V2)
    thd_opt-&amp;gt;tpacket_req.tp_frame_nr = thd_opt-&amp;gt;block_nr;

    sock_mmap_ring = setsockopt(sock_fd, SOL_PACKET , PACKET_TX_RING , (void*)&amp;amp;thd_opt-&amp;gt;tpacket_req , sizeof(struct tpacket_req));

} else {

    thd_opt-&amp;gt;tpacket_req3.tp_block_size = thd_opt-&amp;gt;block_sz;
    thd_opt-&amp;gt;tpacket_req3.tp_frame_size = thd_opt-&amp;gt;block_frame_sz;
    thd_opt-&amp;gt;tpacket_req3.tp_block_nr = thd_opt-&amp;gt;block_nr;
    thd_opt-&amp;gt;tpacket_req3.tp_frame_nr = (thd_opt-&amp;gt;block_sz * thd_opt-&amp;gt;block_nr) / thd_opt-&amp;gt;block_frame_sz;
    thd_opt-&amp;gt;tpacket_req3.tp_retire_blk_tov   = 1;
    thd_opt-&amp;gt;tpacket_req3.tp_feature_req_word = 0;

    sock_mmap_ring = setsockopt(sock_fd, SOL_PACKET , PACKET_RX_RING , (void*)&amp;amp;thd_opt-&amp;gt;tpacket_req3 , sizeof(thd_opt-&amp;gt;tpacket_req3));
}

if (sock_mmap_ring == -1) {
    perror(&quot;Can't enable Tx/Rx ring for socket&quot;);
    return EXIT_FAILURE;
}


thd_opt-&amp;gt;mmap_buf = NULL;
thd_opt-&amp;gt;rd = NULL;

if (thd_opt-&amp;gt;sk_mode == SKT_TX) {

    thd_opt-&amp;gt;mmap_buf = mmap(NULL, (thd_opt-&amp;gt;block_sz * thd_opt-&amp;gt;block_nr), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_LOCKED | MAP_POPULATE, sock_fd, 0);

    if (thd_opt-&amp;gt;mmap_buf == MAP_FAILED) {
        perror(&quot;mmap failed&quot;);
        return EXIT_FAILURE;
    }


} else {

    thd_opt-&amp;gt;mmap_buf = mmap(NULL, (thd_opt-&amp;gt;block_sz * thd_opt-&amp;gt;block_nr), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_LOCKED | MAP_POPULATE, sock_fd, 0);

    if (thd_opt-&amp;gt;mmap_buf == MAP_FAILED) {
        perror(&quot;mmap failed&quot;);
        return EXIT_FAILURE;
    }

    // Per bock rings in Rx mode (TPACKET_V3)
    thd_opt-&amp;gt;rd = (struct iovec*)calloc(thd_opt-&amp;gt;tpacket_req3.tp_block_nr * sizeof(struct iovec), 1);

    for (uint16_t i = 0; i &amp;lt; thd_opt-&amp;gt;tpacket_req3.tp_block_nr; ++i) {
        thd_opt-&amp;gt;rd[i].iov_base = thd_opt-&amp;gt;mmap_buf + (i * thd_opt-&amp;gt;tpacket_req3.tp_block_size);
        thd_opt-&amp;gt;rd[i].iov_len  = thd_opt-&amp;gt;tpacket_req3.tp_block_size;
    }


}
&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;strong papago-id=&quot;23-0&quot;&gt;업데이트 1: 물리적 인터페이스에 대한 결과 &lt;/strong&gt;PACKET_MMAP를 사용할 때 성능 차이가 나타나지 않는 한 가지 이유는 루프백 인터페이스(QDISC가 없는 경우 등)로 트래픽을 보내고 있었기 때문이라고 언급했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;둘 중 하나를 실행한 이후로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;packet_tx_mmap()&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;packet_tx()&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;루틴은 10Gbps 이상의 속도를 생성할 수 있으며, 제 마음대로 사용할 수 있는 인터페이스는 10Gbps에 불과합니다. 두 개의 인터페이스를 함께 연결했는데 이 결과는 위와 거의 동일하며 두 기능 사이에 속도 차이가 거의 없음을 보여줍니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;packet_tx()&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;드0로 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나사산 1개:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;평균 10.77Gbps~ / 889kfps~&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;28&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;평균 19.19Gbps~ / 1.58Mfps~&lt;/font&gt;&lt;/li&gt; 
 &lt;li 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;평균 19.67Gbps~ / 1.62Mfps~ (채권이 가는 속도만큼 빠름)&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;code&gt;packet_tx_mmap()&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;20G bond0결에 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나사산 1개:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;평균 11.08Gbps~ / 913kfps~&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;스레드 2개:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;평균 19.0Gbps~ / 1.57Mfps~&lt;/font&gt;&lt;/li&gt; 
 &lt;li 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;평균 19.66Gbps~ / 1.62Mfps~ (채권이 가는 속도만큼 빠름)&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 프레임 크기가 1514바이트(위의 원래 루프백 테스트와 동일하게 유지하기 위한 것입니다.&lt;/font&gt;&lt;/p&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;위의 모든 테스트에서 소프트 IRQ의 수는 거의 &lt;a href=&quot;https://gist.github.com/jwbensley/6e1f0c0f8133a723351fbce56cd8b78d&quot; papago-id=&quot;35-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;packet_tx()&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;CPU 코어에 초당 약 40k의 인터럽트가 발생했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2, 3개의 스레드가 2, 3 코어에서 각각 40k씩 실행됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용시 결과&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;packet_tx_mmap()&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 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; 약 40k &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하나의 CPU 코어에 하나의 스레드에 대한 약 40k 소프트 IRQ.&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;2개 및 3개의 스레드를 실행할 경우 코어당 40k.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;38&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;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금 전체 소스 코드를 업로드했습니다. 아직 이 응용 프로그램을 작성 중이므로 많은 결함이 있을 수 있지만 이 질문의 범위를 벗어납니다. https://github.com/jwbensley/EtherateMT&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;이러한 이유로 커널 API에 대한 확실한 이해를 원하거나 커널 API를 사용하여 고성능 애플리케이션을 만들어야 하는 사람들에게 제 조언은 성공적으로 커널 코드를 사용할 수 있어야 합니다.&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;이 경우 질문자는 커널에 공유 메모리 인터페이스(packet mmap)를 통해 원시 프레임을 전송하는 성능 특성을 파악하고자 합니다.&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;a href=&quot;https://www.kernel.org/doc/Documentation/networking/packet_mmap.txt&quot; rel=&quot;noreferrer&quot; papago-id=&quot;29-1&quot;&gt;있습니다&lt;/a&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;how to&quot;에 대한 오래된 링크를 가지고 있습니다. 이제 &lt;a href=&quot;https://sites.google.com/site/packetmmap/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;29-3&quot;&gt;여기&lt;/a&gt;에서 찾을 수 있으며 다음과 같은 복사본이 포함되어 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;packet_mmap.c&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;a href=&quot;https://github.com/jrdriscoll/packet_mmap&quot; rel=&quot;noreferrer&quot; papago-id=&quot;30-1&quot;&gt;여기&lt;/a&gt;에 약간 다른 버전이 있습니다.&lt;/font&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;이 문서는 주로 패킷 mmap을 사용하기 위한 전형적인 사용 사례인 읽기를 목표로 하고 있습니다. &lt;em papago-id=&quot;45-1&quot;&gt;인터페이스&lt;/em&gt;에서 원시 프레임을 효율적으로 읽기. 예를 들어&lt;em papago-id=&quot;45-1&quot;&gt;,&lt;/em&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;그러나 OP는 훨씬 &lt;em papago-id=&quot;46-1&quot;&gt;덜&lt;/em&gt; 일반적인 사용 사례인 고성능 쓰기에 관심이 있지만 OP가 원하는 것처럼 보이는 트래픽 발생기/시뮬레이터에 잠재적으로 유용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사하게도, &quot;방법&quot;은 프레임을 쓰는 것입니다.&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;그러나 실제로 어떻게 작동하는지에 대한 정보는 거의 제공되지 않으며 패킷 mmap을 사용하는 것이 왜 패킷 mmap을 사용하지 않고 한 번에 하나의 프레임을 전송하는 것보다 빠르지 않은 것 같으냐는 OP의 질문에 답하는 데 도움이 되는 것은 없습니다.&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;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;PACKET_TX_RING&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;인터웹에서 &quot;PACKET_TX_RING linux cross reference&quot;를 검색하면 다음과 같은 소수의 참조가 표시됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;af_packet.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;AF_PACKET&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;패킷 mmap을 포함한 기능.&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;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;af_packet.c&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;, 패킷 mmap으로 전송하는 작업의 핵심은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tpacket_snd()&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이와 같은 정보를 커널에서 가져올 수 있는 매우 강력한 도구가 &lt;a href=&quot;https://sourceware.org/systemtap/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;56-1&quot;&gt;SystemTap&lt;/a&gt;입니다. (이를 사용하려면 커널에 디버깅 심볼을 설치해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;우연히 Ubuntu를 사용하게 되었는데, &lt;a href=&quot;https://wiki.ubuntu.com/Kernel/Systemtap&quot; rel=&quot;noreferrer&quot; papago-id=&quot;56-3&quot;&gt;이것&lt;/a&gt;이 Ubuntu에서 SystemTap을 작동시키는 방법입니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;SystemTap이 작동하면 SystemTap을 다음과 함께 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;packet_mmap.c&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;tpacket_snd()&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;tpacket_snd&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&gt;&lt;code&gt;packet_mmap&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;공유 TX 링을 통해 프레임을 전송하려면:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ sudo stap -e 'probe kernel.function(&quot;tpacket_snd&quot;) { printf(&quot;W00T!\n&quot;); }' &amp;amp;
[1] 19961
$ sudo ./packet_mmap -c 1 eth0
[...]
STARTING TEST:
data offset = 32 bytes
start fill() thread
send 1 packets (+150 bytes)
end of task fill()
Loop until queue empty (0)
END (number of error:0)
W00T!
W00T!
&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; W00T! .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tpacket_snd&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 우리의 승리는 오래가지 못할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;재고 커널 빌드에서 더 많은 정보를 얻기 위해 계속 노력하면 SystemTap에서 검사하려는 변수를 찾을 수 없다고 불평하고 함수 인수는 다음과 같은 값으로 출력됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;?&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&gt;&lt;code&gt;ERROR&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;code&gt;AF_PACKET&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;code&gt;af_packet.c&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&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;font class=&quot;papago-parent&quot;&gt;더 많은 정보를 캐내기 위해서는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;af_packet.c&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;af_packet.c&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;a href=&quot;https://github.com/jrdriscoll/packet_mmap&quot; rel=&quot;noreferrer&quot; papago-id=&quot;51-1&quot;&gt;여기&lt;/a&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;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;좋아요, 너무 어렵지 않아서 SystemTap에서 좋은 정보를 많이 얻을 수 있는 커널을 성공적으로 부팅할 수 있기를 바랍니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 커널 버전은 패킷 mmap이 어떻게 작동하는지 알아내는 데 도움이 된다는 것을 명심하세요.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 커널에서 직접적인 성능 정보를 얻을 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;af_packet.c&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;em papago-id=&quot;53-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;af_packet.c&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;최적화 기능으로 컴파일되지만, SystemTap에서 볼 수 있도록 최적화되지 않은 변수를 통해 정보를 노출하는 일부 계측 코드가 추가됩니다.&lt;/font&gt;&lt;/font&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;pre&gt;&lt;code&gt;# This is specific to net/packet/af_packet.c 3.13.0-116

function print_ts() {
  ts = gettimeofday_us();
  printf(&quot;[%10d.%06d] &quot;, ts/1000000, ts%1000000);
}

#  325 static void __packet_set_status(struct packet_sock *po, void *frame, int status)
#  326 {
#  327  union tpacket_uhdr h;
#  328 
#  329  h.raw = frame;
#  330  switch (po-&amp;gt;tp_version) {
#  331  case TPACKET_V1:
#  332      h.h1-&amp;gt;tp_status = status;
#  333      flush_dcache_page(pgv_to_page(&amp;amp;h.h1-&amp;gt;tp_status));
#  334      break;
#  335  case TPACKET_V2:
#  336      h.h2-&amp;gt;tp_status = status;
#  337      flush_dcache_page(pgv_to_page(&amp;amp;h.h2-&amp;gt;tp_status));
#  338      break;
#  339  case TPACKET_V3:
#  340  default:
#  341      WARN(1, &quot;TPACKET version not supported.\n&quot;);
#  342      BUG();
#  343  }
#  344 
#  345  smp_wmb();
#  346 }

probe kernel.statement(&quot;__packet_set_status@net/packet/af_packet.c:334&quot;) {
  print_ts();
  printf(&quot;SET(V1): %d (0x%.16x)\n&quot;, $status, $frame);
}

probe kernel.statement(&quot;__packet_set_status@net/packet/af_packet.c:338&quot;) {
  print_ts();
  printf(&quot;SET(V2): %d\n&quot;, $status);
}

#  348 static int __packet_get_status(struct packet_sock *po, void *frame)
#  349 {
#  350  union tpacket_uhdr h;
#  351 
#  352  smp_rmb();
#  353 
#  354  h.raw = frame;
#  355  switch (po-&amp;gt;tp_version) {
#  356  case TPACKET_V1:
#  357      flush_dcache_page(pgv_to_page(&amp;amp;h.h1-&amp;gt;tp_status));
#  358      return h.h1-&amp;gt;tp_status;
#  359  case TPACKET_V2:
#  360      flush_dcache_page(pgv_to_page(&amp;amp;h.h2-&amp;gt;tp_status));
#  361      return h.h2-&amp;gt;tp_status;
#  362  case TPACKET_V3:
#  363  default:
#  364      WARN(1, &quot;TPACKET version not supported.\n&quot;);
#  365      BUG();
#  366      return 0;
#  367  }
#  368 }

probe kernel.statement(&quot;__packet_get_status@net/packet/af_packet.c:358&quot;) { 
  print_ts();
  printf(&quot;GET(V1): %d (0x%.16x)\n&quot;, $h-&amp;gt;h1-&amp;gt;tp_status, $frame); 
}

probe kernel.statement(&quot;__packet_get_status@net/packet/af_packet.c:361&quot;) { 
  print_ts();
  printf(&quot;GET(V2): %d\n&quot;, $h-&amp;gt;h2-&amp;gt;tp_status); 
}

# 2088 static int tpacket_snd(struct packet_sock *po, struct msghdr *msg)
# 2089 {
# [...]
# 2136  do {
# 2137      ph = packet_current_frame(po, &amp;amp;po-&amp;gt;tx_ring,
# 2138              TP_STATUS_SEND_REQUEST);
# 2139 
# 2140      if (unlikely(ph == NULL)) {
# 2141          schedule();
# 2142          continue;
# 2143      }
# 2144 
# 2145      status = TP_STATUS_SEND_REQUEST;
# 2146      hlen = LL_RESERVED_SPACE(dev);
# 2147      tlen = dev-&amp;gt;needed_tailroom;
# 2148      skb = sock_alloc_send_skb(&amp;amp;po-&amp;gt;sk,
# 2149              hlen + tlen + sizeof(struct sockaddr_ll),
# 2150              0, &amp;amp;err);
# 2151 
# 2152      if (unlikely(skb == NULL))
# 2153          goto out_status;
# 2154 
# 2155      tp_len = tpacket_fill_skb(po, skb, ph, dev, size_max, proto,
# 2156                    addr, hlen);
# [...]
# 2176      skb-&amp;gt;destructor = tpacket_destruct_skb;
# 2177      __packet_set_status(po, ph, TP_STATUS_SENDING);
# 2178      atomic_inc(&amp;amp;po-&amp;gt;tx_ring.pending);
# 2179 
# 2180      status = TP_STATUS_SEND_REQUEST;
# 2181      err = dev_queue_xmit(skb);
# 2182      if (unlikely(err &amp;gt; 0)) {
# [...]
# 2195      }
# 2196      packet_increment_head(&amp;amp;po-&amp;gt;tx_ring);
# 2197      len_sum += tp_len;
# 2198  } while (likely((ph != NULL) ||
# 2199          ((!(msg-&amp;gt;msg_flags &amp;amp; MSG_DONTWAIT)) &amp;amp;&amp;amp;
# 2200           (atomic_read(&amp;amp;po-&amp;gt;tx_ring.pending))))
# 2201      );
# 2202 
# [...]
# 2213  return err;
# 2214 }

probe kernel.function(&quot;tpacket_snd&quot;) {
  print_ts();
  printf(&quot;tpacket_snd: args(%s)\n&quot;, $$parms);
}

probe kernel.statement(&quot;tpacket_snd@net/packet/af_packet.c:2140&quot;) {
  print_ts();
  printf(&quot;tpacket_snd:2140: current frame ph = 0x%.16x\n&quot;, $ph);
}

probe kernel.statement(&quot;tpacket_snd@net/packet/af_packet.c:2141&quot;) {
  print_ts();
  printf(&quot;tpacket_snd:2141: (ph==NULL) --&amp;gt; schedule()\n&quot;);
}

probe kernel.statement(&quot;tpacket_snd@net/packet/af_packet.c:2142&quot;) {
  print_ts();
  printf(&quot;tpacket_snd:2142: flags 0x%x, pending %d\n&quot;, 
     $msg-&amp;gt;msg_flags, $po-&amp;gt;tx_ring-&amp;gt;pending-&amp;gt;counter);
}

probe kernel.statement(&quot;tpacket_snd@net/packet/af_packet.c:2197&quot;) {
  print_ts();
  printf(&quot;tpacket_snd:2197: flags 0x%x, pending %d\n&quot;, 
     $msg-&amp;gt;msg_flags, $po-&amp;gt;tx_ring-&amp;gt;pending-&amp;gt;counter);
}

probe kernel.statement(&quot;tpacket_snd@net/packet/af_packet.c:2213&quot;) {
  print_ts();
  printf(&quot;tpacket_snd: return(%d)\n&quot;, $err);
}

# 1946 static void tpacket_destruct_skb(struct sk_buff *skb)
# 1947 {
# 1948  struct packet_sock *po = pkt_sk(skb-&amp;gt;sk);
# 1949  void *ph;
# 1950 
# 1951  if (likely(po-&amp;gt;tx_ring.pg_vec)) {
# 1952      __u32 ts;
# 1953 
# 1954      ph = skb_shinfo(skb)-&amp;gt;destructor_arg;
# 1955      BUG_ON(atomic_read(&amp;amp;po-&amp;gt;tx_ring.pending) == 0);
# 1956      atomic_dec(&amp;amp;po-&amp;gt;tx_ring.pending);
# 1957 
# 1958      ts = __packet_set_timestamp(po, ph, skb);
# 1959      __packet_set_status(po, ph, TP_STATUS_AVAILABLE | ts);
# 1960  }
# 1961 
# 1962  sock_wfree(skb);
# 1963 }

probe kernel.statement(&quot;tpacket_destruct_skb@net/packet/af_packet.c:1959&quot;) {
  print_ts();
  printf(&quot;tpacket_destruct_skb:1959: ph = 0x%.16x, ts = 0x%x, pending %d\n&quot;,
     $ph, $ts, $po-&amp;gt;tx_ring-&amp;gt;pending-&amp;gt;counter);
}
&lt;/code&gt;&lt;/pre&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&gt;&lt;code&gt;print_ts&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;마이크로초 해상도로 unix 에포크타임 출력) 및 다수의 프로브.&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;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;먼저 tx_ring에 있는 패킷의 상태가 설정되거나 읽혀질 때 정보를 출력하도록 프로브를 정의합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음으로 호출 및 반환을 위한 탐색기를 정의합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tpacket_snd&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;do {...} while (...)&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;tx_ring의 패킷을 루프 처리합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막으로 skb destructor에 프로브를 추가합니다.&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;시스템Tap 스크립트를 시작할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sudo stap status.stp&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;code&gt;sudo packet_mmap -c 2 &amp;lt;interface&amp;gt;&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;&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SystemTap 스크립트에서 얻은 출력은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[1492581245.839850] tpacket_snd: args(po=0xffff88016720ee38 msg=0x14)
[1492581245.839865] GET(V1): 1 (0xffff880241202000)
[1492581245.839873] tpacket_snd:2140: current frame ph = 0xffff880241202000
[1492581245.839887] SET(V1): 2 (0xffff880241202000)
[1492581245.839918] tpacket_snd:2197: flags 0x40, pending 1
[1492581245.839923] GET(V1): 1 (0xffff88013499c000)
[1492581245.839929] tpacket_snd:2140: current frame ph = 0xffff88013499c000
[1492581245.839935] SET(V1): 2 (0xffff88013499c000)
[1492581245.839946] tpacket_snd:2197: flags 0x40, pending 2
[1492581245.839951] GET(V1): 0 (0xffff88013499e000)
[1492581245.839957] tpacket_snd:2140: current frame ph = 0x0000000000000000
[1492581245.839961] tpacket_snd:2141: (ph==NULL) --&amp;gt; schedule()
[1492581245.839977] tpacket_snd:2142: flags 0x40, pending 2
[1492581245.839984] tpacket_snd: return(300)
[1492581245.840077] tpacket_snd: args(po=0x0 msg=0x14)
[1492581245.840089] GET(V1): 0 (0xffff88013499e000)
[1492581245.840098] tpacket_snd:2140: current frame ph = 0x0000000000000000
[1492581245.840093] tpacket_destruct_skb:1959: ph = 0xffff880241202000, ts = 0x0, pending 1
[1492581245.840102] tpacket_snd:2141: (ph==NULL) --&amp;gt; schedule()
[1492581245.840104] SET(V1): 0 (0xffff880241202000)
[1492581245.840112] tpacket_snd:2142: flags 0x40, pending 1
[1492581245.840116] tpacket_destruct_skb:1959: ph = 0xffff88013499c000, ts = 0x0, pending 0
[1492581245.840119] tpacket_snd: return(0)
[1492581245.840123] SET(V1): 0 (0xffff88013499c000)
&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;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Ul5oH.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Ul5oH.png&quot; alt=&quot;network capture of first run of packet_mmap&quot;&gt;&lt;/a&gt;&lt;/p&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SystemTap 출력에는 유용한 정보가 많이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리는 볼 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tpacket_snd&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;a href=&quot;http://lxr.free-electrons.com/source/include/uapi/linux/if_packet.h#L114&quot; rel=&quot;noreferrer&quot; papago-id=&quot;64-1&quot;&gt;&lt;code papago-id=&quot;64-1-0&quot;&gt;TP_STATUS_SEND_REQUEST&lt;/code&gt;&lt;/a&gt;1)를 얻은 후 다음으로 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;TP_STATUS_SENDING&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; (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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 프레임에 상태가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;TP_STATUS_AVAILABLE&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;(0), 이것은 송신 요청이 아니기 때문에 호출합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;schedule()&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;양보하고, 고리를 이어가는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더이상 보낼 프레임이 없기 때문에 (&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ph==NULL&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;msg-&amp;gt;msg_flags ==&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;a href=&quot;http://lxr.free-electrons.com/source/include/linux/socket.h#L259&quot; rel=&quot;noreferrer&quot; papago-id=&quot;69-0&quot;&gt;&lt;code papago-id=&quot;69-0-0&quot;&gt;MSG_DONTWAIT&lt;/code&gt;&lt;/a&gt;) 더&lt;/font&gt;&lt;/font&gt;&lt;code&gt;do {...} while (...)&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;tpacket_snd&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;300&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;p&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;packet_mmap&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;sendto&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시(&quot;대기열 비울 때까지 루프&quot; 코드를 통해), 그러나 tx 링으로 보낼 데이터가 더 이상 없고, 비blocking이 요청되므로 대기열에 있는 데이터가 없으므로 즉시 0을 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상태를 확인한 프레임은 이전 통화에서 마지막으로 확인한 프레임과 동일합니다. --- tx ring의 첫 번째 프레임으로 시작하지 않고 확인했습니다.&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;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&gt;&lt;/p&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;TP_STATUS_AVAILABLE&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&gt;&lt;code&gt;do {...} while (...)&lt;/code&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;loop은 보류 중인 모든 패킷이 NIC로 전송될 때까지 대기한 후(산란 데이터를 지원한다고 가정) 반환됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;러닝으로 보실 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;packet_mmap&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;-t&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;차단 I/O를 사용하는 &quot;스레드&quot; 옵션(&quot;큐가 비울 때까지 루프&quot;).&lt;/font&gt;&lt;/font&gt;&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;font class=&quot;papago-parent&quot;&gt;첫째, SystemTap 출력의 타임스탬프가 증가하지 않습니다. SystemTap 출력에서 시간 순서를 유추하는 것은 안전하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;둘째, (로컬로 수행되는) 네트워크 캡처의 타임스탬프가 서로 다르다는 점에 유의하십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;FWIW, 인터페이스는 저렴한 타워 컴퓨터에서 저렴한 1G입니다.&lt;/font&gt;&lt;/p&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&gt;&lt;code&gt;af_packet&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;83&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;공유 tx 링을 처리하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 tx 링의 프레임이 네트워크 인터페이스로 이동하는 방법입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Linux 네트워킹 커널의 제어 흐름에 대한 &lt;a href=&quot;https://wiki.linuxfoundation.org/networking/kernel_flow&quot; rel=&quot;noreferrer&quot; papago-id=&quot;83-3&quot;&gt;개요&lt;/a&gt;에 대한 이 &lt;a href=&quot;https://wiki.linuxfoundation.org/networking/kernel_flow#layer-2link-layer-eg-ethernet&quot; rel=&quot;noreferrer&quot; papago-id=&quot;83-1&quot;&gt;섹션&lt;/a&gt;(계층 2 전송이 처리되는 방법)을 검토하는 것이 도움이 될 수 있습니다.&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;좋아요, 계층 2 전송이 어떻게 처리되는지 기본적으로 이해하고 있다면 이 패킷 mmap 인터페이스는 거대한 소방 호스가 되어야 할 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 패킷과 함께 공유 tx 링을 로드하고, 호출합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sendto()&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&gt;&lt;code&gt;MSG_DONTWAIT&lt;/code&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&gt;&lt;/font&gt;&lt;code&gt;tpacket_snd&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;87&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;tx 대기열을 통해 skb를 생성하고 qdisc에 대기열을 만듭니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;동시에 skb는 qdisc에서 큐가 해제되고 하드웨어 tx 링으로 전송됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;skb는 복사가 아닌 tx 링의 데이터를 참조할 수 있도록 &lt;a href=&quot;http://vger.kernel.org/~davem/skb_data.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;87-1&quot;&gt;비선형&lt;/a&gt;이어야 하며, 좋은 최신 NIC는 분산된 데이터를 처리하고 tx 링의 데이터도 참조할 수 있어야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론, 이 가정들 중 어떤 것도 틀릴 수 있으므로, 이 소방 호스로 qdisc에 많은 상처를 입히도록 합시다.&lt;/font&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;하지만 첫째, qdisc가 어떻게 작동하는지에 대해 일반적으로 이해되지 않는 사실입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이들은 제한된 양의 데이터(일반적으로 프레임 수로 계산되지만 경우에 따라서는 바이트로 측정될 수도 있음)를 보유하며, 프레임을 전체 qdisc로 대기하려고 하면 일반적으로 프레임이 삭제됩니다(대기자가 수행하기로 결정한 작업에 따라).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 저의 원래 가설은 OP가 패킷 mmap을 사용하여 프레임을 qdisc로 너무 빨리 발사하여 많은 부분이 떨어졌다는 것이었습니다.&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;88&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 시도해 볼 때 첫 번째 문제는 기본 qdisc입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pfifo_fast&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;통계를 보관하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 qdisc로 대체해 보겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pfifo&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 되는 거지.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pfifo&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;TXQUEUELEN&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프레임(일반적으로 기본값은 1000)입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 압도적인 qdisc를 시연하고 싶으므로 명시적으로 50으로 설정해 보겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ sudo tc qdisc add dev eth0 root pfifo limit 50
$ tc -s -d qdisc show dev eth0
qdisc pfifo 8004: root refcnt 2 limit 50p
 Sent 42 bytes 1 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&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&gt;&lt;code&gt;tpacket_snd&lt;/code&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;시스템Tap 스크립트를 사용하여&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;call-return.stp&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&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# This is specific to net/packet/af_packet.c 3.13.0-116

function print_ts() {
  ts = gettimeofday_us();
  printf(&quot;[%10d.%06d] &quot;, ts/1000000, ts%1000000);
}

# 2088 static int tpacket_snd(struct packet_sock *po, struct msghdr *msg)
# 2089 {
# [...]
# 2213  return err;
# 2214 }

probe kernel.function(&quot;tpacket_snd&quot;) {
  print_ts();
  printf(&quot;tpacket_snd: args(%s)\n&quot;, $$parms);
}

probe kernel.statement(&quot;tpacket_snd@net/packet/af_packet.c:2213&quot;) {
  print_ts();
  printf(&quot;tpacket_snd: return(%d)\n&quot;, $err);
}
&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;시스템Tap 스크립트 시작하기&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sudo stap call-return.stp&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;그런 다음 8096 1500바이트 프레임을 빈약한 50프레임 용량의 qdisc로 발사합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ sudo ./packet_mmap -c 8096 -s 1500 eth0
[...]
STARTING TEST:
data offset = 32 bytes
start fill() thread
send 8096 packets (+12144000 bytes)
end of task fill()
Loop until queue empty (0)
END (number of error:0)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;121&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 qdisc에 의해 몇 개의 패킷이 삭제되었는지 확인해 보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ tc -s -d qdisc show dev eth0
qdisc pfifo 8004: root refcnt 2 limit 50p
 Sent 25755333 bytes 8606 pkt (dropped 1, overlimits 0 requeues 265) 
 backlog 0b 0p requeues 265 
&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;a href=&quot;http://i0.kym-cdn.com/photos/images/newsfeed/000/173/576/Wat8.jpg?1315930535&quot; rel=&quot;noreferrer&quot; papago-id=&quot;122-0&quot;&gt;WAT&lt;/a&gt;? 8096 프레임 중 하나를 50 프레임 qdisc에 버렸다고요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SystemTap 출력을 확인해 보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[1492603552.938414] tpacket_snd: args(po=0xffff8801673ba338 msg=0x14)
[1492603553.036601] tpacket_snd: return(12144000)
[1492603553.036706] tpacket_snd: args(po=0x0 msg=0x14)
[1492603553.036716] tpacket_snd: return(0)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;98&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://i.stack.imgur.com/n6X4l.jpg&quot; rel=&quot;noreferrer&quot; papago-id=&quot;98-0&quot;&gt;WAT&lt;/a&gt;? 8096 프레임을 처리하는 데 거의 100ms가 걸렸습니다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tpacket_snd&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;99&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;? 1 gigabit/s ~= 97ms의 1500바이트/프레임에서 8096 프레임을 전송하는 데 실제로 얼마나 걸리는지 확인해 보겠습니다. &lt;a href=&quot;https://i.stack.imgur.com/QwLBa.jpg&quot; rel=&quot;noreferrer&quot; papago-id=&quot;99-1&quot;&gt;WAT&lt;/a&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;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;tpacket_snd&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;101&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;skb = sock_alloc_send_skb(&amp;amp;po-&amp;gt;sk,
                 hlen + tlen + sizeof(struct sockaddr_ll),
                 0, &amp;amp;err);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&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;0&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;악의가 없어 보이지만, 사실 그것이 노블록의 주장입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럴 것 같네요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;msg-&amp;gt;msg_flags &amp;amp; MSG_DONTWAIT&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;a href=&quot;https://github.com/torvalds/linux/commit/fbf33a2802f71dba06faa948af805884ff16a2ab&quot; rel=&quot;noreferrer&quot; papago-id=&quot;104-1&quot;&gt;4.1에서 수정&lt;/a&gt;된 것으로 드러났습니다.)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 일어나고 있는 일은 qdisc의 크기가 유일한 제한 자원이 아니라는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;skb에 대한 공간 할당이 소켓의 sndbuf 제한 크기를 초과하는 경우 이 호출은 skb가 해제될 때까지 기다리거나 반환되도록 차단됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-EAGAIN&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;blocking이 아닌 발신자에게 전송합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;V4.1의 수정 프로그램에서 비차단 요청이 있으면 0이 아닌 경우 기록된 바이트 수를 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-EAGAIN&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;106&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전화를 건 사람에게, 거의 누군가가 당신이 이것을 사용하는 방법을 알아내는 것을 원하지 않는 것처럼 보입니다(&lt;em papago-id=&quot;106-1&quot;&gt;예&lt;/em&gt;를 들어&lt;em papago-id=&quot;106-1&quot;&gt;,&lt;/em&gt; 당신은 tx 링에 80MB의 데이터를 채웁니다, 다음으로 전화를 보냅니다).&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MSG_DONTWAIT&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;, 그리고 당신은 당신이 150KB를 보낸 결과를 돌려받습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;EWOULDBLOCK&lt;/code&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;/p&gt; 
&lt;p&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;따라서 4.1 이전 커널을 실행하고 있다면(OP가 4.1을 실행하고 있으며 이 버그의 영향을 받지 않는다고 생각합니다) 패치를 적용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;af_packet.c&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;110&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새로운 커널을 구축하거나 커널 4.1 또는 그 이상으로 업그레이드할 수 있습니다.&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;111&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&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.13을 실행하고 있기 때문에 커널의 패치 버전을 부팅했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;sndbuf가 가득 차면 차단하지는 않겠지만, 우리는 여전히 다음과 함께 돌아올 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-EAGAIN&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;112&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 제가 몇 가지 변경을 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;packet_mmap.c&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;113&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;sndbuff의 기본 크기를 늘리고 사용하려면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SO_SNDBUFFORCE&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;114&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요한 경우 소켓당 시스템 최대값을 재정의합니다(각 프레임에 대해 약 750바이트 + 프레임 크기가 필요한 것으로 보임).&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 또한 몇 가지를 추가했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;call-return.stp&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;115&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;sndbuf록()를 하려면 다음과 같이 하십시오.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sk_sndbuf&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;116&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(), ()&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sk_wmem_alloc&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;117&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;), 에 의해 반환된 오류&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sock_alloc_send_skb&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;118&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 모든 오류가 발생했을 때&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dev_queue_xmit&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;119&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;skb를 qdisc에 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font 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;# This is specific to net/packet/af_packet.c 3.13.0-116

function print_ts() {
  ts = gettimeofday_us();
  printf(&quot;[%10d.%06d] &quot;, ts/1000000, ts%1000000);
}

# 2088 static int tpacket_snd(struct packet_sock *po, struct msghdr *msg)
# 2089 {
# [...]
# 2133  if (size_max &amp;gt; dev-&amp;gt;mtu + reserve + VLAN_HLEN)
# 2134      size_max = dev-&amp;gt;mtu + reserve + VLAN_HLEN;
# 2135 
# 2136  do {
# [...]
# 2148      skb = sock_alloc_send_skb(&amp;amp;po-&amp;gt;sk,
# 2149              hlen + tlen + sizeof(struct sockaddr_ll),
# 2150              msg-&amp;gt;msg_flags &amp;amp; MSG_DONTWAIT, &amp;amp;err);
# 2151 
# 2152      if (unlikely(skb == NULL))
# 2153          goto out_status;
# [...]
# 2181      err = dev_queue_xmit(skb);
# 2182      if (unlikely(err &amp;gt; 0)) {
# 2183          err = net_xmit_errno(err);
# 2184          if (err &amp;amp;&amp;amp; __packet_get_status(po, ph) ==
# 2185                 TP_STATUS_AVAILABLE) {
# 2186              /* skb was destructed already */
# 2187              skb = NULL;
# 2188              goto out_status;
# 2189          }
# 2190          /*
# 2191           * skb was dropped but not destructed yet;
# 2192           * let's treat it like congestion or err &amp;lt; 0
# 2193           */
# 2194          err = 0;
# 2195      }
# 2196      packet_increment_head(&amp;amp;po-&amp;gt;tx_ring);
# 2197      len_sum += tp_len;
# 2198  } while (likely((ph != NULL) ||
# 2199          ((!(msg-&amp;gt;msg_flags &amp;amp; MSG_DONTWAIT)) &amp;amp;&amp;amp;
# 2200           (atomic_read(&amp;amp;po-&amp;gt;tx_ring.pending))))
# 2201      );
# [...]
# 2213  return err;
# 2214 }

probe kernel.function(&quot;tpacket_snd&quot;) {
  print_ts();
  printf(&quot;tpacket_snd: args(%s)\n&quot;, $$parms);
}

probe kernel.statement(&quot;tpacket_snd@net/packet/af_packet.c:2133&quot;) {
  print_ts();
  printf(&quot;tpacket_snd:2133: sk_sndbuf =  %d sk_wmem_alloc = %d\n&quot;, 
     $po-&amp;gt;sk-&amp;gt;sk_sndbuf, $po-&amp;gt;sk-&amp;gt;sk_wmem_alloc-&amp;gt;counter);
}

probe kernel.statement(&quot;tpacket_snd@net/packet/af_packet.c:2153&quot;) {
  print_ts();
  printf(&quot;tpacket_snd:2153: sock_alloc_send_skb err = %d, sk_sndbuf =  %d sk_wmem_alloc = %d\n&quot;, 
     $err, $po-&amp;gt;sk-&amp;gt;sk_sndbuf, $po-&amp;gt;sk-&amp;gt;sk_wmem_alloc-&amp;gt;counter);
}

probe kernel.statement(&quot;tpacket_snd@net/packet/af_packet.c:2182&quot;) {
  if ($err != 0) {
    print_ts();
    printf(&quot;tpacket_snd:2182: dev_queue_xmit err = %d\n&quot;, $err);
  }
}

probe kernel.statement(&quot;tpacket_snd@net/packet/af_packet.c:2187&quot;) {
  print_ts();
  printf(&quot;tpacket_snd:2187: destructed: net_xmit_errno = %d\n&quot;, $err);
}

probe kernel.statement(&quot;tpacket_snd@net/packet/af_packet.c:2194&quot;) {
  print_ts();
  printf(&quot;tpacket_snd:2194: *NOT* destructed: net_xmit_errno = %d\n&quot;, $err);
}

probe kernel.statement(&quot;tpacket_snd@net/packet/af_packet.c:2213&quot;) {
  print_ts();
  printf(&quot;tpacket_snd: return(%d) sk_sndbuf =  %d sk_wmem_alloc = %d\n&quot;, 
     $err, $po-&amp;gt;sk-&amp;gt;sk_sndbuf, $po-&amp;gt;sk-&amp;gt;sk_wmem_alloc-&amp;gt;counter);
}
&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ sudo tc qdisc add dev eth0 root pfifo limit 50
$ tc -s -d qdisc show dev eth0
qdisc pfifo 8001: root refcnt 2 limit 50p
 Sent 2154 bytes 21 pkt (dropped 0, overlimits 0 requeues 0) 
 backlog 0b 0p requeues 0 
$ sudo ./packet_mmap -c 200 -s 1500 eth0
[...]
c_sndbuf_sz:       1228800
[...]
STARTING TEST:
data offset = 32 bytes
send buff size = 1228800
got buff size = 425984
buff size smaller than desired, trying to force...
got buff size = 2457600
start fill() thread
send: No buffer space available
end of task fill()
send: No buffer space available
Loop until queue empty (-1)
[repeated another 17 times]
send 3 packets (+4500 bytes)
Loop until queue empty (4500)
Loop until queue empty (0)
END (number of error:0)
$  tc -s -d qdisc show dev eth0
qdisc pfifo 8001: root refcnt 2 limit 50p
 Sent 452850 bytes 335 pkt (dropped 19, overlimits 0 requeues 3) 
 backlog 0b 0p requeues 3 
&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;다음은 SystemTap 출력입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[1492759330.907151] tpacket_snd: args(po=0xffff880393246c38 msg=0x14)
[1492759330.907162] tpacket_snd:2133: sk_sndbuf =  2457600 sk_wmem_alloc = 1
[1492759330.907491] tpacket_snd:2182: dev_queue_xmit err = 1
[1492759330.907494] tpacket_snd:2187: destructed: net_xmit_errno = -105
[1492759330.907500] tpacket_snd: return(-105) sk_sndbuf =  2457600 sk_wmem_alloc = 218639
[1492759330.907646] tpacket_snd: args(po=0x0 msg=0x14)
[1492759330.907653] tpacket_snd:2133: sk_sndbuf =  2457600 sk_wmem_alloc = 189337
[1492759330.907688] tpacket_snd:2182: dev_queue_xmit err = 1
[1492759330.907691] tpacket_snd:2187: destructed: net_xmit_errno = -105
[1492759330.907694] tpacket_snd: return(-105) sk_sndbuf =  2457600 sk_wmem_alloc = 189337
[repeated 17 times]
[1492759330.908541] tpacket_snd: args(po=0x0 msg=0x14)
[1492759330.908543] tpacket_snd:2133: sk_sndbuf =  2457600 sk_wmem_alloc = 189337
[1492759330.908554] tpacket_snd: return(4500) sk_sndbuf =  2457600 sk_wmem_alloc = 196099
[1492759330.908570] tpacket_snd: args(po=0x0 msg=0x14)
[1492759330.908572] tpacket_snd:2133: sk_sndbuf =  2457600 sk_wmem_alloc = 196099
[1492759330.908576] tpacket_snd: return(0) sk_sndbuf =  2457600 sk_wmem_alloc = 196099
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;120&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하고 있습니다. 찰  그 에서 합니다 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; sndbuf 제한을 초과하는 버그를 수정하여 sndbuf 제한이 되지 않도록 조정했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 이제 tx ring의 프레임이 꽉 찰 때까지 qdisc에 대기되어 있으며, 그 시점에서 반환됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ENOBUFS&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;121&quot;&gt;&lt;font 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;122&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 문제는 qdisc에 효율적으로 퍼블리싱하여 인터페이스를 계속 사용할 수 있도록 하는 방법입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음의 구현에 유의하십시오.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;packet_poll&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;123&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리가 qdisc를 채우고 돌아오는 경우에는 쓸모가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ENOBUFS&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;124&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 왜냐하면 그것은 단지 머리가 그런 것인지를 묻기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;TP_STATUS_AVAILABLE&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;125&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 이 경우에 남아있을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;TP_STATUS_SEND_REQUEST&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;126&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 전화가 올 때까지&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sendto&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;127&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프레임을 qdisc에 대기열에 넣습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(packet_mmap.c에서 업데이트된) 간단한 편법은 다음이 아닌 다른 오류가 발생하거나 성공할 때까지 전송을 반복하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ENOBUFS&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;128&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;EAGAIN&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;129&quot;&gt;&lt;font 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;157&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어쨌든, NIC의 부족을 효율적으로 방지할 수 있는 완벽한 솔루션이 없더라도 지금은 OPs 질문에 답할 수 있을 만큼 충분히 알고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;130&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리가 배운 바에 의하면, OP calls가 blocking mode에서 tx ring과 함께 to를 보낼 때,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tpacket_snd&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;131&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;으로 약  skbs를 qdisc에 된 프레임 데이터가 sndbuf음를 213K다까지) skbs로 qdisc약을 &lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 또한 공유 tx 링에서 참조된 프레임 데이터가 차단될 때(계속 유지되는 동안) 이 쪽으로 카운트된다는 것을 발견했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pg_vec_lock&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;132&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 더 많은 는 다시 차단할 입니다.)&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; skb가 프리업됨에 따라 더 많은 프레임들이 대기하고, 아마도 sndbuf가 다시 초과되어 다시 차단할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결국 모든 데이터가 qdisc에 큐잉되겠지만&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tpacket_snd&lt;/code&gt; &lt;font papago-translate=&quot;translated&quot; papago-id=&quot;133&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 &lt;em papago-id=&quot;133-0&quot;&gt;프레임이 전송될 때까지 계속 차단&lt;/em&gt;됩니다(드라이버 링의 skb가 tx 링의 프레임을 참조하므로 NIC가 수신할 때까지 사용 가능한 것으로 표시할 수 없음).&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pg_vec_lock&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;134&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 &lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 이 시점에서 NIC가 부족해지고 다른 소켓 기록기가 잠금으로 차단됩니다.&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;135&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반면 OP가 패킷을 한 번에 퍼블리싱할 때는 다음과 같이 처리됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;packet_snd&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;136&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;sndbuf에 자리가 없을 경우 차단한 다음 프레임을 qdisc에 대기시키고 즉시 돌아갑니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프레임이 전송될 때까지 기다리지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;qdisc가 배출되는 동안 추가 프레임이 대기열에 있을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;게시자가 계속 유지할 수 있다면 NIC가 절대로 부족해지지 않습니다.&lt;/font&gt;&lt;/font&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;또한 op는 전송할 때마다 tx 링에 복사하여 tx 링을 사용하지 않을 때 고정 프레임 버퍼를 통과시키는 것과 비교합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 방식으로 복사하지 않으면 속도가 향상되지 않습니다(tx 링 사용의 유일한 이점은 아니지만).&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;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/43193889/sending-data-with-packet-mmap-and-packet-tx-ring-is-slower-than-normal-withou&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>C</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1482</guid>
      <comments>https://mycopycode.tistory.com/1482#entry1482comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:43:08 +0900</pubDate>
    </item>
    <item>
      <title>도커 파일을 사용하여 로컬 wp-content 파일을 Wordpress 컨테이너에 복사하는 방법</title>
      <link>https://mycopycode.tistory.com/1481</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 파일을 사용하여 로컬 wp-content 파일을 Wordpress 컨테이너에 복사하는 방법&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;pre&gt;&lt;code&gt;/html/wp-content/plugins
/html/wp-content/themes
/html/wp-content/uploads
&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;FROM wordpress

COPY ./html/wp-content/plugins/ /var/www/html/wp-content/plugins
COPY ./html/wp-content/themes/ /var/www/html/wp-content/themes
COPY ./html/wp-content/uploads/ /var/www/html/wp-content/uploads

ENTRYPOINT [&quot;docker-entrypoint.sh&quot;]
CMD [&quot;apache2-foreground&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;COPY가 성공(빌드 패스)하고 있지만 파일이 이 대상 폴더에 표시되지 않습니다.&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;/html 이전의 경로에 있는 대상 폴더를 변경하면(예: 대상 폴더를 /var 또는 /var/www로 설정하면 파일이 복사되고 컨테이너에서 볼 수 있습니다.&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://github.com/docker-library/wordpress/issues/115&quot; papago-id=&quot;6-1&quot; rel=&quot;noreferrer&quot;&gt;여기&lt;/a&gt; 이 &lt;a href=&quot;https://github.com/docker-library/wordpress/issues/115&quot; papago-id=&quot;6-1&quot; rel=&quot;noreferrer&quot;&gt;오래된 게시물&lt;/a&gt;을 확인했는데, 시작할 때 /html 폴더가 볼륨으로 마운트되어 있으므로 먼저 파일을 이 폴더에 복사해야 한다고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/usr/src/wordpress/wp-content
&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;그런 다음 시작할 때 이 폴더들은 /var/www/html/wp-content/에 자동으로 복사됩니다. (이것은 직접 복사가 작동하지 않는 이유를 설명합니다.)&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;나도 시도해봤는데, 내 로컬 폴더가 실제로 이 폴더에 복사되지만(컨테이너에 있는 폴더를 볼 수 있지만), 시작할 때는 /var/www/html/content에 복사되지 않습니다!&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 파일을 통해 로컬 파일을 /var/www/html 폴더에 직접 복사할 수 있습니까?&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않은 경우 /usr/src/wordpress/wp-content로 복사할 경우 시작 시 폴더가 /var/www/html/wp-content/로 복사되는지 확인하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(내가 살펴 본 몇몇 게시물은 작동하지 않습니다. 이것은 Wordpress만의 것이 아니라 Dockerfile COPY 자체가 아닌 것 같기 때문입니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/30215830/dockerfile-copy-keep-subdirectory-structure&quot; papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 파일 복사 유지 하위 디렉토리 구조&lt;/font&gt;&lt;/a&gt; &lt;a href=&quot;https://stackoverflow.com/questions/60128692/docker-is-not-copying-subdirectory-into-container&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;a href=&quot;https://stackoverflow.com/questions/37789984/how-to-copy-folders-to-docker-image-from-dockerfile&quot; papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;폴더를 도커 파일에서 도커 이미지로 복사하는 방법?&lt;/font&gt;&lt;/a&gt; &lt;a href=&quot;https://www.serverlab.ca/tutorials/containers/docker/how-to-host-your-wordpress-site-with-docker/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://www.serverlab.ca/tutorials/containers/docker/how-to-host-your-wordpress-site-with-docker/&lt;/font&gt;&lt;/a&gt; &lt;a href=&quot;https://stackoverflow.com/questions/60105505/wordpress-docker-copy-theme-into-exposed-folder&quot; papago-id=&quot;16&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;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;카피(COPY)를 이용하여 이미지를 구축할 때 테마를 추가하고 싶었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만, 그것은 효과가 없었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미 wp-content 폴더를 볼륨으로 설정했기 때문입니다.&lt;/font&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&gt;&lt;a href=&quot;https://github.com/docker-library/wordpress/issues/146&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/docker-library/wordpress/issues/146&lt;/font&gt;&lt;/a&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;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;2년이 지나면 더이상 필요 없으시길 바라요, 하하.&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;참조 : https://docs.docker.com/samples/wordpress/&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;FROM wordpress:latest

WORKDIR /var/www/html

COPY ./wp-content/ ./wp-content/
RUN chmod -R 755 ./wp-content/


&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;도커- compose.yml&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-yaml prettyprint-override&quot;&gt;&lt;code&gt;version: &quot;3&quot;
services:
  db:
    build:
      context: .
      dockerfile: ./compose/local/db/Dockerfile
    image: new_db_image_name
    container_name: new_db_image_name
    command: '--default-authentication-plugin=mysql_native_password'
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=somewordpress
      - MYSQL_DATABASE=wordpress
      - MYSQL_USER=wordpress
      - MYSQL_PASSWORD=wordpress
    expose:
      - 3306
      - 33060
  wordpress:
    build:
      context: .
      dockerfile: ./compose/local/wordpress/Dockerfile
    image: new_wordpress_image_name
    container_name: new_wordpress_image_name
#    volumes:
#      - wp-content:/var/www/html/wp-content
    ports:
      - 80:80
    restart: always
    environment:
      - WORDPRESS_DB_HOST=db
      - WORDPRESS_DB_USER=wordpress
      - WORDPRESS_DB_PASSWORD=wordpress
      - WORDPRESS_DB_NAME=wordpress

volumes:
  db_data:
#  wp-content:



&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/63833470/how-to-copy-local-wp-content-files-to-wordpress-container-using-dockerfile&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>Wordpress</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1481</guid>
      <comments>https://mycopycode.tistory.com/1481#entry1481comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:42:49 +0900</pubDate>
    </item>
    <item>
      <title>Class current_page_item 추가 중</title>
      <link>https://mycopycode.tistory.com/1480</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Class current_page_item 추가 중&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;$items = wp_get_nav_menu_items('Menu', array(
    'order'                  =&amp;gt; 'ASC',
    'orderby'                =&amp;gt; 'menu_order',
    'post_type'              =&amp;gt; 'nav_menu_item',
    'post_status'            =&amp;gt; 'publish',
    'output'                 =&amp;gt; ARRAY_A,
    'output_key'             =&amp;gt; 'menu_order',
    'nopaging'               =&amp;gt; true,
    'update_post_term_cache' =&amp;gt; false));
echo '&amp;lt;pre&amp;gt;'; print_r($items); echo '&amp;lt;/pre&amp;gt;'; 
foreach($items as $item){
    echo '&amp;lt;div class=&quot;menu_entry&quot;&amp;gt;&amp;lt;a href=&quot;'.$item-&amp;gt;url.'&quot;&amp;gt;'.$item-&amp;gt;title.'&amp;lt;/a&amp;gt;&amp;lt;/div&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;문제는 표준 메뉴에서 워드프레스 생성인 &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;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;0&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;wp_nav_menu&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;wp_get_nav_menu_items&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;add_filter( 'wp_get_nav_menu_items', 'prefix_nav_menu_classes', 10, 3 );

function prefix_nav_menu_classes($items, $menu, $args) {
    _wp_menu_item_classes_by_context($items);
    return $items;
}
&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;페이지/category 등의 ID인 메뉴항목 object_id와 현재 페이지/category ID를 비교하시면 됩니다.&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;global $post;
$thePostID = $post-&amp;gt;ID;
foreach($items as $item){

    if($thePostID === $item-&amp;gt;object_id) {
        echo '&amp;lt;div class=&quot;menu_entry&quot;&amp;gt;&amp;lt;a href=&quot;'.$item-&amp;gt;url.'&quot; class=&quot;current-menu-item&quot;&amp;gt;'.$item-&amp;gt;title.'&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;';
    }else{
        echo '&amp;lt;div class=&quot;menu_entry&quot;&amp;gt;&amp;lt;a href=&quot;'.$item-&amp;gt;url.'&quot;&amp;gt;'.$item-&amp;gt;title.'&amp;lt;/a&amp;gt;&amp;lt;/div&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;/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;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if ( $menu_items = wp_get_nav_menu_items( 'menu' ) ) {
   foreach ( $menu_items as $menu_item ) {
      $current = ( $menu_item-&amp;gt;object_id == get_queried_object_id() ) ? 'current' : '';
      echo '&amp;lt;li class=&quot;' . $current . '&quot;&amp;gt;&amp;lt;a href=&quot;' . $menu_item-&amp;gt;url . '&quot;&amp;gt;' . $menu_item-&amp;gt;title . '&amp;lt;/a&amp;gt;&amp;lt;/li&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/10019493/adding-class-current-page-item&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>Wordpress</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1480</guid>
      <comments>https://mycopycode.tistory.com/1480#entry1480comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:42:42 +0900</pubDate>
    </item>
    <item>
      <title>ASP에서 NuGet 패키지 위치는 어디입니까?NET Core?</title>
      <link>https://mycopycode.tistory.com/1479</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ASP에서 NuGet 패키지 위치는 어디입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET Core?&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는 처음입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET Core, 그리고 NuGet 패키지가 내 로컬 머신에 어디에 저장되어 있는지 파악 중입니다.&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;다음 NuGet 패키지를 설치했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-sh prettyprint-override&quot;&gt;&lt;code&gt;nuget dapper 
nuget MicroOrm.Pocos.SqlGenerator
&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;DLL 중 하나를 제 컴파일 버전으로 교체하고 싶은데 어디에 둬야 할지 모르겠어요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Dependencies&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&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;nuget 디렉토리의 &lt;del papago-id=&quot;2-0&quot;&gt;project.j의 경우&lt;/del&gt; 사용자 프로파일 폴더에 있습니다(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;%UserProfile%\.nuget\packages&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;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;p papago-id=&quot;8&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/nuget/consume-packages/managing-the-global-packages-and-cache-folders&quot; rel=&quot;noreferrer&quot; papago-id=&quot;8-1&quot;&gt;출처&lt;/a&gt;: MSDN&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;글로벌 패키지 폴더는 NuGet이 다운로드한 패키지를 설치하는 곳입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 패키지는 패키지 식별자 및 버전 번호와 일치하는 하위 폴더로 완전히 확장됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PackageReference 형식을 사용하는 프로젝트는 항상 이 폴더에서 직접 패키지를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;packages.config를 사용하면 패키지가 글로벌 패키지 폴더에 설치된 다음 프로젝트의 패키지 폴더에 복사됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&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;PackageReference를 사용할 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;globalPackagesFolder&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://learn.microsoft.com/en-us/nuget/reference/nuget-config-file#config-section&quot; rel=&quot;noreferrer&quot; papago-id=&quot;5-1&quot;&gt;nuget.config&lt;/a&gt;의 configuration 값이 사용됩니다.&lt;/font&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;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;%userprofile%\.nuget\packages&lt;/code&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;Mac/리눅스:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;~/.nuget/packages&lt;/code&gt;&lt;/p&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;packages.config를 사용하는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;repositoryPath&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;a href=&quot;https://learn.microsoft.com/en-us/nuget/reference/nuget-config-file#config-section&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-1&quot;&gt;nuget.config&lt;/a&gt;의 configuration 값이 사용됩니다.&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;$(Solutiondir)/packages&lt;/code&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;globalPackagesFolder&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;repositoryPath&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;NUGET_PACKAGES&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 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;&lt;a href=&quot;https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-nuget-locals&quot; rel=&quot;noreferrer&quot; papago-id=&quot;20-1&quot;&gt;이&lt;/a&gt; 설명서에 따르면 컴퓨터에 있는 모든 Nuget 폴더를 나열하는 다음 명령을 실행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;dotnet nuget locals all -l
&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;C:\Users\...&amp;gt;dotnet nuget locals all -l
info : http-cache: C:\Users\...\AppData\Local\NuGet\v3-cache
info : global-packages: C:\Users\...\.nuget\packages\
info : temp: C:\Users\...\AppData\Local\Temp\NuGetScratch
info : plugins-cache: C:\Users\...\AppData\Local\NuGet\plugins-cache
&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/40902578/wheres-the-nuget-package-location-in-asp-net-core&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>ASP.NET</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1479</guid>
      <comments>https://mycopycode.tistory.com/1479#entry1479comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:42:35 +0900</pubDate>
    </item>
    <item>
      <title>Win32 API에서 Posix popen()에 해당하는 것은?</title>
      <link>https://mycopycode.tistory.com/1478</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Win32 API에서 Posix popen()에 해당하는 것은?&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;Win32 API에 Linux/Unix stdio.h popen() 기능과 대략적인 동등성이 있습니까?&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;편집: D 표준 라이브러리에서 누락된 내용을 패치하려면 이 내용을 알아야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 답변은 표준 Win32 &lt;strong papago-id=&quot;2-1&quot;&gt;API&lt;/strong&gt;만 사용해야 하며 MSVC 고유 기능은 사용하지 않습니다.&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;MSDN은 &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/aa365782%28VS.85%29.aspx&quot; rel=&quot;noreferrer&quot; papago-id=&quot;0-1&quot;&gt;Pipe Handle Inheritance&lt;/a&gt;에서 Windows API를 사용하여 열기 작업을 수행하는 방법을 설명합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms682499%28VS.85%29.aspx&quot; rel=&quot;noreferrer&quot; papago-id=&quot;0-3&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;_popen&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Jason에 의해 링크된 런타임 라이브러리에서 찾을 수 있지만 Win32 API를 독점적으로 사용합니다.&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;_popen&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;자세한 내용은 MSDN 사이트 http://msdn.microsoft.com/en-us/library/96ayss4b(VS.80).aspx 의 설명서를 참조하십시오.&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;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;win32 함수(CreatePipe)를 사용하여 파이프를 생성한 다음 일반적으로 하위 프로세스에 제공하는 파이프의 끝(DuplicateHandle)을 복제하여 상속할 수 있도록 해야 합니다. 그렇지 않으면 상속되지 않으므로 사용할 수 없습니다.&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;그런 다음 CreateProcess(스타트업 인포를 포함하여 많은 구조 포인터를 사용하는)를 사용하여 프로세스를 생성하고 STDOUT으로 복제한 핸들을 STARTOUT INFO에 전달해야 합니다.&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;그런 다음 파이프의 판독 끝(Read File 등)에서 e에 도달할 때까지 읽을 수 있으며, 다양한 win32 핸들을 모두 닫아서 정리해야 합니다.&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;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 Jason Coco의 답변에 대한 반응과 링크된 MSDN 페이지의 주장과는 달리, 요즘은 콘솔이 아닌 앱에서 _popen()이라고 부르는 것이 가능합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;QuickTime importer 구성 요소에서 호출합니다. 기본적으로 DLL을 위장한 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;콘솔 창이 열리지만 그렇지 않으면 예상되는 동작이 표시됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;mingw32의 -mwindow 옵션으로 표준 콘솔 도구를 컴파일하여 GUI 앱으로 만들면 _open은 계속 올바르게 작동합니다(단, 다른 콘솔에서 도구를 실행하는 경우에도 콘솔 창이 열립니다).&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;a href=&quot;https://pubs.opengroup.org/onlinepubs/009695399/functions/popen.html&quot; papago-id=&quot;13-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;팝펜&lt;/a&gt;()을&lt;a href=&quot;https://pubs.opengroup.org/onlinepubs/009695399/functions/popen.html&quot; papago-id=&quot;13-1&quot; rel=&quot;nofollow noreferrer&quot;&gt; &lt;/a&gt;사용해야 할 필요도 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 답변에 있는 몇몇 코멘트들이 언급했듯이, 윈도우 API를 사용하여 고전적인 POSIX에 가까운 것을 구현하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;popen()&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;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://codereview.stackexchange.com/q/162546/138048&quot; papago-id=&quot;15-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;pipes&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;stdin&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;stdout&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;CreateProcess(...)&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;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;링크된 코드는 매우 작은 API로 dll에 내장되도록 설계되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int __declspec(dllexport) cmd_rsp(const char *command, char **chunk, unsigned int size); 
&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;#include &quot;cmd_rsp.h&quot;
int main(void)
{
    char *buf = {0};
    buf = calloc(100, 1);
    if(!buf)return 0;
    cmd_rsp(&quot;dir /s&quot;, &amp;amp;buf, 100);
    printf(&quot;%s&quot;, buf);
    free(buf);
    //or a custom exe
    char *buf2 = {0};
    buf2 = calloc(100, 1);
    cmd_rsp(&quot;some_custom_program.exe arg_1 arg_2 arg_n&quot;, &amp;amp;buf2, 100);
    printf(&quot;%s&quot;, buf2);
    free(buf2);
    
    return 0;
}
&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 class=&quot;papago-parent&quot;&gt;예를 들어 다음에서 실행할 수 있는 모든 명령이 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;stdin&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;, 명령을 실행할 별도의 프로세스를 만든 다음 모든 응답 내용(있는 경우)을 버퍼로 반환하고 CMD 창 팝업을 표시하지 않고 이 작업을 수행합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;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/450865/what-is-the-equivalent-to-posix-popen-in-the-win32-api&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>C</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1478</guid>
      <comments>https://mycopycode.tistory.com/1478#entry1478comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:42:28 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트를 사용하여 브라우저 버전과 운영체제를 탐지하는 방법은?</title>
      <link>https://mycopycode.tistory.com/1477</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;아래 코드를 사용해 보았지만 IE6에서 작동하지 않는 Chrome과 Mozilla 결과만 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div id=&quot;example&quot;&amp;gt;&amp;lt;/div&amp;gt;

&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;

txt = &quot;&amp;lt;p&amp;gt;Browser CodeName: &quot; + navigator.appCodeName + &quot;&amp;lt;/p&amp;gt;&quot;;
txt+= &quot;&amp;lt;p&amp;gt;Browser Name: &quot; + navigator.appName + &quot;&amp;lt;/p&amp;gt;&quot;;
txt+= &quot;&amp;lt;p&amp;gt;Browser Version: &quot; + navigator.appVersion + &quot;&amp;lt;/p&amp;gt;&quot;;
txt+= &quot;&amp;lt;p&amp;gt;Cookies Enabled: &quot; + navigator.cookieEnabled + &quot;&amp;lt;/p&amp;gt;&quot;;
txt+= &quot;&amp;lt;p&amp;gt;Platform: &quot; + navigator.platform + &quot;&amp;lt;/p&amp;gt;&quot;;
txt+= &quot;&amp;lt;p&amp;gt;User-agent header: &quot; + navigator.userAgent + &quot;&amp;lt;/p&amp;gt;&quot;;

document.getElementById(&quot;example&quot;).innerHTML=txt;

&amp;lt;/script&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;Browser CodeName: Mozilla

Browser Name: Netscape

Browser Version: 5.0 (Windows)

Cookies Enabled: true

Platform: Win32

User-agent header: Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0
&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;저는 &quot;Firefox/12.0&quot; 버전만 받으면 됩니다.&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;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;var nVer = navigator.appVersion;
var nAgt = navigator.userAgent;
var browserName  = navigator.appName;
var fullVersion  = ''+parseFloat(navigator.appVersion); 
var majorVersion = parseInt(navigator.appVersion,10);
var nameOffset,verOffset,ix;

// In Opera, the true version is after &quot;OPR&quot; or after &quot;Version&quot;
if ((verOffset=nAgt.indexOf(&quot;OPR&quot;))!=-1) {
 browserName = &quot;Opera&quot;;
 fullVersion = nAgt.substring(verOffset+4);
 if ((verOffset=nAgt.indexOf(&quot;Version&quot;))!=-1) 
   fullVersion = nAgt.substring(verOffset+8);
}
// In MS Edge, the true version is after &quot;Edg&quot; in userAgent
else if ((verOffset=nAgt.indexOf(&quot;Edg&quot;))!=-1) {
 browserName = &quot;Microsoft Edge&quot;;
 fullVersion = nAgt.substring(verOffset+4);
}
// In MSIE, the true version is after &quot;MSIE&quot; in userAgent
else if ((verOffset=nAgt.indexOf(&quot;MSIE&quot;))!=-1) {
 browserName = &quot;Microsoft Internet Explorer&quot;;
 fullVersion = nAgt.substring(verOffset+5);
}
// In Chrome, the true version is after &quot;Chrome&quot; 
else if ((verOffset=nAgt.indexOf(&quot;Chrome&quot;))!=-1) {
 browserName = &quot;Chrome&quot;;
 fullVersion = nAgt.substring(verOffset+7);
}
// In Safari, the true version is after &quot;Safari&quot; or after &quot;Version&quot; 
else if ((verOffset=nAgt.indexOf(&quot;Safari&quot;))!=-1) {
 browserName = &quot;Safari&quot;;
 fullVersion = nAgt.substring(verOffset+7);
 if ((verOffset=nAgt.indexOf(&quot;Version&quot;))!=-1) 
   fullVersion = nAgt.substring(verOffset+8);
}
// In Firefox, the true version is after &quot;Firefox&quot; 
else if ((verOffset=nAgt.indexOf(&quot;Firefox&quot;))!=-1) {
 browserName = &quot;Firefox&quot;;
 fullVersion = nAgt.substring(verOffset+8);
}
// In most other browsers, &quot;name/version&quot; is at the end of userAgent 
else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) &amp;lt; 
          (verOffset=nAgt.lastIndexOf('/')) ) 
{
 browserName = nAgt.substring(nameOffset,verOffset);
 fullVersion = nAgt.substring(verOffset+1);
 if (browserName.toLowerCase()==browserName.toUpperCase()) {
  browserName = navigator.appName;
 }
}
// trim the fullVersion string at semicolon/space if present
if ((ix=fullVersion.indexOf(&quot;;&quot;))!=-1)
   fullVersion=fullVersion.substring(0,ix);
if ((ix=fullVersion.indexOf(&quot; &quot;))!=-1)
   fullVersion=fullVersion.substring(0,ix);

majorVersion = parseInt(''+fullVersion,10);
if (isNaN(majorVersion)) {
 fullVersion  = ''+parseFloat(navigator.appVersion); 
 majorVersion = parseInt(navigator.appVersion,10);
}

document.write(''
 +'Browser name  = '+browserName+'&amp;lt;br&amp;gt;'
 +'Full version  = '+fullVersion+'&amp;lt;br&amp;gt;'
 +'Major version = '+majorVersion+'&amp;lt;br&amp;gt;'
 +'navigator.appName = '+navigator.appName+'&amp;lt;br&amp;gt;'
 +'navigator.userAgent = '+navigator.userAgent+'&amp;lt;br&amp;gt;'
)&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&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;http://www.javascripter.net/faq/browsern.htm&quot; papago-id=&quot;5-1&quot; rel=&quot;noreferrer&quot;&gt;자바스크립트: 브라우저 이름&lt;/a&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;a href=&quot;https://jsfiddle.net/hims056/0deLgny5/1/&quot; papago-id=&quot;6-0&quot; rel=&quot;noreferrer&quot;&gt;브라우저 세부&lt;/a&gt; 정보를 &lt;a href=&quot;https://jsfiddle.net/hims056/0deLgny5/1/&quot; papago-id=&quot;6-0&quot; rel=&quot;noreferrer&quot;&gt;탐지하려면 JSFiddle을 참조&lt;/a&gt;하십시오.&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;OS 탐지:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;// This script sets OSName variable as follows:
// &quot;Windows&quot;    for all versions of Windows
// &quot;MacOS&quot;      for all versions of Macintosh OS
// &quot;Linux&quot;      for all versions of Linux
// &quot;UNIX&quot;       for all other UNIX flavors 
// &quot;Unknown OS&quot; indicates failure to detect the OS

var OSName=&quot;Unknown OS&quot;;
if (navigator.appVersion.indexOf(&quot;Win&quot;)!=-1) OSName=&quot;Windows&quot;;
if (navigator.appVersion.indexOf(&quot;Mac&quot;)!=-1) OSName=&quot;MacOS&quot;;
if (navigator.appVersion.indexOf(&quot;X11&quot;)!=-1) OSName=&quot;UNIX&quot;;
if (navigator.appVersion.indexOf(&quot;Linux&quot;)!=-1) OSName=&quot;Linux&quot;;

document.write('Your OS: '+OSName);&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&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://www.javascripter.net/faq/operatin.htm&quot; papago-id=&quot;8-1&quot; rel=&quot;noreferrer&quot;&gt;자바스크립트: OS 탐지&lt;/a&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://jsfiddle.net/y26Zx/&quot; papago-id=&quot;9-0&quot; rel=&quot;noreferrer&quot;&gt;OS Details를 탐지하려면 JSFiddle을 참조&lt;/a&gt;합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;h2 papago-id=&quot;10&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;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/bestiejs/platform.js&quot; rel=&quot;noreferrer&quot; papago-id=&quot;11-1&quot;&gt;Platform.js&lt;/a&gt;(&lt;a href=&quot;https://bestiejs.github.io/platform.js/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;11-3&quot;&gt;여기&lt;/a&gt;서는 데모)에서 좋은 경험을 했지만 그래도 주의를 당부드립니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;12&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;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/WhichBrowser/WhichBrowser&quot; rel=&quot;noreferrer&quot; papago-id=&quot;13-1&quot;&gt;Which&lt;/a&gt; Browser의 저자를 소개합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;13-3&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;font class=&quot;papago-parent&quot;&gt;Chrome이나 IE를 사용해도 Gecko와 Safari를 지원하는 &quot;Mozilla Netscape&quot;라고 알려줄 것입니다.&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://jsfiddle.net/y26Zx/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;hims056의 바이올린&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://jsfiddle.net/Harigr/u5aoLnuc/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;16&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;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;Chrome(아직 성공할 수도 있음)로 시도해보고, IE의 최신 버전으로 시도해보면 눈물이 날 것입니다.&lt;/font&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;&amp;lt;div id=&quot;example&quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
txt = &quot;&amp;lt;p&amp;gt;Browser CodeName: &quot; + navigator.appCodeName + &quot;&amp;lt;/p&amp;gt;&quot;;
txt+= &quot;&amp;lt;p&amp;gt;Browser Name: &quot; + navigator.appName + &quot;&amp;lt;/p&amp;gt;&quot;;
txt+= &quot;&amp;lt;p&amp;gt;Browser Version: &quot; + navigator.appVersion + &quot;&amp;lt;/p&amp;gt;&quot;;
txt+= &quot;&amp;lt;p&amp;gt;Cookies Enabled: &quot; + navigator.cookieEnabled + &quot;&amp;lt;/p&amp;gt;&quot;;
txt+= &quot;&amp;lt;p&amp;gt;Platform: &quot; + navigator.platform + &quot;&amp;lt;/p&amp;gt;&quot;;
txt+= &quot;&amp;lt;p&amp;gt;User-agent header: &quot; + navigator.userAgent + &quot;&amp;lt;/p&amp;gt;&quot;;
document.getElementById(&quot;example&quot;).innerHTML=txt;
&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;Chrome은 다음과 같이 말합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;브라우저 코드 이름: Mozilla&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;넷스케이프&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.0 (Windows NT 6.1; WOW64) Apple WebKit/537.36 (KHTML, Gecko처럼) Chrome/40.0.2214.115 Safari/537.36&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;쿠키 사용: true&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;윈32&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;사용자 에이전트 헤더: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, Gecko처럼) Chrome/40.0.2214.115 Safari/537.36&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;IE는 다음과 같이 말합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;브라우저 코드 이름: Mozilla&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;넷스케이프&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;브라우저 버전: 5.0 (Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET CLR 2.0.50727; .&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET CLR 3.5.30729; .&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;E; InfoPath.3; rv:11.0) Gecko처럼&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;쿠키 사용: true&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;윈32&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;사용자 에이전트 헤더: Mozilla/5.0(윈도우즈 NT 6.1; WOW64; Trident/7.0; SLCC2; .&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET CLR 2.0.50727; .&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET CLR 3.5.30729; .&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;E; InfoPath.3; rv:11.0) Gecko처럼&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;적어도 Chrome에는 정확한 버전 번호를 가진 &quot;Chrome&quot;이 포함된 문자열이 여전히 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 IE의 경우 실제로 이를 파악하기 위해 지원하는 것을 추정해야 합니다(다른 누가 지원한다고 자랑할 것인가).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.NET&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;Media Center&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;:P)를 선택한 다음 일치시킵니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;rv:&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;버전 번호를 얻기 위해 맨 끝에.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 그런 정교한 휴리스틱조차도 IE 12(혹은 그들이 뭐라고 부르든)가 나오는 순간 실패할 가능성이 매우 높습니다.&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;JavaScript를 사용하여 운영 체제를 탐지하려면 navigator.appVersion 대신 navigator.userAgent를 사용하는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;{
  var OSName = &quot;Unknown OS&quot;;
  if (navigator.userAgent.indexOf(&quot;Win&quot;) != -1) OSName = &quot;Windows&quot;;
  if (navigator.userAgent.indexOf(&quot;Mac&quot;) != -1) OSName = &quot;Macintosh&quot;;
  if (navigator.userAgent.indexOf(&quot;Linux&quot;) != -1) OSName = &quot;Linux&quot;;
  if (navigator.userAgent.indexOf(&quot;Android&quot;) != -1) OSName = &quot;Android&quot;;
  if (navigator.userAgent.indexOf(&quot;like Mac&quot;) != -1) OSName = &quot;iOS&quot;;
  console.log('Your OS: ' + OSName);
}&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&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/bestiejs/platform.js#readme&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;// example 1
platform.os; // 'Windows Server 2008 R2 / 7 x64'

// example 2 on an iPad
platform.os; // 'iOS 5.0'

// you can also access on the browser and some other properties
platform.name; // 'Safari'
platform.version; // '5.1'
platform.product; // 'iPad'
platform.manufacturer; // 'Apple'
platform.layout; // 'WebKit'

// or use the description to put all together
platform.description; // 'Safari 5.1 on Apple iPad (iOS 5.0)'
&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;@Jalpesh가 말했듯이 PPK의 대본은 이런 것들에 대한 권한입니다. 이것은 당신을 올바른 방향으로 가리킬 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var wn = window.navigator,
        platform = wn.platform.toString().toLowerCase(),
        userAgent = wn.userAgent.toLowerCase(),
        storedName;

// ie
    if (userAgent.indexOf('msie',0) !== -1) {
        browserName = 'ie';
        os = 'win';
        storedName = userAgent.match(/msie[ ]\d{1}/).toString();
        version = storedName.replace(/msie[ ]/,'');

        browserOsVersion = browserName + version;
    }
&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;https://github.com/leopic/jquery.detectBrowser.js/blob/sans-jquery/jquery.detectBrowser.sansjQuery.js 에서 가져온 자료&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;pre&gt;&lt;code&gt;// Browser with version  Detection
navigator.sayswho= (function(){
    var N= navigator.appName, ua= navigator.userAgent, tem;
    var M= ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);
    if(M &amp;amp;&amp;amp; (tem= ua.match(/version\/([\.\d]+)/i))!= null) M[2]= tem[1];
    M= M? [M[1], M[2]]: [N, navigator.appVersion,'-?'];
    return M;
})();

var browser_version          = navigator.sayswho;
alert(&quot;Welcome to &quot; + browser_version);
&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;http://jsfiddle.net/Harigr/u5aoLnuc/&quot; rel=&quot;nofollow&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;Firefox, Chrome, Opera, Internet Explorer 및 Safari의 경우&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var ua=&quot;Mozilla/1.22 (compatible; MSIE 10.0; Windows 3.1)&quot;;
//ua = navigator.userAgent;
var b;
var browser;
if(ua.indexOf(&quot;Opera&quot;)!=-1) {

    b=browser=&quot;Opera&quot;;
}
if(ua.indexOf(&quot;Firefox&quot;)!=-1 &amp;amp;&amp;amp; ua.indexOf(&quot;Opera&quot;)==-1) {
    b=browser=&quot;Firefox&quot;;
    // Opera may also contains Firefox
}
if(ua.indexOf(&quot;Chrome&quot;)!=-1) {
    b=browser=&quot;Chrome&quot;;
}
if(ua.indexOf(&quot;Safari&quot;)!=-1 &amp;amp;&amp;amp; ua.indexOf(&quot;Chrome&quot;)==-1) {
    b=browser=&quot;Safari&quot;;
    // Chrome always contains Safari
}

if(ua.indexOf(&quot;MSIE&quot;)!=-1 &amp;amp;&amp;amp; (ua.indexOf(&quot;Opera&quot;)==-1 &amp;amp;&amp;amp; ua.indexOf(&quot;Trident&quot;)==-1)) {
    b=&quot;MSIE&quot;;
    browser=&quot;Internet Explorer&quot;;
    //user agent with MSIE and Opera or MSIE and Trident may exist.
}

if(ua.indexOf(&quot;Trident&quot;)!=-1) {
    b=&quot;Trident&quot;;
    browser=&quot;Internet Explorer&quot;;
}

// now for version


var version=ua.match(b+&quot;[ /]+[0-9]+(.[0-9]+)*&quot;)[0];

console.log(&quot;broswer&quot;,browser);
console.log(&quot;version&quot;,version);
&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;동일한 코드로 크롬, 파이어폭스, IE11, 엣지에서 작동할 수 있는 다른 답변들을 얻을 수 없었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 아래를 생각해 냈는데 위에 나열된 브라우저에서 작동하는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 어떤 OS에 있는지도 보고 싶었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 User-Agent 설정을 무시한 브라우저에 대해 이를 테스트한 적이 없으므로 마일리지가 달라질 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;IF가 올바르게 작동하려면 IF의 순서가 중요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let os, osStore, bStore, appVersion, browser;
// Chrome
if(navigator.vendor === &quot;Google Inc.&quot;){
    appVersion = navigator.appVersion.split(&quot; &quot;);
    os = [appVersion[1],appVersion[2],appVersion[3],appVersion[4],appVersion[5]].join(&quot; &quot;);
    os = os.split(&quot;(&quot;)[1].split(&quot;)&quot;)[0]
    browser = appVersion[appVersion.length-2].split(&quot;/&quot;).join(&quot; &quot;);
    console.log(&quot;Browser:&quot;,browser,&quot;- OS:&quot;,os);
}

// Safari
else if(navigator.vendor === &quot;Apple Computer, Inc.&quot;){
    appVersion = navigator.appVersion.split(&quot; &quot;);
    os = [appVersion[1],appVersion[2],appVersion[3],appVersion[4],appVersion[5]].join(&quot; &quot;);
    os = os.split(&quot;(&quot;)[1].split(&quot;)&quot;)[0];
    browser = appVersion[appVersion.length-1].split(&quot;/&quot;).join(&quot; &quot;);
    console.log(&quot;Browser:&quot;,browser,&quot;- OS:&quot;,os);
}

// Firefox is seems the only browser with oscpu
else if(navigator.oscpu){
    bStore = navigator.userAgent.split(&quot;; &quot;).join(&quot;-&quot;).split(&quot; &quot;);
    browser = bStore[bStore.length-1].replace(&quot;/&quot;,&quot; &quot;);
    osStore = [bStore[1],bStore[2],bStore[3]].join(&quot; &quot;);
    osStore = osStore.split(&quot;-&quot;);
    osStore.pop(osStore.lastIndexOf)
    osStore = osStore.join(&quot; &quot;).split(&quot;(&quot;);
    os = osStore[1];
    console.log(&quot;Browser:&quot;,browser,&quot;- OS:&quot;,os);
}

// IE is seems the only browser with cpuClass
// MSIE 11:10 Mode
else if(navigator.appName === &quot;Microsoft Internet Explorer&quot;){
    bStore = navigator.appVersion.split(&quot;; &quot;);
    browser = bStore[1]+&quot; / &quot;+bStore[4].replace(&quot;/&quot;,&quot; &quot;);
    os = [bStore[2],bStore[3]].join(&quot; &quot;);
    console.log(&quot;Browser:&quot;,browser,&quot;- OS:&quot;,os);
}

// MSIE 11
else if(navigator.cpuClass){
    bStore = navigator.appVersion.split(&quot;; &quot;);
    osStore = [bStore[0],bStore[1]].join(&quot; &quot;);
    os = osStore.split(&quot;(&quot;)[1];
    browser = &quot;MSIE 11 &quot;+bStore[2].split(&quot;/&quot;).join(&quot; &quot;);
    console.log(&quot;Browser:&quot;,browser,&quot;- OS:&quot;,os);
}

// Edge
else if(navigator.appVersion){
    browser = navigator.appVersion.split(&quot; &quot;);
    browser = browser[browser.length -1].split(&quot;/&quot;).join(&quot; &quot;);
    os = navigator.appVersion.split(&quot;)&quot;)[0].split(&quot;(&quot;)[1];
    console.log(&quot;Browser:&quot;,browser,&quot;- OS:&quot;,os);
}

// Other browser
else {
    console.log(JSON.stringify(navigator));
}
&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;이를 위해 3개의 도서관이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;온라인 https://www.whatsmyua.info 에서 이 페이지를 비교하고(이 페이지를 여러 브라우저 및 장치에 로드), 필요에 맞는 최적의 것을 선택할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;platform.js의 사용 예&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;script src=&quot;platform.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;// on an iPad
platform.name; // 'Safari'
platform.version; // '5.1'
platform.product; // 'iPad'
platform.manufacturer; // 'Apple'
platform.layout; // 'WebKit'
platform.os; // 'iOS 5.0'
platform.description; // 'Safari 5.1 on Apple iPad (iOS 5.0)'

// or parsing a given UA string
var info = platform.parse('Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7.2; en; rv:2.0) Gecko/20100101 Firefox/4.0 Opera 11.52');
info.name; // 'Opera'
info.version; // '11.52'
info.layout; // 'Presto'
info.os; // 'Mac OS X 10.7.2'
info.description; // 'Opera 11.52 (identifying as Firefox 4.0) on Mac OS X 10.7.2'
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ua-parser.js에 대한 사용 예&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;script src=&quot;ua-parser.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;var parser = new UAParser();
console.log(parser.getResult());
/*
    /// This will print an object structured like this:
    {
        ua: &quot;&quot;,
        browser: {
            name: &quot;&quot;,
            version: &quot;&quot;,
            major: &quot;&quot; //@deprecated
        },
        engine: {
            name: &quot;&quot;,
            version: &quot;&quot;
        },
        os: {
            name: &quot;&quot;,
            version: &quot;&quot;
        },
        device: {
            model: &quot;&quot;,
            type: &quot;&quot;,
            vendor: &quot;&quot;
        },
        cpu: {
            architecture: &quot;&quot;
        }
    }
*/
// Default result depends on current window.navigator.userAgent value

// Now let's try a custom user-agent string as an example
var uastring1 = &quot;Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.2 (KHTML, like Gecko) Ubuntu/11.10 Chromium/15.0.874.106 Chrome/15.0.874.106 Safari/535.2&quot;;
parser.setUA(uastring1);
var result = parser.getResult();
// You can also use UAParser constructor directly without having to create an instance:
// var result = UAParser(uastring1);

console.log(result.browser);        // {name: &quot;Chromium&quot;, version: &quot;15.0.874.106&quot;}
console.log(result.device);         // {model: undefined, type: undefined, vendor: undefined}
console.log(result.os);             // {name: &quot;Ubuntu&quot;, version: &quot;11.10&quot;}
console.log(result.os.version);     // &quot;11.10&quot;
console.log(result.engine.name);    // &quot;WebKit&quot;
console.log(result.cpu.architecture);   // &quot;amd64&quot;
&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;2023:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;navigator.platform&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;navigator.appVersion&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;navigator.userAgent&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;a href=&quot;https://developer.chrome.com/blog/deps-rems-100/&quot; papago-id=&quot;52-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;크롬 버전 100-113 사이에 점차적&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;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;navigator.userAgentData&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;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은 이 &lt;a href=&quot;https://web.dev/migrate-to-ua-ch/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;55-1&quot;&gt;Google 블로그&lt;/a&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;하지만 파이어폭스와 사파리는 아직 이를 채택하지 않았기 때문에 이 답변은 미래지향적인 것임에 유의하시기 바랍니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://caniuse.com/?search=navigator.userAgentData&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;56-1&quot;&gt;사용&lt;/a&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;아이폰과 아이패드를 따로 다룰 2023년 코드가 필요했습니다.&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;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Navigator/platform&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;58-0&quot;&gt;navigator.platform&lt;/a&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;iPhone &amp;amp; iPad 16.3, Android Phone, Windows 10으로 테스트되었습니다.&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;Android 태블릿이 없습니다.&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;Mac &amp;amp; Linux에서 테스트되지 않았습니다.&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;https://developer.mozilla.org/en-US/docs/Web/API/Navigator/maxTouchPoints&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;63-0&quot;&gt;navigator.maxTouchPoints&lt;/a&gt;는 Chrome 시뮬레이터에서 작동하기 위해 더 크거나 같게 테스트되고 실제 장치에서 작동하기 위해 제거됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;브라우저 이름과 버전에 관해서 요즘은 좀 까다롭네요, &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Navigator/appVersion&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;64-1&quot;&gt;navigator. appVersion&lt;/a&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;userAgent에는 많은 x.xx.xxx 매치가 있으며, 어쩌면 우리가 원하는 매치가 항상 마지막일 수도 있습니다.&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;아니거나, 내 Samsung S10 사용자 에이전트는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Mozilla/5.0 (Linux; Android 12; SM-G975F) Apple WebKit/537.36 (KHTML, Gecko처럼) Chrome/110.0.0.0 모바일 사파리/537.36&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사파리를 사용하여 Chrome을 샌드박스하고 Android 장치에서 실행하는 Mozilla 코드를 실행하는 Linux 시스템입니까? omg&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;그래서 저는 선두의 &quot;Mozilla/x.x&quot;를 제거하고 오프셋을 도입하고 iOS 버전을 무시했습니다.&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;생산에 사용하지 마십시오.&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;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;(() =&amp;gt; {

console.log(navigator.userAgent);

let ua = navigator.userAgent.toLowerCase().replace(/^mozilla\/\d\.\d\W/, &quot;&quot;);

let mobiles = {
            
        &quot;iphone&quot;: /iphone/, 
        &quot;ipad&quot;: /ipad|macintosh/, 
        &quot;android&quot;: /android/
        
    };
    desktops = {

        &quot;windows&quot;: /win/, 
        &quot;mac&quot;: /macintosh/, 
        &quot;linux&quot;: /linux/

    };

let os = Object.keys(mobiles)
.find(os =&amp;gt; mobiles[os].test(ua) &amp;amp;&amp;amp; navigator.maxTouchPoints &amp;gt;= 1) 
|| 
Object.keys(desktops)
.find(os =&amp;gt; desktops[os].test(ua));

let browserTest = ua.match(/(\w+)\/(\d+\.\d+(?:\.\d+)?(?:\.\d+)?)/g), 
    browserOffset = browserTest.length &amp;amp;&amp;amp; (browserTest.length &amp;gt; 2 &amp;amp;&amp;amp; !(/^(ver|cri|gec)/.test(browserTest[1])) ? 1 : 0), 
    browserResult = browserTest.length &amp;amp;&amp;amp; browserTest[browserTest.length - 1 - browserOffset].split(&quot;/&quot;), 
    browser = browserResult &amp;amp;&amp;amp; browserResult[0], 
    version = browserResult &amp;amp;&amp;amp; browserResult[1];

console.log(os, browser, version);

})();&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&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;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iPhone 12 mini iOs 16.3 userAgent가 iOs 16.1을 반환합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android의 Firefox가 탐지됨&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iOS의 모든 브라우저가 Safari를 반환합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;77&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;78&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자의 &lt;strong papago-id=&quot;78-1&quot;&gt;운영체제&lt;/strong&gt;를 탐지하기 위한 코드&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let os = navigator.userAgent.slice(13).split(';')
os = os[0]
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code&gt;console.log(os)
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code&gt;Windows NT 10.0
&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;Mozilla 코어를 기반으로 새 Microsoft Edge를 가져오려면 다음을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;else if ((verOffset=nAgt.indexOf(&quot;Edg&quot;))!=-1) {
 browserName = &quot;Microsoft Edge&quot;;
 fullVersion = nAgt.substring(verOffset+5);
}
&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;// In Chrome, the true version is after &quot;Chrome&quot; 
else if ((verOffset=nAgt.indexOf(&quot;Chrome&quot;))!=-1) {
 browserName = &quot;Chrome&quot;;
 fullVersion = nAgt.substring(verOffset+7);
}
&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/11219582/how-to-detect-my-browser-version-and-operating-system-using-javascript&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>JavaScript</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1477</guid>
      <comments>https://mycopycode.tistory.com/1477#entry1477comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:42:21 +0900</pubDate>
    </item>
    <item>
      <title>최대 높이 설정을 해제하는 방법은?</title>
      <link>https://mycopycode.tistory.com/1476</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;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;재설정하는 방법&lt;/font&gt;&lt;/font&gt;&lt;code&gt;max-height&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부 CSS 규칙에서 이전에 설정된 경우 속성이 기본값으로 설정됩니까?&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;pre {
  max-height: 250px;
}

pre.doNotLimitHeight {
  max-height: auto; // Doesn't work at least in Chrome
}
&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;none&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;pre {
  max-height: 250px;
}

pre.doNotLimitHeight {
  max-height: none;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/CSS/max-height&quot; papago-id=&quot;5&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;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 css를 사용하여 max-height 특성을 지울 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;max-height:none; 
&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;max-height: unset;
&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;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트를 사용하여 요소를 다음과 같이 스타일을 지정하는 경우 참고하십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$el.style.maxHeight = '50px';&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;$el.style.maxHeight = 'none';&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;reset&quot; 또는 &quot;제거&quot;하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;50px&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;이것은 만약 당신이 다음을 사용하여 요소의 최대 높이를 &quot;재설정&quot;하려고 한다면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$el.style.maxHeight = 'none';&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;none&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;max-height&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;max-height&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해당 요소와 일치하는 CSS 선택 규칙의 속성입니다.&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;예:&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;.set-max-height { max-height: 50px; }
&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;main.js&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;document.querySelectorAll('.set-max-height').forEach($el =&amp;gt; {
  if($el.hasAttribute('data-hidden')){
    $el.style.maxHeight = '0px'; // Set max-height to 0px.
  } else {
    $el.style.maxHeight = 'none'; // 'Unset' max-height according to accepted answer.
});
&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;인라인 스타일을 실제로 &quot;설정 해제&quot;하려면 다음을 사용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$el.style.removeProperty('max-height');&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&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;removeProperty&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;pre&gt;&lt;code&gt;for(let i = 0; i &amp;lt; document.styleSheets[0].cssRules.length; ++i){
  if(document.styleSheets[0].cssRules[i].selectorText == '.set-max-height'){
    document.styleSheets[0].cssRules[i].style.removeProperty('max-height');
    break;
  }
}
&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;StyleSheet&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;CssRule&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;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;답변으로 말씀드려 죄송합니다만, 제가 50명의 담당자가 없어서 코멘트를 드릴 수가 없습니다.&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;max-height: none;
&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;pre&gt;&lt;code&gt;max-height: 100%;
&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;/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/13988145/how-to-unset-max-height&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>CSS</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1476</guid>
      <comments>https://mycopycode.tistory.com/1476#entry1476comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:42:07 +0900</pubDate>
    </item>
    <item>
      <title>HSQL 데이터베이스 사용자에게 권한이 없거나 개체를 찾을 수 없음 오류가 발생했습니다.</title>
      <link>https://mycopycode.tistory.com/1475</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HSQL 데이터베이스 사용자에게 권한이 없거나 개체를 찾을 수 없음 오류가 발생했습니다.&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;저는 spring application에서 &lt;strong papago-id=&quot;1-1&quot;&gt;hsqldb-2.3.4&lt;/strong&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;pre&gt;&lt;code&gt;Type : HSQL Database Engine Standalone
Driver: org.hsqldb.jdbcDriver
URL: jdbc:hsqldb:file:mydb
UserName: SA
Password: SA
&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;&quot;MYDB&quot; 스키마로 &lt;strong papago-id=&quot;3-1&quot;&gt;ALBUM&lt;/strong&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;pre&gt;&lt;code&gt;&amp;lt;bean id=&quot;jdbcTemplate&quot;
    class=&quot;org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate&quot;&amp;gt;
    &amp;lt;constructor-arg ref=&quot;dbcpDataSource&quot; /&amp;gt;
&amp;lt;/bean&amp;gt;

&amp;lt;bean id=&quot;dbcpDataSource&quot; class=&quot;org.springframework.jdbc.datasource.DriverManagerDataSource&quot;&amp;gt;
    &amp;lt;property name=&quot;driverClassName&quot; value=&quot;org.hsqldb.jdbcDriver&quot; /&amp;gt;
    &amp;lt;property name=&quot;url&quot; value=&quot;jdbc:hsqldb:file:mydb&quot; /&amp;gt;
    &amp;lt;property name=&quot;username&quot; value=&quot;SA&quot; /&amp;gt;
    &amp;lt;property name=&quot;password&quot; value=&quot;SA&quot; /&amp;gt;
&amp;lt;/bean&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 class=&quot;papago-parent&quot;&gt;그리고 나의 봄컨트롤러에서 나는 하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;jdbcTemplate.query(&quot;SELECT * FROM MYDB.ALBUM&quot;, new AlbumRowMapper());&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;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [SELECT * FROM MYDB.ALBUM]; nested exception is java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: ALBUM
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
&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;hsqldbit의 SQL 에디터를 통해 동일한 쿼리를 실행하면 잘 실행됩니다.&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&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;8-1&quot;&gt;특정 DB 벤더 구문이나 특정 기능을 사용하는 경우 HSQLDB는 이를 인식하지 못합니다.&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;예를 들어 엔티티가 다음과 같이 주석이 표시된 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@Column(columnDefinition = &quot;TEXT&quot;)&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;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HSQLDB에 pgsl에 대해 호환 가능한 모드가 되도록 알려주는 &lt;strong papago-id=&quot;10-0&quot;&gt;작업이 있습니다&lt;/strong&gt;. 연결 URL을 추가해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;spring.datasource.url=jdbc:hsqldb:mem:testdb;sql.syntax_pgs=true&quot;
&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-1&quot;&gt;mysql&lt;/strong&gt;의 경우.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;spring.datasource.url=jdbc:hsqldb:mem:testdb;sql.syntax_mys=true&quot;
&lt;/code&gt;&lt;/pre&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;/strong&gt; &lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;spring.datasource.url=jdbc:hsqldb:mem:testdb;sql.syntax_ora=true&quot; 
&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 class=&quot;papago-parent&quot;&gt;구성에 따라 변형이 있을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;hibernate.connection.url=&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;spring.datasource.url=&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;동면 스키마 생성을 사용하지 않고 SQL 스크립트를 사용하는 사람들은 스크립트에서 이러한 종류의 구문을 사용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SET DATABASE SQL SYNTAX ORA TRUE;
&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 요청의 &lt;strong papago-id=&quot;16-3&quot;&gt;공급업체별&lt;/strong&gt; 구문(&lt;strong papago-id=&quot;16-1&quot;&gt;예&lt;/strong&gt;: array_agg for posgresql)으로 인한 문제도 해결합니다.&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;strong papago-id=&quot;17-0&quot;&gt;참고&lt;/strong&gt; : 코드가 모델을 구문 분석하여 스키마를 만든 다음 많은 로그 행에 숨겨져 있을 때 문제가 발생합니다. 그런 다음 unitTested 코드가 혼동되고 불분명한 예외 &quot;user lanks privilege or object not found error&quot;와 함께 충돌하여 실제 문제를 전혀 지적하지 않습니다.&lt;/font&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;HSQLDB는 기본적으로 대소문자를 구분합니다.&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;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;CREATE MEMORY TABLE &quot;t1&quot;(&quot;product_id&quot; INTEGER NOT NULL)
&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;select &quot;product_id&quot; from &quot;t1&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;user lacks privilege or object not found&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;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드를 실행할 때 파일 데이터베이스 URL에 대한 연결이 실제로 DB를 만들 수 있다는 점이 덜 명확한 이유입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HSQL Database Manager를 사용하여 DB를 설정하고 테이블과 행을 추가하는 경우가 발생할 수 있지만 Java 코드가 사용하는 특정 인스턴스는 아닙니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 파일의 복사본이 여러 개가 없는지 확인할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mydb.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&gt;&lt;code&gt;mydb.lck&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;mydb.properties&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;Java 코드가 이러한 파일을 만든 경우 프로그램을 실행하는 방법에 따라 위치가 달라집니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 Netbeans 내부에서 실행되는 메이븐 프로젝트에서 파일은 pom.xml과 함께 저장됩니다.&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;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;user lacks privilege or object not found&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&gt;&lt;code&gt;spring.datasource.schema&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;문제는 &quot;CREATE TABLE&quot;-Statement(&quot;CREATE INDEX&quot; 뒤에 SQL 파일의 세미콜론이 누락되었다는 것입니다.&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&gt;&lt;code&gt;org.hsqldb.HsqlException: user lacks privilege or object not found: DAYS_BETWEEN&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;DAYS_BETWEEN&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;hsqldb에서 함수로 인식되지 않습니다.&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;대신 DATEIFF를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DATEDIFF ( &amp;lt;datetime value expr 1&amp;gt;, &amp;lt;datetime value expr 2&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;다음 스크립트를 이용하여 hsql db에 데이터를 삽입하고 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;INSERT INTO Greeting (text) VALUES (&quot;Hello World&quot;);
&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;Hello World&lt;/strong&gt; 개체를 찾을 수 없으며 HSQL 데이터베이스 사용자에게 권한이 없거나 개체를 찾을 수 없음 오류와 관련된 문제가 발생했습니다.&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;INSERT INTO Greeting (text) VALUES ('Hello World');
&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;HSWLDB 서버를 실행할 때.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 java config 파일은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;hsql.jdbc.url = jdbc:hsqldb:hsql://localhost:9005/YOURDB;sql.enforce_strict_size=true;hsqldb.tx=mvcc&lt;/code&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;당신의 세트가 a인지 확인하기 위해 체크하세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;server.dbname.#&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; 예를 들어 my server.properties 파일:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    server.database.0=eventsdb 
    server.dbname.0=eventsdb 
    server.port=9005
&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;spring.jpa.hibernate.naming.implicit-strategy=
org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl

spring.jpa.hibernate.naming.physical-strategy=
org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
&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;우리는 grails 애플리케이션을 실행하고 있는데 누군가가 BootStrap 파일에 SQL 스크립트를 삽입했습니다(그것이 grail의 진입점입니다).&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;User lacks privilege or object not found:
&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;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트 환경에서 스크립트가 실행되지 않는지 확인해야 했고 그것이 문제를 해결해 주었지만 3시간이 걸렸습니다.&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;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;String test = &quot;inputTest&quot;;&lt;/code&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;String test = &quot;'inputTest'&quot;;&lt;/code&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;데이터베이스에 무엇인가를 넣으려고 할 때 오류가 발생했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;connection.createStatement.execute(&quot;INSERT INTO tableTest values(&quot; + test +&quot;)&quot;;
&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;'&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;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 경우에는 TABLE_NAME을 큰따옴표 &quot;TABLE_NAME&quot;에 넣지 않고 오라클 스키마 접두사가 있어서 오류가 발생했습니다.&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;SELECT * FROM FOOSCHEMA.BAR_TABLE
&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;SELECT * FROM &quot;BAR_TABLE&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;font class=&quot;papago-parent&quot;&gt;효과가 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// var1, var3, var4 are String variables
// var2 and var5 are Integer variables
result = statement.executeUpdate(&quot;INSERT INTO newTable VALUES ('&quot;+var1+&quot;',&quot;+var2+&quot;,'&quot;+var3+&quot;','&quot;+var4+&quot;',&quot;+var5 +&quot;)&quot;);
&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&gt;&lt;code&gt;persistence.xml&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;&amp;lt;property name=&quot;hibernate.hbm2ddl.auto&quot; value=&quot;update&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;필요한 스키마 요소를 만들기 위해 동면 상태에서 DDL을 내보내지 못했습니다...&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;(서로 다른 Hibernate 포장지에는 속성을 지정하는 메커니즘이 다릅니다. 여기서는 JPA를 사용합니다.)&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;Intellij IDEA 데이터베이스(데이터베이스) 속성에서 &quot;경로&quot; 필드를 지정하지 않고 응용 프로그램을 실행하려고 하다가 이 오류가 발생했습니다.&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;IDEA 데이터베이스 콘솔에서 스크립트를 실행할 수 있었고 스크립트는 올바르게 실행되었지만 IDEA에 대한 경로를 제공하지 않아 연결할 위치를 확인할 수 없어 오류가 발생했습니다.&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;font class=&quot;papago-parent&quot;&gt;그렇지 않으면 외부 응용 프로그램에서 연결되지 않으며 사용자 권한 부족과 유사한 오류가 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 서버 모드에서 DB를 실행할 때 스프링 구성 파일에서 데이터베이스의 URL을 적절히 변경합니다.&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;서버 모드 $java -cp lib/hsqldb.jar org.hsqldb.server에서 DB를 실행하기 위한 샘플 명령입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버 --database.0 파일:data/mydb --dbname.0&lt;/font&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;구성 파일의 URL 형식 jdbc:hsqldb:hsqldb://localhost/Test&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;제 경우에는 열 중 하나에 @Column(이름 = &quot;key&quot;) 주석이 누락된 'key'라는 이름이 있어서 로그에서 테이블을 만든 쿼리를 볼 수 있었지만 실제로는 없었습니다.&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;무슨 가치가 있건 간에, 저도 똑같은 문제를 가지고 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 'XTYPE'으로 이름을 바꾼 'TYPE'이라는 컬럼과 'XORDER'로 이름을 바꾼 'ORDER'라는 컬럼이 있었는데 문제가 사라졌습니다.&lt;/font&gt;&lt;/p&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;font class=&quot;papago-parent&quot;&gt;실제 테이블에 albumid라는 ID 열이 있고 album_id를 사용한 경우에도 이 문제가 발생할 수 있습니다.&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;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동일한 문제에 직면하여 하나 이상의 지속성 유닛(ReadOnly 및 ReadWrite)이 있다는 것을 발견했습니다. 따라서 하나의 지속성 유닛의 스키마를 사용하여 생성된 HSQLDDB의 테이블은 다른 지속성 유닛에서 액세스할 때 예외(HSQL 데이터베이스 사용자에게 권한이 없거나 개체를 찾을 수 없음 오류)가 발생했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JPA의 한 세션에서 테이블을 만들고 다른 세션에서 액세스할 때 발생합니다.&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&gt;&lt;code&gt;MY_TABLE&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;SOME_SCHEMA&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;/p&gt; 
&lt;ol&gt; 
 &lt;li&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;code&gt;schema.sql&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;code&gt;resources&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;/li&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;CREATE SCHEMA YOUR_SCHEMA_NAME;&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&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;SQL 클라이언트를 통해 데이터베이스를 만든 경우 생성에 성공했지만 Java에서 동일한 SQL DDL을 생성하려고 하면 이상한 오류가 발생하여 도움이 되지 않습니다.&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;SQL DDL 문을 별도의 CREATE 문으로 분할하기로 하고 이를 실행했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 모든 표와 지수는 아무런 문제 없이 만들어졌습니다.&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;그건 그렇고, 내가 executeUpdate(DDL)를 사용하든, executeUpdate(DDL)를 사용하든 상관없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;둘 다 동일한 오류 메시지와 함께 실패합니다. 내가 그 문장들을 분할하지 않는 한 말이죠.&lt;/font&gt;&lt;/p&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;font class=&quot;papago-parent&quot;&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/38415734/hsql-database-user-lacks-privilege-or-object-not-found-error&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>Spring</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1475</guid>
      <comments>https://mycopycode.tistory.com/1475#entry1475comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:42:00 +0900</pubDate>
    </item>
    <item>
      <title>그룹의 SQL 선택 멤버</title>
      <link>https://mycopycode.tistory.com/1474</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;다음과 같은 사용자 테이블이 있는 경우&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class | age
--------------
1       20    
3       56
2       11
1       12
2       20
&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 class, min(age)
from   user
group by class;
&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;마찬가지로 min을 max로 대체하면 가장 오래된 것을 얻을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런데 어떻게 하면 각 &lt;strong papago-id=&quot;3-1&quot;&gt;반&lt;/strong&gt;에서 10번째로 막내(혹은 맏이)를 받을 수 있을까요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런데 MySql v.5.0을 사용하고 있습니다.&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;pre&gt;&lt;code&gt;SELECT a.class,
(
    SELECT b.age 
    FROM users b 
    WHERE b.class = a.class
    ORDER BY age 
    LIMIT 1,1
) as age
FROM users a
GROUP BY a.class
&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;LIMIT 9,1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 10대째를 원하신다면, 그렇게 하겠죠.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ORDER BY age DESC&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;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;N&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;Nth&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;oldest&lt;/code&gt; &lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT *
FROM users k
WHERE N = (SELECT
             COUNT( DISTINCT age)
           FROM users u
           WHERE k.age &amp;gt;= u.age
               AND k.class = u.class
           GROUP BY u.class)
&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;Nth&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;youngest&lt;/code&gt; &lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT *
FROM users k
WHERE N = (SELECT
             COUNT(DISTINCT age)
           FROM users u
           WHERE k.age &amp;lt;= u.age
               AND k.class = u.class
           GROUP BY u.class)
&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;유일한 sql 독립적인 방법(하위 쿼리 mysql &amp;lt;5가 없더라도)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; select  u1.class, u1.age, count(*)  from      user u1 join user u2 
 on u1.class = u2.class and u1.age &amp;gt;= u2.age
 group by u1.class, u1.age
 having count(*) = [number]
&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; select  u1.class, u1.age, count(*)  from      user u1 join user u2 
 on u1.class = u2.class and u1.age &amp;lt;= u2.age
 group by u1.class, u1.age
 having count(*) = [number]
&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;두 사람의 나이가 같을 경우 둘 다 반환되기 때문에 작동하지 않을 수 있습니다.&lt;/font&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;pre&gt;&lt;code&gt;- a JOIN b ON a.class = b.class AND a.age &amp;gt;= b.age  
- on average the &amp;gt;= condition will be true for half the class  

- 6 people in a class  
-&amp;gt;6*6/2 = 18

- 10 people in a class
-&amp;gt;10*10/2 = 50

-&amp;gt; very rapid growth
&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;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;19&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;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 모든 레코드를 클래스 앤 에이지 순으로 정렬된 IDENTITY 필드와 함께 새 테이블에 삽입합니다.&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;이제 각 클래스에 대해 MIN(id)을 찾습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 각 클래스별로 = MIN(id) + 8(9번째 장)의 기록을 헹구세요.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&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;개인적으로는...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT
    [USER_WITH_IDS].id,
    [USER_WITH_IDS].class,
    [USER_WITH_IDS].age
FROM
    [USER_WITH_IDS]
WHERE
    [USER_WITH_IDS].id = (
                          SELECT
                              MIN([min].ID) + 8
                          FROM
                              [USER_WITH_IDS] AS [min]
                          WHERE
                              [min].class = [USER_WITH_IDS].class
                         )
&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;ul&gt; 
 &lt;li papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새 ID를 만드는 데 한 번의 패스&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;각 클래스에 대한 MIN(id)을 얻을 수 있는 패스 1개&lt;/font&gt;&lt;/li&gt; 
 &lt;li&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;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 옵티마이저가 얼마나 우수한지에 따라 인덱스(클래스, id)를 사용하면 마지막 두 패스를 하나의 패스로 결합할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블이나 학급의 크기가 아무리 커도 2, 3번은 통과합니다.&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;다른 방법은 SQL 쿼리를 for 루프 내부에 배치하는 것이며, 매번 WHERE ...NOT IN 절로 필터링되는 성장 튜플에 새로운 최소값을 추가하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;속도에 대해서는 잘 모르겠지만, 매우 큰 데이터 세트(180,000개 이상의 레코드)에서는 매우 빠르게 작동했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL과 Python을 섞어서 죄송합니다. 저는 둘 다 초보입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL에서 루프를 수행할 수 있는 방법이 있을 것이라는 것은 알고 있지만 잘 모르겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;        idx = tuple()
        for i in range(n):

            qry = '''SELECT class, min(age)
                     FROM user
                     WHERE age NOT IN {}
                     GROUP BY class'''.format(idx)

            cur.execute(qry)
            data = cur.fetchall()
            d = pd.DataFrame(data)

            idx = idx + tuple(d['min(age)'])
&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;SQL Server에서는 다음과 같은 작업이 매우 쉽습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;pre&gt;&lt;code&gt;select 
  *
from(
   select 
      *,
      row_number() over(order by age asc) as eldest
   from class order by age asc) a
where a.eldest = 10
&lt;/code&gt;&lt;/pre&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;MySQL의 경우 이러한 패턴을 참고해 보십시오. http://www.xaprb.com/blog/2006/12/02/how-to-number-rows-in-mysql/&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt; SELECT 
     userid,  
     class,  
     age,  
     (    SELECT COUNT(1) FROM user  
          WHERE class = c.class  AND age &amp;gt; u.age  
     ) AS oldercount  
FROM user AS u  
WHERE oldercount = 9
GROUP BY class
&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;/p&gt; 
&lt;pre&gt;&lt;code&gt; SELECT userid,  
         class,  
         age  
  FROM user AS u    
  WHERE (SELECT COUNT(1) FROM class WHERE class = c.class AND age &amp;gt; u.age) = 9  
GROUP BY class
&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;URL : https://stackoverflow.com/questions/463054/sql-select-nth-member-of-group&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>MySQL</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1474</guid>
      <comments>https://mycopycode.tistory.com/1474#entry1474comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:41:51 +0900</pubDate>
    </item>
    <item>
      <title>Access-Control-Allow-Origin에서는 오리진 null이 허용되지 않습니다.</title>
      <link>https://mycopycode.tistory.com/1473</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Access-Control-Allow-Origin에서는 오리진 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;다음과 같은 코드로 weather.xsl이라는 HTML 출력을 만들기 위해 작은 xslt 파일을 만들었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- DWXMLSource=&quot;http://weather.yahooapis.com/forecastrss?w=38325&amp;amp;u=c&quot; --&amp;gt;
&amp;lt;xsl:stylesheet version=&quot;1.0&quot;
xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;
exclude-result-prefixes=&quot;yweather&quot;
xmlns:yweather=&quot;http://xml.weather.yahoo.com/ns/rss/1.0&quot; xmlns:geo=&quot;http://www.w3.org/2003/01/geo/wgs84_pos#&quot;&amp;gt;
&amp;lt;xsl:output omit-xml-declaration=&quot;yes&quot; indent=&quot;yes&quot;/&amp;gt;
&amp;lt;xsl:strip-space elements=&quot;*&quot;/&amp;gt;

&amp;lt;xsl:template match=&quot;/&quot;&amp;gt;
    &amp;lt;img src=&quot;{/*/*/item/yweather:condition/@text}.jpg&quot;/&amp;gt;
&amp;lt;/xsl:template&amp;gt;
&amp;lt;/xsl:stylesheet&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;다음과 같이 html 출력을 jQuery를 사용하여 시도하는 html 파일의 div에 로드하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div id=&quot;result&quot;&amp;gt;
&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
$('#result').load('weather.xsl');
&amp;lt;/script&amp;gt;
&amp;lt;/div&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;font class=&quot;papago-parent&quot;&gt;Access-Control-Allow-Origin에서는 오리진 null이 허용되지 않습니다.&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;xslt에 헤더를 추가하는 것에 대해 읽었지만 어떻게 해야 할지 잘 모르니 도움을 주시면 감사하겠습니다. htmlout에 로드하는 것이 이런 식으로 할 수 없다면 다른 방법에 대한 조언이 좋을 것 같습니다.&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;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 로컬 파일 시스템이므로, 당신이 다음을 수행하는 HTML 페이지를 로드하고 있음을 암시합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;load&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;A로 전화를 걸다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;file:///&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL(예: 로컬 파일 브라우저 등에서 두 번 클릭하기만 하면 됨).&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;대부분의 브라우저는 문서와 동일한 디렉토리에서 파일을 로드하는 것조차 허용하지 않음으로써 &lt;a href=&quot;http://en.wikipedia.org/wiki/Same_origin_policy&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-1&quot;&gt;동일한 오리진 정책&lt;/a&gt;을 로컬 파일에 적용합니다. (Firefox는 이전에는 동일한 디렉토리와 하위 디렉토리를 허용했지만 더 &lt;a href=&quot;https://www.mozilla.org/en-US/security/advisories/mfsa2019-21/#CVE-2019-11730&quot; papago-id=&quot;9-3&quot; rel=&quot;noreferrer&quot;&gt;이상&lt;/a&gt; 허용하지 &lt;a href=&quot;https://www.mozilla.org/en-US/security/advisories/mfsa2019-21/#CVE-2019-11730&quot; papago-id=&quot;9-3&quot; rel=&quot;noreferrer&quot;&gt;않았습니다&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;기본적으로 로컬 리소스와 함께 ajax를 사용하는 것은 효과가 없습니다.&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;http://&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 URL.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 훨씬 더 정확한 보안 사진을 얻을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;IDE에는 IDE의 &quot;실행&quot;을 눌러 서버를 실행하고 파일을 제공할 수 있는 일종의 서버가 내장되어 있을 수 있습니다(직접 또는 확장자를 통해).&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;Chrome과 Safari는 로컬 리소스와 함께 axij를 사용하는 데 제한이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 이런 오류가 발생하는 겁니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;em papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Access-Control-Allow-Origin에서는 오리진 null이 허용되지 않습니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;/blockquote&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-0&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;그래도 Chrome을 사용하고 싶다면 아래 옵션으로 시작합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;--allow-file-access-from-files
&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;strong papago-id=&quot;16-0&quot;&gt;Chrome에 위 매개변수를 추가하는 방법에 대한 자세한 정보:&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;작업 표시줄에서 Chrome 아이콘을 마우스 오른쪽 단추로 클릭하고 팝업 창에서 Google Chrome을 마우스 오른쪽 단추로 클릭한 다음 속성을 클릭하고 바로 가기 탭 아래의 대상 텍스트 상자 안에 위 매개 변수를 추가합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래와 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;C:\Users\XXX_USER\AppData\Local\Google\Chrome\Application\chrome.exe --allow-file-access-from-files
&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;&quot;웹 서버 실행&quot;이라는 대답은 상당히 어려워 보이지만 시스템에 python(기본적으로 MacOS 및 Linux 배포 환경에 설치된)이 있다면 다음과 같이 간단합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;python -m http.server  # with python3
&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;python -m SimpleHTTPServer  # with python2
&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 class=&quot;papago-parent&quot;&gt;그래서 html 파일을 가지고 있다면,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;myfile.html&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;mydir&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;cd /path/to/mydir
python -m http.server  # or the python2 alternative above
&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;http://localhost:8000/myfile.html
&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;strong papago-id=&quot;24-1&quot;&gt;모든 브라우저&lt;/strong&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;이 SO 소스에 따르면 https://stackoverflow.com/a/14671362/1743693, 이 문제는 이제 다음 jQuery 명령을 사용하여 부분적으로 해결됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script&amp;gt; 
    $.support.cors = true;
&amp;lt;/script&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;strong papago-id=&quot;26-0&quot;&gt;IE10.0.9200에서 사용해 보았는데 바로 작동&lt;/strong&gt;이 되었습니다(jquery-1.9.0.js 사용).&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;크롬 28.0.1500.95 - 이 지침이 작동하지 않습니다 (위 링크의 댓글에 &lt;a href=&quot;https://stackoverflow.com/users/690639/david&quot; papago-id=&quot;27-1&quot;&gt;David&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;파일에서 파일 액세스를 허용하는 크롬을 실행하는 것은 (위의 Maistora의 주장처럼) 제게 효과가 없었습니다.&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;Gokhan의 솔루션을 사용하기 위해 약간의 정보를 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;--allow-file-access-from-files
&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;이제 Target 텍스트에 위 텍스트를 추가하고 공백을 추가하면 됩니다. 위 속성을 추가한 후 크롬 브라우저의 모든 인스턴스를 닫아야 합니다.&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;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로컬 html 파일에서 서버에 XHR 요청을 할 수 있는 솔루션을 찾고 있었는데 Chrome과 PHP를 이용한 솔루션을 찾았습니다. (no Jquery)&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;var x = new XMLHttpRequest(); 
if(x) x.onreadystatechange=function(){ 
    if (x.readyState === 4 &amp;amp;&amp;amp; x.status===200){
        console.log(x.responseText); //Success
    }else{ 
        console.log(x); //Failed
    }
};
x.open(GET, 'http://example.com/', true);
x.withCredentials = true;
x.send();
&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 class=&quot;papago-parent&quot;&gt;의 요청 마이 크롬&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Origin: null&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;내 PHP 응답 헤더('null'은 &lt;strong papago-id=&quot;34-1&quot;&gt;문자열&lt;/strong&gt;입니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTTP_REFERERER는 원격 서버에서 다른 서버로 교차 오리진을 허용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;header('Access-Control-Allow-Origin: '.(trim($_SERVER['HTTP_REFERER'],'/')?:'null'),true);
header('Access-Control-Allow-Credentials:true',true);
&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;code&gt;AuthType Basic&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;/p&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;FF와 오페라와의 호환성을 테스트했는데 다음과 같은 경우에 효과가 있습니다.&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; LAN IP(192.168.0.x) 에서 VM 의 WAN() IP:port&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&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;VM LAN IP에서 원격 서버 도메인 이름으로 다시 전환합니다.&lt;/font&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 class=&quot;papago-parent&quot;&gt;현지에서.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; VM LAN IP / VM WAN IP:port  HTML ,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&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;HTML 파일을 원격 서버 도메인 이름으로 만듭니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&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&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;로컬 Javascript 파일을 로드할 수 있습니다(아래 트리에 있음).&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;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; source page)&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에서 source tag를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script src=&quot;my_data.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&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;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;46-0&quot;&gt;mydata.js&lt;/strong&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$xsl_text = &quot;&amp;lt;xsl:stylesheet version=&quot;1.0&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;(json의 경우 이 방법이 더 쉽습니다) 그러면 원하는 대로 사용할 수 있는 자바스크립트 글로벌 변수에 '데이터'가 있습니다.&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Java Spring을 사용하여 웹 서비스를 실행하려면 다음을 추가해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@ServletComponentScan&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;@SpringBootApplication&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;자동으로 생성된 YouAppApplication.java 파일(메인() 기능이 있는 파일)에서 다음과 같은 구현으로 클래스를 만듭니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-java prettyprint-override&quot;&gt;&lt;code&gt;@WebFilter(&quot;/*&quot;)
public class AddResponseHeaderFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // ...
    }

    @Override
    public void doFilter(ServletRequest servletRequest,
                         ServletResponse servletResponse,
                         FilterChain filterChain) throws IOException, ServletException {
        HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
        httpServletResponse.addHeader(&quot;Access-Control-Allow-Origin&quot;, &quot;null&quot;);

        httpServletResponse.addHeader(&quot;Access-Control-Allow-Credentials&quot;, &quot;true&quot;);
         filterChain.doFilter(servletRequest, servletResponse);

    }

    @Override
    public void destroy() {
        // ...
    }
}
&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;이 클래스가 Filter를 구현하고 다음을 가지면 클래스의 다른 이름을 선택할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@WebFilter&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;/*&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;br&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; @Louis Loudog Trottier다를 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;...withCredentials = true;&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;이것이 작동하도록 Ajax 요청을 생성할 때.&lt;/font&gt;&lt;/font&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;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/8456538/origin-null-is-not-allowed-by-access-control-allow-origin&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>JavaScript</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1473</guid>
      <comments>https://mycopycode.tistory.com/1473#entry1473comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:41:43 +0900</pubDate>
    </item>
    <item>
      <title>PowerShell로 특정 시간 이상 된 파일인지 확인하려면 어떻게 해야 합니까?</title>
      <link>https://mycopycode.tistory.com/1472</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;$fullPath의 파일이 &quot;5일 10시간 5분&quot;보다 오래되었는지 확인하려면 &lt;strong papago-id=&quot;1-1&quot;&gt;&lt;em papago-id=&quot;1-1-0&quot;&gt;어떻게&lt;/em&gt;&lt;/strong&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;strong papago-id=&quot;2-1&quot;&gt;OLD는 &lt;/strong&gt;5일 10시간 5분 이내에 생성 또는 수정된 경우를 &lt;strong papago-id=&quot;2-1&quot;&gt;의미&lt;/strong&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;pre&gt;&lt;code&gt;$lastWrite = (get-item $fullPath).LastWriteTime
$timespan = new-timespan -days 5 -hours 10 -minutes 5

if (((get-date) - $lastWrite) -gt $timespan) {
    # older
} else {
    # newer
}
&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;기간은 표준 연산자와 비교 가능합니다.&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;a href=&quot;https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/test-path&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6-0&quot;&gt;&lt;code papago-id=&quot;6-0-0&quot;&gt;Test-Path&lt;/code&gt;&lt;/a&gt; 이 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Test-Path $fullPath -OlderThan (Get-Date).AddDays(-5).AddHours(-10).AddMinutes(-5)
&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;이 파워셸 스크립트는 5일, 10시간, 5분보다 오래된 파일을 표시합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일로 저장할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.ps1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;extension(확장) 후)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# You may want to adjust these
$fullPath = &quot;c:\path\to\your\files&quot;
$numdays = 5
$numhours = 10
$nummins = 5

function ShowOldFiles($path, $days, $hours, $mins)
{
    $files = @(get-childitem $path -include *.* -recurse | where {($_.LastWriteTime -lt (Get-Date).AddDays(-$days).AddHours(-$hours).AddMinutes(-$mins)) -and ($_.psIsContainer -eq $false)})
    if ($files -ne $NULL)
    {
        for ($idx = 0; $idx -lt $files.Length; $idx++)
        {
            $file = $files[$idx]
            write-host (&quot;Old: &quot; + $file.Name) -Fore Red
        }
    }
}

ShowOldFiles $fullPath $numdays $numhours $nummins
&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;font class=&quot;papago-parent&quot;&gt;다음과 같은 의견을 포함할 수 있도록 여러 줄로 나누어집니다(법적 파워셸이 아닐 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$files = @(
    # gets all children at the path, recursing into sub-folders
    get-childitem $path -include *.* -recurse |

    where {

    # compares the mod date on the file with the current date,
    # subtracting your criteria (5 days, 10 hours, 5 min) 
    ($_.LastWriteTime -lt (Get-Date).AddDays(-$days).AddHours(-$hours).AddMinutes(-$mins))

    # only files (not folders)
    -and ($_.psIsContainer -eq $false)

    }
)
&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/16613656/how-can-i-check-if-a-file-is-older-than-a-certain-time-with-powershell&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>PowerShell</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1472</guid>
      <comments>https://mycopycode.tistory.com/1472#entry1472comment</comments>
      <pubDate>Sun, 29 Oct 2023 19:41:35 +0900</pubDate>
    </item>
    <item>
      <title>엑셀 시트가 TFS에서 생성되었다는 것을 잊게 하려면 어떻게 해야 합니까?</title>
      <link>https://mycopycode.tistory.com/1471</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;엑셀 시트가 TFS에서 생성되었다는 것을 잊게 하려면 어떻게 해야 합니까?&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;저는 TFS 작업 항목을 기반으로 일부 쿼리에서 결과를 열어 생성한 엑셀 시트를 가지고 있습니다.&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;개인적인 계획을 위해 이 엑셀을 사용하고 있는데 시트를 닫을 때마다 TFS에 변경사항을 게시할지 묻는 메시지가 나타납니다.&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;저는 그것이 TFS에서 파생된 것이라는 것을 완전히 잊기를 바랍니다. 왜냐하면 저는 언젠가 의도치 않게 제가 변경한 내용을 게시할 수도 있기 때문입니다.&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;img src=&quot;https://i.stack.imgur.com/5huOX.jpg&quot; alt=&quot;Excel Dialog&quot;&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;ol&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;/font&gt;&lt;/li&gt; 
 &lt;li 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;/li&gt; 
 &lt;li papago-id=&quot;9&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;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;&lt;strong papago-id=&quot;11-0&quot;&gt;면책 사항:&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 TFS 2012 &amp;amp; Office 2010에서만 사용해 보았습니다.&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;Dennis Habib이 제공하는 &lt;a href=&quot;http://blogs.msdn.com/b/buckh/archive/2006/07/19/remove-tfs-project-excel.aspx&quot; rel=&quot;nofollow&quot; papago-id=&quot;13-1&quot;&gt;Microsoft 블로그에서 이&lt;/a&gt;를 수행하는 방법을 설명하는 절차가 있습니다.&lt;/font&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;&quot;엑셀 닫기.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;HKLM\Software\Microsoft\Office\로 이동하여 TFS 추가 사용 안 함&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Excel\Addins\&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Tfc오피스 심.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;'LoadBehavior'를 '3'에서 '0'으로 연결하여 변경합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;.xls 파일을 엽니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 정의 문서 속성의 내용을 지웁니다(파일 -&amp;gt; 속성 -&amp;gt; 사용자 정의).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일을 저장하고 Excel을 종료합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;TFS 추가 기능을 다시 활성화합니다.&quot;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&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/7877040/how-can-i-make-an-excel-sheet-forget-that-it-was-generated-from-tfs&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>Excel</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1471</guid>
      <comments>https://mycopycode.tistory.com/1471#entry1471comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:20:23 +0900</pubDate>
    </item>
    <item>
      <title>쿼리 내에서 DML 작업을 수행할 수 없습니다.</title>
      <link>https://mycopycode.tistory.com/1470</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리 내에서 DML 작업을 수행할 수 없습니다.&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;strong papago-id=&quot;1-1&quot;&gt;오라클&lt;/strong&gt; 기능 &lt;strong papago-id=&quot;1-1&quot;&gt;내부&lt;/strong&gt;, 특히 &lt;strong papago-id=&quot;1-3&quot;&gt;커서 루프&lt;/strong&gt; 내부에서 DML 연산을 추가할 수 없는 이유를 납득할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 오라클이 커서 루프 내에서 DML 연산을 지원하지 않는다고 생각합니다.&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;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류 메시지 : &lt;strong papago-id=&quot;3-1&quot;&gt;쿼리 내에서 DML 작업을 수행&lt;/strong&gt;할 수 &lt;strong papago-id=&quot;3-1&quot;&gt;없습니다&lt;/strong&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;pre&gt;&lt;code&gt;CREATE OR REPLACE FUNCTION TEST_FUNC(U_ID IN VARCHAR2)
RETURN VARCHAR2
IS
  V_MESSAGE VARCHAR2(30);
  CURSOR C_PERSON (V_ID VARCHAR2) IS
         SELECT NAME_UPPER
         FROM TBL_PERSON
         WHERE NAME_UPPER = V_ID;                  
BEGIN
   FOR C_PERSON_CURSOR IN C_PERSON(U_ID) 
   LOOP
       INSERT INTO TMP_PERSON(NAME) VALUES (C_PERSON_CURSOR.NAME_UPPER);
   END LOOP;

   RETURN V_MESSAGE;

EXCEPTION
WHEN OTHERS THEN
    raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
END;
&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;PL/SQL 함수 안에서 DML을 사용할 수 &lt;strong papago-id=&quot;5-1&quot;&gt;있습니다&lt;/strong&gt;. 문제 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 함수는 SQL이 아닌 PL/SQL에서만 호출할 수 있습니다. 즉, 다음과 같이 호출할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;declare
   l_message varchar2(30);
begin
   l_message := test_func('123');
end;
&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;select test_func(empno) from emp;
&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;/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;Oracle PL/SQL 함수 내에서 DML 작업을 수행할 수 있으며 &lt;strong papago-id=&quot;9-1&quot;&gt;일반적&lt;/strong&gt;으로 좋은 &lt;strong papago-id=&quot;9-1&quot;&gt;방법은 아니지만 SQL&lt;/strong&gt;에서 DML &lt;strong papago-id=&quot;9-1&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;AUTONOMOUS_TRANSACTION&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;a href=&quot;http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/autonotransaction_pragma.htm&quot; papago-id=&quot;10-1&quot; rel=&quot;noreferrer&quot;&gt;ANAUNOUS_TRANSATION Pragma&lt;/a&gt; 참조).&lt;/font&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;SQL에서 호출되는 이러한 종류의 함수는 &lt;strong papago-id=&quot;11-1&quot;&gt;쿼리 성능을 크게 저하&lt;/strong&gt;시킬 수 있음을 알아야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;11-3&quot;&gt;감사용&lt;/strong&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;pre papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블 TBL_PERSORE 생성(NAME_UPER VARCHAR2(30));&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블 TMP_Person 생성(NAME VARCHAR2(30));&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;TBL_Person(NAME_UPER) 값에 삽입('KING');&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수 테스트 생성 또는 교체_FUNC(VARCHAR2의 U_ID)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;반환 VARCHAR2&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;IS&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;프라그마 자율_Transaction; -- SQL에서 호출 필요&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;V_MESSAGE VARCHAR2(2000);&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;커서 C_Person(V_ID VARCHAR2) IS&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SELECT NAME_UPER&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;FROM TBL_Person&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;WHERE NAME_UPER =&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;V_ID;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;시작한다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;FORC_Person_CURSER Inc_Person(U_ID)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;고리&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;TMP_Person(NAME) 값에 삽입(C_Person_Cursor)합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NAME_UPER);&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;V_MESSAGE := SQL%ROWCOUNT&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;|| 'TMP_Person 테이블에 성공적으로 삽입된 인물 기록';&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;COMIT; -- 현재 자율 트랜잭션을 커밋해야 합니다.&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;리턴 V_MESSAGE;&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;raise_application_error(-20001, '오류가 발생했습니다 - '|SQLCODE|' -ERROR- '|SQLERRM);&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;프롬프트 TEST_FUNC 기능을 호출하고 TMP_Person 테이블에 새 레코드를 삽입합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;듀얼에서 TEST_FUNC('KING')를 선택합니다;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PROMCT TMP_Person 테이블 내용&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;A30의 색상 이름&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택 * TMP_Person;&lt;/font&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 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;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;1행 생성.&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;TEST_FUNC 기능 호출 및 TMP_Person 테이블에 새 레코드 삽입&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;TEST_FUNC('킹')&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;------------------------------------------------------------&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 개인 레코드를 TMP_Person 테이블에 성공적으로 삽입함&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;TMP_Person 테이블의 내용&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;/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/4095060/cannot-perform-dml-operation-inside-a-query&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>oracle</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1470</guid>
      <comments>https://mycopycode.tistory.com/1470#entry1470comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:20:17 +0900</pubDate>
    </item>
    <item>
      <title>아이폰 애플리케이션에서 비밀번호 필드의 텍스트를 어떻게 모호하게 합니까?</title>
      <link>https://mycopycode.tistory.com/1469</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;1&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;/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;/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;UIControlEventEditingDidEnd&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;UITextField&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;*&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;*&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 papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 질문을 잘 이해하지는 못하지만, 아이폰의 모든 비밀번호 필드에서 할 수 있는 문자에 대한 점이 표시되는 UIT 텍스트 필드를 원하는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 위해 해당 UITextField(UITextField는 UITextInputTraits 프로토콜을 준수하므로 이러한 속성을 갖음)의 보안 TextEntry 속성을 YES로 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;textfield.secureTextEntry = YES;
&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;Interface Builder에서 설정할 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;텍스트 필드를 선택하고 검사자에서 &quot;보안&quot; 설정을 확인합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/wIQCY.png&quot; alt=&quot;secure setting in Interface Builder&quot;&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;Boolean 유형의 키 경로 secureTextEntry를 추가하고 Identity Inspector의 User defined 런타임 특성에서 선택할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/O5NYI.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/O5NYI.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&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;최신 버전의 Xcode(버전 9)를 사용하는 경우 입력을 암호로 설정할 UITextField를 클릭한 다음 Attributes inspector를 클릭하고 &quot;Secure Text Entry&quot;를 확인합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/1Zba9.png&quot; alt=&quot;&quot;&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;스위프트 3.3&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;textfield.isSecureTextEntry = true
&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/1130953/how-do-you-obscure-text-in-a-password-field-in-an-iphone-application&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>iphone</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1469</guid>
      <comments>https://mycopycode.tistory.com/1469#entry1469comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:20:10 +0900</pubDate>
    </item>
    <item>
      <title>mysql 설명서를 읽는 것이 mariadb 개념을 배우는 좋은 방법입니까?</title>
      <link>https://mycopycode.tistory.com/1468</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mysql 설명서를 읽는 것이 mariadb 개념을 배우는 좋은 방법입니까?&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;나는 mariadb를 배우고 싶습니다.&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;Mysql은 더 좋은 문서를 가지고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 mariadb 개념을 배우기 위해 공부할 수 있을지 궁금했습니다.&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;MariaDB는 실제로 (어느 시점에서) MySQL을 기반으로 하고 있기 때문에 개념을 배우는 것이 합리적인 방법이라고 생각합니다.&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;어쨌든, https://mariadb.com/kb/en/mariadb/mariadb-vs-mysql-features/ 은 좋은 참고 자료이기도 합니다.&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;URL : https://stackoverflow.com/questions/35502857/is-reading-mysql-documentation-a-good-way-to-learn-mariadb-concepts&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>mariadb</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1468</guid>
      <comments>https://mycopycode.tistory.com/1468#entry1468comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:20:02 +0900</pubDate>
    </item>
    <item>
      <title>다중 스타일링 디브로 php를 루프하는 방법</title>
      <link>https://mycopycode.tistory.com/1467</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다중 스타일링 디브로 php를 루프하는 방법&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;저는 WP 테마를 작업하고 있는데 여기서 설명할 수 없는 특정 작업을 우연히 수행하게 되었습니다. 하지만 여기서 스크린샷을 보여주면 문제를 이해할 수 있을 것입니다.&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;div&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;a href=&quot;https://i.stack.imgur.com/NM6cg.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/NM6cg.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&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;그것은 HTML로부터의 실제 디자인이고, 구체적으로 a 내부의 처음 2개의 게시물입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;div&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;div&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&gt;&lt;a href=&quot;https://i.stack.imgur.com/Let3f.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Let3f.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&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;문제는 동일한 구조와 디자인을 유지함으로써 어떻게 그것을 동적으로 루프할 것인가 하는 것입니다.&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;&amp;lt;div class=&quot;row justify-content-center&quot;&amp;gt;
    &amp;lt;div class=&quot;col-xl-3 col-lg-6 col-md-6&quot;&amp;gt;
        &amp;lt;?php
        while($projects_array-&amp;gt;have_posts()):
            $projects_array-&amp;gt;the_post();

            $idd = get_the_ID();
            $terms = wp_get_post_terms(get_the_ID(), 'project_cat');

            $output = array();
            if ($terms) {
                $i = 1;
                foreach ($terms as $term) {
                    if($i == 1):
                        $output[] = '&amp;lt;span class=&quot;tag-'.$i.'&quot;&amp;gt;'.$term-&amp;gt;name.'&amp;lt;/span&amp;gt;';
                        $id[] = $term-&amp;gt;term_id ;
                    endif;
                    $i++;
                }
            }

            if ( class_exists('ACF') &amp;amp;&amp;amp; get_field('choose_link_type') == 1 ) {
                $post_link = get_the_permalink();
            } else {
                $post_link = get_field('external_link');
            }
            ?&amp;gt;
                &amp;lt;div class=&quot;single-portfolio-box&quot;&amp;gt;
                    &amp;lt;?php if(has_post_thumbnail()): ?&amp;gt;
                        &amp;lt;img src=&quot;&amp;lt;?php the_post_thumbnail_url(); ?&amp;gt;&quot; alt=&quot;&amp;lt;?php the_post_thumbnail_caption(); ?&amp;gt;&quot;&amp;gt;
                    &amp;lt;?php endif; ?&amp;gt;
                    &amp;lt;div class=&quot;content&quot;&amp;gt;
                        &amp;lt;h3&amp;gt;&amp;lt;a href=&quot;&amp;lt;?php echo esc_url( $post_link ); ?&amp;gt;&quot;&amp;gt;&amp;lt;?php the_title(); ?&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/h3&amp;gt;
                        &amp;lt;?php echo join( ' ', $output ); ?&amp;gt;
                    &amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
        &amp;lt;?php endwhile; ?&amp;gt;
        &amp;lt;?php wp_reset_query(); ?&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/div&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;/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;pre&gt;&lt;code&gt;$index = 1;
while ($projects_array-&amp;gt;have_posts()) {
    $modulo3 = $index % 3;
    //Initialize your values
    if (($modulo3 === 1) || ($modulo3 === 0)) {
        //Display the wrapper div's start
    }
    //Display the actual post content
    if (($modulo3 % 3 === 2) || ($modulo3 === 0)) {
        //Display the wrapper div's end
    }
    $index++;
}
if ($index % 3 === 2) {
    //Display the wrapper div's end
}
&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;font class=&quot;papago-parent&quot;&gt;3회 반복의 각 주기는 다음과 같이 구성됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;13-0&quot;&gt;1단계&lt;/strong&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;&lt;strong papago-id=&quot;14-0&quot;&gt;2단계&lt;/strong&gt; : 게시물과 포장지 끝을 표시&lt;/font&gt;&lt;/li&gt; 
 &lt;li 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-0&quot;&gt;3단계&lt;/strong&gt;: 포장지의 시작, 게시물, 포장지의 끝을 표시합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&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;반복 횟수가 3의 배수일 경우 각 단계에서 두 개의 게시물이 포장지로 포장되고 세 번째 게시물이 포장지로 포장됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 게시물의 수가 세 개의 배수가 아닌 경우 마지막 세 개 그룹에서 처리해야 하는 특수한 경우가 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;표시할 게시물의 수가 3n + 2개(n은 자연수)인 경우 마지막 그룹은 두 개의 게시물로 구성되며, 이 게시물은 사이클 내부의 포장지로 잘 포장됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 표시할 게시물의 수가 3n + 1(n은 자연수)이면 마지막 단계에서 포장지를 열고 게시물을 표시했습니다.&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&gt;&lt;code&gt;$post_index&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;ul&gt; 
 &lt;li papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오픈 디바 1, 3, 4, 6, 7, 9...&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;2, 3, 5, 6, 8, 9에 근접한 디바...&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&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;$post_index % 3&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;ul&gt; 
 &lt;li&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; div  open div :&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$post_index % 3 == 1 || $post_index % 3 == 0&lt;/code&gt;&lt;/li&gt; 
 &lt;li&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; close div :&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$post_index % 3 == 2 || $post_index % 3 == 0&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&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;$is_open&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 그리고 게시물 길이가 가까운 조건과 일치하기에 충분하지 않기 때문에 닫히지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;div class=&quot;row justify-content-center&quot;&amp;gt;

        &amp;lt;?php
        $post_index = 0;
        $is_open = false;
        while($projects_array-&amp;gt;have_posts()):

            $post_index++;
            // open div to wrap posts by grouped 1, 3, 4, 6, 7, 9...
            if ($post_index % 3 == 1 || $post_index % 3 == 0) {
                echo '&amp;lt;div class=&quot;col-xl-3 col-lg-6 col-md-6&quot;&amp;gt;';
                $is_open = true;
            }

            $projects_array-&amp;gt;the_post();

            $idd = get_the_ID();
            $terms = wp_get_post_terms(get_the_ID(), 'project_cat');

            $output = array();
            if ($terms) {
                $i = 1;
                foreach ($terms as $term) {
                    if($i == 1):
                        $output[] = '&amp;lt;span class=&quot;tag-'.$i.'&quot;&amp;gt;'.$term-&amp;gt;name.'&amp;lt;/span&amp;gt;';
                        $id[] = $term-&amp;gt;term_id ;
                    endif;
                    $i++;
                }
            }

            if ( class_exists('ACF') &amp;amp;&amp;amp; get_field('choose_link_type') == 1 ) {
                $post_link = get_the_permalink();
            } else {
                $post_link = get_field('external_link');
            }
            ?&amp;gt;
            &amp;lt;div class=&quot;single-portfolio-box&quot;&amp;gt;
                &amp;lt;?php if(has_post_thumbnail()): ?&amp;gt;
                    &amp;lt;img src=&quot;&amp;lt;?php the_post_thumbnail_url(); ?&amp;gt;&quot; alt=&quot;&amp;lt;?php the_post_thumbnail_caption(); ?&amp;gt;&quot;&amp;gt;
                &amp;lt;?php endif; ?&amp;gt;
                &amp;lt;div class=&quot;content&quot;&amp;gt;
                    &amp;lt;h3&amp;gt;&amp;lt;a href=&quot;&amp;lt;?php echo esc_url( $post_link ); ?&amp;gt;&quot;&amp;gt;&amp;lt;?php the_title(); ?&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/h3&amp;gt;
                    &amp;lt;?php echo join( ' ', $output ); ?&amp;gt;
                &amp;lt;/div&amp;gt;
            &amp;lt;/div&amp;gt;

            &amp;lt;?php
                // close wrapped div if post index is 2, 3, 5, 6, 8, 9...
                if ($post_index % 3 == 2 || $post_index % 3 == 0) {
                    $is_open = false;
                    echo '&amp;lt;/div&amp;gt;';
                }
            ?&amp;gt;

        &amp;lt;?php endwhile; ?&amp;gt;
        &amp;lt;?php wp_reset_query(); ?&amp;gt;

    &amp;lt;?php
        // close div if it's closed (happens when post count is 1, 4, 7,...)
        if ($is_open) {
            echo '&amp;lt;/div&amp;gt;';
        }
    ?&amp;gt;

&amp;lt;/div&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;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://i.stack.imgur.com/SSEMv.png&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;27-1&quot;&gt;데모 HTML 구조&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;row justify-content-center&quot;&amp;gt;
&amp;lt;div class=&quot;col-xl-3 col-lg-6 col-md-6&quot;&amp;gt;
    &amp;lt;?php $j = 0;
    while($projects_array-&amp;gt;have_posts()):
        $projects_array-&amp;gt;the_post();

        $idd = get_the_ID();
        $terms = wp_get_post_terms(get_the_ID(), 'project_cat');

        $output = array();
        if ($terms) {
            $i = 1;
            foreach ($terms as $term) {
                if($i == 1):
                    $output[] = '&amp;lt;span class=&quot;tag-'.$i.'&quot;&amp;gt;'.$term-&amp;gt;name.'&amp;lt;/span&amp;gt;';
                    $id[] = $term-&amp;gt;term_id ;
                endif;
                $i++;
            }
        }

        if ( class_exists('ACF') &amp;amp;&amp;amp; get_field('choose_link_type') == 1 ) {
            $post_link = get_the_permalink();
        } else {
            $post_link = get_field('external_link');
        }
        ?&amp;gt;
        &amp;lt;?php if(in_array($j,['2','3','5'])) echo '&amp;lt;/div&amp;gt;&amp;lt;div class=&quot;col-xl-3 col-lg-6 col-md-6&quot;&amp;gt;';?&amp;gt;
            &amp;lt;div class=&quot;single-portfolio-box&quot;&amp;gt;
                &amp;lt;?php if(has_post_thumbnail()): ?&amp;gt;
                    &amp;lt;img src=&quot;&amp;lt;?php the_post_thumbnail_url(); ?&amp;gt;&quot; alt=&quot;&amp;lt;?php the_post_thumbnail_caption(); ?&amp;gt;&quot;&amp;gt;
                &amp;lt;?php endif; ?&amp;gt;
                &amp;lt;div class=&quot;content&quot;&amp;gt;
                    &amp;lt;h3&amp;gt;&amp;lt;a href=&quot;&amp;lt;?php echo esc_url( $post_link ); ?&amp;gt;&quot;&amp;gt;&amp;lt;?php the_title(); ?&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/h3&amp;gt;
                    &amp;lt;?php echo join( ' ', $output ); ?&amp;gt;
                &amp;lt;/div&amp;gt;
            &amp;lt;/div&amp;gt;
    &amp;lt;?php $j++; endwhile; ?&amp;gt;
    &amp;lt;?php wp_reset_query(); ?&amp;gt;
&amp;lt;/div&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;font class=&quot;papago-parent&quot;&gt;따라다니듯이&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;          &amp;lt;?php
            $posts = array();
            $i = 0;
            while($projects_array-&amp;gt;have_posts()):
                $projects_array-&amp;gt;the_post();
    
                $idd = get_the_ID();
                $terms = wp_get_post_terms(get_the_ID(), 'project_cat');
    
                $output = array();
                if ($terms) {
                    $i = 1;
                    foreach ($terms as $term) {
                        if($i == 1):
                            $output[] = '&amp;lt;span class=&quot;tag-'.$i.'&quot;&amp;gt;'.$term-&amp;gt;name.'&amp;lt;/span&amp;gt;';
                            $id[] = $term-&amp;gt;term_id ;
                        endif;
                        $i++;
                    }
                }
    
                if ( class_exists('ACF') &amp;amp;&amp;amp; get_field('choose_link_type') == 1 ) {
                    $post_link = get_the_permalink();
                } else {
                    $post_link = get_field('external_link');
                }
    
                        if(has_post_thumbnail()) {
                                $posts[$i][&quot;img&quot;] = '&amp;lt;img src=&quot;'.get_the_post_thumbnail_url().'&quot; alt=&quot;'.get_the_post_thumbnail_caption.'&quot;&amp;gt;';
                            }else{
                                $posts[$i][&quot;img&quot;] = &quot;&quot;;
                            }
                            $posts[$i][&quot;content&quot;] = '&amp;lt;h3&amp;gt;&amp;lt;a href=&quot;'.esc_url( $post_link ).'&quot;&amp;gt;'.get_the_title().'&amp;lt;/a&amp;gt;&amp;lt;/h3&amp;gt;';
                            $posts[$i][&quot;output&quot;] = join( ' ', $output );

endwhile;
wp_reset_query();
                        
               ?&amp;gt;
                        

            
    &amp;lt;div class=&quot;row justify-content-center&quot;&amp;gt;
        &amp;lt;div class=&quot;col-xl-3 col-lg-6 col-md-6&quot;&amp;gt;
                    &amp;lt;div class=&quot;single-portfolio-box&quot;&amp;gt;
                        &amp;lt;?php echo $posts[0][&quot;img&quot;]; ?&amp;gt;
                        &amp;lt;div class=&quot;content&quot;&amp;gt;
                                    &amp;lt;?php 
                                        echo $posts[0][&quot;content&quot;]; 
                                        echo $posts[0][&quot;output&quot;]; 
                                    
                                    ?&amp;gt;
                        &amp;lt;/div&amp;gt;
                    &amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;single-portfolio-box&quot;&amp;gt;
                        &amp;lt;?php echo $posts[1][&quot;img&quot;]; ?&amp;gt;
                        &amp;lt;div class=&quot;content&quot;&amp;gt;
                                    &amp;lt;?php 
                                        echo $posts[1][&quot;content&quot;]; 
                                        echo $posts[1][&quot;output&quot;]; 
                                    
                                    ?&amp;gt;
                        &amp;lt;/div&amp;gt;
                    &amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div class=&quot;col-xl-3 col-lg-6 col-md-6&quot;&amp;gt;
                    &amp;lt;div class=&quot;single-portfolio-box&quot;&amp;gt;
                        &amp;lt;?php echo $posts[3][&quot;img&quot;]; ?&amp;gt;
                        &amp;lt;div class=&quot;content&quot;&amp;gt;
                                    &amp;lt;?php 
                                        echo $posts[3][&quot;content&quot;]; 
                                        echo $posts[3][&quot;output&quot;]; 
                                    
                                    ?&amp;gt;
                        &amp;lt;/div&amp;gt;
                    &amp;lt;/div&amp;gt;
    
        &amp;lt;/div&amp;gt;
        &amp;lt;div class=&quot;col-xl-3 col-lg-6 col-md-6&quot;&amp;gt;
                    &amp;lt;div class=&quot;single-portfolio-box&quot;&amp;gt;
                        &amp;lt;?php echo $posts[4][&quot;img&quot;]; ?&amp;gt;
                        &amp;lt;div class=&quot;content&quot;&amp;gt;
                                    &amp;lt;?php 
                                        echo $posts[4][&quot;content&quot;]; 
                                        echo $posts[4][&quot;output&quot;]; 
                                    
                                    ?&amp;gt;
                        &amp;lt;/div&amp;gt;
                    &amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;single-portfolio-box&quot;&amp;gt;
                        &amp;lt;?php echo $posts[5][&quot;img&quot;]; ?&amp;gt;
                        &amp;lt;div class=&quot;content&quot;&amp;gt;
                                    &amp;lt;?php 
                                        echo $posts[5][&quot;content&quot;]; 
                                        echo $posts[5][&quot;output&quot;]; 
                                    
                                    ?&amp;gt;
                        &amp;lt;/div&amp;gt;
                    &amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div class=&quot;col-xl-3 col-lg-6 col-md-6&quot;&amp;gt;
                    &amp;lt;div class=&quot;single-portfolio-box&quot;&amp;gt;
                        &amp;lt;?php echo $posts[6][&quot;img&quot;]; ?&amp;gt;
                        &amp;lt;div class=&quot;content&quot;&amp;gt;
                                    &amp;lt;?php 
                                        echo $posts[6][&quot;content&quot;]; 
                                        echo $posts[6][&quot;output&quot;]; 
                                    
                                    ?&amp;gt;
                        &amp;lt;/div&amp;gt;
                    &amp;lt;/div&amp;gt;
    
        &amp;lt;/div&amp;gt;
    
    &amp;lt;/div&amp;gt;
&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/69175621/how-to-loop-php-with-multiple-styling-div&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>Wordpress</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1467</guid>
      <comments>https://mycopycode.tistory.com/1467#entry1467comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:19:56 +0900</pubDate>
    </item>
    <item>
      <title>angularjs [ng:areq] 인수 'fn'이 함수가 아닙니다. 문자열이 있습니다.</title>
      <link>https://mycopycode.tistory.com/1466</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;angularjs [ng:areq] 인수 'fn'이 함수가 아닙니다. 문자열이 있습니다.&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;저는 angular js가 처음입니다.&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;[ng:areq] 'fn' 인수가 함수가 아닙니다. 문자열이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var app = angular.module('demo',[]);


app.config('$routeProvider',function($routeProvider){

    $routeProvider.when('/add',{
        templateUrl:'demo/add.html',
        controller:'addcontroller'
    }).
    when('/order',{
        templateUrl:'demo/order.html',
        controller:'ordercontroller'
    });

});

app.controller('addcontroller',function($scope){
    $scope.message=&quot;order&quot;;
});
app.controller('ordercontroller',function($scope){
    $scope.message=&quot;order&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;app.config(function($routeProvider){
  // routeProvider config
});
&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;app.config(['$routeProvider', function($routeProvider){
  // routeProvider config, allows minification
}]);
&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;font class=&quot;papago-parent&quot;&gt;Angular에서 자세히 보실 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS docs https://docs.angularjs.org/tutorial/step_05 이 연습은 앱 전체에서 제대로 작동하기 위해 수행되어야 합니다.&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;$stateProvider.state('mystate', {
    url: &quot;/myurl&quot;,
    templateUrl: &quot;mytemplate.html&quot;,
    controller: &quot;MyController&quot;,
    resolve: {
        authenticatedUser: securityAuthorizationProvider.requireAuthenticatedUser
    }
});
&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;securityAuthorizationProvider.requireAuthenticatedUser&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;이것이 오래된 게시물이라는 것을 알고 있지만, 이 정확한 오류로 내 코드에 문제가 있는 것에 기여할 것이라고 생각했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 식으로 컨트롤러에 서비스를 주입했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;theApp.directive('theDirective', 'myService', ['$http', function ($http, myService) {}]);
&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;theApp.directive('theDirective', ['$http', 'myService', function ($http, myService) {}]);
&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-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;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;pre&gt;&lt;code&gt;//Error in this
  angular
    .module('mymodule').factory('myFactory', 'thisconstant', function (thisconstant) {

});
&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;//correct code
  angular
    .module('mymodule').factory('myFactory', ['thisconstant', function (thisconstant) {

}]);
&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;pre&gt;&lt;code&gt;angular
.app('myApp')
.service('MyService', function (){
  // do something
return MyService;
})
&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;export default class MyService { ... }

angular
    .app('myApp')
    .service('MyService', MyService);
&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;export default class MyService {
  constructor(){
  // doing something
  }

  get() {
  return MyService;
  }
}
&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;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;이로 인해 다음과 같은 오류가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;angular.module(&quot;app&quot;).factory(&quot;myDataService&quot;, ['$resource', myDataService]);
var myDataService = function($resource) {
    return $resource('/url');
}
&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;var myDataService = function($resource) {
    return $resource('/url');
}
angular.module(&quot;app&quot;).factory(&quot;myDataService&quot;, ['$resource', myDataService]);
&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;angular.module(&quot;app&quot;).factory(&quot;myDataService&quot;, ['$resource', myDataService]);
function myDataService($resource) {
    return $resource('/url');
}
&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;a href=&quot;https://stackoverflow.com/a/114593/3154611&quot; papago-id=&quot;22-1&quot;&gt;여기&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;첫 번째 줄에서는 이렇게 써야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var app = angular.module('demo', ['ngRoute']);
&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;$routeProvider.when('/add').then({
        templateUrl:'demo/add.html',
        controller:'addcontroller'
    });
&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;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/23602181/angularjs-ngareq-argument-fn-is-not-a-function-got-string&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>angularJs</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1466</guid>
      <comments>https://mycopycode.tistory.com/1466#entry1466comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:19:44 +0900</pubDate>
    </item>
    <item>
      <title>기존 테이블에 부울 열 추가</title>
      <link>https://mycopycode.tistory.com/1465</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;alter table chatuser add activerecord bool;
alter table chatuser add activerecord boolean;
&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;여기서 active record는 내 부울 열입니다.&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;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;pre&gt;&lt;code&gt;alter table chatuser  add column activerecord bool;
&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;COLUMN&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;ALTER TABLE ChatUser ADD COLUMN ActiveRecord TinyInt(1)
&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;ALTER TABLE my_table ADD COLUMN new_field TinyInt(1) DEFAULT 0;
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;ALTER TABLE chatuser ADD activerecord BOOLEAN
&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;당신의 두번째 질문은 (적어도) mysql에서 완벽하게 괜찮습니다.&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;select * from chatuser;
&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;결과를 볼 수 없는 경우, 쿼리가 아닌 mysql 서버 또는 다른 것을 확인하고 위의 경우 쿼리가 작동하며, 그렇지 않은 경우 쿼리를 선택하십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;activerecord&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;Microsoft SQL에서 다음이 올바르지 않음을 발견했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ALTER TABLE meTable ADD COLUMN someBoolCol TinyInt;
&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;&quot;column&quot; 키워드를 생략하면 다음과 같이 작동했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ALTER TABLE meTable ADD someBoolCol TinyInt;
&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;URL : https://stackoverflow.com/questions/12033103/adding-a-boolean-column-into-an-existing-table&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>MySQL</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1465</guid>
      <comments>https://mycopycode.tistory.com/1465#entry1465comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:19:36 +0900</pubDate>
    </item>
    <item>
      <title>Angularjs 서비스 콜백을 통해 컨트롤러 범위 업데이트</title>
      <link>https://mycopycode.tistory.com/1464</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angularjs 서비스 콜백을 통해 컨트롤러 범위 업데이트&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;mbAppModule.service('aService', function ($http) {
    this.data={&quot;somedata&quot;:0};
    var m3rdPartLib=&quot;init&quot;;  // init    
    m3rdPartLib.on('timeupdate', function() {
        this.data.somedata=1;
    });
}
&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;mbAppModule.controller({
    MController: function ($scope, $http, mService) {
        $scope.mService= mService;    
    });
});
&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;html 페이지&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;{{mService.data.somedata}}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1 papago-id=&quot;4&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;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;m3rdPartLib.on()은 서비스에서 사용하고 있는 타사 라이브러리 콜백 기능입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트 중이라 UI에 보여주고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;콜백 시 값이 변경되지만 UI에는 반영되지 않습니다.&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;일부 문서를 읽고 $rootScope을 찾았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;$apply를 호출할 수는 있지만 서비스에서 $scope/$rootScope에 대한 참조가 없습니다.&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;$rootScope&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;mbAppModule.service('aService', [&quot;$http&quot;, &quot;$rootScope&quot;, function ($http, $rootScope) {
    this.data = {
        &quot;somedata&quot;: 0
    };
    var m3rdPartLib = &quot;init&quot;; // init    
    m3rdPartLib.on('timeupdate', function () {
        $rootScope.$apply(function(){
            this.data.somedata = 1;
        });
    });
}]);
&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;pre&gt;&lt;code&gt;//scope will be set to current scope of a controller
//which has an ng-view containing this element    
var scope = angular.element('#input-element').scope();
//wrap changes in an apply call to make sure view and model are consistent
scope.$apply(function() {
    scope.object.data = value;
});
&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;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/13743058/how-to-access-the-angular-scope-variable-in-browsers-console&quot; papago-id=&quot;11-1&quot;&gt;AngularJS를 사용하여 브라우저 콘솔의 $scope 변수에 액세스하려면 어떻게 해야 합니까?&lt;/a&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;$scope.$watch&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;a href=&quot;http://jsfiddle.net/mchrobok/JE78Q/4/&quot; rel=&quot;nofollow&quot; papago-id=&quot;3-1&quot;&gt;jsfiddle&lt;/a&gt;을 보세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;라이브러리가 없어서 시뮬레이션만 합니다. 5초 후 값이 0에서 1로 바뀝니다.&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;서비스에서 스코프를 사용하는 경우 서비스가 컨트롤러로 데이터만 검색해야 하므로 SRP를 위반하고 있음을 알 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 제안은 당신이 이런 것을 할 수 있다는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mbAppModule.service('aService', [&quot;$http&quot;, &quot;$rootScope&quot;, function ($http, $rootScope) {
  this.data = {
    &quot;somedata&quot;: 0
  };
  var m3rdPartLib = &quot;init&quot;; // init    
  this.GetPartLib = function () { 
    return m3rdPartLib;
  }
}]);

mbAppModule.controller({
  MController: function ($scope, $http, mService) {
  this.GetPartLib = function (){ 
    mService.on('timeupdate', function() {
     this.data.somedata=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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/18931689/angularjs-service-callback-to-update-scope-of-controller&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>angularJs</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1464</guid>
      <comments>https://mycopycode.tistory.com/1464#entry1464comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:19:29 +0900</pubDate>
    </item>
    <item>
      <title>제한이 있는 MySql 삭제 문</title>
      <link>https://mycopycode.tistory.com/1463</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제한이 있는 MySql 삭제 문&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;DELETE FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50;
&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;50에 오류가 발생합니다.&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;SQL 구문에 오류가 있습니다. MySQL 서버 버전에 해당하는 설명서에서 1행에서 '50'에 가까운 구문을 사용할 수 있는지 확인하십시오.&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;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;DELETE&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;LIMIT&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 class=&quot;lang-sql prettyprint-override&quot;&gt;&lt;code&gt;DELETE FROM `chat_messages` 
WHERE `id` IN (
    SELECT `id` FROM (
        SELECT `id` FROM `chat_messages`
        ORDER BY `timestamp` DESC
        LIMIT 20, 50
    ) AS `x`
)
&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;id&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;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;: 현재 수정된 테이블에서 선택할 수 없으므로 mysql을 속이려면 이중 네스팅을 구현해야 합니다(Martin Smith 덕분에).&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;URL : https://stackoverflow.com/questions/7142097/mysql-delete-statement-with-limit&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>MySQL</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1463</guid>
      <comments>https://mycopycode.tistory.com/1463#entry1463comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:19:22 +0900</pubDate>
    </item>
    <item>
      <title>Powershell - https 바인딩에 SSL 인증서 설정</title>
      <link>https://mycopycode.tistory.com/1462</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Powershell - https 바인딩에 SSL 인증서 설정&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을 사용하여 자체 서명/로컬 인증서에 대한 IIS 사이트의 SSL 인증서를 설정하려고 합니다.&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;$newCert = 
       New-SelfSignedCertificate 
       -DnsName www.mywebsite.ru 
       -CertStoreLocation cert:\LocalMachine\My
&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;그런 다음 SSL 바인딩을 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;get-item 
      cert:\LocalMachine\MY\$newCert.Thumbprint | 
      new-item -path IIS:\SslBindings\0.0.0.0!443
&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://www.iis.net/learn/manage/powershell/powershell-snap-in-configuring-ssl-with-the-iis-powershell-snap-in&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://stackoverflow.com/questions/2628970/powershell-iis7-snap-in-assign-ssl-certificate-to-https-binding&quot; papago-id=&quot;5-1&quot;&gt;Powershell&lt;/a&gt; IIS7 &lt;a href=&quot;https://stackoverflow.com/questions/2628970/powershell-iis7-snap-in-assign-ssl-certificate-to-https-binding&quot; papago-id=&quot;5-1&quot;&gt;스냅인 SSL 인증서를 https 바인딩에 할당&lt;/a&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;get-item 
      cert:\LocalMachine\MY\$newCert.Thumbprint | 
      new-item -path IIS:\SslBindings\*!443
&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;사이트 바인딩 편집 대화상자에서 SSL 인증서 설정이 보이지 않습니다.&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;strong papago-id=&quot;9-1&quot;&gt;특정&lt;/strong&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;a href=&quot;http://go.microsoft.com/fwlink/?LinkID=268828&quot; papago-id=&quot;10-1&quot; rel=&quot;noreferrer&quot;&gt;Get-WebBinding&lt;/a&gt; cmdlet을 사용하여 사이트의 바인딩 정보를 검색하고 다음을 사용하여 SSL 인증서를 설정할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;AddSslCertificate&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;$siteName = 'mywebsite'
$dnsName = 'www.mywebsite.ru'

# create the ssl certificate
$newCert = New-SelfSignedCertificate -DnsName $dnsName -CertStoreLocation cert:\LocalMachine\My

# get the web binding of the site
$binding = Get-WebBinding -Name $siteName -Protocol &quot;https&quot;

# set the ssl certificate
$binding.AddSslCertificate($newCert.GetCertHashString(), &quot;my&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;답변을 사용할 때 &quot;척 D&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;IIS 웹 사이트 바인딩에 추가하려면 SSL 인증서가 인증서 저장소에 있어야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작업은 다음 명령을 사용하여 powershell에서 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Import-PfxCertificate -FilePath &quot;C:\path to certificate file\certificate.pfx&quot; -CertStoreLocation &quot;Cert:\LocalMachine\My&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;AddSslCertificate 메서드는 모든 곳에서 사용할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Netsh를 사용하여 다른 솔루션을 찾았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$iisCert = Get-ChildItem -Path &quot;Cert:\LocalMachine\MY&quot; `
| Where-Object { $_.FriendlyName -eq &quot;IIS Express Development Certificate&quot; } `
| Select-Object -First 1

$applicationId = [Guid]::NewGuid().ToString(&quot;B&quot;) 

netsh http add sslcert ipport=0.0.0.0:443 certhash=$($iisCert.Thumbprint) appid=$applicationId
&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;certstorename=MY&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;a href=&quot;https://learn.microsoft.com/en-us/windows/win32/http/add-sslcert&quot; papago-id=&quot;16-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;HTTP Server API&lt;/a&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;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/32390097/powershell-set-ssl-certificate-on-https-binding&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>PowerShell</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1462</guid>
      <comments>https://mycopycode.tistory.com/1462#entry1462comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:19:16 +0900</pubDate>
    </item>
    <item>
      <title>이스이스이스요소 블록 레벨 또는 인라인 레벨?요소 블록 레벨 또는 인라인 레벨?요소 블록 레벨 또는 인라인 레벨?</title>
      <link>https://mycopycode.tistory.com/1461</link>
      <description>&lt;h2&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;img&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;/h2&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;&amp;lt;img&amp;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 class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소가 둘 다와 같이 동작합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;그것은 사실입니다. 그것들은 둘 다입니다. 혹은 더 정확히 말하자면, 그것들은 &quot;인라인 블록&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;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS에서 요소를 다음과 같이 설정할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;display: inline-block&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 papago-id=&quot;7&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&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;display: inline&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;(개발자 도구에서 볼 수 있듯이) 하지만 이미지에 특별한 관심을 기울이고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그들은 여전히 모든 특성을 따르고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;inline-block&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;/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;img&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;element는 &lt;em papago-id=&quot;12-1&quot;&gt;대체 인라인 요소&lt;/em&gt;입니다.&lt;/font&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;img&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 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;일반화: &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;a href=&quot;https://www.w3.org/TR/CSS2/visudet.html#the-width-property&quot; rel=&quot;noreferrer&quot; papago-id=&quot;17-1&quot;&gt;스펙에서 실제로 말하는&lt;/a&gt; 내용: &quot;적용 대상: 대체되지 않은 인라인 요소, 테이블 행 및 행 그룹을 제외한 모든 요소&quot;&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;IMG 요소는 인라인이며, 이는 띄우지 않으면 텍스트 및 다른 인라인 요소와 함께 수평으로 흐르게 된다는 것을 의미합니다.&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; 요소입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 그들은 그런 점에서 &quot;인라인 블록&quot;에 더 가깝습니다.&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;기본적으로 CSS를 사용하여 이미지를 표시하는 방법을 자유롭게 지정할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 몇 가지 이미지 클래스를 다음과 같이 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;img.center {display:block;margin:0 auto;}

img.left {float:left;margin-right:10px;}

img.right  {float:right;margin-left:10px;}

img.border  {border:1px solid #333;}
&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;font class=&quot;papago-parent&quot;&gt;옆에 다른 html 요소를 추가하면 허용됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지를 &quot;인라인&quot; 요소로 만듭니다.&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;그것은 사실입니다. 그것들은 둘 다입니다. 혹은 더 정확히 말하자면, 그것들은 &quot;인라인 블록&quot; 요소입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 그들이 텍스트처럼 일렬로 흐르지만 블록 요소처럼 너비와 높이를 가지고 있다는 것을 의미합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;&amp;lt;img&amp;gt;&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;25-0&quot;&gt;대체된 요소&lt;/strong&gt; : 내용이 현재 문서의 스타일에 영향을 받지 않는 요소입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS를 사용하면 교체된 요소의 위치에 영향을 줄 수 있지만 교체된 요소 자체의 내용은 영향을 줄 수 없습니다.&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;참조 : https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img&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;또한 폭과 높이의 스타일링과 같은 블록 기능을 가질 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 CSS에서 요소의 표시 속성을 'inline-block'으로 설정하여 변경할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, img {display:inline-block;}&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;strong papago-id=&quot;28-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;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;그러나 CSS에서는 다음과 같은 방법으로 간단히 변경할 수 있습니다. - img{display: inline-block;} 또는 img{display: inline-block;} 또는 img{display: inliblock;}&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/2402761/is-img-element-block-level-or-inline-level&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>CSS</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1461</guid>
      <comments>https://mycopycode.tistory.com/1461#entry1461comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:19:09 +0900</pubDate>
    </item>
    <item>
      <title>데이터베이스 테이블의 일부 기록을 확인하는 가장 빠른 방법은?</title>
      <link>https://mycopycode.tistory.com/1460</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;작업해야 할 큰 테이블이 있습니다. parent_id가 내 통과 값과 동일한 레코드가 있는지 확인하고 싶습니다. 현재 parent_id = :id&quot;인 내 테이블에서 &quot;select count (*)&quot;를 사용하여 이를 구현하는 것입니다. 만약 결과가 0을 초과하면 존재하는 레코드를 의미합니다.&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;이 요구사항을 가장 빠른 방법으로 구현하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 오라클 10을 사용하고 있습니다.&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;동면 팁 &amp;amp; 트릭 https://www.hibernate.org/118.html#A2 에 의하면요.&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;정수 카운트 = (정수) session.create&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리(&quot;...&quot;에서 카운트(*) 선택&quot;).uniqueResult();&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;&quot;parent_id = passingId 및 rowrum &amp;lt; 2인 내 테이블에서 1을 선택하십시오&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;레코드 수에 관심이 없는 경우 EXIST 쿼리를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select 'Y' from dual where exists (select 1 from mytable where parent_id = :id)
&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;레코드가 존재할 경우 'Y'를 반환하고, 존재하지 않을 경우에는 'Y'를 반환합니다.&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;[히버네이트의 &quot;유일한 결과&quot;에 대한 질문의 관점에서 보면, 이 모든 것은 반환할 객체가 하나일 때 하나의 객체를 반환하는 것이지, 하나의 객체를 포함하는 집합은 아닙니다.&lt;/font&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;pre&gt;&lt;code&gt;select 'y' 
  from dual 
 where exists (select 1 
                 from child_table 
                where parent_key = :somevalue)
&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;select 'y' 
  from mytable 
 where parent_key = :somevalue 
   and rownum = 1;
&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;... 최소한 Oracle 10gR2 이상에서는 가능합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle은 FAST DUAL 작업을 수행할 수 있을 정도로 현명합니다. 이 릴리스에서 Oracle에 대한 실제 작업을 제로화할 수 있습니다.&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;실제 성능 차별화 요소는 parent_key 열이 인덱싱되었는지 여부입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않은 경우 다음과 같은 작업을 실행해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select 'y' 
  from dual 
 where exists (select 1 
                 from parent_able 
                where parent_key = :somevalue)
&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;pre&gt;&lt;code&gt;boolean exists = session.createQuery(&quot;select parent_id from Entity where parent_id=?&quot;)
                        .setParameter(...)
                        .setMaxResults(1)
                        .uniqueResult() 
                 != null;
&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;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle의 경우 maxResults는 최대 절전 모드에서 로넘으로 변환됩니다.&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;고유한 Result()의 기능에 관해서는 JavaDoc을 읽어 보십시오!&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;우선 제 테이블의 인덱스가 필요합니다. parent_id.&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;이렇게 하면 큰 테이블의 경우에도 쿼리가 충분히 빠릅니다(동일한 parent_id를 가진 행이 많이 존재하지 않는 한).&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;select 1 from mytable where parent_id = :id and rownum &amp;lt; 2
&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;1 행을 포함하는 단일 행을 반환하거나 아예 행을 반환하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;행을 셀 필요는 없고, 하나만 찾아서 종료하면 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이 SQL은 (로넘 때문에) Oracle 고유 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 class=&quot;papago-parent&quot;&gt;DB2에는 다음과 같은 것이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;select * from mytable where parent_id = ? fetch first 1 row only&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 papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 쿼리는 레코드가 있으면 1을 반환하고 그렇지 않으면 0을 반환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT COUNT(1) FROM (SELECT 1 FROM mytable WHERE ROWNUM &amp;lt; 2);
&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 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/2131168/the-fastest-way-to-check-if-some-records-in-a-database-table&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>oracle</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1460</guid>
      <comments>https://mycopycode.tistory.com/1460#entry1460comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:19:02 +0900</pubDate>
    </item>
    <item>
      <title>요소의 한쪽에 상자 그림자를 추가하려면 어떻게 해야 합니까?</title>
      <link>https://mycopycode.tistory.com/1459</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&gt;&lt;/font&gt;&lt;code&gt;block&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;box-shadow&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;padding-right&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;overflow:hidden;&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&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;box-shadow-right&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;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;8-0&quot;&gt;편집&lt;/strong&gt;: 그림자의 세로 부분만 &lt;em papago-id=&quot;8-2&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;repeat-y&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;background:url(shadow.png) 100% 0% repeat-y&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;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;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;.myDiv
{
  border: 1px solid #333;
  width: 100px;
  height: 100px;
  box-shadow: 10px 0 5px -2px #888;
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;myDiv&quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&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;-2px&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&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;10px&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오른쪽(horizon 오프셋)으로 전송하고&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0px&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소 아래에 유지합니다(vertical 오프셋).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;5px&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;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://jsfiddle.net/6UFX7/8351/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;18-0&quot;&gt;예를 들어보세요&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;clip-path&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재(2020년)는 요소의 특정 측면에서 상자 그림자를 얻을 수 있는 가장 간단한 방법 중 하나입니다. &lt;strong papago-id=&quot;19-1&quot;&gt;특히 필요한 효과가 특정 가장자리의 &quot;깨끗한&quot; 그림자일 &lt;/strong&gt;때(OP가 원래 찾던 것이라고 생각합니다), 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;.shadow-element {
    border: 1px solid #333;
    width: 100px;
    height: 100px;
    box-shadow: 0 0 15px rgba(0,0,0,0.75);
    clip-path: inset(0px -15px 0px 0px);
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;shadow-element&quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&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;...이처럼 약해진/reduced/thinning 그림자와 대조적으로:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;.shadow-element {
    border: 1px solid #333;
    width: 100px;
    height: 100px;
    box-shadow: 15px 0px 15px -10px rgba(0,0,0,0.75);
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;shadow-element&quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&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;해당 요소에 다음 CSS를 적용하기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;box-shadow: 0 0 Xpx [hex/rgba]; /* note 0 offset values */
clip-path: inset(Tpx Rpx Bpx Lpx);
&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;ul&gt; 
 &lt;li&gt;&lt;code&gt;Tpx&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;/li&gt; 
 &lt;li&gt;&lt;code&gt;Rpx&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;code&gt;Bpx&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;/li&gt; 
 &lt;li&gt;&lt;code&gt;Lpx&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;/ul&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;음영을 숨겨야 하는 모든 에지에 대해 0의 값을 입력하고 음의 값을 입력합니다(상자 그림자 블러 반경과 동일).&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Xpx&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;29&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;30&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;div id=&quot;anti-shadow-div&quot;&amp;gt;
    &amp;lt;div id=&quot;shadow-div&quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/div&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;CSS:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#shadow-div{
    margin-right:20px; /* Set to 0 if you don't want shadow at the right side */
    margin-left:0px; /* Set to 20px if you want shadow at the left side */
    margin-top:0px; /* Set to 20px if you want shadow at the top side */
    margin-bottom:0px; /* Set to 20px if you want shadow at the bottom side */
    box-shadow: 0px 0px 20px black; 
    height:100px;
    width:100px;
    background: red;
}

#anti-shadow-div{
    margin:20px;
    display:table;
    overflow:hidden;
}​
&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;br&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;a href=&quot;http://jsfiddle.net/jDyQt/103&quot; rel=&quot;noreferrer&quot; papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://jsfiddle.net/jDyQt/103&lt;/font&gt;&lt;/a&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;header::before, main::before, footer::before, header::after, main::after, footer::after {
    display:    block;
    content:    '';
    position:   absolute;
    width:      8px;
    height:     100%;
    top:        0px;
}

header::before, main::before, footer::before {
    left:       -8px;
    background: linear-gradient(to left, rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0));
}

header::after, main::after, footer::after {
    right:      -8px;
    background: linear-gradient(to right, rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0));
}
&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;섀도를 추가하려면 pseudo 요소 앞에 :: 또는 ::를 사용하면 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;1px로 만들어서 원하는 쪽에 배치해주세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래는 top의 예입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;footer {
   margin-top: 50px;
   color: #fff;
   background-color: #009eff;
   text-align: center;
   line-height: 90px;
   position: relative;
}

footer::after {
    content: '';
    position: absolute;
    width: 100%;
    height: 1px;
    top: 0;
    left: 0;
    z-index: -1;
    box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.75);
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;footer&amp;gt;top only box shadow&amp;lt;/footer&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&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;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;.box{
        
        width: 400px; 
        height: 80px; 
        background-color: #C9C; 
        text-align: center; 
        font: 20px normal Arial, Helvetica, sans-serif; 
        color: #fff; 
        padding: 100px 0 0 0;
        -webkit-box-shadow: 0 8px 6px -6px black;
           -moz-box-shadow: 0 8px 6px -6px black;
                box-shadow: 0 8px 6px -6px black;
    }&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;box&quot;&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div id=&quot;element&quot;&amp;gt;&amp;lt;!--element that I want an one-sided inset shadow from the bottom--&amp;gt;&amp;lt;/div&amp;gt; 
&amp;lt;div class=&quot;one_side_shadow&quot;&amp;gt;&amp;lt;/div&amp;gt;
&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-0&quot;&gt;1.&lt;/strong&gt;만들기&lt;strong papago-id=&quot;39-0&quot;&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;div class=&quot;one_side_shadow&quot;&amp;gt;&amp;lt;/div&amp;gt;&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;id=&quot;element&quot;&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;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;28-0&quot;&gt;2.&lt;/strong&gt;그 다음에 규칙을 만들었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;box-shadow&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;`box-shadow: 0 -8px 20px 2px #DEDEE3;`
&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;a href=&quot;https://codepen.io/zeckdude/pen/oxywmm&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;44-1&quot;&gt;코드&lt;/a&gt; 펜 또는 작동하는 스니펫입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;.boxes {
  display: flex;
  flex-wrap: wrap;
}

.box {
  margin: 20px;
  border: 1px solid #ccc;
  font-family: Helvetica Neue, Arial, sans-serif;
  font-weight: 100;
  letter-spacing: 2px;
  color: #999;
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  flex: 1;
  padding: 40px;
  line-height: 1.4em;
}

.top {
  box-shadow: 0 -5px 5px -5px #333;
}

.right {
  box-shadow: 5px 0 5px -5px #333;
}

.bottom {
  box-shadow: 0 5px 5px -5px #333;
}

.left {
  box-shadow: -5px 0 5px -5px #333;
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;boxes&quot;&amp;gt;
  &amp;lt;div class=&quot;box top&quot;&amp;gt;Top Only&amp;lt;/div&amp;gt;
  &amp;lt;div class=&quot;box right&quot;&amp;gt;Right Only&amp;lt;/div&amp;gt;
  &amp;lt;div class=&quot;box bottom&quot;&amp;gt;Bottom Only&amp;lt;/div&amp;gt;
  &amp;lt;div class=&quot;box left&quot;&amp;gt;Left Only&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&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;border-right : 1px solid #ddd;
height:85px;    
box-shadow : 10px 0px 5px 1px #eaeaea;
&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;이 사이트는 나를 도와줬습니다: https://gist.github.com/ocean90/1268328 (이 게시물의 날짜를 기준으로 그 사이트에서 왼쪽과 오른쪽이 반대로 되어 있다는 것에 유의하십시오...&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;47-3&quot;&gt;아래 코드로 수정하였습니다.&lt;/strong&gt;&lt;/font&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;title&amp;gt;Box Shadow&amp;lt;/title&amp;gt;

        &amp;lt;style&amp;gt;
            .box {
                height: 150px;
                width: 300px;
                margin: 20px;
                border: 1px solid #ccc;
            }

            .top {
                box-shadow: 0 -5px 5px -5px #333;
            }

            .right {
                box-shadow: 5px 0 5px -5px #333;
            }

            .bottom {
                box-shadow: 0 5px 5px -5px #333;
            }

            .left {
                box-shadow: -5px 0 5px -5px #333;
            }

            .all {
                box-shadow: 0 0 5px #333;
            }
        &amp;lt;/style&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;div class=&quot;box top&quot;&amp;gt;&amp;lt;/div&amp;gt;
        &amp;lt;div class=&quot;box right&quot;&amp;gt;&amp;lt;/div&amp;gt;
        &amp;lt;div class=&quot;box bottom&quot;&amp;gt;&amp;lt;/div&amp;gt;
        &amp;lt;div class=&quot;box left&quot;&amp;gt;&amp;lt;/div&amp;gt;
        &amp;lt;div class=&quot;box all&quot;&amp;gt;&amp;lt;/div&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;div {
 border: 1px solid #666;
    width: 50px;
    height: 50px;
    -webkit-box-shadow: inset 10px 0px 5px -1px #888 ;
}
&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;font class=&quot;papago-parent&quot;&gt;그런 다음 두 블록이 다른 블록으로 감깁니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div id=&quot;wrapper&quot;&amp;gt;
    &amp;lt;div id=&quot;shadow&quot;&amp;gt;&amp;lt;/div&amp;gt;  
    &amp;lt;div id=&quot;content&quot;&amp;gt;CONTENT&amp;lt;/div&amp;gt;  
&amp;lt;/div&amp;gt;

&amp;lt;style&amp;gt;

div#wrapper {
  width:200px;
  height:258px;      
}

div#wrapper &amp;gt; div#shadow {
  display:inline-block;
  width:1px;
  height:100%;
  box-shadow: -3px 0px 5px 0px rgba(0,0,0,0.8)
}

div#wrapper &amp;gt; div#content {
  display:inline-block;
  height:100%;
  vertical-align:top;
}

&amp;lt;/style&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;a href=&quot;http://jsfiddle.net/dimitrios_87/j1kzapfy/&quot; rel=&quot;nofollow&quot; papago-id=&quot;49-1&quot;&gt;jsFiddle&lt;/a&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;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;html:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;no-relevant-box&quot;&amp;gt;
  &amp;lt;div class=&quot;div-to-shadow-1&quot;&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;div class=&quot;div-to-shadow-2&quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/div&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;sass:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.div-to-shadow-1, .div-to-shadow-2
  height: 150px
  width: 150px
  overflow: hidden
  transition: all 0.3s ease-in-out
  &amp;amp;::after
    display: block
    content: ''
    position: relative
    top: 0
    left: 100%
    height: 100%
    width: 10px
    border: 1px solid mediumeagreen
    box-shadow:  0px 7px 12px rgba(0,0,0,0.3)
  &amp;amp;:hover
    border: 1px solid dodgerblue
    overflow: visible
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://codepen.io/alex3o0/pen/PrMyNQ&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://codepen.io/alex3o0/pen/PrMyNQ&lt;/font&gt;&lt;/a&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;URL : https://stackoverflow.com/questions/5115427/how-can-i-add-a-box-shadow-on-one-side-of-an-element&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>CSS</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1459</guid>
      <comments>https://mycopycode.tistory.com/1459#entry1459comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:18:55 +0900</pubDate>
    </item>
    <item>
      <title>WooCommerce에서 프로그래밍 방식으로 카트 세금 합계 가져오기</title>
      <link>https://mycopycode.tistory.com/1458</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WooCommerce에서 프로그래밍 방식으로 카트 세금 합계 가져오기&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;WordPress, Using: 페이지의 WooCommerce에서 세금 총액을 얻는 방법은 무엇입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;global $woocommerce;

$discount = $woocommerce-&amp;gt;cart-&amp;gt;tax_total;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;2&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;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;기본적으로 나는 Tax가 사용자를 위해 계산하기를 원하지만, 고객이 COD에 대한 세금을 지불할 것이기 때문에 그것을 줄였으면 합니다.&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;add_action( 'woocommerce_calculate_totals', 'action_cart_calculate_totals', 10, 1 );
function action_cart_calculate_totals( $cart_object ) {

    if ( is_admin() &amp;amp;&amp;amp; ! defined( 'DOING_AJAX' ) )
        return;

    if ( !WC()-&amp;gt;cart-&amp;gt;is_empty() ):
        $cart_object-&amp;gt;cart_contents_total *= .10 ;

    endif;
}


//Code for removing tax from total collected
function prefix_add_discount_line( $cart ) {

  global $woocommerce;

  $discount = $woocommerce-&amp;gt;cart-&amp;gt;tax_total;

  $woocommerce-&amp;gt;cart-&amp;gt;add_fee( __( 'Tax Paid On COD', 'your-text-domain' ) , - $discount );

}
add_action( 'woocommerce_cart_calculate_fees', 'prefix_add_discount_line' );
&lt;/code&gt;&lt;/pre&gt;&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;0-0&quot;&gt;&lt;code papago-id=&quot;0-0-0&quot;&gt;global $woocommerce; $woocommerce-&amp;gt;cart&lt;/code&gt;&lt;/strong&gt; 는 카트에 사용되지 않습니다.&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;splited&quot;&gt;&lt;strong&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;$cart&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;em papago-id=&quot;2-0&quot;&gt;객체)&lt;/em&gt; 논법...&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;9&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;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://docs.woocommerce.com/wc-apidocs/class-WC_Cart.html#_get_taxes&quot; rel=&quot;noreferrer&quot; papago-id=&quot;10-1&quot;&gt;&lt;strong papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WC_카트겟_택스()&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt; 메서드를 사용하여 WoCommerce 버전 3.0+와 호환되는 것이 좋습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&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;// For Woocommerce 2.5+ (2.6.x and 3.0)
add_action( 'woocommerce_cart_calculate_fees', 'prefix_add_discount_line', 10, 1 );
function prefix_add_discount_line( $cart ) {

    if ( is_admin() &amp;amp;&amp;amp; ! defined( 'DOING_AJAX' ) )
        return;

    $discount = 0;
    // Get the unformated taxes array
    $taxes = $cart-&amp;gt;get_taxes(); 
    // Add each taxes to $discount
    foreach($taxes as $tax) $discount += $tax;

    // Applying a discount if not null or equal to zero
    if ($discount &amp;gt; 0 &amp;amp;&amp;amp; ! empty($discount) )
        $cart-&amp;gt;add_fee( __( 'Tax Paid On COD', 'your-text-domain' ) , - $discount );
}
&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;활성 하위 테마(또는 테마)의 php 파일 또는 플러그인 파일에 있습니다.&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;함수 이름을 잘못 사용하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;올바른 기능은 다음과 같습니다. -&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;WC()-&amp;gt;cart-&amp;gt;get_tax_totals( );
&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;$wocommerce-&amp;gt;cart-&amp;gt;tax_total을 사용하지 않고, 카트 총 세금을 받으려면 카트 총 세금에서 세금을 제외한 카트 총 세금을 차감하면 됩니다.&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;$total_tax = floatval( preg_replace( '#[^\d.]#', '', WC()-&amp;gt;cart-&amp;gt;get_cart_total() ) ) - WC()-&amp;gt;cart-&amp;gt;get_total_ex_tax();
&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;WC()-&amp;gt;cart-&amp;gt;get_taxes( );
&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;WC()-&amp;gt;cart-&amp;gt;get_total_tax();
&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;URL : https://stackoverflow.com/questions/43422067/get-cart-tax-total-programmatically-in-woocommerce&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>Wordpress</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1458</guid>
      <comments>https://mycopycode.tistory.com/1458#entry1458comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:18:44 +0900</pubDate>
    </item>
    <item>
      <title>동면 상태의 스프링 부츠에서 호출을 구현하는 방법</title>
      <link>https://mycopycode.tistory.com/1457</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;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 url에 1을 통과하면 10개의 결과가 나오고 2를 통과하면 다음 10개의 결과가 나와야 하는 것과 같습니다.&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;strong papago-id=&quot;3-1&quot;&gt;Dao&lt;/strong&gt; 입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Transactional
public interface PostDao extends CrudRepository&amp;lt;Post, Long&amp;gt;{

@Query(getAllPostsByRank)
List&amp;lt;Post&amp;gt; getAllPostsByRank();

final String getAllPostsByRank= &quot;from Post order by value DESC&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;strong papago-id=&quot;4-1&quot;&gt;컨트롤러&lt;/strong&gt;가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@RequestMapping(&quot;/top&quot;)
    @ResponseBody 
     public List&amp;lt;Post&amp;gt; getAllPosts(HttpServletRequest req, HttpServletResponse res) throws ServletException {

List&amp;lt;Post&amp;gt; postobj = postDao.getAllPostsByRank();
return postobj;
}
&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-1&quot;&gt;url&lt;/strong&gt;이 있습니다&lt;strong papago-id=&quot;5-1&quot;&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;http://localhost:8888/v1.0/post/top/1
&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&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;org.springframework.data.domain.Pageable&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;그러면 이 개체는 반환된 결과 수와 크기를 처리하는 JPA 계층으로 전달될 수 있습니다.&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;Pageable&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;그것은 그것이 a를 반환한다는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Page&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;이전/다음 페이지 로직을 형성하기 위해 프론트엔드에서 사용할 수 있는 object.&lt;/font&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;기본적으로 이 클래스는 URL 매개 변수 '&lt;strong papago-id=&quot;12-1&quot;&gt;page&lt;/strong&gt;' 및 '&lt;strong papago-id=&quot;12-3&quot;&gt;size&lt;/strong&gt;'를 사용하므로 page=0&amp;amp;size=10은 처음 10개의 항목을 반환합니다.&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;@ResponseBody
@RequestMapping(&quot;/top/pages/&quot;)
public List&amp;lt;Post&amp;gt; getAllPosts(@PageableDefault(value=10, page=0) Pageable pageable) throws ServletException {
    Page page = postDao.findAll(pageable);
    return page.getContent();
}
&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 class=&quot;papago-parent&quot;&gt;주석을 주목합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@PageableDefault&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;&amp;lt;a href=&quot;/top/pages?page=1&quot;&amp;gt;Next&amp;lt;/a&amp;gt;&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;; 그러면 게시물 목록이 11개에서 20개로 돌아갑니다.&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;Spring Boot에서 페이지 구성을 구현하는 것은 매우 쉬우며 기본적인 단계만 수행하면 됩니다.&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;1 - 저장소 인터페이스에서 PagingAndSortingRepository 확장&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public interface UserRepository extends PagingAndSortingRepository &amp;lt;User, Long&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;2 - Method Declaration은 아래 예제와 같아야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Page&amp;lt;User&amp;gt; userList(Pageable pageable);
&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;3 - 서비스 클래스에서의 방법 구현은 아래의 예와 같아야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Override
public Page&amp;lt;User&amp;gt; userList(Pageable pageable) {
        return userRepository.findAll(pageable);
}
&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;4 - 컨트롤러 클래스 코드는 아래와 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@GetMapping(&quot;/list&quot;)
public String userList(Model model, Pageable pageable) {
        Page&amp;lt;User&amp;gt; pages = userService.userList(pageable);
        model.addAttribute(&quot;number&quot;, pages.getNumber());
        model.addAttribute(&quot;totalPages&quot;, pages.getTotalPages());
        model.addAttribute(&quot;totalElements&quot;,       
                                      pages.getTotalElements());
        model.addAttribute(&quot;size&quot;, pages.getSize());
        model.addAttribute(&quot;users&quot;, pages.getContent());
        return &quot;/user/list&quot;;
}
&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;http://localhost:8080/application/user/list?page=0&amp;amp;size=5
http://localhost:8080/application/user/list?page=1&amp;amp;size=5
http://localhost:8080/application/user/list?page=2&amp;amp;size=5
&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&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=LryZYdpiPPs&quot; rel=&quot;noreferrer&quot; papago-id=&quot;25&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;a href=&quot;https://www.youtube.com/watch?v=QcRCZUBi_Gw&quot; rel=&quot;noreferrer&quot; papago-id=&quot;26&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;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;font class=&quot;papago-parent&quot;&gt;컨트롤러&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@RequestMapping(&quot;/top/pages/{pageno}&quot;)
    @ResponseBody 
     public List&amp;lt;Post&amp;gt; getAllPosts(@PathVariable(&quot;pageno&quot;) int pageno, HttpServletRequest req, HttpServletResponse res) throws ServletException {

List&amp;lt;Post&amp;gt; postobj = postDao.getAllPostsByRank(new PageRequest(pageno,10));
return postobj;
}
&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;너의 dao&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Transactional
public interface PostDao extends CrudRepository&amp;lt;Post, Long&amp;gt;{

@Query(getAllPostsByRank)
List&amp;lt;Post&amp;gt; getAllPostsByRank(Pageable pageable);

final String getAllPostsByRank= &quot;from Post order by value DESC&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;아래는 나의 Repository 입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    @Repository(&quot;userRepository&quot;)
    public interface UserRepository extends PagingAndSortingRepository&amp;lt;User, Long&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;@Controller
public class SampleController {

    @Autowired
    private UserRepository repository;

    @GetMapping(&quot;/userview&quot;)
    public String getEmployees(@PageableDefault(size = 1) Pageable pageable,
                               Model model) {
        Page&amp;lt;User&amp;gt; page = repository.findAll(pageable);
        model.addAttribute(&quot;page&quot;, page);
        return &quot;userdetail&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;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;
      xmlns:th=&quot;http://www.thymeleaf.org&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;link rel=&quot;stylesheet&quot; href=&quot;https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css&quot;&amp;gt;
    &amp;lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;script src=&quot;https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;h2&amp;gt;USER DETAILS&amp;lt;/h2&amp;gt;

&amp;lt;table class=&quot;table table-striped table-responsive-md&quot;&amp;gt;
    &amp;lt;thead&amp;gt;
    &amp;lt;tr&amp;gt;
        &amp;lt;th&amp;gt; ID &amp;lt;/th&amp;gt;
        &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;
        &amp;lt;th&amp;gt;Last Name&amp;lt;/th&amp;gt;
        &amp;lt;th&amp;gt;Email&amp;lt;/th&amp;gt;
        &amp;lt;th&amp;gt;Role&amp;lt;/th&amp;gt;
    &amp;lt;/tr&amp;gt;
    &amp;lt;/thead&amp;gt;
    &amp;lt;tbody&amp;gt;
    &amp;lt;tr th:each=&quot;user : ${page.content}&quot;&amp;gt;
        &amp;lt;td th:text=&quot;${user.id}&quot;&amp;gt;&amp;lt;/td&amp;gt;
        &amp;lt;td th:text=&quot;${user.email}&quot;&amp;gt;&amp;lt;/td&amp;gt;
        &amp;lt;td th:text=&quot;${user.name}&quot;&amp;gt;&amp;lt;/td&amp;gt;
        &amp;lt;td th:text=&quot;${user.lastName}&quot;&amp;gt;&amp;lt;/td&amp;gt;
        &amp;lt;td th:text=&quot;${user.roles[0].role}&quot;&amp;gt;&amp;lt;/td&amp;gt;

    &amp;lt;/tr&amp;gt;
    &amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;

&amp;lt;div class=&quot;pagination-div&quot;&amp;gt;
    &amp;lt;span th:if=&quot;${page.hasPrevious()}&quot;&amp;gt;
        &amp;lt;a th:href=&quot;@{/userview(page=${page.number-1},size=${page.size})}&quot;&amp;gt;Previous&amp;lt;/a&amp;gt;
    &amp;lt;/span&amp;gt;
    &amp;lt;th:block th:each=&quot;i: ${#numbers.sequence(0, page.totalPages - 1)}&quot;&amp;gt;
        &amp;lt;span th:if=&quot;${page.number == i}&quot; class=&quot;selected&quot;&amp;gt;[[${i}+1]]&amp;lt;/span&amp;gt;
        &amp;lt;span th:unless=&quot;${page.number == i}&quot;&amp;gt;
             &amp;lt;a th:href=&quot;@{/userview(page=${i},size=${page.size})}&quot;&amp;gt;[[${i}+1]]&amp;lt;/a&amp;gt;
        &amp;lt;/span&amp;gt;
    &amp;lt;/th:block&amp;gt;
    &amp;lt;span th:if=&quot;${page.hasNext()}&quot;&amp;gt;
        &amp;lt;a th:href=&quot;@{/userview(page=${page.number+1},size=${page.size})}&quot;&amp;gt;Next&amp;lt;/a&amp;gt;
    &amp;lt;/span&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;33&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;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 저장소 및 서비스 계층과 데이터 전송 개체(DTO)를 찾을 수 있으며, 이 개체는 결과를 매핑하여 컨트롤러 계층으로 전송하는 데 사용됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public interface CustomSomethingRepository {
    List&amp;lt;Something&amp;gt; findPagedResultBySomethingElseId(long somethingElseId, int offset, int limit);
}

public class SomethingRepositoryImpl implements CustomSomethingRepository {
    @Autowired
    private EntityManager em;

    @SuppressWarnings(&quot;unchecked&quot;)
    @Override
    public List&amp;lt;Something&amp;gt; findPagedResultBySomethingElseId(long somethingElseId, int offset, int limit) {
        String query = &quot;select s.* from Something s &quot;
                + &quot;join somethingelse selse on selse.id = s.fk_somethingelse &quot;
                + &quot;where selse.id = :somethingElseId &quot;
                + &quot;order by selse.date&quot;;
        Query nativeQuery = em.createNativeQuery(query);
        nativeQuery.setParameter(&quot;somethingElseId&quot;, somethingElseId);
        //Paginering
        nativeQuery.setFirstResult(offset);
        nativeQuery.setMaxResults(limit);
        final List&amp;lt;Object[]&amp;gt; resultList = nativeQuery.getResultList();
        List&amp;lt;Something&amp;gt; somethingList = Lists.newArrayList();
        resultList.forEach(object -&amp;gt; somethingList.add(//map obj to something));
        return somethingList;
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Hibernate는 다음과 같이 쿼리를 변환합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT inner_query.*, ROW_NUMBER() OVER (ORDER BY CURRENT_TIMESTAMP) as __hibernate_row_nr__ FROM ( select TOP(?) t as page0_ from Something s join s.somethingelse as selse order by selse.date ) inner_query ) SELECT page0_ FROM query WHERE __hibernate_row_nr__ &amp;gt;= ? AND __hibernate_row_nr__ &amp;lt; ?


@Service
public class SomethingService {
    private SomethingRepository somethingRepository;
    @Autowired
    public SomethingService(SomethingRepository somethingRepository){
        this.somethingRepository = somethingRepository;
    }
    @Transactional(readOnly=true)
    public PageDto getSomething(long somethingElseId, int page, int size){
         List&amp;lt;Something&amp;gt; somethings = somethingRepository.findBySomethingElseId(somethingElseId, offset, limit);
        return new PagedResult&amp;lt;&amp;gt;(somethings
                .stream()
                .map(SomethingDto::createDto)
                .sorted(comparing(SomethingDto::getDatum))
                .collect(toList()), somethings.getTotalElements(), somethings.getTotalPages();
    }
}
@Controller
//....
public class PagedResult&amp;lt;T&amp;gt; {
    public static final long DEFAULT_OFFSET = 0;
    public static final int DEFAULT_MAX_NO_OF_ROWS = 100;
    private int offset;
    private int limit;
    private long totalElements;
    private List&amp;lt;T&amp;gt; elements;
    public PagedResult(List&amp;lt;T&amp;gt; elements, long totalElements, int offset, int limit) {
        this.elements = elements;
        this.totalElements = totalElements;
        this.offset = offset;
        this.limit = limit;
    }
    public boolean hasMore() {
        return totalElements &amp;gt; offset + limit;
    }
    public boolean hasPrevious() {
        return offset &amp;gt; 0 &amp;amp;&amp;amp; totalElements &amp;gt; 0;
    }
    public long getTotalElements() {
        return totalElements;
    }
    public int  getOffset() {
        return offset;
    }
    public int getLimit() {
        return limit;
    }
    public List&amp;lt;T&amp;gt; getElements() {
        return elements;
    }
}
&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;strong papago-id=&quot;36-2&quot;&gt;장단점&lt;/strong&gt;:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Spring Data를 사용하는 경우에 비해 SQL 쿼리가 더 적게 생성됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 복잡한 쿼리는 Spring Data에서 작성할 수 없으며 쿼리를 네이티브 쿼리로 지정해야 하며 이 방법론을 사용하여 호출할 수도 있습니다.&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;strong papago-id=&quot;37-0&quot;&gt;단점&lt;/strong&gt;: &quot;객체&quot; 배열은 자바 객체에 매핑되어야 합니다.&lt;/font&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;Spring Data로 OffsetLimit Pagination을 구현하는 방법 기본 Spring Data 저장소에서 필요한 것에 대한 &quot;즉시&quot; 지원은 없는 것으로 알고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 제한/오프셋 매개변수를 사용할 Pageable 개체의 사용자 지정 구현을 만들 수 있습니다.&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;페이지가 가능한 개체를 만들어 PaginationAndSortingRepository:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class OffsetLimitRequest implements Pageable {
    private int limit;
    private int offset;
    public OffsetLimitRequest(int offset, int limit){
        this.limit = limit;
        this.offset = offset;
    }
        @Override
    public int getPageNumber() {
        return 0;
    }
    @Override
    public int getPageSize() {
        return limit;
    }
    @Override
    public int getOffset() {
        return offset;
    }
    ....
}
&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;서비스 계층을 다음과 같이 변경해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Service
public class SomethingService {
    private SomethingRepository somethingRepository;
    @Autowired
    public SomethingService(SomethingRepository somethingRepository){
        this.somethingRepository = somethingRepository;
    }
    @Transactional(readOnly=true)
    public PageDto getSomething(long somethingElseId, int page, int size){
        Page&amp;lt;Something&amp;gt; somethings = somethingRepository.findBySomethingElseId(somethingElseId, new OffsetLimitRequest(offset, limit));
        return new PageDto(somethings.getContent()
                .stream()
                .map(SomethingDto::createDto)
                .sorted(comparing(SomethingDto::getDatum))
                .collect(toList()), somethings.getTotalElements(), somethings.getTotalPages();
    }
}
&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;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;URL : https://stackoverflow.com/questions/32434058/how-to-implement-pagination-in-spring-boot-with-hibernate&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>spring-boot</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1457</guid>
      <comments>https://mycopycode.tistory.com/1457#entry1457comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:18:37 +0900</pubDate>
    </item>
    <item>
      <title>DTD에서 PCDATA와 CDATA의 차이</title>
      <link>https://mycopycode.tistory.com/1456</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DTD에서 PCDATA와 CDATA의 차이&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;#PCDATA&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;#CDATA&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;strong papago-id=&quot;3-1&quot;&gt;DTD&lt;/strong&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;PCDATA&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 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;CDATA&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;em papago-id=&quot;5-1&quot;&gt;없는&lt;/em&gt; 텍스트입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;텍스트 내부의 태그는 마크업으로 &lt;em papago-id=&quot;5-3&quot;&gt;처리&lt;/em&gt;되지 않으며 엔티티는 확장되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&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;PCDATA&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;&amp;lt;bar&amp;gt;&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;파싱이 되고 내용물은 없지만 아이는 한 명뿐입니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;
&amp;lt;foo&amp;gt;
&amp;lt;bar&amp;gt;&amp;lt;test&amp;gt;content!&amp;lt;/test&amp;gt;&amp;lt;/bar&amp;gt;
&amp;lt;/foo&amp;gt;
&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 class=&quot;papago-parent&quot;&gt;요소에 텍스트만 포함하고 하위 요소는 포함하지 않도록 지정하려면 키워드를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PCDATA&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;&amp;lt;&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;&amp;gt;&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;&amp;amp;&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;'&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;&quot;&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;/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 class=&quot;papago-parent&quot;&gt;다음 예에서는,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;bar&amp;gt;&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;CDATA&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;&amp;lt;test&amp;gt;content!&amp;lt;/test&amp;gt;&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;
&amp;lt;foo&amp;gt;
&amp;lt;bar&amp;gt;&amp;lt;![CDATA[&amp;lt;test&amp;gt;content!&amp;lt;/test&amp;gt;]]&amp;gt;&amp;lt;/bar&amp;gt;
&amp;lt;/foo&amp;gt;
&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;SGML에는 여러가지 컨텐츠 모델이 있습니다. 그&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;#PCDATA&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;여기서 &quot;파싱&quot;된 부분은 마크업(PI, 주석 및 SGML 지시어 포함)이 원시 텍스트로 표시되지 않고 파싱된다는 것을 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;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;CDATA&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;. XML에서 요소 내용 모델은 암시적으로 다음과 같이 설정되지 않을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CDATA&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;, 그러나 SGML에서 마크업과 엔티티 참조는 요소의 내용에서 무시된다는 것을 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 속성에서&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CDATA&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;type 그러나 엔티티 참조가 바뀝니다.&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;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; XML 에서&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;#PCDATA&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;는 유일한 일반 텍스트 내용 모델입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소에 텍스트 내용을 허용하고 싶을 때 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CDATA&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;code&gt;CDATA&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;code&gt;#PCDATA&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;CDATA&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;DTD에서 텍스트를 포함하는 속성의 유형은 다음과 같아야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CDATA&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;CDATA&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;CDATA&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;XML 문서의 섹션입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CDATA&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;&amp;lt;&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;&amp;gt;&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;&amp;amp;&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;'&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;&quot;&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;]]&amp;gt;&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&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;#PCDATA&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&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;/p&gt; 
&lt;p&gt;&lt;code&gt;#PCDATA&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;code&gt;PCDATA&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;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PCDATA - 구문 분석된 문자 데이터&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;XML 구문 분석기는 일반적으로 XML 문서의 모든 텍스트를 구문 분석합니다.&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;CDATA - (분석되지 않은) 문자 데이터&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;CDATA라는 용어는 XML 파서에서 구문 분석하지 않아야 하는 텍스트 데이터에 대해 사용됩니다.&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;&quot;&amp;lt;&quot; 및 &quot;&amp;amp;&quot;과 같은 문자는 XML 요소에서 사용할 수 없습니다.&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;&lt;strong papago-id=&quot;51-0&quot;&gt;PCDATA – 구문 분석된 문자 데이터.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;XML 문서의 모든 데이터를 구문 분석합니다.&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;pre class=&quot;lang-xml prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;family&amp;gt;
    &amp;lt;mother&amp;gt;mom&amp;lt;/mother&amp;gt;
    &amp;lt;father&amp;gt;dad&amp;lt;/father&amp;gt;
&amp;lt;/family&amp;gt;
&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;&amp;lt;family&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소는 2개의 요소를 더 포함합니다: 그리고 . 그래서 더 파싱하여 어머니와 아버지의 텍스트를 &quot;&lt;strong papago-id=&quot;46-5&quot;&gt;엄마 아빠&quot;&lt;/strong&gt;로서 가족의 텍스트 가치를 부여합니다.&lt;/font&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;&lt;strong papago-id=&quot;55-0&quot;&gt;CDATA – 구문 분석되지 않은 문자 데이터.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 xml 문서에서 더 이상 구문 분석해서는 안 되는 데이터입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-xml prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;family&amp;gt;
    &amp;lt;![CDATA[ 
       &amp;lt;mother&amp;gt;mom&amp;lt;/mother&amp;gt;
       &amp;lt;father&amp;gt;dad&amp;lt;/father&amp;gt;
    ]]&amp;gt;
&amp;lt;/family&amp;gt;
&lt;/code&gt;&lt;/pre&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 class=&quot;papago-parent&quot;&gt;여기서 가족의 텍스트 값은&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;mother&amp;gt;mom&amp;lt;/mother&amp;gt;&amp;lt;father&amp;gt;dad&amp;lt;/father&amp;gt;&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;/p&gt;&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://lists.xml.org/archives/xml-dev/199906/msg00737.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;58-0&quot;&gt;지금&lt;/a&gt;부터(&lt;a href=&quot;http://www.google.co.uk/search?q=pcdata+vs+cdata&quot; rel=&quot;noreferrer&quot; papago-id=&quot;58-2&quot;&gt;Google은 당신의 친구&lt;/a&gt;입니다):&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DTD에서 PCDATA와 CDATA는 각각 요소와 속성의 허용 내용에 대해 주장하는 데 사용됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소의 내용 모델에서 #PCDATA는 요소가 &quot;오래된 텍스트&quot;를 포함(포함할 수 있음)한다고 말합니다(아래에 언급된 예외는 제외).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;CDATA는 속성의 선언에서 속성의 허용 값에 적용할 수 있는 제약 조건의 하나입니다(다른 유형에는 모두 상호 배타적이며 ID, IDREF 및 NMTOKEN이 포함됨).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;허용 값이 CDATA인 속성(요소의 PCDATA와 같이)은 &quot;이전 텍스트&quot;를 포함할 수 있습니다.&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; &quot;CDATA&quot;가 있다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;표시된 섹션은 특수 문자열로 구분된 요소(#PCDATA) 내용의 일부입니다. 이 섹션을 닫으려면.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 PCDA를 기억한다면&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;TA는 &quot;parsed 문자 데이터&quot;이며 CDATA 섹션은 &quot;parsed 문자 데이터&quot; 없이 문자 그대로 동일한 것입니다. 파서는 &amp;lt; 및 &amp;amp;&amp;gt;와 같은 특수 문자를 접할 때마다 표시된 섹션의 내용을 딸꾹질 없이 다운스트림 애플리케이션으로 전송합니다.&lt;/font&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;따라서 &quot;오래된 텍스트&quot; 규칙의 예외는 PCDATA가 CDATA로 표시된 섹션의 범위에 포함되지 않는 한 PCDATA는 이러한 회피되지 않은 특수 문자를 포함할 수 없다는 것입니다.&lt;/font&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;PCDATA와 CDATA의 가장 큰 차이점은&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;PCDATA - 기본적으로 Elements에 사용되는 동안&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CDATA - XML, 즉 ATTLIST의 속성에 사용됨&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;CDATA(문자 &lt;strong papago-id=&quot;49-3&quot;&gt;데이터&lt;/strong&gt;):&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;주석과 유사하지만 문서의 일부입니다. 즉, CDATA는 데이터이며 문서의 일부이지만 XML로 구문 분석할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;font papago-translate=&quot;translated&quot; papago-id=&quot;50&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;50-0&quot;&gt;참고:&lt;/strong&gt; XML 주석은 XML을 구문 분석하는 동안 생략되지만 CDATA는 그대로 표시됩니다.&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;PCDATA(Parsed Character &lt;strong papago-id=&quot;67-5&quot;&gt;DATA&lt;/strong&gt;) : 기본적으로 모든 것이 PCDATA이며, PCDATA는 데이터이며, XML로 파싱할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;h1 papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PCDATA&lt;/font&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PCDATA: (Parsed Character Data): XML 파서는 XML 문서의 모든 텍스트를 파싱하는 데 사용됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PCDATA는 구문 분석된 문자 데이터를 의미합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PCDATA는 파서에서 파싱할 텍스트입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PCDATA 내부의 태그는 마크업(markup)으로 취급되고 엔티티는 확장됩니다.&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;즉, 구문 분석된 문자 데이터는 XML 구문 분석기가 데이터를 검사하고 해당 데이터가 대체될 내용을 포함하는 경우 내용 엔티티가 없는지 확인하는 것을 의미한다고 할 수 있습니다.&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;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;  
&amp;lt;!DOCTYPE employee SYSTEM &quot;employee.dtd&quot;&amp;gt;  
&amp;lt;employee&amp;gt;  
  &amp;lt;firstname&amp;gt;vimal&amp;lt;/firstname&amp;gt;  
  &amp;lt;lastname&amp;gt;jaiswal&amp;lt;/lastname&amp;gt;  
  &amp;lt;email&amp;gt;vimal@javatpoint.com&amp;lt;/email&amp;gt;  
&amp;lt;/employee&amp;gt;   
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 예제에서 직원 요소에는 'first name', 'last name' 및 'email' 요소가 3개 더 포함되어 있으므로, 이 요소를 추가로 구문 분석하여 first name, last name 및 e-메일의 데이터/텍스트를 가져와 직원의 값을 다음과 같이 제공합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;vimal jaiswal vimal@javatpoint.com
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1 papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CDATA&lt;/font&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CDATA: (분석되지 않은 문자 데이터): CDATA는 XML 문서에서 더 이상 분석되지 않은 텍스트를 포함합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;CDATA 텍스트 내부의 태그는 마크업으로 취급되지 않으며 엔티티는 확장되지 않습니다.&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;CDA를 예로 들어보겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;TA:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot;?&amp;gt;  
&amp;lt;!DOCTYPE employee SYSTEM &quot;employee.dtd&quot;&amp;gt;  
&amp;lt;employee&amp;gt;  
&amp;lt;![CDATA[  
  &amp;lt;firstname&amp;gt;vimal&amp;lt;/firstname&amp;gt; 
  &amp;lt;lastname&amp;gt;jaiswal&amp;lt;/lastname&amp;gt; 
  &amp;lt;email&amp;gt;vimal@javatpoint.com&amp;lt;/email&amp;gt; 
]]&amp;gt;   
&amp;lt;/employee&amp;gt;   
&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;위의 CDATA 예에서 CDATA는 요소 직원 바로 뒤에 사용되어 데이터/텍스트를 구문 분석하지 않은 상태로 만들기 때문에 직원의 가치를 제공합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;firstname&amp;gt;vimal&amp;lt;/firstname&amp;gt;&amp;lt;lastname&amp;gt;jaiswal&amp;lt;/lastname&amp;gt;&amp;lt;email&amp;gt;vimal@javatpoint.com&amp;lt;/email&amp;gt;
&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/918450/difference-between-pcdata-and-cdata-in-dtd&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>XML</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1456</guid>
      <comments>https://mycopycode.tistory.com/1456#entry1456comment</comments>
      <pubDate>Thu, 19 Oct 2023 22:19:09 +0900</pubDate>
    </item>
    <item>
      <title>이미지 이름으로 도커 컨테이너 중지 - Ubuntu</title>
      <link>https://mycopycode.tistory.com/1455</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지 이름으로 도커 컨테이너 중지 - Ubuntu&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;Ubuntu 14.04 (Trusty Tahr)에서 실행 중인 컨테이너를 중지하는 방법을 찾고 있는데 도커 실행 명령에서 사용된 이미지 이름만 가지고 있습니다.&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;h2&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:tag&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;/h2&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://github.com/docker/docker/issues/8959&quot; rel=&quot;noreferrer&quot; papago-id=&quot;5-1&quot;&gt;8959호&lt;/a&gt;에 이어 좋은 출발은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker ps -a -q --filter=&quot;name=&amp;lt;containerName&amp;gt;&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&gt;&lt;code&gt;name&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;em papago-id=&quot;7-1&quot;&gt;컨테이너&lt;/em&gt;를 참조합니다. &lt;a href=&quot;https://stackoverflow.com/users/158288/koekiebox&quot; papago-id=&quot;7-5&quot;&gt;koekiebox&lt;/a&gt;의 &lt;a href=&quot;https://stackoverflow.com/a/34899613/6309&quot; papago-id=&quot;7-7&quot;&gt;답변&lt;/a&gt;에 언급된 최신 &lt;a href=&quot;https://github.com/docker/docker/commit/b1cb1b1df493b3e0b739b9f374b6c82e306dede8&quot; papago-id=&quot;7-3&quot; rel=&quot;noreferrer&quot;&gt;Docker 1.9 필터 조상&lt;/a&gt;을 사용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker ps -a -q  --filter ancestor=&amp;lt;image-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/users/1919237/kiril&quot; papago-id=&quot;8-1&quot;&gt;Kiril&lt;/a&gt;이 아래에 언급한 바와 같이, 이러한 용기를 제거하기 위해:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;code&gt;stop&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;/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&gt;&lt;code&gt;stop&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;rm&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;작업을 수행할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker rm $(docker stop $(docker ps -a -q --filter ancestor=&amp;lt;image-name&amp;gt; --format=&quot;{{.ID}}&quot;))
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;h2&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;image:tag&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;/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;https://stackoverflow.com/users/986696/alex-jansen&quot; papago-id=&quot;15-1&quot;&gt;Alex Jansen&lt;/a&gt;이 &lt;a href=&quot;https://stackoverflow.com/questions/32073971/stopping-docker-containers-by-image-name-ubuntu/32074098#comment121207874_32074098&quot; papago-id=&quot;15-3&quot;&gt;논평&lt;/a&gt;에서 지적한 바와 같이:&lt;/font&gt;&lt;/p&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;a href=&quot;https://docs.docker.com/engine/reference/commandline/ps/#filtering&quot; rel=&quot;noreferrer&quot; papago-id=&quot;16-1&quot;&gt;상위 옵션&lt;/a&gt;은 와일드카드 매칭을 지원하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&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;a href=&quot;https://stackoverflow.com/a/68584752/6309&quot; papago-id=&quot;17-1&quot;&gt;해결책을 제안&lt;/a&gt;하지만, 당신이 같은 이미지에서 여러 &lt;em papago-id=&quot;17-3&quot;&gt;개&lt;/em&gt;의 컨테이너를 실행하고 있을 때, 내가 실행할 수 있었던 것은 (당신의)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;~/.bashrc&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&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;dsi() { docker stop $(docker ps -a | awk -v i=&quot;^$1.*&quot; '{if($2~i){print$1}}'); }
&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;그 다음에 그냥 내 bash 세션을 호출합니다(소싱 후).&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;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;/p&gt; 
&lt;pre&gt;&lt;code&gt;dsi alpine
&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;alpine.*:xxx&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;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의미: 이름이 &lt;em papago-id=&quot;23-1&quot;&gt;시작&lt;/em&gt;하는 이미지&lt;/font&gt;&lt;/font&gt;&lt;code&gt;alpine&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;br&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;awk -v i=&quot;^$1.*&quot;&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;^$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 class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;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;drmi() { docker rm $(dsi $1  | tr '\n' ' '); }
&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 class=&quot;papago-parent&quot;&gt;  a.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;drmi alpine&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;em papago-id=&quot;30-1&quot;&gt;모든&lt;/em&gt; 것을 &lt;em papago-id=&quot;30-1&quot;&gt;제거&lt;/em&gt;할 것입니다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;alpine:xxx&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;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;docker stop $(docker ps -q --filter ancestor=&amp;lt;image-name&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker run -d --name &amp;lt;container-name&amp;gt; &amp;lt;image-name&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;동일한 이미지를 사용하여 여러 개의 용기를 회전시킬 수 있으므로 용기를 시작하는 것이 좋습니다.&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;docker exec -it &amp;lt;container-name&amp;gt; bash
docker stop &amp;lt;container-name&amp;gt;
docker rm &amp;lt;container-name&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;strong papago-id=&quot;35-3&quot;&gt;centos:6&lt;/strong&gt;의 &lt;strong papago-id=&quot;35-1&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;docker ps | grep centos:6 | awk '{print $1}' | xargs docker stop
&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;docker stop $(docker ps -a | grep centos:6 | awk '{print $1}')
&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;1. $docker stop container_ID

2. $docker kill container_ID
&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;$docker ps
&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;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.docker.com/engine/reference/commandline/stop/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://docs.docker.com/engine/reference/commandline/stop/&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.docker.com/v1.8/reference/commandline/kill/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://docs.docker.com/v1.8/reference/commandline/kill/&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 이미지 = &quot;yourImgName&quot;이 있는 &lt;strong papago-id=&quot;42-1&quot;&gt;모든&lt;/strong&gt; 컨테이너만 &lt;strong papago-id=&quot;42-1&quot;&gt;중지&lt;/strong&gt;됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo docker stop $(sudo docker ps | grep &quot;yourImgName&quot; | cut -d &quot; &quot; -f 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;그러면 이미지 = &quot;yourImgName&quot;이 있는 모든 컨테이너가 &lt;strong papago-id=&quot;43-1&quot;&gt;중지되고 제거&lt;/strong&gt;됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo docker rm $(sudo docker stop $(sudo docker ps -a | grep &quot;yourImgName&quot; | cut -d &quot; &quot; -f 1))
&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;/usr/local/bin/docker.stop&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;이미지 이름을 입력합니다(assumes 실행 중인 것은 하나뿐임).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker stop $(docker ps -q -f &quot;name=$1&quot;)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;46&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;imagename='mydockerimage'
docker stop $(docker ps | awk '{split($2,image,&quot;:&quot;); print $1, image[1]}' | awk -v image=$imagename '$2 == image {print $1}')
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;47&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;imagename='mydockerimage:latest'
docker stop $(docker ps | awk -v image=$imagename '$2 == image {print $1}')
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&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://docs.docker.com/config/labels-custom-metadata/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;48-1&quot;&gt;레이블&lt;/a&gt;을 추가하고 실행 중인 컨테이너를 레이블별로 필터링할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker ps -q --filter &quot;label=image=$image&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;49&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;docker ps -a -q  --filter ancestor=&amp;lt;image-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/37255264/why-does-docker-filter-ancestor-imagename-find-the-wrong-container&quot; papago-id=&quot;50&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;pre&gt;&lt;code&gt;docker ps -a -q --filter=&quot;name=&amp;lt;containerName&amp;gt;&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker ps | grep &amp;lt;image-name&amp;gt; | awk '{print $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 papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 컨테이너를 정보 및 ID와 함께 나열합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker ps

docker stop CONTAINER ID
&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;도커 버전 18.09.0의 경우 포맷 플래그가 필요 없음을 알게 되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker rm $(docker stop $(docker ps -a -q -f ancestor=&amp;lt;image-name&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;@VonC 최고의 답변 외에 .zshrc 파일에 추가할 수 있는 ZSH 기능이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;dockstop() {
  docker rm $(docker stop $(docker ps -a -q --filter ancestor=&quot;$1&quot; --format=&quot;{{.ID}}&quot;))
}
&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;dockstop myImageName&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;그리고 myImageName이라는 이미지에서 시작된 모든 컨테이너를 중지하고 제거합니다.&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker stop container-name
docker rm container-name
&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;이름이 같은 여러 개의 컨테이너가 있는 시나리오에서는 작동하지 않을 수 있지만(가능하다면), 제 사용 사례에서는 완벽했습니다.&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;font class=&quot;papago-parent&quot;&gt;나같은 경우에는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--filter ancestor=&amp;lt;image-name&amp;gt;&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;docker rm $(docker stop $(docker ps -a -q --filter &quot;name=container_name_here&quot; --format=&quot;{{.ID}}&quot;))
&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;strong papago-id=&quot;62-1&quot;&gt;도커 컨테이너 중지($&lt;/strong&gt; docker 컨테이너 ls &lt;strong papago-id=&quot;62-1&quot;&gt;-q --filter&lt;/strong&gt; parent=mongo)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    (base) :~ user$ docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                      NAMES
    d394144acf3a        mongo               &quot;docker-entrypoint.s…&quot;   15 seconds ago      Up 14 seconds       0.0.0.0:27017-&amp;gt;27017/tcp   magical_nobel
    (base) :~ user$ docker container stop $(docker container ls -q --filter ancestor=mongo)
    d394144acf3a
    (base) :~ user$ docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    (base) :~ user$
&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;/p&gt; 
&lt;pre class=&quot;lang-sh prettyprint-override&quot;&gt;&lt;code&gt;docker pull [registry]/[image]:latest
docker build --no-cache -t [localregistry]/[localimagename]:latest -f compose.yaml context/
docker ps --no-trunc | grep [localimagename] | awk '{print $1}' | xargs docker stop
docker run -d -p 8111:80 [localregistry]/[localimagename]:latest
&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;note --no-trunc 인수는 이미지 이름 또는 기타 정보를 출력에서 전체적으로 보여줍니다.&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;p&gt;&lt;code&gt;docker stop $(docker ps -a | awk -v i=&quot;^${image_name}.*&quot; '{if($2~i){print$1}}')&lt;/code&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;docker stop $(docker ps -a | grep &quot;zalenium&quot;)
docker rm $(docker ps -a | grep &quot;zalenium&quot;)
&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;/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&gt;&lt;code&gt;AWK&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&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker rm -f $(docker ps | awk '{ if($2 == &quot;&amp;lt;your image name&amp;gt;&quot;) { print $NF}}')
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;$(docker ps | awk '{ if($2 == &quot;&amp;lt;your image name&amp;gt;&quot;) { print $NF}}')&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;p&gt;&lt;code&gt;docker ps&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;/p&gt; 
&lt;p&gt;&lt;code&gt;awk '{ if($2 == &quot;&amp;lt;your-image-name&amp;gt;&quot;) { print $NF}}'&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;docker ps&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&gt;&lt;code&gt;print $NF&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&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;docker rm -f&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;/p&gt; 
&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, ubuntu 이미지의 실행 중인 모든 컨테이너를 제거하는 작업은 다음과 같이 간단하게 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker rm -f $(docker ps | awk '{ if($2 == &quot;ubuntu:latest&quot;) { print $NF}}')
&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;추신: 이미지 태그는 AWK에 포함하는 것을 기억하세요. 동등한 비교기니까요.&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;컨테이너 이름의 일부를 알고 있다면 다음과 같이 도커와 함께 AWK를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  CONTAINER_IDS=$(docker ps -a | awk '($2 ~ /container.*/) {print $1}')
  if [ -z &quot;$CONTAINER_IDS&quot; -o &quot;$CONTAINER_IDS&quot; == &quot; &quot; ]; then
    echo &quot;No containers available for deletion&quot;
  else
    docker rm -f $CONTAINER_IDS
  fi
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;image: docker
services:
  - docker:dind
stages:
  - deploy
step-deploy-prod:
  stage: deploy
  tags:
  - docker
  script:
    - container_id=$(docker ps -q -a -f status=running --filter name=todoapp)
    - if [ -n &quot;$container_id&quot; ]; then 
        docker stop $container_id; 
        docker rm -f $container_id;
      fi
    - container_id=$(docker ps -q -a -f status=exited --filter name=todoapp)
    - if [ -n &quot;$container_id&quot; ]; then 
        docker rm -f $container_id;
      fi
    - docker build -t app/creative .
    - docker run -d -p 8081:80 --name todoapp app/creative
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&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;docker ps -q -a -f status=running --filter name=todoapp&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&gt;&lt;/font&gt;&lt;code&gt;todoapp&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&gt;&lt;code&gt;docker ps -q -a -f status=exited --filter name=todoapp&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 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;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 알아낸 바와 같이, 컨테이너를 멈추면, 그 컨테이너는 다음과 같이 찾을 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker rm&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;gitlab-ci를 통해 새로 배포된 이미지를 교체하고 싶다면 누군가가 이 문제를 발견할 경우를 대비합니다.&lt;/font&gt;&lt;/font&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;/font&gt;&lt;/font&gt;&lt;code&gt;docker ps&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&gt;&lt;/font&gt;&lt;code&gt;-f status=exited&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;pre&gt;&lt;code&gt;container_id=$(docker ps -q -a -f status=exited --filter name=todoapp)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;87&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 명령은 중지되고 이름이 todoapp인 컨테이너 ID만 반환합니다.&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;-f&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;--force&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;docker rm&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 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;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;ps&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;실행 중인 컨테이너를 살펴보도록 명령합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker ps -a
&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;거기서부터 당신이 찾으시는 컨테이너 ID와 함께 당신의 컨테이너 이름이 보일 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 &lt;a href=&quot;https://docs.docker.com/reference/commandline/ps/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;94-1&quot;&gt;대한 자세한 내용은 다음&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/32073971/stopping-docker-containers-by-image-name-ubuntu&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>docker</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1455</guid>
      <comments>https://mycopycode.tistory.com/1455#entry1455comment</comments>
      <pubDate>Thu, 19 Oct 2023 22:19:01 +0900</pubDate>
    </item>
    <item>
      <title>MySQL에서 ibtmp1 파일을 정리하거나 크기를 조정하는 방법은 무엇입니까?</title>
      <link>https://mycopycode.tistory.com/1454</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL에서 ibtmp1 파일을 정리하거나 크기를 조정하는 방법은 무엇입니까?&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;MySQL 5.7은 InnoDB에 임시 데이터를 저장하는 새로운 파일 &lt;strong papago-id=&quot;1-1&quot;&gt;ibtmp1&lt;/strong&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;제 db 서버에서는 크기가 92GB로 늘어납니다.&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;strong papago-id=&quot;3-1&quot;&gt;서버를 다시&lt;/strong&gt; 시작하지 &lt;strong papago-id=&quot;3-1&quot;&gt;않고&lt;/strong&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;strong papago-id=&quot;5-1&quot;&gt;ibtmp1&lt;/strong&gt;은 mysql 서비스를 다시 시작하지 않으면 어떤 방법으로도 축소할 수 없습니다.&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;strong papago-id=&quot;7-0&quot;&gt;주의사항&lt;/strong&gt; : 서버를 시작할 때 이 파일의 크기를 다음과 같이 제한해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:5G
&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;여기서 max 5G는 이 파일 크기가 5GB로 제한됨을 의미합니다.&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;SET GLOBAL innodb_fast_shutdown = 0;
Shutdown MySQL
remove ibtmp1
start MySQL.
&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;문서: https://dev.mysql.com/doc/refman/5.7/en/innodb-temporary-tablespace.html&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;mysql 5.7 이상에서는 ibtmp1 파일이 사용하는 공간을 다시 확보하기 위해 &lt;strong papago-id=&quot;11-1&quot;&gt;서비스를 재시작하기&lt;/strong&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;strong papago-id=&quot;12-3&quot;&gt;GLOBAL innodb_fast_&lt;/strong&gt; shutdown = &lt;strong papago-id=&quot;12-3&quot;&gt;0&lt;/strong&gt;을 설정하거나 파일을 수동으로 삭제할 &lt;strong papago-id=&quot;12-1&quot;&gt;필요&lt;/strong&gt;가 없습니다&lt;strong papago-id=&quot;12-3&quot;&gt;.&lt;/strong&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;/p&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;1- 다음 명령을 실행합니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;code&gt;sudo nano /etc/mysql/my.cnf&lt;/code&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;2 - [mysqld] 행 아래에 다음 행을 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;code&gt;innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:5G&lt;/code&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;3- 파일을 저장합니다.&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;4- 이제 디스크 공간을 좀 확보하고 ibtmp1을 삭제해야 합니다. SQL 서버를 다시 시작하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;sudo service mysql restart&lt;/code&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;URL : https://stackoverflow.com/questions/41216630/how-to-clean-or-resize-the-ibtmp1-file-in-mysql&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>MySQL</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1454</guid>
      <comments>https://mycopycode.tistory.com/1454#entry1454comment</comments>
      <pubDate>Thu, 19 Oct 2023 22:18:52 +0900</pubDate>
    </item>
    <item>
      <title>wooCommerce에서 add_to_cart() 메서드를 사용하는 방법은 무엇입니까?</title>
      <link>https://mycopycode.tistory.com/1453</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;wooCommerce에서 add_to_cart() 메서드를 사용하는 방법은 무엇입니까?&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;$woocommerce-&amp;gt;cart-&amp;gt;add_to_cart( $product_id, $quantity );
&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;add_to_cart()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;method는 실제로 5개의 parameter를 받아들입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 참조하십시오(WooCommerce 문서에서 가져온 것).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;add_to_cart( string $product_id, string $quantity = 1, integer $variation_id = '', array $variation = '', array $cart_item_data = array() )
&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;누가 마지막 3개의 파라미터가 무엇에 사용되는지 예를 들어줄 수 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;$variation_id&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;$variation&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;$cart_item_data&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;/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;blockquote&gt; 
 &lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;int $ variation_id&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;배열 $variation 특성 값&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;배열 $cart_item_data 추가 카트 항목 데이터 우리가 항목에 전달하고 싶은 데이터&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;a href=&quot;http://docs.woothemes.com/wc-apidocs/class-WC_Cart.html#_add_to_cart&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://docs.woothemes.com/wc-apidocs/class-WC_Cart.html#_add_to_cart&lt;/font&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;마지막 3개 파라미터의 경우 다음과 같이 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;$variation_id&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;: 제품이 변형인 경우, 이는 변형의 특정 포스트 ID가 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가하시는 제품이 단순 제품이거나 가변 제품이 아닌 경우에는 이를 비워두거나 0으로 설정하시면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;$variation&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&gt;&lt;code&gt;$cart_item_data&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 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;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;$gift_item = \wc_get_product($gift_item_id);
$gift_variation_id = 0;
$variation_data    = [];
// The Gift is a variation, so get the variation options that are associated with this product variation.
if ($gift_item-&amp;gt;is_type('variation')) {
    $gift_variation_id = $gift_item-&amp;gt;get_id();
    $variation_data    = wc_get_product_variation_attributes($gift_variation_id);              
}

//Check to see if the product is already in our cart and has an item meta of being a gift item
$gift_item_hash = $cart-&amp;gt;generate_cart_id($gift_item-&amp;gt;get_parent_id() ?: $gift_item-&amp;gt;get_id(), $gift_variation_id, $variation_data, [
    'gift'     =&amp;gt; true
]);

if ($cart-&amp;gt;find_product_in_cart($gift_item_hash) === false) {
    // Add the Gift to our cart. Add some meta data to the item so we can change it's price at checkout.
    $gift_cart_item_key = $cart-&amp;gt;add_to_cart($gift_item_id, $new_gift_quantity, $gift_variation_id, $variation_data, ['gift' =&amp;gt; true]);
}

&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/25181805/how-to-use-the-add-to-cart-method-in-woocommerce&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>Wordpress</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1453</guid>
      <comments>https://mycopycode.tistory.com/1453#entry1453comment</comments>
      <pubDate>Thu, 19 Oct 2023 22:18:46 +0900</pubDate>
    </item>
    <item>
      <title>파워셸을 사용하여 폴더의 내용을 다른 특정 폴더에 복사하는 방법?</title>
      <link>https://mycopycode.tistory.com/1452</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;code&gt;a&lt;/code&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;b&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;c&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;~\Source\x\&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;b&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;d&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;f&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;~\Destination\x\&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;a&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;c&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;~\Destination\x\&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;~\Destination\x\b&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;~\Source\x\b&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;code&gt;~\Destination\x\&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;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;code&gt;b&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;c&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;d&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;f&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;p papago-id=&quot;20&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.management/copy-item&quot; rel=&quot;noreferrer&quot; papago-id=&quot;20-0&quot;&gt;복사&lt;/a&gt; - 항목에 &lt;a href=&quot;https://stackoverflow.com/questions/14819205/using-powershell-i-want-to-forcefully-copy-folder-files-without-erasing-extra-fi&quot; papago-id=&quot;20-2&quot;&gt;힘&lt;/a&gt;을 적용하면 원하는 항목이 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[string]$sourceDirectory  = &quot;C:\Source\*&quot;
[string]$destinationDirectory = &quot;C:\Destination\&quot;
Copy-item -Force -Recurse -Verbose $sourceDirectory -Destination $destinationDirectory
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&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;-force&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;/blockquote&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/36310293/how-to-copy-content-of-a-folder-to-another-specific-folder-using-powershell&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>PowerShell</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1452</guid>
      <comments>https://mycopycode.tistory.com/1452#entry1452comment</comments>
      <pubDate>Thu, 19 Oct 2023 22:18:39 +0900</pubDate>
    </item>
    <item>
      <title>jquery에 !important 포함하는 방법</title>
      <link>https://mycopycode.tistory.com/1451</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jquery에 !important 포함하는 방법&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;jQuery를 사용하여 CSS 속성에 !important를 추가하려고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;tabs&quot;).css('height','650px;!important');
&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;하지만 !important는 영향을 주지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;jquery에 중요한 !을 포함시키는 방법은?&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;jQuery에서 이 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#tabs&quot;).css(&quot;cssText&quot;, &quot;height: 650px !important;&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;Src: http://bugs.jquery.com/ticket/2066&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;inputObj.css('cssText', inputObj.attr('style')+'padding-left: ' + (width + 5) + 'px !IMPORTANT;');
&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;따라서 inline-Style이 손실되지 않고 마지막이 첫 번째를 재정의합니다.&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;code&gt;inputObj.attr('style', 'color:black !important; background-color:#428bca !important;');&lt;/code&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;var tabsHeight = 650;

$(&quot;tabs&quot;).attr('style', 'height: '+ tabsHeight +'px !important');
&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;#CSS
.myclass{height:650px !important;}
&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;$(&quot;tabs&quot;).addClass(&quot;myclass&quot;);
&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;둘 이상의 항목에 대해 jquery use !important가 필요한 경우 이렇게 수행합니다.&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;img&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최대 너비 및 최대 높이 태그를 각각 500 px로 지정합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('img').css('cssText', &quot;max-width: 500px !important;' + &quot;max-height: 500px !important;');
&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;jquery를 사용하여 !important properties를 설정해야 할 때를 위해 여기 제가 구축한 플러그인이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.fn.important = function(key, value) {
    var q = Object.assign({}, this.style)
    q[key] = `${value} !important`;
    $(this).css(&quot;cssText&quot;, Object.entries(q).filter(x =&amp;gt; x[1]).map(([k, v]) =&amp;gt; (`${k}: ${v}`)).join(';'));
};

$('div').important('color', 'red');
&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;예를 들어, 최근에 우연히 발견한 경우 워드프레스 테마를 재정의하려면 !중요한 sscs 규칙을 재정의해야 합니다. 그러나 웹팩으로 코드를 변환하고 있었기 때문에 --) 변환된 자바스크립트 후에 내 cs가 체인에 추가되었기 때문에 as를 추가할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;cascade의 첫 번째 !important 규칙을 재정의하는 스타일시트의 클래스 규칙을 분리하고 css를 동적으로 조정하는 대신 무거운 클래스를 전환합니다.&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;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요없습니다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;!important&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery로 CSS를 수정할 때는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;style&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DOM의 요소에 직접 속성을 부여합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;!important&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 class=&quot;papago-parent&quot;&gt;수정&lt;/font&gt;&lt;/font&gt;&lt;code&gt;style&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;em papago-id=&quot;6-1&quot;&gt;수준&lt;/em&gt;입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;!important&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 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/1986182/how-to-include-important-in-jquery&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>jQuery</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1451</guid>
      <comments>https://mycopycode.tistory.com/1451#entry1451comment</comments>
      <pubDate>Thu, 19 Oct 2023 22:18:33 +0900</pubDate>
    </item>
    <item>
      <title>gdb의 메모리 범위를 보십니까?</title>
      <link>https://mycopycode.tistory.com/1450</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;gdb의 메모리 범위를 보십니까?&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;gdb 프로그램 디버깅 중인데 메모리 영역 0x08049000~0x0804a000 접속 시 프로그램이 중지되기를 원합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;메모리 중단점을 수동으로 설정하려고 하면 gdb가 한 번에 두 개 이상의 위치를 지원하지 않는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(gdb) awatch *0x08049000
Hardware access (read/write) watchpoint 1: *0x08049000
(gdb) awatch *0x08049001
Hardware access (read/write) watchpoint 2: *0x08049001
(gdb) awatch *0x08049002
Hardware access (read/write) watchpoint 3: *0x08049002
(gdb) run
Starting program: /home/iblue/git/some-code/some-executable
Warning:
Could not insert hardware watchpoint 3.
Could not insert hardware breakpoints:
You may have requested too many hardware breakpoints/watchpoints.
&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;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/6764544/how-can-gdb-be-used-to-watch-for-any-changes-in-an-entire-region-of-memory&quot; papago-id=&quot;2-1&quot;&gt;gdb를 사용하여 전체 메모리 영역의 변화를 확인할 수 있습니까?&lt;/a&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 papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;GDB 7.4를 Valgrind 3.7.0과 함께 사용하면 무제한의 &quot;에뮬레이트된&quot; 하드웨어 워치포인트가 있습니다.&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;Valgrind에서 프로그램을 시작하고 인수를 제시합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--vgdb=full --vgdb-error=0&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;GDB를 사용하여 연결합니다(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;target remote | vgdb&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;watch&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;awatch&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;rwatch&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;rwatch (char[100]) *0x5180040&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;i papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은 &lt;a href=&quot;http://www.valgrind.org/docs/manual/manual-core-adv.html#manual-core-adv.gdbserve&quot; rel=&quot;noreferrer&quot; papago-id=&quot;11-1&quot;&gt;gdb 통합에 대한 Valgrind 사용자 설명서&lt;/a&gt; 참조&lt;/font&gt;&lt;/i&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://en.wikipedia.org/wiki/Breakpoint#Hardware&quot; papago-id=&quot;12-1&quot;&gt;하드웨어 중단점&lt;/a&gt;이라고 하며, 실제로는 특정 주소에 액세스할 때를 감지하고 디버거 중단 인터럽트를 트리거하는 메모리 컨트롤러 내부의 레지스터입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;안타깝게도 &lt;a href=&quot;http://www.intel.com/Assets/ja_JP/PDF/manual/253668.pdf&quot; papago-id=&quot;12-3&quot;&gt;x86 아키텍처&lt;/a&gt;에는 &lt;a href=&quot;http://en.wikipedia.org/wiki/X86_debug_register&quot; papago-id=&quot;12-5&quot;&gt;이러한 레지스터가 4개밖에 없기&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;그렇기 때문에 valgrind와 같은 것을 사용해야 합니다. 전체 지역을 시청하려면 메모리 액세스 패턴을 시뮬레이션하는 소프트웨어를 사용해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;valgrind가 실제로 전체 메모리 범위를 시청할 수 있는지는 모르겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;직접 패치를 붙여야 할 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;VALGRIND_MAKE_MEM_NOACCESS()를 수정하여 중단점을 던지지만 프로그램을 계속 진행할 수 있습니다.&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;저는 최근 gdb 자체가 지금 다양한 주소를 볼 수 있다는 것을 확인했습니다. 그러면 다른 답변들이 제시한 것처럼 valgrind가 필수가 아닙니다. 테스트 env:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;GNU gdb (Ubuntu 12.1-0ubuntu1~22.04) 12.1&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;11세대 인텔(R) 코어(TM) i7-11800H @ 2.30GHz&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&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;watch *(char [100]*)&amp;amp;gbuf
&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;[gbuf, gbuf + 100)&lt;/code&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;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/11004374/watch-a-memory-range-in-gdb&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>C</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1450</guid>
      <comments>https://mycopycode.tistory.com/1450#entry1450comment</comments>
      <pubDate>Thu, 19 Oct 2023 22:18:26 +0900</pubDate>
    </item>
    <item>
      <title>여러 테이블이 레일에서 결합</title>
      <link>https://mycopycode.tistory.com/1449</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;아래의 mysql 쿼리를 레일 액티브 레코드에 어떻게 쓰나요?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select
    A.*,
    B.* 
from
    raga_contest_applicants_songs AS A 
    join
        raga_contest_applicants AS B 
        ON B.contest_applicant_id = A.contest_applicant_id 
    join
        raga_contest_rounds AS C 
        ON C.contest_cat_id = B.contest_cat_id 
WHERE
    C.contest_cat_id = contest_cat_id 
GROUP BY
    C.contest_cat_id    
&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;질문에 나온 SQL 쿼리를 다시 쓰려면 다음과 같이 해야 한다고 생각합니다(모델 관계를 완전히 시각화하는 데 어려움을 겪고 있으므로 이는 약간의 추측입니다).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;RagaContextApplicantsSong.
  joins(:raga_contest_applicants =&amp;gt; [:raga_content_rounds], :contest_cat).
  group('raga_contest_rounds.contest_cat_id')
&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;joins&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;method는 두 join 뿐만 아니라 두 join 모두를 돌봅니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;WHERE&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;group&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;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;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://guides.rubyonrails.org/active_record_querying.html#joining-tables&quot; papago-id=&quot;9-1&quot; rel=&quot;noreferrer&quot;&gt;간단히 나열&lt;/a&gt;할 수 &lt;a href=&quot;http://guides.rubyonrails.org/active_record_querying.html#joining-tables&quot; papago-id=&quot;9-1&quot; rel=&quot;noreferrer&quot;&gt;있습니다&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Post.joins(:category, :comments)
Returns all posts that have a category and at least one comment
&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;Post.joins(:comments =&amp;gt; :guest)
Returns all comments made by a guest
&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;Category.joins(:posts =&amp;gt; [{:comments =&amp;gt; :guest}, :tags])
Returns all posts with their comments where the post has at least one comment made by a guest
&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;다음과 같이 ActiveRecord Query Interface 호출을 체인으로 연결할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Post.joins(:category, :comments)
...produces the same SQL as...
Post.joins(:category).joins(:comments)
&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;a href=&quot;http://guides.rubyonrails.org/active_record_querying.html#using-a-string-sql-fragment&quot; papago-id=&quot;13-1&quot; rel=&quot;noreferrer&quot;&gt;항상&lt;/a&gt; SQL 조각을 &lt;a href=&quot;http://guides.rubyonrails.org/active_record_querying.html#using-a-string-sql-fragment&quot; papago-id=&quot;13-1&quot; rel=&quot;noreferrer&quot;&gt;메소드&lt;/a&gt;로 직접 &lt;a href=&quot;http://guides.rubyonrails.org/active_record_querying.html#using-a-string-sql-fragment&quot; papago-id=&quot;13-1&quot; rel=&quot;noreferrer&quot;&gt;전달&lt;/a&gt;하여 작업 쿼리에서 보다 ARQI 중심적인 것으로 전환할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   Client.joins('LEFT OUTER JOIN addresses ON addresses.client_id = clients.id')
=&amp;gt; SELECT clients.* FROM clients LEFT OUTER JOIN addresses ON addresses.client_id = clients.id
&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/16131201/multiple-table-joins-in-rails&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>MySQL</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1449</guid>
      <comments>https://mycopycode.tistory.com/1449#entry1449comment</comments>
      <pubDate>Thu, 19 Oct 2023 22:18:19 +0900</pubDate>
    </item>
    <item>
      <title>HTML/CSS로 브라우저 양식 채우기 및 입력 강조 표시 재정의</title>
      <link>https://mycopycode.tistory.com/1448</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML/CSS로 브라우저 양식 채우기 및 입력 강조 표시 재정의&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;del papago-id=&quot;1-1&quot;&gt;없지만&lt;/del&gt;, &lt;del papago-id=&quot;1-1&quot;&gt;사인폼도 자동채움에 문제&lt;/del&gt;가 없고,&lt;del papago-id=&quot;1-1&quot;&gt; 마음에 들지&lt;/del&gt; 않습니다&lt;del papago-id=&quot;1-1&quot;&gt;.&lt;/del&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;또한 폼 스타일이 노란색 배경을 갖게 되어 오버라이드 할 수 없고 인라인 CSS를 사용하고 싶지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;노란색으로 칠해지거나 &lt;del papago-id=&quot;2-1&quot;&gt;자동 충전&lt;/del&gt;이 되지 않게 하려면 어떻게 해야 합니까&lt;del papago-id=&quot;2-1&quot;&gt;?&lt;/del&gt;&lt;/font&gt;&lt;/p&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;업데이트: 최신 Chrome 버전에서는 작동하지 않습니다.&lt;/font&gt;&lt;/strong&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;&quot;강한&quot; 안쪽 그림자로 속입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;input:-webkit-autofill {
    -webkit-box-shadow:0 0 0 50px white inset; /* Change the color to your own background color */
    -webkit-text-fill-color: #333;
}

input:-webkit-autofill:focus {
    -webkit-box-shadow: 0 0 0 50px white inset;/*your box-shadow*/
    -webkit-text-fill-color: #333;
} 
&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;form autocomplete=&quot;off&quot;&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;당신의 스크린샷으로부터 나는 웹킷이 다음과 같은 스타일을 생성하는 것을 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;input:-webkit-autofill {
    background-color: #FAFFBD !important;
}
&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;1) #id-styles가 .class styles보다 훨씬 더 중요하기 때문에 다음이 작동할 수 &lt;em papago-id=&quot;8-1&quot;&gt;있습니다&lt;/em&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#inputId:-webkit-autofill {
    background-color: white !important;
}
&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;2) 만약 그것이 작동하지 않는다면, 당신은 javascript를 통해 프로그래밍 방식으로 스타일을 설정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;input[type='text']&quot;).bind('focus', function() {
   $(this).css('background-color', 'white');
});
&lt;/code&gt;&lt;/pre&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;3) 그게 안된다면,&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strike papago-id=&quot;10-1&quot;&gt;
&lt;/strike&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strike papago-id=&quot;10-1&quot;&gt;   당신은 끝장입니다 :-)&lt;/strike&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strike papago-id=&quot;10-1&quot;&gt; &lt;/strike&gt; 예를 들어, 이렇게 하면 노란색이 가려지지 않지만 텍스트를 다시 읽을 수 있습니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;input:-webkit-autofill {
        color: #2a2a2a !important; 
    }
&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;4) CSS/jav스크립트 솔루션:&lt;/font&gt;&lt;/strong&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;CSS:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;input:focus {
    background-position: 0 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;그리고 다음 javascript는 load에서 실행되어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function loadPage()
{
    if (document.login)//if the form login exists, focus:
    {
        document.login.name.focus();//the username input
        document.login.pass.focus();//the password input
        document.login.login.focus();//the login button (submitbutton)
    }
}
&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;&amp;lt;body onload=&quot;loadPage();&quot;&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;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;5) 위의 작업 중 입력 요소를 제거하고 복제한 다음 복제된 요소를 페이지에 다시 배치하는 작업이 없을 경우(Safari 6.0.3에서 작동):&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script&amp;gt;
function loadPage(){

    var e = document.getElementById('id_email');
    var ep = e.parentNode;
    ep.removeChild(e);
    var e2 = e.cloneNode();
    ep.appendChild(e2);

    var p = document.getElementById('id_password');
    var pp = p.parentNode;
    pp.removeChild(p);
    var p2 = p.cloneNode();
    pp.appendChild(p2);
}

document.body.onload = loadPage;
&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;6) &lt;a href=&quot;http://code.google.com/p/chromium/issues/detail?id=46543#c22&quot; rel=&quot;noreferrer&quot; papago-id=&quot;17-1&quot;&gt;여기&lt;/a&gt;서부터:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (navigator.userAgent.toLowerCase().indexOf(&quot;chrome&quot;) &amp;gt;= 0) {
    $(window).load(function(){
        $('input:-webkit-autofill').each(function(){
            var text = $(this).val();
            var name = $(this).attr('name');
            $(this).after(this.outerHTML).remove();
            $('input[name=' + name + ']').val(text);
        });
    });
}
&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;이 CSS 규칙을 추가하면 노란색 배경색이 사라집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;:)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;input:-webkit-autofill {
    -webkit-box-shadow: 0 0 0px 1000px white inset;
}
&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;이 여전히 하는 것  사항을 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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;호버, 포커스 등에도 효과가 있을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가하기만 하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;!important&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;input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active {
    -webkit-box-shadow: 0 0 0px 1000px white inset !important;
}
&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;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&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;input {
  -webkit-background-clip: text !important;
}&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;form autocomplete=&quot;off&quot;&amp;gt;
&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;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;&amp;lt;form&amp;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 class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;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;&amp;lt;input&amp;gt;&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;pre&gt;&lt;code&gt;&amp;lt;form autocomplete=&quot;off&quot;&amp;gt;  AND  &amp;lt;input autocomplete=&quot;off&quot;&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;그러나 이 특성에 대한 지원은 중단됩니다. https://bugzilla.mozilla.org/show_bug.cgi?id=956906#c1 을 읽어보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=956906&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;https://bugzilla.mozilla.org/show_bug.cgi?id=956906&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;hr&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;&quot;당신의 이메일&quot;, &quot;이메일&quot; 등)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/3WE5U.png&quot; alt=&quot;enter image description here&quot;&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;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;그러나 firefox 2.x+와 Google chrome은 요청 url이 동일하다면 큰 문제가 없을 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 salt request param과 salt field name을 sign-up form에 추가해보세요.&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;하지만 autoccomplete=&quot;Off&quot;가 여전히 최고의 솔루션이라고 생각합니다. :)&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;HTML5 기준으로 자동 완료를 비활성화할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;autocomplete=&quot;off&quot;&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;당신은 장난칠 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;::selection&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;CSS에서 (대부분의 브라우저는 그것이 작동하기 위해 벤더 접두사가 필요하지만, 그것은 아마도 당신에게도 도움이 되지 않을 것입니다.&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;브라우저 공급업체가 벤더 고유의 재정의 방법을 구체적으로 구현하지 않는 한, 이미 사용자의 사이트 스타일시트를 재정의하도록 의도된 스타일에 대해서는 아무 조치도 취할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 스타일시트를 적용하고 무시한 후 적용됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;! important&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&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;  // Workaround to remove autofill color from inputs
  input, select {
    color: #fff !important;
    -webkit-text-fill-color: #fff !important;
    -webkit-background-clip: text !important;
    background-clip:  text !important;
  }
&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;이것은 제가 테스트한 바로는 iOS에서 사파리와 크롬 그리고 안드로이드에서 크롬에서 작동합니다.&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;if(navigator.userAgent.toLowerCase().indexOf(&quot;chrome&quot;) &amp;gt;= 0 || navigator.userAgent.toLowerCase().indexOf(&quot;safari&quot;) &amp;gt;= 0){
window.setInterval(function(){
    $('input:-webkit-autofill').each(function(){
        var clone = $(this).clone(true, true);
        $(this).after(clone).remove();
    });
}, 20);
}
&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;수용된 답변은 구체적인 사례에 대한 좋은 답변이었을 수도 있지만, 저는 배경이 투명한 각진 소재를 사용하고 있었고, 여기에 &amp;lt;입력&amp;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;저는 자동 채우기 의사 요소에 매우 긴 전환을 강요하는 이 수정된 솔루션을 만들었습니다. 따라서 사용자가 설정한 1000000000초 정도의 상당 시간 동안 동일한 페이지에 머물지 않는 한 속성의 변화가 눈에 띄지 않도록 말입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-css prettyprint-override&quot;&gt;&lt;code&gt;input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
textarea:-webkit-autofill,
textarea:-webkit-autofill:hover,
textarea:-webkit-autofill:focus,
select:-webkit-autofill,
select:-webkit-autofill:hover,
select:-webkit-autofill:focus {
  transition: all 10000000s;
}
&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 class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;form&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;autocomplete&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;off&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; . CSS &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;!important&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;background-color: white !important;
&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;IE6만 못 알아듣습니다.&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;outline&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;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;입력 필드에 있는 경우 &quot;노란색으로 표시 안 함&quot;...&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS로 배경색 설정...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;#ccc(연회색)라고 합시다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필드를 임시로 &quot;sometext&quot;로 채우는 add value=&quot;sometext&quot;&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;(선택사항) 실제 텍스트를 넣으러 갈 때 &quot;sometext&quot;를 명확하게 하기 위해 자바스크립트를 약간 추가합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&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;&amp;lt;input id=&quot;login&quot; style=&quot;background-color: #ccc;&quot; value=&quot;username&quot;
    onblur=&quot;if(this.value=='') this.value='username';&quot; 
    onfocus=&quot;if(this.value=='username') this.value='';&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;약간의 CSS 해킹을 사용해 보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;input:-webkit-autofill, 
input:-webkit-autofill:hover, 
input:-webkit-autofill:focus, 
textarea:-webkit-autofill, 
textarea:-webkit-autofill:hover, 
textarea:-webkit-autofill:focus, 
select:-webkit-autofill, 
select:-webkit-autofill:hover, 
select:-webkit-autofill:focus, 
input:-internal-autofill-selected {
    -webkit-text-fill-color: #000;
    background: #fff !important;
    box-shadow: inset 0 0 0 1px rgb(255 255 255 / 0%), inset 0 0 0 100px #fff;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그들의 의견에 대한 투명한 배경을 원하는 사람들을 위해 &lt;a href=&quot;https://stackoverflow.com/users/3188724/wahmal&quot; papago-id=&quot;58-3&quot;&gt;와말&lt;/a&gt;의 이 &lt;a href=&quot;https://stackoverflow.com/a/44861998/2474466&quot; papago-id=&quot;58-1&quot;&gt;훌륭한 해결책&lt;/a&gt;을 공유하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본 입력 스타일에서 자동 채우기를 위한 웹킷 스타일로 전환할 때 오랜 지연 시간을 추가하여 모든 성가신 웹킷 기본 스타일을 무시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active {
   -webkit-transition-delay: 9999s;
   transition-delay: 9999s;
}&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&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&gt;&lt;code&gt;input:-webkit-autofill&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 class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 CSS에 넣어보셨나요?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;input:-webkit-autofill {
    background-color: white !important;
}
&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;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;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;&amp;lt;!--
  if(window.attachEvent)
    window.attachEvent(&quot;onload&quot;,setListeners);

  function setListeners(){
    inputList = document.getElementsByTagName(&quot;INPUT&quot;);
    for(i=0;i&amp;lt;inputList.length;i++){
      inputList[i].attachEvent(&quot;onpropertychange&quot;,restoreStyles);
      inputList[i].style.backgroundColor = &quot;&quot;;
    }
    selectList = document.getElementsByTagName(&quot;SELECT&quot;);
    for(i=0;i&amp;lt;selectList.length;i++){
      selectList[i].attachEvent(&quot;onpropertychange&quot;,restoreStyles);
      selectList[i].style.backgroundColor = &quot;&quot;;
    }
  }

  function restoreStyles(){
    if(event.srcElement.style.backgroundColor != &quot;&quot;)
      event.srcElement.style.backgroundColor = &quot;&quot;;
  }//--&amp;gt;
&amp;lt;/script&amp;gt;
&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;첨부된 이벤트를 느슨하게 하지 않기 위해, 저는 다른 (조금 긴) 해결책을 생각해 냈습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 &quot;입력&quot; 이벤트가 발생할 때마다 &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;/p&gt; 
&lt;pre&gt;&lt;code&gt;var initialFocusedElement = null
  , $inputs = $('input[type=&quot;text&quot;]');

var removeAutofillStyle = function() {
  if($(this).is(':-webkit-autofill')) {
    var val = this.value;

    // Remove change event, we won't need it until next &quot;input&quot; event.
    $(this).off('change');

    // Dispatch a text event on the input field to trick the browser
    this.focus();
    event = document.createEvent('TextEvent');
    event.initTextEvent('textInput', true, true, window, '*');
    this.dispatchEvent(event);

    // Now the value has an asterisk appended, so restore it to the original
    this.value = val;

    // Always turn focus back to the element that received 
    // input that caused autofill
    initialFocusedElement.focus();
  }
};

var onChange = function() {
  // Testing if element has been autofilled doesn't 
  // work directly on change event.
  var self = this;
  setTimeout(function() {
    removeAutofillStyle.call(self);
  }, 1);
};

$inputs.on('input', function() {
  if(this === document.activeElement) {
    initialFocusedElement = this;

    // Autofilling will cause &quot;change&quot; event to be 
    // fired, so look for it
    $inputs.on('change', onChange);
  }
});
&lt;/code&gt;&lt;/pre&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;setTimeout(function() {
    $(&quot;.parent input&quot;).each(function(){
        parent = $(this).parents(&quot;.parent&quot;);
        $(this).clone().appendTo(parent);   
        $(this).attr(&quot;id&quot;,&quot;&quot;).attr(&quot;name&quot;,&quot;&quot;).hide();
    }); 
}, 300 );
&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;iPad의 경우 시간 초과가 필요합니다.&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;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- unused field to stop browsers from overriding form style --&amp;gt;
&amp;lt;input type='password' style = 'display:none' /&amp;gt;
&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;font class=&quot;papago-parent&quot;&gt;그 모든 것을 수집한 후 로그인 및 비밀번호 필드를 깨끗이 비우고 배경을 흰색으로 재설정할 수 있는 유일한 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(window).load(function() {
    setTimeout(function() {
        $('input:-webkit-autofill')
            .val('')
            .css('-webkit-box-shadow', '0 0 0px 1000px white inset')
            .attr('readonly', true)
            .removeAttr('readonly')
        ;
    }, 50);
});
&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 papago-id=&quot;70&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과 JS로 된 작은 트랙이었습니다.&lt;/font&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 class=&quot;input input-xxl input-watery&quot; type=&quot;text&quot; name=&quot;password&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;괜찮습니다.&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;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 이벤트 포커스를 암호 필드에 바인딩합니다(예: Backbone:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;'focusin input[name=password]': 'onInputPasswordFocusIn',
&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;onInputPasswordFocusIn&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;if (e.currentTarget.value === '') {
    $(e.currentTarget).attr('type', 'password');
}
&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;그거에요!&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트: 이 작업은 비활성화된 JavaSciprt에서 작동하지 않습니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;77&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2018년 업드.&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;/strong&gt;&lt;/p&gt;&lt;p papago-id=&quot;78&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;텍스트 색상도 더 어두운 것으로 변경해야 했습니다(StackOverflow 어두운 테마 색상 참조).&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;따라서 @Tamás Pap, @MCBL 및 @don's 솔루션이 혼합된 결과로 이어졌습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active {
    -webkit-box-shadow: 0 0 0px 1000px #2d2d2d inset !important;
    -webkit-text-stroke-color: #e7e8eb !important;
    -webkit-text-fill-color: #e7e8eb !important;
}
&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&gt;&lt;code&gt;:-webkit-autofill&lt;/code&gt;&lt;/p&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&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;br&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;그리고 Firefox의 경우 추가로 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;filter:none&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;pre class=&quot;lang-css prettyprint-override&quot;&gt;&lt;code&gt;:-webkit-autofill { 
    filter:none; /* needed for firefox! */
    box-shadow: 0 0 0 100px rgba(38, 163, 48, 0.212) inset;
}
&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;입력 태그에 autoccomplete=&quot; none&quot;을(를) 사용해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;/p&gt;&lt;p papago-id=&quot;87&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그냥 CSS에 넣어두는게 어때요?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;input --webkit-autocomplete {
  color: inherit;
  background: inherit;
  border: inherit;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;88&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;89&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;[edit] 이 글을 올린 후에 비슷한 답변이 이미 &lt;em papago-id=&quot;89-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;90&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;text&quot; name=&quot;foo&quot;...](즉, 속성 'name'에 대해 동일한 값을 갖는) [양식]이 둘 이상 있을 경우, 사용자가 페이지로 돌아오면 자동 채우기가 전송된 [양식]이 아닌 페이지의 FIRST [양식] 입력 필드에서 수행됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 번째로 NEXT [양식]이 자동으로 채워지는 등의 과정을 거칩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이름이 동일한 입력 텍스트 필드를 가진 [form]만 해당됩니다.&lt;/font&gt;&lt;/p&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;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;p papago-id=&quot;93&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Firefox와 IE는 자동으로 채워지지 않습니다.&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;/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;URL : https://stackoverflow.com/questions/2338102/override-browser-form-filling-and-input-highlighting-with-html-css&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>CSS</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1448</guid>
      <comments>https://mycopycode.tistory.com/1448#entry1448comment</comments>
      <pubDate>Thu, 19 Oct 2023 22:18:12 +0900</pubDate>
    </item>
    <item>
      <title>mySQL 쿼리가 서버를 손상시키는 것 같습니다.</title>
      <link>https://mycopycode.tistory.com/1447</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mySQL 쿼리가 서버를 손상시키는 것 같습니다.&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;워드프레스에서 상당히 복잡한 검색을 처리할 수 있는 mySQL 쿼리를 가지고 있습니다. 왜냐하면 저는 그 검색을 하는 데 어려움을 겪었기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;wp_query&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&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 쿼리를 실행하는 데 시간이 오래 걸리는 경우도 있고(때로는 10초 이상!) 서버가 다운되는 것처럼 보이는 경우도 있습니다(미디어 템플 그리드).&lt;/font&gt;&lt;/font&gt;&lt;code&gt;internal server error&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;Error establishing database connection&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;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리에 일반적인 구문 오류가 있어서 충돌이 발생하는지는 확실하지 않지만 쿼리를 생성하는 PHP는 기본적으로 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?php

// declare wordpress database global
global $wpdb;

// order by option
$order = $_SESSION['search']['sort-by'];

// users lat, long and distance preferences
$lat = $_SESSION['search']['lat'];
$long = $_SESSION['search']['long'];
$radius = $_SESSION['search']['distance'];

// user search start/end date
$startDate = date('Ymd', strtotime($_SESSION['search']['from']));
$endDate = date('Ymd', strtotime($_SESSION['search']['to']));

// get the main category search ID
$maincat = get_term_by( 'slug', $_SESSION['search']['cat'], 'main-cat');
$maincat = $maincat-&amp;gt;term_taxonomy_id;

// grab keywords, replace special chars and spaces
$keywords = $_SESSION['search']['keyword'];
$keywords = preg_replace('/[^A-Za-z0-9 ,]/u','', strip_tags($keywords));
$keywords = str_replace(' ', '', $keywords);

// put keywords into array
$subcatItems = explode(',', $keywords);
$keywords = $subcatItems;

// for each keywords get the sub category id's
$subcats = array();
$count = count($subcatItems) - 2;
for ($i = 0; $i &amp;lt;= $count; $i++) {
    $subcatItems[$i] = get_term_by( 'slug', $subcatItems[$i], 'sub-cat');
    if ($subcatItems[$i] != '') : 
        $subcatItems[$i] = $subcatItems[$i]-&amp;gt;term_taxonomy_id;
        array_push($subcats, $subcatItems[$i]);
    endif;
}
if( $subcats != '' ) :
    $subcats = implode(',', $subcats);
endif;



// select
$query = 'SELECT SQL_CALC_FOUND_ROWS wp_posts.*, ';


// geo locate
$query .= '( 3959 * acos(
     cos( radians('.$lat.') ) 
     * cos( radians( lat ) ) 
     * cos( radians( lng ) - radians('.$long.') ) 
     + sin( radians('.$lat.') ) 
     * sin( radians( lat ) ) 
     ) ) 
 AS distance , lat AS  latitude , lng AS longitude ';


 // from
 $query .= 'FROM wp_posts ';


 // inner joins
 $query .= 'INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) ';
 if ( $keywords != '' ) :
    $query .= 'INNER JOIN wp_term_relationships AS tt1 ON (wp_posts.ID = tt1.object_id) ';
 endif;
 $query .= 'INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) ';
 $query .= 'INNER JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id) ';

 // if ordered by price, join post meta again
 if( $order == 'mt2.meta_value+0' ) :
     $query .= 'INNER JOIN wp_postmeta AS mt2 ON (wp_posts.ID = mt2.post_id) ';
 endif;

 // if there are keywords 
 if ( $keywords != '' ) :
    $query .= 'INNER JOIN wp_postmeta AS mt3 ON (wp_posts.ID = mt3.post_id) ';
 endif;

 // join table to geo locate
 $query .= 'INNER JOIN lat_lng_post ON wp_posts.ID = lat_lng_post.post_id ';


 // basic filter
 $query .= 'WHERE 1=1 ';
 $query .= 'AND wp_posts.post_type = &quot;event&quot; '; 
 $query .= 'AND wp_posts.post_status = &quot;publish&quot; ';


 // geo filter
 $query .= 'AND lat_lng_post.lat = lat ';
 $query .= 'AND lat_lng_post.lng = lng ';


 // date filter
 $query .= 'AND ( '; 
 $query .= '(wp_postmeta.meta_key LIKE &quot;date_%_start-date&quot; AND CAST(wp_postmeta.meta_value AS SIGNED) &amp;lt;= &quot;'.$endDate.'&quot;) ';
 $query .= 'AND (mt1.meta_key LIKE &quot;date_%_end-date&quot; AND CAST(mt1.meta_value AS SIGNED) &amp;gt;= &quot;'.$startDate.'&quot;) ';
 $query .= 'AND substr(wp_postmeta.meta_key, 1, 6) = substr(mt1.meta_key, 1, 6)  ';
 $query .= ') ';


 // taxonomies filter
 $query .= 'AND ( wp_term_relationships.term_taxonomy_id IN ('.$maincat.') ) ';

 // if keywords
 if ( $_SESSION['search']['keyword'] != '' ) :
    $query .= 'AND ( ';

    // for each keyword, and a statement to check post title
    $keywordCount = 0;
    foreach ( $keywords as $keyword ) :
        if( $keyword != '' ) :
            if( $keywordCount == 0 ) :
                $query .= '(wp_posts.post_title LIKE &quot;%'.$keyword.'%&quot;) ';
            else :
                $query .= 'OR (wp_posts.post_title LIKE &quot;%'.$keyword.'%&quot;) ';
            endif;
        endif;
        $keywordCount++;
    endforeach;

    // for each keyword, and a statement to check description
    foreach ( $keywords as $keyword ) :
        if( $keyword != '' ) :
            $query .= 'OR (mt3.meta_key = &quot;description&quot; AND mt3.meta_value LIKE &quot;%'.$keyword.'%&quot;) ';
        endif;
    endforeach;

    // for each keyword, and a statement to check sub category taxonomy
    if( $subcats != '' ) :
        $query .= 'OR ( tt1.term_taxonomy_id IN ('.$subcats.') )';
    endif;

    $query .= ') ';
 endif;     


 // if ordered by adult
 if( $order == 'mt2.meta_value+0' ) :
     $query .= 'AND mt2.meta_key = &quot;adult&quot; ';
 endif;

 // grouping and sorting
 $query .= 'GROUP BY wp_posts.ID ';
 $query .= 'HAVING distance &amp;lt;= '.$radius.' ';
 $query .= 'ORDER BY '.$order.' ASC ';
 $query .= 'LIMIT 0, 10';

 $events = $wpdb-&amp;gt;get_results( $query, 'OBJECT' ); 

?&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;font class=&quot;papago-parent&quot;&gt;그리고 더 필요한 정보가 있다면 기꺼이 제공해 드립니다 :)&lt;/font&gt;&lt;/p&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;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;if ( $_SESSION['search']['keyword'] != '' ) :
    $query .= 'AND ( ';

    // for each keyword, and a statement to check post title
    $keywordCount = 0;
    foreach ( $keywords as $keyword ) :
        if( $keyword != '' ) :
            if( $keywordCount == 0 ) :
                $query .= '(wp_posts.post_title LIKE &quot;%'.$keyword.'%&quot;) ';
            else :
                $query .= 'OR (wp_posts.post_title LIKE &quot;%'.$keyword.'%&quot;) ';
            endif;
        endif;
        $keywordCount++;
    endforeach;

    // for each keyword, and a statement to check description
    foreach ( $keywords as $keyword ) :
        if( $keyword != '' ) :
            $query .= 'OR (mt3.meta_key = &quot;description&quot; AND mt3.meta_value LIKE &quot;%'.$keyword.'%&quot;) ';
        endif;
    endforeach;

    // for each keyword, and a statement to check sub category taxonomy
    if( $subcats != '' ) :
        $query .= 'OR ( tt1.term_taxonomy_id IN ('.$subcats.') )';
    endif;

    $query .= ') ';
 endif;
&lt;/code&gt;&lt;/pre&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;EDIT 2&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;방금 생각한 또 다른 생각인데, 쿼리를 별도의 쿼리로 나누는 것이 더 빠를까요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 먼저 지오 쿼리를 완료하고 포스트 ID를 사용한 후 날짜 쿼리를 수행하면 키워드가 쿼리를 수행할 수 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL이 처음이라 최적화하는 방법을 잘 모르겠습니다. :/&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;큰 세트를 얻는 대신 조인에서 여러 조건을 사용한 후 마지막에 조건을 넣으면 세트가 작아지고 응답 시간이 더 단축될 수 있습니다.&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;AND wp_posts.post_type = &quot;event&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;INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) AND wp_posts.post_type = &quot;event&quot;
INNER JOIN...
&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/24569924/mysql-query-seems-to-crash-server&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>Wordpress</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1447</guid>
      <comments>https://mycopycode.tistory.com/1447#entry1447comment</comments>
      <pubDate>Thu, 19 Oct 2023 22:18:00 +0900</pubDate>
    </item>
    <item>
      <title>Objective-C에서 개체 크기 확인</title>
      <link>https://mycopycode.tistory.com/1446</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;objective-c 객체의 크기를 찾으려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 다음과 유사한 것을 사용하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    NSLog(@&quot;sizeof myObject: %ld&quot;, sizeof(*myObject));
&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;내가 뭘 잘못하고 있는 거지?&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;h3 papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ARC 포함:&lt;/font&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;#import &amp;lt;malloc/malloc.h&amp;gt;

// ...

NSLog(@&quot;Size of %@: %zd&quot;, NSStringFromClass([myObject class]), malloc_size((__bridge const void *) myObject));
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3 papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ARC 미포함:&lt;/font&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;#import &amp;lt;malloc/malloc.h&amp;gt;

// ...

NSLog(@&quot;size of myObject: %zd&quot;, malloc_size(myObject));
&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;a href=&quot;http://mikeash.com/?page=pyblog/friday-qa-2009-03-13-intro-to-the-objective-c-runtime.html&quot; papago-id=&quot;7-1&quot; rel=&quot;noreferrer&quot;&gt;Mike&lt;/a&gt; Ash는 http://mikeash.com/ ?page=&lt;a href=&quot;http://mikeash.com/?page=pyblog/friday-qa-2009-03-13-intro-to-the-objective-c-runtime.html&quot; papago-id=&quot;7-1&quot; rel=&quot;noreferrer&quot;&gt;pyblog/&lt;/a&gt;friday-qa-2009-03-13-intro-to-the-objective-c-runtime에 Obj-C &lt;a href=&quot;http://mikeash.com/?page=pyblog/friday-qa-2009-03-13-intro-to-the-objective-c-runtime.html&quot; papago-id=&quot;7-1&quot; rel=&quot;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;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;GNU Objective-C 런타임에서는 다음을 사용할 수 있습니다(가져와야 함).&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;objc/objc-api.h&amp;gt;&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;class_get_instance_size ([MyClass class]);
&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;Mac OS X에서는 사용할 수 있습니다(가져올 필요가 있을 수 있음).&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;objc/runtime.h&amp;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&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class_getInstanceSize ([MyClass class]);
&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 papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우선, 위의 게시물을 통해 Jason과 Mac OS 참조 매뉴얼에 제시된 대로 malloc_size(myObject)로 객체 크기가 부여됨이 분명하다고 생각합니다.&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;&quot;malloc_size(&lt;em papago-id=&quot;14-1&quot;&gt;ptr&lt;/em&gt;) 함수는 &lt;em papago-id=&quot;14-3&quot;&gt;ptr&lt;/em&gt;이 가리키는 할당을 백업하는 메모리 블록의 크기를 반환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;메모리 블록 크기는 항상 백업하는 할당만큼 크며, 더 클 수도 있습니다.&quot; (http://developer.apple.com/library/mac/ #&lt;a href=&quot;http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/malloc_size.3.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;14-5&quot;&gt;document/Darwin/Reference/ManPages/man3/malloc_size.3.html&lt;/a&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;사전은 키-값 쌍을 저장하며 값 부분에 개체 자체를 포함하지 &lt;strong papago-id=&quot;16-1&quot;&gt;않고&lt;/strong&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;따라서 사전에서 참조하는 모든 개체의 개체 크기를 찾고 있다면 엄밀히 말하면 사전의 크기가 아닐 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사전의 크기는 모든 키의 크기와 키에 대한 모든 값 참조의 크기의 합 및 상위 NSO 개체의 크기입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;참조된 개체의 크기도 확인하고 싶다면 사전 값 배열 위에서 반복해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;NSArray *myArray = [myDictionary allValues];
id obj = nil;
int totalSize = 0;
for(obj in myArray)
{
    totalSize += malloc_size(obj);
}
//totalSize now contains the total object size of the refered objects in the dictionary.
&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;(객관적-c) 개체의 크기는 정의하기도 쉽지 않기 때문에 찾기가 쉽지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;목적어-c 객체의 크기&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;참조의 크기는 포인터의 크기입니다((obj_ref)의 크기로 반환됨).&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;생성 시 할당된 메모리의 크기(+alloc)는 제이슨이 첫 번째 답변에서 제시한 방법으로 알 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 이는 런타임에 따라 달라집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;gnu-runtime은 apple-runtime과 다릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;결국 인스턴스가 구성하는 기본 데이터 유형에 필요한 메모리만 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 ivar 또는 문자열이 참조하는 개체에 대해 나중에(즉, 초기화(-init)) 할당할 수 있는 메모리는 &lt;strong papago-id=&quot;20-1&quot;&gt;아닙니다&lt;/strong&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;@interface FirstClass
{
    int _someInt;
    char _someChar;
}
…
@end
&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;최소 5바이트가 필요합니다(많은 시스템에서 -&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;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;@interface SecondClass
{
    FirstClass *_someObject;
    char *_name;
    id _data;
}
…
@end
&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;&quot;크기&quot;의 정의는 복잡합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;개체에는 12바이트(32비트 시스템)와 할당에 대한 오버헤드가 필요합니다.&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;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;class_getInstanceSize&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;malloc_good_size&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 class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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 &amp;lt;malloc/malloc.h&amp;gt;
#import &amp;lt;objc/runtime.h&amp;gt;

NSLog(@&quot;Object Size: %zd&quot;, malloc_good_size(class_getInstanceSize([yourObject class])));
&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 class=&quot;papago-parent&quot;&gt;클래스 설명에는 크기 정보가 포함되어 있다고 생각합니다. -- 를 사용하여 쿼리하는 것보다 이것을 검색하는 것이 좋습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof&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&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/761969/checking-the-size-of-an-object-in-objective-c&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>C</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1446</guid>
      <comments>https://mycopycode.tistory.com/1446#entry1446comment</comments>
      <pubDate>Thu, 19 Oct 2023 22:17:50 +0900</pubDate>
    </item>
    <item>
      <title>OpenCV 튜토리얼을 찾고 있습니다.</title>
      <link>https://mycopycode.tistory.com/1445</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;OpenCV 튜토리얼을 찾고 있습니다.&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 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;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;현재 상태로는 이 질문은 우리의 Q&amp;amp;A 형식에 맞지 않습니다.&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;a href=&quot;/help/reopen-questions&quot; papago-id=&quot;1-1&quot;&gt;안내&lt;/a&gt;를 받기 위해 헬프 &lt;a href=&quot;/help/reopen-questions&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;/div&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-07-2407:37:12Z&quot; papago-attr-id=&quot;1&quot;&gt;11년 전&lt;/span&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 papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 추천할 수 있는 openCV c/c++ 튜토리얼을 쉽게 배울 수 있는 좋은 방법을 아는 사람?&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;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;OpenCV는 최근 &lt;a href=&quot;http://opencv.org/books.html&quot; papago-id=&quot;4-1&quot; rel=&quot;noreferrer&quot;&gt;그들이 추천&lt;/a&gt;하는 책 &lt;a href=&quot;http://opencv.org/books.html&quot; papago-id=&quot;4-1&quot; rel=&quot;noreferrer&quot;&gt;목록&lt;/a&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;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&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;http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/opencv-intro.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6-1&quot;&gt;Gady Agam의 OpenCV 소개&lt;/a&gt;에서 OpenCV에 대한 멋진 소개가 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.pages.drexel.edu/~nk752/tutorials.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;7-0&quot;&gt;Noah Kuntz OpenCV 튜토리얼&lt;/a&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;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 OpenCV 직원들이 직접 제공하는 공식 &lt;a href=&quot;http://docs.opencv.org/doc/tutorials/tutorials.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;8-1&quot;&gt;OpenCV 튜토리얼&lt;/a&gt;도 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시작하기 좋은 Opencv C++ 예제도 여기에서 &lt;a href=&quot;http://opencv-tutorials-hub.blogspot.in/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-1&quot;&gt;찾을&lt;/a&gt; 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ul&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;http://opencv.itseez.com/doc/tutorials/tutorials.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;10-1&quot;&gt;http://opencv.itseez.com/doc/tutorials/tutorials.html&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;Nashruddin의 눈 추적 및 초보자 튜토리얼과 같은 OpenCV 튜토리얼.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://nashruddin.com/tag/opencv&quot; rel=&quot;nofollow&quot; papago-id=&quot;11-1&quot;&gt;http://nashruddin.com/tag/opencv&lt;/a&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;객체 감지, 얼굴 인식 및 교차 컴파일과 같은 개방형 CV 튜토리얼.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.computer-vision-software.com/blog/&quot; rel=&quot;nofollow&quot; papago-id=&quot;12-1&quot;&gt;http://www.computer-vision-software.com/blog/&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;a href=&quot;http://www.aishack.in/topics/tutorials/&quot; rel=&quot;nofollow&quot; papago-id=&quot;13-1&quot;&gt;아이샥&lt;/a&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/5679909/looking-for-opencv-tutorial&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>C</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1445</guid>
      <comments>https://mycopycode.tistory.com/1445#entry1445comment</comments>
      <pubDate>Thu, 19 Oct 2023 22:17:43 +0900</pubDate>
    </item>
    <item>
      <title>PowerShell의 .(점) 표기법을 사용하여 요소 이름에 마침표가 있는 요소를 탐색할 수 있는 방법은 무엇입니까?</title>
      <link>https://mycopycode.tistory.com/1444</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을 사용하면 XML 작업이 매우 쉬워집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 &quot;dot&quot; 표기를 사용하여 web.config 파일을 확인하는 데 문제가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 것이 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Import-Module WebAdministration
$site = get-website | ? { $_.name -eq &quot;My Website - 80&quot; }
$WebConfigFile = $site.physicalPath + &quot;\web.config&quot;
[xml]$WebAppXml = Get-Content $WebConfigFile
$webAppXml.configuration.system.web
&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;마지막 줄에서 PowerShell은 인텔리센스를 사용하여 시스템을 채웁니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹을 실행하려고 하면 출력이 null이 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Xpath 또는 를 사용할 수 있다는 것을 알고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET Xml 개체를 사용하지만 필요가 없다면 사용하지 않는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;$webAppXml.configuration.'system.web'
&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;pre&gt;&lt;code&gt;$webAppXml.configuration.[&quot;system.web&quot;].Identity
&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;$subproperty = 'System.Web'
$webAppXml.configuration.$subproperty
&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;그건 그렇고, 메소드 정의를 실행하지 않고 동일한 트릭을 사용하여 메소드 정의를 얻을 수 있습니다.&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/6526865/how-can-you-use-powershells-dot-notation-to-walk-through-elements-with-peri&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>PowerShell</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1444</guid>
      <comments>https://mycopycode.tistory.com/1444#entry1444comment</comments>
      <pubDate>Thu, 19 Oct 2023 22:17:36 +0900</pubDate>
    </item>
    <item>
      <title>var, let 또는 construct 없이 객체 파괴</title>
      <link>https://mycopycode.tistory.com/1443</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;var, let 또는 construct 없이 객체 파괴&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;var&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;{a, b} = {a: 1, b: 2};
&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;SyntaxError: expected expression, got '='&lt;/code&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;pre&gt;&lt;code&gt;var {a, b} = {a: 1, b: 2};
var [c, d] = [1, 2];
    [e, f] = [1, 2];
&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;var&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;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;function () {
  var {a, b} = objectReturningFunction();

  // Now a and b are local variables in the function, right?
  // So why can't I assign values to them?

  {a, b} = objectReturningFunction();
}
&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;{...}&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;{&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;em papago-id=&quot;11-1&quot;&gt;문장&lt;/em&gt;의 처음에 나타납니다. 항상 &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/block&quot; papago-id=&quot;11-3&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;11-5&quot;&gt;문&lt;/em&gt; 뒤에 &lt;em papago-id=&quot;11-7&quot;&gt;식&lt;/em&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&gt;&lt;/font&gt;&lt;code&gt;var&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;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Grouping&quot; papago-id=&quot;13-3&quot; rel=&quot;noreferrer&quot;&gt;그룹화&lt;/a&gt; 괄호 뒤에 올 수 없기 때문에 이러한 구분에 도움이 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;( {a, b} = objectReturningFunction() );
&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;문서: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#assignment_separate_from_declaration_2&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&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;왼쪽의 {a, b}이(가) 개체 리터럴이 아닌 블록으로 간주되므로 {a, b} = {a:1, b:2}은(는) 올바른 독립 실행형 구문이 아닙니다.&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;그러나 {a, b} = {a:1, b:2}이(가) 유효하고 var {a, b} = {a:1, b:2}이(가) 유효합니다.&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;/blockquote&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;19-0&quot;&gt;세미콜론 없이 자바스크립트를 &lt;/strong&gt;쓸&lt;strong papago-id=&quot;19-0&quot;&gt; 경우&lt;/strong&gt;, 예측 가능하게 작동하려면 '선언 없이 할당' 구문 앞에 세미콜론이 있어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;let a, b

;({a, b} = objectReturningFunction()) // &amp;lt;-- note the preceding ;
&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;prettier&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;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;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let {} = {a, b} = objectReturningFunction()
&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;ul&gt; 
 &lt;li papago-id=&quot;25&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;26&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;27&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;28&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;13&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;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Immediately_invoked_function_expression&quot; rel=&quot;noreferrer&quot; papago-id=&quot;14-0&quot;&gt;IIFE&lt;/a&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li 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;첫 만남에 퇴장이 보장되므로 일회성으로 사용하지 말 것을 권합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;h2 papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;고려 사항:&lt;/font&gt;&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;colors = { r: 204, g: 51, b: 102, hex: &quot;#cc3366&quot; };
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;33&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;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;34-1&quot;&gt;새&lt;/strong&gt; 변수에 대한 파괴&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let { r, g, b } = colors;
// initializes variables r, g, b
&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;strong papago-id=&quot;35-3&quot;&gt;이름&lt;/strong&gt;을 &lt;strong papago-id=&quot;35-1&quot;&gt;가진&lt;/strong&gt; 새 변수에 대한 파괴&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let { r: red, g: green, b: blue } = colors;
// initializes variables red, green, blue
&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;strong papago-id=&quot;36-1&quot;&gt;기존&lt;/strong&gt; 변수에 대한 파괴&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let r, g, b;
...
({ r, g, b } = colors);
&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;strong papago-id=&quot;37-3&quot;&gt;다른&lt;/strong&gt; &lt;strong papago-id=&quot;37-1&quot;&gt;기존&lt;/strong&gt; 변수에 대한 파괴&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let red, green, blue;
...
({ r: red, g: green, b: blue } = colors);
&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;strong papago-id=&quot;38-1&quot;&gt;이름&lt;/strong&gt;을 가진 다른 개체로 파괴하는 중&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let myColor = { r: 0, g: 0, b: 0 };
...
({ r: myColor.r, g: myColor.g, b: myColor.b } = colors);
&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;strong papago-id=&quot;39-1&quot;&gt;다른&lt;/strong&gt; 속성 이름을 가진 다른 개체로 파괴하는 중&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let myColor = { red: 0, green: 0, blue: 0 };
...
({ r: myColor.red, g: myColor.green, b: myColor.blue } = colors);
&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;URL : https://stackoverflow.com/questions/27386234/object-destructuring-without-var-let-or-const&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>JavaScript</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1443</guid>
      <comments>https://mycopycode.tistory.com/1443#entry1443comment</comments>
      <pubDate>Thu, 19 Oct 2023 22:17:30 +0900</pubDate>
    </item>
    <item>
      <title>VBA Editor를 초기 설정으로 복원하는 방법은 무엇입니까?</title>
      <link>https://mycopycode.tistory.com/1442</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;VBA Editor를 초기 설정으로 복원하는 방법은 무엇입니까?&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;VBA Editor를 초기 설정으로 복원하는 방법은 무엇입니까?&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 papago-id=&quot;3&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;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;regedit&lt;/code&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;HKEY_CURRENTUSER\소프트웨어\Microsoft\VBA\6.0으로 이동합니다.&lt;/font&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;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;Common&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;*.reg 파일을 안전한 곳에 저장하려면 내보내기를 &lt;em papago-id=&quot;7-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;/li&gt; 
 &lt;li&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;Common&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;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;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 번에 VBA Editor를 닫을 때 변경할 수 있는 설정과 함께 &quot;공통&quot; 키가 재생성됩니다.&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;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TOOLS 옵션 도킹&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;     Then select Object Browser, Project Explorer and that's all.
&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;저도 같은 문제가 있었는데, 프로젝트-VB와 같은 최소한의 부동 메뉴의 파란색 표제를 두 번 클릭하면 알 수 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트 메뉴는 확장되는 다른 메뉴에 맞게 크기를 조정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;VIEW 옵션에서 선택한 메뉴의 머리글을 두 번 클릭하면 화면이 VBA 편집기의 기본 설정으로 되돌아갈 수 있습니다.&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;Mac과 Excel 2016을 이용한 솔루션&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;예를 들어 프로젝트 탐색기(pe) 창을 vb 창 가장자리로 드래그할 수 있으며, 가장자리에 충분히 가까워지면 pe 창 윤곽선이 이동하고 조정됩니다.&lt;/font&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;/font&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;font class=&quot;papago-parent&quot;&gt;드디어 알아냈네요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;xD 먼저 오른쪽 상단에 있는 X를 사용하여 Project Explorer(프로젝트 탐색기)와 Properties(속성) 창을 닫습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 Docking(도킹) 탭 아래에 있는 Options(옵션)으로 이동합니다.&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;이제 Options&amp;gt;Docking(옵션)&amp;gt;Docking(도킹)으로 돌아가 선택한 모든 상자를 선택합니다(기본값은 object browser(개체 브라우저 제외).&lt;/font&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;&quot;파일&quot;, &quot;편집&quot;, &quot;보기&quot; 등 모든 메뉴와 창이 누락되었습니다.&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;ol&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;li papago-id=&quot;22&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;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;HKEY_CURRENTUSER\Software\Microsoft\VBA&lt;/code&gt;&lt;/li&gt; 
 &lt;li&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;VBA&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;VBA_old&lt;/code&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;레지스트리 편집기 닫기&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;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;28&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;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;…그리고 VBA가 정상으로 돌아왔습니다!&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;ol&gt; 
 &lt;li&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;VBA&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;/li&gt; 
 &lt;li&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;VBA_old&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 모두에게 &quot;기본값&quot;이라는 OP의 원래 질문을 해결할 수는 없겠지만, 제 경우와 가능한 다른 경우에는 &quot;프로젝트 탐색기&quot;를 다시 도킹하고 모듈을 기본값처럼 옆에 팝업으로 표시하려고 했습니다.&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;프로젝트 탐색기에서 마우스 오른쪽 단추를 누른 후 &quot;Dockable&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;/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;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;36-1&quot;&gt;보기 탭&lt;/strong&gt;으로 이동한 다음 Project Explorer &amp;amp; Properties 창을 클릭하면 됩니다.&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;a href=&quot;https://i.stack.imgur.com/8wV6R.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8wV6R.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&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;font class=&quot;papago-parent&quot;&gt;Mac용으로 작동합니다. 윈도우도 작동할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;VBE의 모든 탭 닫기&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보기 --&amp;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;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 --&amp;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;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 view --&amp;gt; properties 창을 선택하고 탭을 왼쪽 하단으로 끕니다.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가 단계(locals 창을 사용하는 경우)&lt;/font&gt;&lt;/p&gt; 
&lt;ol start=&quot;5&quot;&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;/ol&gt;&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이동할 창을 마우스 오른쪽 단추로 클릭하고 &quot;Dockable(도킹 가능)&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;'재설정' 명령은 알 수 없지만 시작점은 보기 메뉴로 이동하여 코드, 프로젝트 탐색기 및 속성 창을 설정한 후 도구 모음&amp;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;3주 동안 vba 코드를 입력하고 저장 등을 하다가 문제가 생겼습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 어떤 이유에서인지 편집기의 사이징을 가지고 놀았는데 다음 파일을 열었을 때 심장마비 시간과 같은 &quot;none of my code&quot;가 표시되었고, 구워진 파일과 최근 파일을 복사하는 것을 포함한 대부분의 인터넷 솔루션을 시도했고 다른 컴퓨터에서 열었는데 vba가 거기 있었습니다 :) 있었습니다.&lt;/font&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;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;URL : https://stackoverflow.com/questions/26810053/how-to-restore-vba-editor-to-its-initial-settings&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>Excel</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1442</guid>
      <comments>https://mycopycode.tistory.com/1442#entry1442comment</comments>
      <pubDate>Thu, 19 Oct 2023 22:17:23 +0900</pubDate>
    </item>
    <item>
      <title>void *function()은 기능에 대한 포인터입니까 아니면 void를 반환하는 함수입니까?</title>
      <link>https://mycopycode.tistory.com/1441</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;void *function()은 기능에 대한 포인터입니까 아니면 void를 반환하는 함수입니까?&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;void *function()&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;br&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;void*&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;pthread&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;지금 저는 그들의 차이점이 무엇인지 혼란스럽습니다.&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;void *&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;void *function();
&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;*&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;void * function();
&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;Jarod42&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코멘트에서 가리키는 당신은 C++의 함수 선언을 다음과 같이 후행 반환 유형을 사용하여 다시 쓸 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;auto function() -&amp;gt; void *;
&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;void ( *function )();
&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;void&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;void * ( *function )();
&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;void *&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 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;void * ( *( *function )() )();
&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;C 구문 문제에 대해 확신이 서지 않을 때마다 &lt;a href=&quot;https://linux.die.net/man/1/cdecl&quot; rel=&quot;noreferrer&quot; papago-id=&quot;18-1&quot;&gt;cdecl&lt;/a&gt; 유틸리티(&lt;a href=&quot;https://cdecl.org&quot; rel=&quot;noreferrer&quot; papago-id=&quot;18-3&quot;&gt;온라인&lt;/a&gt; 버전)를 사용하여 통역해 주는 것을 좋아합니다.&lt;/font&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;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 나는 당신의 예를 입력합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;void *foo()&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;blockquote&gt; 
 &lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;foo를 함수로 선언하여 포인터를 무효로 되돌립니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&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;declare foo as pointer to function returning void&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;blockquote&gt; 
 &lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;공백(*foo)()&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&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;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;void&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 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;void *(function());
&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;void&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;void (*function2)();
&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;void ((*function2)());
&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;typedef&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;s:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;typedef void *function_returning_void_pointer();
typedef void function_returning_nothing();

function_returning_void_pointer function;
function_returning_nothing *function2;
&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 papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C/C++의 선언은 &lt;strong papago-id=&quot;35-1&quot;&gt;연산자 우선&lt;/strong&gt; 순위 뒤에 &lt;strong papago-id=&quot;35-1&quot;&gt;식별자&lt;/strong&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;a href=&quot;https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence&quot; papago-id=&quot;36-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;위키피디아에서 C/C++ 연산자 우선순위표&lt;/a&gt;를 간단히 살펴보면 함수 호출 연산자가 나타납니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;()&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;*&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;/p&gt; 
&lt;ul&gt; 
 &lt;li&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&gt;&lt;/font&gt;&lt;code&gt;function&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;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;code&gt;function()&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;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;code&gt;void* function()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 a를 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;void*&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;/p&gt;&lt;/li&gt; 
&lt;/ul&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&gt;&lt;/font&gt;&lt;code&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&gt;&lt;/font&gt;&lt;code&gt;*&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;pre&gt;&lt;code&gt;int *(*arr[42])();
&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;ul&gt; 
 &lt;li&gt;&lt;code&gt;arr&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;/li&gt; 
 &lt;li&gt;&lt;code&gt;arr[42]&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;, 즉 42개의열들.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;*arr[42]&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;/li&gt; 
 &lt;li&gt;&lt;code&gt;(*arr[42])()&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;/li&gt; 
 &lt;li&gt;&lt;code&gt;int *(*arr[42])()&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;int*&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&gt;&lt;/li&gt; 
&lt;/ul&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;/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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/58500806/is-void-function-a-pointer-to-function-or-a-function-returning-a-void&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>C</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1441</guid>
      <comments>https://mycopycode.tistory.com/1441#entry1441comment</comments>
      <pubDate>Sat, 14 Oct 2023 10:07:58 +0900</pubDate>
    </item>
    <item>
      <title>단일 MariaDB를 Galera 클러스터로 변환</title>
      <link>https://mycopycode.tistory.com/1440</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단일 MariaDB를 Galera 클러스터로 변환&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;저는 현재 데비안 9.8에서 mariadb 버전 10.1을 실행하는 서버를 가지고 있습니다.&lt;/font&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;이제 두 개의 노드를 가지려면 갤러리를 사용하여 클러스터를 만들어야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미 두 번째 서버가 마운트되어 있지만 데이터베이스가 이미 생성되어 있고 정보가 있는 노드와 완전히 처음부터 다른 노드로 Galera 클러스터를 구성하는 단계는 무엇인지 모르겠습니다.&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;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/60147697/convert-single-mariadb-to-a-galera-cluster&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>mariadb</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1440</guid>
      <comments>https://mycopycode.tistory.com/1440#entry1440comment</comments>
      <pubDate>Sat, 14 Oct 2023 10:07:51 +0900</pubDate>
    </item>
    <item>
      <title>-no-pie는 무엇에 사용됩니까?</title>
      <link>https://mycopycode.tistory.com/1439</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;-no-pie는 무엇에 사용됩니까?&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;C 파일로 몇 가지 테스트를 위해 GPROP로 우분투 17.10을 작업하고 있었는데 gprof로 실행하면 생성된 파일이 (&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gmon.out&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;), 컴파일하고 -pg 옵션으로 링크하면 빈 플랫과 콜 그래프가 나옵니다.&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;하지만 이것이 GCC 버그라는 것을 알게 되었고, 나는 파일을 컴파일하고 링크해야 할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-no-pie&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;ul&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;/p&gt; &lt;pre&gt;&lt;code&gt;gcc -c main.c file-1.c file-2.c -pg [-no-pie]
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&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;gcc -o test main.o file-1.o file-2.o -pg [-no-pie]
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 GCC 7.2 버전을 가지고 있습니다.&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;이 플래그는 gcc가 PI(&lt;a href=&quot;https://access.redhat.com/blogs/766093/posts/1975793&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-1&quot;&gt;Position Independent Executive&lt;/a&gt;)를 실행할 수 없도록 지시하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PIE는 ASLR(Address Space Layout Randomization)을 활성화하기 위한 전제 조건입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ASLR은 커널이 실행될 때마다 바이너리와 종속성을 가상 메모리의 임의 위치에 로드하는 보안 기능입니다.&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/47778099/what-is-no-pie-used-for&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>C</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1439</guid>
      <comments>https://mycopycode.tistory.com/1439#entry1439comment</comments>
      <pubDate>Sat, 14 Oct 2023 10:07:45 +0900</pubDate>
    </item>
    <item>
      <title>전체 정수에서 각 개별 숫자 가져오기</title>
      <link>https://mycopycode.tistory.com/1438</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;제가 'score'라는 정수를 가지고 있다고 가정해 보겠습니다. 이 정수는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int score = 1529587;
&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;이제 제가 하고 싶은 것은 점수에서 각각의 숫자 1,5,2,9,5,8,7을 얻는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strike papago-id=&quot;2-1&quot;&gt;
&lt;/strike&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strike papago-id=&quot;2-1&quot;&gt;  비트 와이즈 연산자 사용&lt;/strike&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strike papago-id=&quot;2-1&quot;&gt; &lt;/strike&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;저는 비슷한 방법으로 16진수 색상 값에서 빨간색 녹색과 파란색 값을 추출한 적이 있기 때문에 이 방법을 사용할 수 있다고 확신합니다.&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;font papago-translate=&quot;splited&quot;&gt;&lt;strong papago-id=&quot;0&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;/strong&gt;&lt;/font&gt;&lt;br&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 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;while(score)
{
    printf(&quot;%d\n&quot;, score % 10);
    score /= 10;
}
&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;RGB 값은 비트 경계에서 잘 떨어지며 십진 숫자는 그렇지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;비트 와이즈 연산자를 사용하여 이를 수행하는 쉬운 방법은 전혀 없다고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모듈로 10(% 10)과 같은 십진 연산자를 사용해야 합니다.&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;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 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;추가 버퍼를 할당하지 않고 왼쪽에서 오른쪽으로 10진수를 인쇄하는 더 좋은 방법이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;score&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;는 0입니다(앞의 답변에서 제시된 루프는 아무것도 인쇄되지 않습니다).&lt;/font&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;이 경우 추가 패스가 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int div;
for (div = 1; div &amp;lt;= score; div *= 10)
    ;

do
{
    div /= 10;
    printf(&quot;%d\n&quot;, score / div);
    score %= div;
} while (score);
&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 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;sprintf&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 변수가 스코어라고 불리는 것이기 때문에, 이것은 당신이 숫자 글리프를 이미지로 표시하기 위해 스코어의 개별 숫자를 사용할 계획인 게임에 대한 것이라고 추측합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에는.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sprintf&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;에는 제로패드, 스페이스패드 등을 사용할 수 있는 고정된 너비의 점수를 얻을 수 있는 편리한 형식 수정자가 있습니다.&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;이 솔루션은 전체 범위 [0,UINT_MAX]에서 숫자 버퍼링 없이 올바른 결과를 제공합니다.&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;또한 적절한 유형 변경이 있는 더 넓은 유형 또는 부호가 있는 유형(양의 값을 가지는)에도 적용됩니다.&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;이러한 방식은 작은 환경(예: 아두이노 부트로더)에서 특히 유용한데, 이는 모든 printf() bloat((프린트f())를 끌어 들이지 않고(데모 출력에 사용하지 않는 경우) RAM을 매우 적게 사용하기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;LED 하나만 깜빡여도 가치를 확인하실 수 있습니다 :)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;limits.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;

int
main (void)
{
  unsigned int score = 42;   // Works for score in [0, UINT_MAX]

  printf (&quot;score via printf:     %u\n&quot;, score);   // For validation

  printf (&quot;score digit by digit: &quot;);
  unsigned int div = 1;
  unsigned int digit_count = 1;
  while ( div &amp;lt;= score / 10 ) {
    digit_count++;
    div *= 10;
  }
  while ( digit_count &amp;gt; 0 ) {
    printf (&quot;%d&quot;, score / div);
    score %= div;
    div /= 10;
    digit_count--;
  }
  printf (&quot;\n&quot;);

  return 0;
}
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;//this can be easily understandable for beginners     
int score=12344534;
int div;
for (div = 1; div &amp;lt;= score; div *= 10)
{

}
/*for (div = 1; div &amp;lt;= score; div *= 10); for loop with semicolon or empty body is same*/
while(div&amp;gt;1)
{
    div /= 10;
    printf(&quot;%d\n`enter code here`&quot;, score / div);
    score %= div;
}
&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;font class=&quot;papago-parent&quot;&gt;숫자를 문자열로 변환하려면 함수 &lt;a href=&quot;http://www.cplusplus.com/reference/cstdlib/itoa/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;21-1&quot;&gt;itoa&lt;/a&gt;를 사용할 수 있으므로, 루프에서 숫자의 모듈로와 함께 변형을 고려합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&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;get_digits.c&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ cat get_digits.c 

#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;math.h&amp;gt;


// return a length of integer
unsigned long int get_number_count_digits(long int number);

// get digits from an integer number into an array
int number_get_digits(long int number, int **digits, unsigned int *len);

// for demo features
void demo_number_get_digits(long int number);


int
main()
{
    demo_number_get_digits(-9999999999999);
    demo_number_get_digits(-10000000000);
    demo_number_get_digits(-1000);
    demo_number_get_digits(-9);
    demo_number_get_digits(0);
    demo_number_get_digits(9);
    demo_number_get_digits(1000);
    demo_number_get_digits(10000000000);
    demo_number_get_digits(9999999999999);
    return EXIT_SUCCESS;
}


unsigned long int
get_number_count_digits(long int number)
{
    if (number &amp;lt; 0)
        number = llabs(number);
    else if (number == 0)
        return 1;

    if (number &amp;lt; 999999999999997)
        return floor(log10(number)) + 1;

    unsigned long int count = 0;
    while (number &amp;gt; 0) {
        ++count;
        number /= 10;
    }
    return count;
}


int
number_get_digits(long int number, int **digits, unsigned int *len)
{
    number = labs(number);

    // termination count digits and size of a array as well as
    *len = get_number_count_digits(number);

    *digits = realloc(*digits, *len * sizeof(int));

    // fill up the array
    unsigned int index = 0;
    while (number &amp;gt; 0) {
        (*digits)[index] = (int)(number % 10);
        number /= 10;
        ++index;
    }

    // reverse the array
    unsigned long int i = 0, half_len = (*len / 2);
    int swap;
    while (i &amp;lt; half_len) {
        swap = (*digits)[i];
        (*digits)[i] = (*digits)[*len - i - 1];
        (*digits)[*len - i - 1] = swap;
         ++i;
    }

    return 0;
}


void
demo_number_get_digits(long int number)
{
    int *digits;
    unsigned int len;

    digits = malloc(sizeof(int));

    number_get_digits(number, &amp;amp;digits, &amp;amp;len);

    printf(&quot;%ld --&amp;gt; [&quot;, number);
    for (unsigned int i = 0; i &amp;lt; len; ++i) {
        if (i == len - 1)
            printf(&quot;%d&quot;, digits[i]);
        else
            printf(&quot;%d, &quot;, digits[i]);
    }
    printf(&quot;]\n&quot;);

    free(digits);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;GNU GCC를 사용한 데모&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$~/Downloads/temp$ cc -Wall -Wextra -std=c11 -o run get_digits.c -lm
$~/Downloads/temp$ ./run
-9999999999999 --&amp;gt; [9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9]
-10000000000 --&amp;gt; [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
-1000 --&amp;gt; [1, 0, 0, 0]
-9 --&amp;gt; [9]
0 --&amp;gt; [0]
9 --&amp;gt; [9]
1000 --&amp;gt; [1, 0, 0, 0]
10000000000 --&amp;gt; [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
9999999999999 --&amp;gt; [9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9]
&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;LLVM/Clang을 사용한 데모&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$~/Downloads/temp$ rm run
$~/Downloads/temp$ clang -std=c11 -Wall -Wextra get_digits.c -o run -lm
setivolkylany$~/Downloads/temp$ ./run
-9999999999999 --&amp;gt; [9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9]
-10000000000 --&amp;gt; [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
-1000 --&amp;gt; [1, 0, 0, 0]
-9 --&amp;gt; [9]
0 --&amp;gt; [0]
9 --&amp;gt; [9]
1000 --&amp;gt; [1, 0, 0, 0]
10000000000 --&amp;gt; [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
9999999999999 --&amp;gt; [9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9]
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;25&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;$~/Downloads/temp$ cc --version | head -n 1
cc (Debian 4.9.2-10) 4.9.2
$~/Downloads/temp$ clang --version
Debian clang version 3.5.0-10 (tags/RELEASE_350/final) (based on LLVM 3.5.0)
Target: x86_64-pc-linux-gnu
Thread model: posix
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;#include&amp;lt;stdio.h&amp;gt;

int main() {
int num; //given integer
int reminder;
int rev=0; //To reverse the given integer
int count=1;

printf(&quot;Enter the integer:&quot;);
scanf(&quot;%i&quot;,&amp;amp;num);

/*First while loop will reverse the number*/
while(num!=0)
{
    reminder=num%10;
    rev=rev*10+reminder;
    num/=10;
}
/*Second while loop will give the number from left to right*/
while(rev!=0)
{
    reminder=rev%10;
    printf(&quot;The %d digit is %d\n&quot;,count, reminder);
    rev/=10;
    count++; //to give the number from left to right 
}
return (EXIT_SUCCESS);}
&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 class=&quot;papago-parent&quot;&gt;를 합니다를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sprintf&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;chars&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;unsigned&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;pre&gt;&lt;code&gt;unsigned int score = 1529587, i;
char stringScore [11] = { 0 };

sprintf( stringScore, &quot;%d, score );

for( i=0; i&amp;lt;strlen(stringScore); i++ )
    printf( &quot;%c\n&quot;, stringScore[i] );
&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;ul&gt; 
 &lt;li papago-id=&quot;31&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;code&gt;stringScore&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;는 11의 다이라고 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&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;는 4 는 10 입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;입니다입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;'\0'&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;/li&gt; 
 &lt;li&gt;&lt;code&gt;sprintf&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;/li&gt; 
&lt;/ul&gt; 
&lt;hr&gt; 
&lt;h2 papago-id=&quot;36&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;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;stringScore&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 변환이 정말 쉽죠.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dig&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;pre&gt;&lt;code&gt;int intDigit = dig - '0';
&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;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;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;Base-10은 단순히 10자리, Base-2는 2자리 등을 의미합니다.&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;예를 들어, 만약 우리가 16진을 대신 사용한다면, 우리는 익숙한 10개의 &quot;자리&quot;(즉, 10~15개, 나중에 A~F로 번역됨)를 넘어서는 위치에 도달하게 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아무튼...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int value = 564738291;
int radix = 10;
int array[32]; // At the end = { 5, 6, 4, 7, 3, 8, 2, 9, 1 }
int index = 0; // At the end = 9

if(value == 0) // If value is zero ..
{
    array[index++] = 0; // .. we add a zero, and we're done.
}
else
{
    while(value != 0)
    {
        array[index++] = value % radix; // Copy the value into the array.
        value /= radix;
    }
}
&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;여기서 끝으로 우리 배열은 숫자로 채워질 것이고, 10 이하의 기수는 숫자로 직접 사용될 수 있지만, 10을 넘는 기수의 경우 선택된 기수의 숫자를 시각화하기 위해 사용될 &quot;문자&quot;로 변환되어야 합니다.&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;예를 들어, 16진수에서 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15일 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;인쇄하면 각각 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'로 번역할 수 있습니다.&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;그러나 중요한 것은 이 값을 사용하여 radix = 2의 값을 추출할 수 있다는 것입니다(binary, 1과 0을 얻는다).&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;base-20 (vigesimal)과 함께 사용한 다음 가능한 20개의 숫자를 유니코드의 마야 숫자(또는 base-20을 사용하는 다른 시스템)로 번역하거나 바빌로니아 base-60을 사용하지 않는 이유는 무엇입니까? :)&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;또한, 기수가 클수록 숫자를 표현하는 데 필요한 &quot;숫자&quot;가 줄어듭니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇기 때문에 가장 작은 radix인 base-2(단, 1과 0)는 항상 int의 경우 32로 매우 깁니다(위의 의사 코드에서 배열의 크기 참조).&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 papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용: https://en.wikipedia.org/wiki/Positional_notation&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;저는 이 솔루션을 만들었습니다. 대신 정수를 읽고 문자열(C의 char 배열)을 읽은 다음 forboole로 쓰고, 코드는 숫자의 합도 씁니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// #include&amp;lt;string.h&amp;gt;

scanf(&quot;%s&quot;, n);
int total = 0;

for (int i = 0; i&amp;lt; strlen(n); i++){
    printf(&quot;%c&quot;, n[i]);
    total += (int)(n[i]) -48;
}

printf(&quot;%d&quot;, total);
&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3118490/getting-each-individual-digit-from-a-whole-integer&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>C</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1438</guid>
      <comments>https://mycopycode.tistory.com/1438#entry1438comment</comments>
      <pubDate>Sat, 14 Oct 2023 10:07:39 +0900</pubDate>
    </item>
    <item>
      <title>각도 2: 배열의 변화를 감지하는 방법?(@입력 속성)</title>
      <link>https://mycopycode.tistory.com/1437</link>
      <description>&lt;h2 papago-id=&quot;0&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;(@입력 속성)&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;ajax 요청을 사용하여 개체 배열을 검색하는 상위 구성 요소가 있습니다.&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;부모는 @입력 속성을 통해 배열을 자녀에게 전달하고 자녀는 내용을 올바르게 표시합니다.&lt;/font&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;개체 내의 일부 필드를 변경할 때 문제가 발생합니다. 하위 구성 요소는 이러한 변경 사항을 알리지 않습니다.&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;나는 녹아웃 JS와 일하는 것에 익숙하고 관찰 가능한 어레이와 비슷한 효과를 얻어야 합니다.&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;DoCheck에 대한 내용을 읽었는데 어떻게 작동하는지 잘 모르겠습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;OnChanges&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;a href=&quot;https://angular.io/docs/ts/latest/guide/lifecycle-hooks.html&quot; papago-id=&quot;6-0&quot; rel=&quot;noreferrer&quot;&gt;Lifecycle Hook&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;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;입력 배열 내부의 요소가 추가, 이동 또는 제거되었는지 확인하려면 ItableDifferences(&lt;a href=&quot;https://angular.io/api/core/IterableDiffers&quot; papago-id=&quot;7-1&quot; rel=&quot;noreferrer&quot;&gt;ItableDifferences&lt;/a&gt;)를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DoCheck&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;pre&gt;&lt;code&gt;constructor(private iterableDiffers: IterableDiffers) {
    this.iterableDiffer = iterableDiffers.find([]).create(null);
}

ngDoCheck() {
    let changes = this.iterableDiffer.diff(this.inputArray);
    if (changes) {
        console.log('Changes detected!');
    }
}
&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;a href=&quot;https://angular.io/docs/ts/latest/api/core/index/KeyValueDiffers-class.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-1&quot;&gt;KeyValueDiffer&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;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/35748484/detect-changes-in-objects-inside-array-in-angular2/36268847#36268847&quot; papago-id=&quot;10-1&quot;&gt;Angular2에서 배열 내부의 객체 변화 감지&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;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;this.yourArray = [{...}, {...}, {...}];
this.yourArray[0].yourModifiedField = &quot;whatever&quot;;

this.yourArray = [].concat(this.yourArray);
&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;위의 코드는 배열 참조를 변경하고 자식 구성 요소에서 OnChanges 메커니즘을 트리거합니다.&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;핵심 문제는 배열 참조는 그대로 유지하면서 배열 요소를 변형한다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 Angular2 변경 감지는 변경을 감지하기 위해 배열 참조만 확인합니다.&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&gt;&lt;a href=&quot;https://blog.thoughtram.io/angular/2016/02/22/angular-2-change-detection-explained.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://blog.thoughtram.io/angular/2016/02/22/angular-2-change-detection-explained.html&lt;/font&gt;&lt;/a&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://angular.io/docs/ts/latest/api/core/index/IterableDiffers-class.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;17-1&quot;&gt;사용&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;a href=&quot;https://github.com/angular/angular/blob/c10c060d2037daffadfe7975ac584e83225400b4/packages/common/src/directives/ng_for_of.ts#L134&quot; rel=&quot;noreferrer&quot; papago-id=&quot;18-1&quot;&gt;*ngFor&lt;/a&gt;에서 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-ts prettyprint-override&quot;&gt;&lt;code&gt;constructor(private _differs: IterableDiffers) {}

ngOnChanges(changes: SimpleChanges): void {
  if (!this._differ &amp;amp;&amp;amp; value) {
     this._differ = this._differs.find(value).create(this.ngForTrackBy);
  }
}

ngDoCheck(): void {
  if (this._differ) {
    const changes = this._differ.diff(this.ngForOf);
    if (changes) this._applyChanges(changes);
  }
}
&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;@Component({
  selector: 'my-component',
  templateUrl: './my-component.component.html',
  styleUrls: ['./my-component.component.scss']
})
export class MyComponent implements DoCheck {

  @Input() changeArray: MyClassArray[]= [];
  private differ: IterableDiffers;

  constructor(private differs: IterableDiffers) {
    this.differ = differs;
  }

  ngDoCheck() {
    const changes = this.differ.find(this.insertedTasks);
    if (changes) {
      this.myMethodAfterChange();
  }
}
&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 class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미 응답한 것으로 보입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 미래의 문제를 찾는 사람들을 위해, 저는 제가 가진 변화 감지 문제를 조사하고 디버깅할 때 놓친 것을 추가하고 싶었습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제, 제 문제는 좀 고립되어 있었고, 물론 제 쪽에서 바보 같은 실수를 저질렀지만, 그럼에도 불구하고 관련이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;할 때&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Array&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;Object&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다를 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setInterval(myService.function, 1000)&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;myService.function()&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;서비스 외부에서 사용한 퍼블릭 어레이의 값을 업데이트할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 있었기다이어야 &lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 올바른 사용법은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setInterval(myService.function.bind(this), 1000)&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 papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;concat 방법을 통해 변경 감지를 트리거하는 대신 ES6 destructuring operator를 사용하는 것이 더 우아할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;this.yourArray[0].yourModifiedField = &quot;whatever&quot;;
this.yourArray = [...this.yourArray];
&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;font class=&quot;papago-parent&quot;&gt;(이 예는 심층적인 검사가 필요 없는 단순한 어레이를 위한 것입니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Pipe({
  name: 'arrayChangeDetector',
  pure: false
})
export class ArrayChangeDetectorPipe implements PipeTransform {
  private differ: IterableDiffer&amp;lt;any&amp;gt;;

  constructor(iDiff: IterableDiffers) {
    this.differ = iDiff.find([]).create();
  }

  transform(value: any[]): any[] {
    if (this.differ.diff(value)) {
      return [...value];
    }
    return value;
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;cmp [items]=&quot;arrayInput | arrayChangeDetector&quot;&amp;gt;&amp;lt;/cmp&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;https://stackblitz.com/edit/array-value-changes-not-detected-ang-8&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;https://stackblitz.com/edit/array-value-changes-not-detected-ang-8&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;ul&gt; 
 &lt;li papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;NgDo체크&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;파이프 사용&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;불변 JS &lt;a href=&quot;https://www.npmjs.com/package/immutable&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;33-1&quot;&gt;NPM&lt;/a&gt; &lt;a href=&quot;https://github.com/immutable-js/immutable-js&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;33-3&quot;&gt;github&lt;/a&gt; 사용&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&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;URL : https://stackoverflow.com/questions/42962394/angular-2-how-to-detect-changes-in-an-array-input-property&lt;/font&gt;&lt;/p&gt;</description>
      <category>itsource</category>
      <category>angular</category>
      <author>mycopycode</author>
      <guid isPermaLink="true">https://mycopycode.tistory.com/1437</guid>
      <comments>https://mycopycode.tistory.com/1437#entry1437comment</comments>
      <pubDate>Sat, 14 Oct 2023 10:07:28 +0900</pubDate>
    </item>
  </channel>
</rss>