<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>stoneblock</title>
    <link>https://stoneblock.tistory.com/</link>
    <description>각종 프로그래밍 정보를 다루는 블로그입니다.</description>
    <language>ko</language>
    <pubDate>Wed, 27 May 2026 11:19:55 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>stoneblock</managingEditor>
    <item>
      <title>파일 업로드 크기 늘리기 워드프레스 / IIS 7</title>
      <link>https://stoneblock.tistory.com/765</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파일 업로드 크기 늘리기 워드프레스 / IIS 7&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;관리자가 자신의 전자책과 대용량 PDF 파일을 올릴 수 있도록 워드프레스 블로그의 파일 업로드 크기를 늘리려고 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 사이트는 고대디 / IIS 7에서 호스팅됩니다. 저는 운이 좋게도 다음을 시도해 보았습니다: web.config:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;configuration&amp;gt;&amp;lt;system.webServer&amp;gt;&amp;lt;security&amp;gt;&amp;lt;requestFiltering&amp;gt;&amp;lt;requestLimits maxAllowedContentLength=&quot;10000000&quot;/&amp;gt;&amp;lt;/requestFiltering&amp;gt;&amp;lt;/security&amp;gt;&amp;lt;/system.webServer&amp;gt;&amp;lt;/configuration&amp;gt;&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사이트 루트의 php.ini:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;upload_max_filesize = 64M&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어떤 조언이든 대단히 감사드립니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;고마워요 숀&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기서 찾을 수 있는 솔루션:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1단계:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;먼저 서버의 PHP.ini 파일을 편집해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이는 PHP 설치 디렉토리(예: c:\program files\php\php.ini)에서 찾을 수 있으며 다음 값을 설정합니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;upload_max_filesize = 64M&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;post_max_size = 64M&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;max_execution_time = 300&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;max_input_time = 300&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이를 통해 PHP는 최대 64MB의 파일을 처리할 수 있으며 PHP 스크립트는 타임아웃 전까지 최대 5분간 실행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;2단계:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마지막으로 IIS 7의 기본 파일 업로드 제한은 30MB입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이보다 더 크면 IIS가 매우 도움이 되지 않는 404 상태를 반환하게 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자세한 내용은 http://www.iis.net/ConfigReference/system.webServer/security/requestFiltering/requestLimits 에서 확인할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이를 재정의하려면 각 사이트에 대한 web.config 설정을 변경해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(여기서 유일한 문제점은 제한이 킬로바이트가 아닌 바이트 단위로 예상된다는 것입니다.)&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음은 MSDN 문서에서 복사한 복사본입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;IIS가 PHP.ini 변경 사항을 선택할 수 있도록 응용 프로그램 풀을 재활용하는 것을 잊지 마십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것으로 끝!&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://refactored.tumblr.com/post/4609761388/wordpress-iis7-uploads&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://refactored.tumblr.com/post/4609761388/wordpress-iis7-uploads&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;phpinfo ()에서 얻을 수 있는 active php.ini를 수정하고 post_max_size와 uppload_max_filesize를 그에 맞게 변경해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;작업이 완료되면 ii를 다시 시작합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Windows Share Host Gator 사이트를 사용하고 있기 때문에 위의 첫 번째 솔루션을 적용해야 했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 httpdocs에 .user.ini라는 파일이 있었고, 이 파일을 추가했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;upload_max_filesize = 256M
post_max_size = 256M
max_execution_time = 600
max_input_time = 600
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;더 큰 것이 필요했기 때문입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 다음과 같이 덧붙였습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;security&amp;gt;&amp;lt;requestFiltering&amp;gt;&amp;lt;requestLimits maxAllowedContentLength=&quot;268435456&quot;/&amp;gt; 
&amp;lt;/requestFiltering&amp;gt;&amp;lt;/security&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 더 큰 파일을 올릴 수 있었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 큰 동영상이나 mp3 파일을 업로드 할 수 있기를 원했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/15103717/increase-file-upload-size-wordpress-iis-7&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/765</guid>
      <comments>https://stoneblock.tistory.com/765#entry765comment</comments>
      <pubDate>Sun, 5 Nov 2023 10:52:37 +0900</pubDate>
    </item>
    <item>
      <title>JavaScript를 사용하여 스크롤 막대 너비 가져오기</title>
      <link>https://stoneblock.tistory.com/764</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JavaScript를 사용하여 스크롤 막대 너비 가져오기&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;이 질문에는 이미 다음&lt;/b&gt;과 같은 &lt;b&gt;답변이 있습니다&lt;/b&gt;.&lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt4&quot;&gt; 
    &lt;a href=&quot;/questions/986937/how-can-i-get-the-browsers-scrollbar-sizes&quot; dir=&quot;ltr&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;브라우저의 스크롤 바 크기를 얻으려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/a&gt; 
    &lt;span class=&quot;question-originals-answer-count&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(25개 답변)&lt;/font&gt;&lt;/span&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;닫힘&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;span class=&quot;relativetime&quot; title=&quot;2017-07-18 18:27:22Z&quot; papago-attr-id=&quot;1&quot;&gt;6년 전&lt;/span&gt;에.&lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음 HTML은 div.container의 오른쪽 안쪽 가장자리에 스크롤 바를 표시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저 스크롤 바의 폭을 결정하는 것이 가능합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;container&quot; style=&quot;overflow-y:auto; height:40px;&quot;&amp;gt;
  &amp;lt;div class=&quot;somethingBig&quot;&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 함수는 스크롤 바의 너비를 제공해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;function getScrollbarWidth() {

  // Creating invisible container
  const outer = document.createElement('div');
  outer.style.visibility = 'hidden';
  outer.style.overflow = 'scroll'; // forcing scrollbar to appear
  outer.style.msOverflowStyle = 'scrollbar'; // needed for WinJS apps
  document.body.appendChild(outer);

  // Creating inner element and placing it in the container
  const inner = document.createElement('div');
  outer.appendChild(inner);

  // Calculating difference between container's full width and the child width
  const scrollbarWidth = (outer.offsetWidth - inner.offsetWidth);

  // Removing temporary elements from the DOM
  outer.parentNode.removeChild(outer);

  return scrollbarWidth;

}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본 단계는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;숨김 디브(outer)를 만들어 오프셋 폭을 가져옵니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;CSS 오버플로 속성을 사용하여 스크롤 막대를 div(outer)로 강제 표시&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;새 디브(내부)를 생성하고 외부에 추가한 후 너비를 '100%'로 설정하고 오프셋 너비를 가져옵니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;수집된 오프셋을 기준으로 스크롤 막대 폭 계산&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기서 작동 예: http://jsfiddle.net/slavafomin/tsrmgcu9/&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;갱신하다&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Windows(메트로) 앱에서 이 기능을 사용하는 경우 'outer' div의 &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/windows/apps/hh441298.aspx&quot; rel=&quot;noreferrer&quot;&gt;-ms-overflow&lt;/a&gt; 스타일 속성을 다음으로 설정해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;scrollbar&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 그렇지 않으면 폭이 올바르게 감지되지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(코드 업데이트됨)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;업데이트 #2&lt;/strong&gt; 기본 &quot;스크롤 시 스크롤 바만 표시&quot; 설정(요세미티 이상)이 있는 Mac OS에서는 작동하지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;offsetWidth&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;스크롤 바의 너비를 포함합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;clientWidth&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Doesn't.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일반적으로 14-18px와 같습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;let scrollBarWidth = element.offsetWidth - element.clientWidth;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요소에 현재 스크롤 바가 없는 경우 0이 반환되므로 스크롤 바가 있는 임시 요소를 만들어 브라우저의 스크롤 바 폭을 계산하는 간단한 기능이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;function getScrollBarWidth() {
  let el = document.createElement(&quot;div&quot;);
  el.style.cssText = &quot;overflow:scroll; visibility:hidden; position:absolute;&quot;;
  document.body.appendChild(el);
  let width = el.offsetWidth - el.clientWidth;
  el.remove();
  return width;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 간단하고 빠를 것이라고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var scrollWidth= window.innerWidth-$(document).width()
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자식이 스크롤 막대를 제외한 컨테이너의 전체 너비(기본값)를 사용하는 경우 너비를 뺄 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var child = document.querySelector(&quot;.somethingBig&quot;);
var scrollbarWidth = child.parentNode.offsetWidth - child.offsetWidth;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jquery.&lt;strong&gt;&lt;em&gt;ui&lt;/em&gt;&lt;/strong&gt;를 사용하는 경우 다음 코드를 사용해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.position.scrollbarWidth()
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음 기능을 사용하여 스크롤 바 높이/폭을 구했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function getBrowserScrollSize(){

    var css = {
        &quot;border&quot;:  &quot;none&quot;,
        &quot;height&quot;:  &quot;200px&quot;,
        &quot;margin&quot;:  &quot;0&quot;,
        &quot;padding&quot;: &quot;0&quot;,
        &quot;width&quot;:   &quot;200px&quot;
    };

    var inner = $(&quot;&amp;lt;div&amp;gt;&quot;).css($.extend({}, css));
    var outer = $(&quot;&amp;lt;div&amp;gt;&quot;).css($.extend({
        &quot;left&quot;:       &quot;-1000px&quot;,
        &quot;overflow&quot;:   &quot;scroll&quot;,
        &quot;position&quot;:   &quot;absolute&quot;,
        &quot;top&quot;:        &quot;-1000px&quot;
    }, css)).append(inner).appendTo(&quot;body&quot;)
    .scrollLeft(1000)
    .scrollTop(1000);

    var scrollSize = {
        &quot;height&quot;: (outer.offset().top - inner.offset().top) || 0,
        &quot;width&quot;: (outer.offset().left - inner.offset().left) || 0
    };

    outer.remove();
    return scrollSize;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 jQuery 기반 솔루션은 IE7+ 및 기타 모든 최신 브라우저(스크롤바 높이/폭이 0인 모바일 장치 포함)에서 작동합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery를 쉽게 사용할 수 있는 방법이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var scrollbarWidth = jQuery('div.withScrollBar').get(0).scrollWidth - jQuery('div.withScrollBar').width();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본적으로 전체 너비에서 스크롤 가능한 너비를 빼면 스크롤 바의 너비를 제공할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;물론 jQuery('div.withScrollBar') 선택 항목을 캐시하여 해당 부분을 두 번 수행하지 않도록 해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;컨테이너가 페이지에 한 번만 있고 jQuery를 사용하고 있다고 가정하면 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var containerEl = $('.container')[0];
var scrollbarWidth = containerEl.offsetWidth - containerEl.clientWidth;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자세한 내용은 이 &lt;a href=&quot;https://stackoverflow.com/questions/23494468/detect-different-kind-of-scrollbars-eg-normal-hidden-osx/32490737#32490737&quot;&gt;답변&lt;/a&gt;을 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://jdsharp.us/jQuery/minute/calculate-scrollbar-width.php&quot; rel=&quot;nofollow&quot;&gt;이것&lt;/a&gt;은 나에게 효과가 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; function getScrollbarWidth() { 
    var div = $('&amp;lt;div style=&quot;width:50px;height:50px;overflow:hidden;position:absolute;top:-200px;left:-200px;&quot;&amp;gt;&amp;lt;div style=&quot;height:100px;&quot;&amp;gt;&amp;lt;/div&amp;gt;'); 
    $('body').append(div); 
    var w1 = $('div', div).innerWidth(); 
    div.css('overflow-y', 'scroll'); 
    var w2 = $('div', div).innerWidth(); 
    $(div).remove(); 
    return (w1 - w2); 
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/13382516/getting-scroll-bar-width-using-javascript&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>javascript</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/764</guid>
      <comments>https://stoneblock.tistory.com/764#entry764comment</comments>
      <pubDate>Sun, 5 Nov 2023 10:52:31 +0900</pubDate>
    </item>
    <item>
      <title>git 저장소에서 bin 및 obj 폴더를 무시하려면 어떻게 해야 합니까?</title>
      <link>https://stoneblock.tistory.com/763</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;git 저장소에서 bin 및 obj 폴더를 무시하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;git 저장소에서 bin과 obj 폴더를 무시하고 싶습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제가 알아낸 바와 같이 .gitignore에서 이 작업을 수행할 수 있는 쉬운 방법은 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그럼, 다른 방법은 없을까요?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Visual Studio에서 깨끗한 솔루션을 사용하고 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;왜 이게 당신한테 안 되는지 모르겠어요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;도움이 될 경우를 대비하여, 다음은 내 Visual Studio/git 프로젝트 중 하나에 있는 일반적인 .gitignore 파일입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;*.suo
*.user
_ReSharper.*
bin
obj
packages
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;단순히 무시하고 항목을 입력하는 것은 파일을 무시하지 않을 수 있으므로 커밋해야 할 수도 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 다음과 같은 방법을 사용했고 저를 위해 일했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git rm -r --cached .

git add .
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고나서&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git commit -am &quot;Remove ignored files&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 나중에 저장소에 포함시킨 스크립트 폴더는 무시됩니다.&lt;/font&gt;&lt;/p&gt;&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;갱신하다&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Visual Studio 2019의 최근 업데이트 이후 아래 옵션을 사용할 수 없었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 아래 위치에서 최신 gitignore 컨텐츠를 복사할 수도 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/github/gitignore/master/VisualStudio.gitignore&quot; rel=&quot;noreferrer&quot;&gt;https://raw.githubusercontent.com/github/gitignore/master/VisualStudio.gitignore&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h3&gt;&lt;font papago-translate=&quot;translated&quot;&gt;원답&lt;/font&gt;&lt;/h3&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Visual Studio를 사용하는 경우 간단한 방법이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;팀 탐색기 열기&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;설정 클릭&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;리포지토리 설정&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Ignore &amp;amp; Attribute file 섹션에서 Ignore file 옆의 Add를 클릭합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본 .gitignore 파일을 생성하여 프레임워크/언어에서 사용할 대부분의 일반 폴더 및 파일을 무시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/GiIxC.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/GiIxC.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이전에 bin 및 obj 폴더를 커밋한 경우 .gitignore에 추가해도 자동으로 삭제되지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어 다음과 같이 폴더 삭제를 커밋해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git rm -rf obj&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;git rm -rf yourProject/obj&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;삭제를 실행합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;몇몇 새로운 개발자들에게 OBJ 파일과 Bin 파일을 저장소로 체크인하도록 했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;비록 내가 그 파일들을 제외하는 git 무시를 할 수 있지만 그것은 내 로컬 레포에서 작동하지 않을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 이것을 고치기 위해 다음과 같이 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저장소에서 Bin 및 Obj 폴더를 삭제했습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내 로컬 레포에서도 bin 및 obj 폴더를 삭제했습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;gitignore 생성/업데이트 및 저장(아직 완료되지 않은 경우)&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Visual studio의 repo: .suo에도 다른 사용자 특정 파일이 있는 경우 위 작업을 수행한 후 gitignore 파일에 추가할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 이것이 같은 시나리오에 있는 누군가에게 도움이 되기를 바라며 잠시 조용히 시간을 보낸 후에 이것을 발견했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;원하지 않는 폴더의 이름을 추가해 보십시오. 그러면 git는 앞으로 언급된 루트 디렉터리에서 바로 변경 사항을 적용하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 폴더 이름을 에 추가하는 것이 효과가 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.gitignore&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;bin
obj
packages
&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위치를 찾습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;bin&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;obj&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;윈도우즈 탐색기의 폴더&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;TortoorGit &amp;gt; 삭제 후 추가 목록 무시 &amp;gt; bin 을 마우스 오른쪽 버튼으로 클릭합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Tortoor Git &amp;gt; 삭제 후 추가 무시 목록 &amp;gt; obj 우클릭&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 프로젝트에서 bin과 obj를 무시하고 싶다면 (&lt;a href=&quot;http://git-scm.com/docs/gitignore&quot; rel=&quot;nofollow noreferrer&quot;&gt;gitignoreman 페이지&lt;/a&gt;에서) 를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구성 변수 core.에서 지정한 파일에서 읽은 패턴은 파일을 제외합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;core.excluds 파일은 유닉스에서 ~/.gitconfig인 config 파일에 설정할 수 있습니다 - Windows 아래 어디에 있는지 모르겠습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;@Raphael Pinel이 전적으로 맞습니다. .gitignore는 파일이 이미 Git 저장소에 있으면 작동하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 VS2019와 Azure DevOps를 Git 저장소로 사용하고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 고쳤습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Visual Studio에서 .gitignore 파일(필요한 경우)을 추가하고 해당 파일을 저장소로 푸시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; Team Explorer-&amp;gt;Changes-&amp;gt;Right Click
 .gitignore-&amp;gt;Stage.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 단계별 커밋, 동기화.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Azure DevOps 웹사이트로 이동합니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Git 저장소에서 bin/obj 폴더를 삭제합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Visual Studio에서는.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Team Explorer-&amp;gt;Changes-&amp;gt;&quot;Undo Changes&quot; to those folders.
Team Explorer-&amp;gt;Synch-&amp;gt;Pull to update local Git repository.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 프로젝트를 빌드할 수 있으며 Git는 .gitignore 파일에 지정된 폴더를 무시합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;소스 트리를 통해 시도해도 무시 파일이 들어오지 않는 경우 tools--&amp;gt;option-&amp;gt;Git로 이동한 다음 .gitignore의 위치를 선택합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 경우에는 bin과 obj 폴더가 root.gitignore 파일의 Project 폴더 아래에 중첩되어 있어서 아래와 같이 추가해야 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;[PROJECT_FOLDER_NAME]/빈&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;[PROJECT_FOLDER_NAME]/obj&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PROJECT_FOLDER_NAME을 프로젝트 폴더 이름으로 바꿉니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/2347335/how-could-i-ignore-bin-and-obj-folders-from-git-repository&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Git</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/763</guid>
      <comments>https://stoneblock.tistory.com/763#entry763comment</comments>
      <pubDate>Sun, 5 Nov 2023 10:52:23 +0900</pubDate>
    </item>
    <item>
      <title>sql join 문에서 table의 순서에 의미가 있습니까?</title>
      <link>https://stoneblock.tistory.com/762</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;sql join 문에서 table의 순서에 의미가 있습니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;sql join 문에서 table 순서에 의미가 있습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를들면&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT dept_name, emp_name 
FROM   Employee 
INNER JOIN Department ON Employee.dept_id = Department.dept_id
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT dept_name, emp_name 
FROM Department 
INNER JOIN Employee  ON Employee.dept_id = Department.dept_id
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테이블 순서에 따라 성능상의 이점이 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;없어요.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;비용 기반 옵티마이저를 사용하는 DBMS의 대부분(전부는 아닐 경우).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문장을 지정하는 순서는 실행 속도에 영향을 주지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.dba-oracle.com/art_otn_cbo.htm&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Oracle SQL 비용 기반 최적화&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Oracle의 CBO(Cost-Based SQL Optimizer)는 모든 Oracle 쿼리에 대한 실행을 제어하는 매우 정교한 Oracle 구성 요소입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;CBO는 세계에서 가장 정교한 소프트웨어 구성 요소 중 하나로 발전해 왔으며, SQL 문을 평가하고 해당 문에 대한 &quot;최상의&quot; 실행 계획을 수립하는 어려운 작업을 수행하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두 문장 모두 &lt;strong&gt;동일한 실행 계획&lt;/strong&gt;을 생성하므로 동일한 성능 특성을 가집니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;비용은 이용 가능한 통계에 근거할 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;통계 업데이트는 옵티마이저가 가장 효율적인 실행 계획을 생성하기 위해 매우 중요합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일반적으로 상관없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;최적화자는 쿼리에 나타나는 순서에 관계없이 테이블에 결합하는 가장 효율적인 순서를 파악할 수 있어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 테이블의 순서가 쿼리 계획에 영향을 미칠 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;일반적으로 두 개의 테이블 조인이 있는 경우에는 그렇지 않지만 쿼리의 테이블 수가 증가하면 가능한 조인 수가 O(n!) 비율로 증가합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Optimizer가 모든 가능한 조인 순서를 고려하는 것은 매우 빨리 불가능해집니다. 따라서 트리를 가지치기 위해 다양한 휴리스틱을 사용해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;즉, 테이블이 쿼리의 열 번째 테이블인 경우가 아니라 SQL 문에서 해당 테이블이 먼저 나열될 경우 최적화자가 다른 드라이빙 테이블을 선택하는 상황이 발생합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Jonathan Lewis는 &lt;a href=&quot;http://jonathanlewis.wordpress.com/2006/11/03/table-order/&quot;&gt;쿼리에 나타나는 주문 테이블이 쿼리 계획에 어떤&lt;/a&gt; 영향을 미칠 수 &lt;a href=&quot;http://jonathanlewis.wordpress.com/2006/11/03/table-order/&quot;&gt;있는지&lt;/a&gt; 보여주는 멋진 블로그 게시물을 가지고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각별히 주의하고 싶다면 운전대를 먼저 나열하는 것이 합리적인 방법입니다. 자주 도움이 되지는 않지만 때로는 도움이 될 수도 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Optimizer는 가능한 모든 조인 순서 순열을 확인하고 비용 값이 가장 낮은 순열을 선택합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;즉, 진술서를 준비하는 자체를 최적화하는 것이 복잡한 진술서의 병목 현상이 된다는 것을 의미합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;결합할 테이블이 많을수록 확인할 실행 계획 변형이 늘어납니다. 즉, 수학적으로 n!(Factory)입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;출처 : http://use-the-index-luke.com/sql/join&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니요. 옵티마이저는 최상의 조인 경로를 결정합니다. 아니면 적어도 자신이 생각하는 최선의 조인 경로를 결정합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;비정상적인 상황에서는 필요한 모든 정보를 가지고 있지 않을 때도 있지만 99%의 경우 정확한 정보를 얻을 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내부적으로 다른 방식으로 SQL 문을 다시 작성합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 응답자들이 말하듯이&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 내부 접합을 왼쪽 접합으로 대체할 수 있는지 생각해 보세요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대부분의 쿼리에서 이것은 성능의 이점입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/11039236/is-there-any-significance-in-the-order-of-table-in-sql-join-statement&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Oracle</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/762</guid>
      <comments>https://stoneblock.tistory.com/762#entry762comment</comments>
      <pubDate>Sun, 5 Nov 2023 10:52:15 +0900</pubDate>
    </item>
    <item>
      <title>Exploent의 필드별 MySQL 순서</title>
      <link>https://stoneblock.tistory.com/761</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Exploent의 필드별 MySQL 순서&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL 쿼리에서 사용자 지정 정렬 순서를 정의하려면 다음과 같은 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ORDER BY FIELD(language,'USD','EUR','JPN')
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것의 웅변적인 ORM 버전은 무엇일까요?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;업데이트:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 솔루션은 다양한 분야에서 주문할 때도 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$events = Event::with( 'type', 'location' )
               -&amp;gt;orderBy( 'event_type_id' )
               -&amp;gt;orderByRaw( &quot;FIELD(status, 'good', 'bad', 'hidden', 'active', 'cancelled')&quot; )
               -&amp;gt;orderBy( 'date' );
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;둘 중 하나를 사용하는 것&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DB::raw()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;orderByRaw&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;직접 작동해야 함:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$models = Model::orderByRaw('FIELD(language, &quot;USD&quot;, &quot;EUR&quot;, &quot;JPN&quot;)')-&amp;gt;get();
// or
$models = Model::orderBy(DB::raw('FIELD(language, &quot;USD&quot;, &quot;EUR&quot;, &quot;JPN&quot;)'))-&amp;gt;get();
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;FIELD()의 두 번째 매개 변수에 &lt;strong&gt;implode&lt;/strong&gt; 사용&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; $facilities = $query-&amp;gt;with(['interest','city:id,name', 'state:id,name'])
        -&amp;gt;Active()
        -&amp;gt;whereIn('facility_id', $facilities_list)
        -&amp;gt;orderByRaw('FIELD(facility_id, '.implode(&quot;, &quot; , $facilities_list).')')
        -&amp;gt;get();
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;조인을 사용하는 경우 열 앞에 테이블 이름을 간단히 추가할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Student::orderByRaw('FIELD(students.id, 3, 2, 1) DESC')-&amp;gt;join('students_contact', 'students_contact.student_id', '=', 'students.id')
-&amp;gt;get();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;참고: 오른쪽에 있는 원시 쿼리에 열을 추가하기 시작합니다. 예를 들어 설명하겠습니다. 순서 7, 8, 9를 달성하려면 다음과 같이 하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;orderByRaw('FIELD(students.id, 9, 8, 7) DESC')
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러면 데이터를 올바른 방법으로 가져옵니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;DESC 키워드도 목록 시작 부분이 아니라 목록 하단에 정렬된 데이터를 추가하기 때문에 추가했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/29659430/mysql-order-by-field-in-eloquent&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/761</guid>
      <comments>https://stoneblock.tistory.com/761#entry761comment</comments>
      <pubDate>Sun, 5 Nov 2023 10:52:08 +0900</pubDate>
    </item>
    <item>
      <title>malloc은 메모리를 할당하는 동안 더 많은 공간을 확보합니까?</title>
      <link>https://stoneblock.tistory.com/760</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;malloc은 메모리를 할당하는 동안 더 많은 공간을 확보합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;테스트 프로그램에서 다음 동작을 관찰하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;1MB 정도의 용량을 제공됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;free()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그후에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sleep(10)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 다섯 번 하고 있어요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;메모리 소모량을 관찰하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;top&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;프로그램이 실행되는 동안.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;한번만&lt;/font&gt;&lt;/font&gt;&lt;code&gt;free()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;-d, 프로그램의 가상 메모리(VIRT) 사용량이 1MB 줄어들 것으로 예상하고 있습니다. 하지만 실제로는 그렇지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;안정적으로 유지됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이러한 행동에 대한 설명은 무엇입니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;한다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;메모리를 할당하는 동안 약간의 예약을 합니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;p&gt;&lt;em&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;한번만&lt;/font&gt;&lt;/font&gt;&lt;code&gt;free()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;-d, 프로그램의 가상 메모리(VIRT) 사용량이 1MB 줄어들 것으로 예상됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;음, 이것은 C 표준으로는 보장되지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;한 번만, 한 번만&lt;/font&gt;&lt;/font&gt;&lt;code&gt;free()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;메모리, 당신은 더 이상 그것에 접근하지 말아야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;메모리 블록이 실제로 사용 가능한 메모리 풀로 반환되는지 아니면 향후 할당을 위해 따로 보관되는지는 메모리 관리자가 결정합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C 표준은 시행자에게 강요하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;free&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;메모리를 OS에 직접 반환합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 서로 다른 C 라이브러리 구현은 다르게 동작할 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;직접 돌려주는 사람도 있고 안 돌려주는 사람도 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사실, 동일한 구현은 할당 크기와 패턴에 따라 다르게 동작할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;물론 이러한 행동은 정당한 이유가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것이 항상 가능한 것은 아닙니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;OS 수준의 메모리 할당은 일반적으로 페이지(4KB, 4MB 또는 ...크기) 단위로 수행됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 페이지의 작은 부분이 다른 부분을 해제한 후에도 여전히 사용 중인 경우, 해당 부분도 해제될 때까지 페이지를 운영 체제에 반환할 수 없습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;효율성.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;응용프로그램이 메모리를 다시 요청할 가능성이 높습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그렇다면 왜 OS에 돌려주고 곧 다시 요청을 하는 것일까요.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(물론 유지되는 메모리의 크기에 제한이 있을 수 있습니다.)&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;대부분의 경우, 당신은 당신의 기억에 대해 책임을 지지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;free&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구현이 이를 유지하기로 결정한 경우(assuming 좋은 구현입니다).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;조만간 재할당되거나 OS로 반환됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 메모리 사용량을 최적화하는 것은 보유한 양을 기준으로 해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;-에드, 넌 안해봤잖아요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;free&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;-d. 이것에 대해 걱정해야 하는 경우는 할당 패턴/크기가 메모리 조각화를 일으키기 시작할 때이며, 이는 그 자체로 매우 큰 주제입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 임베디드 시스템에 있는데 사용 가능한 메모리 양이 제한되어 있고 메모리가 할당되고 해제되는 시기와 방법에 대한 제어력이 더 필요한 경우에는 OS에서 직접 메모리 페이지를 요청하고 수동으로 관리해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;편집: 나는 당신이 왜 당신이 당신의 자유로운 기억에 대해 책임을 지지 않는지 설명하지 않았습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 이유는 현대 OS에서 할당된 메모리는 가상이기 때문입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;즉, 32비트 시스템에 512MB를 할당하거나 64비트 시스템에 10TB를 할당하는 경우 해당 메모리를 읽거나 쓰지 않는 한 해당 메모리를 위한 물리적 공간을 예약하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실제로는 전체 블록이 아닌 해당 큰 블록에서 터치하는 페이지에 대해서만 물리적 메모리를 예약합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 &quot;그 메모리를 사용하지 않는 동안&quot;이 지나면 해당 메모리의 내용이 디스크에 복사되고 기본 물리적 메모리가 다른 용도로 사용됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이는 실제 사용 중인 malloc 구현에 매우 의존적입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;리눅스 아래에는 임계값이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MMAP_THRESHOLD&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;특정 메모리의 위치를 결정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요청이 들어옵니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요청금액이 이하인 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MMAP_THRESHOLD&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 요청은 메모리 블록이 이미 존재하는 경우 소위 &quot;free list&quot;에서 가져옴으로써 충족됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;free()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;d. 그렇지 않으면, 프로그램의 &lt;a href=&quot;http://man7.org/linux/man-pages/man2/brk.2.html&quot; rel=&quot;noreferrer&quot;&gt;&quot;브레이크 라인&quot;(&lt;/a&gt;즉, 데이터 세그먼트의 끝)이 증가하고 이 프로세스에 의해 프로그램이 사용할 수 있게 된 메모리가 요청에 사용됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;온&lt;/font&gt;&lt;/font&gt;&lt;code&gt;free()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 프리 메모리 블록이 프리 리스트에 추가됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데이터 세그먼트의 맨 끝에 충분한 여유 메모리가 있는 경우, 브레이크 라인(위에서 언급)을 다시 이동하여 데이터 세그먼트를 축소하고, 초과 메모리를 OS로 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요청금액이 초과하는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MMAP_THRESHOLD&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 별도의 메모리 블록이 OS에 의해 요청되고 다음 기간 동안 다시 반환됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;free()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;자세한 내용은 https://linux.die.net/man/3/malloc 도 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/55294985/does-malloc-reserve-more-space-while-allocating-memory&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/760</guid>
      <comments>https://stoneblock.tistory.com/760#entry760comment</comments>
      <pubDate>Sun, 5 Nov 2023 10:52:02 +0900</pubDate>
    </item>
    <item>
      <title>jQuery의 ajax success callback에서 textStatus가 &amp;quot;success&amp;quot;가 되지 않을 수 있습니까?</title>
      <link>https://stoneblock.tistory.com/759</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;jQuery의 ajax success callback에서 textStatus가 &quot;success&quot;가 되지 않을 수 있습니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://api.jquery.com/jQuery.ajax/&quot; rel=&quot;noreferrer&quot;&gt;문서&lt;/a&gt;에는 다음과 같은 경우 textStatus가 될 수 있는 가능한 값의 목록이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;error()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;콜백 파이어(&quot;timeout&quot;, &quot;오류&quot;, &quot;수정되지 않음&quot; 및 &quot;parse오류&quot;)가 발생하지만 에 대해 지정된 것은 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;success()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이벤트성의&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;성공&quot; 이외에 다른 가치를 전달할 수 있는 것이 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;success()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;콜백?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 문서는 어디에도 기록되어 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;성공은 성공에 의해서만 부를 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서 쉬운 대답은 아니오입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아약스가 어떻게 했든 간에 Complete는 항상 실행됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 완전해야 하며 값 텍스트 상태가 반환될 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;포럼에서 텍스트 상태는 다음 값 중 하나일 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;timeout&quot;
&quot;error&quot;
&quot;notmodified&quot;
&quot;success&quot;
&quot;parsererror&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;http://forum.jquery.com/topic/jquery-ajax-textstatus-documented&quot; rel=&quot;noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://forum.jquery.com/topic/jquery-ajax-textstatus-documented&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;Success&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;complete&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://api.jquery.com/jQuery.ajax/&quot; rel=&quot;noreferrer&quot;&gt;여기&lt;/a&gt;에 기록되어 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;상태가 함수에 전달되는 텍스트가 무엇인지에 대해서는 걱정할 필요가 없으며, 자동으로 처리됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;성공 함수는 통화가 성공할 때/성공할 때 호출되며, 완료는 다른 모든 것의 맨 끝에 호출됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어, 제가 작업 중인 것을 예로 들어, 페이지의 한 섹션을 클릭하면 트리거되는 세 가지 기능을 함께 연결했습니다. 디브가 사라지면 아약스 호출이 실행됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;성공 함수는 div의 내용을 업데이트하고(빛이 바래는 동안), 전체 함수는 div의 fadeIn을 호출합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 이것은 새로운 콘텐츠로 사라지고, 업데이트되고, 다시 사라집니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문서 자체는 보이지 않지만 출처에서 찾을 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기 좋은 시청자가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://james.padolsey.com/jquery/#v=1.4&amp;amp;fn=jQuery.ajax&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://james.padolsey.com/jquery/ #v=1.4&amp;amp;fn=jQuery.jax&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 가능한 값은 &quot;parserer error&quot;와 &quot;not modified&quot;입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;출처를 보면 다음과 같이 보입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;notmodified&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 본 적이 없지만 가치가 될 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/3461491/in-jquerys-ajax-success-callback-will-textstatus-ever-not-be-success&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Ajax</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/759</guid>
      <comments>https://stoneblock.tistory.com/759#entry759comment</comments>
      <pubDate>Sun, 5 Nov 2023 10:51:56 +0900</pubDate>
    </item>
    <item>
      <title>angularJS $on 이벤트 핸들러 트리거 순서</title>
      <link>https://stoneblock.tistory.com/758</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;angularJS $on 이벤트 핸들러 트리거 순서&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 두가지를 궁금했어요, 각도의&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JS 이벤트 처리.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;동일한 이벤트를 청취하는 핸들러가 트리거되는 순서는 어떻게 정의됩니까?&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것에 대해 궁금증을 가지기 시작하면 디자인이 좋지 않다는 신호입니까?&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;각 &lt;a href=&quot;http://docs.angularjs.org/api/ng.%24rootScope.Scope&quot;&gt;$on, $broadcast 및 $emit&lt;/a&gt;에 대한 설명서와 네이티브 &lt;a href=&quot;http://www.w3.org/TR/DOM-Level-3-Events/#event-flow&quot;&gt;DOM 이벤트 흐름&lt;/a&gt;을 읽고 어떤 순서로 이벤트 핸들러가 다른 범위에서 트리거되는지 이해했다고 생각합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문제는 여러 핸들러가 동일한 범위(예: rootScope)에서 다양한 장소(예: Controller vs Services)에서 수신하는 경우입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문제를 설명하기 위해 하나의 컨트롤러와 두 개의 서비스로 jsfiddle을 구성했으며 모두 $rootScope http://jsfiddle.net/Z84tX/ 을 통해 통신했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;Thanks&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아주 좋은 질문입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이벤트 핸들러는 초기화 순서대로 실행됩니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 핸들러들이 어떤 핸들러가 먼저 실행되는지 알 필요가 없었기 때문에 이 문제에 대해 별로 생각해 본 적이 없지만, 핸들러들이 초기화되는 순서대로 호출되는 것을 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신은 조종 장치를 가지고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;controllerA&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;두가지 서비스에 달려있는거죠&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ServiceA&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ServiceB&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;myModule
  .controller('ControllerA', 
    [
      '$scope', 
      '$rootScope', 
      'ServiceA', 
      'ServiceB', 
      function($scope, $rootScope, ServiceA, ServiceB) {...}
    ]
  );
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서비스와 컨트롤러 모두 이벤트 수신기를 정의합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이제 모든 종속성을 해결한 후 주입해야 합니다. 즉, 컨트롤러에 주입하기 전에 두 서비스가 모두 초기화됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 서비스 팩토리는 컨트롤러보다 먼저 초기화되기 때문에 서비스에 정의된 핸들러가 먼저 호출됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러면 투입되는 순서대로 초기화가 되는 것을 볼 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ServiceA&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이전에 초기화됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ServiceB&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그 순서대로 컨트롤러에 주입되기 때문입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;컨트롤러 서명 내에서 순서를 변경하면 초기화 순서도 변경됩니다(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ServiceB&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;앞에 오는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ServiceA&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 서비스가 초기화된 후 컨트롤러도 초기화되고 이를 통해 이벤트 핸들러가 내부에 정의됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 $broadcast에서 핸들러는 다음과 같은 순서로 실행됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ServiceA&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;핸들러,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ServiceB&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;핸들러,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ControllerA&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;조련사&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 경로로 가는 것은 좀 번거롭지만, 서비스 B가 서비스 A 이전에 초기화되는지 확인할 수 없고 서비스 B의 청취자가 먼저 실행되어야 하는 경우를 대비하여 대안을 제공하고자 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신이 조작할 수 있는 것은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$rootScope.$$listeners&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서비스 B의 청취자를 최우선으로 하는 배열.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;청취자를 에 추가할 때 이와 같은 것이 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$rootScope&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서비스 중 B:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var listener, listenersArray;
$rootScope.$on('$stateChangeStart', someFunction);
listenersArray = $rootScope.$$listeners.$stateChangeStart;
listener = listenersArray[listenersArray.length - 1];
listenersArray.splice(listenersArray.length - 1, 1);
listenersArray.unshift(listener);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;#2에 대한 답을 제공하기 위해(#1에 대한 @Stewie의 답이 정말 좋은 것이라고 생각하기 때문에), &quot;이것을 보면 나쁜 코드&quot;라는 결정적인 규칙을 제안하는 것을 망설이고 &lt;em&gt;있지만&lt;/em&gt;, 만약 두 명의 이벤트 핸들러가 있다면,&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 하나는 다른 하나가 실행된 후에만 실행할 수 있습니다. 왜 그런 것인지, 그리고 논리가 실행되는 방식을 더 잘 캡슐화하거나 구성할 수 없는 경우를 평가해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;pub/sub event 브로드캐스트/리스닝의 주요 사용 사례 중 하나는 서로 완전히 독립적인 별개의 구성 요소가 그들의 영향 &lt;strong&gt;영역&lt;/strong&gt;에서 비동기적인 &lt;strong&gt;방식으로 작동&lt;/strong&gt;하도록 허용하는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;한 핸들러는 다른 핸들러가 먼저 실행된 후에만 작동해야 하므로 보조 요구사항을 추가하여 pub/sub의 비동기성을 제거하는 것입니다(가능한 경우 필요함).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;꼭 필요한 종속성이라면 아닙니다. &lt;em&gt;디자인이 나쁘다는 증상이 아니라 해당 기능의 요구&lt;/em&gt; 사항에 &lt;em&gt;따른 증상입니다.&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Angular JS를 처음 사용하는 사용자이므로 답변이 최적에 못 미치더라도 양해 부탁드립니다. :P&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이벤트에 의해 트리거된 함수의 순서를 종속적으로 설정해야 하는 경우(즉, 함수 A, 함수 B) 트리거 함수를 생성하지 않는 것이 더 나을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function trigger(event,data) {
    FunctionA(event,data);
    FunctionB(event,data);
}

$rootScope.on('eventTrigger',trigger);
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;2번 지점에 대한 다른 의견을 추가하려면 순서를 보장해야 할 경우 청취자 배열이 있는 서비스를 사용하여 관찰자 패턴을 구현할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;서비스에서 청취자가 순서를 지정하는 방법을 정의하는 &quot;addListener&quot; 함수를 정의할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그런 다음 이벤트를 수행하는 데 필요한 다른 구성 요소에 이 서비스를 주입할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;디자인에 사용하는 것은 절대 권장되지 않지만 선택의 여지가 없을 때도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;$rootScope.$on('someEvent', () =&amp;gt; {
    setTimeout(eventHandler1, 1);
});

$rootScope.$on('someEvent', eventHandler2);

const eventHandler1 = () =&amp;gt; {
    console.log('This one runs last');
};

const eventHandler2 = () =&amp;gt; {
    console.log('This one runs first');
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 보시면 아시겠지만, 저는 지금까지&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setTimeout&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실제 핸들러를 실행하는 순서를 속이고 다음을 만듭니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;eventHandler1&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;먼저 호출되었지만 마지막으로 실행할 핸들러입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실행 우선 순위를 설정하려면 다음 항목을 변경합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setTimeout&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;필요에 따라 연기합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이는 이상적이지 않으며 특정한 경우에만 적합합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/17451382/angularjs-on-event-handler-trigger-order&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularJS</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/758</guid>
      <comments>https://stoneblock.tistory.com/758#entry758comment</comments>
      <pubDate>Sun, 5 Nov 2023 10:51:49 +0900</pubDate>
    </item>
    <item>
      <title>wocommerce는 rest api를 통해 사용자 이름과 비밀번호를 확인합니다.</title>
      <link>https://stoneblock.tistory.com/757</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;wocommerce는 rest api를 통해 사용자 이름과 비밀번호를 확인합니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 wp-wo commerce에 구축된 eCommerce 사이트용 안드로이드 앱을 개발하고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 wp에 대해 정말 잘 모릅니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 http://woothemes.github.io/woocommerce-rest-api-docs/ 을 읽고 거의 모든 안드로이드 앱을 개발했지만, rest API를 통해 고객의 사용자 이름과 비밀번호를 확인할 방법을 찾지 못했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;나는 단지 사용자 이름과 비밀번호를 전달하고 그 결과를 합격 또는 불합격으로 예상하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신의 친절한 도움에 미리 감사드립니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아쉽게도 WooCommerce REST API는 로그인/로그아웃(고객)에 대해서는 고객 역할을 가진 WordPress 사용자로 취급하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;API KEY와 SECRETE는 당신의 앱이 제품-주문 등으로 데이터를 가져오는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;WordPress API 로그인 방법을 사용하여 사용자 정보에 접근하고 신규 사용자/고객을 가입시켜야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://developer.wordpress.org/rest-api/using-the-rest-api/authentication/&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;WordPress REST API / Auth&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JWT를 사용하고 싶다면 플러그인 레포에 플러그인이 많이 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://wordpress.org/plugins/simple-jwt-login/&quot; rel=&quot;nofollow noreferrer&quot;&gt;간단한 JWT 로그인&lt;/a&gt; –&lt;a href=&quot;https://wordpress.org/plugins/simple-jwt-login/&quot; rel=&quot;nofollow noreferrer&quot;&gt; JWT를 사용하여 워드프레스에 로그인하고 등록&lt;/a&gt;하면 잘 &lt;a href=&quot;https://wordpress.org/plugins/simple-jwt-login/&quot; rel=&quot;nofollow noreferrer&quot;&gt;작동합니다.&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/33274183/woocommerce-validate-user-name-and-password-via-rest-api&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/757</guid>
      <comments>https://stoneblock.tistory.com/757#entry757comment</comments>
      <pubDate>Sun, 5 Nov 2023 10:51:42 +0900</pubDate>
    </item>
    <item>
      <title>MySQL의 원시 바이너리 플로트 데이터 액세스</title>
      <link>https://stoneblock.tistory.com/756</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL의 원시 바이너리 플로트 데이터 액세스&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;원격 시스템에서 IEEE754 32비트 부동 소수점 데이터를 수신하여 MySQL(MariaDB) 데이터베이스에 저장하고 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;데이터가 수신된 대로 데이터베이스에서 데이터를 정확히 가져올 수 있는지 확인하려고 합니다. 따라서 이상적으로 이진 데이터를 직접 삽입하여 반올림 오류를 방지할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;MySQL은 Float에 IEEE754를 사용하기 때문에 바이너리 데이터를 직접 사용할 수 있는 방법이 있는지 궁금합니다. 아니면 데이터를 바이너리 데이터로 저장하고 MySQL 외부에서 변환해야 합니까(또는 데이터 복사본 2개를 바이너리 열에 저장하고 하나를 플로트 열로 저장)?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/41272638/access-to-raw-binary-float-data-in-mysql&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/756</guid>
      <comments>https://stoneblock.tistory.com/756#entry756comment</comments>
      <pubDate>Sun, 5 Nov 2023 10:51:36 +0900</pubDate>
    </item>
    <item>
      <title>C 표준은 n개 요소 배열의 크기가 요소 크기의 n배가 되도록 요구합니까?</title>
      <link>https://stoneblock.tistory.com/755</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C 표준은 n개 요소 배열의 크기가 요소 크기의 n배가 되도록 요구합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C 표준은 n개 요소 배열의 크기가 요소 크기의 &lt;em&gt;n배일&lt;/em&gt; 것을 명시적 진술에 의해 또는 요구 사항에서 엄격한 논리적 추론에 의해 요구합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어, 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int (*x)[5] = malloc(5 * sizeof **x);&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;5개의 배열을 위한 충분한 공간을 요청하지 못함&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C 2011 [N1570] 6.5.3.47은 다음과 같이 어레이의 엘리먼트 수를 계산하는 예를 보여줍니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof array / sizeof array[0]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 그러나 예는 표준의 규범적인 부분이 아닙니다(앞서 제8항에 따라).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;6.2.520은 배열 유형이 특정 유형을 가진 연속적으로 할당된 비어 있지 않은 개체 집합을 설명하지만 필요한 총 메모리에 대해서는 침묵한다고 말합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이는 언어 변호사 문제일 뿐이며 실제 구현은 무관합니다. (구체적인 예를 원하는 사람들을 만족시키기 위해 대용량 어레이에 대해 추가 메모리 관리가 필요한 C 구현을 가정해 보십시오. 따라서 어레이를 생성하려면 메모리 관리에 도움이 되는 추가 데이터를 생성해야 합니다.)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예, 배열 크기가 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;T[n]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;있다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;n * sizeof (T)&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://port70.net/~nsz/c/c11/n1570.html#6.2.5p20&quot; rel=&quot;noreferrer&quot;&gt;표준은 &lt;/a&gt;§6.2.5/20의 어레이를 다음과 같이 정의합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열 유형은 특정 멤버 개체 유형을 가진 연속적으로 할당된 비어 있지 않은 개체 집합을 설명합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;더 나아가.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;operator는 배열의 총 바이트 수를 산출합니다( §&lt;a href=&quot;http://port70.net/~nsz/c/c11/n1570.html#6.5.3.4p4&quot; rel=&quot;noreferrer&quot;&gt;6&lt;/a&gt;.5.3.4/4).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열 유형이 있는 피연산자에 &lt;strong&gt;size&lt;/strong&gt; of 를 적용하면 결과는 배열의 총 바이트 수가 됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구조 또는 조합 유형을 가진 피연산자에 적용하면 내부 패딩과 후행 패딩을 포함하여 해당 객체의 총 바이트 수가 결과로 나타납니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열은 개체의 연속적인 할당으로 구성되므로 내부 패딩이 있을 수 없습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 트레일링 패딩은 다음과 관련하여 명시적으로 언급되기 때문에.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;연산자는 조합 및 구조의 맥락에서만 배열이 그러한 후행 패딩을 갖지 않을 것으로 예상되는 것은 분명합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://port70.net/~nsz/c/c11/n1570.html#6.2.6.1p4&quot; rel=&quot;noreferrer&quot;&gt;마지막&lt;/a&gt;으로, §&lt;a href=&quot;http://port70.net/~nsz/c/c11/n1570.html#6.2.6.1p4&quot; rel=&quot;noreferrer&quot;&gt;6&lt;/a&gt;.2.6.1/4에 다음과 같이 명시되어 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다른 개체 유형의 비트 필드가 아닌 개체에 저장된 &lt;em&gt;값&lt;/em&gt;은 n x &lt;strong&gt;CHAR_B&lt;/strong&gt;로 구성됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;IT&lt;/strong&gt; 비트(여기서 &lt;em&gt;n&lt;/em&gt;은 해당 유형의 개체 크기)를 바이트 단위로 나타냅니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;값은 &lt;strong&gt;서명&lt;/strong&gt;되지 않은 &lt;strong&gt;char[&lt;em&gt;n&lt;/em&gt;]&lt;/strong&gt; 유형의 개체(예: memcpy)로 복사될 수 있습니다. 결과적인 바이트 집합을 값의 &lt;em&gt;개체 표현&lt;/em&gt;이라고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열에 후행 패딩 바이트가 있을 수 &lt;em&gt;있다고&lt;/em&gt; 가정할 때, 배열을 고려합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;unsigned char A[n]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 그리고 배열을 좀 더 고려해 보겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;unsigned char B[sizeof A]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 모든 바이트(가능한 패딩 바이트 포함)에 적용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;A[]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;복사되었습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;지금이다,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;A[]&lt;/code&gt; &lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같은 크기여야 &lt;em&gt;합니다&lt;/em&gt;.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;B[]&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 이후 (&lt;a href=&quot;http://port70.net/~nsz/c/c11/n1570.html#6.2.6.1p8&quot; rel=&quot;noreferrer&quot;&gt;6.&lt;/a&gt;2.6.1/8):&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;둘 이상의 객체 표현을 갖는 값에 연산자가 적용되는 경우, 어떤 객체 표현이 사용되는지가 결과 값에 영향을 미치지 않아야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 다음을 의미할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;B[]&lt;/code&gt; &lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;후행 패딩이 없어야 &lt;em&gt;하는데&lt;/em&gt;, 이는 표준에 언급되지 않은 특정 특수한 조건 하에서 배열이 후행 패딩 바이트를 가질 수 있음을 의미하거나, 또는 배열이 배열을 제외하고 후행 패딩을 가질 수 있음을 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;unsigned char&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 이 두 가지 가능성 중 어느 것도 표준에 언급되지 않았기 때문에 배열에는 애초에 후행 패딩이 없어야 한다는 결론을 내리는 것이 타당해 보입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어레이의 표현을 설명하는 텍스트는 매우 간결하며 6.2.520에서 확인한 내용에 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같이 개체 및 함수 유형에서 파생된 유형의 수는 얼마든지 구성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열 유형은 요소 유형이라고 하는 특정 멤버 개체 유형을 가진 연속적으로 할당된 비어 있지 않은 개체 집합을 설명합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요소 유형은 배열 유형을 지정할 때마다 완전해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열 유형은 요소 유형과 배열에 포함된 요소 수에 따라 특성을 갖습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열 유형은 해당 요소 유형에서 파생된 것이라고 하며, 해당 요소 유형이 T인 경우 배열 유형을 'T의 배열'이라고 부르기도 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;요소 유형에서 배열 유형을 구성하는 것을 '배열 유형 파생'이라고 합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&quot;연속적으로 할당된 비어 있지 않은 객체 집합과 패딩&quot;과 같은 말은 하지 않으므로 배열은 &lt;strong&gt;단지&lt;/strong&gt; 객체일 뿐입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 다음과 같은 주장은 근거가 없는 것으로 보입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sizeof&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열 [type]은 개체들의 연속적인 집합의 크기 이외의 결과를 산출할 수 있습니다. 이것은 명백하게&lt;/font&gt;&lt;/font&gt;&lt;code&gt;N&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;개별 요소 유형의 크기의 배입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;패딩은 존재하지 않도록 명시된 것이 아니기 때문에 스스로 존재할 수 있는 것이 아니라는 점도 주목할 필요가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C는 유형 표현(6.2.6)을 지정하고 적절한 경우 비트와 바이트를 패딩할 수 있는 가능성을 명시적으로 지정합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;배열에 대한 패딩에 대한 텍스트가 없으므로 배열 표현의 일부가 아닙니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/47522295/does-the-c-standard-require-the-size-of-an-array-of-n-elements-to-be-n-times-the&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/755</guid>
      <comments>https://stoneblock.tistory.com/755#entry755comment</comments>
      <pubDate>Sun, 5 Nov 2023 10:51:30 +0900</pubDate>
    </item>
    <item>
      <title>파워셸 스크립트에서 sccreate를 호출하는 방법</title>
      <link>https://stoneblock.tistory.com/754</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;파워셸 스크립트에서 sccreate를 호출하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;호출하고 싶습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sc create&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;힘있는 대본에서.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;코드는 여기 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function Execute-Command
{
    param([string]$Command, [switch]$ShowOutput=$True)
    echo $Command
    if ($ShowOutput) {
        Invoke-Expression $Command
    } else {
        $out = Invoke-Expression $Command
    }
}

$cmd=&quot;sc create `&quot;$ServiceName`&quot; binpath=`&quot;$TargetPath`&quot; displayname=`&quot;$DisplayName`&quot; &quot;
Execute-Command -Command:$cmd
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이로 인해 다음과 같은 오류가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Set-Content : A positional parameter cannot be found that accepts argument 'binpath=...'.
At line:1 char:1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;무엇이 문제입니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위치 논쟁이란 무엇입니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기서의 문제는 그 문제가 아닙니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;실행 가능한&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오류가 말하듯이,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;로 결의합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Set-Content&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 발행하는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Get-Alias -Name sc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;, 알게 될 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/vNk4E.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/vNk4E.png&quot; alt=&quot;gal sc&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;별칭을 무시하려면 파일 확장명을 포함하여 실행 파일의 전체 이름을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;PS C:\&amp;gt; sc.exe query wuauserv

SERVICE_NAME: wuauserv
        TYPE               : 20  WIN32_SHARE_PROCESS
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_PRESHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신은 사용하고 싶을지도 모릅니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-f&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;operator 명령행 인수를 구성할 때 여기저기에 있는 성가신 따옴표 escaping 백틱을 피하기 위해:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$CmdLine = 'sc.exe create &quot;{0}&quot; binpath= &quot;{1}&quot; displayname= &quot;{2}&quot; ' -f $ServiceName,$TargetPath,$DisplayName
Execute-Command -Command $CmdLine
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;PowerShell 및 VS Code Integrated Terminal에서 실패하는 동안 간단한 Command Prompt 콘솔에서 정확한 명령이 작동했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사실 다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Command Prompt as Administrator에서 명령을 실행해야 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sc create MyService binPath= &quot;C:\svc\sampleapp.exe&quot;
sc start MyService
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;마티아스의 대본은 잘 작동하는 것으로 알고 있지만, 교조가 올린 대본은 잘 작동하지 않는 이유가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것은 gotchain sc.exe와 관련이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;binPath 및 displayName의 equals 뒤에 있는 공백은 선택 사항이 아닙니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저에게는 이 토막글이 작동하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$cmd=&quot;sc create `&quot;$ServiceName`&quot; binpath=`&quot;$TargetPath`&quot; displayname=`&quot;$DisplayName`&quot; &quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 이것은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$cmd=&quot;sc create `&quot;$ServiceName`&quot; binpath= `&quot;$TargetPath`&quot; displayname= `&quot;$DisplayName`&quot; &quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 문제는 제가 이것을 기억할 때까지 계속해서 저를 괴롭히기 위해 가끔 제기됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/33782385/how-do-i-invoke-sc-create-from-a-powershell-script&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>PowerShell</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/754</guid>
      <comments>https://stoneblock.tistory.com/754#entry754comment</comments>
      <pubDate>Sun, 5 Nov 2023 10:51:23 +0900</pubDate>
    </item>
    <item>
      <title>새 변수에서 각도 변수로 변경 - 계산된 변수</title>
      <link>https://stoneblock.tistory.com/753</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;새 변수에서 각도 변수로 변경 - 계산된 변수&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;녹아웃에서 앵귤러로 이동하는데 몇 가지 문제가 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저는 제가 분명 비각형 방식으로 무언가를 하고 있을 거라고 생각하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://jsfiddle.net/LostInDaJungle/BxELP/&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://jsfiddle.net/LostInDaJungle/BxELP/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;I linked to jsfiddle so I didn't have to include my code here
Stack Overflow will not let me post my question without a code block.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기에 내 주요 문제 두 가지를 정리한 아주 기본적인 바이올린 연주가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문제 1: val1과 val2는 3과 4로 초기화되고, 7까지 적절히 더합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 텍스트 상자에 있는 값 중 하나를 변경하면 새 값은 문자열로 처리되고 덧셈 대신 연결됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;val1을 4로 바꾸면 8일 때 44가 나옵니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 행동을 해결하는 가장 좋은 방법은 무엇입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문제 2: 계산된 필드.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;{{val1 + val2}}와 같은 곱슬곱슬한 괄호를 사용하여 계산된 필드를 얻을 수 있고 기본 모델이 변경되면 계산된 필드를 자동으로 업데이트할 수 있지만 이는 전혀 허용되지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;본격적인 앱에서 우리는 여러 번 사용하는 '비용'을 생성하고 매번 비용 계산을 넣어야 하는 것이 골칫거리입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 계산이 바뀌면 비용 계산을 사용하는 15개의 다른 장소를 찾아서 모두 업데이트해야 하는 귀찮은 일은 말할 것도 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 입력에 curly bracket으로 ng-model=&quot;cost&quot;를 넣으려고 하면 curly bracket이 작동하지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 비용을 구속하는 방법으로는 아무것도 눈에 띄지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://jsfiddle.net/LostInDaJungle/QNVwe/&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://jsfiddle.net/LostInDaJungle/QNVwe/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 예시는 제가 원하는 구조와 더 유사합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 ko.observable과 달리 계산된 필드는 생성되는 값이 변경될 때 업데이트되지 않습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모두가 내게 제기한 보일러 플레이트 해결책은 많은 ng-change 핸들러를 쓰는 것입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하지만 그건 끔찍합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;폭 변경으로 비용이 변경되고 페이백 계산 등이 변경되는 경우...&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;순식간에 뒤엉킨 난장판이 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 두 가지 방법 모두 논리를 프레젠테이션에서 분리하는 데 실패합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;메소드 1은 내 HTML에 비즈니스 로직을 내장합니다. 메소드 2는 ng-change 핸들러를 내 코드에 많이 넣는데, 이는 일반 ol' HTML로 Change 핸들러를 전체 엉망으로 써야 하는 것과 크게 다르지 않습니다. 만약 내가 ng-change 핸들러를 많이 해야 한다면,&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;최소한 프레젠테이션 계층 밖에서 선언할 수 있기 때문에 자바스크립트로 onChange 핸들러를 바로 하겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음은 같은 내용의 녹아웃 버전입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://jsfiddle.net/LostInDaJungle/eka4S/2/&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;http://jsfiddle.net/LostInDaJungle/eka4S/2/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이건 내가 기대했던 것과 비슷하네요...&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내 입력에 대한 데이터 바인딩, 보기 모델 내에 잘 포함된 모든 프로그램 로직.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한, 제 계산 가능한 것이 자바스크립트 함수이기 때문에 두 값이 숫자인지 확인하는 방법에 대해 머리를 긁적일 필요가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그래서..&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;계산 변수:&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;기본 변수를 보고 계산된 양을 자동으로 업데이트하는 방법이 있습니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;HTML에 프로그램 논리를 저장하지 않아도 됩니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 번호가 문자열로 바뀌는 것을 방지할 수 있는 좋은 방법이 있을까요?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;도와주셔서 고맙습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;참고로 Google Groups: https://groups.google.com/forum/ #!&lt;a href=&quot;https://groups.google.com/forum/#!topic/angular/0dfnDTaj8tw&quot;&gt;topic/&lt;/a&gt;angular&lt;a href=&quot;https://groups.google.com/forum/#!topic/angular/0dfnDTaj8tw&quot;&gt;/0dfnDTaj8tw&lt;/a&gt;에도 게시됨&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;계산된 필드의 경우 컨트롤러에 메서드를 추가합니다. . .&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$scope.cost = function() { return $scope.val1 + $scope.val2 };
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;직접 묶는 겁니다&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;구성 값이 변경됨에 따라 재계산이 필요한 시점을 알 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div&amp;gt;{{cost()}}&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;네 알겠습니다,&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;몇 시간 후에 답이 온 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;$scope을 사용합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;$시계.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$scope.$watch('(height * width) * 40', function(v) {$scope.cost = v;});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;아니면&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$scope.$watch('height + width', function() {$scope.cost = (Number(height) * Number(width)) * 40;});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이렇게 하면 감시된 변수에 대한 모든 계산값이 자동으로 업데이트됩니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 이것은 저에게 곱슬곱슬한 괄호 안에서 살 필요 없이 이것들로 일할 수 있는 방법을 줍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 계산된 값을 재사용하고 계단식 업데이트를 위해 추적할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$scope.$watch('height * width', function(v) {$scope.dim = v;});
$scope.$watch('dim * 40', function(v) {$scope.cost = v;});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 높이 및/또는 폭이 변경되면 dim이 업데이트되고 dim이 변경되었기 때문에 비용이 업데이트됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;세번째 입력을 다음으로 변경했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;text&quot; value=&quot;{{val1 * 1 + val2}}&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이로 인해 Angular.js가 문자열이 아닌 숫자로 값을 처리하게 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://jsfiddle.net/QNVwe/3/&quot;&gt;음정&lt;/a&gt;은 여기 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://rabidgadfly.com/2012/12/angularjs-simple-calculator/&quot;&gt;저&lt;/a&gt;는 여기서 답을 얻었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문제 1 정보:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가능한 경우 입력 유형=&quot;number&quot;를 사용해야 합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그렇게 하면 숫자 파싱을 제대로 할 수 있을 겁니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;오래된 브라우저 각도를 가지고 있더라도 숫자로 포맷하는 것을 처리할 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문제 2 정보:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;당신이 화면에 간단한 텍스트만 보여주면 된다면 당신의 대답은 좋은 제이슨입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 모델이 있는 입력을 임의의 식에 바인딩하려면 다른 것이 필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ng-model을 원하는 식에 바인딩하는 데 사용할 수 있는 지침을 작성했습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;식을 변경할 때마다 모형이 새 값으로 설정됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;module.directive('boundModel', function() {
  return {
    require: 'ngModel',
    link: function(scope, elem, attrs, ngModel) {
      scope.$watch(attrs.boundModel, function(newValue, oldValue) {
        if(newValue != oldValue) {
          ngModel.$setViewValue(newValue);
          ngModel.$render();
        }
      });
    }
  };
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같이 템플릿에 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;text&quot; ng-model=&quot;total&quot; bound-model=&quot;value1 + value2&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 이와 같은 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;text&quot; ng-model=&quot;total&quot; bound-model=&quot;cost()&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기서 cost()는 다음과 같은 스코프의 간단한 함수입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$scope.cost = function() { return $scope.val1 + $scope.val2 };
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;좋은 점은 입력에 모델을 계속 사용하고, 각도가 잘 작동하지 않는 가치 속성을 동적으로 업데이트할 필요가 없다는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;앵귤러는 처음입니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;JS 하지만 저는 $parse를 사용할 수 있다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://docs.angularjs.org/api/ng/service/&quot; rel=&quot;nofollow&quot;&gt;http://docs.angularjs.org/api/ng/service/&lt;/a&gt;$parse&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;문자열이라는 표현이 있으면 재미있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;속성 경로를 사용할 수 있으며 해당 문자열을 동적으로 생성할 수 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;컴파일 시 수식을 모르는 경우에는 eval()과 많이 비슷하지만 훨씬 빠르고 안전(?)할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function Ctrl($scope,$parse) {
  var expression = 'model.val1 + model.val2';//could be dynamically created
  $scope.model = {
    val1: 0,
    val2: 0,
    total: function() { 
        return ($parse(expression))($scope); 
    }
  };
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;함수에 바인딩할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function CTRL ($scope) {
$scope.val1 = 3;
$scope.val2 = 4;
$scope.sum = function(){
   return ($scope.val1 *1 + $scope.val2 *1);
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;}&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;바인딩 표현은 동일하게 작동하지만 훨씬 더 복잡한 경우에는 기능이 필요합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 생각에는 $scope 변수를 통해 제공되는 $watch 기능이 이 업무에 가장 적합합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$scope.$watch(function(scope) { return scope.data.myVar },
              function(newValue, oldValue) {
                  document.getElementById(&quot;myElement&quot;).innerHTML =
                      &quot;&quot; + newValue + &quot;&quot;;
              }
             );
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;$watch 기능은 a: value 기능과 listener 기능을 포함합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;위의 예는 이 멋진 기사에서 따온 것입니다: http://tutorials.jenkov.com/angularjs/watch-digest-apply.html&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그것을 읽고 많은 것을 배웠고 내가 찾던 해결책을 실행할 수 있었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/17173768/new-to-angular-computed-variables&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularJS</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/753</guid>
      <comments>https://stoneblock.tistory.com/753#entry753comment</comments>
      <pubDate>Sun, 5 Nov 2023 10:51:16 +0900</pubDate>
    </item>
    <item>
      <title>LESS-CSS 덮어쓰기 calc() 사용 안 함</title>
      <link>https://stoneblock.tistory.com/752</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;LESS-CSS 덮어쓰기 calc() 사용 안 함&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;b&gt;이 질문에는 이미 다음&lt;/b&gt;과 같은 &lt;b&gt;답변이 있습니다&lt;/b&gt;.&lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt4&quot;&gt; 
    &lt;a href=&quot;/questions/11972084/how-to-prevent-less-from-trying-to-compile-css-calc-properties&quot; dir=&quot;ltr&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;레스가 CSS calc() 속성을 컴파일하려고 시도하는 것을 방지하는 방법?&lt;/font&gt;&lt;/a&gt; 
    &lt;span class=&quot;question-originals-answer-count&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;(5개 답변)&lt;/font&gt;&lt;/span&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;닫힘&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;span class=&quot;relativetime&quot; title=&quot;2016-09-23 13:45:38Z&quot; papago-attr-id=&quot;1&quot;&gt;6년 전&lt;/span&gt;에.&lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;지금 저는 LESS 코드의 CSS3에서 이 작업을 수행하려고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;width: calc(100% - 200px);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그러나 LESS가 컴파일하면 다음을 출력합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;width: calc(-100%);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;LESS에게 그런 식으로 컴파일하지 말고 정상적으로 출력하라고 하는 방법이 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://github.com/SomMeri/less4j/wiki/Less-Language-Escaping&quot; rel=&quot;noreferrer&quot;&gt;&lt;strong&gt;이스케이프된 문자열&lt;/strong&gt;&lt;/a&gt;(일명 이스케이프 값) 사용:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;width: ~&quot;calc(100% - 200px)&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또한 탈출된 문자열에 Less math를 혼합해야 하는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;width: calc(~&quot;100% - 15rem +&quot; (10px+5px) ~&quot;+ 2em&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;컴파일 대상:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;width: calc(100% - 15rem + 15px + 2em);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이것은 기본적으로 Less concatenate 값(탈출된 문자열 및 수학 결과)과 공백을 연결하기 때문에 작동합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/a/17904128/1331430&quot;&gt;다른 답변&lt;/a&gt;에서 설명한 이스케이프 값을 사용하는 것 외에도 엄격한 &lt;a href=&quot;http://lesscss.org/usage/#command-line-usage-strict-math&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;&gt;엄격한 수학을 사용하면 불필요한 괄호 안에 있는 수학만 처리되므로 코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;width: calc(100% - 200px);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;엄밀 연산 옵션이 활성화된 상태에서 예상대로 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;그러나&lt;/strong&gt; Strict Math는 내부뿐만 아니라 전 세계적으로 적용된다는 점에 유의하십시오.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;calc()&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;. 그 말은, 만일 당신이 다음을 가지고 있다면,&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;font-size: 12px + 2px;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;연산이 더 이상 Less에 의해 처리되지 않습니다 -- 출력됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;font-size: 12px + 2px&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;분명히 CSS가 무효인 겁니다&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Less in(이전에는 불필요했던) 괄호로 처리해야 하는 모든 수학을 랩핑해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;font-size: (12px + 2px);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Strict Math는 새 프로젝트를 시작할 때 고려하는 좋은 옵션입니다. 그렇지 않으면 코드 베이스의 상당 부분을 다시 작성해야 할 수도 있습니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가장 일반적인 사용 사례의 경우 &lt;a href=&quot;https://stackoverflow.com/a/17904128/1331430&quot;&gt;다른 답변&lt;/a&gt;에 설명된 탈출 문자열 접근법이 더 적합합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;여기 CSS를 사용하기 위한 크로스 브라우저 레스 믹스인이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;calc&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;모든 속성:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.calc(@prop; @val) {
  @{prop}: calc(~'@{val}');
  @{prop}: -moz-calc(~'@{val}');
  @{prop}: -webkit-calc(~'@{val}');
  @{prop}: -o-calc(~'@{val}');
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용 예시:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.calc(width; &quot;100% - 200px&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;그리고 출력되는 CSS:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;width: calc(100% - 200px);
width: -moz-calc(100% - 200px);
width: -webkit-calc(100% - 200px);
width: -o-calc(100% - 200px);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;이 예제의 코드 펜: http://codepen.io/patrickberkeley/pen/zobdp&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;변수가 있는 이스케이프 문자열의 예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@some-variable-height: 10px;

...

div {
    height: ~&quot;calc(100vh - &quot;@some-variable-height~&quot;)&quot;;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;에 모읍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;div {
    height: calc(100vh - 10px );
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Fabricio의 솔루션은 잘 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;계산의 매우 일반적인 사용 사례는 100% 너비를 추가하고 요소 주위에 여백을 추가하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;다음과 같은 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@someMarginVariable: 15px;

margin: @someMarginVariable;
width: calc(~&quot;100% - &quot;@someMarginVariable*2);
width: -moz-calc(~&quot;100% - &quot;@someMarginVariable*2);
width: -webkit-calc(~&quot;100% - &quot;@someMarginVariable*2);
width: -o-calc(~&quot;100% - &quot;@someMarginVariable*2);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 다음과 같은 믹스인을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.fullWidthMinusMarginPaddingMixin(@marginSize,@paddingSize) {
  @minusValue: (@marginSize+@paddingSize)*2;
  padding: @paddingSize;
  margin: @marginSize;
  width: calc(~&quot;100% - &quot;@minusValue);
  width: -moz-calc(~&quot;100% - &quot;@minusValue);
  width: -webkit-calc(~&quot;100% - &quot;@minusValue);
  width: -o-calc(~&quot;100% - &quot;@minusValue);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/17904088/disable-less-css-overwriting-calc&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>CSS</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/752</guid>
      <comments>https://stoneblock.tistory.com/752#entry752comment</comments>
      <pubDate>Sun, 5 Nov 2023 10:51:08 +0900</pubDate>
    </item>
    <item>
      <title>C# XML 문서 웹사이트 링크</title>
      <link>https://stoneblock.tistory.com/751</link>
      <description>&lt;h2&gt;&lt;font papago-translate=&quot;translated&quot;&gt;C# XML 문서 웹사이트 링크&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;XML 문서에 웹사이트 링크를 포함하는 것이 가능합니까?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;예를 들어, 제 방법은 다음과 같이 요약됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;///&amp;lt;Summary&amp;gt;
/// This is a math function I found HERE.
///&amp;lt;/Summary&amp;gt;
public void SomeMathThing(Double[] doubleArray)
{
   ...
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;타이핑할 때는&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-none prettyprint-override&quot;&gt;&lt;code&gt;SomeMathThing(
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;IntelliSense가 외부 웹사이트에 링크하기 위해 &quot;HERE&quot;를 클릭하는 옵션과 함께 요약을 보여주기를 원합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;가능한가요?&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;어떻게 할까요?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;시도:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;///&amp;lt;Summary&amp;gt;
/// This is a math function I found &amp;lt;see href=&quot;http://stackoverflow.com&quot;&amp;gt;HERE&amp;lt;/see&amp;gt;
///&amp;lt;/Summary&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;과대 선전 열차는 좀 늦었지만, 비주얼 스튜디오 2015를 위해 알아낸 것은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;제 샘플은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    /// &amp;lt;summary&amp;gt;
    ///     Retrieves information about the specified window. 
    ///     The function also retrieves the value at a specified offset into the extra window memory.
    ///     From &amp;lt;see cref=&quot;!:https://msdn.microsoft.com/en-us/library/windows/desktop/ms633585(v=vs.85).aspx&quot;&amp;gt;this&amp;lt;/see&amp;gt; MSDN-Link.
    ///     AHref &amp;lt;a href=&quot;http://stackoverflow.com&quot;&amp;gt;here&amp;lt;/a&amp;gt;.
    ///     see-href &amp;lt;see href=&quot;http://stackoverflow.com&quot;&amp;gt;here&amp;lt;/see&amp;gt;.
    /// &amp;lt;/summary&amp;gt;
    /// &amp;lt;param name=&quot;hwnd&quot;&amp;gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;param name=&quot;index&quot;&amp;gt;&amp;lt;/param&amp;gt;
    /// &amp;lt;returns&amp;gt;
    ///     Testlink in return: &amp;lt;a href=&quot;http://stackoverflow.com&quot;&amp;gt;here&amp;lt;/a&amp;gt;
    /// &amp;lt;/returns&amp;gt;
    public static IntPtr GetWindowLongPtr(IntPtr hwnd, int index)
    {
        return IntPtr.Size == 4 ? GetWindowLongPtr32(hwnd, index) : GetWindowLongPtr64(hwnd, index);
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;결과는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;도구 설명:&lt;/font&gt;&lt;/strong&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;!:를 사용하여 cref-url을 표시하지만 &quot;이것&quot;은 숨깁니다.&lt;/font&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ref-url을 숨기지만 텍스트를 표시합니다.&lt;/font&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;참조 URL 및 텍스트를 숨깁니다.&lt;/font&gt;&lt;/li&gt; 
  &lt;/ul&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;hr&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot;&gt;개체 탐색기:&lt;/font&gt;&lt;/strong&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;!:를 사용하여 cref-url을 표시하지만 &quot;이것&quot;은 숨깁니다(클릭할 수 없음)&lt;/font&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ref-url을 숨기지만 텍스트를 표시합니다(클릭할 수 없음).&lt;/font&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;seehref URL 및 텍스트 숨김(클릭 불가)&lt;/font&gt;&lt;/li&gt; 
  &lt;/ul&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;hr&gt; 
&lt;ol start=&quot;3&quot;&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;ReSharper&lt;/strong&gt;(CTRL+SHIFT+F1, 명령 ReSharper).&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ReSharper_QuickDoc)&lt;/font&gt;&lt;/font&gt;&lt;ul&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;!:로 cref-url을 숨기지만 &quot;이것&quot;을 표시합니다(클릭할 수 없음).&lt;/font&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;ahref-url(2016년 이후 버전)을 해석합니다.&lt;/font&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;translated&quot;&gt;seehref URL 및 텍스트 숨김(클릭 불가)&lt;/font&gt;&lt;/li&gt; 
  &lt;/ul&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;결론:&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;하이너가 지적한 바와 같이, 가장 좋은 것은&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;See &amp;lt;a href=&quot;link&quot;&amp;gt;this link&amp;lt;/a&amp;gt; for more information.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;strong&gt;업데이트&lt;/strong&gt; Thomas Hagström이 지적한 대로, 리샤퍼는 이제 클릭 가능한 a-href URL을 지원합니다.&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;따라서 스크린샷이 업데이트되었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;표준 HTML 구문을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;a href=&quot;http://stackoverflow.com&quot;&amp;gt;here&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;텍스트가 Visual Studio에 표시됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;&lt;a href=&quot;http://www.innovasys.com/products/dx2011/overview.aspx&quot; rel=&quot;noreferrer&quot;&gt;Innovasys Document! X&lt;/a&gt;와 Sandcastle 같은 도구가 사용할 수 있도록 생성된 Xml 문서에 !: 접두사를 cref에 포함할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/// &amp;lt;summary&amp;gt;
/// This is a math function I found &amp;lt;see cref=&quot;!:http://stackoverflow.com&quot;&amp;gt;HERE&amp;lt;/see&amp;gt;
/// &amp;lt;/summary&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;Visual Studio intellense는 그것을 intellense를 위한 링크로 표시하지는 않지만, 도구 설명이므로 별 의미가 없기 때문에 클릭할 수 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;tag. 예를 들어 프로젝트에서 이 솔루션을 사용했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/yz99Z.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/yz99Z.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;결과:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Qo0Yd.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Qo0Yd.png&quot; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;내 XML 코드:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/// &amp;lt;summary&amp;gt;
/// This is C# XML Documentation Website Link
/// &amp;lt;a href=&quot;https://stackoverflow.com/questions/6960426/c-sharp-xml-documentation-website-link&quot;&amp;gt;See more&amp;lt;/a&amp;gt;
/// &amp;lt;/summary&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;또는 사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;see&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;tag. 결과는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;꼬리표를 매다&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/// &amp;lt;summary&amp;gt;
/// This is C# XML Documentation Website Link
/// &amp;lt;see href=&quot;https://stackoverflow.com/questions/6960426/c-sharp-xml-documentation-website-link&quot;&amp;gt;See more&amp;lt;/see&amp;gt;
/// &amp;lt;/summary&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;저도 노력했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;see href=&quot;https://some.com/&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;처음에는 효과가 없었지만, 그 다음에는 시도해 보았습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;seealso href=&quot;https://some.url/&quot;&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;splitted&quot;&gt;&lt;font papago-translate=&quot;translated&quot;&gt;효과가 &lt;em&gt;있었습니다&lt;/em&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot;&gt;언급&lt;/font&gt;&lt;font papago-translate=&quot;translated&quot;&gt;URL : https://stackoverflow.com/questions/6960426/c-sharp-xml-documentation-website-link&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>XML</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/751</guid>
      <comments>https://stoneblock.tistory.com/751#entry751comment</comments>
      <pubDate>Sun, 5 Nov 2023 10:51:01 +0900</pubDate>
    </item>
    <item>
      <title>MySQL에서 ENUM 변수 유형 생성</title>
      <link>https://stoneblock.tistory.com/750</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL에서 ENUM 변수 유형 생성&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에서 ENUM 데이터 형식을 사용하고 있으며 재사용하고 싶지만 값을 다시 입력하지는 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL에 C, C++ 타입을 정의하는 방법과 동등한 것이 있습니까?&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;DEFINE ETYPE ENUM('a','b','c','d');
CREATE TABLE Table_1 (item1 ETYPE, item2 ETYPE);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가능한가요?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니요. MySQL은 지원하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CREATE DOMAIN&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;CREATE TYPE&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 Postgre와 같이&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL이 &lt;a href=&quot;http://www.postgresql.org/docs/current/static/sql-createdomain.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;2-1&quot;&gt;있습니다&lt;/a&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;font class=&quot;papago-parent&quot;&gt;copy &amp;amp; paste 또는 SQL 스크립트를 사용하여 이 작업에 필요한 작업을 줄일 수 있습니다.&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;INFORMATION_SCHEMA&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;표: ENUM 정의의 텍스트를 가져온 다음 새 텍스트로 보간합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CREATE TABLE&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;CREATE TABLE AS&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;CREATE TABLE foo ( f ENUM('abc', 'xyz') );
CREATE TABLE bar AS SELECT f AS b FROM foo;
SHOW CREATE TABLE bar;
&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;CREATE TABLE `bar` (
  `b` enum('abc','xyz') default NULL
) 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막으로 ENUM에 많은 값이 포함되어 있는 경우(입력을 피할 수 있는 솔루션을 찾고 있으므로 사실이라고 생각합니다) ENUM 데이터 유형 대신 룩업 테이블을 사용하는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@bliako 님의 댓글:&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;CREATE TABLE bar (pop INT NOT NULL, name VARCHAR(100))
AS SELECT 0 AS pop, NULL AS name, f FROM foo;
&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;MySQL 5.7.27에서 이것을 시도해 보았는데 효과가 있었습니다.&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;CREATE TABLE 행에 있는 세 개의 열을 모두 선언할 필요는 없다는 점이 흥미롭습니다.&lt;/font&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;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자동으로 추가됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;칼럼 별칭을 붙여야 한다는 것도 흥미롭네요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SELECT&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;열 이름이 에 선언된 이름과 일치하는지 확인하는 문장&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CREATE TABLE&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;create table bar (pop int not null, name varchar(100)) 
as select 0 as c1, null as c2, f from foo;

show create table bar\G

CREATE TABLE `bar` (
  `pop` int(11) NOT NULL,
  `name` varchar(100) DEFAULT NULL,
  `c1` binary(0) DEFAULT NULL,
  `c2` binary(0) DEFAULT NULL,
  `f` enum('abc','xyz') DEFAULT NULL
)
&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;mysql db의 경우 아래 예시가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CREATE TABLE `data` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
  `gender` enum('Male','Female') DEFAULT NULL,
PRIMARY KEY (`Id`)
  ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci
&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/1462497/creating-enum-variable-type-in-mysql&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/750</guid>
      <comments>https://stoneblock.tistory.com/750#entry750comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:26:49 +0900</pubDate>
    </item>
    <item>
      <title>종료 시 파일 설명자를 닫는 것이 좋은 방법입니까?</title>
      <link>https://stoneblock.tistory.com/749</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;종료 시 파일 설명자를 닫는 것이 좋은 방법입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 이유에서인지 프로그램에서 치명적인 상황이 발견되어 오류 코드를 가지고 종료하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;치명적인 오류의 맥락이 다른 파일 설명자의 범위를 벗어나는 경우도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 설명자를 닫는 것이 좋은 방법입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 파일들은 프로세스가 종료되면 자동으로 닫히는 것으로 알고 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;POSIX 프로그래밍의 고전적인 가이드 &quot;유닉스 환경에서의 고급 프로그래밍&quot;은 다음과 같이 기술합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로세스가 종료되면 열린 모든 파일이 커널에 의해 자동으로 닫힙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;많은 프로그램이 이 사실을 이용하고 열려 있는 파일을 명시적으로 닫지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;질문에 OS를 언급하지 않았지만, 이러한 동작은 어느 OS에서나 예상할 수 있는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로그램 컨트롤 흐름이 교차할 때마다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;exit()&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;return&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;main()&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&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;OS 구현에는 항상 버그의 위험이 존재합니다.&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;code&gt;fd&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;s?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서, 떠나는 유일한 문제는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fd&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;sopen은 프로그래밍 스타일 질문일 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고, 을 사용하는 경우와 마찬가지로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;stdio&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;개체(즉, 시스템에서 제공한 파일 i/o를 중심으로 작성된 것), valgrinding 중에 방향을 바꿀 수 없는 경고가 (somewhat) 나타날 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템 리소스 유출의 위험에 대해서는 OS 구현에 버그가 없는 한 걱정할 필요가 없습니다.&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;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 예제의 valgrind 참조&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;david@debian:~$ cat demo.c
#include &amp;lt;stdio.h&amp;gt;

int main(void)
{
    FILE *f;

    f = fopen(&quot;demo.c&quot;, &quot;r&quot;);
    return 0;
}
david@debian:~$ valgrind ./demo
==3959== Memcheck, a memory error detector
==3959== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==3959== Using Valgrind-3.6.0.SVN-Debian and LibVEX; rerun with -h for copyright info
==3959== Command: ./demo
==3959== 
==3959== 
==3959== HEAP SUMMARY:
==3959==     in use at exit: 568 bytes in 1 blocks
==3959==   total heap usage: 1 allocs, 0 frees, 568 bytes allocated
==3959== 
==3959== LEAK SUMMARY:
==3959==    definitely lost: 0 bytes in 0 blocks
==3959==    indirectly lost: 0 bytes in 0 blocks
==3959==      possibly lost: 0 bytes in 0 blocks
==3959==    still reachable: 568 bytes in 1 blocks
==3959==         suppressed: 0 bytes in 0 blocks
==3959== Rerun with --leak-check=full to see details of leaked memory
==3959== 
==3959== For counts of detected and suppressed errors, rerun with: -v
==3959== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 4 from 4)
&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&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;atexit()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;

static FILE *f;

static void free_all(void)
{
    fclose(f);
}

static int check(void)
{
    return 0;
}

int main(void)
{
    atexit(free_all);
    f = fopen(&quot;demo.c&quot;, &quot;r&quot;);
    if (!check()) exit(EXIT_FAILURE);
    /* more code */
    return 0;
}
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&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;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;개념적으로 프로세스가 종료되면 할당된 메모리를 자유롭게 사용하거나 비표준 파일 설명자를 닫는 것 등이 &lt;strong papago-id=&quot;19-1&quot;&gt;사용자의 책임&lt;/strong&gt;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 프로세스가 끝나면 모든 정상적인 OS(그리고 Windows(윈도우))가 정리되지만, 이는 기대할 수 있는 것이 아닙니다.&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;font class=&quot;papago-parent&quot;&gt;지금 당신은 자원 유출에 대해 설명했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;전역 프로그램 상태, 즉 프로세스의 상태(모듈, 클래스, ADT, 스레드, 전체 프로세스)에 의존하여 본질적으로 캡슐화를 위반하는 것입니다.&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;프로그램이 종료되면 모든 정상 운영 체제(확실히 어떤 형태의 Linux 또는 Windows)가 파일을 닫습니다.&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;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;OS에 맡기면 파일이 닫히는 순서를 제어할 수 없기 때문에 일관성 문제(예: 다중 파일 데이터베이스)가 발생할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 닫기와 관련된 오류(예: I/O 오류, 공간 부족 오류 등)가 있는 경우 해당 오류를 보고할 방법이 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;처리해야 하는 파일 잠금과 상호 작용이 있을 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 파일을 닫는 루틴은 프로그램에 필요한 다른 정리를 동시에 처리할 수 있습니다(예: flushing 버퍼).&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C는 프로그램이 정상적으로 종료될 경우 열려 있는 모든 파일이 닫힐 것을 보장합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;exit&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;main&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;프로그램이 비정상적으로 종료되는 경우(예: NULL 포인터 사용으로 인해 운영 체제에서 닫히는 경우) 파일을 닫는 것은 운영 체제의 몫입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 예기치 않게 종료될 경우 파일이 더 이상 필요하지 않게 되면 파일이 닫히도록 하는 것이 좋습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또 다른 이유는 자원 제한 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대부분의 운영 체제는 열려 있는 파일 수에 제한을 두고 있으며(다른 여러 가지 파일도 포함), 따라서 리소스가 더 이상 필요하지 않은 경우 즉시 반환하는 것이 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 프로그램이 모든 파일을 무한정 열어두었다면 시스템에 문제가 빨리 발생할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/15246833/is-it-a-good-practice-to-close-file-descriptors-on-exit&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/749</guid>
      <comments>https://stoneblock.tistory.com/749#entry749comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:26:42 +0900</pubDate>
    </item>
    <item>
      <title>Java Virtual Machine(JVM) 및 성능 비교</title>
      <link>https://stoneblock.tistory.com/748</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Java Virtual Machine(JVM) 및 성능 비교&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;다음 jvms를 비교하는 벤치마크가 있는지 아는 사람이 있는지 궁금합니다.&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;sun jvm vs. openjdk jvm vs. rockit jvm vs. j9 jvm vs. apache harmony.&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;예를 보려면 여기를 참조하십시오. http://jmob.ow2.org/jvm.html&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;몇 가지 일반적인 기준에 대한 아이디어를 얻으려면 Googleing: jvm 성능 벤치마크를 사용해 보십시오.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://www.stefankrause.net/wp/?p=9&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6&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;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;JVM마다 장단점이 다르다는 것을 고려하면 답은 매우 어렵습니다.&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;SPEC 벤치마크 - &lt;a href=&quot;http://www.spec.org/jbb2005/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;9-1&quot;&gt;SPECjbb2005&lt;/a&gt; &amp;amp; &lt;a href=&quot;http://www.spec.org/jEnterprise2010/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;9-3&quot;&gt;SPECjEnterprise2010&lt;/a&gt; - 이 벤치마크들은 현재 동료 평가를 받고 있으며 많은 회사에서 적극적으로 운영되고 있습니다(Pentium 3 시대에 모호하게 최신이었던 jmob.ow2.org 벤치를 unlike합니다!).&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/3072520/java-virtual-machines-jvm-and-their-performance-comparison&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Oracle</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/748</guid>
      <comments>https://stoneblock.tistory.com/748#entry748comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:26:34 +0900</pubDate>
    </item>
    <item>
      <title>텍스트 편집에 포커스 설정</title>
      <link>https://stoneblock.tistory.com/747</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;EditText-Field가 있고 OnFocusChangeListener를 설정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;포커스가 손실되면 데이터베이스에 있는 EditText 값을 확인하는 메서드가 호출됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;메소드의 반환 값이 참이면 건배가 표시되고 포커스가 다시 EditText(텍스트 편집)로 돌아갑니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;메서드의 반환 값이 거짓이 될 때까지 항상 초점이 EditText로 돌아가고 키보드가 표시되어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집: 제 생각에는 아직 제 진짜 문제를 완벽하게 명확하게 하지 않았습니다. 편집 텍스트의 값이 값으로 편집될 때까지 화면의 다른 항목은 편집할 수 없으며, 이로 인해 &quot;checkLiganame(liganame)&quot; 메서드가 거짓으로 반환됩니다.&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;pre&gt;&lt;code&gt;final EditText Liganame = (EditText) findViewById(R.id.liganame);

    Liganame.setOnFocusChangeListener(new OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {

                String liganame = Liganame.getText().toString();


                if (checkLiganame(liganame)) {
                    Toast toast = Toast.makeText(CreateTableActivity.this,
                            &quot;Dieser Liganame ist bereits vergeben&quot;,
                            Toast.LENGTH_SHORT);
                    toast.show();
                    Liganame.requestFocus();
                }
            }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방법:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public boolean checkLiganame(String liganame) {
    boolean found = false;

    DatabaseHelper databaseHelper = new DatabaseHelper(this);
    SQLiteDatabase db = databaseHelper.getReadableDatabase();

    Cursor cursor = db.query(&quot;liga&quot;, new String[] { &quot;liganame&quot; },
            &quot;liganame = '&quot; + liganame + &quot;'&quot;, null, null, null, null);
    Log.i(&quot;Liganame: &quot;, String.valueOf(cursor));

    db.close();
    if (cursor != null) {
        found = true;
    }

    return found;
}
&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;이 코드로 인해 EditText가 포커스를 잃은 후 포커스가 EditText로 다시 이동하지만 더 이상 텍스트를 편집할 수 없습니다.&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;EDIT2: 코드를 바꿨습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;시나리오:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 EditText를 클릭하고 데이터베이스에 이미 있는 문자열을 입력합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;토스트가 나오고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 더 이상 String을 편집할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;키보드에서 &quot;다음&quot;을 클릭하면 첫 번째 EditText에 포커스가 유지됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;String을 편집하려고 하지만 아무 일도 일어나지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 새 문자열이 두 번째 EditText에 표시됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;단말기의 뒷 화살표를 클릭하고 첫 번째와 두 번째 EditText --&amp;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;public class CreateTableActivity extends Activity implements
    OnFocusChangeListener {

private EditText Liganame, Mannschaftsanzahl;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.create_league);

    Liganame = (EditText) findViewById(R.id.liganame);
    Liganame.setOnFocusChangeListener(this);
    Mannschaftsanzahl = (EditText) findViewById(R.id.mannschaftsanzahl);
    Mannschaftsanzahl.setOnFocusChangeListener(this);

    final Button save_button = (Button) findViewById(R.id.create_tabelle_speichern_button);

    OnClickListener mCorkyListener = new OnClickListener() {
        public void onClick(View v) {
            ButtonClick();
        }
    };
    save_button.setOnClickListener(mCorkyListener);



}

@Override
public void onFocusChange(View v, boolean hasFocus) {
    String liganame = Liganame.getText().toString();

    if (checkLiganame(liganame)) {
        if (Liganame.requestFocus()) {
            getWindow()
                    .setSoftInputMode(
                            WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
            Mannschaftsanzahl.clearFocus();
            Toast.makeText(CreateTableActivity.this,
                    &quot;Dieser Liganame ist bereits vergeben&quot;,
                    Toast.LENGTH_SHORT).show();
        }
    }
}
&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;onCreate()&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;editText.requestFocus();
&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;if(myEditText.requestFocus()) {
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
&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;EDIT : checkLiganame 메서드 추가 후 답변에 추가 정보 추가&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;checkLiganame 메서드에서 커서가 null인지 확인합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;커서는 항상 개체를 반환하므로 null을 확인해도 아무 효과가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 문제는 그 문제에 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;db.close();&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스 연결을 닫을 때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Cursor&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유효하지 않게 되고 아마도 null이 될 것입니다.&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;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;커서가 null인지 확인하는 대신 반환되는 행 수가 0보다 큰지 확인한 다음(cursor.getCount() &amp;gt; 0) 부울을 true로 설정해야 합니다.&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;EDIT2: 여기 작동 방법에 대한 코드가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;EDIT3: 코드를 잘못 추가해서 죄송합니다.. ;S&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;EditText&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;myEditText.clearFocus()&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;. 그런 다음 OnFocusChangeListener를 사용할 때는 처음부터 신경쓰지 않아도 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;EditText&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;를 사용하거나 사용하지 않을 수 있으므로 onFocusChangeListener는 다음과 같이 보일 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class MainActivity extends Activity implements OnFocusChangeListener {
    private EditText editText1, editText2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText1 = (EditText) findViewById(R.id.editText1);
        editText1.setOnFocusChangeListener(this);
        editText2 = (EditText) findViewById(R.id.editText2);
        editText2.setOnFocusChangeListener(this);
    }

    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        String liganame = editText1.getText().toString();

        if(liganame.length() == 0) {
            if(editText1.requestFocus()) {
                getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
                editText2.clearFocus();
                Toast.makeText(MainActivity.this, &quot;Dieser Liganame ist bereits vergeben&quot;, Toast.LENGTH_SHORT).show();
            }
        }
    }
}
&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;if(liganame.length() == 0)&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;모든 EditText 보기는 다음을 설정해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;onFocusChangeListener&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;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다윈드 코드가 키보드를 보여주지 않았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 저에게 효과가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;        _searchText.requestFocus();
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(_searchText, InputMethodManager.SHOW_IMPLICIT);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;키보드가 표시되지 않을 경우 강제로 다음을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;        imm.showSoftInput(_searchText, InputMethodManager.SHOW_FORCED);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 내가 만든 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public void showKeyboard(final EditText ettext){
    ettext.requestFocus();
    ettext.postDelayed(new Runnable(){
            @Override public void run(){
                InputMethodManager keyboard=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                keyboard.showSoftInput(ettext,0);
            }
        }
        ,200);
}
&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;private void hideSoftKeyboard(EditText ettext){
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    inputMethodManager.hideSoftInputFromWindow(ettext.getWindowToken(), 0);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 단추를 클릭하면 텍스트 편집의 포커스가 변경됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class MainActivity extends Activity {
    private EditText e1,e2;
    private Button b1,b2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        e1=(EditText) findViewById(R.id.editText1);
        e2=(EditText) findViewById(R.id.editText2);
        e1.requestFocus();
        b1=(Button) findViewById(R.id.one);
        b2=(Button) findViewById(R.id.two);
        b1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                e1.requestFocus();

            }
        });
        b2.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                e2.requestFocus();
            }
        });
    }
}
&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;EditText userNameText = (EditText) findViewById(R.id.textViewUserNameText);
userNameText.setFocusable(true);
userNameText.setFocusableInTouchMode(true);
userNameText.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(userNameText, InputMethodManager.SHOW_IMPLICIT);
&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;동적으로 EditText를 생성하면 아래와 같이 요청 Focus()를 설정해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    EditText editText = new EditText(this);
    editText.setWidth(600);
    editText.requestFocus();
&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;만약 우리가 이미 xml 보기에 component를 선언했다면 우리는 그것을 찾아야 하고 아래와 같이 포커스를 맞출 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;EditText e1=(EditText) findViewById(R.id.editText1);
e1.requestFocus();
&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;해당 EditText 구성요소에만 포커스를 설정합니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;    mEditText.setFocusableInTouchMode(true);
    mEditText.requestFocus();

    if(mEditText.requestFocus()) {
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
    }
&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;requestFocus()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;레이아웃을 부풀리기 전에 false를 반환합니다.&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/a/49944730/2760951&quot; papago-id=&quot;37-1&quot;&gt;위&lt;/a&gt;와 같이 200ms 지연은 필요 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-kotlin prettyprint-override&quot;&gt;&lt;code&gt;editText.post(Runnable {
   if(editText.requestFocus()) {
       val imm = editText.context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager?
       imm?.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0)
   }
})
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;    Button btnClear = (Button) findViewById(R.id.btnClear);

    EditText editText1=(EditText) findViewById(R.id.editText2);
    EditText editText2=(EditText) findViewById(R.id.editText3);

    btnClear.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View v) {

            editText1.setText(&quot;&quot;);
            editText2.setText(&quot;&quot;);

            editText1.requestFocus();
        }
    });
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나의 대답은 &lt;a href=&quot;https://stackoverflow.com/a/61893375/12665616&quot; papago-id=&quot;38-1&quot;&gt;여기에&lt;/a&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;공식 문서를 읽어보니 이게 최선의 답이라고 생각합니다. EditText와 같은 View to 매개 변수를 전달하면 되지만 showSoftKeyboard가 풍경에서 작동하지 않는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;private fun showSoftKeyboard(view: View) {
    if (view.requestFocus()) {
        val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
        imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT)
    }
}

private fun closeSoftKeyboard(view: View) {
    if (view.requestFocus()) {
        val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
        imm.hideSoftInputFromWindow(view.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt; private void requestFocus(View view) {
        if (view.requestFocus()) {
            getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
        }
    }

//Function Call
requestFocus(yourEditetxt);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작업은 한 줄로 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;yourEditText.RequestFocusFromTouch();
&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;Xamarin을 위해서.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;안드로이드 나는 이 확장자를 만들었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public static class ViewExtensions
{
    public static void FocusEditText(this EditText editText, Activity activity)
    {
        if (editText.RequestFocus())
        {
            InputMethodManager imm = (InputMethodManager)activity.GetSystemService(Context.InputMethodService);
            imm.ShowSoftInput(editText, ShowFlags.Implicit);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하는 경우&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;requestFocus()&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;onCreate()&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;BindingAdapter&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;a href=&quot;https://medium.com/androiddevelopers/livedata-with-snackbar-navigation-and-other-events-the-singleliveevent-case-ac2622673150&quot; papago-id=&quot;45-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;SingleLiveEvent&lt;/a&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;다음과 같은 방법이 있습니다.&lt;/font&gt;&lt;/p&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;@BindingAdapter(&quot;requestFocus&quot;)
fun bindRequestFocus(editText: EditText, event: Event&amp;lt;Boolean&amp;gt;?) {
    event?.getContentIfNotHandled()?.let {
        if (it) editText.requestFocus()
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미 해결책을 찾으셨는지 모르겠지만, 포커스를 다시 요청한 후 편집 문제에 대해:&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;selectAll()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setSelection(0)&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;(emtpy인 경우) 편집 텍스트1에?&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;이것이 도움이 되는지 알려주세요, 그래서 제가 완벽한 해결책에 대한 답변을 수정하겠습니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;new OnEditorActionListener(){
   @Override
   public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
      editText.requestFocus();
      //used ******* return true ******
      return **true**;
   }
} 
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매니페스트에 이 코드를 사용해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;activity android:name=&quot;.EditTextActivity&quot; android:windowSoftInputMode=&quot;stateAlwaysVisible&quot;&amp;gt;
&amp;lt;/activity&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/14327412/set-focus-on-edittext&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Android</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/747</guid>
      <comments>https://stoneblock.tistory.com/747#entry747comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:26:28 +0900</pubDate>
    </item>
    <item>
      <title>npm 설치를 실행할 때 첫 번째 인증서를 확인할 수 없음</title>
      <link>https://stoneblock.tistory.com/746</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;npm 설치를 실행할 때 첫 번째 인증서를 확인할 수 없음&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;https://github.com/angular/quickstart/blob/master/README.md 에서 Angular2 튜토리얼을 보고 있었습니다.&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;하지만 가이드대로 npm install을 실행하면 처음에 관련된 오류가 발생했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UNABLE_TO_VERIFY_LEAF_SIGNATURE&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 구글링에서 SSL cert와 관련이 있는 것 같아서 다음 명령을 사용하여 이 문제를 해결하려고 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;npm config set strict-ssl false
&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;npm install&lt;/code&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;이것은 좀 더 발전했지만, &quot;첫번째 인증서를 확인할 수 없음&quot;과 관련된 새로운 오류가 발생했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;pre&gt;&lt;code&gt;typings ERR! message Unable to connect to &quot;https://api.typings.org/entries/dt/core-js/tags/0.0.0%2B20160725163759&quot;
typings ERR! caused by unable to verify the first certificate

typings ERR! cwd c:\Code\Angular2\Quickstart
typings ERR! system Windows_NT 6.1.7601
typings ERR! command &quot;C:\\Program Files\\nodejs\\node.exe&quot; &quot;c:\\Code\\Angular2\\Quickstart\\node_modules\\typings\\dist\\bin.js&quot; &quot;install&quot;
typings ERR! node -v v6.7.0
typings ERR! typings -v 1.4.0
typings ERR! code EUNAVAILABLE

typings ERR! If you need help, you may report this error at:
typings ERR!   &amp;lt;https://github.com/typings/typings/issues&amp;gt;

npm WARN optional Skipping failed optional dependency /chokidar/fsevents:
npm WARN notsup Not compatible with your operating system or architecture: fsevents@1.0.14
npm WARN angular-quickstart@1.0.0 No license field.
npm ERR! Windows_NT 6.1.7601
npm ERR! argv &quot;C:\\Program Files\\nodejs\\node.exe&quot; &quot;C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js&quot; &quot;install&quot;
npm ERR! node v6.7.0
npm ERR! npm  v3.10.3
npm ERR! code ELIFECYCLE
npm ERR! angular-quickstart@1.0.0 postinstall: `typings install`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the angular-quickstart@1.0.0 postinstall script 'typings install'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the angular-quickstart package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     typings install
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs angular-quickstart
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls angular-quickstart
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     c:\Code\Angular2\Quickstart\npm-debug.log
&lt;/code&gt;&lt;/pre&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;NodeJS와 Angular2 개발은 처음입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;좋은 생각이 있으신가요? 혹시 제가 세부사항을 빠뜨린 것이 있다면 말씀해주세요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;레지스트리를 구성에서 http 버전으로 변경해 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;npm config set registry http://registry.npmjs.org/ --global
&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;저의 경우 .npmrc의 ca-file을 기업 프록시 인증서에 추가하는 것이 해결책이었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;npm config set cafile &quot;path to proxy cert file&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 .npmrc에서 편집기와 함께 삽입합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cafile=&amp;lt;path to proxy cert file&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;.npmrc 파일은 홈 디렉토리에 있습니다.&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;https://github.com/typings/typings/issues/564 의 지침을 사용하여 문제를 해결할 수 있었습니다.&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;이 문제는 궁극적으로 제 기계가 어떤 회사 프록시 뒤에 있는 것과 관련이 있는데, 이는 npm이 프록시를 상대로 https를 인증할 수 없는 것과 관련이 있는 것으로 보입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용 중인 프록시에 대한 추가 정보가 없었기 때문에 위 @leetibbett 제안대로 구성할 수 없었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 http 버전을 사용하기 위해 루트 디렉터리에 .typingrc 파일을 만들었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;{
     &quot;rejectUnauthorized&quot;: false,
     &quot;registryURL&quot;: &quot;http://api.typings.org/&quot;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Js 12 노드를 제거하고 버전 10을 다시 설치했습니다.&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;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;환경변수 &lt;strong papago-id=&quot;14-1&quot;&gt;NODE_TLS_REJECT_UNANCERTIFED&lt;/strong&gt;를 &lt;strong papago-id=&quot;14-3&quot;&gt;0&lt;/strong&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/40000952/unable-to-verify-the-first-certificate-when-running-npm-install&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularJS</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/746</guid>
      <comments>https://stoneblock.tistory.com/746#entry746comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:26:17 +0900</pubDate>
    </item>
    <item>
      <title>UI 부트스트랩 팝업: 너비 변경</title>
      <link>https://stoneblock.tistory.com/745</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;UI 부트스트랩 팝업: 너비 변경&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;각진 UI 부트스트랩의 팝업을 사용하려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS: http://angular-ui.github.io/bootstrap/ &lt;a href=&quot;http://angular-ui.github.io/bootstrap/#/popover&quot; rel=&quot;noreferrer&quot; papago-id=&quot;1-1&quot;&gt;#/팝오버&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;i class=&quot;fa fa-question-circle&quot; popover=&quot;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur porta libero tincidunt, malesuada tellus vitae, dapibus ex. Ut tristique tristique eros.&quot; popover-trigger=&quot;mouseenter&quot; popover-placement=&quot;right&quot;&amp;gt;&amp;lt;/i&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;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/OeLbO.png&quot; alt=&quot;enter image description here&quot;&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;a href=&quot;http://angular-ui.github.io/bootstrap/#/popover&quot; rel=&quot;noreferrer&quot; title=&quot;문서들&quot; papago-id=&quot;4-1&quot; papago-attr-id=&quot;3&quot;&gt;문서는&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;code&gt;popover-class&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;attribute - 팝업에 적용할 사용자 지정 클래스&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;i class=&quot;fa fa-question-circle&quot; popover-class=&quot;increase-popover-width&quot; popover=&quot;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur porta libero tincidunt, malesuada tellus vitae, dapibus ex. Ut tristique tristique eros.&quot; popover-trigger=&quot;mouseenter&quot; popover-placement=&quot;right&quot;&amp;gt;&amp;lt;/i&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;pre&gt;&lt;code&gt;.increase-popover-width {
   max-width: 400px;
}
&lt;/code&gt;&lt;/pre&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-width&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;width&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;popover-max-width&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;strong papago-id=&quot;10-1&quot;&gt;276&lt;/strong&gt; px로 정했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/twbs/bootstrap/blob/v4-dev/scss/_variables.scss#L710&quot; rel=&quot;noreferrer&quot; title=&quot;소스코드&quot; papago-id=&quot;11&quot; papago-translate=&quot;translated&quot; papago-attr-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;깃허브 부트스트랩 코드&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;팝업 콘텐츠 클래스를 재정의하여 이를 달성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.popover-content {
width: 200px;
}
&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;strong papago-id=&quot;13-0&quot;&gt;업데이트:&lt;/strong&gt; Chrome에서 확인할 수 있습니다: - F12 누름 - 확대기 선택 - 검사할 요소 클릭 - 스타일 수정&lt;/font&gt;&lt;/font&gt;&lt;img src=&quot;https://i.stack.imgur.com/aDxiM.png&quot; alt=&quot;enter image description here&quot;&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;CSS를 이렇게 설정하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.popover {
    max-width: 800px; /* optional max width */
    width: intrinsic; /* Safari/WebKit uses a non-standard name */
    width: -moz-max-content; /* Firefox/Gecko */
    width: -webkit-max-content; /* Chrome */
}
&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;.popover {
    max-width: 450px;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 실제로 팝오버 화이트 컨테이너의 크기를 바꿨습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;팝오버 구성요소의 &lt;strong papago-id=&quot;18-1&quot;&gt;popover-append-to-body&lt;/strong&gt; 속성을 사용해 보셨나요?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;폭은 다음 값을 재정의하여 쉽게 변경할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.popover&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;.popover {
    width: 200px;
}
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;style&amp;gt;
    .popover {
        width: 500px;
        max-width: 500px;
    }
&amp;lt;/style&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;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/29005345/ui-bootstrap-popover-change-width&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularJS</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/745</guid>
      <comments>https://stoneblock.tistory.com/745#entry745comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:26:10 +0900</pubDate>
    </item>
    <item>
      <title>조건부로 angular.js에 요소 특성을 추가합니다.</title>
      <link>https://stoneblock.tistory.com/744</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;조건부로 angular.js에 요소 특성을 추가합니다.&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;이 질문에는 이미 다음&lt;/b&gt;과 같은 &lt;b papago-id=&quot;1-1&quot;&gt;답변이 있습니다&lt;/b&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;      &lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt4&quot;&gt; 
    &lt;a href=&quot;/questions/15696416/what-is-the-best-way-to-conditionally-apply-attributes-in-angularjs&quot; dir=&quot;ltr&quot; papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AngularJS에서 속성을 조건부로 적용하는 가장 좋은 방법은 무엇입니까?&lt;/font&gt;&lt;/a&gt; 
    &lt;span class=&quot;question-originals-answer-count&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(13개 답변)&lt;/font&gt;&lt;/span&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;닫힘&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;4-1&quot; title=&quot;2016-04-1500:40:52Z&quot; papago-attr-id=&quot;1&quot;&gt;7년 전&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;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;is_autoplay 스코프 변수를 기반으로 비디오 태그에 자동 재생 속성을 추가하려고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인터넷을 다 뒤졌지만 원하는 정확한 토막을 찾을 수 없었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 따라 해보았지만 아무 것도 작동이 안 돼요.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;video autoplay=&quot;{{is_autoplay ? 'true' : 'false'}}&quot;&amp;gt;
    ...
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;video ng-attr-autoplay=&quot;{is_autoplay}&quot;&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;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;video {{is_autoplay ? &quot;autoplay&quot; : &quot;&quot;}}&amp;gt;
    ...
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;hr&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;app.directive('attronoff', function() {
    return {
    link: function($scope, $element, $attrs) {
        $scope.$watch(
            function () { return $element.attr('data-attr-on'); },
            function (newVal) { 
                var attr = $element.attr('data-attr-name');

                if(!eval(newVal)) {
                    $element.removeAttr(attr);
                }
                else {
                    $element.attr(attr, attr);
                }
            }
        );
        }
    };
});
&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&gt;&lt;code&gt;Usage&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;video width=&quot;100%&quot; height=&quot;100%&quot; controls attronoff data-attr-on=&quot;{{is_autoplay}}&quot; data-attr-name=&quot;autoplay&quot;&amp;gt;
    ...
&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;ng-if&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;예를 들어, 당신의 경우,&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;video autoplay=&quot;true&quot; ng-if=&quot;is_autoplay&quot;&amp;gt;...&amp;lt;/video&amp;gt;
&amp;lt;video ng-if=&quot;!is_autoplay&quot;&amp;gt;...&amp;lt;/video&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 만약에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;is_autoplay&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;true&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;autoplay&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;attribute와 second on은 dom에 포함되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한다면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;is_autoplay&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;false&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 두번째 돔 요소는 다음을 제외하고 생성됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;autoplay&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속성.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;is_autoplay 속성에 따라 자동 재생 속성을 직접 설정할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;video autoplay=&quot;{{is_autoplay}}&quot;&amp;gt;...&amp;lt;/video&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/24136040/conditionally-add-an-element-attribute-in-angular-js&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularJS</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/744</guid>
      <comments>https://stoneblock.tistory.com/744#entry744comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:26:02 +0900</pubDate>
    </item>
    <item>
      <title>&amp;quot;Increct Content-Type:&amp;quot; 예외는 각도 mvc 6 응용 프로그램을 던집니다.</title>
      <link>https://stoneblock.tistory.com/743</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;Increct Content-Type:&quot; 예외는 각도 mvc 6 응용 프로그램을 던집니다.&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.net , mvc6, angularjs를 사용하는 어플리케이션을 개발하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;작업 방법에 대한 요청을 하면 전달된 데이터가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;요청을 확인했을 때 다음과 같은 예외가 발생했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;ul&gt; 
  &lt;li papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;양식 '(Microsoft).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;AspNet.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Http. 내부.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;DefaultHttpRequest)이것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;요청).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Form'이(가) 'System' 유형의 예외를 던졌습니다.&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;AspNet.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Http.IformCollection {System.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;잘못된 작업&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예외}&lt;/font&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/blockquote&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;&quot;Incorrect Content-Type:application/json;charset=UTF-8&quot;&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;return $http({ method: 'POST', url: 'home/createEvent', eventDetails: event })
                .success(function(data, status, headers, config) {
                    return data;
                })
                .catch(function(data, status, headers, config) {
                    console.log(data);
                });
&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;[HttpPost]
public IActionResult CreateEvent([FromBody]Event eventDetails)
{
    return Json(new {dsd=&quot;&quot;},
        new JsonSerializerSettings {ContractResolver = new CamelCasePropertyNamesContractResolver()});

}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 대답은 제게 통하지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저에게 해결책은 $http 호출에 헤더를 추가하는 것이었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;        $http({
                url: &quot;/install&quot;,
                method: &quot;POST&quot;,
                data: data,
                headers: {
                    &quot;Content-Type&quot;: &quot;application/x-www-form-urlencoded&quot;
                }
            })
            .success(...);
&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;pre&gt;&lt;code&gt;[Produces(&quot;application/json&quot;)]
[Route(&quot;api/[controller]&quot;)]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨트롤러 이름이 표시되지 않았으므로 가상의 전체 작동 예를 들어 보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h1 papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;콘트롤러&lt;/font&gt;&lt;/h1&gt; 
&lt;pre&gt;&lt;code&gt;[Produces(&quot;application/json&quot;)]
[Route(&quot;api/[controller]&quot;)]    
public class DashBoardLayoutApi : Controller
{
    public DashBoardLayoutApi()
    { }

    [HttpPost]
    public void Post([FromBody] LoginViewModel data)
    { }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1 papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C# 뷰 모델&lt;/font&gt;&lt;/h1&gt; 
&lt;pre&gt;&lt;code&gt;public class LoginViewModel
{
    public string Email { get; set; }
    public string Password { get; set; }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1 papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML/JS&lt;/font&gt;&lt;/h1&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script&amp;gt;
    var data = {
        Email: 'Test',
        Password: 'Test',
        RememberMe: true
    };

    $(&quot;#test&quot;).click(function() {
        $.ajax({
            url: '/api/DashBoardLayoutApi',
            type: 'POST',
            dataType: &quot;json&quot;,
            contentType: &quot;application/json; charset=utf-8&quot;,
            data: JSON.stringify(data),                   
        });
    }
&amp;lt;/script&amp;gt;
&amp;lt;button id=&quot;test&quot;&amp;gt; Save Layout&amp;lt;/button&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1 papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과.&lt;/font&gt;&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JgRcs.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JgRcs.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt; &lt;a href=&quot;https://i.stack.imgur.com/CAPPB.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CAPPB.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;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저 같은 경우에는, 추가하는 것.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[Produces(&quot;application/json&quot;)]&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;[FromBody]&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;font class=&quot;papago-parent&quot;&gt;그러나 애플리케이션에 hidden의 접근 방식을 구현한 후에도 C# 컨트롤러에는 모델이 비어 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;조금 둘러본 결과 JS 코드로 작성된 잘못된 클라이언트 모델에 문제가 있어 서버에서 병렬화할 수 없습니다(null은 guid 유형으로 변환할 수 없습니다).&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;어떤 이유로 모델 바인더는 다음과 같은 경우에 예외를 두지 않습니다. https://learn.microsoft.com/en-us/aspnet/core/mvc/models/model-binding&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;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;바인딩이 실패하면 MVC에서 오류가 발생하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모델 상태를 확인하여 모델 상태 오류를 조회할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;유효한 속성입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;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;유효한 모델을 통과했는지 확인하기 위해 C# 컨트롤러에 유효한 속성이 있으며 모델 바인딩 오류를 잡아 기록하기 위해 사용자 지정 모델 바인더를 사용하는 것을 고려할 수 있습니다.&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/33711629/incorrect-content-type-exception-throws-angular-mvc-6-application&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularJS</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/743</guid>
      <comments>https://stoneblock.tistory.com/743#entry743comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:25:55 +0900</pubDate>
    </item>
    <item>
      <title>jquery를 사용하여 통화를 올바르게 포맷하려면 어떻게 해야 합니까?</title>
      <link>https://stoneblock.tistory.com/742</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jquery를 사용하여 통화를 올바르게 포맷하려면 어떻게 해야 합니까?&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;예:&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;유효: $50.00&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;$1,000.53&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;유효하지 않음: $45.00&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;$34.3r6&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;다른 옵션(ASP를 사용하는 경우).&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&amp;gt;@String.Format(&quot;{0:C}&quot;, Model.total)&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 포맷이 정확합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고 (item.total은 더블/decimal)&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;만약 jQuery에서 당신은 또한 Regex를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;.totalSum&quot;).text('$' + parseFloat(total, 10).toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, &quot;$1,&quot;).toString());
&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;JQuery 포맷 통화 플러그인&lt;/font&gt;&lt;/strong&gt; &lt;br&gt; &lt;a href=&quot;http://code.google.com/p/jquery-formatcurrency/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://code.google.com/p/jquery-formatcurrency/&lt;/font&gt;&lt;/a&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;Melu의 답변을 확대하면 코드를 기능화하고 음의 양을 처리할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;br&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&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;$5.23&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;-$5.23&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function formatCurrency(total) {
    var neg = false;
    if(total &amp;lt; 0) {
        neg = true;
        total = Math.abs(total);
    }
    return (neg ? &quot;-$&quot; : '$') + parseFloat(total, 10).toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, &quot;$1,&quot;).toString();
}
&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;결과적으로 jQuery FormatCurrency 플러그인이 왜 좋은 답변인지에 대한 결론으로, 저는 당신의 의견을 반박하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1. code.google.com/p/jquery-formatcurrency - 모든 문자를 필터링하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 글자만 입력해도 지워지지 않습니다.&lt;/font&gt;&lt;/em&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;예, 형식 Currency() 자체로는 문자를 필터링할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// only formats currency
$(selector).formatCurrency();
&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;그러나 Currency 플러그인 형식에 포함되어 있는 toNumber()는 그렇지 않습니다.&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;// removes invalid characters, then formats currency
$(selector).toNumber().formatCurrency();
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/RobinHerbots/Inputmask&quot; rel=&quot;noreferrer&quot; papago-id=&quot;21-1&quot;&gt;jquery.inputmask 3.x&lt;/a&gt;를 사용합니다. 여기 &lt;a href=&quot;http://robinherbots.github.io/Inputmask/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;21-3&quot;&gt;데모&lt;/a&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;pre&gt;&lt;code&gt;&amp;lt;script src=&quot;/assets/jquery.inputmask.js&quot; type=&quot;text/javascript&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;/assets/jquery.inputmask.extensions.js&quot; type=&quot;text/javascript&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;/assets/jquery.inputmask.numeric.extensions.js&quot; type=&quot;text/javascript&quot;&amp;gt;&amp;lt;/script&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;pre&gt;&lt;code&gt;$(selector).inputmask('decimal',
  { 'alias': 'numeric',
    'groupSeparator': '.',
    'autoGroup': true,
    'digits': 2,
    'radixPoint': &quot;,&quot;,
    'digitsOptional': false,
    'allowMinus': false,
    'prefix': '$ ',
    'placeholder': '0'
  }
);
&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;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;li papago-id=&quot;29&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;30&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;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;greedy이 없는 마스크&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;읽기 전용/사용 안 함/ dir=&quot;rtl&quot; 특성 지원&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;34&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;35&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;36&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;37&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;38&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;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;value 형식 지정/입력 요소 없이 유효성 검사&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예전에는 jquery 형식의 통화 플러그인을 사용했는데 최근에는 버그가 심합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;USD/CAD만 포맷하면 되기 때문에 자동 포맷을 작성했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;.currencyMask&quot;).change(function () {
            if (!$.isNumeric($(this).val()))
                $(this).val('0').trigger('change');

            $(this).val(parseFloat($(this).val(), 10).toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, &quot;$1,&quot;).toString());
        });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 입력의 클래스를 통화 형식으로 설정하기만 하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;input type=&quot;text&quot; class=&quot;currencyMask&quot; /&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어느 브라우저에서나 완벽하게 포맷할 수 있습니다.&lt;/font&gt;&lt;/font&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;jQuery(&lt;strong papago-id=&quot;43-1&quot;&gt;플러그인 없음)&lt;/strong&gt;를 사용하여 regexp 통화 시도:&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;false&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;$(document).ready(function(){
  $('#test').click(function() {
    TESTCURRENCY = $('#value').val().toString().match(/(?=[\s\d])(?:\s\.|\d+(?:[.]\d+)*)/gmi);
    if (TESTCURRENCY.length &amp;lt;= 1) {
      $('#valueshow').val(
        parseFloat(TESTCURRENCY.toString().match(/^\d+(?:\.\d{0,2})?/))
      );
    } else {
      $('#valueshow').val('Invalid a value!');
    }
  });
});&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.9.1/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;input type=&quot;text&quot; value=&quot;12345.67890&quot; id=&quot;value&quot;&amp;gt;
&amp;lt;input type=&quot;button&quot; id=&quot;test&quot; value=&quot;CLICK&quot;&amp;gt;
&amp;lt;input type=&quot;text&quot; value=&quot;&quot; id=&quot;valueshow&quot;&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;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집: 값을 유효/무효로 새로 선택합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트는 이미 가지고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var cur = function (amt) {
    return Intl.NumberFormat('en-US', { style: &quot;currency&quot;, currency: &quot;USD&quot; }).format(amt);
};
&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;C#&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@{
    CultureInfo newCulture = CultureInfo.CreateSpecificCulture(Model.culture);
var ri = new RegionInfo(@newCulture.LCID);
}
&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;jQuery&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).find(&quot;#labGrandTotal&quot;).text(Intl.NumberFormat('@Model.culture', { style: 'currency', currency: '@ri.ISOCurrencySymbol'}).format(num));
&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;여기서 Model.culture는 예를 들어 &quot;en-GB&quot;입니다.&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/5043650/how-can-i-correctly-format-currency-using-jquery&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/742</guid>
      <comments>https://stoneblock.tistory.com/742#entry742comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:25:47 +0900</pubDate>
    </item>
    <item>
      <title>두 개의 열을 사용하여 데이터 피벗</title>
      <link>https://stoneblock.tistory.com/741</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 개의 열을 사용하여 데이터 피벗&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;피벗 형식의 데이터를 가지고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;-----------------------------------------
| user_id |  org  |   position  | lang  |
-----------------------------------------
|   1001  |   USE |   Boss      | EN    |
|   1001  |   USD |   Bossa     | FI    |
|   1002  |   GWR |   Dim       | SV    |
|   1003  |   GGA |   DCS       | FI    |
|   1003  |   GCA |   DDD       | SV    |
-----------------------------------------
&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;-------------------------------------------------------------------------------------
| user_id | org_fi |  position_fi |   org_en | position_en  | org_sv  | position_sv |
-------------------------------------------------------------------------------------
|  1001   |   USD  |    Bossa     |   USE    |   Boss       |         |             |
|  1002   |        |              |          |              | GWR     |  Dim        |
|  1003   |   GGA  |    DCS       |          |              | GCA     |  DDD        |
------------------------------------------------------------------------------------- 
&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;hr&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 user_id, 
    org, 
    position, 
    lang, 
    ROW_NUMBER () OVER (PARTITION BY lang, user_id ORDER BY ROWID) rn
 FROM source
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 앞으로 어떻게 나아가야 할지 전혀 모르겠습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;PIVOT&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;a href=&quot;http://sqlfiddle.com/#!4/0ccfc/21&quot; rel=&quot;noreferrer&quot; papago-id=&quot;0-1&quot;&gt;SQL Fiddle 데모&lt;/a&gt;&lt;sub papago-id=&quot;0-2&quot;&gt;(schema borrowed from &lt;a href=&quot;https://stackoverflow.com/a/11987970/17343&quot; papago-id=&quot;0-2-1&quot;&gt;bluefeets answer&lt;/a&gt;)&lt;/sub&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT *
FROM   source
PIVOT (
        MIN(org) AS org,
        MIN(position) AS position
        FOR lang
        IN('EN' AS en, 'FI' AS fi, 'SV' AS sv)
      );
&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;SELECT user_id, 
  max(case when lang = 'FI' THEN org ELSE ' ' END) org_fi,
  max(case when lang = 'FI' THEN position ELSE ' ' END) position_fi,
  max(case when lang = 'EN' THEN org ELSE ' ' END) org_en,
  max(case when lang = 'EN' THEN position ELSE ' ' END) position_en,
  max(case when lang = 'SV' THEN org ELSE ' ' END) org_sv,
  max(case when lang = 'SV' THEN position ELSE ' ' END) position_sv
FROM source
group by user_id
order by user_id
&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;a href=&quot;http://sqlfiddle.com/#!4/0ccfc/17&quot; papago-id=&quot;8-1&quot;&gt;SQL Fiddle with Demo&lt;/a&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;11gr2 피벗 예제&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SQL&amp;gt; create table t1
(
user_id number,
org varchar2(10),
position varchar2(10),
lang varchar2(10)
)
Table created.
SQL&amp;gt; insert into t1 values (1,'ABC','VVV','EN')
1 row created.
SQL&amp;gt; insert into t1 values (1,'DEF','WWW','FI')
1 row created.
SQL&amp;gt; insert into t1 values (2,'GHI','XXX','FI')
1 row created.
SQL&amp;gt; insert into t1 values (2,'JKL','YYY','SV')
1 row created.
SQL&amp;gt; insert into t1 values (3,'MNO','ZZZ','EN')
1 row created.
SQL&amp;gt; commit
Commit complete.
SQL&amp;gt; select * from t1

   USER_ID ORG        POSITION   LANG     
---------- ---------- ---------- ----------
         1 ABC        VVV        EN        
         1 DEF        WWW        FI       
         2 GHI        XXX        FI       
         2 JKL        YYY        SV       
         3 MNO        ZZZ        EN       

5 rows selected.
SQL&amp;gt; select * from t1
pivot(max(org) as org, max(position) as position for lang in ('EN' as &quot;EN&quot;,'FI' as &quot;FI&quot;,'SV' as &quot;SV&quot;))

   USER_ID EN_ORG     EN_POSITION FI_ORG     FI_POSITION SV_ORG     SV_POSITION
---------- ---------- ----------- ---------- ----------- ---------- -----------
         1 ABC        VVV         DEF        WWW                              
         2                        GHI        XXX         JKL        YYY       
         3 MNO        ZZZ                                                     

3 rows selected.
&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/11987067/pivoting-of-data-using-two-columns&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Oracle</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/741</guid>
      <comments>https://stoneblock.tistory.com/741#entry741comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:25:39 +0900</pubDate>
    </item>
    <item>
      <title>주어진 중단점에 도달할 때까지 GDB에서 실행되는 모든 행을 자동으로 인쇄하는 방법은 무엇입니까?</title>
      <link>https://stoneblock.tistory.com/740</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에서 중단점을 설정하고, 그 지점까지 실행할 수 있도록 하고 싶습니다. 그리고 그 과정에서 &quot;스텝&quot;한 선들을 출력합니다.&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;main&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;$ cat &amp;gt; test.c &amp;lt;&amp;lt;EOF
#include &quot;stdio.h&quot;

int count=0;

void doFunction(void) {
  // two steps forward
  count += 2;
  // one step back
  count--;
}

int main(void) {
  // some pointless init commands;
  count = 1;
  count += 2;
  count = 0;
  //main loop
  while(1) {
    doFunction();
    printf(&quot;%d\n&quot;, count);
  }
}
EOF

$ gcc -g -Wall test.c -o test.exe
$ chmod +x test.exe
$ gdb -se test.exe
...
Reading symbols from /path/to/test.exe...done.
(gdb) b main
Breakpoint 1 at 0x80483ec: file test.c, line 14.
(gdb) b doFunction
Breakpoint 2 at 0x80483c7: file test.c, line 7.
&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;r&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;) 프로그램은 첫 번째 중단 시점에 중단됩니다(&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;main&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;):&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(gdb) r
Starting program: /path/to/test.exe 

Breakpoint 1, main () at test.c:14
14    count = 1;
(gdb) 
&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;c&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;); 그러면 프로세스가 실행되고 아무것도 출력되지 않으며 요청된 선에서 끊어집니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(gdb) c
Continuing.

Breakpoint 2, doFunction () at test.c:7
7     count += 2;
(gdb)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;반면에, 계속하는 대신 - 나는 한 줄로 갈 수 있고, 단계를 사용하여 (&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;s&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;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 class=&quot;papago-parent&quot;&gt;를 들어:; :&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;14    count = 1;
(gdb) n
15    count += 2;
(gdb) s
16    count = 0;
(gdb) s
19      doFunction();
(gdb) s

Breakpoint 2, doFunction () at test.c:7
7     count += 2;
(gdb) s
9     count--;
(gdb) s
10  }
(gdb) s
main () at test.c:20
20      printf(&quot;%d\n&quot;, count);
(gdb) s
...
(gdb) s
_IO_vfprintf_internal (s=Cannot access memory at address 0xe5853361
) at vfprintf.c:210
210 vfprintf.c: No such file or directory.
    in vfprintf.c
(gdb) s
245 in vfprintf.c
(gdb) s
210 in vfprintf.c
(gdb) n
245 in vfprintf.c
...
(gdb) n
2006    in vfprintf.c
(gdb) n
__printf (format=0x80484f0 &quot;%d\n&quot;) at printf.c:39
39  printf.c: No such file or directory.
    in printf.c
(gdb) n
main () at test.c:21
21    }
(gdb) n
19      doFunction();
(gdb) n

Breakpoint 2, doFunction () at test.c:7
7     count += 2;
(gdb) 
&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;em papago-id=&quot;12-3&quot;&gt;경우에는 '다음'&lt;/em&gt;이 &lt;em papago-id=&quot;12-3&quot;&gt;동일한 수준으로 유지된다는 것을 보여주기&lt;/em&gt; 위해&lt;em papago-id=&quot;12-3&quot;&gt; 세션을 조금&lt;/em&gt; 더 길게 &lt;em papago-id=&quot;12-3&quot;&gt;남겨두고, 호출&lt;/em&gt;되는 기능 &lt;em papago-id=&quot;12-3&quot;&gt;내부&lt;/em&gt;의 '&lt;em papago-id=&quot;12-3&quot;&gt;단계' 단계&lt;/em&gt;).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 보시는 것처럼 스텝이나 다음 실행 여부에 따라 결과가 나올 때까지 시간이 좀 걸릴 수도 있기 때문에 엔터 버튼에 손을 대고 10분 동안 앉아 있기는 싫어요 :)&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;gdb&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;사용자의 추가 개입 없이 '중단점 2'로 이동합니다(단계(또는 다음)를 누른 것처럼 선을 인쇄하면서).&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;a href=&quot;http://sdaaubckp.sourceforge.net/post/gdb-py/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;15-1&quot;&gt;여기&lt;/a&gt; 게시됨)를 겪었습니다; 관련 코드는 아래와 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 &quot;중단점까지 다음/단계&quot;의 문제는 디버거가 중단된 경우(단계에서) 중단점을 &quot;실행 중인지&quot; 여부를 결정하는 방법입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고로 저는 GDB 7.2-1ubuntu11 (Ubuntu 11.04용 현재)을 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 이렇게 됐어요.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://sourceware.org/gdb/onlinedocs/gdb/Convenience-Vars.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;17-1&quot;&gt;저&lt;/a&gt;는 편의 변수에 대해 처음 알게 되었고, 프로그램 카운터 등을 사용할 수 있는 것을 고려할 때 &quot;브레이크포인트&quot; 상태를 제공하고 GDB 스크립트에서 직접 사용할 수 있는 GDB 편의 변수가 있어야 한다고 생각했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 한동안 &lt;a href=&quot;http://sourceware.org/gdb/onlinedocs/gdb/Index.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;17-3&quot;&gt;GDB reference Index&lt;/a&gt;를 살펴보니 그런 변수를 찾을 수가 없습니다. (제 시도는 &lt;a href=&quot;http://sdaaubckp.sourceforge.net/post/gdb-py/nub.gdb&quot; rel=&quot;noreferrer&quot; papago-id=&quot;17-5&quot;&gt;nub.gdb&lt;/a&gt;에 있습니다.)&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 &quot;브레이크포인트 상태&quot; 내부 변수가 없으면 남은 일은 (명령에 응답하여) GDB의 ('stdout') 명령줄 출력을 문자열로 캡처하여 파싱하는 것입니다 (&quot;브레이크포인트&quot;를 찾습니다).&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 &lt;a href=&quot;http://sourceware.org/gdb/current/onlinedocs/gdb/Python-API.html#Python-API&quot; rel=&quot;noreferrer&quot; papago-id=&quot;19-1&quot;&gt;Python API&lt;/a&gt; to GDB를 알게 되었고,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gdb.execute(&quot;CMDSTR&quot;, toString=True)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령 - 출력을 캡처하는 데 필요한 것으로 보이는 정확한 명령: &quot;&lt;em papago-id=&quot;20-1&quot;&gt;기본적으로 명령에 의해&lt;/em&gt; 생성된 &lt;em papago-id=&quot;20-1&quot;&gt;모든 출력은 gdb의 표준 출력&lt;/em&gt;으로 전송됩니다&lt;em papago-id=&quot;20-1&quot;&gt;.&lt;/em&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;20-1&quot;&gt; to_string 매개&lt;/em&gt; 변수가 &lt;em papago-id=&quot;20-1&quot;&gt;True이면 출력이 gdb.execute에 의해 수집되고 string[&lt;a href=&quot;http://sourceware.org/gdb/onlinedocs/gdb/Basic-Python.html#index-gdb_002eexecute-1597&quot; rel=&quot;noreferrer&quot; papago-id=&quot;20-1-1&quot;&gt;1&lt;/a&gt;&lt;/em&gt;]&quot;&lt;em papago-id=&quot;20-1&quot;&gt;&lt;/em&gt;으로&lt;em papago-id=&quot;20-1&quot;&gt; 반환&lt;/em&gt;됩니다!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;  &lt;/font&gt;&lt;/font&gt;&lt;ul&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 우선 저는 다음을 활용할 수 있는 스크립트(pygdb-nub.py ,gdbwrap&lt;a href=&quot;http://sdaaubckp.sourceforge.net/post/gdb-py/gdbwrap&quot; rel=&quot;noreferrer&quot; papago-id=&quot;12-3&quot;&gt;)&lt;/a&gt;를 만들어 보았습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gdb.execute&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;권장 방식으로, 여기서 실패 - 이 때문에:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;    &lt;/font&gt;&lt;/font&gt;&lt;ul&gt; 
     &lt;li&gt;&lt;a href=&quot;https://bugzilla.redhat.com/show_bug.cgi?id=627506&quot; rel=&quot;noreferrer&quot; papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Bug 627506 – python: gdb. execute([...], to_string=True) 부분적으로 stdout/stderr로 인쇄&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;http://sourceware.org/bugzilla/show_bug.cgi?id=10808&quot; rel=&quot;noreferrer&quot; papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;버그 10808 – GDB/Python API가 GDB 출력을 캡처하고 저장하도록 허용&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
    &lt;/ul&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 파이썬 스크립트를 이용해서 그 다음에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;subprocess.Popen&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;GDB 프로그램, stdin과 stdout을 대체하고, 거기서 GDB 제어를 계속합니다 (pygdb-sub.py ) - 그것도 실패했습니다...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(&lt;em papago-id=&quot;15-3&quot;&gt;분명히, 내&lt;/em&gt;가 stdin&lt;em papago-id=&quot;15-3&quot;&gt;/out을 제대로 리디렉션하지 않았기 때문&lt;/em&gt;에)&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 GDB에서 python 스크립트를 사용해서 호출할까 생각했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;source&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;gdb.execute&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;a href=&quot;http://sdaaubckp.sourceforge.net/post/gdb-py/pygdb-fork.gdb&quot; papago-id=&quot;18-1&quot; rel=&quot;noreferrer&quot;&gt;호출&lt;/a&gt;되어야 합니다&lt;a href=&quot;http://sdaaubckp.sourceforge.net/post/gdb-py/pygdb-fork.gdb&quot; papago-id=&quot;18-1&quot; rel=&quot;noreferrer&quot;&gt;(pygdb-&lt;/a&gt; fork.&lt;a href=&quot;http://sdaaubckp.sourceforge.net/post/gdb-py/pygdb-fork.py&quot; papago-id=&quot;18-3&quot; rel=&quot;noreferrer&quot;&gt;gdb&lt;/a&gt;, pygdb-fork.py &lt;a href=&quot;http://sdaaubckp.sourceforge.net/post/gdb-py/pygdb-fork.py&quot; papago-id=&quot;18-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;18-5&quot;&gt;작동&lt;/em&gt;할 뻔했지만 GDB는 다음과 같은 잘못된 점을 발견했습니다. &quot;[&lt;em papago-id=&quot;18-7&quot;&gt;tcsetpgrp failure in terminal_inferor:&lt;/em&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;18-7&quot;&gt; 작업 not&lt;/em&gt; permissioned]&quot;, 그리고 이후의 반환 문자열은 변경되지 않는 것으로 보입니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
  &lt;/ul&gt;&lt;/li&gt; 
&lt;/ul&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;마지막으로, 작동한 접근 방식은 GDB 출력을 일시적으로 A에서 리디렉션하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gdb.execute&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;RAM의 로그 파일로 이동합니다(Linux:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/dev/shm&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;); 그런 다음 다시 읽고 파싱한 다음 python에서 인쇄합니다. python은 중단점에 도달할 때까지 단계를 수행하는 간단한 루프도 처리합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아이러니한 것은 로그 파일을 리디렉션하여 이 솔루션을 발생시킨 대부분의 버그가 실제로 최근 SVN에 수정되었다는 것입니다. 즉, 가까운 미래에 분산 장치로 전파되어 한 버그를 사용할 수 있게 된다는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gdb.execute(&quot;CMDSTR&quot;, toString=True)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;직접적으로 :/ 하지만 지금 당장 소스에서 GDB를 구축하는 위험을 감수할 수는 없기 때문에 (그리고 가능한 새로운 비호환물과 부딪힐 수도 있기 때문에) 이 정도면 저에게도 충분합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&amp;nbsp;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 관련 파일입니다&lt;a href=&quot;http://sdaaubckp.sourceforge.net/post/gdb-py/pygdb-fork.gdb&quot; rel=&quot;noreferrer&quot; papago-id=&quot;35-1&quot;&gt;(&lt;/a&gt;partially는 pygdb-fork.gdb, pygdb-fork.py 에도 있습니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;pygdb-logg.gdb&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;# gdb script: pygdb-logg.gdb
# easier interface for pygdb-logg.py stuff
# from within gdb: (gdb) source -v pygdb-logg.gdb
# from cdmline: gdb -x pygdb-logg.gdb -se test.exe

# first, &quot;include&quot; the python file:
source -v pygdb-logg.py

# define shorthand for nextUntilBreakpoint():
define nub
  python nextUntilBreakpoint()
end

# set up breakpoints for test.exe:
b main
b doFunction

# go to main breakpoint
run
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;pygdb-logg.py&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# gdb will 'recognize' this as python
#  upon 'source pygdb-logg.py'
# however, from gdb functions still have
#  to be called like:
#  (gdb) python print logExecCapture(&quot;bt&quot;)

import sys
import gdb
import os

def logExecCapture(instr):
  # /dev/shm - save file in RAM
  ltxname=&quot;/dev/shm/c.log&quot;

  gdb.execute(&quot;set logging file &quot;+ltxname) # lpfname
  gdb.execute(&quot;set logging redirect on&quot;)
  gdb.execute(&quot;set logging overwrite on&quot;)
  gdb.execute(&quot;set logging on&quot;)
  gdb.execute(instr)
  gdb.execute(&quot;set logging off&quot;)

  replyContents = open(ltxname, 'r').read() # read entire file
  return replyContents

# next until breakpoint
def nextUntilBreakpoint():
  isInBreakpoint = -1;
  # as long as we don't find &quot;Breakpoint&quot; in report:
  while isInBreakpoint == -1:
    REP=logExecCapture(&quot;n&quot;)
    isInBreakpoint = REP.find(&quot;Breakpoint&quot;)
    print &quot;LOOP:: &quot;, isInBreakpoint, &quot;\n&quot;, REP
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&amp;nbsp;&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;pygdb-logg.gdb&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;pygdb-logg.py&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;python 스크립트, 별칭 설정&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;nub&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;code&gt;nextUntilBreakpoint&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;다음은 OP의 테스트 소스와 관련된 샘플 세션입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ gdb -x pygdb-logg.gdb -se test.exe
...
Reading symbols from /path/to/test.exe...done.
Breakpoint 1 at 0x80483ec: file test.c, line 14.
Breakpoint 2 at 0x80483c7: file test.c, line 7.

Breakpoint 1, main () at test.c:14
14    count = 1;
(gdb) nub
LOOP::  -1
15    count += 2;

LOOP::  -1
16    count = 0;

LOOP::  -1
19      doFunction();

LOOP::  1

Breakpoint 2, doFunction () at test.c:7
7     count += 2;

(gdb) nub
LOOP::  -1
9     count--;

LOOP::  -1
10  }

LOOP::  -1
main () at test.c:20
20      printf(&quot;%d\n&quot;, count);

1
LOOP::  -1
21    }

LOOP::  -1
19      doFunction();

LOOP::  1

Breakpoint 2, doFunction () at test.c:7
7     count += 2;

(gdb)
&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;... 내가 원했던 대로 :P 얼마나 신뢰할 수 있는지 모를 뿐입니다. (&lt;em papago-id=&quot;43-1&quot;&gt;그리고 에서 사용이 가능할지 여부&lt;/em&gt;를 알 수 &lt;em papago-id=&quot;43-1&quot;&gt;없습니다.)&lt;/em&gt; 에 &lt;em papago-id=&quot;43-1&quot;&gt;필요&lt;/em&gt;한 :) &lt;em papago-id=&quot;43-1&quot;&gt;편집: 우분투 11.04의 avr-gdb 버전은 현재 6.4이며 python 명령어를 인식하지 &lt;/em&gt;못합니다 &lt;em papago-id=&quot;43-1&quot;&gt;:(&lt;/em&gt; )&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&amp;nbsp;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이게 누군가에게 도움이 되길 바래요&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;건배!&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&amp;nbsp;&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;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;http://comments.gmane.org/gmane.comp.gdb.devel/30509&quot; rel=&quot;noreferrer&quot; papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;GDB: stdin에서 오류가 탐지되었습니다.&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://fixunix.com/linux/6801-gdb-has-problems-getting-commands-piped-stdin.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;GDB에서 STDIN으로 명령을 전송하는 데 문제가 있음&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://www.mail-archive.com/gdb@gnu.org/msg00031.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Re: [Gdb] GDB 다른 입력은 어떻게 사용합니까?&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://siesta.unixbeard.net/siesta/archive/hates-software/2004/09/21/98e7671d.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;gdb가 stdin에서 입력을 수락하지 않습니다.&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://groups.google.com/group/comp.os.linux.development.apps/browse_thread/thread/3ca4ba379323806c&quot; rel=&quot;noreferrer&quot; papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;IDE에서 gdb 사용 - comp.os.linux.development.apps | Google 그룹&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://rmathew.blogspot.com/2006/09/terminal-sickness.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;rmathew:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;말단병&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://www.gidforums.com/t-3369.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;[튜리알] C (Linux)의 외부 프로그램 호출 - GIDForums&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/4303128/how-to-use-multiple-arguments-with-a-shebang-i-e&quot; papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;shell - shebang과 함께 여러 인수를 사용하는 방법 (즉, #!? - Stack Overflow&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/6885923/redirecting-storing-output-of-shell-into-gdb-variable&quot; papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;셸의 출력을 GDB 변수로 리디렉션/저장? - 스택 오버플로&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://coreygoldberg.blogspot.com/2009/05/python-redirect-or-turn-off-stdout-and.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Corey Goldberg: Python - 리디렉션 또는 끄기 STDOUT 및 STDERR&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://tromey.com/blog/?p=548&quot; rel=&quot;noreferrer&quot; papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;광기의 절벽 › 9.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;스크립팅 gdb&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/2290842/gdb-python-scripting-where-has-parse-and-eval-gone&quot;&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; gdb python : where has&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;parse_and_eval&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;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/322110/invoke-gdb-to-automatically-pass-arguments-to-the-program-being-debugged&quot; papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;shell - gdb를 호출하여 디버깅 중인 프로그램에 인수를 자동으로 전달합니다 - Stack Overflow&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://www.howtoforge.com/storing-files-directories-in-memory-with-tmpfs&quot; rel=&quot;noreferrer&quot; papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;tmpfs로 파일/디렉토리를 메모리에 저장 | 위조하는 방법 - Linux 방법 및 튜토리얼&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://www.gossamer-threads.com/lists/python/python/650546&quot; rel=&quot;noreferrer&quot; papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;존재하지 않는 파일을 터치하는 간단한 방법 | Python | Python&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://bytes.com/topic/python/answers/19341-os-fork-different-cgi-script&quot; rel=&quot;noreferrer&quot; papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;cgi-script에서 os.fork()가 다릅니까? - Python&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/2321087/writing-tests-that-use-gdb-how-to-capture-output&quot; papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;java - GDB를 사용하는 테스트 작성 - 출력을 캡처하는 방법? - Stack Overflow&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://www.cinsk.org/wiki/Debugging_with_GDB:_How_to_create_GDB_Commands_in_Python&quot; rel=&quot;noreferrer&quot; papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;GDB를 이용한 디버깅 : Python에서 GDB 명령어를 만드는 방법 - Wiki&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://www.acsu.buffalo.edu/~charngda/gdb.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;GDB참조카드&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령어 파일을 사용하여 이렇게 gdb처럼 하는 것은 어떨까요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요에 따라 파일 인수 및 루프 수를 변경합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;gdb -x run.gdb
&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;run.gdb:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;set pagination off
set logging file gdb.log
set logging on
set $i = 0
file main
break main
break WriteData
# sadly, commands not getting executed on reaching breakpoint 2
commands 2
  set $i=1000
  print &quot;commands 2 : %d&quot;,$i
end
run
while ( $i &amp;lt; 1000 )
  step
  # next
  # continue
  set $i = $i + 1
end
&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;@sdaau의 답변(http://www.mail-archive.com/gdb &lt;a href=&quot;http://www.mail-archive.com/gdb@gnu.org/msg00031.html&quot; papago-id=&quot;69-1&quot; rel=&quot;nofollow&quot;&gt;@&lt;/a&gt;gnu&lt;a href=&quot;http://www.mail-archive.com/gdb@gnu.org/msg00031.html&quot; papago-id=&quot;69-1&quot; rel=&quot;nofollow&quot;&gt;.&lt;/a&gt;org&lt;a href=&quot;http://www.mail-archive.com/gdb@gnu.org/msg00031.html&quot; papago-id=&quot;69-1&quot; rel=&quot;nofollow&quot;&gt;/&lt;/a&gt;msg00031.html)에 있는 링크를 바탕으로 's'를 계속 보내고 gdb의 출력을 계속 읽으며 텍스트 파일과 터미널에 출력을 출력하는 것은 물론 다른 사람의 요구에 맞게 수정할 수 있지만,&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 수정한 내용이 대부분의 사람들이 필요로 하는 내용에 적합했으면 좋겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.codeground.net/coding/gdb-step-into-all-lines-to-get-full-application-flow/&quot; rel=&quot;nofollow&quot; papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://www.codeground.net/coding/gdb-step-into-all-lines-to-get-full-application-flow/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;wget http://www.codeground.net/downloads/gdbwalkthrough.c
gcc gdbwalkthrough.c -o gdbwalkthrough
./gdbwalkthrough &amp;lt;application full path&amp;gt; [application arguments]
&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;새로운 답으로, 이전 코드라인은 이미 통제되고 있기 때문에 :) 기본적으로 소스(및/또는 어셈블리) 코드라인이 실행되는 것을 관찰하는 것이 포인트라면, &quot;&lt;em papago-id=&quot;71-1&quot;&gt;자동 출력&lt;/em&gt;&quot;을 살펴볼 때 종종 동기가 저에게 있기 때문입니다. 기본적으로 매우 빠른 방법은 GDB TUI 모드를 사용하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/1345338/gdb-behavior-value-optimized-out/1354762#1354762&quot; papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;c - gdb 동작 : value optimized out - Stack Overflow #1354762&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;GDB TUI 모드를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;마이너스를 입력하고 Enter를 입력하면 GDB 사본이 활성화됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 C-x 2를 입력합니다(즉, Control을 누른 상태에서 X를 누르고 둘 다 해제한 다음 2를 누릅니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 분할 소스 및 분해 디스플레이로 전환됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 stepi와 nexti를 사용하여 기계 명령을 한 번에 하나씩 이동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;C-xo를 사용하여 TUI 창 사이를 전환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서의 비결은 당신이 친다고 해도&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;continue&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;- 이 시간 소스는 TUI에 표시되고 프로그램이 실행될 때 표시됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/LXbre.png&quot; alt=&quot;GDB TUI Screenshot&quot;&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;... 이를 통해 &quot;자동 스텝핑 컨텍스트&quot;에서 중단점을 스크립팅해야 하는 많은 상황을 피할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;TUI에 관한 문서: &lt;a href=&quot;http://sourceware.org/gdb/onlinedocs/gdb/TUI.html&quot; papago-id=&quot;76-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;TUI&lt;/a&gt; -&lt;a href=&quot;http://sourceware.org/gdb/onlinedocs/gdb/TUI.html&quot; papago-id=&quot;76-1&quot; rel=&quot;nofollow noreferrer&quot;&gt; GDB&lt;/a&gt;를 통한 &lt;a href=&quot;http://sourceware.org/gdb/onlinedocs/gdb/TUI.html&quot; papago-id=&quot;76-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;디버깅&lt;/a&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;건배!&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;사실, 저는 파이썬-GDB 확장 기능이 있는 &lt;a href=&quot;https://github.com/Viaceslavus/gdb-debug-until&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;78-1&quot;&gt;Github repo&lt;/a&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;Repo를 복제하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;git clone https://github.com/Viaceslavus/gdb-debug-until.git
&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;Python 스크립트를 GDB 내부에서 다음 명령을 사용하여 GDB에 공급합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;source gdb-debug-until/debug_until.py
&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;(필요한 경우 python 스크립트 경로 변경)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;82&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 다음 명령을 사용하여 중단점이 생길 때까지 코드의 각 줄을 실행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;debug-until somefile.c:100 --args=&quot;&quot; --end=&quot;somefile.c:200&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 &quot;some file.c:100&quot;은 시작 중단점이고 &quot;some file.c:200&quot;은 마지막 중단점입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&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;&quot;--args&quot;는 프로그램에 대한 인수 집합을 지정합니다(인수가 없는 경우 생략 가능).&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;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 확장자를 사용하면 ('-r' 옵션을 사용하여) 코드를 몇 번 실행할 수도 있고 디버깅하는 동안 처리해야 할 일부 이벤트도 지정할 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은 다음을 참조하십시오.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;a href=&quot;https://github.com/Viaceslavus/gdb-debug-until&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;42&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;/a&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;현재 승인된 답변에는 많은 파일 io가 포함되어 있으며 중단점에서만 정지되지만 워치포인트, 신호 및 프로그램 종료도 무시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;88&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;python api를 사용하면 이를 잘 처리할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;89&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;90&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;91&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;while loop in python, CTRL-C의 &quot;예상되는&quot; 키보드 인터럽트를 처리하는 동안 python.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;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;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정지 이유를 확인하고 거기에 단계의 종류를 저장하는 이벤트 핸들러&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;94&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;While loop을 &quot;간단하지 않은&quot; 정지를 위해 조정합니다(중단점/시계점/signal/...).&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&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;다음 코드는 gdb-auto-step.py 에 배치될 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;source gdb-auto-step.py&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;원하는 경우 언제든지(또는 .gdbinit 파일에 포함하여 항상 사용할 수 있도록):&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;import gdb
import time
import traceback

class CmdAutoStep (gdb.Command):
    &quot;&quot;&quot;Auto-Step through the code until something happens or manually interrupted.
An argument says how fast auto stepping is done (1-19, default 5).&quot;&quot;&quot;
    def __init__(self):
        print('Registering command auto-step')
        super(CmdAutoStep, self).__init__(&quot;auto-step&quot;, gdb.COMMAND_RUNNING)
        gdb.events.stop.connect(stop_handler_auto_step)
    def invoke(self, argument, from_tty):
        # sanity check - are we even active, prevents a spurious &quot;no registers&quot; exception
        try:
            gdb.newest_frame()
        except gdb.error:
            raise gdb.GdbError(&quot;The program is not being run.&quot;)

        # calculate sleep time
        if argument:
            if not argument.isdigit():
                raise gdb.GdbError(&quot;argument must be a digit, not &quot; + argument)
            number = int(argument)
            if number == 0 or number &amp;gt; 19:
                raise gdb.GdbError(&quot;argument must be a digit between 1 and 19&quot;)   
        sleep_time = 3.0 / (1.4 ** number)

        # activate GDB scrolling, otherwise we'd auto-step only one page
        pagination = gdb.parameter(&quot;pagination&quot;)
        if pagination:
            gdb.execute(&quot;set pagination off&quot;, False, False)

        # recognize the kind of stop via stop_handler_auto_step 
        global last_stop_was_simple
        last_stop_was_simple = True

        # actual auto-stepping
        try:
            while last_stop_was_simple:
                gdb.execute(&quot;step&quot;)
                time.sleep(sleep_time)
        # we just quit the loop as requested
        # pass keyboard and user errors unchanged
        except (KeyboardInterrupt, gdb.GdbError):
            raise
        # that exception is unexpected, but we never know...
        except Exception:
            traceback.print_exc()
        # never leave without cleanup...
        finally:
            if pagination:
                gdb.execute(&quot;set pagination on&quot;, False, False)

def stop_handler_auto_step(event):
    # check the type of stop, the following is the common one after step/next,
    # a more complex one would be a subclass (for example breakpoint or signal)
    global last_stop_was_simple
    last_stop_was_simple = type(event) is gdb.StopEvent

CmdAutoStep()

&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;97&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매개 변수(일명 &quot;gdb way&quot;)를 사용하여 기본값을 지정하려면 api를 통해 새 매개 변수를 추가하고 다음과 같이 사용합니다(0 = 무제한, 처리 프로세스 종료, 추가 auto-next 명령 및 더 많은 클래스 래핑과 함께 제공됨).&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;import gdb
import time
import traceback

class ParameterAutoSpeed (gdb.Parameter):
    &quot;&quot;&quot;default speed for auto-step and auto-next commands (0-19, default 5)&quot;&quot;&quot;
    def __init__(self):
        self.set_doc = &quot;&quot;&quot;Set speed for &quot;auto-step&quot; and &quot;auto-next&quot;,
internally used to calculate sleep time between iterations of &quot;step&quot; / &quot;next&quot;;
set &quot;auto-speed 0&quot; causes there to be no sleeping.&quot;&quot;&quot;
        self.show_doc = &quot;Speed value for auto-step/auto-next.&quot;
        super(ParameterAutoSpeed, self).__init__(&quot;auto-speed&quot;, gdb.COMMAND_RUNNING, gdb.PARAM_UINTEGER)
        self.value = 5
        self.backup = self.value

    def get_set_string (self):
        try:
            self.value = int(self.validate(self.value))
        except gdb.GdbError:
            self.value = int (self.backup)
            raise
        self.backup = self.value
        return &quot;&quot;

    def validate (self, argument):
        &quot;&quot;&quot;validation for auto-step/auto-next speed&quot;&quot;&quot;
        try:
            speed = int(argument)
            if speed &amp;lt; 0 or speed &amp;gt; 19:
                raise ValueError()
        except (TypeError, ValueError):
            raise gdb.GdbError(&quot;speed argument must be an integer between 1 and 19, or 0&quot;)
        return speed

class CmdAutoNext (gdb.Command):
    &quot;&quot;&quot;Auto-Next through the code until something happens or manually interrupted.
An argument says how fast auto stepping is done (see parameter &quot;auto-speed&quot;).&quot;&quot;&quot;
    def __init__(self, worker):
        self.worker = worker
        super(CmdAutoNext, self).__init__(&quot;auto-next&quot;, gdb.COMMAND_RUNNING)

    def invoke(self, argument, from_tty):
        self.worker.invoke (argument)

class CmdAutoStep (gdb.Command):
    &quot;&quot;&quot;Auto-Step through the code until something happens or manually interrupted.
An argument says how fast auto stepping is done (see parameter &quot;auto-speed&quot;).

Note: To be usable you likely need several &quot;skip&quot; setup for not stepping into functions of
      the C library and other system libraries which may have no debug symbols available
      or are of no interest.
      You may press [CTRL]+[C] and execute &quot;skip file&quot;, then &quot;finish&quot; to leave those.&quot;&quot;&quot;
    def __init__(self, worker):
        self.worker = worker
        super(CmdAutoStep, self).__init__(&quot;auto-step&quot;, gdb.COMMAND_RUNNING)

    def invoke(self, argument, from_tty):
        self.worker.invoke (argument, do_step=True)

class AutoWorker ():
    def __init__(self):
        print('Registering parameter auto-speed and commands auto-step, auto-next')
        self.speed = ParameterAutoSpeed()
        CmdAutoStep(self)
        CmdAutoNext(self)
        gdb.events.stop.connect(self.stop_handler_auto)
        gdb.events.exited.connect(self.exit_handler_auto)

    def invoke(self, argument, do_step=False):
        # calculate sleep time
        if argument:
            number = self.speed.validate(argument) # raises an error if not valid
        else:
            number = self.speed.value
        if number:
            sleep_time = 3.0 / (1.4 ** number)
        else:
            sleep_time = 0

        # activate GDB scrolling, otherwise we'd auto-step/next only one page
        pagination = gdb.parameter(&quot;pagination&quot;)
        if pagination:
            gdb.execute(&quot;set pagination off&quot;, False, False)

        # recognize the kind of stop via stop_handler_auto_step
        self.last_stop_was_simple = True

        # actual auto-stepping
        try:
            while self.last_stop_was_simple:
                if do_step:
                    gdb.execute (&quot;step&quot;)
                else:
                    gdb.execute (&quot;next&quot;)
                time.sleep(sleep_time)
        # we just quit the loop as requested
        # pass keyboard and user errors unchanged
        except (KeyboardInterrupt, gdb.GdbError):
            raise
        # wrap GDB errors like &quot;the program is not being run&quot; to let them be
        # handled via default invoke error reporting, not as a python error
        except gdb.error as err:
            raise gdb.GdbError(err)
        # that exception is unexpected, but we never know...
        except Exception:
            traceback.print_exc()
        # never leave without cleanup...
        finally:
            if pagination:
                gdb.execute(&quot;set pagination on&quot;, False, False)

    def stop_handler_auto(self, event):
        # check the type of stop, the following is the common one after step/next,
        # a more complex one would be a subclass (for example breakpoint or signal)
        self.last_stop_was_simple = type(event) is gdb.StopEvent

    def exit_handler_auto(self, event):
        self.last_stop_was_simple = False

AutoWorker()

&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;98&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/6947389/how-to-print-every-executed-line-in-gdb-automatically-until-a-given-breakpoint-i&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/740</guid>
      <comments>https://stoneblock.tistory.com/740#entry740comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:25:32 +0900</pubDate>
    </item>
    <item>
      <title>last_value window 함수가 제대로 작동하지 않습니다.</title>
      <link>https://stoneblock.tistory.com/739</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;last_value window 함수가 제대로 작동하지 않습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Last_value&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;doesn't&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;CREATE TABLE EXAMP2
(
  CUSTOMER_ID  NUMBER(38)                       NOT NULL,
  VALID_FROM   DATE                             NOT NULL
);


Customer_id      Valid_from
-------------------------------------
 9775             06.04.2013 01:34:16
 9775             06.04.2013 20:34:00
 9775             12.04.2013 11:07:01
--------------------------------------

select DISTINCT LAST_VALUE(VALID_FROM) 
  OVER (partition by customer_id ORDER BY VALID_FROM ASC) rn 
from   examp1;
&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;LAST_VALUE&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;06.04.2013 20:34:00
06.04.2013 01:34:16
12.04.2013 11:07:01
&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;FIRST_VALUE&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;pre&gt;&lt;code&gt;select  DISTINCT FIRST_VALUE(VALID_FROM) 
OVER (partition by customer_id ORDER BY VALID_FROM DESC) rn 
from   examp1;

4/12/2013 11:07:01 AM
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;First_value&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 class=&quot;papago-parent&quot;&gt;왜 나는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;2 different results&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 class=&quot;papago-parent&quot;&gt;기본적으로 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;between unbounded preceding and current row&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&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;partition by customer_id order by valid_from asc&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;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle은 현재 행과 일치하는 모든 행을 가져옵니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;customer id&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그들에게 오름차순으로 명령합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;valid_from&lt;/code&gt;&lt;/li&gt; 
 &lt;li&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;valid_from&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;valid_from&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;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;평가합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;last_value&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;valid_from&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;/ol&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;16:53:00 SYSTEM@sandbox&amp;gt; ed
Wrote file S:\spool\sandbox\BUFFER_SYSTEM_38.sql

  1  select last_value(VALID_FROM) OVER (
  2    partition by customer_id
  3    ORDER BY VALID_FROM asc
  4    range between current row and unbounded following
  5  ) rn
  6* from   t
16:53:21 SYSTEM@sandbox&amp;gt; /

RN
---------------------------------------------------------------------------
04-DEC-13 11.07.01.000000 AM
04-DEC-13 11.07.01.000000 AM
04-DEC-13 11.07.01.000000 AM

Elapsed: 00:00:00.01
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;first_value&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;last_value&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;ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING&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;select DISTINCT LAST_VALUE(VALID_FROM) OVER (partition by customer_id
  ORDER BY VALID_FROM ASC
  ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) rn
from examp1;
&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;문서: http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions001.htm#i81407 을 참조하고 특히 윈도우 설정에 대한 섹션을 읽으십시오.&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;windowing 절을 허용하는 함수의 기본 절은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW&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 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/16274362/last-value-window-function-doesnt-work-properly&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Oracle</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/739</guid>
      <comments>https://stoneblock.tistory.com/739#entry739comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:25:16 +0900</pubDate>
    </item>
    <item>
      <title>TextReader 대신 문자열에서 역직렬화</title>
      <link>https://stoneblock.tistory.com/738</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;TextReader 대신 문자열에서 역직렬화&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;string path = @&quot;c:\Directory\test.xml&quot;;
XmlSerializer s = new XmlSerializer(typeof(Car));

TextReader r = new StreamReader(path);

Car car = (Car)s.Deserialize(r);
r.Close();
&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;XML을 문자열로 변환한 다음 문자열을 개체 Car로 변환하는 코드로 변환합니다.&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;public static string XmlSerializeToString(this object objectInstance)
{
    var serializer = new XmlSerializer(objectInstance.GetType());
    var sb = new StringBuilder();

    using (TextWriter writer = new StringWriter(sb))
    {
        serializer.Serialize(writer, objectInstance);
    }

    return sb.ToString();
}

public static T XmlDeserializeFromString&amp;lt;T&amp;gt;(this string objectData)
{
    return (T)XmlDeserializeFromString(objectData, typeof(T));
}

public static object XmlDeserializeFromString(this string objectData, Type type)
{
    var serializer = new XmlSerializer(type);
    object result;

    using (TextReader reader = new StringReader(objectData))
    {
        result = serializer.Deserialize(reader);
    }

    return result;
}
&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;//Make XML
var settings = new ObjectCustomerSettings();
var xmlString = settings.XmlSerializeToString();

//Make Object
var settings = xmlString.XmlDeserializeFromString&amp;lt;ObjectCustomerSettings&amp;gt;(); 
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열 변수 안에 XML을 저장한 경우 &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.io.stringreader.aspx&quot; rel=&quot;noreferrer&quot; papago-id=&quot;5-1&quot;&gt;StringReader&lt;/a&gt;를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var xml = @&quot;&amp;lt;car/&amp;gt;&quot;;
var serializer = new XmlSerializer(typeof(Car));
using (var reader = new StringReader(xml))
{
    var car = (Car)serializer.Deserialize(reader);
}
&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;1-liner, XML 문자열을 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;text&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;YourType&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예상 개체 유형으로 지정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 답변과 크게 다르지 않고 한 줄로 압축됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var result =  (YourType)new XmlSerializer(typeof(YourType)).Deserialize(new StringReader(text));
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;static T DeserializeXml&amp;lt;T&amp;gt;(string sourceXML) where T : class
{
    var serializer = new XmlSerializer(typeof(T));
    T result = null;

    using (TextReader reader = new StringReader(sourceXML))
    {
        result = (T) serializer.Deserialize(reader);
    }

    return result;
}
&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://stackoverflow.com/questions/4996876/generic-deserialization-of-an-xml-string&quot; papago-id=&quot;9-1&quot;&gt;xml 문자열의 일반 역직렬화&lt;/a&gt;에서 뻔뻔하게 복사됨&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    public static T DeserializeFromXmlString&amp;lt;T&amp;gt;(string xmlString)
    {
        var serializer = new XmlSerializer(typeof(T));
        using (TextReader reader = new StringReader(xmlString))
        {
            return (T) serializer.Deserialize(reader);
        }
    }
&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/2347642/deserialize-from-string-instead-textreader&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>XML</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/738</guid>
      <comments>https://stoneblock.tistory.com/738#entry738comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:25:09 +0900</pubDate>
    </item>
    <item>
      <title>SQL: 여러 테이블에서 조합 선택 개수(*)</title>
      <link>https://stoneblock.tistory.com/737</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;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/606234/select-count-from-multiple-tables&quot; papago-id=&quot;2-1&quot;&gt;저&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;유니언을 시도해봤는데 세 줄의 카운트를 다시 집어넣었어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게 그것들을 하나로 합칠 수 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select count(*) from foo1 where ID = '00123244552000258'
union all 
select count(*) from foo2 where ID = '00123244552000258'
union all
select count(*) from foo3 where ID = '00123244552000258'
&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;edit: MS SQL 2005에 나와 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;SELECT 
(select count(*) from foo1 where ID = '00123244552000258')
+
(select count(*) from foo2 where ID = '00123244552000258')
+
(select count(*) from foo3 where ID = '00123244552000258')
&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;SELECT SUM(c)
FROM (
  SELECT COUNT(*) AS c FROM foo1 WHERE ID = '00123244552000258'
  UNION ALL
  SELECT COUNT(*) FROM foo2 WHERE ID = '00123244552000258'
  UNION ALL
  SELECT COUNT(*) FROM foo3 WHERE ID = '00123244552000258'
);
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;select 
  (select count(*) from foo) as foo
, (select count(*) from bar) as bar
, ...
&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;예를 들면 다음과 같습니다. 이것은 1 행, 2 열을 반환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT
 (SELECT COUNT(*) FROM MyTable WHERE MyCol = 'MyValue') AS MyTableCount,
 (SELECT COUNT(*) FROM YourTable WHERE MyCol = 'MyValue') AS YourTableCount,
&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;SELECT SUM(A) 
FROM
(
    SELECT 1 AS A
    UNION ALL 
    SELECT 1 AS A
    UNION ALL
    SELECT 1 AS A
    UNION ALL
    SELECT 1 AS A
) AS B
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;select sum(counts) from (
select count(1) as counts from foo 
union all
select count(1) as counts from bar)
&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;SELECT A, B, C FROM ( your initial query here ) TableAlias
&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;오라클의 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select( 
select count(*) from foo1 where ID = '00123244552000258'
+
select count(*) from foo2 where ID = '00123244552000258'
+
select count(*) from foo3 where ID = '00123244552000258'
) total from dual;
&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/1279569/sql-combine-select-count-from-multiple-tables&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>sql-server</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/737</guid>
      <comments>https://stoneblock.tistory.com/737#entry737comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:25:01 +0900</pubDate>
    </item>
    <item>
      <title>mysql의 테이블에서 N개의 레코드를 선택하는 방법</title>
      <link>https://stoneblock.tistory.com/736</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mysql의 테이블에서 N개의 레코드를 선택하는 방법&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;1000개 이상의 레코드가 있는 테이블에서 10개의 레코드만 얻을 수 있는 방법은 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;행, 이름, 비용이 적힌 테스트 테이블이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   select  name, cost from test;
&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;여기서 나는 처음 10개의 행만 선택하고 rowid를 선택하고 싶지 않습니다.&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;처음 10개의 레코드를 선택하려면 LIMIT를 사용한 다음 필요한 레코드 수를 입력합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT name, cost FROM test LIMIT 10
&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;특정 위치에서 10개의 레코드를 선택하려면 LIMIT 10, 100을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT name, cost FROM test LIMIT 100, 10
&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;101-110 기록이 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT name, cost FROM test LIMIT 10, 100
&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;기록이 11-111로 표시됩니다.&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;@ http://php.about.com/od/mysqlcommands/g/Limit_sql.htm 를 더 읽어보실 수 있습니다.&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;ORDER BY&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 사용할 때, 연속으로 두 번 호출하고 데이터가 변경되지 않으면 동일한 레코드 세트를 얻을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/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;select  name, cost 
from test 
order by rowid
limit 10; 
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;SELECT TOP(10) name, cost FROM test;
&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;이 쿼리를 사용하면 처음 10개의 레코드를 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT employee_id, first_name 
FROM employees  
LIMIT 10;
&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;아래 쿼리를 사용하면 N=10이라고 가정하면 처음 N개의 레코드를 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT name, cost FROM test LIMIT 10;
&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;행 M부터 시작하여 10개의 레코드를 얻고자 한다고 가정합니다(행 인덱스는 0부터 시작).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT name, cost FROM test LIMIT 10 OFFSET (M-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/8805538/how-to-select-n-records-from-a-table-in-mysql&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/736</guid>
      <comments>https://stoneblock.tistory.com/736#entry736comment</comments>
      <pubDate>Tue, 31 Oct 2023 20:24:54 +0900</pubDate>
    </item>
    <item>
      <title>프로세스에 대한 메모리 할당이 느리고 더 빠를 수 있는 이유는 무엇입니까?</title>
      <link>https://stoneblock.tistory.com/735</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 class=&quot;papago-parent&quot;&gt;모든 프로세스 메모리는 페이지로 분할되며 가상 메모리의 모든 페이지는 실제 메모리의 페이지 또는 스왑 파일의 페이지에 매핑되거나 물리적 페이지가 여전히 할당되지 않은 새 페이지가 될 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;OS는 애플리케이션이 메모리를 요구할 때가 아니라 새로운 페이지를 요구할 때 실제 메모리에 매핑합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc&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 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;perf&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/wWPtb.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/wWPtb.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;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;커널 기능에 걸리는 시간의 약 20%가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;clear_page_orig&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;__do_page_fault&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;get_page_from_free_list&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;string.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;

#define SIZE 1 * 1024 * 1024

int main(int argc, char *argv[]) {
  int i;
  int sum = 0;
  int *p = (int *) malloc(SIZE);
  for (i = 0; i &amp;lt; 10000; i ++) {
    memset(p, 0, SIZE);
    sum += p[512];
  }
  free(p);
  printf(&quot;sum %d\n&quot;, sum);
  return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;memset&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메모리 바인딩된 처리일 뿐입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우, 우리는 작은 메모리 덩어리를 한 번 할당하고 그것을 반복합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 프로그램을 다음과 같이 실행합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ gcc -O1 ./mem.c &amp;amp;&amp;amp; time ./a.out
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;-O1&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;clang&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;-O2&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;결과는 사용자: 0.520s, sys: 0.008s입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 따르면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;perf&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 이 시간의 99%는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;memset&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;libc&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 따라서 이 경우 쓰기 성능은 약 20기가바이트/s로 제 메모리의 이론적 성능인 12.5Gb/s보다 높습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 L3 CPU 캐시 때문인 것 같습니다.&lt;/font&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;#define SIZE 1 * 1024 * 1024
for (i = 0; i &amp;lt; 10000; i ++) {
  int *p = (int *) malloc(SIZE);
  memset(p, 0, SIZE);
  free(p);
}
&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&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 그렇게 믿어요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;free&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제로 OS에 메모리를 사용할 수 있는 것은 아니고, 단지 그 과정 내에서 메모리를 사용할 수 있는 목록에 넣었을 뿐입니다. 그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 반복에서 정확히 동일한 메모리 블록을 얻을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 눈에 띄는 차이가 없는 이유입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1 메가바이트에서 크기를 늘려야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행 시간은 조금씩 증가하여 10메가바이트 가까이 포화될 것입니다(저는 10메가바이트와 20메가바이트 사이에 차이가 없습니다).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#define SIZE 10 * 1024 * 1024
for (i = 0; i &amp;lt; 1000; i ++) {
  int *p = (int *) malloc(SIZE);
  memset(p, 0, SIZE);
  free(p);
}
&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;시간 표시: 사용자: 1.184s, sys: 0.004s.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;perf&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여전히 99% 이상의 시간이 사용되고 있음을 보고합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;memset&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 그러나 처리량은 약 8.3Gb/s입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 시점에서, 무슨 일이 일어나고 있는지 이해합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메모리 블록 크기를 계속 늘리면 사용자: 0.724s, sys: 3.300s 중 어느 시점(35Mb의 경우) 실행 시간이 크게 증가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#define SIZE 40 * 1024 * 1024
for (i = 0; i &amp;lt; 250; i ++) {
  int *p = (int *) malloc(SIZE);
  memset(p, 0, SIZE);
  free(p);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 따르면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;perf&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;memset&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;시간의 18%만 소비합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/xaSmt.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/xaSmt.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;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;분명히 메모리는 OS에서 할당되고 각 단계에서 해제됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;앞서 말씀드린 대로 OS는 할당된 각 페이지를 삭제한 후 사용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 27.3&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;%의&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;clear_page_orig&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특별해 보이지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 클리어 멤의 경우 4초 * 0.273 ≈ 1.1초입니다. 세 번째 예에서도 마찬가지입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;memset&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;17.9%가 소요되었으며, 이로 인해 700msec의 ≈이 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 이는 메모리가 L3 캐시에 이미 저장되어 있기 때문에 정상입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;clear_page_orig&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(첫 번째 및 두 번째 예제).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;이해할 수 없는 것 - 마지막 사례가 단순한 경우보다 2배 느린 이유&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;memset&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;code&gt;memset&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;L3 캐시&lt;/font&gt;? 이거 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;뭐 좀 해도 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거 가지고 뭐 좀 해도 돼요?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과는 기본 Mac OS, VMware 산하 Ubuntu 및 Amazon c4.large 인스턴스에서 재현할 수 있습니다(작은 차이가 있음).&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;ul&gt; 
 &lt;li papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;40-0&quot;&gt;OS 차원에서&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;OS가 페이지를 이전에 속해 있던 것과 동일한 응용 프로그램으로 반환하는 것을 알고 있다면 해당 페이지를 지울 수 없습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;41-0&quot;&gt;CPU 레벨에 있습니다&lt;/strong&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;CPU가 페이지가 비어 있었다는 것을 알고 있다면 메모리의 페이지를 지울 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;캐시에서 어느 정도 처리한 후에야 캐시에서 지우고 메모리로 옮길 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 일어나고 있는 일은 몇 가지 다른 시스템을 포함하기 때문에 약간 복잡합니다. 그러나 컨텍스트 전환 비용과는 전혀 관련이 &lt;em papago-id=&quot;42-1&quot;&gt;없습니다&lt;/em&gt;. 프로그램에서 시스템 호출을 거의 하지 않습니다(&lt;a href=&quot;http://blog.packagecloud.io/eng/2015/11/15/strace-cheat-sheet/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;42-3&quot;&gt;Strace&lt;/a&gt;를 사용하여 이를 확인하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫째, 방법에 대한 몇 가지 기본 원칙을 이해하는 것이 중요합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구현은 일반적으로 다음과 같이 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&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;malloc&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;구현은 OS에서 호출을 통해 많은 메모리를 얻습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sbrk&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;mmap&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;초기화 중에&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;획득된 메모리의 양은 일부에서 조정될 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일단 메모리가 획득되면, 그것은 일반적으로 프로그램이 예를 들어, 메모리를 요청할 때, 예를 들어, 그것이 다른 크기 클래스들로 절단되고 데이터 구조로 배열된다,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc(123)&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;malloc&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구현을 통해 이러한 요구사항에 맞는 메모리를 신속하게 찾을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전화할때&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;free&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;malloc&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구현을 통해 이 기능의 작동 방식을 정확하게 조정할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대용량 메모리 청크를 할당할 경우 대부분&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;malloc&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;mmap&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;시스템 호출, 즉 한 번에 &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;대부분의 시스템에서 메모리 1페이지는 4096바이트입니다.&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;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이와 관련하여 대부분의 OS는 메모리 페이지를 삭제한 후 다음을 통해 메모리를 요청한 프로세스에 배포합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mmap&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;sbrk&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;51&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 이것이 당신이 전화를 받는 이유입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;clear_page_orig&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 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;이 함수는 메모리 페이지에 0을 기록하려고 시도하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;53&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 원칙들은 많은 이름을 가지고 있지만 흔히 &quot;수요 페이징&quot;이라고 불리는 또 다른 개념과 교차합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;요구 페이징&quot;이 의미하는 것은 사용자 프로그램이 OS에 메모리 덩어리를 요청할 때(예: 호출)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mmap&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;), 메모리는 프로세스의 가상 주소 공간에 할당되지만 해당 메모리를 지원하는 물리적 RAM은 아직 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 수요 페이징 프로세스의 개요입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&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;mmap&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;500MB의 RAM합니다를 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;커널은 요청된 500MB의 RAM에 대해 프로세스의 주소 공간에 있는 주소 영역을 매핑합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;가상 주소를 지원하기 위해 물리적 RAM을 &quot;소수&quot;(OS 종속) 페이지(각각 4096바이트)에 매핑합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;69&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;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결국 사용자 프로그램은 유효하지만 이를 지원하는 물리적 RAM이 없는 주소에 액세스합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이로 인해 CPU에 페이지 장애가 발생합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;커널은 프로세스가 유효한 주소에 액세스하지만 물리적 RAM이 지원되지 않는 주소에 액세스하는 것을 보고 페이지 오류에 응답합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 커널은 해당 영역에 할당할 RAM을 찾습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 다른 프로세스의 메모리를 디스크에 기록해야 하는 경우(&quot;스왑 아웃&quot;) 이 작업이 느려질 수 있습니다.&lt;/font&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;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;커널은 40MB의 요청을 이행하기 위해 배포할 수 있는 메모리의 0'd 페이지가 부족하여 성능 출력에 따라 계속해서 메모리를 0으로 만들고 있습니다.&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;아직 매핑되지 않은 메모리에 액세스할 때 페이지 장애가 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;10mb가 아닌 40mb에 액세스하기 때문에 매핑해야 하는 메모리 페이지가 많아지므로 페이지 오류가 더 많이 발생합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;57&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또 다른 대답이 지적했듯이,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;memset&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;58&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;O(n)은 메모리를 더 많이 쓸수록 더 오래 걸린다는 뜻입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;79&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요즘은 40mb가 RAM이 많지 않기 때문에 가능성은 낮지만, 충분한 RAM이 있는지 확인하기 위해 시스템의 여유 메모리 양을 확인합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;59&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;애플리케이션이 성능에 극도로 민감한 경우 대신 전화를 걸 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mmap&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;60&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;및:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&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;MAP_POPULATE&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;플래그를 지정하면 모든 페이지 오류가 발생하고 모든 물리적 메모리를 에 매핑할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font 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;63&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;을 통과합니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MAP_UNINITIALIZED&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;64&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로세스에 배포하기 전에 메모리 페이지를 영점화하지 않도록 시도하는 플래그입니다.&lt;/font&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;AWS 리눅스 커널과 같은 대부분의 커널에는 이 옵션이 기본적으로 활성화되어 있지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 옵션을 사용하면 안 &lt;em papago-id=&quot;64-1&quot;&gt;됩니다&lt;/em&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;86&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 최적화 수준은 거의 항상 실수입니다. 대부분의 응용 프로그램은 페이지 장애 비용을 최적화하지 않는 최적화를 위한 훨씬 낮은 지연 효과를 가지고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제 애플리케이션에서는 다음을 권장합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;65&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용을 피함&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;memset&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;66&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 정말로 필요하지 않은 한, 큰 메모리 블록에.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대부분의 경우 동일한 프로세스에 의해 재사용되기 전에 메모리를 영점화할 필요가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;89&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;67&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;으로.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MAP_POPULATE&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;68&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;접근 시 페이지 장애의 비용이 성능에 정말로 해로울 경우 위의 플래그(unlikely).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&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&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;69&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;확실하지는 않지만, 사용자 모드에서 커널로 컨텍스트를 전환하는 비용에 베팅할 용의가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 그리고 다시 말해서, 다른 모든 것을 지배하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;memset&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 상당한 시간이 걸립니다. O(n)이 될 것이라는 것을 기억하세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;95&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;갱신하다&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;96&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 무료가 실제로 OS의 메모리를 무료로 제공하는 것이 아니라, 단지 그 과정 내에서 무료 목록에 넣었다고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 malloc은 다음 반복에서 정확히 같은 메모리 블록을 얻습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 눈에 띄는 차이가 없는 이유입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;71&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 원칙적으로 맞는 말입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;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&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;72&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구현은 단일 링크 리스트에 메모리를 할당합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;free&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;73&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 단순히 할당이 더 이상 사용되지 않는다는 플래그를 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;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&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;74&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;충분히 큰 자유 블록을 찾을 수 있을 때 처음으로 재할당합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;101&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 여러 가지 슬라이서 구현이 있습니다. 이&lt;a href=&quot;https://en.wikipedia.org/wiki/C_dynamic_memory_allocation&quot; rel=&quot;nofollow&quot; papago-id=&quot;101-1&quot;&gt; 위키피디아 기사&lt;/a&gt;를 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;102&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/39947921/why-is-memory-allocation-for-processes-slow-and-can-it-be-faster&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/735</guid>
      <comments>https://stoneblock.tistory.com/735#entry735comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:37:06 +0900</pubDate>
    </item>
    <item>
      <title>jQuery scroll() 사용자가 스크롤을 중지할 때 탐지</title>
      <link>https://stoneblock.tistory.com/734</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery scroll() 사용자가 스크롤을 중지할 때 탐지&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;$(window).scroll(function()
{
    $('.slides_layover').removeClass('showing_layover');
    $('#slides_effect').show();
});
&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;/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;pre&gt;&lt;code&gt;$(window).scroll(function() {
    clearTimeout($.data(this, 'scrollTimer'));
    $.data(this, 'scrollTimer', setTimeout(function() {
        // do something
        console.log(&quot;Haven't scrolled in 250ms!&quot;);
    }, 250));
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;갱신하다&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery의 기본값을 향상시키기 위해 &lt;em papago-id=&quot;5-1&quot;&gt;확장자&lt;/em&gt;를 작성했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;on&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;-  -  - 핸들러&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 조련사&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하나 이상의 이벤트에 대한 이벤트 핸들러 기능을 선택한 요소에 연결하고 이벤트가 지정된 간격 동안 트리거되지 않은 경우 핸들러 기능을 호출합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;업데이트를 위해서는 github-repo를 확인하는 것이 중요합니다!&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/yckart/jquery.unevent.js&quot; rel=&quot;noreferrer&quot; papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/yckart/jquery.unevent.js&lt;/font&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;;(function ($) {
    var on = $.fn.on, timer;
    $.fn.on = function () {
        var args = Array.apply(null, arguments);
        var last = args[args.length - 1];

        if (isNaN(last) || (last === 1 &amp;amp;&amp;amp; args.pop())) return on.apply(this, args);

        var delay = args.pop();
        var fn = args.pop();

        args.push(function () {
            var self = this, params = arguments;
            clearTimeout(timer);
            timer = setTimeout(function () {
                fn.apply(self, params);
            }, delay);
        });

        return on.apply(this, args);
    };
}(this.jQuery || this.Zepto));
&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;on&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;bind&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;이벤트 처리기),  ( Handler)로 변수를 할 수 .&lt;/font&gt;&lt;/font&gt;&lt;font 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;$(window).on('scroll', function(e) {
    console.log(e.type + '-event was 250ms not triggered');
}, 250);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;http://yckart.github.com/jquery.unevent.js/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://yckart.github.com/jquery.unevent.js/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(이 데모는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;resize&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;scroll&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 근데 누가 신경써요?!&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;h1 papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery 스로틀/디바운스 사용&lt;/font&gt;&lt;/h1&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;http://benalman.com/projects/jquery-throttle-debounce-plugin/&quot; papago-id=&quot;17-0&quot;&gt;jQuery debounce&lt;/a&gt;는 이런 문제에 좋은 것입니다. jsFidlle. &lt;a href=&quot;http://jsfiddle.net/hYsRh/4/&quot; papago-id=&quot;17-2&quot;&gt;jsFidle&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(window).scroll($.debounce( 250, true, function(){
    $('#scrollMsg').html('SCROLLING!');
}));
$(window).scroll($.debounce( 250, function(){
    $('#scrollMsg').html('DONE!');
}));
&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;두 번째 매개 변수는 &quot;at_begin&quot; 플래그입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서 저는 &quot;스크롤 시작&quot;과 &quot;스크롤 완료&quot;에서 코드를 실행하는 방법을 보여주었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h1 papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Lodash 사용하기&lt;/font&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;배리 P가 제시한 것처럼, &lt;a href=&quot;http://jsfiddle.net/barrypeterson/zzghqk62/&quot; papago-id=&quot;20-1&quot;&gt;jsFiddle&lt;/a&gt;, &lt;a href=&quot;http://underscorejs.org/&quot; papago-id=&quot;20-3&quot;&gt;언더스코어&lt;/a&gt; 또는 &lt;a href=&quot;https://lodash.com/&quot; papago-id=&quot;20-5&quot;&gt;로다쉬&lt;/a&gt; 또한 각각 약간 다른 아피스를 가진 디바운스를 가지고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(window).scroll(_.debounce(function(){
    $('#scrollMsg').html('SCROLLING!');
}, 150, { 'leading': true, 'trailing': false }));

$(window).scroll(_.debounce(function(){
    $('#scrollMsg').html('STOPPED!');
}, 150));
&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;롭 W는 제가 여기 스택에서 원래의 것과 근본적으로 비슷한 게시물을 확인할 것을 제안했습니다.&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://james.padolsey.com/javascript/special-scroll-events-for-jquery/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://james.padolsey.com/javascript/special-scroll-events-for-jquery/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 실제로 제가 필요로 하는 것을 위해 약간의 수정을 거친 후에 제 문제를 아주 멋지게 해결하는 데 도움이 되었지만, 전반적으로 많은 어려움을 해결하는 데 도움이 되었고, 혼자서 그것을 이해하는 데 약 4시간을 절약했습니다.&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;(function(){

    var special = jQuery.event.special,
        uid1 = 'D' + (+new Date()),
        uid2 = 'D' + (+new Date() + 1);

    special.scrollstart = {
        setup: function() {

            var timer,
                handler =  function(evt) {

                    var _self = this,
                        _args = arguments;

                    if (timer) {
                        clearTimeout(timer);
                    } else {
                        evt.type = 'scrollstart';
                        jQuery.event.handle.apply(_self, _args);
                    }

                    timer = setTimeout( function(){
                        timer = null;
                    }, special.scrollstop.latency);

                };

            jQuery(this).bind('scroll', handler).data(uid1, handler);

        },
        teardown: function(){
            jQuery(this).unbind( 'scroll', jQuery(this).data(uid1) );
        }
    };

    special.scrollstop = {
        latency: 300,
        setup: function() {

            var timer,
                    handler = function(evt) {

                    var _self = this,
                        _args = arguments;

                    if (timer) {
                        clearTimeout(timer);
                    }

                    timer = setTimeout( function(){

                        timer = null;
                        evt.type = 'scrollstop';
                        jQuery.event.handle.apply(_self, _args);

                    }, special.scrollstop.latency);

                };

            jQuery(this).bind('scroll', handler).data(uid2, handler);

        },
        teardown: function() {
            jQuery(this).unbind( 'scroll', jQuery(this).data(uid2) );
        }
    };

})();
&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;사용자가 스크롤을 시작하자마자 마우스를 놓는 소리(마우스업)를 듣는 것이 더 나은 해결책이라고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(window).scroll(function(){
    $('#scrollMsg').html('SCROLLING!');
    var stopListener = $(window).mouseup(function(){ // listen to mouse up
        $('#scrollMsg').html('STOPPED SCROLLING!');
        stopListner(); // Stop listening to mouse up after heard for the first time 
    });
});
&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;a href=&quot;http://jsfiddle.net/TheoI/gFJwG/1/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;26-1&quot;&gt; JSFiddle&lt;/a&gt;에서 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스크롤 시작 확인 기능이 있는 ES6 스타일.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function onScrollHandler(params: {
  onStart: () =&amp;gt; void,
  onStop: () =&amp;gt; void,
  timeout: number
}) {
  const {onStart, onStop, timeout = 200} = params
  let timer = null

  return (event) =&amp;gt; {
    if (timer) {
      clearTimeout(timer)
    } else {
      onStart &amp;amp;&amp;amp; onStart(event)
    }
    timer = setTimeout(() =&amp;gt; {
      timer = null
      onStop &amp;amp;&amp;amp; onStop(event)
    }, timeout)
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;용도:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;yourScrollableElement.addEventListener('scroll', onScrollHandler({
  onStart: (event) =&amp;gt; {
    console.log('Scrolling has started')
  },
  onStop: (event) =&amp;gt; {
    console.log('Scrolling has stopped')
  },
  timeout: 123 // Remove to use default value
}))
&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;500ms마다 실행되는 간격을 다음의 행에 따라 설정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var curOffset, oldOffset;
oldOffset = $(window).scrollTop();
var $el = $('.slides_layover'); // cache jquery ref
setInterval(function() {
  curOffset = $(window).scrollTop();
  if(curOffset != oldOffset) {
    // they're scrolling, remove your class here if it exists
    if($el.hasClass('showing_layover')) $el.removeClass('showing_layover');
  } else {
    // they've stopped, add the class if it doesn't exist
    if(!$el.hasClass('showing_layover')) $el.addClass('showing_layover');
  }
  oldOffset = curOffset;
}, 500);
&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;function scrolled() {
    //do by scroll start
    $(this).off('scroll')[0].setTimeout(function(){
        //do by scroll end
        $(this).on('scroll',scrolled);
    }, 500)
}
$(window).on('scroll',scrolled);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시작 및 종료 능력이 있는 매우 작은 버전&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;글로벌 타이머를 사용하여 1밀리초 후(또는 변경) 스크롤 정지를 감지합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var scrollTimer;

$(window).on(&quot;scroll&quot;,function(){
    clearTimeout(scrollTimer);
    //Do  what you want whilst scrolling
    scrollTimer=setTimeout(function(){afterScroll()},1);
})

function afterScroll(){
    //I catched scroll stop.
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;네, 이건 제가 예전에 쓰던 물건입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 당신은 마지막에 대한 언급을 보류하고 있는 것처럼 보입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;scrollTop()&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;scrollTop()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;같은 경우 스크롤이 완료됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(window).scroll((e) -&amp;gt;
  clearTimeout(scrollTimer)
  $('header').addClass('hidden')

  scrollTimer = setTimeout((() -&amp;gt;
    if $(this).scrollTop() is currentScrollTop
      $('header').removeClass('hidden') 
  ), animationDuration)

  currentScrollTop = $(this).scrollTop()
)
&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;a href=&quot;http://www.w3schools.com/jquerymobile/event_scrollstop.asp&quot; papago-id=&quot;36-1&quot; rel=&quot;nofollow&quot;&gt;jquery mobile&lt;/a&gt; scroll &lt;a href=&quot;http://www.w3schools.com/jquerymobile/event_scrollstop.asp&quot; papago-id=&quot;36-1&quot; rel=&quot;nofollow&quot;&gt;stop 이벤트&lt;/a&gt; 확인 부탁드립니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).on(&quot;scrollstop&quot;,function(){
  alert(&quot;Stopped scrolling!&quot;);
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여전히 이 문제가 필요한 사람들을 위한 해결책이 여기에 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;  $(function(){
      var t;
      document.addEventListener('scroll',function(e){
          clearTimeout(t);
          checkScroll();
      });
      
      function checkScroll(){
          t = setTimeout(function(){
             alert('Done Scrolling');
          },500); /* You can increase or reduse timer */
      }
  });&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;var Timer;
$('.Scroll_Table_Div').on(&quot;scroll&quot;,function() 
{
    // do somethings

    clearTimeout(Timer);
    Timer = setTimeout(function()
    {
        console.log('scrolling is stop');
    },50);
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 이 문제를 해결하는 방법입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&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 scrollStop = function (callback) {
        if (!callback || typeof callback !== 'function') return;
        var isScrolling;
        window.addEventListener('scroll', function (event) {
            window.clearTimeout(isScrolling);
            isScrolling = setTimeout(function() {
                callback();
            }, 66);
        }, false);
    };
    scrollStop(function () {
        console.log('Scrolling has stopped.');
    });&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
    &amp;lt;title&amp;gt;Title&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;.&amp;lt;br&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&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;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/9144560/jquery-scroll-detect-when-user-stops-scrolling&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/734</guid>
      <comments>https://stoneblock.tistory.com/734#entry734comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:36:56 +0900</pubDate>
    </item>
    <item>
      <title>디렉터리에 있는 모든 파일 목록?</title>
      <link>https://stoneblock.tistory.com/733</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;pathlib&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;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기, 나는 다음과 같은 것이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/jJMwB.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/jJMwB.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&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;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;code&gt;c:\desktop\test\A\A.txt&lt;/code&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;code&gt;c:\desktop\test\B\B_1\B.txt&lt;/code&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;code&gt;c:\desktop\test\123.txt&lt;/code&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 경로를 포함하는 단일 목록을 가질 것으로 기대했지만 코드는 중첩된 목록을 반환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 내 코드가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from pathlib import Path

def searching_all_files(directory: Path):   
    file_list = [] # A list for storing files existing in directories

    for x in directory.iterdir():
        if x.is_file():

           file_list.append(x)
        else:

           file_list.append(searching_all_files(directory/x))

    return file_list


p = Path('C:\\Users\\akrio\\Desktop\\Test')

print(searching_all_files(p))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누가 나를 바로잡아 줬으면 좋겠어요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 파일 및 디렉토리를 나열합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 &lt;a href=&quot;https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions&quot; rel=&quot;noreferrer&quot; papago-id=&quot;8-3&quot;&gt;List Comprehensions&lt;/a&gt;에서 필터링합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;p = Path(r'C:\Users\akrio\Desktop\Test').glob('**/*')
files = [x for x in p if x.is_file()]
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&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;pathlib&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;/h2&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://docs.python.org/3/library/pathlib.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;11-0&quot;&gt;pathlib&lt;/a&gt;, 표준 라이브러리의 일부입니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://realpython.com/python-pathlib/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python 3의 pathlib 모듈:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 시스템 길들이기&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;pathlib의 경우 아래 명령과 같이 간단합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;path = Path('C:\\Users\\akrio\\Desktop\\Test')    
list(path.iterdir())
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;from pathlib import Path
from pprint import pprint

def searching_all_files(directory):
    dirpath = Path(directory)
    assert dirpath.is_dir()
    file_list = []
    for x in dirpath.iterdir():
        if x.is_file():
            file_list.append(x)
        elif x.is_dir():
            file_list.extend(searching_all_files(x))
    return file_list

pprint(searching_all_files('.'))
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 개체만이 다음과 같은 기능을 가진다고 가정할 수 있는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이름(즉, .txt, .png 등)으로 전역 또는 재귀 전역 검색을 수행할 수 있습니다...&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;from pathlib import Path

# Search the directory
list(Path('testDir').glob('*.*'))

# Search directories and subdirectories, recursively
list(Path('testDir').rglob('*.*'))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 항상 그렇지는 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;때때로 숨겨진 디렉토리가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.ipynb_checkpoints&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;확장명이 없는 파일도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 목록 이해나 필터를 사용하여 파일인 경로 개체를 정렬합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# Search Single Directory
list(filter(lambda x: x.is_file(), Path('testDir').iterdir()))

# Search Directories Recursively
list(filter(lambda x: x.is_file(), Path('testDir').rglob('*')))
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code&gt;# Search Single Directory
[x for x in Path('testDir').iterdir() if x.is_file()]

# Search Directories Recursively
[x for x in Path('testDir').rglob('*') if x.is_file()]
&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;a href=&quot;https://stackoverflow.com/a/40216619/6045800&quot; papago-id=&quot;18-1&quot;&gt;@prasastoadi's&lt;/a&gt;의 것과 유사하고 기능 중심적인 솔루션은 Python의 내장 기능을 사용하여 달성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from pathlib import Path

my_path = Path(r'C:\Users\akrio\Desktop\Test')
list(filter(Path.is_file, my_path.glob('**/*')))
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일의 접미사가 같다면, 예를 들어 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.txt&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 사용가능&lt;/font&gt;&lt;/font&gt;&lt;code&gt;rglob&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;paths = list(Path(INPUT_PATH).rglob('*.txt'))
&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;a href=&quot;https://docs.python.org/3/library/pathlib.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;11-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;name&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;[k.name for k in Path(INPUT_PATH).rglob('*.txt')]
&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;INPUT_PATH&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;Path&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;pathlib&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;h2 papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;디렉토리 경로 정의:&lt;/font&gt;&lt;/h2&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;from pathlib import Path
data_path = Path.home() / 'Desktop/My-Folder/'
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 경로(파일 및 디렉터리) 가져오기:&lt;/font&gt;&lt;/h2&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;paths = sorted(data_path.iterdir())
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 경로만 가져옵니다.&lt;/font&gt;&lt;/h2&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;files = sorted(f for f in Path(data_path).iterdir() if f.is_file())
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정 패턴(예: .png 확장명 사용)을 가진 경로 가져오기:&lt;/font&gt;&lt;/h2&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;png_files = sorted(data_path.glob('*.png'))
&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;pathlib2를 사용하는 것이 훨씬 쉽습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from pathlib2 import Path

path = Path(&quot;/test/test/&quot;)
for x in path.iterdir():
    print (x)
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;def searching_all_files(directory: Path):   
    file_list = [] # A list for storing files existing in directories

    for x in directory.iterdir():
        if x.is_file():
            file_list.append(x)#here should be appended
        else:
            file_list.extend(searching_all_files(directory/x))# need to be extended

    return file_list
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;import pathlib

def get_all_files(dir_path_to_search):
    filename_list = []

    file_iterator = dir_path_to_search.iterdir()

    for entry in file_iterator:
            if entry.is_file():
                #print(entry.name)
                filename_list.append(entry.name)

    return filename_list
&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;dir_path_to_search= pathlib.Path(&quot;C:\\Users\\akrio\\Desktop\\Test&quot;)
print(get_all_files(dir_path_to_search))
&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;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;for file in (_ for _ in directory.iterdir() if _.is_file()):
    ...
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;folder: Path = Path('/path/to/the/folder/')

files: list = [file.name for file in folder.iterdir()]
&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;os.listdir()를 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일과 디렉토리 등 디렉토리에 있는 모든 것을 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일만 원하는 경우 os.path를 사용하여 필터링할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from os import listdir
from os.path import isfile, join
onlyfiles = [files for files in listdir(mypath) if isfile(join(mypath, files))]
&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;또는 os.walk ()를 사용하면 방문하는 각 디렉토리에 대해 두 개의 목록이 생성됩니다. 파일과 디렉토리로 분할됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;최상위 디렉터리만 원한다면 처음에 생성될 때 바로 중단할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from os import walk
files = []
for (dirpath, dirnames, filenames) in walk(mypath):
    files.extend(filenames)
    break
&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/39909655/listing-of-all-files-in-directory&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>python</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/733</guid>
      <comments>https://stoneblock.tistory.com/733#entry733comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:36:45 +0900</pubDate>
    </item>
    <item>
      <title>mysql 열의 '적절한 경우' 형식을 수행하는 방법은?</title>
      <link>https://stoneblock.tistory.com/732</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;mysql에서 적절한 경우에 열을 포맷하는 것이 가능합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Proper(&quot;ABSALOM&quot;) = &quot;Absalom&quot;&lt;/code&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;제가 많이 찾아봤는데 MySQL에는 이런 기능이 내장되어 있지 않은 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;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;CONCAT와 SUBSTRING을 결합할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CONCAT(UCASE(SUBSTRING(`fieldName`, 1, 1)), LOWER(SUBSTRING(`fieldName`, 2)))
&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;MySQL이 자체적으로 부르는 세계에서 가장 인기 있는 오픈 소스 데이터베이스가 항목 제목(모든 단어의 첫 글자가 대문자인 경우)을 만드는 기능을 가지고 있을 것이라고 생각할 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;안타깝게도 그렇지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 내가 찾은 최고의 해결책입니다. 단지 효과를 발휘할 수 있는 저장 프로시저/기능을 만들 뿐입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql&amp;gt; 
DROP FUNCTION IF EXISTS proper;
SET GLOBAL  log_bin_trust_function_creators=TRUE;
DELIMITER |
CREATE FUNCTION proper( str VARCHAR(128) )
RETURNS VARCHAR(128)
BEGIN
DECLARE c CHAR(1);
DECLARE s VARCHAR(128);
DECLARE i INT DEFAULT 1;
DECLARE bool INT DEFAULT 1;
DECLARE punct CHAR(17) DEFAULT ' ()[]{},.-_!@;:?/';
SET s = LCASE( str );
WHILE i &amp;lt;= LENGTH( str ) DO   
    BEGIN
SET c = SUBSTRING( s, i, 1 );
IF LOCATE( c, punct ) &amp;gt; 0 THEN
SET bool = 1;
ELSEIF bool=1 THEN
BEGIN
IF c &amp;gt;= 'a' AND c &amp;lt;= 'z' THEN
BEGIN
SET s = CONCAT(LEFT(s,i-1),UCASE(c),SUBSTRING(s,i+1));
SET bool = 0;
END;
ELSEIF c &amp;gt;= '0' AND c &amp;lt;= '9' THEN
SET bool = 0;
END IF;
END;
END IF;
SET i = i+1;
END;
END WHILE;
RETURN s;
END;
|
DELIMITER ;
&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;update table set col = proper(col)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select proper( col ) as properCOl 
from table 
&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;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;@Pascal의 진정한 의미는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DELIMITER |

CREATE or replace FUNCTION func_proper( str VARCHAR(255) )
RETURNS VARCHAR(255)
BEGIN
  DECLARE chr VARCHAR(1);
  DECLARE lStr VARCHAR(255);
  DECLARE oStr VARCHAR(255) DEFAULT '';
  DECLARE i INT DEFAULT 1;
  DECLARE bool INT DEFAULT 1;
  DECLARE punct CHAR(17) DEFAULT ' ()[]{},.-_!@;:?/';

  WHILE i &amp;lt;= LENGTH( str ) DO
    BEGIN
      SET chr = SUBSTRING( str, i, 1 );
      IF LOCATE( chr, punct ) &amp;gt; 0 THEN
        BEGIN
          SET bool = 1;
          SET oStr = concat(oStr, chr);
        END;
      ELSEIF bool=1 THEN
        BEGIN
          SET oStr = concat(oStr, UCASE(chr));
          SET bool = 0;
        END;
      ELSE
        BEGIN
          SET oStr = concat(oStr, LCASE(chr));
        END;
      END IF;
      SET i = i+1;
    END;
  END WHILE;

  RETURN oStr;
END;

|
DELIMITER ;
&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;서브스트링을 연결할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-sql prettyprint-override&quot;&gt;&lt;code&gt;select customer_name, concat(   
  upper(substring(substring_index(customer_name,' ',1),1,1)),   
  lower(substring(substring_index(customer_name,' ',1),2)) , ' ',
  upper(substring(substring_index(customer_name,' ',-1),1,1)),
  lower(substring(substring_index(customer_name,' ',-1),2)) 
) from customer;
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;-- set upper case the first char of every word in a string
DROP FUNCTION IF EXISTS PROPER;
DELIMITER $$
CREATE FUNCTION PROPER(inputStr varchar(1500)) 
RETURNS VARCHAR(1500)
DETERMINISTIC
BEGIN
    DECLARE x, y, result VARCHAR(1500);
    SET result = '';
    SET x = '';
    SET y = LOWER(TRIM(inputStr));
    WHILE CHAR_LENGTH(y) &amp;gt; 0 DO
        -- get next word
        SET x = SUBSTRING_INDEX(y, ' ', 1);
        -- set upper case the first char
        SET x = CONCAT(UPPER(SUBSTRING(x, 1, 1)), SUBSTRING(x, 2));
        -- the final s (greek language)               
        IF RIGHT(x,1) = 'σ' THEN
            SET x = CONCAT(left(x, CHAR_LENGTH(x) - 1),'ς');
        END IF;
        -- add word to result
        SET result = CONCAT(result, ' ', x);
        -- prepare y for next loop
        SET y = TRIM(SUBSTRING(y, CHAR_LENGTH(x) + 1));
    END WHILE;
    RETURN (TRIM(result));
END$$
DELIMITER;
&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/6181937/how-to-do-a-proper-case-formatting-of-a-mysql-column&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/732</guid>
      <comments>https://stoneblock.tistory.com/732#entry732comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:36:36 +0900</pubDate>
    </item>
    <item>
      <title>Spring Quartz 작업 실행이 겹치지 않도록 합니다.</title>
      <link>https://stoneblock.tistory.com/731</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Spring Quartz 작업 실행이 겹치지 않도록 합니다.&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;저는 스프링 쿼츠에서 20초마다 실행되는 자바 프로그램이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행하는 데 몇 초밖에 걸리지 않는 경우도 있지만 데이터가 커지면 20초 이상 실행될 것으로 확신합니다.&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;한 인스턴스가 실행되는 동안 Quartz가 작업을 수행/발동하지 않도록 하려면 어떻게 해야 합니까?&lt;/font&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;h2 papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;석영 1&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;Job 대신 Stateful Job을 구현하기 위해 클래스를 변경하면 Quartz가 대신 처리해 줄 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.quartz-scheduler.org/api/2.2.1/index.html&quot; papago-id=&quot;4-1&quot; rel=&quot;noreferrer&quot;&gt;Stateful&lt;/a&gt; Job &lt;a href=&quot;http://www.quartz-scheduler.org/api/2.2.1/index.html&quot; papago-id=&quot;4-1&quot; rel=&quot;noreferrer&quot;&gt;javadoc&lt;/a&gt;에서:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;stateful jobs는 동시 실행이 허용되지 않으므로 execute(xx) 메서드가 완료되기 전에 발생하는 새 트리거가 지연됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;StatefulJob은 Job을 확장하고 새로운 메서드를 추가하지 않으므로 원하는 동작을 변경하기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class YourJob implements org.quartz.Job {
    void execute(JobExecutionContext context) {/*implementation omitted*/}
}
&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;public class YourJob implements org.quartz.StatefulJob {
    void execute(JobExecutionContext context) {/*implementation omitted*/}
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;석영2&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;Quartz 버전 2.0에서는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;StatefulJob&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 주석을 대신 사용하는 것이 좋습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@DisallowConcurrentExecution
public class YourJob implements org.quartz.Job {
    void execute(JobExecutionContext context) {/*implementation omitted*/}
}
&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;20초마다 발사만 하면 되는 거라면 쿼츠는 심각한 오버킬입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;java.util.concurrent.ScheduledExecutorService&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&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;ScheduledExecutorService&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 class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/ScheduledExecutorService.html#scheduleAtFixedRate%28java.lang.Runnable,%20long,%20long,%20java.util.concurrent.TimeUnit%29&quot; papago-id=&quot;14-1&quot; rel=&quot;noreferrer&quot;&gt;&quot;고정 속도&quot;&lt;/a&gt;는 중복에 관계없이 20초마다 작업을 실행하려고 시도하는 반면, &quot;&lt;a href=&quot;http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/ScheduledExecutorService.html#scheduleWithFixedDelay%28java.lang.Runnable,%20long,%20long,%20java.util.concurrent.TimeUnit%29&quot; papago-id=&quot;14-3&quot; rel=&quot;noreferrer&quot;&gt;고정 지연&quot;&lt;/a&gt;은 첫 번째 작업이 끝날 때부터 다음 작업이 시작될 때까지 20초 간격을 두려고 시도합니다.&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;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문을 언급하는 사람이 있을 경우를 대비하여 Stateful Job은 더 이상 사용되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 주석을 대신 사용할 것을 제안합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@PersistJobDataAfterExecution
@DisallowConcurrentExecution
public class TestJob implements Job {
&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;blockquote&gt; 
 &lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주석은 이름이 설명하는 대로 동작을 유발합니다. 작업의 여러 인스턴스가 동시에 실행되지 않도록 허용됩니다(작업이 실행() 방법에 코드가 있지만 30초마다 반복되는 트리거로 예약된 경우를 고려하십시오).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 실행될 때마다 JobDataMap 내용이 스케줄러의 JobStore에 다시 유지됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 예제에서는 @PersistJobDataAfterExecution 주석만 관련이 있지만 저장된 데이터의 경합 조건을 방지하려면 @DisallowCurrentExecution 주석을 함께 사용하는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&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;bean id=&quot;batchConsumerJob&quot;class=&quot;org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean&quot;&amp;gt;
        &amp;lt;property name=&quot;targetObject&quot; ref=&quot;myScheduler&quot; /&amp;gt;
        &amp;lt;property name=&quot;targetMethod&quot; value=&quot;execute&quot; /&amp;gt;
        &amp;lt;property name=&quot;concurrent&quot; value=&quot;false&quot; /&amp;gt;
    &amp;lt;/bean&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 작업이 끝날 때까지 두 번째 작업이 차단되고 결국에는 백로그가 발생하기 때문에 동기화를 원하실지 모르겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;작업을 대기열에 넣을 수 있지만 설명을 들어보면 대기열이 무한히 증가할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://java.sun.com/javase/6/docs/api/java/util/concurrent/locks/ReadWriteLock.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;20-1&quot;&gt;ReadWriteLocks&lt;/a&gt;를 조사하여 작업이 실행되는 동안 잠금을 설정하도록 하겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;향후 작업에서는 이 잠금을 검사하고 이전 작업이 여전히 실행 중인 경우 즉시 종료할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 가장 신뢰할 수 있는 방법이라는 것을 경험으로 알게 되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;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;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;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시간이 20초를 초과하는 경우에도 현재 작업을 완료하고 다음 작업을 대기열에서 가져와야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 적당한 양으로 시간을 늘릴 수도 있습니다.&lt;/font&gt;&lt;/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/1636556/ensure-that-spring-quartz-job-execution-doesnt-overlap&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>spring</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/731</guid>
      <comments>https://stoneblock.tistory.com/731#entry731comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:36:28 +0900</pubDate>
    </item>
    <item>
      <title>JQuery는 Rails 4 응용프로그램에서 페이지 새로 고침 시에만 로드됩니다.</title>
      <link>https://stoneblock.tistory.com/730</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JQuery는 Rails 4 응용프로그램에서 페이지 새로 고침 시에만 로드됩니다.&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;저는 Rails 4 어플리케이션을 만들었고 이미지 팝업 효과를 위해 팬시박스 라이브러리를 추가했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;페이지가 새로 고쳐질 때만 잘 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 페이지를 새로 고치지 않으면 jquery가 전혀 작동하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;작은 jquery 방법으로도 테스트를 해보았지만 모두 페이지 리프레시 후에만 작동합니다.&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;내 assets/application.js 파일:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//= require jquery
//= require jquery_ujs
//= require fancybox
//= require twitter/bootstrap
//= require turbolinks
//= require_tree .


$(document).ready(function() {
  $(&quot;.fancybox&quot;).fancybox();
    $(&quot;#hand&quot;).click(function(){
     if($(&quot;#check6&quot;).is(':visible'))
     {
      $(&quot;#check6&quot;).hide();
      }
     else
     {
      $(&quot;#check6&quot;).show();
      }
    });
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;네, 저는 당신의 문제를 충분히 이해한다고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;터보링크를 사용하면 브라우저가 페이지를 다시 로드할 수 없기 때문에 문서 준비 이벤트에 바인딩하는 대부분의 플러그인과 라이브러리가 작동을 중지합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 문제를 해결하기 위한 방법이 있지만 가장 쉽게 해결할 수 있는 방법은 &lt;a href=&quot;https://github.com/kossnocorp/jquery.turbolinks&quot; papago-id=&quot;3-1&quot;&gt;jquery.turbolinks&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;사용 방법은 이것을 당신의 것에 추가하기만 하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Gemfile&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;gem 'jquery-turbolinks'
&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;assets/javascripts/application.js&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;//= require jquery.turbolinks
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 가도 좋을 거에요&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;9-0&quot;&gt;참고&lt;/strong&gt;: 터보링크를 사용할 &lt;em papago-id=&quot;9-2&quot;&gt;필요&lt;/em&gt;는 없지만 유용하고 전체 페이지를 새로 고치지 않아도 되므로 요청이 더 빨라집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Turbolinks는 클릭한 링크의 내용을 AJAX를 통해 가져와 동일한 페이지에 렌더링하므로 자산(JS 및 CSS)을 다시 로드하는 오버헤드를 제거할 수 있습니다.&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;페이지에 CSS와 JS가 많을수록 터보링크를 사용하면 더 큰 향상을 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이안은 좋은 답변을 했고, 이번 답변은 거기에 추가된 것입니다. (그래서 글을 쓸 때 아무에게도 실제로 코멘트를 달지 못하게 할 것입니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/rails/turbolinks/ #&lt;a href=&quot;https://github.com/rails/turbolinks/#jqueryturbolinks&quot; papago-id=&quot;11-1&quot;&gt;jqueryturbolinks&lt;/a&gt;에서:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Add the gem [gem 'jquery-turbolinks'] to your project, then add the following line to your JavaScript manifest file, after jquery.js but before turbolinks.js:

//= require jquery.turbolinks
&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;require jquery.turbolinks&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&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;a href=&quot;https://github.com/kossnocorp/jquery.turbolinks&quot; papago-id=&quot;14-1&quot;&gt;jquery.turbolinks&lt;/a&gt; Read &lt;a href=&quot;https://github.com/kossnocorp/jquery.turbolinks&quot; papago-id=&quot;14-1&quot;&gt;me&lt;/a&gt;에 설명되어 있듯이, 순서는 매우 구체적이어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//= require jquery
//= require jquery.turbolinks
//= require jquery_ujs
//
// ... your other scripts here ...
//
//= require turbolinks
&lt;/code&gt;&lt;/pre&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://coderwall.com/p/ypzfdw/faster-page-loads-with-turbolinks&quot; papago-id=&quot;15-1&quot;&gt;여기&lt;/a&gt;에 기술된 &lt;a href=&quot;https://coderwall.com/p/ypzfdw/faster-page-loads-with-turbolinks&quot; papago-id=&quot;15-1&quot;&gt;것&lt;/a&gt;처럼 속도 최적화를 위해 애플리케이션 자바스크립트 링크를 바닥글에 넣으셨다면, 제가 그랬던 것처럼 당신은 그것을 안으로 옮겨야 할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;head&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&gt;&lt;code&gt;&amp;lt;body&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;꼬리표를 매다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;터보링크가 여기서 문제입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹페이지의 성능을 향상시키기 위해 레일에 터보링크가 추가됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 솔루션이 작동 중입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;&amp;lt;%= link_to &quot;Create New Form&quot;, sampleform_path, 'data-no-turbolink' =&amp;gt; true %&amp;gt;&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;a href=&quot;https://stackoverflow.com/questions/16724524/datepicker-does-not-display-the-calendar&quot; papago-id=&quot;19-1&quot;&gt;이&lt;/a&gt;를 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 코드 줄을 제거합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//= require turbolinks
&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;//= require jquery.turbolinks
&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/17881384/jquery-gets-loaded-only-on-page-refresh-in-rails-4-application&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/730</guid>
      <comments>https://stoneblock.tistory.com/730#entry730comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:36:21 +0900</pubDate>
    </item>
    <item>
      <title>MariaDB UPDATE가 큰따옴표를 빈 문자열로 바꿉니다 오류 1064</title>
      <link>https://stoneblock.tistory.com/729</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MariaDB UPDATE가 큰따옴표를 빈 문자열로 바꿉니다 오류 1064&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;저장된 문자열에서 큰따옴표를 제거하려고 합니다. DBever를 사용하지만 명령줄도 시도했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;UPDATE wp_postmeta 
SET meta_value REPLACE(meta_value, '&quot;', '')
where meta_key = 'cstnfo_spot_1_kvm_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;그리고 SQL-Error는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SQL-Fehler [1064] [42000]: (conn=279) You have an error [...] near 'REPLACE(`meta_value`, '&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;이중따옴표 &quot;를 찾아서 문자열에서 제거하고 싶어서 REFREENT(meta_value, '', '', '')와 (meta_value, '\&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;bschellekens가 댓글에서 지적했듯이, 나는 단지 '='을 놓쳤기 때문에, 다음과 같을 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;UPDATE wp_postmeta 
SET meta_value = REPLACE(meta_value, '&quot;', '')
where meta_key = 'cstnfo_spot_1_kvm_ID'
;
&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;URL : https://stackoverflow.com/questions/69482608/mariadb-update-replacing-double-quotes-with-empty-string-throws-error-1064&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/729</guid>
      <comments>https://stoneblock.tistory.com/729#entry729comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:36:14 +0900</pubDate>
    </item>
    <item>
      <title>WordPress에서 관리 메뉴 구분 추가</title>
      <link>https://stoneblock.tistory.com/728</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;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;font class=&quot;papago-parent&quot;&gt;이 기능은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-php prettyprint-override&quot;&gt;&lt;code&gt;function add_admin_menu_separator($position) {
  global $menu;
  $index = 0;
  foreach($menu as $offset =&amp;gt; $section) {
    if (substr($section[2],0,9)=='separator')
    $index++;
    if ($offset&amp;gt;=$position) {
      $menu[$position] = array('','read',&quot;separator{$index}&quot;,'','wp-menu-separator');
      break;
    }
  }
  ksort( $menu );
}
&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 class=&quot;lang-php prettyprint-override&quot;&gt;&lt;code&gt;add_action('admin_init','admin_menu_separator');
    
function admin_menu_separator() {
  add_admin_menu_separator(220);
}
&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;&amp;gt; Warning: Invalid argument supplied for foreach() in /home/user/public_html/wp-creation.com/wp-content/themes/liquid_theme_0.4_licensed/functions.php on line 174
    
&amp;gt; Warning: ksort() expects parameter 1 to be array, null given in /home/user/public_html/wp-creation.com/wp-content/themes/liquid_theme_0.4_licensed/functions.php on line 182
&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;admin_menu&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;pre&gt;&lt;code&gt;add_action('admin_menu','admin_menu_separator');
&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;220&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;offset&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;99&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&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://gist.github.com/mikeschinkel/792b7aa5b695d1092520&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;6-1&quot;&gt;아주 미세한 클래스&lt;/a&gt;를 확인합니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&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://wordpress.stackexchange.com/questions/2666/add-a-separator-to-the-admin-menu&quot; papago-id=&quot;7-1&quot;&gt;관리 메뉴에 구분자를 추가하시겠습니까?&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 함수에 간단히 추가할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;php&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;add_action('admin_menu', function () {   
  global $menu;
  $menu[49] = ['', 'read', '', '', 'wp-menu-separator'];
});
&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;49가 구분자 위치일 때 구분자 위치가 같은 위치일 경우 구분자 위치가 메뉴 요소를 대체할 수 있음을 기억해야 합니다.&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/19415465/adding-admin-menu-separators-in-wordpress&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/728</guid>
      <comments>https://stoneblock.tistory.com/728#entry728comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:36:08 +0900</pubDate>
    </item>
    <item>
      <title>핵심 데이터: 경고:명명된 클래스를 로드할 수 없습니다.</title>
      <link>https://stoneblock.tistory.com/727</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;핵심 데이터: 경고:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;명명된 클래스를 로드할 수 없습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기존 Objective-C TV Show 앱을 Xcode 6.1을 사용하는 새로운 Swift 버전에 복제하고 있으며 CoreData에 문제가 있습니다.&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;4개의 엔티티 모델을 만들고 NSManagedObject 서브클래스(Swift)를 만들었고 모든 파일에 적절한 앱 대상이 설정되어 있습니다('Compile Sources'의 경우).&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;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;font class=&quot;papago-parent&quot;&gt;엔티티 'Shows'에 대해 'Shows'라는 이름의 클래스를 로드할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스를 찾을 수 없으며 대신 기본 NSManagedObject를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;5&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;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;핵심 데이터에 저장할 때 부모 자식 컨텍스트 방식을 사용하여 백그라운드 스레드를 허용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 사용하여 ManagedObjectContext를 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;lazy var managedObjectContext: NSManagedObjectContext? = {
  // Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.) This property is optional since there are legitimate error conditions that could cause the creation of the context to fail.
  let coordinator = self.persistentStoreCoordinator
  if coordinator == nil {
    return nil
  }
  var managedObjectContext = NSManagedObjectContext(concurrencyType: NSManagedObjectContextConcurrencyType.MainQueueConcurrencyType)
  managedObjectContext.persistentStoreCoordinator = coordinator
  return managedObjectContext
}()
&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;dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { () -&amp;gt; Void in
  var context = NSManagedObjectContext(concurrencyType: NSManagedObjectContextConcurrencyType.PrivateQueueConcurrencyType)
  context.parentContext = self.managedObjectContext!
  ...rest of core data saving code here...
})
&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&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;9-1&quot;&gt;저&lt;/strong&gt;는 모델 &lt;strong papago-id=&quot;9-1&quot;&gt;에디터에서 클래스가 올바르게 설정&lt;/strong&gt;되어 있는지 &lt;strong papago-id=&quot;9-1&quot;&gt;확인함&lt;/strong&gt;으로써 대부분의 경우 그것을 없앨 수 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 많은 SOF 게시물(이 질문에 대한 답변 포함)과 달리 모듈 이름을 포함하는 것이 좋습니다(예:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MyApp.Shows&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;strong papago-id=&quot;10-1&quot;&gt;않았습니다&lt;/strong&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;strong&gt;1.&lt;/strong&gt;&lt;br&gt; &lt;strong papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Xcode 7 베타 3까지 작동하는 버전&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/f3vo5.png&quot; alt=&quot;Up to XCode7 b3&quot;&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 당신의 엔터티 이름을 더 적절한 단수로 수정했음을 주목해 주십시오.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&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;1Xcode 7.1 에서 Swift 2.에서 &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&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; 7 4 (Xcode 7타 4함)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&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&gt;&lt;img src=&quot;https://i.stack.imgur.com/wY7WT.png&quot; alt=&quot;From Xcode7 beta 3&quot;&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splited&quot;&gt;&lt;strong&gt;2.&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 다음을 포함하도록 자주 권장하는 사항을 따라야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@objc(Show)
&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;&lt;strong papago-id=&quot;19-0&quot;&gt;참고&lt;/strong&gt;: Xcode 7 베타 4 이상을 사용하는 경우 이 단계는 선택 사항입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splited&quot;&gt;&lt;strong&gt;3.&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 생성된 관리 개체를 적절한 클래스로 &lt;strong papago-id=&quot;20-1&quot;&gt;캐스트해야&lt;/strong&gt; 합니다. 기본값은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NSManagedObject&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var newShow = NSEntityDescription.insertNewObjectForEntityForName(&quot;Show&quot;, 
                 inManagedObjectContext: context) as Show
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SWIFT 2 / XCODE 7 업데이트:&lt;/font&gt;&lt;/strong&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-3&quot;&gt;이&lt;/em&gt; 문제는 Apple의 Swift &lt;em papago-id=&quot;23-3&quot;&gt;2&lt;/em&gt; 및 &lt;em papago-id=&quot;23-5&quot;&gt;XCode&lt;/em&gt; 7 &lt;em papago-id=&quot;23-5&quot;&gt;베타&lt;/em&gt; 릴리스에서 &lt;strong papago-id=&quot;23-1&quot;&gt;해결&lt;/strong&gt;되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 이제 당신은 사실 필요가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@objc(myEntity)&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;먼디가 대답한 스위프트에서 &quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MyAppName.&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 앞에서&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 당신의 반 이름 앞에.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작동이 중단됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;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&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;em papago-id=&quot;26-1&quot;&gt;파일&lt;/em&gt;에 이름을 지정하고 선택합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Current Working Module&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;27-1&quot;&gt;모듈&lt;/em&gt;과 환호로써!&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/6cBVM.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/6cBVM.png&quot; alt=&quot;Selecting current working module&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 사용하시는 분들은&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@objc(myEntity)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스위프트(나와 같은)에서는 원활하게 작동하는 이 다른 솔루션을 대신 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;xcdata 모델에서 올바른 클래스 인.&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/pv4WC.png&quot; alt=&quot;Setting the class&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;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;31-1&quot;&gt;&lt;code papago-id=&quot;31-1-0&quot;&gt;Module.Class&lt;/code&gt;&lt;/em&gt; 는 Swift 및 XCode 6의 CoreData 패턴입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모델 정책 또는 기타 핵심 데이터 항목에서 사용자 &lt;em papago-id=&quot;31-3&quot;&gt;지정 정책&lt;/em&gt; 클래스를 사용할 때도 동일한 절차가 필요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;31-5&quot;&gt;참고 사항:&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;31-5&quot;&gt; 이미지에서 The Name and Class는 Car and MyAppName이어야 합니다.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;31-5&quot;&gt;자동차(또는 당신의 실체의 이름이 무엇이든).&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;31-5&quot;&gt; 여기 오타가 있습니다.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Xcode 7과 순수하게 Swift를 사용할 때, 사실은 &lt;em papago-id=&quot;32-1&quot;&gt;&lt;strong papago-id=&quot;32-1-0&quot;&gt;제거&lt;/strong&gt;&lt;/em&gt;해야 했습니다.&lt;/font&gt;&lt;/font&gt; &lt;code&gt;@objc(MyClass)&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;NSManagedObject&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;subclass ( &amp;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;Xcode 7 베타 2(그리고 I believe 1)에서 모델 구성에서 새로운 관리 개체 유형의&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;모듈로 설정됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Current Product Module&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;.File&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;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/cjXG1.png&quot; alt=&quot;Module of managed object type set to &amp;quot;Current Product Module&amp;quot; in Xcode 7&quot;&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;File&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각각이 다른 변화를 야기하기 때문에 동등한 동작입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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;img src=&quot;https://i.stack.imgur.com/WXeii.png&quot; alt=&quot;Module of managed object set to be blank in Xcode 7&quot;&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;Xcode 6.1.1에서는 기본 엔티티가 objc 클래스(NSManagedObject)의 하위 집합이므로 @objc 특성을 추가할 필요가 없습니다(&lt;a href=&quot;https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithObjective-CAPIs.html#//apple_ref/doc/uid/TP40014216-CH4-XID_25&quot; papago-id=&quot;41-1&quot;&gt;Swift Type Compatibility&lt;/a&gt; 참조).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;CoreData에서 전체 모듈.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스 이름이 필요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Module name은 Build Settings -&amp;gt; Packaging -&amp;gt; Product Module Name에 설정되어 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 &lt;strong papago-id=&quot;41-3&quot;&gt;대상 이름&lt;/strong&gt;이 될 $(PRODUCT_NAME:c99 extidentifier)로 설정됩니다.&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;xCode 7 및 Swift 2.0 버전에서는 @objc(NameOfClass)를 추가할 필요 없이 아래와 같이 &quot;Show the Data Model Inspector&quot; 탭에서 엔터티 설정을 변경하면 됩니다 -&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이름 - &quot;엔터티 이름&quot;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스 - &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;모듈 - &quot;현재 제품 모듈&quot;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/2drWu.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/2drWu.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&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;Entity 클래스 파일의 코드는 (내 코드 Entity is Family에서)와 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import UIKit
import CoreData

class Family: NSManagedObject {

   @NSManaged var member : AnyObject
}
&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;이 예제는 xCode 7.0 + swift 2.0으로 내 앱에서 잘 작동합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;교체하는 것을 잊지 마십시오.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PRODUCT_MODULE_NAME&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;/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;새 도면요소가 생성되면 Data Model Inspector(마지막 탭)로 이동하여 교체해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PRODUCT_MODULE_NAME&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 모듈 이름과 함께, 그렇지 않으면 결과적으로 a.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;class not found&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 papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(적어도 Xcode 6.3.2와 함께) Module을 사용해야 합니다.&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;let myEntity =  NSEntityDescription.entityForName(&quot;Fruit&quot;, inManagedObjectContext: managedContext)

let fruit = NSManagedObject(entity: myEntity!, insertIntoManagedObjectContext:managedContext) as! Food.Fruit
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요약:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Data Model Editor(데이터 모델 편집기)에서 엔터티를 정의할 때 모듈 이름 포함(이름:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;과일, 클래스: 식품.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;과일)&lt;/font&gt;&lt;/li&gt; 
 &lt;li 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;SWIFT), Module. class(예: Food)와 함께 주조합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;과일)&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;57&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;a href=&quot;https://i.stack.imgur.com/8EKYX.png&quot; rel=&quot;nofollow&quot; papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상위 개체가 NSManagedObject이지 NSObject가 아닙니다.&lt;/font&gt;&lt;/a&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://i.stack.imgur.com/DbMEu.png&quot; rel=&quot;nofollow&quot; papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;엔티티의 모듈이 &quot;현재 제품 모듈&quot;이 아닌 기본 모듈입니다.&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ol&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;@objc(NameOfClass)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 NSManagedObject의 파일을 클래스 선언 바로 위에 저장하기 위해 Unit Testing 중에 이 문제를 해결했습니다.&lt;/font&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;이러한 답변의 대부분은 여전히 Xcode 14에 적용되는 것으로 보입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 Swift NSManagedObject 하위 클래스는 사용자 지정 프레임워크에 포함됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 제게 도움이 된 것은&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;해당 엔티티 검사기의 해당 &lt;em papago-id=&quot;62-1&quot;&gt;모듈&lt;/em&gt; 필드(Khunsan 답변의 스크린샷 참조)에 &lt;em papago-id=&quot;62-3&quot;&gt;MyFramework&lt;/em&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;저에게 효과가 있었던 것은 (Xcode 7.4, Swift) 클래스 이름을 다음으로 바꾸는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;my actual class name&amp;gt;.&amp;lt;entity name&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Entity inspector에서 'Class' 상자를 선택합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Managed Object 하위 클래스의 이니시에이터는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    convenience init(&amp;lt;properties to init&amp;gt;) {
    let entityDescr = NSEntityDescription.entityForName(&quot;&amp;lt;entity class name&amp;gt;&quot;, inManagedObjectContext: &amp;lt;managed context&amp;gt;)
    self.init(entity: entityDescr!, insertIntoManagedObjectContext: &amp;lt;managed context&amp;gt;)}
    //init properties here
&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;Xcode 11.5의 경우: Codegen 속성이 class Definition이고 xcdata 모델에서 생성한 엔티티에 대한 제안을 받지 못하는 경우.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Xcode를 종료하고 프로젝트를 다시 시작해 보십시오.&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;67&quot; papago-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/26613971/coredata-warning-unable-to-load-class-named&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Swift</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/727</guid>
      <comments>https://stoneblock.tistory.com/727#entry727comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:36:01 +0900</pubDate>
    </item>
    <item>
      <title>오류 코드: 1055가 sql_mode=only_full_group_by와 호환되지 않음</title>
      <link>https://stoneblock.tistory.com/726</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류 코드: 1055가 sql_mode=only_full_group_by와 호환되지 않음&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;라만 SQL 야구 데이터베이스의 오프라인 버전으로 전환하는 데 문제가 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;EDX 과정에 단말기를 내장하고 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 명령은 웹 터미널에서 정상적으로 실행됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT concat(m.nameFirst,concat(&quot; &quot;,m.nameLast)) as Player,
    p.IPOuts/3 as IP,
    p.W,p.L,p.H,p.BB,p.ER,p.SV,p.SO as K,
    p.IPOuts+p.W*5+p.SV+p.SO-p.BB-p.L-p.H as PTS,
    p.yearID as Year
FROM Pitching p
Inner Join Master m
    ON p.playerID=m.playerID
WHERE p.yearID=2014 AND p.IPOuts&amp;gt;=50
GROUP BY m.playerID
ORDER BY PTS DESC;
&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;SQL 5.5.46을 실행하고 있지만 5.7.10을 실행하는 오프라인 버전을 사용하면 다음 오류 코드가 표시됩니다.&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;오류 코드: 1055.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SELECT 목록의 식 #1이 GROUP BY 절에 없으며 GROUP BY 절의 열에 기능적으로 종속되지 않는 비집계 열 'stats.m.nameFirst'를 포함합니다. 이는 sql_mode=only_full_group_by와 호환되지 않습니다.&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;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;5.7에서 sql 모드는 기본적으로 다음과 같이 설정됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; ONLY_FULL_GROUP_BY,NO_AUTO_CREATE_USER,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
&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;ONLY_FULL_GROUP_BY 절을 제거하려면 다음 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
&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;집계되지 않은 열을 사용하여 해당 GROUP BY를 만들어야 합니다.&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;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;5.7.9, for osx10.9 (x86_64)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;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;set global sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기타 사용 사례:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;반드시 사용하지 않아도 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ONLY_FULL_GROUP_BY&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;이와 같은 경우를 고려할 때, mysql 문서에 따르면 &quot;이 쿼리는 name이 t의 기본 키 또는 고유 NOT NULL 열이 아닌 경우 유효하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 함수 의존성을 추론할 수 없고 오류가 발생합니다.&quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT name, address, MAX(age) FROM t GROUP BY name;
ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP
BY clause and contains nonaggregated column 'mydb.t.address' which
is not functionally dependent on columns in GROUP BY clause; this
is incompatible with sql_mode=only_full_group_by
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신에 이것을 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ANY_VALUE('my_column_name') my_column_name&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;mysql 문서를 인용하여 &quot;이 경우 MySQL은 각 이름 그룹 내의 주소 값의 비결정성을 무시하고 쿼리를 받아들입니다.&quot;&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;ANY_VALUE()를 사용하여 주소를 참조하십시오.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT name, ANY_VALUE(address), MAX(age) FROM t GROUP BY name;
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

** your query **
&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;mysql 버전 8.0.26을 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 많은 해결책을 시도했지만 아무 효과가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Full groupBy mode change Engine_substitution을 변경했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;드디어 해봤습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql -u root -p -e &quot;SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 나에게 효과가 있었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택한 답을 그대로 하면 @sql_mode는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;',STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'.
&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;'STRICT_TRANS_TAB' 앞에 쉼표가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;LES의 끈.&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;set @@sql_mode = 
'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
&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;또한 exp를 따라 해볼 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY,','');
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트를 안 해봤는데 잘 될 것 같네요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mysql에서 변수를 설정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql&amp;gt; set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
mysql&amp;gt; set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
&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;NO_AUTO_CREATE_USER는 mysql 8에서는 작동하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 효과가 없다면 그냥 다음과 같이 하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql &amp;gt; set sql_mode = ''
&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;최근 버전에서는 *.cnf 파일 변경이 불가능하다고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 mysql.service 파일을 변경할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/lib/systemd/system/mysql.service
ExecStart=/usr/sbin/mysqld --sql-mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최근 버전에서는 잘 작동하지만 최선의 방법은 아닙니다. 다음과 같은 방법을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   SELECT name, max(address), MAX(age) FROM t GROUP BY name;
&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;(Linux)에서 mysql client.cnf 파일 찾기&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;/etc/my.cnf.d/client.cnf&lt;/font&gt;&lt;/strong&gt;&lt;/li&gt; 
&lt;/ul&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;[mysqld] 
sql_mode = &quot;&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;다음을 사용하여 MySQL 서비스를 저장하고 다시 시작합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo systemctl restart mysqld
&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;그런 다음 MySQL 서비스가 오류 없이 실행되고 있는지 확인합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo systemctl status mysqld
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 오류없이 실행되고 있다면, 그것은 당신의 오류를 고칠 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리가 이 문제를 해결할 수 있는 몇 가지 방법이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래는 이 문제를 해결하기 위한 6가지 옵션입니다.&lt;/font&gt;&lt;/strong&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 papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지역, 이름, SUM(인구) FROM City WHERE Country Code = 'AUS' 지역별 그룹 선택; 결과:&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;오류 1055(42000):&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SELECT 목록의 식 #2가 GROUP BY 절 및 c에 없습니다.&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;여기서 #2는 우리의 SELECT 목록의 두번째 표현식이 문제를 일으킨다는 것을 의미합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저희 같은 경우는 이름란입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저희 SELECT 목록에는 Name 컬럼이 포함되어 있지만 GROUP BY 조항은 포함되어 있지 않습니다.&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;해결책 1 이 문제를 해결하는 또 다른 방법은 이름 열을 GROUP BY 조항에 포함하는 것입니다.&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;지역, 이름, SUM(인구) FROM City WHERE Country Code = 'AUS' GROUP by District, Name;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;+-----------------+---------------+-----------------+ | 지역 | 이름 | SUM(인구) | +------------------------------------------------------------------+ | 뉴사우스웨일스 | 시드니 | 3276207 || 빅토리아 | 멜버른 | 2865329 || 퀸즐랜드 | 브리즈번 | 1291117 || 웨스트오스트레일리아 | 퍼스 | 1096829 || 사우스오스트레일리아 | 애들레이드 | 978100 || 수도권&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;| 캔버라 | 322723 | | 퀸즈랜드 | 골드코스트 | 311932 | | 뉴사우스웨일스 | 뉴캐슬 | 270324 | | | 뉴사우스웨일스 | 센트럴코스트 | 227657 | | 뉴사우스웨일스 | 울롱공 | 219761 | | | 태즈메이니아 | 호바트 | 126118 | | | 빅토리아 | 질롱 | 125382 | | 퀸즈랜드 | 타운즈빌 | 109914 | | | 퀸즈랜드 | 케언스 | 92273 |&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;솔루션 2 이 오류를 해결하는 또 다른 방법은 ANY_VALUE() 함수입니다.&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;District, ANY_VALUE(이름), SUM(인구) FROM City WHERE Country Code = 'AUS' GROUP by District; 결과:&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;+-----------------+-----------------+-----------------+ | 구 | ANY_VALUE(이름) | SUM(인구) | +--------------------------------------------------------------+ | 뉴사우스웨일스 | 시드니 | 3993949 | | | 빅토리아 | 멜버른 | 2990711 | | | 퀸즐랜드 | 브리즈번 | 1805236 | | | 웨스트오스트레일리아 | 퍼스 | 1096829 || 사우스오스트레일리아 | 애들레이드 | 978100 ||&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;수도 지역 | 캔버라 | 322723 | | | 태즈메이니아 | 호바트 | 126118 | +--------------------------------------------------------------------------------------------+ ANY_VALUE() 함수는 지정한 열에서 임의의 값을 선택합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 이름 열에서 임의의 값을 선택했고, 첫 번째 행에 시드니, 두 번째 행에 멜버른 등을 선택했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;앞의 예에서 볼 수 있듯이, 해당 열에는 각 구역에 대한 값 이상이 포함되어 있지만 MySQL은 단순히 하나의 값을 선택하여 표시했습니다.&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;솔루션 3 또 다른 옵션은 GROUP_CONCAT() 함수를 사용하는 것입니다.&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;구, GROUP_CONCAT(이름), SUM(인구) FROM City WHERE Country Code = 'AUS' GROUP By District;&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;솔루션 4 sql_mode에 ONLY_FULL_GROUP_BY만 포함된 경우에만 오류가 발생합니다.&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;다음과 같이 sql_mode를 확인할 수 있습니다.&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;SELECT @@sql_mode; 결과:&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;ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES,&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NO_ZERO_&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVION_BY_ZERO, NO_ENGINE_SUBITION 예상대로 ONLY_FULL_GROUP_BY가 활성화되어 오류가 발생했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 세션의 sql_mode에서 ONLY_FULL_GROUP_BY를 비활성화할 수 있습니다.&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;SET @@sql_mode = SYS.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;LIST_DROP(@@sql_mode, 'ONLY_FULL_GROUP_BY'); SELECT @@sql_mode; 결과:&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;STRICT_TRANS_TABLES,&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NO_ZERO_&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVION_BY_ZERO, NO_ENGINE_SUSTATION을 사용하여 SYS.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;LIST_DROP 시스템 기능으로 다른 항목에 영향을 주지 않고 목록에서 항목을 제거했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ONLY_FULL_GROUP_BY가 더 이상 sql_mode가 아님을 알 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 오류를 발생시킨 원래 쿼리를 실행해 보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지역, 이름, SUM(인구) FROM City WHERE Country Code = 'AUS' 지역별 그룹 선택; 결과:&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;+-----------------+-----------+-----------------+ | 지역 | 이름 | SUM(인구) | +------------------------------------------------------------------+ | 뉴사우스웨일스 | 시드니 | 3993949 | || 빅토리아 | 멜버른 | 2990711 || 퀸즐랜드 | 브리즈번 | 1805236 || 웨스트오스트레일리아 | 퍼스 | 1096829 || 사우스오스트레일리아 | 애들레이드 | 978100 || 수도권 | 캔버&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ra | 322723 | | 태즈메이니아 | 호바트 | 126118 | +-------------------------------------------------------------------------------------------------------------------------------&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/36207042/error-code-1055-incompatible-with-sql-mode-only-full-group-by&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/726</guid>
      <comments>https://stoneblock.tistory.com/726#entry726comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:35:52 +0900</pubDate>
    </item>
    <item>
      <title>Ajax Jquery 호출 시 리디렉션</title>
      <link>https://stoneblock.tistory.com/725</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Ajax Jquery 호출 시 리디렉션&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;Spring MVC 기반의 레거시 앱이 있는데 세션이 없을 때마다 사용자를 로그인 페이지로 리디렉션하는 인터셉터(필터)가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class SessionCheckerInterceptor extends HandlerInterceptorAdapter {
 public boolean preHandle(HttpServletRequest request,
   HttpServletResponse response, Object handler) throws Exception {
  HttpSession session = request.getSession();

  // check if userInfo exist in session
  User user = (User) session.getAttribute(&quot;user&quot;);
  if (user == null) {
   response.sendRedirect(&quot;login.htm&quot;);
   return false;
  }
  return true;
 }
}
&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;xmlhttp가 아닌 요청의 경우 이 작업이 정상적으로 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 어플리케이션에서 ajax를 사용하려고 하면 모든 것이 이상해져 로그인 페이지로 올바르게 리디렉션되지 않습니다.&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;xhr.status = 200 textStatus = parseError 오류&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;던짐 = &quot;Invalid JSON -Markup of my HTML Login Page-&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).ready(function(){
        jQuery.ajax({
            type: &quot;GET&quot;,
            url: &quot;populateData.htm&quot;,
            dataType:&quot;json&quot;,
            data:&quot;userId=SampleUser&quot;,
            success:function(response){
             //code here
            },
         error: function(xhr, textStatus, errorThrown) {
                alert('Error!  Status = ' + xhr.status);
             }

        });
});
&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;파이어버그에서 302 HTTP 응답이 있다고 확인했는데 응답을 잡고 사용자를 로그인 페이지로 리디렉션하는 방법을 잘 모르겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;무슨 생각 있어요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JQuery는 &lt;em papago-id=&quot;0-1&quot;&gt;json&lt;/em&gt; 유형의 결과를 찾고 있지만 리디렉션이 자동으로 처리되므로 &lt;em papago-id=&quot;0-3&quot;&gt;생성된 html 소스&lt;/em&gt;를 수신합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;login.htm&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;하나의 아이디어는 브라우저가 a를 추가하여 리디렉션해야 한다는 것을 알려주는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;redirect&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과 개체에 변수를 적용하고 JQuery에서 개체를 확인합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).ready(function(){ 
    jQuery.ajax({ 
        type: &quot;GET&quot;, 
        url: &quot;populateData.htm&quot;, 
        dataType:&quot;json&quot;, 
        data:&quot;userId=SampleUser&quot;, 
        success:function(response){ 
            if (response.redirect) {
                window.location.href = response.redirect;
            }
            else {
                // Process the expected results...
            }
        }, 
     error: function(xhr, textStatus, errorThrown) { 
            alert('Error!  Status = ' + xhr.status); 
         } 

    }); 
}); 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;응답에 머리글 변수를 추가하고 브라우저가 리디렉션할 위치를 결정하도록 할 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Java에서는 리디렉션 대신 다음 작업을 수행합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;response.setHeader(&quot;REQUIRES_AUTH&quot;, &quot;1&quot;)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JQuery에서는 성공(!)에 대한 작업을 수행합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//....
        success:function(response){ 
            if (response.getResponseHeader('REQUIRES_AUTH') === '1'){ 
                window.location.href = 'login.htm'; 
            }
            else {
                // Process the expected results...
            }
        }
//....
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 되길 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 대답은 이 &lt;a href=&quot;https://stackoverflow.com/questions/199099/how-to-manage-a-redirect-request-after-a-jquery-ajax-call&quot; papago-id=&quot;12-1&quot;&gt;스레드&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;ExpressJs 라우터의 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;router.post('/login', async(req, res) =&amp;gt; {
    return res.send({redirect: '/yoururl'});
})
&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 class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;    success: function (response) {
        if (response.redirect) {
            window.location = response.redirect
        }
    },
&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/2927044/redirect-on-ajax-jquery-call&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Ajax</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/725</guid>
      <comments>https://stoneblock.tistory.com/725#entry725comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:35:44 +0900</pubDate>
    </item>
    <item>
      <title>virtualenv(python3.4), pip install mysql 클라이언트 오류</title>
      <link>https://stoneblock.tistory.com/724</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;virtualenv(python3.4), pip install 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;저는 장고 1.9 프로젝트를 위한 가상환경을 만들었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;mysqlclient 또는 mysql-python을 pip install하려고 하는데 둘 다 오류가 납니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;pip install mysqlclient

pip install mysql-python
&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;blockquote&gt; 
 &lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령 &quot; python setup.py egg_info&quot;가 실패하고 /private/var/folders/r4/bkv_4t9s4r140pjkgv6lsq8w0000gn/T/pip-build-cdxcssp9/mysqlclient에서 오류 코드 1이 발생했습니다.&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 papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작업을 실행해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우분투:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo apt-get install python-dev python3-dev
sudo apt-get install libmysqlclient-dev
pip install pymysql
pip install mysqlclient
&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;OSX에서:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo xcodebuild -license accept
brew install mysql-connector-c
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 아마도 당신의 것 때문일 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mysql_config&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&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2019년 현재 원활하게 운영되는 방법은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pip install mysqlclient&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MacOS에서:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;brew info openssl&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;  echo 'export PATH=&quot;/usr/local/opt/openssl/bin:$PATH&quot;' &amp;gt;&amp;gt; ~/.zshrc
  export LDFLAGS=&quot;-L/usr/local/opt/openssl/lib&quot;
  export CPPFLAGS=&quot;-I/usr/local/opt/openssl/include&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기타 접근 방식:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;brew install/upgrade/reinstall mysql&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;/li&gt; 
 &lt;li&gt;&lt;code&gt;brew install mysql-connector-c&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;: 그 작업을 하려면 mysql의 링크를 해제해야 합니다. 그것은 당신의 설정을 망치게 하고 그것은 나에게 문제를 해결하지 못했습니다.&lt;/font&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;conda install -c anaconda mysql-connector-python
&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;conda install -c bioconda mysqlclient
&lt;/code&gt;&lt;/pre&gt;&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL APT 저장소 구성 도구를 다운로드하십시오(자세한 내용은 여기에서 확인하실 수 있습니다: http://dev.mysql.com/downloads/repo/apt/)&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;wget http://dev.mysql.com/get/mysql-apt-config_0.7.3-1_all.deb
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL APT 저장소 구성 도구 설치&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;dpkg -i mysql-apt-config_0.7.3-1_all.deb
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
&lt;/ol&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;첫 번째 단계에서 Server를 선택하고 다음으로 mysql-5.6 또는 mysql-5.7을 선택합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 Apply(적용)를 클릭합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol start=&quot;3&quot;&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;APT 업데이트&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;apt-get update
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버 설치&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;sudo apt-get install mysql-community-server

sudo apt-get install python-dev python3-dev
sudo apt-get install libmysqlclient-dev
pip install pymysql
pip install mysqlclient
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Python 2.x를 사용하고 있고 이미 설치되어 있는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 서버&lt;/font&gt;&lt;/li&gt; 
 &lt;li&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;br&gt;&lt;/li&gt; 
&lt;/ul&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&gt;&lt;/font&gt;&lt;br&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;Windows:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(your environment) SomePath&amp;gt; pip install mysqlclient 
&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;Mac OS:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ pip install mysqlclient
&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;사실 2.x가 아닌 파이썬 3.x용 패키지를 설치해달라고 요청하고 있어서 오류가 발생하고 있습니다.&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;strong papago-id=&quot;9-0&quot;&gt;실행&lt;/strong&gt;할 솔루션:&lt;/font&gt;&lt;/font&gt;&lt;br&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;Windows:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(your environment) SomePath&amp;gt; pip install mysqlclient==1.3.9
&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;Mac OS:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ pip install mysqlclient==1.3.9
&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;em papago-id=&quot;33-1&quot;&gt;mysqlclient&lt;/em&gt;==&lt;em papago-id=&quot;33-1&quot;&gt;1.3&lt;/em&gt;.9 버전은 Python 2.x의 최신 버전입니다.&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;Ubuntu 18.04의 경우&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo apt-get install python-dev python3-dev
sudo apt-get install libmysqlclient-dev
pip install pymysql
pip install mysqlclient
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;셋업, 셋업.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'DB_NAME',
        'USER': 'DB_USER',
        'PASSWORD': 'DB_PASSWORD',
        'HOST': 'localhost',   # Or an IP Address that your DB is hosted on
        'PORT': '3306',
    }
}

&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;Ubuntu 18.04에서 작동했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-sh prettyprint-override&quot;&gt;&lt;code&gt;sudo apt-get install python3.6-dev 
sudo apt-get install mysql-client 
sudo apt-get install libsqlclient-dev 
sudo apt-get install libssl-dev
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/35190465/virtualenvpython3-4-pip-install-mysqlclient-error&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mysql</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/724</guid>
      <comments>https://stoneblock.tistory.com/724#entry724comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:35:36 +0900</pubDate>
    </item>
    <item>
      <title>워드프레스: 알파벳순으로 previor_post_link / next_post_link?</title>
      <link>https://stoneblock.tistory.com/723</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;워드프레스: 알파벳순으로 previor_post_link / next_post_link?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 맞춤형 게시글이 있는 워드프레스 웹사이트를 개발하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;!-- THE ARGS --&amp;gt;
&amp;lt;?php global $query_string;
$args = wp_parse_args($query_string);
$args = array(
    'post_type' =&amp;gt; 'custom_post',
    'orderby' =&amp;gt; 'title',
    'order' =&amp;gt; 'ASC',
    'posts_per_page' =&amp;gt; -1,
    ); ?&amp;gt;

&amp;lt;!--  THE LOOP --&amp;gt;
&amp;lt;?php $wp_query = new WP_Query( $args ); ?&amp;gt;
&amp;lt;?php while ($wp_query-&amp;gt;have_posts()) : $wp_query-&amp;gt;the_post(); ?&amp;gt;
&amp;lt;?php endwhile; ?&amp;gt;
&amp;lt;?php wp_reset_query(); ?&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;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;게시물을 열 때 해당 페이지에는 게시물을 탐색할 수 있도록 일반적인 이전_post_link와 next_post_link가 있습니다.&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;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.ambrosite.com/plugins/next-previous-post-link-plus-for-wordpress&quot; rel=&quot;noreferrer&quot; papago-id=&quot;4-1&quot;&gt;이 플러그인&lt;/a&gt;은 사용자가 원하는 작업을 수행하는 것 같습니다. 예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;ul class=&quot;pager&quot;&amp;gt;
        &amp;lt;?php previous_post_link_plus( array('order_by' =&amp;gt; 'post_title') ); ?&amp;gt;
        &amp;lt;?php next_post_link_plus( array('order_by' =&amp;gt; 'post_title') ); ?&amp;gt;
&amp;lt;/ul&amp;gt;
&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;get_adjacent_post&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 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;php 파일 추가:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function mytheme_previous_post_orderby_name($orderby){
    return &quot;ORDER BY p.post_title DESC LIMIT 1&quot;;
}
function mytheme_previous_post_where_name(){
    global $post, $wpdb;
    return $wpdb-&amp;gt;prepare( &quot;WHERE p.post_title &amp;lt; %s AND p.post_type = %s AND ( p.post_status = 'publish' OR p.post_status = 'private' )&quot;, $post-&amp;gt;post_title, $post-&amp;gt;post_type );
}
function mytheme_next_post_orderby_name($orderby){
    return &quot;ORDER BY p.post_title ASC LIMIT 1&quot;;
}
function mytheme_next_post_where_name(){
    global $post, $wpdb;
    return $wpdb-&amp;gt;prepare( &quot;WHERE p.post_title &amp;gt; %s AND p.post_type = %s AND ( p.post_status = 'publish' OR p.post_status = 'private' )&quot;, $post-&amp;gt;post_title, $post-&amp;gt;post_type );
}
&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;이전/다음 게시물 링크 기능을 호출하기 전에 php 페이지에 필터를 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;add_filter('get_previous_post_sort', 'mytheme_previous_post_orderby_name', 10, 1);
add_filter('get_next_post_sort', 'mytheme_next_post_orderby_name', 10, 1);

add_filter('get_previous_post_where', 'mytheme_previous_post_where_name', 10);
add_filter('get_next_post_where', 'mytheme_next_post_where_name', 10);

the_post_navigation();

remove_filter('get_previous_post_sort', 'mytheme_previous_post_orderby_name', 10);
remove_filter('get_next_post_sort', 'mytheme_next_post_orderby_name', 10);
remove_filter('get_previous_post_where', 'mytheme_previous_post_where_name', 10);
remove_filter('get_next_post_where', 'mytheme_next_post_where_name', 10);
&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;특정 post_type을 확인하려면 필터 추가 섹션 주위에 if를 추가할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if($post-&amp;gt;post_type == 'my_custom_post_type'){
    add_filter(...);
    the_post_navigation();
    remove_filter(...);
}
&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;또는 post_type 특정 싱글 php 파일을 사용할 수 있습니다!&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;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/9925035/wordpress-previous-post-link-next-post-link-by-alphabetical-order&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/723</guid>
      <comments>https://stoneblock.tistory.com/723#entry723comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:35:29 +0900</pubDate>
    </item>
    <item>
      <title>모든 카테고리에서 랜덤으로 2개 레코드 선택 그룹 in MariaDB</title>
      <link>https://stoneblock.tistory.com/722</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 카테고리에서 랜덤으로 2개 레코드 선택 그룹 in Maria&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;DB&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;a href=&quot;https://stackoverflow.com/a/5634192/10789707&quot; papago-id=&quot;1-1&quot;&gt;결과를 반환하려고 합니다&lt;/a&gt;(MySQL의 각 &lt;a href=&quot;https://stackoverflow.com/a/5634192/10789707&quot; papago-id=&quot;1-1&quot;&gt;카테고리에서 2개 제품&lt;/a&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;데이터베이스의 각 카테고리에서 2개 레코드의 랜덤 그룹 반환&lt;/font&gt;&lt;/font&gt;&lt;code&gt;test1.csv&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&gt;&lt;code&gt;test1&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;id,name,category
150,apple,fruit
153,orange,fruit
187,kiwi,fruit
189,banana,fruit
142,beef,meat
141,pork,meat
143,rabbit,meat
146,chicken,meat
410,pepsi,drinks
413,milk,drinks
418,coffee,drinks
415,mate,drinks
581,carrot,vegetables
586,tomato,vegetables
589,cucumber,vegetables
582,broccoli,vegetables
&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;MariaDB 컴파일러에서 테스트를 재현합니다. https://onecompiler.com/mariadb/3ymv4a6e6&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;-- create
CREATE TABLE test1 (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  category TEXT NOT NULL
);

-- insert
INSERT INTO test1 VALUES (150,'apple','fruit');
INSERT INTO test1 VALUES (153,'orange','fruit');
INSERT INTO test1 VALUES (187,'kiwi','fruit');
INSERT INTO test1 VALUES (189,'banana','fruit');
INSERT INTO test1 VALUES (142,'beef','meat');
INSERT INTO test1 VALUES (141,'pork','meat');
INSERT INTO test1 VALUES (143,'rabbit','meat');
INSERT INTO test1 VALUES (146,'chicken','meat');
INSERT INTO test1 VALUES (410,'pepsi','drinks');
INSERT INTO test1 VALUES (413,'milk','drinks');
INSERT INTO test1 VALUES (418,'coffee','drinks');
INSERT INTO test1 VALUES (415,'mate','drinks');
INSERT INTO test1 VALUES (581,'carrot','vegetables');
INSERT INTO test1 VALUES (586,'tomato','vegetables');
INSERT INTO test1 VALUES (589,'cucumber','vegetables');
INSERT INTO test1 VALUES (582,'broccoli','vegetables');

-- fetch 
SET @prev=0,@rownum=0;
SELECT id, name, category 
FROM (
  SELECT *, 
         IF( @prev &amp;lt;&amp;gt; category, 
             @rownum := 1, 
             @rownum := @rownum+1 
         ) AS rank, 
         @prev := category, 
         @rownum  
  FROM (
    SELECT * FROM test1 
    ORDER BY category, rand()
  ) random_test1
) test1_ranked 
WHERE rank &amp;lt;= 2;
&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;위의 코드와 같이 단일 카테고리와 동일한 카테고리에서 랜덤 레코드 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;주어진 데이터 집합 test1에 대한 의도된 결과의 예는 다음과 같습니다.&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;2개의 레코드(또는 무작위로 선택한 경우) x 4개의 카테고리(사용 가능한 모든 카테고리는 프로덕션 데이터셋에서 훨씬 더 많음)&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;150,apple,fruit
153,orange,fruit
142,beef,meat
141,pork,meat
418,coffee,drinks
415,mate,drinks
589,cucumber,vegetables
582,broccoli,vegetables
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;임의 선택을 단일 범주가 아닌 모든 범주로 제어/확장하는 방법은 무엇입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://mariadb.com/kb/en/order-by/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;12-1&quot;&gt;By&lt;/a&gt;, &lt;a href=&quot;https://mariadb.com/kb/en/rank/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;12-3&quot;&gt;Rank&lt;/a&gt;, &lt;a href=&quot;https://mariadb.com/kb/en/rand/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;12-5&quot;&gt;Rand&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;https://github.com/softhints/python/blob/master/notebooks/pandas/21.%20pandas-dataframe-sampling-rows-or-columns.ipynb&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;13-1&quot;&gt;5. 판다는 그룹별로 줄을 표본&lt;/a&gt;으로 삼습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df.groupby('color').apply(lambda x: x.sample(n=3)).reset_index(drop = True)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MariaDb에서 동일한 결과를 얻는 방법은?&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;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/74303723/random-select-2-records-from-all-categories-groups-in-mariadb&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/722</guid>
      <comments>https://stoneblock.tistory.com/722#entry722comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:35:21 +0900</pubDate>
    </item>
    <item>
      <title>WooCommerce PayPal 게이트웨이에서 CORB(크로스 오리진 읽기 차단) 오류 가져오기</title>
      <link>https://stoneblock.tistory.com/721</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WooCommerce PayPal 게이트웨이에서 CORB(크로스 오리진 읽기 차단) 오류 가져오기&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://wordpress.org/plugins/woocommerce-gateway-paypal-express-checkout/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;1-1&quot;&gt;WooCommerce PayPal 체크아웃 게이트웨이&lt;/a&gt;를 사용하고 있는데 PayPal 결제 옵션이 나타나는 &lt;em papago-id=&quot;1-3&quot;&gt;체크아웃&lt;/em&gt; 페이지를 로드하면 콘솔에 다음과 같은 메시지가 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CORB(Cross-Origin Read Blocking)는 MIME 유형의 텍스트/html로 https://www.paypal.com/xoplatform/logger/api/logger 을 차단했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은 https://www.chromestatus.com/feature/5629709824032768 을 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 잠재적으로 문제를 일으킬 수 있는 것입니까, 아니면 크게 걱정할 것이 없습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제가 있다면 어떻게 해결해야 할지 생각이 나시나요?&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://chromium.googlesource.com/chromium/src/+/master/services/network/cross_origin_read_blocking_explainer.md&quot; papago-id=&quot;5-1&quot; rel=&quot;noreferrer&quot;&gt;CORB에 대한&lt;/a&gt; 자세한 &lt;a href=&quot;https://chromium.googlesource.com/chromium/src/+/master/services/network/cross_origin_read_blocking_explainer.md&quot; papago-id=&quot;5-1&quot; rel=&quot;noreferrer&quot;&gt;설명&lt;/a&gt;은 여기 &lt;a href=&quot;https://chromium.googlesource.com/chromium/src/+/master/services/network/cross_origin_read_blocking_explainer.md&quot; papago-id=&quot;5-1&quot; rel=&quot;noreferrer&quot;&gt;있습니다&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;ul&gt; 
 &lt;li papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;체크아웃 페이지는 체크아웃 기능을 구현하기 위해 페이팔에서 스크립트 [예: javascript]를 로드합니다.&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;체크아웃 기능 외에도 스크립트가 일부 페이팔 API를 &quot;로거&quot;라고 부를 수도 있는 것 같습니다.&lt;/font&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;귀하의 웹 브라우저는 &quot;logger&quot; API로부터 반환된 응답이 &lt;a href=&quot;https://chromium.googlesource.com/chromium/src/+/master/services/network/cross_origin_read_blocking_explainer.md&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-1&quot;&gt;CORB 로직에 따라&lt;/a&gt; 유효하지 않거나 부적절하며, 체크아웃 웹 페이지의 표시 또는 작동에도 관련이 없으므로 CORB가 응답 본문/헤더를 필터링했습니다.&lt;/font&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;/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;체크아웃 기능에 영향을 주어서는 안 되며, PayPal은 여전히 &quot;로거&quot; API가 호출되어 응답이 폐기된 것으로 분석됩니다.&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;PayPal은 브라우저 콘솔에서 메시지가 트리거되지 않도록 &quot;로거&quot; API가 사용되는 방식을 재설계할 수도 있습니다. 하지만 비즈니스 가치가 거의 없는 경우에는 복잡할 수도 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/55558973/getting-cross-origin-read-blocking-corb-error-with-woocommerce-paypal-gateway&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>wordpress</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/721</guid>
      <comments>https://stoneblock.tistory.com/721#entry721comment</comments>
      <pubDate>Thu, 26 Oct 2023 20:35:14 +0900</pubDate>
    </item>
    <item>
      <title>단일 레포 내에서 디렉토리당 .gitignore를 추가로 가질 수 있습니까?</title>
      <link>https://stoneblock.tistory.com/720</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단일 레포 내에서 디렉토리당 .gitignore를 추가로 가질 수 있습니까?&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;A를 만들 수 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.gitignore&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해당 디렉토리 내의 파일(및 디렉토리)에만 적용되는 디렉토리 내의 파일?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;네, 가능합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 번 해보세요, 잘 되네요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;퍼팅 a&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.gitignore&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;.gitignore&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하위 디렉토리에 무시할 추가 사항이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비슷한 질문은 다음과 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/3305869/are-multiple-gitignores-frowned-on&quot; papago-id=&quot;6-1&quot;&gt;다중 '.gitignore'&lt;/a&gt;는 눈살을 찌푸리고 &lt;a href=&quot;https://stackoverflow.com/questions/3305869/are-multiple-gitignores-frowned-on&quot; papago-id=&quot;6-1&quot;&gt;있습니까?&lt;/a&gt; (2010년 7월)&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;아니면 다른 버전의 a를 가질 수 있다면,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.gitignore&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지점당 파일 수: &lt;a href=&quot;https://stackoverflow.com/questions/2250040/using-github-to-host-public-git-repositories-whilst-ensuring-that-sensitive-data/2250144#2250144&quot; papago-id=&quot;8-1&quot;&gt;github을 사용하여 퍼블릭 &lt;/a&gt;깃&lt;a href=&quot;https://stackoverflow.com/questions/2250040/using-github-to-host-public-git-repositories-whilst-ensuring-that-sensitive-data/2250144#2250144&quot; papago-id=&quot;8-1&quot;&gt; 저장소를 호스팅하는 동시에 중요한 데이터 파일을 추적&lt;/a&gt;하지 않도록 &lt;a href=&quot;https://stackoverflow.com/questions/2250040/using-github-to-host-public-git-repositories-whilst-ensuring-that-sensitive-data/2250144#2250144&quot; papago-id=&quot;8-1&quot;&gt;보장&lt;/a&gt;(2010년 2월)&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;a href=&quot;https://stackoverflow.com/questions/928646/how-do-i-tell-git-to-always-select-my-local-version-for-conflicted-merges-on-a-s/930495#930495&quot; papago-id=&quot;9-1&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;다음과 같은 형식으로 무시할 파일을 지정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Xyz/*.abc
&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;루트 디렉터리의 .gitignore에 저장되므로 별도의 무시 파일이 필요 없게 됩니다.&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/9730486/can-you-have-additional-gitignore-per-directory-within-a-single-repo&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Git</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/720</guid>
      <comments>https://stoneblock.tistory.com/720#entry720comment</comments>
      <pubDate>Sat, 21 Oct 2023 09:54:54 +0900</pubDate>
    </item>
    <item>
      <title>nodejs - 인증서 체인에서 자체 서명된 인증서 오류</title>
      <link>https://stoneblock.tistory.com/719</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;nodejs - 인증서 체인에서 자체 서명된 인증서 오류&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;클라이언트 측 https 요청에 문제가 있습니다.&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;var fs = require('fs');
var https = require('https');

var options = {
    hostname: 'someHostName.com',
    port: 443,
    path: '/path',
    method: 'GET',
    key: fs.readFileSync('key.key'),
    cert: fs.readFileSync('certificate.crt')
}

var requestGet = https.request(options, function(res){
    console.log('resObj', res);
}
&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;font class=&quot;papago-parent&quot;&gt;사용 가능한 해결책이 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 우체부가 어떻게 자격증을 처리하고 일하는지에 대해서도 좀 알려주고 싶습니다.&lt;/font&gt;&lt;/p&gt;&lt;h2 papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션 1: 경고 비활성화(dev에 유용)&lt;/font&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;6&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;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;export NODE_TLS_REJECT_UNAUTHORIZED='0'
node app.js
&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;NODE_TLS_REJECT_UNAUTHORIZED='0' node app.js
&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&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;환경 변수를 설정하지 않거나 여러 응용 프로그램에 대해 이 작업을 수행해야 하는 경우 npm은&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;strict-ssl&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;false&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;npm config set strict-ssl=false
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션 2: 우체부와 같이 CA 인증서 로드(TLS로 테스트하는 데 유용)&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;@kDoyle이 언급한 포스터와 같은 CA 인증서가 이미 있는 경우 각 요청에서 구성할 수 있습니다(@nic ferrier 감사합니다).&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt; let opts = {
    method: 'GET',
    hostname: &quot;localhost&quot;,
    port: listener.address().port,
    path: '/',
    ca: fs.readFileSync(&quot;cacert.pem&quot;)
  };

  https.request(opts, (response) =&amp;gt; { }).end();
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2 papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션 3: 신뢰할 수 있는 소스의 적절한 SSL 인증서 사용(생산에 유용)&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;letsencrypt.org 은 무료이며 설정이 쉽고 키를 자동으로 회전시킬 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://letsencrypt.org/docs/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;15-1&quot;&gt;https://letsencrypt.org/docs/&lt;/a&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;NODE_TLS_REJECT_UNAUTHORIZED=0&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;JS 파일에 다음 행을 삽입하거나 단말기에 입력합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;
&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;window를 사용하는 경우 명령 프롬프트에서 다음 명령을 실행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;set NODE_TLS_REJECT_UNAUTHORIZED=0 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 다음에.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm install &amp;lt;my-package&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;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;tls: {
  rejectUnauthorized: false
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 문제를 해결했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전체적인 코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;nodemailer.createTransport({
    host: process.env.MAIL_SERVER,
    secure: false,
    port: 587,
    auth: {
      user: process.env.MAIL_USERNAME,
      pass: process.env.MAIL_PASSWORD
    },
    tls: {
      rejectUnauthorized: false
    }
  }
&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;명령어를 작성할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm config set strict-ssl false&lt;/code&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;pre&gt;&lt;code&gt;process.env.NODE_TLS_REJECT_UNAUTHORIZED='0'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 모든 것이 해결되었지만 어떤 경우에도 권장할 수 없는 문제입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 저는 해결책을 조사하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;https://letsencrypt.org/&lt;/code&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;인증서를 확인하는 것이 훨씬 좋습니다.&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;를 사용하여 Certificate Authority 인증서를 요청으로 끌어 올 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ca&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;options 개체의 키는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;let opts = {
    method: 'GET',
    hostname: &quot;localhost&quot;,
    port: listener.address().port,
    path: '/',
    ca: await fs.promises.readFile(&quot;cacert.pem&quot;)
  };

https.request(opts, (response) =&amp;gt; { }).end();
&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;SSL 테스트를 구성하는 방법을 확인할 수 있도록 전체 데모를 작성했습니다.&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;https://github.com/nicferrier/nodejs-self-signed-cert-server-and-client&quot; rel=&quot;noreferrer&quot; papago-id=&quot;33-1&quot;&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;노드 응용 프로그램은 기존 CA(Mozilla) 인증서에 CA 인증서를 추가해야 합니다.&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;서비스를 이용하여 노드를 시작하고 환경변수인 NODE_EXTRA_CA_CERTS를 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[Service]
Restart=always
User=&amp;lt;...&amp;gt;
Group=&amp;lt;...&amp;gt;
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
Environment=NODE_EXTRA_CA_CERTS=/&amp;lt;...&amp;gt;/.ssl/extra_certs.pem
WorkingDirectory=/&amp;lt;...&amp;gt;

ExecStart=/usr/bin/node -r dotenv/config /&amp;lt;.....&amp;gt;/server.js dotenv_config_path=/&amp;lt;....&amp;gt;/.env
&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;이렇게 하면 동일한 애플리케이션을 사용하여 인기 있는 CA 또는 자체 서명된 인증서를 사용하여 서비스를 호출할 수 있으며 SSL 확인을 끌 필요가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리눅스에서 인증서를 쉽게 얻을 수 있는 방법은 다음과 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/27611193/use-self-signed-certificate-with-curl&quot; papago-id=&quot;37-1&quot;&gt;cURL과 함께 자체 서명된 인증서를 사용하시겠습니까?&lt;/a&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 사용하여 인증서를 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ echo quit | openssl s_client -showcerts -servername server -connect server:443 &amp;gt; cacert.pem
&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;그런 다음 .pem 파일을 extra_cert.pem으로 복사합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;펨 파일은 하나만 가질 수 있지만 여러 개의 펨 파일을 하나의 파일에 추가할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누군가에게 도움이 됐으면 좋겠어요, 이 작품을 만들기 위해 다른 부분을 찾는 데 시간이 좀 걸렸습니다.&lt;/font&gt;&lt;/p&gt;&lt;h3 papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수행:&lt;/font&gt;&lt;/h3&gt; 
&lt;p papago-id=&quot;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;process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3 papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지 않음:&lt;/font&gt;&lt;/h3&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 기본 요청 프로세스를 변경하는 대신.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;npm config set strict-ssl=false
&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;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;하루 반나절 동안 이 문제를 추적해 본 결과 IT 부서에서 사용하지 않도록 설정해야 하는 회사 방화벽 설정으로 인해 오류가 발생한 것으로 드러났습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;인터넷 어디에도 이 문제를 해결할 수 있는 어떤 것도 없었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;process.env['Node_TLS_REJECT_UNANCERTIFED'] = 0; 비록 작동하지는 않지만...&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;&lt;strong papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사이프레스를 설치할 수 없음:&lt;/font&gt;&lt;/strong&gt;&lt;/em&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;SC:\Cypress&amp;gt; export NODE_TLS_REECT_UNANCERICT='0' node app.js export : 'export'라는 용어가 cmdlet, 함수, 스크립트 파일 또는 작동 가능한 프로그램의 이름으로 인식되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이름의 철자를 확인하거나 경로가 포함되어 있는 경우,&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;경로가 올바른지 확인하고 다시 시도합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;라인:1 char:1&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;NODE_TLS_REJECT_UNARTHED='0' node app.js 내보내기&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt; &lt;pre&gt;&lt;code&gt;  + CategoryInfo          : ObjectNotFound: (export:String) [], CommandNotFoundException   
  + FullyQualifiedErrorId : CommandNotFoundException

&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ul&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/45088006/nodejs-error-self-signed-certificate-in-certificate-chain&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Node.js</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/719</guid>
      <comments>https://stoneblock.tistory.com/719#entry719comment</comments>
      <pubDate>Sat, 21 Oct 2023 09:54:48 +0900</pubDate>
    </item>
    <item>
      <title>jQuery에서 선택한 태그에 있는 옵션 태그 수</title>
      <link>https://stoneblock.tistory.com/718</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery에서 선택한 태그에 있는 옵션 태그 수&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;&amp;lt;option&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;죄악을 범한&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;select&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;jQuery를 사용한 DOM 요소?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;select data-attr=&quot;dropdown&quot; id=&quot;input1&quot;&amp;gt;
  &amp;lt;option value=&quot;Male&quot; id=&quot;Male&quot;&amp;gt;Male&amp;lt;/option&amp;gt;
  &amp;lt;option value=&quot;Female&quot; id=&quot;Female&quot;&amp;gt;Female&amp;lt;/option&amp;gt;
&amp;lt;/select&amp;gt;
&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;&amp;lt;option&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&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;select&amp;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;DOM 요소는 드롭다운 상자에서 해당 옵션 값을 가진 입력 필드 수만큼 설정 패널을 열고 미리보기 패널에서 다시 변경합니다.&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;위 드롭다운 상자는 jQuery에서 생성한 미리보기 패널에 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;$('#input1 option').length;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 생산할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;2&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;W3C 솔루션:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var len = document.getElementById(&quot;input1&quot;).length;
&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;strong papago-id=&quot;8-1&quot;&gt;&lt;a href=&quot;http://api.jquery.com/length/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;8-1-0&quot;&gt;길이&lt;/a&gt;&lt;/strong&gt; 속성을 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;length&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;size&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#input1 option').length;
&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;또는 (jQuery v3에서 제거)와 같은 &lt;strong papago-id=&quot;14-1&quot;&gt;&lt;a href=&quot;http://api.jquery.com/size/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;14-1-0&quot;&gt;크기&lt;/a&gt;&lt;/strong&gt; 기능을 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#input1 option').size(); 
&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;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;$(document).ready(function(){
   console.log($('#input1 option').size());
   console.log($('#input1 option').length);
});&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://cdnjs.cloudflare.com/ajax/libs/jquery/1.9.1/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;select data-attr=&quot;dropdown&quot; id=&quot;input1&quot;&amp;gt;
   &amp;lt;option value=&quot;Male&quot; id=&quot;Male&quot;&amp;gt;Male&amp;lt;/option&amp;gt;
   &amp;lt;option value=&quot;Female&quot; id=&quot;Female&quot;&amp;gt;Female&amp;lt;/option&amp;gt;
&amp;lt;/select&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;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;질문이 조금 헷갈리지만 패널에 옵션의 수를 표시하려면 다음과 같이 하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div id=&quot;preview&quot;&amp;gt;&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(function() {
  $(&quot;#preview&quot;).text($(&quot;#input1 option&quot;).length + &quot; items&quot;);
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 나머지 질문을 이해했는지 잘 모르겠습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&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;$('#input1 :selected').length;&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;pre&gt;&lt;code&gt;function refreshButtons () {
    if ($('#input :selected').length == 0)
    {
        $('#submit').attr ('disabled', 'disabled');
    }
    else
    {
        $('#submit').removeAttr ('disabled');
    }
}
&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;$('#example option').length
&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;$('.my-dropdown').live('click', function(){  
});
&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;내 드롭다운은 클릭했을 때 ajax 요청에 의해 자동으로 채워져서 요소($this)만 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서...&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 해야만 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('.my-dropdown').live('click', function(){
  total_tems = $(this).find('option').length;
});
&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;em papago-id=&quot;26-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;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유용할 수 있는 또 다른 접근법.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#select-id').find('option').length
&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;URL : https://stackoverflow.com/questions/1152738/counting-the-number-of-option-tags-in-a-select-tag-in-jquery&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/718</guid>
      <comments>https://stoneblock.tistory.com/718#entry718comment</comments>
      <pubDate>Sat, 21 Oct 2023 09:54:40 +0900</pubDate>
    </item>
    <item>
      <title>그룹별 평균 계산</title>
      <link>https://stoneblock.tistory.com/717</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;df &amp;lt;- data.frame(dive = factor(sample(c(&quot;dive1&quot;,&quot;dive2&quot;), 10, replace=TRUE)),
                 speed = runif(10)
                 )
&amp;gt; df
    dive      speed
1  dive1 0.80668490
2  dive1 0.53349584
3  dive2 0.07571784
4  dive2 0.39518628
5  dive1 0.84557955
6  dive1 0.69121443
7  dive1 0.38124950
8  dive2 0.22536126
9  dive1 0.04704750
10 dive2 0.93561651
&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;speed&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;dive&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 그래서 언제&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dive==dive1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 에 대한 평균&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;speed&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;dive&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;/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;R에서 이것을 하는 방법은 여러 가지가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구체적으로.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;by&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;aggregate&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;split&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;plyr&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;cast&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;tapply&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;data.table&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;dplyr&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;17&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.jstatsoft.org/v40/i01/paper&quot; papago-id=&quot;17-1&quot; rel=&quot;noreferrer&quot;&gt;글&lt;/a&gt;을 썼으며, 이 글은 읽을 가치가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;plyr&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;dplyr&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;이들은 같은 형태이지만 이 문제보다 훨씬 더 복잡한 문제를 해결할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 조작 문제를 해결하는 일반적인 도구로서 충분히 배울 가치가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;성능은 매우 큰 데이터셋에서 문제가 되며, 이 때문에 다음을 기반으로 한 솔루션을 능가하기가 어렵습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data.table&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;data.table&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;code&gt;dplyr&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 속도가 빠를 수 있으므로 작업 속도를 높이고 싶지만 확장성이 필요하지 않은 경우에는 좋은 선택입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data.table&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래의 다른 솔루션들 중 대부분은 추가 패키지를 필요로 하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 중 일부는 중 대규모 데이터 세트에서도 상당히 빠릅니다.&lt;/font&gt;&lt;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;hr&gt; 
&lt;h2 papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예&lt;/font&gt;&lt;/h2&gt; 
&lt;h3&gt;&lt;code&gt;base&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;/h3&gt; 
&lt;p&gt;&lt;strong&gt;&lt;code&gt;tapply&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;tapply(df$speed, df$dive, mean)
#     dive1     dive2 
# 0.5419921 0.5103974
&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;strong papago-id=&quot;29-0&quot;&gt;&lt;code papago-id=&quot;29-0-0&quot;&gt;aggregate&lt;/code&gt;&lt;/strong&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;aggregate&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;data.frame을 가져오고 data.frame을 출력하며 공식 인터페이스를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;aggregate( speed ~ dive, df, mean )
#    dive     speed
# 1 dive1 0.5790946
# 2 dive2 0.4864489
&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;code papago-id=&quot;31-0-0&quot;&gt;by&lt;/code&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;그러나 출력은 조작 가능한 형태가 아닙니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;res.by &amp;lt;- by(df$speed, df$dive, mean)
res.by
# df$dive: dive1
# [1] 0.5790946
# ---------------------------------------
# df$dive: dive2
# [1] 0.4864489
&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;by&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;as.data.frame&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;taRifx&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;library(taRifx)
as.data.frame(res.by)
#    IDX1     value
# 1 dive1 0.6736807
# 2 dive2 0.4051447
&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-0&quot;&gt;&lt;code papago-id=&quot;37-0-0&quot;&gt;split&lt;/code&gt;&lt;/strong&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이름에서 알 수 있듯이 분할 적용 결합 전략의 &quot;분할&quot; 부분만 수행합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나머지가 잘 될 수 있도록 다음과 같은 작은 함수를 쓰겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sapply&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;combine용으로&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sapply&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;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리의 경우, 결과가 1차원 밖에 없기 때문에, 그것은 data.frame이 아닌 벡터를 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;splitmean &amp;lt;- function(df) {
  s &amp;lt;- split( df, df$dive)
  sapply( s, function(x) mean(x$speed) )
}
splitmean(df)
#     dive1     dive2 
# 0.5790946 0.4864489 
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;h3 papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;외부 패키지&lt;/font&gt;&lt;/h3&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;42-0&quot;&gt;data.table&lt;/strong&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;library(data.table)
setDT(df)[ , .(mean_speed = mean(speed)), by = dive]
#    dive mean_speed
# 1: dive1  0.5419921
# 2: dive2  0.5103974
&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;strong papago-id=&quot;43-0&quot;&gt;&lt;code papago-id=&quot;43-0-0&quot;&gt;dplyr&lt;/code&gt;&lt;/strong&gt;:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;library(dplyr)
group_by(df, dive) %&amp;gt;% summarize(m = mean(speed))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; (의 cursor 전에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dplyr&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;/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;a href=&quot;http://plyr.had.co.nz/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;35-1&quot;&gt;여기 공식&lt;/a&gt; 페이지에서 말하는 내용이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;plyr&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 이미 가능합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;base&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;R수크)와 )&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;split&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;apply&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;plyr&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 통해 모든 것을 좀 더 쉽게 해줍니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li papago-id=&quot;53&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;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 통한 편리한 병렬화&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;foreach&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;/li&gt; 
  &lt;li papago-id=&quot;56&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;57&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;58&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;59&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;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 말해, 분할 적용-결합 조작을 위한 하나의 도구를 배운다면 다음과 같이 해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;plyr&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;library(plyr)
res.plyr &amp;lt;- ddply( df, .(dive), function(x) mean(x$speed) )
res.plyr
#    dive        V1
# 1 dive1 0.5790946
# 2 dive2 0.4864489
&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-0&quot;&gt;모양&lt;/strong&gt; 변경2:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;reshape2&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;라이브러리는 분할 apply-combine를 주된 초점으로 하여 설계되지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신, 2부 멜트/캐스트 전략을 사용하여 &lt;a href=&quot;http://www.jstatsoft.org/v21/i12/paper&quot; rel=&quot;noreferrer&quot; papago-id=&quot;47-1&quot;&gt;다양한 데이터 재구성 작업&lt;/a&gt;을 수행합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 집계 기능을 허용하기 때문에 이 문제에 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;분할 적용-결합 작업의 첫 번째 선택은 아니지만 재구성 기능이 강력하므로 이 패키지도 학습해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;library(reshape2)
dcast( melt(df), variable ~ dive, mean)
# Using dive as id variables
#   variable     dive1     dive2
# 1    speed 0.5790946 0.4864489
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;h2 papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;벤치마크&lt;/font&gt;&lt;/h2&gt; 
&lt;h3 papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;열개의 행, 두 그룹&lt;/font&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;library(microbenchmark)
m1 &amp;lt;- microbenchmark(
  by( df$speed, df$dive, mean),
  aggregate( speed ~ dive, df, mean ),
  splitmean(df),
  ddply( df, .(dive), function(x) mean(x$speed) ),
  dcast( melt(df), variable ~ dive, mean),
  dt[, mean(speed), by = dive],
  summarize( group_by(df, dive), m = mean(speed) ),
  summarize( group_by(dt, dive), m = mean(speed) )
)

&amp;gt; print(m1, signif = 3)
Unit: microseconds
                                           expr  min   lq   mean median   uq  max neval      cld
                    by(df$speed, df$dive, mean)  302  325  343.9    342  362  396   100  b      
              aggregate(speed ~ dive, df, mean)  904  966 1012.1   1020 1060 1130   100     e   
                                  splitmean(df)  191  206  249.9    220  232 1670   100 a       
  ddply(df, .(dive), function(x) mean(x$speed)) 1220 1310 1358.1   1340 1380 2740   100      f  
         dcast(melt(df), variable ~ dive, mean) 2150 2330 2440.7   2430 2490 4010   100        h
                   dt[, mean(speed), by = dive]  599  629  667.1    659  704  771   100   c     
 summarize(group_by(df, dive), m = mean(speed))  663  710  774.6    744  782 2140   100    d    
 summarize(group_by(dt, dive), m = mean(speed)) 1860 1960 2051.0   2020 2090 3430   100       g 

autoplot(m1)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/LLwNx.png&quot; alt=&quot;benchmark 10 rows&quot;&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;평소처럼.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data.table&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오버헤드가 조금 더 크기 때문에 소규모 데이터셋의 경우 평균적으로 제공됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이들은 마이크로초이므로 차이점은 사소한 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기서는 모든 접근 방식이 정상적으로 작동하며, 다음을 기준으로 선택해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;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;plyr&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;51&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유연성에 대해서는 항상 배울 가치가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data.table&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;52&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;거대한 데이터셋을 분석할 계획이라면 배울 가치가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;by&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;53&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;aggregate&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;54&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;split&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;55&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 기본 R 함수이므로 보편적으로 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&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;반환하는 출력(숫자, data.frame 또는 data.table -- 후자가 data.frame에서 상속됨)&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3 papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;천만 줄, 열 그룹&lt;/font&gt;&lt;/h3&gt; 
&lt;p papago-id=&quot;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;10개의 그룹으로 나누어진 10^7개의 열을 시도해 보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df &amp;lt;- data.frame(dive=factor(sample(letters[1:10],10^7,replace=TRUE)),speed=runif(10^7))
dt &amp;lt;- data.table(df)
setkey(dt,dive)

m2 &amp;lt;- microbenchmark(
  by( df$speed, df$dive, mean),
  aggregate( speed ~ dive, df, mean ),
  splitmean(df),
  ddply( df, .(dive), function(x) mean(x$speed) ),
  dcast( melt(df), variable ~ dive, mean),
  dt[,mean(speed),by=dive],
  times=2
)

&amp;gt; print(m2, signif = 3)
Unit: milliseconds
                                           expr   min    lq    mean median    uq   max neval      cld
                    by(df$speed, df$dive, mean)   720   770   799.1    791   816   958   100    d    
              aggregate(speed ~ dive, df, mean) 10900 11000 11027.0  11000 11100 11300   100        h
                                  splitmean(df)   974  1040  1074.1   1060  1100  1280   100     e   
  ddply(df, .(dive), function(x) mean(x$speed))  1050  1080  1110.4   1100  1130  1260   100      f  
         dcast(melt(df), variable ~ dive, mean)  2360  2450  2492.8   2490  2520  2620   100       g 
                   dt[, mean(speed), by = dive]   119   120   126.2    120   122   212   100 a       
 summarize(group_by(df, dive), m = mean(speed))   517   521   531.0    522   532   620   100   c     
 summarize(group_by(dt, dive), m = mean(speed))   154   155   174.0    156   189   321   100  b      

autoplot(m2)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/evAhu.png&quot; alt=&quot;benchmark 1e7 rows, 10 groups&quot;&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;56&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고나서&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data.table&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;57&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dplyr&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;data.table&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;s는 분명히 가야할 길입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정 접근 방식(&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;aggregate&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;60&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dcast&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;61&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매우 느리게 보이기 시작했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h3 papago-id=&quot;84&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;천만 줄, 천 그룹&lt;/font&gt;&lt;/h3&gt; 
&lt;p papago-id=&quot;85&quot; papago-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;85-1&quot;&gt;1,000개의 그룹&lt;/strong&gt;과 동일한 10^7개의 행이 있는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df &amp;lt;- data.frame(dive=factor(sample(seq(1000),10^7,replace=TRUE)),speed=runif(10^7))
dt &amp;lt;- data.table(df)
setkey(dt,dive)

# then run the same microbenchmark as above
print(m3, signif = 3)
Unit: milliseconds
                                           expr   min    lq    mean median    uq   max neval    cld
                    by(df$speed, df$dive, mean)   776   791   816.2    810   828   925   100  b    
              aggregate(speed ~ dive, df, mean) 11200 11400 11460.2  11400 11500 12000   100      f
                                  splitmean(df)  5940  6450  7562.4   7470  8370 11200   100     e 
  ddply(df, .(dive), function(x) mean(x$speed))  1220  1250  1279.1   1280  1300  1440   100   c   
         dcast(melt(df), variable ~ dive, mean)  2110  2190  2267.8   2250  2290  2750   100    d  
                   dt[, mean(speed), by = dive]   110   111   113.5    111   113   143   100 a     
 summarize(group_by(df, dive), m = mean(speed))   625   630   637.1    633   644   701   100  b    
 summarize(group_by(dt, dive), m = mean(speed))   129   130   137.3    131   142   213   100 a     

autoplot(m3)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/vscbF.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;62&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇게&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data.table&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;63&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;계속해서 잘 확장되고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dplyr&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;64&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작동하는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data.table&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;65&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 잘 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dplyr&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;66&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data.frame&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;거의 10배 가까이 더 느린 속도입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;split&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;sapply&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;69&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전략은 그룹의 수에서 형편없이 확장되는 것처럼 보입니다(즉,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;split()&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;sapply&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;71&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;빠름).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;by&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;72&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;5초면 사용자에게 확실히 눈에 띄지만 이 정도 크기의 데이터셋의 경우에는 여전히 합리적이지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 이 정도 크기의 데이터셋을 일상적으로 사용한다면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data.table&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;73&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;100% data.table을 통해 최고의 성능을 발휘할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dplyr&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;dplyr&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;75&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data.table&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;strong papago-id=&quot;101&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;dplyr를 사용한 2015 업데이트:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df %&amp;gt;% group_by(dive) %&amp;gt;% summarise(percentage = mean(speed))
Source: local data frame [2 x 2]

   dive percentage
1 dive1  0.4777462
2 dive2  0.6726483
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;aggregate(speed~dive,data=df,FUN=mean)
   dive     speed
1 dive1 0.7059729
2 dive2 0.5473777
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;102&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다양한 경우에도 빠르게 유지되는 대체 베이스 R 접근법을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;rowsummean &amp;lt;- function(df) {
  rowsum(df$speed, df$dive) / tabulate(df$dive)
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;103&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@Ari에서 벤치마크를 빌리는 중:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;104&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;열개의 행, 두 그룹&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/BnMPr.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/BnMPr.png&quot; alt=&quot;res1&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;105&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;천만 줄, 열 그룹&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/S7x5c.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/S7x5c.png&quot; alt=&quot;res2&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;106&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1000만 행, 1000개&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QULfL.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QULfL.png&quot; alt=&quot;res3&quot;&gt;&lt;/a&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;across&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&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df %&amp;gt;% 
  group_by(dive) %&amp;gt;% 
  summarise(across(speed, mean, na.rm = TRUE))
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;79&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리는 이미 그룹별로 비열한 선택을 할 수 있는 수많은 옵션을 가지고 있고, 여기에 하나를 더 추가했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mosaic&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;mosaic::mean(speed~dive, data = df)
#dive1 dive2 
#0.579 0.440 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;81&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 명명된 숫자 벡터를 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 필요한 경우 데이터 프레임으로 감쌀 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;stack&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;stack(mosaic::mean(speed~dive, data = df))

#  values   ind
#1  0.579 dive1
#2  0.440 dive2
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;112&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;set.seed(123)
df &amp;lt;- data.frame(dive=factor(sample(c(&quot;dive1&quot;,&quot;dive2&quot;),10,replace=TRUE)),
                 speed=runif(10))
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;82&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;으로.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;collapse&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;library(collapse)
library(magrittr)
df %&amp;gt;% 
   fgroup_by(dive) %&amp;gt;%
   fsummarise(speed = fmean(speed))
#   dive     speed
#1 dive1 0.5788479
#2 dive2 0.4401514
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3 papago-id=&quot;114&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터.&lt;/font&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;set.seed(123)
df &amp;lt;- data.frame(dive=factor(sample(c(&quot;dive1&quot;,&quot;dive2&quot;),10,replace=TRUE)),
             speed=runif(10))
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;115&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;RCchelsie에서 제공하는 답변 확장 - 평균을 구하려면 데이터 프레임의 모든 열에 대해 그룹별로 계산합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;df %&amp;gt;% 
  group_by(dive) %&amp;gt;% 
  summarise(across(.cols=everything(), mean, na.rm=TRUE))
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;83&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1.1.0&lt;/code&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;(그리고 위)를 사용하여 일시적으로 그룹화할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.by&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;85&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;논쟁.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;86&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 코드가 짧아집니다(피합니다).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;group_by&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;87&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ungroup&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;88&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;및문)를 포함합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.by&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&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;library(dplyr)

df %&amp;gt;% summarise(speed = mean(speed), .by = dive)

#   dive     speed
#1 dive1 0.5788479
#2 dive2 0.4401514
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;90&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 함께&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;timeplyr&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 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;92&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;케이크로 말입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;tidy&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;93&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구문과 그것을 먹는다는 것은 케이크가 엄청 빠르다는 것을 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;stat_summarise()&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;혼합하여 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;collapse&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;code&gt;data.table&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;96&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dplyr&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&gt;&lt;code&gt;tidy&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;98&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;통사론&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;99&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 효율적인 방법은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data.table&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;100&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font 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-r prettyprint-override&quot;&gt;&lt;code&gt;# remotes::install_github(&quot;NicChr/timeplyr&quot;)
library(plyr)
library(dplyr)
library(ggplot2)
library(timeplyr)
library(data.table)

dt &amp;lt;- data.table(dive = factor(sample.int(10^6, size = 10^7, replace=TRUE)),
                 speed = runif(10^7))
setkey(dt, dive)

m2 &amp;lt;- microbenchmark::microbenchmark(
  dt[,mean(speed),by=dive],
  stat_summarise(dt, .cols = &quot;speed&quot;, 
                 .by = dive, stat = &quot;mean&quot;, sort = F),
  times = 15
)

print(m2, signif = 3)
#&amp;gt; Unit: milliseconds
#&amp;gt;                                                                           expr
#&amp;gt;                                                   dt[, mean(speed), by = dive]
#&amp;gt;  stat_summarise(dt, .cols = &quot;speed&quot;, .by = dive, stat = &quot;mean&quot;,      sort = F)
#&amp;gt;  min  lq mean median  uq max neval cld
#&amp;gt;  148 184  272    261 344 499    15   a
#&amp;gt;  139 197  283    221 328 540    15   a
autoplot(m2)
#&amp;gt; Coordinate system already present. Adding new coordinate system, which will
#&amp;gt; replace the existing one.
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1 papago-id=&quot;134&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;천만 행, ~ 백만 그룹&lt;/font&gt;&lt;/h1&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/53pMTSZ.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt; 
&lt;p&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&gt;&lt;code&gt;stat_summarise()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;102&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제로 보다 훨씬 더 효율적입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;data.table&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;103&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-r prettyprint-override&quot;&gt;&lt;code&gt;# Memory comparison
bench::mark(
  DT = dt[, list(speed = mean(speed)), by = dive],
  TP = stat_summarise(dt, .cols = &quot;speed&quot;, 
                 .by = dive, stat = &quot;mean&quot;, sort = F),
  check = FALSE
)
#&amp;gt; Warning: Some expressions had a GC in every iteration; so filtering is disabled.
#&amp;gt; # A tibble: 2 x 6
#&amp;gt;   expression      min   median `itr/sec` mem_alloc `gc/sec`
#&amp;gt;   &amp;lt;bch:expr&amp;gt; &amp;lt;bch:tm&amp;gt; &amp;lt;bch:tm&amp;gt;     &amp;lt;dbl&amp;gt; &amp;lt;bch:byt&amp;gt;    &amp;lt;dbl&amp;gt;
#&amp;gt; 1 DT            194ms    308ms      3.25     248MB     4.87
#&amp;gt; 2 TP            133ms    277ms      3.61    68.7MB     1.81
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;sup papago-id=&quot;138&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2023-05-19에 &lt;a href=&quot;https://reprex.tidyverse.org&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;138-1&quot;&gt;repex v2.0.2&lt;/a&gt;로 생성됨&lt;/font&gt;&lt;/sup&gt;&lt;/p&gt;&lt;p papago-id=&quot;139&quot; papago-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/11562656/calculate-the-mean-by-group&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>dataframe</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/717</guid>
      <comments>https://stoneblock.tistory.com/717#entry717comment</comments>
      <pubDate>Sat, 21 Oct 2023 09:54:33 +0900</pubDate>
    </item>
    <item>
      <title>양식에 대한 AJAX 포스트 요청에서 CSRF 토큰을 전달하는 방법은?</title>
      <link>https://stoneblock.tistory.com/716</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;양식에 대한 AJAX 포스트 요청에서 CSRF 토큰을 전달하는 방법은?&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;Scala Play! 2.6 Framework를 사용하고 있지만 문제가 되지 않을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 그들의 자바스크립트 라우팅을 사용하고 있습니다. 그리고 그것은 정상적으로 작동하는 것처럼 보이지만 문제가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;렌더링 시 CSRF 토큰이 포함된 양식이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;form method=&quot;post&quot; id=&quot;myForm&quot; action=&quot;someURL&quot;&amp;gt;

&amp;lt;input name=&quot;csrfToken&quot; value=&quot;5965f0d244b7d32b334eff840...etc&quot; type=&quot;hidden&quot;&amp;gt;
  &amp;lt;input type=&quot;text&quot; id=&quot;sometext&quot;&amp;gt;
  &amp;lt;button type=&quot;submit&quot;&amp;gt; Submit! &amp;lt;/button&amp;gt;

&amp;lt;/form&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;그리고 대략 여기, 나의 AJAX:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).on('submit', '#myForm', function (event) {

 event.preventDefault();
   var data = {
    textvalue: $('#sometext').val()
   }
 var route = jsRoutes.controllers.DashboardController.postNewProject()
 $.ajax({
    url: route.url,
    type: route.type,
    data : JSON.stringify(data),
    contentType : 'application/json',
    success: function (data) { ...      },
    error: function (data) { ...  }
        })

});
&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;그러나 이 글을 올리자 서버에서 무단 응답이 반환되고 IntelliJ의 콘솔에서 CSRF 검사가 실패하고 있다는 메시지가 나타납니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;요청 시 CSRF 토큰을 어떻게 전달해야 합니까?&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;a href=&quot;https://www.playframework.com/documentation/2.6.x/ScalaCsrf&quot; rel=&quot;noreferrer&quot; papago-id=&quot;4-1&quot;&gt;문서&lt;/a&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;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;브라우저 이외의 요청에 대한 간단한 보호를 허용하기 위해 재생은 헤더에 쿠키가 있는 요청만 확인합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AJAX를 사용하여 요청을 하는 경우, HTML 페이지에 CSRF 토큰을 배치한 후, 해당 토큰을 사용하여 요청에 추가할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Csrf-Token&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;/blockquote&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 코드나 예시가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Thanks Play.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;설명력이 뛰어나네요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어쨌든, 다음은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;view.html.formTemplate&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;IntelliJ로 다음과 같이 적을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@()
&amp;lt;form method=&quot;post&quot; id=&quot;myForm&quot; action=&quot;someURL&quot;&amp;gt;

@helper.CSRF.formField  &amp;lt;!-- This auto-generates a token for you --&amp;gt;
  &amp;lt;input type=&quot;text&quot; id=&quot;sometext&quot;&amp;gt;
  &amp;lt;button type=&quot;submit&quot;&amp;gt; Submit! &amp;lt;/button&amp;gt;

&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 이는 고객에게 전달될 때 다음과 같이 렌더링됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;form method=&quot;post&quot; id=&quot;myForm&quot; action=&quot;someURL&quot;&amp;gt;

&amp;lt;input name=&quot;csrfToken&quot; value=&quot;5965f0d244b7d32b334eff840...etc&quot; type=&quot;hidden&quot;&amp;gt;
  &amp;lt;input type=&quot;text&quot; id=&quot;sometext&quot;&amp;gt;
  &amp;lt;button type=&quot;submit&quot;&amp;gt; Submit! &amp;lt;/button&amp;gt;

&amp;lt;/form&amp;gt;
&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;좋아요, 거의 다 왔어요, 이제 AJAX 콜을 만들어야 해요.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 내 모든 것을 별도의 main.js 파일에 가지고 있지만, 이것을 당신의 파일에 넣을 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;view.html.formTemplate&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;$(document).on('submit', '#myForm', function (event) {

 event.preventDefault();
   var data = {
    myTextToPass: $('#sometext').val()
   }
 // LOOK AT ME! BETWEEN HERE AND
 var token =  $('input[name=&quot;csrfToken&quot;]').attr('value')
    $.ajaxSetup({
        beforeSend: function(xhr) {
            xhr.setRequestHeader('Csrf-Token', token);
        }
    });
// HERE
 var route = jsRoutes.controllers.DashboardController.postNewProject()
 $.ajax({
    url: route.url,
    type: route.type,
    data : JSON.stringify(data),
    contentType : 'application/json',
    success: function (data) { ...      },
    error: function (data) { ...  }
        })

});
&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;다음 줄 사용:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;var token = $('input[name=&quot;csrfToken&quot;]').attr('value')&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;폼 필드에서 자동으로 생성된 CSRF 토큰을 뽑아내고 자바스크립트에서 사용할 var에서 값을 잡고 있습니다.&lt;/font&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;AJAX의 또 다른 중요한 부분은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.ajaxSetup({
            beforeSend: function(xhr) {
                xhr.setRequestHeader('Csrf-Token', token);
            }
        });
&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;$.ajaxSetup&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 머리글에 있는 것을 설정할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 그들의 문서에서 추론해야 할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&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;Crf-Token 헤더를 사용하여 요청에 추가합니다.&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;행운을 빕니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 확실하면 저에게 알려주십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&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;strong papago-id=&quot;21-0&quot;&gt;참고&lt;/strong&gt;: &lt;a href=&quot;https://github.com/krakenjs/lusca&quot; papago-id=&quot;21-2&quot; rel=&quot;noreferrer&quot;&gt;lusca&lt;/a&gt;를 사용할 때 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;X-CSRF-Token&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;Csrf-Token&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JSP발&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;form method=&quot;post&quot; id=&quot;myForm&quot; action=&quot;someURL&quot;&amp;gt;
    &amp;lt;input name=&quot;csrfToken&quot; value=&quot;5965f0d244b7d32b334eff840...etc&quot; type=&quot;hidden&quot;&amp;gt;    
&amp;lt;/form&amp;gt;
&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;이것이 3시간 동안 고생한 나에게 가장 간단한 방법입니다. 이렇게 입력 히든 필드에서 토큰을 가져와 AJAX 요청을 하면서 다음과 같이 헤더에 토큰을 전달하기만 하면 됩니다:-&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;JQuery에서&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var token =  $('input[name=&quot;csrfToken&quot;]').attr('value'); 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반 자바스크립트에서&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var token = document.getElementsByName(&quot;csrfToken&quot;).value;
&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;최종 AJAX 요청&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.ajax({
          url: route.url,
          data : JSON.stringify(data),
          method : 'POST',
          headers: {
                        'X-CSRFToken': token 
                   },
          success: function (data) { ...      },
          error: function (data) { ...  }
});
&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;이제 웹 구성에서 crsf 보안을 비활성화할 필요가 없으며 콘솔에서 405(Method Not Allowed) 오류도 발생하지 않습니다.&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;!!&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 사용하여 요청에 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Csrf-Token&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;/blockquote&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;헤더 이름을 &lt;strong papago-id=&quot;33-1&quot;&gt;알려주신&lt;/strong&gt; Nate H06님께 감사드립니다!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아약스 함수 호출이 있는 &quot;삭제&quot; 버튼을 위해 crf 토큰을 보내려다가 다음과 같이 막혔습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@import helper._
....
&amp;lt;button id=&quot;deleteBookBtn&quot; class=&quot;btn btn-danger&quot;
        data-csrf-name=&quot;@helper.CSRF.getToken.name&quot;
        data-csrf-value=&quot;@helper.CSRF.getToken.value&quot;
        data-delete-url=&quot;@routes.BooksController.destroy(book.id)&quot;
        data-redirect-url=&quot;@routes.HomeController.index()&quot;&amp;gt;Delete&amp;lt;/button&amp;gt;
&lt;/code&gt;&lt;/pre&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;온라인 js를 추가하지 못했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;onclick()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2.6 플레이에 CSP 세트로 인해 이벤트도 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인라인 이벤트 처리기가 컨텐츠 보안 정책 지침인 &quot;default-src 'self'&quot;를 위반하므로 실행을 거부했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 JS 파일에:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function sendDeleteRequest(event) {
  url = event.target.getAttribute(&quot;data-delete-url&quot;)
  redirect = event.target.getAttribute(&quot;data-redirect-url&quot;)
  csrfTokenName = event.target.getAttribute(&quot;data-csrf-name&quot;)
  csrfTokenValue = event.target.getAttribute(&quot;data-csrf-value&quot;)
  $.ajax({
    url: url,
    method: &quot;DELETE&quot;,
    beforeSend: function(request) {
      //'Csrf-Token' is the expected header name, not $csrfTokenName
      request.setRequestHeader(/*$csrfTokenName*/'Csrf-Token', csrfTokenValue);
    },
    success: function() {
      window.location = redirect;
    },
    error: function() {
      window.location.reload();
    }
  })
}

var deleteBookBtn = document.getElementById(&quot;deleteBookBtn&quot;);
if(deleteBookBtn) {
    deleteBookBtn.addEventListener(&quot;click&quot;, sendDeleteRequest);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;머리글 이름을 다음과 같이 설정한 후&lt;/font&gt;&lt;/font&gt;&lt;code&gt;'Csrf-Token'&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;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;재생 백엔드/반응 프론트엔드 조합에 대해 동일한 문제로 어려움을 겪고 있습니다. 그래서 토큰 in html 페이지 기법을 사용할 수 없게 되었습니다. 결국 쿠키에 현재 토큰을 설정하는 다른 솔루션을 발견했습니다. 간단히 다음을 추가하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;play.filters.csrf {
  cookie.name = &quot;csrftoken&quot;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;application.conf 및 the.에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;csrftoken&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;cookie가 토큰으로 설정됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 https://www.npmjs.com/package/js-cookie 을 사용하여 JS 코드에 있는 값을 잡고 요청 헤더에 다시 보냈습니다. OP에 대해서는 jQuery가 아닌 React이기 때문에 문제를 혼동하고 싶지 않기 때문에 여기에 코드를 포함하지 않았습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Csrf-Token&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;머리글로 붙이기&lt;/font&gt;&lt;/font&gt;&lt;code&gt;headers&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 class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;$.ajax({
    url: '@routes.MyController.myPostAction()',
    method: 'post',
    headers: {
        'Csrf-Token': '@play.filters.csrf.CSRF.getToken.map(_.value)'
    },
    data: {
        name: '@name'
    },
    success: function (data, textStatus, jqXHR) {
        location.reload();
    },
    error: function (jqXHR, textStatus, errorThrown) {
        debugger;
    }
});
&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;a href=&quot;https://www.playframework.com/documentation/2.6.x/ScalaCsrf#Plays-CSRF-protection&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;24-1&quot;&gt;Play Framework 2.6 Documentation&lt;/a&gt;에 명시되어 있는 것처럼 '를 설정할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Csrf-Token&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;' Play에서 생성된 토큰으로 머리글:&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;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AJAX를 사용하여 요청을 하는 경우, HTML 페이지에 CSRF 토큰을 배치한 후, 해당 토큰을 사용하여 요청에 추가할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Csrf-Token&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;/blockquote&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;Scala-Template 내에서 다음을 사용하여 토큰 값을 얻을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@helper.CSRF.getToken.value&lt;/code&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;a href=&quot;https://api.jquery.com/jQuery.ajax/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;51-1&quot;&gt;jQuery Documentation&lt;/a&gt;에 따라 &lt;a href=&quot;https://api.jquery.com/jQuery.ajaxSetup/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;51-3&quot;&gt;jaxSetup&lt;/a&gt;을 사용하여 jQuery를 구성하여 모든 Ajax 요청에 대해 한 번 설정할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.ajaxSetup({
  beforeSend: function(xhr) {
    xhr.setRequestHeader('Csrf-Token', '@helper.CSRF.getToken.value');
  }
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 모든 요청에 대해 헤더를 설정할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;headers&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;pre&gt;&lt;code&gt;$.ajax({
  url: route.url,
  ...
  headers: {
    'Csrf-Token': '@helper.CSRF.getToken.value'
  }
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;54-0&quot;&gt;slim crf gurd&lt;/strong&gt;, jQuery에서 crf 키와 토큰을 전달하는 방법 twig와 함께 slim application을 위한 방법&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).ready(function(){
    $.ajaxPrefilter(function(options, originalOptions, jqXHR){

        var allowedMethod = [&quot;post&quot;, &quot;put&quot;, &quot;delete&quot;];

        if (allowedMethod.includes(options.type.toLowerCase())  ) {
            // initialize `data` to empty string if it does not exist
            options.data = options.data || &quot;&quot;;

            // add leading ampersand if `data` is non-empty
            options.data += options.data?&quot;&amp;amp;&quot;:&quot;&quot;;

            // add _token entry
            options.data += &quot;{{csrf.keys.name}}={{csrf.name}}&amp;amp;{{csrf.keys.value}}={{csrf.value}}&quot;;
        }
    });
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/45470802/how-to-pass-along-csrf-token-in-an-ajax-post-request-for-a-form&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Ajax</category>
      <author>stoneblock</author>
      <guid isPermaLink="true">https://stoneblock.tistory.com/716</guid>
      <comments>https://stoneblock.tistory.com/716#entry716comment</comments>
      <pubDate>Sat, 21 Oct 2023 09:54:18 +0900</pubDate>
    </item>
  </channel>
</rss>