<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>codeshow</title>
    <link>https://codeshow.tistory.com/</link>
    <description>각종 프로그래밍 정보를 다루는 블로그입니다.</description>
    <language>ko</language>
    <pubDate>Thu, 23 Jul 2026 01:34:08 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>codeshow</managingEditor>
    <item>
      <title>Wordpress 플러그인 - 자체 호스팅 업데이트</title>
      <link>https://codeshow.tistory.com/840</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;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;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;제 질문은 plugins_api 필터를 다른 플러그인과 충돌하지 않고 여러 번 적용하려면 어떻게 해야 합니까?&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;font class=&quot;papago-parent&quot;&gt;Brad and Ozh (플러그인 개발) 책까지.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Wrox)는 267페이지의 &quot;당신만의 API 저장소 만들기&quot; 장에 있는 예제의 오류를 포함합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신처럼 대체 API에서 플러그인 두 개로 문제를 찾는 데 시간을 소비했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;4-0&quot;&gt;해결책:&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;WP 필터의 첫 번째 파라미터는 필터에 전달된 원래 값입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;필터(대체 API를 사용하여 플러그인별로 나열됨)를 연결하려면...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫번째 줄은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function xiliw_altapi_information( $false, $action, $args ) {
    $plugin_slug = plugin_basename( __FILE__ );
        // Check if this plugins API is about this plugin
        if( $args-&amp;gt;slug != $plugin_slug ) {
            return $false; // var to conserve the value of previous filter of plugins list in alternate api. fixes book error not val false
        }

        // POST data to send to your API
        $args = array(
            'action' =&amp;gt; 'plugin_information',
            'plugin_name' =&amp;gt; $plugin_slug,
            'version' =&amp;gt; $transient-&amp;gt;checked[$plugin_slug],
            'registration' =&amp;gt; $this-&amp;gt;registration
        );//../..
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;em papago-id=&quot;5&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 papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시간이 된다면 이 대체 강력한 API를 관리하기 위한 클래스와 -private-plugin에 추가하는 방법에 대한 좀 더 완벽한 기사를 곧 발표할 것입니다.&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;URL : https://stackoverflow.com/questions/7074616/wordpress-plugin-self-hosted-update&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>WordPress</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/840</guid>
      <comments>https://codeshow.tistory.com/840#entry840comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:05:21 +0900</pubDate>
    </item>
    <item>
      <title>$locationChangeSuccess와 $locationChangeStart의 차이점은 무엇입니까?</title>
      <link>https://codeshow.tistory.com/839</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;$locationChangeSuccess와 $locationChangeStart의 차이점은 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 점이 뭐죠?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$locationChangeSuccess&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;$locationChangeStart&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;둘 다 다음과 관련된 문서화되지 않은 사건입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;window.location&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$locationChangeStart&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular일 때 발사됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS는 다음을 통해 수행된 돌연변이를 기반으로 브라우저의 위치를 업데이트하기 시작합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$location&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;$location.path()&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;$location.search()&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;$locationChangeStart&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이벤트 및 호출 예정&lt;/font&gt;&lt;/font&gt;&lt;code&gt;preventDefault()&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;$locationChangeSuccess&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;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;$locationChangeStart&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 class=&quot;papago-parent&quot;&gt;그 뒤를 잇습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$locationChangeSuccess&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;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;소스 코드의 관련 비트는 다음과 같습니다. https://github.com/angular/angular.js/blob/2508b47c1a34dfc834f8fde858574f81af4d287e/src/ng/location.js#L598&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/15006849/whats-the-difference-between-locationchangesuccess-and-locationchangestart&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>AngularJS</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/839</guid>
      <comments>https://codeshow.tistory.com/839#entry839comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:05:15 +0900</pubDate>
    </item>
    <item>
      <title>구글 애널리틱스로 IF 프레임에서 클릭을 추적하는 방법?</title>
      <link>https://codeshow.tistory.com/838</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구글 애널리틱스로 IF 프레임에서 클릭을 추적하는 방법?&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;자체 호스팅하는 워드프레스 사이트에서 iframe 내 아웃바운드 클릭을 추적하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미 Google Analytics를 사용하여 인바운드 방문자(헤더의 GA 코드)를 추적하고 있지만, 각 페이지의 iframe 내 링크를 클릭하는 방문자가 몇 명인지 알고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고로, iframe은 외부 광고주로부터 온 것입니다.&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;이것은 제가 받은 iframe 코드입니다(실제 이름 대신 샘플 이름 사용).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;iframe src=&quot;http://www.advertisersite123.com//widget.html?width=510&amp;amp;height=950&amp;amp;product=2&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; width=&quot;510&quot; height=&quot;950&quot;&amp;gt;&amp;lt;/iframe&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드 줄은 현재 single.php에 붙여넣어 페이지 하단의 모든 게시물에 링크 테이블을 표시합니다.&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;이 iframe에서 몇 번의 클릭(일반적으로 클릭만 해도 괜찮습니다, 어디로 가는지 알 필요는 없습니다)이 발생하는지 알고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이상적으로 iframe 내에서 어떤 URL이 더 성공적으로 클릭을 생성하는지 확인할 수 있도록 웹사이트의 각 개별 URL별로 분류합니다.&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;그리고 가능하다면 iframe에서 클릭을 통해 (출처별) 내 웹사이트 방문자를 알려주는 깔때기를 만들고 싶습니다.&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;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 도움에 감사드립니다. 감사합니다!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 요구하는 것은 쉽게 이루어지지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 동일한 도메인에서 호스팅되지 않는 경우 iframed 페이지의 이벤트에 연결할 수 있는 javascript를 상위 페이지에 가질 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;iframe 페이지가 상위 페이지의 DOM에 탭을 시도하는 경우에도 마찬가지입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 사이트 간 스크립팅(XSS)이라고 하는데, 이는 동일한 도메인 원본 정책에 어긋납니다.&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;최소한 아이프레임 페이지에 GA 코드를 넣는 것이 가장 쉬운 방법입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 이는 공급업체에 문의하는 것이 나쁠 수는 없지만, 여러분이 할 수 있는 일은 아닐 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 일부 공급업체(보통 Facebook, Google 및 Twitter와 같은 소셜 미디어 공급업체)는 정보가 포함된 프레임을 출력하는 위젯을 보유하게 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이들은 iframe의 DOM을 이용할 수 있는 교차 도메인 스크립팅을 허용하도록 서버를 설정할 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 관련 이벤트(공유 이벤트 등)에 쉽게 연결할 수 있는 위젯과 함께 API를 제공하므로 직접 코딩할 필요가 없습니다.&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;기본적으로 말하면 iframe 도메인의 담당자가 개입하지 않고는 추적할 방법이 없습니다.&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;이 jQuery &lt;a href=&quot;https://github.com/finalclap/iframeTracker-jquery&quot; rel=&quot;nofollow&quot; papago-id=&quot;12-1&quot;&gt;플러그인&lt;/a&gt;을 사용하면 I프레임을 추적할 수 있습니다.&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;클릭이 iframe을 벗어나는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;_gaq.push(['_trackEvent', eventCategory, eventAtion, eventLabel]);
&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;클릭이 iframe 안에 있으면 다음을 사용해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;window.parent._gaq.push(['_trackEvent', eventCategory, eventAtion, eventLabel]);
&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;이것은 오래된 스레드이지만 어쨌든 도움이 될 수 있습니다. 특히 2023년 7월 1일부터 Universal Analytics가 더 이상 지원되지 않는 GA4를 사용하는 솔루션이기 때문입니다.&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;정확한 위치에 상관없이 iframe의 어느 영역에서나 클릭을 추적할 수 있는 Google Track Manager와 GA4를 사용하여 솔루션을 찾았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;iframe 전용 GTM 컨테이너를 설치하거나 iframe 타사 개발자에게 연락하여 발신자에게 데이터를 다시 제공할 필요가 없기 때문에 이 솔루션이 마음에 들었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 꽤 간단합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 저는 이 링크에서 설명한 것과 같은 단계를 정확히 수행했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://ezsegment.com/tracking-iframe-interactions-using-gtm/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://ezsegment.com/tracking-iframe-interactions-using-gtm/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저한테는 통했어요&lt;/font&gt;&lt;/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/18966960/how-to-track-clicks-in-an-iframe-with-google-analytics&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>WordPress</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/838</guid>
      <comments>https://codeshow.tistory.com/838#entry838comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:05:09 +0900</pubDate>
    </item>
    <item>
      <title>PowerShell로 특정 이름의 폴더를 재귀적으로 삭제하려면 어떻게 해야 합니까?</title>
      <link>https://codeshow.tistory.com/837</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell로 특정 이름의 폴더를 재귀적으로 삭제하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 폴더에서 특정 확장명을 가진 파일을 다음과 같이 삭제할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Get-childitem * -include *.scc -recurse | remove-item
&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;그러나 나는 또한 특정 이름을 가진 폴더를 삭제해야 합니다 - 특히 subversion repo에서 파일을 풀다운할 때 subversion이 (.svn&quot; 또는 &quot;_svn&quot;) 생성하는 폴더.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 &lt;a href=&quot;http://www.tigraine.at/2009/11/24/removing-svn-folders-with-powershell/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;3-1&quot;&gt;사람&lt;/a&gt;이 해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;get-childitem -Include .svn -Recurse -force | Remove-Item -Force -Recurse
&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;a href=&quot;http://www.vistax64.com/powershell/80403-pecursive-delete-implementation-powershell.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;4-0&quot;&gt;기타&lt;/a&gt; 버전:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$fso = New-Object -com &quot;Scripting.FileSystemObject&quot;
$folder = $fso.GetFolder(&quot;C:\Test\&quot;)

foreach ($subfolder in $folder.SubFolders)
{
    If ($subfolder.Name -like &quot;*.svn&quot;)
    {
        remove-item $subfolder.Path -Verbose
    }       
}
&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;-Include&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매개 변수 on&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Get-ChildItem&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;-Filter&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;-Filter&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;), 다음과 같이 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Get-ChildItem . -Include .svn,_svn -Recurse -Force | Remove-Item -Recurse -Force
&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;ls . -inc .svn,_svn -r -fo | ri -r -fo
&lt;/code&gt;&lt;/pre&gt;&lt;h2 papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;빠른 삭제를 위해 -Filter를 사용합니다.&lt;/font&gt;&lt;/h2&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;strong papago-id=&quot;5-1&quot;&gt;특정 이름을 가진 폴더&lt;/strong&gt;를 재귀적으로 삭제하려면 다음과 같이 하십시오.&lt;/font&gt;&lt;/font&gt; &lt;code&gt;-Filter&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;-Include&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@Keith의 답변 중 가시성 향상을 위한 빠른 버전은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;완전히 타이핑:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Get-ChildItem -Filter .svn -Recurse -Force | Remove-Item -Recurse -Force
&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;ls . -filter .svn -r -fo | ri -r -fo
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3648142/how-can-i-recursively-delete-folder-with-a-specific-name-with-powershell&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>PowerShell</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/837</guid>
      <comments>https://codeshow.tistory.com/837#entry837comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:05:02 +0900</pubDate>
    </item>
    <item>
      <title>민첩한 업로더 워드프레스 구현</title>
      <link>https://codeshow.tistory.com/836</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;민첩한 업로더 워드프레스 구현&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;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제는 자료를 보내려고 양식에 있는 제출 버튼을 클릭하면 모든 필드가 게시물에 저장되지만 이미지는 그렇지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업로드 페이지 코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;form id=&quot;submitForm&quot; action=&quot;&amp;lt;?php echo get_permalink(); ?&amp;gt;&quot; method=&quot;post&quot; enctype=&quot;multipart/form-data&quot; onsubmit=&quot;return ray.ajax()&quot;&amp;gt;
&amp;lt;!-- upload photos --&amp;gt;

  &amp;lt;div style=&quot;float:left;width:410px; height:246px;&quot;&amp;gt;
    &amp;lt;div id=&quot;multiple&quot;&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;

  &amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
    jQuery('#multiple').agileUploader({
      formId: 'submitForm',
      flashVars: {
        file_post_var: 'attachment',
        firebug: false,
        form_action: '',
        file_limit: 15,
        max_post_size: (1000 * 1024)
      }
    }); 
  &amp;lt;/script&amp;gt;

  &amp;lt;/div&amp;gt;   &amp;lt;!-- end - upload photos --&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;워드프레스 업로드 코드 (같은 파일에 있음)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/* upload photos */
if ($post_error == false) {

  /* required files */
  require_once(ABSPATH . &quot;wp-admin&quot; . '/includes/image.php');
  require_once(ABSPATH . &quot;wp-admin&quot; . '/includes/file.php');
  require_once(ABSPATH . &quot;wp-admin&quot; . '/includes/media.php');

  $files = $_FILES['attachment'];

  if ($files) { 

    foreach ($files['name'] as $key =&amp;gt; $value) {
      if ($files['name'][$key]) {
        $file = array(
          'name' =&amp;gt; $files['name'][$key],
          'type' =&amp;gt; $files['type'][$key],
          'tmp_name' =&amp;gt; $files['tmp_name'][$key],
          'error' =&amp;gt; $files['error'][$key],
          'size' =&amp;gt; $files['size'][$key]
        );  
      }

      $_FILES = array(&quot;attachment&quot; =&amp;gt; $file);
      //$_FILES = array_reverse($_FILES);
      foreach ($_FILES as $file =&amp;gt; $array) {                                  
        $attach_id = media_handle_upload( $file, $ad_id, array(), array( 'test_form' =&amp;gt; false ) );
        if ($attach_id &amp;lt; 0) { $post_error = true;
      }
    }
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 뭘 잘못하고 있는 거지?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작성한 게시물에 이미지가 '첨부'로 저장되지 않아도 됩니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행 시도:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$attachments = get_posts( array(
'post_type' =&amp;gt; 'attachment',
'posts_per_page' =&amp;gt; -1,
'post_parent' =&amp;gt; $post-&amp;gt;ID,
'exclude'     =&amp;gt; get_post_thumbnail_id()) 
);
var_dump($attachments);
&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;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://wordpress.org/plugins/list-attachments-shortcode/&quot; papago-id=&quot;8-1&quot; rel=&quot;nofollow&quot;&gt;이 &lt;/a&gt;&quot;List &lt;a href=&quot;http://wordpress.org/plugins/list-attachments-shortcode/&quot; papago-id=&quot;8-1&quot; rel=&quot;nofollow&quot;&gt;Attachments Shortcode&quot;&lt;/a&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;}&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;)후에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;if ($attach_id &amp;lt; 0) { $post_error = true;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 당신의 실제 코드에 있는 것입니까 아니면 단지 위의 질문에 그것을 넣는 것을 잊어버린 것입니까?&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/13840906/agile-uploader-wordpress-implementation&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>WordPress</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/836</guid>
      <comments>https://codeshow.tistory.com/836#entry836comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:04:55 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트를 통해 CSS 사용자 지정 속성(일명 CSS 변수) 접근</title>
      <link>https://codeshow.tistory.com/835</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트를 통해 CSS 사용자 지정 속성(일명 CSS 변수) 접근&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;CSS 사용자 지정 속성(로 액세스하는 속성)을 어떻게 얻고 설정합니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;var(…)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스타일시트에서) 자바스크립트(평판 또는 jQuery)를 사용할 수 있습니까?&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;font-weight&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속성이지만 관습은 아닙니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--mycolor&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 class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
  &amp;lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;style&amp;gt;
    body { 
      --mycolor: yellow;
      background-color: var(--mycolor);
    }
  &amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;

  &amp;lt;p&amp;gt;Let's try to make this text bold and the background red.&amp;lt;/p&amp;gt;
  &amp;lt;button onclick=&quot;plain_js()&quot;&amp;gt;Plain JS&amp;lt;/button&amp;gt;
  &amp;lt;button onclick=&quot;jQuery_()&quot;&amp;gt;jQuery&amp;lt;/button&amp;gt;

  &amp;lt;script&amp;gt;
  function plain_js() { 
    document.body.style['font-weight'] = 'bold';
    document.body.style['--mycolor'] = 'red';
  };
  function jQuery_() {
    $('body').css('font-weight', 'bold');
    $('body').css('--mycolor', 'red');
  }
  &amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용가능&lt;/font&gt;&lt;/font&gt;&lt;code&gt;document.body.style.setProperty('--name', 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&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var bodyStyles = window.getComputedStyle(document.body);
var fooBar = bodyStyles.getPropertyValue('--foo-bar'); //get

document.body.style.setProperty('--foo-bar', newValue);//set
&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;네이티브 솔루션&lt;/font&gt;&lt;/h2&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;CSS3 변수를 얻거나 설정하는 &lt;strong papago-id=&quot;7-1&quot;&gt;표준 방법&lt;/strong&gt;은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.setProperty()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.getPropertyValue()&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;:root&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;// setter
document.documentElement.style.setProperty('--myVariable', 'blue');
// getter
document.documentElement.style.getPropertyValue('--myVariable');
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;12-0&quot;&gt;그러나 게터&lt;/strong&gt;는 를 &lt;strong papago-id=&quot;12-0&quot;&gt;사용&lt;/strong&gt;하여 설정된 &lt;strong papago-id=&quot;12-0&quot;&gt;경우에만 var의 값을 반환&lt;/strong&gt;합니다. CSS 선언을 통해 설정된 경우 를 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;undefined&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 다음 예제에서 확인합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/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;let c = document.documentElement.style.getPropertyValue('--myVariable');
alert('The value of --myVariable is : ' + (c?c:'undefined'));&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;:root{ --myVariable : red; }
div{ background-color: var(--myVariable); }&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;  &amp;lt;div&amp;gt;Red background set by --myVariable&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예상치 못한 행동을 피하기 위해서는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;getComputedStyle()&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;.getPropertyValue()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 그러면 게터는 다음과 같이 보일 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;getComputedStyle(document.documentElement,null).getPropertyValue('--myVariable');
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;em papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 생각에 CSS 변수에 접근하는 것은 더 간단하고 빠르고 직관적이고 자연스러운 것이어야 합니다...&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;h2 papago-id=&quot;20&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;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구현했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CSSGlobalVariables&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문서에 있는 모든 활성 CSS 전역 변수를 자동으로 감지하고 개체에 패킹하여 보다 &lt;strong papago-id=&quot;18-1&quot;&gt;쉽게 접근하고 조작&lt;/strong&gt;할 수 &lt;strong papago-id=&quot;18-1&quot;&gt;있는&lt;/strong&gt; 작은(&amp;lt;3kb) 자바스크립트 도우미.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// get the document CSS global vars
let cssVar = new CSSGlobalVariables();
// set a new value to --myVariable
cssVar.myVariable = 'red';
// get the value of --myVariable
console.log( cssVar.myVariable );
&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;Object 속성에 적용된 변경 내용은 CSS 변수로 자동 변환됩니다.&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;strong papago-id=&quot;24-0&quot;&gt;다음&lt;/strong&gt; 사이트에서 &lt;strong papago-id=&quot;24-0&quot;&gt;사용&lt;/strong&gt; 가능: &lt;strong papago-id=&quot;24-0&quot;&gt;https://github.com/colxi/css-global-variables&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 예제는 CSS 변수라고도 알려진 사용자 지정 CSS 속성을 활용하여 자바스크립트 또는 jQuery를 사용하여 배경을 변경하는 방법을 보여줍니다(&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_variables&quot; rel=&quot;noreferrer&quot; papago-id=&quot;25-1&quot;&gt;여기&lt;/a&gt;서 더 읽어보십시오).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;보너스: 코드는 CSS 변수를 사용하여 글꼴 색을 변경할 수 있는 방법도 나타냅니다.&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 plain_js() { 
    // need DOM to set --mycolor to a different color 
    d.body.style.setProperty('--mycolor', 'red');
     
    // get the CSS variable ...
    bodyStyles = window.getComputedStyle(document.body);
    fontcolor = bodyStyles.getPropertyValue('--font-color'); //get
 
    // ... reset body element to custom property's new value
    d.body.style.color = fontcolor;
    d.g(&quot;para&quot;).style[&quot;font-weight&quot;] = &quot;bold&quot;;
    this.style.display=&quot;none&quot;;
  };

  function jQuery_() {
    $(&quot;body&quot;).get(0).style.setProperty('--mycolor','#f3f');
    $(&quot;body&quot;).css(&quot;color&quot;,fontcolor);
    $(&quot;#para&quot;).css(&quot;fontWeight&quot;,&quot;bold&quot;);
    $(this).css(&quot;display&quot;,&quot;none&quot;);
  }
  
var bodyStyles = null;
var fontcolor = &quot;&quot;;
var d = document;

d.g = d.getElementById;
d.g(&quot;red&quot;).addEventListener(&quot;click&quot;,plain_js);
d.g(&quot;pink&quot;).addEventListener(&quot;click&quot;,jQuery_);&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;:root {
     --font-color:white;
     --mycolor:yellow;
    }
    body { 
      background-color: var(--mycolor);
      color:#090;
    }
    
    #para {
     font: 90% Arial,Helvetica;
     font-weight:normal;
    }
    
    #red {
      background:red;
    }
    
    #pink {
      background:#f3f;
    }&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.8.2/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;p id=&quot;para&quot;&amp;gt;Let's try to make the background red or pink and change the text to white and bold.&amp;lt;/p&amp;gt;
  &amp;lt;button id=&quot;red&quot;&amp;gt;Red&amp;lt;/button&amp;gt;
  &amp;lt;button id=&quot;pink&quot;&amp;gt;Pink&amp;lt;/button&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery를 사용하면 사용자 지정 속성을 다른 값으로 설정하기 위해 이 &lt;a href=&quot;https://stackoverflow.com/questions/38002667/change-css-variable-using-jquery/38002850#38002850&quot; papago-id=&quot;19-1&quot;&gt;응답&lt;/a&gt;이 실제로 답변을 유지합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Body Element의 &lt;a href=&quot;https://api.jquery.com/get/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;19-3&quot;&gt;get()&lt;/a&gt; 메서드를 사용하여 기본 DOM 구조에 액세스할 수 있고 Body Element를 반환하므로 Custom Property의 코드 설정이 용이합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--mycolor&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;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;getComputedStyle 함수를 사용하여 cs 변수를 가져올 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 예가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;const colors = document.querySelectorAll(&quot;.color&quot;);
const result = document.getElementById(&quot;result&quot;);
colors.forEach((color) =&amp;gt; color.addEventListener(&quot;click&quot;, changeColor));

function changeColor(event) {
  const target = event.target;
  // get color
  const color = getComputedStyle(target).getPropertyValue(&quot;--clr&quot;);
  document.body.style.backgroundColor = color;

  // active color
  colors.forEach((color) =&amp;gt; color.classList.remove(&quot;active&quot;));
  target.classList.add(&quot;active&quot;);
  
  result.textContent = getComputedStyle(target).getPropertyValue(&quot;--clr&quot;)
  
}

result.textContent = &quot;#1dd1a1&quot;;&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;body{
  background-color: #1dd1a1;
}

.colors{
  position: absolute;
  padding: 2rem;
  display: flex;
  gap: 1rem;
}

.color{
  display: inline-block;
  width: 2rem;
  height: 2rem;
  background-color: var(--clr);
  border-radius: 50%;
  cursor: pointer;
  transition: $time-unit;

  }
  .color.active{
    border: .2rem solid #333;
    transform: scale(1.25);
  }&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;h1&amp;gt;Click to change Background&amp;lt;/h1&amp;gt;
&amp;lt;section class=&quot;colors&quot;&amp;gt;
  &amp;lt;span class=&quot;color active&quot; style=&quot;--clr: #1dd1a1&quot;&amp;gt;&amp;lt;/span&amp;gt;
  &amp;lt;span class=&quot;color&quot; style=&quot;--clr: #ff6b6b&quot;&amp;gt;&amp;lt;/span&amp;gt;
  &amp;lt;span class=&quot;color&quot; style=&quot;--clr: #2e86de&quot;&amp;gt;&amp;lt;/span&amp;gt;
  &amp;lt;span class=&quot;color&quot; style=&quot;--clr: #f368e0&quot;&amp;gt;&amp;lt;/span&amp;gt;
  &amp;lt;span class=&quot;color&quot; style=&quot;--clr: #ff9f43&quot;&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;/section&amp;gt;

Current Color: &amp;lt;span id=&quot;result&quot;&amp;gt;&amp;lt;/span&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;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/36088655/accessing-a-css-custom-property-aka-css-variable-through-javascript&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/835</guid>
      <comments>https://codeshow.tistory.com/835#entry835comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:04:48 +0900</pubDate>
    </item>
    <item>
      <title>UI 글꼴 - 시스템 얇은 글꼴을 가져오는 방법</title>
      <link>https://codeshow.tistory.com/834</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;UI 글꼴 - 시스템 얇은 글꼴을 가져오는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;UIFont&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;systemFontOfSize&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;boldSystemFontOfSize&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;), 하지만 스토리보드를 통해 &quot;씬 시스템 글꼴&quot;을 사용할 수 있는 방법은 무엇입니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템 씬(thin) 전달&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UIFont&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;생성자가 작동하지 않습니다. 이 생성자는 시스템이 아닌 글꼴에 대해서만 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템 글꼴 얇은 무게를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;UIFont.systemFont(ofSize: 34, weight: UIFontWeightThin)
&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;UIFontWeightUltraLight
UIFontWeightThin
UIFontWeightLight
UIFontWeightRegular
UIFontWeightMedium
UIFontWeightSemibold
UIFontWeightBold
UIFontWeightHeavy
UIFontWeightBlack
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/xpup5.png&quot; alt=&quot;san francisco font weights&quot;&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splited&quot;&gt;&lt;strong papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iOS 11 기준으로.&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt; &lt;code&gt;UIFontWeight*&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;UIFont.Weight.*&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 여기 https://developer.apple.com/documentation/uikit/uifont.weight 에서 더 많은 정보를 얻을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;8-0&quot;&gt;&lt;em papago-id=&quot;8-0-0&quot;&gt;iOS 8.2&lt;/em&gt;&lt;/strong&gt;부터는 사용이 가능합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UIFont.systemFontOfSize(_ fontSize: CGFloat, weight weight: CGFloat)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;UIFont.systemFontOfSize(19, weight: UIFontWeightLight)&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iOS SDK는 가중치에 대한 상수를 제공했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;UIFontWeightUltraLight
UIFontWeightThin
UIFontWeightLight
UIFontWeightRegular
UIFontWeightMedium
UIFontWeightSemibold
UIFontWeightBold
UIFontWeightHeavy
&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;iOS가 iOS에서 시스템 글꼴을 변경할 수 있으므로 시스템 글꼴을 사용할 때 시스템 글꼴을 사용하는 것이 시스템 글꼴 이름에 따라 글꼴을 만드는 것보다 낫습니다(iOS 7의 경우 Helvetica Neue, 현재 iOS 9의 경우 San Francisco).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;em papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 제가 제안하고 싶은 것은 당신이 원하는 폰트의 TTF 파일을 커스텀 폰트로 사용하고 당신의 앱에서 커스텀 폰트를 사용하는 것입니다.&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 제가 애플을 좋아하지 않는 특별한 이유입니다.&lt;/font&gt;&lt;/em&gt; &lt;strong&gt;&lt;em papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;절대.&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt; &lt;em 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;/em&gt; &lt;strong&gt;&lt;em papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;애플은 계속 바뀝니다.&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt; &lt;em papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 OS의 기본 글꼴입니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 동일한 글꼴 크기를 유지하고 무게만 변경하려면 대상 요소 글꼴 크기에서 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어,&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;demoLabel.font = UIFont.systemFont(ofSize: demoLabel.font.pointSize, weight: UIFontWeightThin)
&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&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-0&quot;&gt;iOS 11&lt;/strong&gt;부터 UIFontWeightThin은 다음으로 이름이 변경되었습니다&lt;strong papago-id=&quot;10-0&quot;&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UIFont.Weight.thin&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 여기 https://developer.apple.com/documentation/uikit/uifont.weight 에서 더 많은 정보를 얻을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스위프트 4.2 / 스위프트 5.0&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; label.font = UIFont.systemFont(ofSize: 15, weight: UIFont.Weight.thin)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/31771679/uifont-how-to-get-system-thin-font&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>SWiFT</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/834</guid>
      <comments>https://codeshow.tistory.com/834#entry834comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:04:39 +0900</pubDate>
    </item>
    <item>
      <title>뒤로 가기 단추에서 텍스트를 변경하는 방법</title>
      <link>https://codeshow.tistory.com/833</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;뒤로 가기 단추에서 텍스트를 변경하는 방법&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;저는 보기 컨트롤러가 있어서 어떤 제목을 표시하기에 너무 길기 때문에 이것이 필요합니다. 이 경우에는 뒤로 버튼에 대한 캡션으로 &quot;뒤로&quot;만 표시하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 다음을 시도했지만 효과가 없었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;self.navigationItem.leftBarButtonItem.title = @&quot;Back&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;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;self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@&quot;Back&quot; style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];
&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;a href=&quot;https://developer.apple.com/documentation/uikit/uinavigationitem?language=objc&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;5-3&quot;&gt;UI&lt;/a&gt; 탐색 항목 &lt;a href=&quot;https://developer.apple.com/documentation/uikit/uinavigationitem/1624958-backbarbuttonitem?language=objc&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;5-1&quot;&gt;문서&lt;/a&gt;에서 backBarButtonItem 문서를 살펴봄으로써 그것을 발견했습니다.&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;Marc W의 접근 방식은 어느 컨트롤러에 적용할지 결정했을 때 아주 효과적이었습니다. 맨 위에 있는 컨트롤러가 아니라 제목을 변경하는 컨트롤러 말입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;탐색 스택인 경우 다음을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(bottom)  ControllerA -&amp;gt; ControllerB  (top)
&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;strong papago-id=&quot;7-1&quot;&gt;Controller&lt;/strong&gt; B가 맨 &lt;strong papago-id=&quot;7-1&quot;&gt;위에 있을&lt;/strong&gt; 때 표시되는 Back-button에서 Controller A에 더 짧은 제목을 부여하려면 속성 변경을 &lt;strong papago-id=&quot;7-3&quot;&gt;Controller&lt;/strong&gt; A에 적용합니다.&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;self.title&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;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;다시 돌아가려는 보기 컨트롤러(긴 제목을 가진 보기 컨트롤러)를 찾아 탐색 항목을 선택한 다음 Attributes Inspector(Alt+Cmd+4)를 열고 사용자 지정 Back Button 제목을 삽입합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/2n9bo.png&quot; alt=&quot;enter image description here&quot;&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;그게 내게 도움이 됐어요&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 한 일은 이렇습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블 보기를 사용하여 다른 보기로 이동하는 경우...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드를 입력합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@&quot;Back&quot; style:UIBarButtonItemStylePlain target:nil action:nil] autorelease];
&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;didSelectRowAtIndexPath&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메소드...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫번째 콘트롤러의...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨트롤러 A.&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;컨트롤러 B로 이동하면 버튼에 &quot;뒤로&quot;라는 제목이 붙습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong papago-id=&quot;17&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;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상위 보기 컨트롤러(뒤로 단추를 누르면 나타나는 보기 컨트롤러)에서 자신의 제목을 뒤로 단추의 원하는 텍스트로 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;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;RootViewController&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;SecondViewController&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;SecondViewController&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;Home&quot;이라고 읽는 인스턴스.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;viewDidLoad&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;em papago-id=&quot;24-1&quot;&gt;RootViewController.m&lt;/em&gt; 메서드:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;self.title = @&quot;Home&quot;;
&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;viewDidLoad&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;SecondViewController.m&lt;/em&gt; 메서드:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@&quot;Back&quot; style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
[backButton release];    
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;뒤로 단추를 &quot;뒤로&quot;로 읽으려면 상위 보기 컨트롤러의 제목을 다음으로 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@&quot;Back&quot;&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;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;pre&gt;&lt;code&gt; self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] 
initWithTitle:@&quot;Back&quot; style:UIBarButtonItemStylePlain target:nil action:nil];
&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;ol&gt; 
 &lt;li papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스토리보드 열기&lt;/font&gt;&lt;/li&gt; 
 &lt;li 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;해당 View Controller의 탐색 항목 클릭&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;/ol&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그게 다야, 즐겨라...&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MonoTouch에서는 다음과 같은 작업을 수행합니다(부모 컨트롤러의 ViewDidLoad에서).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;NavigationItem.BackBarButtonItem = new UIBarButtonItem( &quot;Back&quot;, UIBarButtonItemStyle.Plain, null);
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;[self.navigationItem setBackBarButtonItem:[[UIBarButtonItem alloc]
  initWithTitle:@&quot;Back&quot; style:UIBarButtonItemStyleBordered target:nil action:nil]];
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이게 통했어요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상위 보기 컨트롤러에서 로드를 볼 때 뒤로 버튼을 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view.
    self.navigationItem.backBarButtonItem = 
       [[UIBarButtonItem alloc] initWithTitle:@&quot;title&quot; 
                                        style:UIBarButtonItemStylePlain 
                                       target:nil 
                                       action:nil];

}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리가 다음을 포함할 필요가 없다는 것을 주목합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;autorelease&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최신 iOS 버전으로 끝을 맺을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 되길 바랍니다!&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;[self.navigationController.navigationBar.backItem setTitle:@&quot;back&quot;];&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저한테는 효과가 있어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;back&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;타이틀을 갖고 싶지 않으신 분들은 저한테 잘 맞았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@&quot; &quot; style:UIBarButtonItemStylePlain target:nil action:nil];
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;self.navigationController.navigationBar.topItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@&quot;Back&quot; style:UIBarButtonItemStylePlain target:nil action:nil];
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;처음에는 왜 이런 대답이 나에게 통하지 않았는지 이제야 알았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;스토리보드에 제목을 설정했습니다.&lt;/font&gt;&lt;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;self.navigationItem.title = @&quot;Main Menu&quot;;
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@&quot; &quot; style:UIBarButtonItemStyleBordered target:nil action:nil];
[[self navigationItem] setBackBarButtonItem:backButton];
&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;내 솔루션은 뷰 컨트롤러를 탐색 스택으로 푸시할 때 제목을 설정하고 푸시된 VC가 닫히기 전에 위임 방법을 사용하여 재설정하는 것이었습니다.&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;pre&gt;&lt;code&gt;self.pushedVC = [self.storyboard instantiateViewControllerWithIdentifier:@&quot;pushedVCIdentifier&quot;];
self.pushedVC.delegate = self;   
[self.navigationController pushViewController:self.pushedVC animated:YES];
self.title = @&quot;Back&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 (보기에서 WillDisaper를 호출하는) 대리 콜백 함수에서 다음을(를) 호출합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;-(void)pushedVCWillClose:(PushedVC *)sender
{
    self.title = @&quot;Previous Title&quot;;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;뒤로 단추의 텍스트를 변경하여 원래의 왼쪽 화살표 모양으로 유지할 뿐만 아니라 사용자가 뒤로 단추를 클릭할 때 작업을 수행하려면 &quot;Custom Navigation &lt;a href=&quot;https://github.com/jianpx/CustomNavigationController&quot; rel=&quot;nofollow&quot; papago-id=&quot;48-1&quot;&gt;Controller&lt;/a&gt;&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        //Set Title for this view
        self.navigationItem.title = &quot;My Title&quot;

}

override func viewWillDisappear(animated: Bool) {
        super.viewWillAppear(animated)
        //Set Title for back button in next view 
        self.navigationItem.title = &quot;Back&quot;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;뒤로 버튼 제목을 변경하려면 아래 코드를 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;InformationVC *infoController=[[InformationVC alloc]init];[self.navigationController infoController animated:YES];

//Below code changed back button title on InformationVC page.
UIBarButtonItem *backBarButton = [[UIBarButtonItem alloc] initWithTitle:@&quot;Information&quot; style: UIBarButtonItemStylePlain target: nil action: nil];
self.navigationItem.backBarButtonItem = backBarButton;`enter code here`
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Swift5에서는 backBarButton을 편집할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 backBarButton을 먼저 숨기고 backBarButton을 교체하기 위해서는 맞춤형 leftButton을 사용해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 솔루션은 다음과 같습니다. https://stackoverflow.com/a/63868300/13939003&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;self.navigationController.navigationBar.topItem.title = &quot;Back&quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/835607/how-to-change-text-on-a-back-button&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>iPhone</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/833</guid>
      <comments>https://codeshow.tistory.com/833#entry833comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:04:31 +0900</pubDate>
    </item>
    <item>
      <title>리소스를 로드하고 해당 리소스의 내용을 봄에 문자열로 사용하는 방법</title>
      <link>https://codeshow.tistory.com/832</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;Spring 리소스 컨텐츠를 로드하고 이를 사용하여 bean 속성을 설정하거나 인수 생성자로 전달하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리소스에 사용 가능한 텍스트가 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 줄에서 test.xml을 읽어 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;String msg = StreamUtils.copyToString( new ClassPathResource(&quot;test.xml&quot;).getInputStream(), Charset.defaultCharset()  );
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;bean id=&quot;contents&quot; class=&quot;org.apache.commons.io.IOUtils&quot; factory-method=&quot;toString&quot;&amp;gt;
    &amp;lt;constructor-arg value=&quot;classpath:path/to/resource.txt&quot; type=&quot;java.io.InputStream&quot; /&amp;gt;
&amp;lt;/bean&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 솔루션에는 Apache Commons IO가 필요합니다.&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;@Parvez가 제안한 Apache Commons IO 의존성이 없는 또 다른 솔루션은&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;bean id=&quot;contents&quot; class=&quot;java.lang.String&quot;&amp;gt;
    &amp;lt;constructor-arg&amp;gt;
        &amp;lt;bean class=&quot;org.springframework.util.FileCopyUtils&quot; factory-method=&quot;copyToByteArray&quot;&amp;gt;
            &amp;lt;constructor-arg value=&quot;classpath:path/to/resource.txt&quot; type=&quot;java.io.InputStream&quot; /&amp;gt;
        &amp;lt;/bean&amp;gt;     
    &amp;lt;/constructor-arg&amp;gt;
&amp;lt;/bean&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;    try {
        Resource resource = new ClassPathResource(fileLocationInClasspath);
        BufferedReader br = new BufferedReader(new InputStreamReader(resource.getInputStream()),1024);
        StringBuilder stringBuilder = new StringBuilder();
        String line;
        while ((line = br.readLine()) != null) {
            stringBuilder.append(line).append('\n');
        }
        br.close();
        return stringBuilder.toString();
    } catch (Exception e) {
        LOGGER.error(e);
    }
&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;2021년 업데이트.&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;Resource&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;StreamUtils.copyToString(resource.getInputStream(), Charset.defaultCharset());&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;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;    @Value(&quot;classpath:appVersionFilePath&quot;)
    private Resource resource;

    @GetMapping(value = &quot;/hello&quot;)
    public HttpResult&amp;lt;String&amp;gt; hello() throws IOException {
        String appVersion = StreamUtils.copyToString(resource.getInputStream(), Charset.defaultCharset());
        // ...
    }
&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;environment.properties 파일에 키 값 쌍이 포함되어 있습니다. 각 값을 ${key}로 참조합니다.&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;bean id=&quot;propertyConfigurer&quot;
    class=&quot;org.springframework.beans.factory.config.PropertyPlaceholderConfigurer&quot;&amp;gt;
    &amp;lt;property name=&quot;locations&quot;&amp;gt;
        &amp;lt;list value-type=&quot;org.springframework.core.io.Resource&quot;&amp;gt;
            &amp;lt;value&amp;gt;classpath:environment.properties&amp;lt;/value&amp;gt;

        &amp;lt;/list&amp;gt;
    &amp;lt;/property&amp;gt;
&amp;lt;/bean&amp;gt;
&amp;lt;bean id=&quot;mySQLdataSource&quot;
    class=&quot;org.springframework.jdbc.datasource.DriverManagerDataSource&quot;&amp;gt;
    &amp;lt;property name=&quot;driverClassName&quot; value=&quot;${JDBC.driver}&quot; /&amp;gt;
    &amp;lt;property name=&quot;url&quot; value=&quot;${JDBC.URL}&quot; /&amp;gt;
    &amp;lt;property name=&quot;username&quot; value=&quot;${JDBC.username}&quot; /&amp;gt;
    &amp;lt;property name=&quot;password&quot; value=&quot;${JDBC.password}&quot; /&amp;gt;
&amp;lt;/bean&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/users/1127650/daoway&quot; papago-id=&quot;14-0&quot;&gt;daoway&lt;/a&gt; 답변이 매우 도움이 되었고, &lt;a href=&quot;https://stackoverflow.com/users/1210071/adrian-ber&quot; papago-id=&quot;14-2&quot;&gt;Adrian&lt;/a&gt; 발언에 따라 daoway의 코드와 유사한 구성 스니펫을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;bean id=&quot;contents&quot; class=&quot;org.springframework.core.io.ClassPathResource&quot;&amp;gt;
    &amp;lt;constructor-arg value=&quot;path/to/resource.txt&quot;/&amp;gt;
&amp;lt;/bean&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구성요소에서&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    @Autowired
    private Resource contents;

    @PostConstruct
    public void load(){
        try {
            final InputStream inputStream = contents.getInputStream();
                //use the stream 
            BufferedReader br = new BufferedReader(new InputStreamReader(inputStream ,1024);
            StringBuilder stringBuilder = new StringBuilder();
            String line;
            while ((line = br.readLine()) != null) {
                stringBuilder.append(line).append('\n');
            }
            br.close();
     }catch (IOException e) {
            LOGGER.error(message);
     }
  }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;봄&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    private String readResource(String fileName){
    ResourceLoader resourceLoader = new DefaultResourceLoader();
    Resource resource = resourceLoader.getResource(&quot;resourceSubfolder/&quot;+fileName)
    try{
         Reader reader = new InputStreamReader(resource.getInputStream());
         return FileCopyUtils.copyToString(reader);
    } catch (IOException e){
         e.printStackTrace();
    }
    return null;
    }
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/14022839/how-do-i-load-a-resource-and-use-its-contents-as-a-string-in-spring&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Spring</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/832</guid>
      <comments>https://codeshow.tistory.com/832#entry832comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:04:23 +0900</pubDate>
    </item>
    <item>
      <title>mysql storage-procedure: out 매개변수</title>
      <link>https://codeshow.tistory.com/831</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mysql storage-procedure: out 매개변수&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;http://books.google.com/books?id=YpeP0ok0cO4C&amp;amp;printsec=frontcover&quot; rel=&quot;noreferrer&quot; papago-id=&quot;1-1&quot;&gt;구글북&lt;/a&gt;)의 mysql 저장 프로시저를 가지고 있으며, 한 예는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DELIMITER $$

DROP PROCEDURE IF EXISTS my_sqrt$$
CREATE PROCEDURE my_sqrt(input_number INT, OUT out_number FLOAT)
BEGIN
    SET out_number=SQRT(input_number);
END$$

DELIMITER ;
&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;절차는 잘 컴파일됩니다. (Ubuntu에서 MySQL Query Browser를 사용하고 있습니다.)&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;CALL my_sqrt(4,@out_value);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(쿼리 브라우저에서도)&lt;/font&gt;&lt;/p&gt; 
&lt;p 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;(1064) check the manual that correspond to the...
&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;font class=&quot;papago-parent&quot;&gt;잘 작동했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql&amp;gt; CALL my_sqrt(4, @out_value);
Query OK, 0 rows affected (0.00 sec)

mysql&amp;gt; SELECT @out_value;
+------------+
| @out_value |
+------------+
| 2          | 
+------------+
1 row in set (0.00 sec)
&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;아래 코드에 입력 파라미터 *IN이 누락되어 있으므로 올바른 서명을 사용해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CREATE PROCEDURE my_sqrt(IN input_number INT, OUT out_number FLOAT)
&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;MySQL Query Browser가 아닌 터미널에서 함수를 호출하려고 했는데 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서, 내가 그 프로그램에서 뭔가 잘못하고 있는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전에 몇 가지 절차를 성공적으로 호출했기 때문에(그러나 매개 변수가 없는 경우) 무엇인지 모르겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;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;CALL my_sqrt(4,@out_value);
SELECT @out_value;
&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;blockquote&gt; 
 &lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 구문에 오류가 있습니다. MySQL 서버 버전에 해당하는 설명서에서 2행의 'SELECT @out_value' 근처에서 사용할 올바른 구문을 확인하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이상하게도, 만약에 내가 그냥 이렇게 적이 있다면:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CALL my_sqrt(4,@out_value); 
&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;결과 메시지는 &quot;쿼리 취소됨&quot;입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아마 지금은 터미널만 사용할겁니다...&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&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;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;font class=&quot;papago-parent&quot;&gt;커서를 메시지 위의 줄 위로 이동하면 커서가 두 개의 화살표로 바뀝니다(위 아래로). 그런 다음 해당 줄을 클릭하고 끌면 놓친 메시지가 포함된 콘솔이 나타납니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저장 프로시저 내에서 전화하는 경우 @을 사용하지 마십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나의 경우 0을 반환합니다.&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;CALL SP_NAME(L_OUTPUT_PARAM)&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;pre&gt;&lt;code&gt;SET out_number=SQRT(input_number); 
&lt;/code&gt;&lt;/pre&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 글 대신:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select SQRT(input_number); 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쓰지 말아주세요&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SET out_number&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;입력 파라미터는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;PROCEDURE `test`.`my_sqrt`(IN input_number INT, OUT out_number FLOAT) 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;바꿔 보다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;OUT&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;INOUT&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신을 위하여&lt;/font&gt;&lt;/font&gt;&lt;code&gt;out_number&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매개 변수 정의.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;CREATE PROCEDURE my_sqrt(input_number INT, INOUT out_number FLOAT)&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;INOUT&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음에 대한 입력 변수를 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;out_number&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;code&gt;@out_value&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&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/1113579/mysql-stored-procedure-out-parameter&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MySQL</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/831</guid>
      <comments>https://codeshow.tistory.com/831#entry831comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:04:15 +0900</pubDate>
    </item>
    <item>
      <title>browser.pause()와 browser.enterRepl()의 차이점은 무엇입니까?</title>
      <link>https://codeshow.tistory.com/830</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;browser.pause()와 browser.enterRepl()의 차이점은 무엇입니까?&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;http://angular.github.io/protractor/#/api?view=Protractor.prototype.pause&quot; papago-id=&quot;1-1&quot;&gt;기능&lt;/a&gt;이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;베타(불안정)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pause&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;테스트에서 browser.pause()를 사용하여 제어 흐름의 해당 지점에서 트랙터 디버거를 입력합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;element(by.id('foo')).click();
browser.pause();
// Execution will stop before the next click action.
element(by.id('bar')).click();
&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;blockquote&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;enterRepl&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제어 흐름의 임의의 지점에서 반복 루프를 입력하기 위한 함수입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;browser.Repl()을 테스트에 입력합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령줄을 변경할 필요가 없습니다('디버그'를 추가할 필요가 없음).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;element(by.id('foo')).click();
browser.enterRepl();
// Execution will stop before the next click action.
element(by.id('bar')).click();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제공된 문서 및 예제를 통해 테스트 디버깅에 사용되는 것이 분명합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 그 둘의 차이점이 무엇인지는 분명하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;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;pause()&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;enterRepl()&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;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 &lt;a href=&quot;https://github.com/angular/protractor/blob/master/docs/debugging.md&quot; papago-id=&quot;11-1&quot;&gt;문서&lt;/a&gt;에 설명되어 있지만, 조금 더 깊이 들어가도록 하겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Protractor에는 디버깅을 위한 두 &lt;a href=&quot;https://github.com/angular/protractor/tree/2.1.0/lib/debugger/modes&quot; papago-id=&quot;12-1&quot;&gt;가지 모드&lt;/a&gt;, 즉 &lt;em papago-id=&quot;12-3&quot;&gt;DebuggerRepl&lt;/em&gt;과 &lt;em papago-id=&quot;12-5&quot;&gt;CommandRepl&lt;/em&gt;이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;13-0&quot;&gt;Replhere&lt;/em&gt;는 &lt;em papago-id=&quot;13-2&quot;&gt;Read-eval-print-loop&lt;/em&gt;의 약자로, 일반적으로 입력하는 명령어가 무엇이든 현재 컨텍스트에서 즉시 평가되고 결과가 즉시 제공됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, &lt;em papago-id=&quot;13-4&quot;&gt;Chrome Developer Tools&lt;/em&gt;의 콘솔은 &lt;em papago-id=&quot;13-8&quot;&gt;Chrome의 &lt;/em&gt;&lt;em papago-id=&quot;13-10&quot;&gt;JavaScript/DOM&lt;/em&gt; &lt;em papago-id=&quot;13-8&quot;&gt;구현&lt;/em&gt;을 위한 일종의 &lt;em papago-id=&quot;13-6&quot;&gt;REPL&lt;/em&gt;이거나 실행할 때입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;node&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;em papago-id=&quot;14-3&quot;&gt;Node.js의 자바스크립트&lt;/em&gt; 컨텍스트에 대한 &lt;em papago-id=&quot;14-1&quot;&gt;REPL&lt;/em&gt;을 얻을 수 있습니다. 명령을 입력하고 결과를 얻을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용할때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;browser.pause()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;16-1&quot;&gt;DebuggerRepl&lt;/em&gt;을 활성화하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 모드의 명령을 실행할 수 있는 &lt;em papago-id=&quot;16-3&quot;&gt;Repl&lt;/em&gt;을 제공합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;단말기에는 보통 다음과 같은 명령 목록이 나타납니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;press c to continue to the next webdriver command
press d to continue to the next debugger statement
type &quot;repl&quot; to enter interactive mode
type &quot;exit&quot; to break out of interactive mode
press ^C to exit
&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;c&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;browser.pause()&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;d&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지휘.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하는 대로 바로 실행됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 이 모드를 사용하면 기본적으로 &lt;strong papago-id=&quot;20-1&quot;&gt;페이지 상태를 건너뛰고&lt;/strong&gt; 결과를 탐색할 수 있습니다. (참고: 이 모드는 더 &lt;a href=&quot;https://github.com/angular/protractor/blob/2.1.0/lib/debugger/modes/debuggerRepl.js#L4&quot; papago-id=&quot;20-3&quot;&gt;많은 명령&lt;/a&gt;을 제공하며 명령은 작동하지만 출력의 의미가 무엇인지, 그리고 Tractor 사용자에게 유용한지는 잘 모르겠습니다.)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용할때&lt;/font&gt;&lt;/font&gt;&lt;code&gt;browser.enterRepl()&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;em papago-id=&quot;22-1&quot;&gt;CommandRepl 모드&lt;/em&gt;를 활성화 중입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 기능을 사용하면 테스트에서 사용하는 &lt;em papago-id=&quot;22-3&quot;&gt;Tractor&lt;/em&gt; 메서드를 대화형 모드에서 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;액세스 권한을 얻을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;element&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;browser&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;protractor&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 다음과 같이 실행할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; $('.hello').getText();
&amp;gt; 'World'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과를 즉시 다시 출력하기 때문에 &lt;strong papago-id=&quot;26-1&quot;&gt;현재 페이지&lt;/strong&gt; 상태의 &lt;strong papago-id=&quot;26-1&quot;&gt;DOM&lt;/strong&gt;을 조회하고 결과를 볼 수 있는 일종의 샌드박스입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;눈치채셨겠지만,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;browser.pause()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령 목록에는 다음과 같은 행이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;type &quot;repl&quot; to enter interactive mode
&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;em papago-id=&quot;29-1&quot;&gt;DebuggerReppl 모드&lt;/em&gt;에 있을 때 실행할 수 있다는 것을 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;repl&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;strong papago-id=&quot;30-3&quot;&gt;페이지 상태&lt;/strong&gt;에 대해 &lt;em papago-id=&quot;30-1&quot;&gt;CommandReppl&lt;/em&gt; 모드를 활성화합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;browser.pause()&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;, DOM으로 방금 사용한 것처럼 플레이할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;browser.enterRepl()&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;em papago-id=&quot;32-1&quot;&gt;DebuggerReppl 모드&lt;/em&gt;로 돌아갈 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;exit&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지휘.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 명령어 &lt;em papago-id=&quot;33-1&quot;&gt;재생 모드&lt;/em&gt;로 진입한 경우에는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;browser.enterRepl()&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;em papago-id=&quot;34-1&quot;&gt;DebuggerRepl 모드&lt;/em&gt;로 전환할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 &lt;em papago-id=&quot;35-1&quot;&gt;commandRepl 모드&lt;/em&gt;는 &lt;em papago-id=&quot;35-3&quot;&gt;elementExplorer&lt;/em&gt;라는 기능으로 활성화할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;필기 테스트 없이 사용할 수 있으며 &lt;em papago-id=&quot;35-5&quot;&gt;CommandRepl 모드&lt;/em&gt;에서 URL만 엽니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;tl;dr&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요약하자면, 저는 그것들이 어떻게 불리는지에 따라 사용되어야 한다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;browser.pause()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;- 페이지에서 무슨 일이 일어나고 있는지 확인할 수 있도록 브라우저를 그 자리에서 정확히 일시 중지했으면 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼, 제 명령에 따라, 여기서 무슨 일이 일어나고 있는지 알 수 있도록 다음 상태로 점프해 주세요.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 상태에 대한 더 많은 정보가 필요하면 실행할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;repl&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;39-1&quot;&gt;Tractor API&lt;/em&gt;를 사용합니다(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;browser&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;element&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;protractor&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&gt;&lt;code&gt;exit&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 모드와 상태를 계속 점프합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;browser.enterRepl()&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;em papago-id=&quot;44-1&quot;&gt;Protractor API&lt;/em&gt;를 사용하여 페이지를 조사할 수 있도록 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;browser&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;element&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;protractor&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가 없습니다&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 즉시 페이지의 상태 사이를 이동할 필요가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;노드 버전 8.10이 포함된 Protractor 버전 5.3은 &lt;strong papago-id=&quot;48-1&quot;&gt;지원&lt;/strong&gt;되지 않습니다.&lt;/font&gt;&lt;/font&gt; &lt;code&gt;browser.pause()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더이상.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은 &lt;a href=&quot;https://github.com/angular/protractor/issues/4307&quot; papago-id=&quot;49-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;이쪽&lt;/a&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/angular/protractor/blob/master/docs/async-await.md&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;50-1&quot;&gt;필요한 작업을 트랙터&lt;/a&gt; 비동기식 대기로 수행할 수 있는 가능성이 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/31413300/what-is-the-difference-between-browser-pause-and-browser-enterrepl&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>AngularJS</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/830</guid>
      <comments>https://codeshow.tistory.com/830#entry830comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:04:08 +0900</pubDate>
    </item>
    <item>
      <title>최근 한 시간 동안 수정된 테이블 찾기 쿼리</title>
      <link>https://codeshow.tistory.com/829</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;최근 한 시간 동안 수정된 테이블 찾기 쿼리&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 데이터베이스에서 지난 한 시간 동안 어떤 테이블이 수정되었는지 알고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거 어떻게 해요?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 5.x는 INFORMATION_SCHEMA 데이터베이스를 통해 이 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 데이터베이스에는 테이블, 보기, 열 등에 대한 정보가 들어 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT * 
FROM `INFORMATION_SCHEMA`.`TABLES`
WHERE 
    DATE_SUB(NOW(), INTERVAL 1 HOUR) &amp;lt; `UPDATE_TIME`
&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;최근 한 시간 동안 업데이트된 모든 테이블(UPDATE_TIME)을 반환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스 이름(TAB)으로 필터링할 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;LE_SCHEMA 열).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리 예제:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT 
    CONCAT(`TABLE_SCHEMA`, '.', `TABLE_NAME`) AS `Table`, 
    UPDATE_TIME AS `Updated`
FROM `INFORMATION_SCHEMA`.`TABLES`
WHERE
    DATE_SUB(NOW(), INTERVAL 3 DAY) &amp;lt; `UPDATE_TIME`
    AND `TABLE_SCHEMA` != 'INFORMATION_SCHEMA'
    AND `TABLE_TYPE` = 'BASE TABLE';
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변경사항을 탐지하려는 각 테이블에 대해 마지막 변경사항의 타임스탬프가 저장된 열이 있어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블의 모든 삽입 또는 업데이트에 대해 해당 열을 현재 날짜 및 시간으로 업데이트해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 삽입하거나 수정할 때마다 열을 자동으로 업데이트하는 &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.1/en/triggers.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;7-1&quot;&gt;트리거&lt;/a&gt;를 설정할 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 모든 쿼리를 수정할 필요가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p 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 count(*) from mytable where datemod&amp;gt;subtime(now(),'1:0:0')
&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;InnoDB는 현재 이 정보를 검색하기 위한 네이티브 메커니즘이 여전히 부족합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://bugs.mysql.com/bug.php?id=2681&quot; rel=&quot;nofollow&quot; papago-id=&quot;0-1&quot;&gt;MySQL의 관련 기능 요청&lt;/a&gt;에서 누군가는 다음을 설정하라고 조언합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;AFTER [all events]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모니터링할 각 테이블에서 트리거합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;트리거는 다음과 같은 문장을 발행할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;INSERT INTO last_update VALUE ('current_table_name', NOW())
ON DUPLICATE KEY UPDATE update_time = NOW();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 테이블에서:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CREATE TABLE last_update (
    table_name VARCHAR(64) PRIMARY KEY,
    update_time DATETIME
) ENGINE = MyISAM; -- no need for transactions here
&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;또는 이 데이터의 약간의 부정확성(1초 범위)이 허용되고 MySQL 데이터 파일에 대한 읽기 액세스 권한이 있는 경우(어떤 경우에도 권장됨) 설정으로 전환하여 기본 데이터 파일의 마지막 수정 시간을 확인할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 파일들은 아래에서 찾을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/var/lib/mysql/[database_name]/*.ibd&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대부분의 기본 설치에서.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경로를 선택한 경우 새 설정을 적용하려면 &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.6/en/tablespace-enabling.html&quot; papago-id=&quot;16-1&quot; rel=&quot;nofollow&quot;&gt;기존 테이블&lt;/a&gt;을 다시 &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.6/en/tablespace-enabling.html&quot; papago-id=&quot;16-1&quot; rel=&quot;nofollow&quot;&gt;만들어야&lt;/a&gt; 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;약 1.5년 전에 DBA Stack Exchange에서 다음과 같은 질문에 답한 적이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://dba.stackexchange.com/a/9571/877&quot; papago-id=&quot;17-1&quot;&gt;InnoDB 테이블이 변경되었는지 확인하는 가장 빠른 방법&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 오래된 대답에 근거해서, 나는 다음을 추천합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;h1 papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;디스크에 쓰기 플러시&lt;/font&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;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;a href=&quot;http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_max_dirty_pages_pct&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;20-1&quot;&gt;&lt;strong papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;innodb_max_dirty_pages_&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;를 0으로 설정해야 합니다.&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;먼저 /etc/my.cnf에 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[mysqld]
innodb_max_dirty_pages_pct=0
&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;그런 다음 이를 실행하여 mysql을 다시 시작할 필요가 없도록 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql&amp;gt; SET GLOBAL innodb_max_dirty_pages_pct = 0;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1&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;InnoDB 테이블의 타임스탬프 가져오기&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.ibd file&lt;/code&gt;&lt;/h1&gt; 
&lt;p&gt;&lt;code&gt;ls&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;는 UNIX 타임스탬프를 초 단위로 검색할 수 있는 옵션을 가지고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; InnoDB의 r&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mydb.mytable&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$ cd /var/lib/mysql/mydb
$ ls -l --time-style=&quot;+%s&quot; mytable.ibd | awk '{print $6}'
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_unix-timestamp&quot; papago-id=&quot;25-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;strong papago-id=&quot;25-1-0&quot;&gt;UNIX_TIMESTamp(NOW())&lt;/strong&gt;&lt;/a&gt; - (&lt;/font&gt;&lt;/font&gt;&lt;code&gt;timestamp of the .ibd file&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;3600 이하인지 확인합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h1 papago-id=&quot;27&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;SELECT *
FROM  information_schema.tables
WHERE UPDATE_TIME &amp;gt;= SYSDATE() - INTERVAL 1 DAY  &amp;amp;&amp;amp; TABLE_TYPE != 'SYSTEM VIEW'

SELECT * 
FROM information_schema.tables
WHERE UPDATE_TIME &amp;gt;= DATE_SUB(CURDATE(), INTERVAL 1 DAY) &amp;amp;&amp;amp; TABLE_TYPE != 'SYSTEM VIEW'
&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/2492040/query-to-find-tables-modified-in-the-last-hour&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MySQL</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/829</guid>
      <comments>https://codeshow.tistory.com/829#entry829comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:04:01 +0900</pubDate>
    </item>
    <item>
      <title>안드로이드:사용자 이름과 암호를 저장하고 있습니까?</title>
      <link>https://codeshow.tistory.com/828</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;Android 애플리케이션 내에서 사용할 사용자 이름과 비밀번호를 저장하려면 가장 좋은 방법은 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본 설정 화면을 통해서 인가요(그러나 사용자가 이를 놓치면 어떻게 됩니까?), 대화 상자를 열고 사용자에게 자격 증명을 요청합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 그렇다면, 저는 지원서에 대한 상태를 유지해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 이걸 어떻게 하죠?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 본 대부분의 안드로이드 및 아이폰 앱은 초기 화면이나 대화 상자를 사용하여 자격 증명을 요청합니다.&lt;/font&gt;&lt;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;a href=&quot;http://developer.android.com/guide/practices/security.html#UserData&quot; rel=&quot;noreferrer&quot; papago-id=&quot;3-1&quot;&gt;Android 개발 가이드&lt;/a&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;대신 권한 부여 토큰을 사용하여 새로 고칩니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가능한 경우 사용자 이름과 암호를 장치에 저장해서는 안 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 사용자가 제공한 사용자 이름과 암호를 사용하여 초기 인증을 수행한 다음, 짧은 수명의 서비스별 인증 토큰을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://developer.android.com/reference/android/accounts/AccountManager.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6-1&quot;&gt;AccountManager&lt;/a&gt;를 사용하는 것이 자격 증명을 저장하는 데 가장 적합한 옵션입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://github.com/googlesamples/android-BasicSyncAdapter/#readme&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6-3&quot;&gt;SampleSyncAdapter&lt;/a&gt;는 SampleSyncAdapter를 사용하는 방법의 예를 제공합니다.&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;a href=&quot;http://developer.android.com/guide/topics/data/data-storage.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;7-1&quot;&gt;설정&lt;/a&gt; 메커니즘을 사용하여 자격 증명 유지로 돌아갈 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 응용프로그램은 사용자의 환경설정에 접근할 수 없기 때문에 사용자의 정보가 쉽게 노출되지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안드로이드 계정 &lt;a href=&quot;http://developer.android.com/reference/android/accounts/AccountManager.html&quot; papago-id=&quot;8-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;이것은 약간 번거롭지만 SIM 카드가 변경되면 로컬 자격 증명을 무효화하는 것 중 하나이므로 누군가가 전화기를 스와이프하여 새 SIM을 넣으면 자격 증명이 손상되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 통해 사용자는 한 곳에서 장치에 있는 계정에 대해 저장된 자격 증명에 빠르고 쉽게 액세스(및 잠재적으로 삭제)할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SampleSyncAdapter(@Miguel 언급된 것처럼)는 저장된 계정 자격 증명을 사용하는 예입니다.&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;크리덴셜을 안전하게 보호하는 가장 좋은 방법은 우선 암호화가 포함된 암호를 비루팅 장치에서는 쉽게 사용할 수 없었던 account.db 파일에 저장하는 것을 생각하는 것입니다. 그리고 루팅 장치의 경우 해커가 암호를 해독하기 위해 키가 필요해야 합니다.&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;다른 옵션은 Gmail이 하는 방식처럼 모든 인증을 수행하는 것입니다. Gmail 서버로 첫 인증을 한 후에. 당신은 당신의 비밀번호의 경우에 사용될 Auth Token을 얻었습니다. 그 토큰은 일반 텍스트로 저장될 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버에서 비밀번호를 변경하는 경우 이 토큰은 거짓일 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단말기에 대해 2-Factor Authentication(2-Factor Authentication)을 활성화하고 단말기에 대한 단말기별 암호를 생성하는 것이 마지막으로 권장하는 옵션입니다.&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;a href=&quot;https://stackoverflow.com/questions/785973/what-is-the-most-appropriate-way-to-store-user-settings-in-android-application/6393502#6393502&quot; papago-id=&quot;14-1&quot;&gt;Android 응용프로그램에서 사용자 설정을 저장하는 가장 적절한 방법을 살펴보십시오&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SDK에서 &lt;a href=&quot;http://developer.android.com/resources/samples/SampleSyncAdapter/index.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;15-1&quot;&gt;SampleSyncAdapter&lt;/a&gt; 샘플을 볼 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 될지도 모릅니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android 앱에 저장된 데이터의 보안을 강화하는 데 도움이 될 수 있는 Android 개발자의 이 게시물을 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://android-developers.blogspot.pt/2013/02/using-cryptography-to-store-credentials.html&quot; rel=&quot;nofollow&quot; papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;암호화를 사용하여 자격 증명을 안전하게 저장&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;새로운 (안드로이드 6.0) 지문 하드웨어와 API를 사용하면 &lt;a href=&quot;https://github.com/Zlate87/android-fingerprint-example&quot; rel=&quot;nofollow&quot; papago-id=&quot;18-1&quot;&gt;이&lt;/a&gt; github 샘플 애플리케이션에서처럼 할 수 있습니다.&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-1&quot;&gt;숨겨진 정보를 깨기 어려운 순서&lt;/strong&gt;대로 순위가 매겨집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선명한 텍스트로 저장&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대칭 키를 사용하여 암호화된 저장&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android 키스토어 사용하기&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;비대칭 키를 사용하여 암호화된 저장&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출처: &lt;a href=&quot;http://www.androidauthority.com/where-is-the-best-place-to-store-a-password-in-your-android-app-597197/&quot; papago-id=&quot;24-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Android 앱에서 암호를 저장하기에 가장&lt;/a&gt; 좋은 &lt;a href=&quot;http://www.androidauthority.com/where-is-the-best-place-to-store-a-password-in-your-android-app-597197/&quot; papago-id=&quot;24-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;곳은 어디&lt;/a&gt;입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;키스토어 자체는 사용자 자신의 잠금 화면 핀/비밀번호를 사용하여 암호화되므로 장치 화면이 잠기면 키스토어를 사용할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;응용프로그램 비밀에 액세스해야 하는 백그라운드 서비스가 있는 경우 이 점에 유의하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출처: &lt;a href=&quot;http://www.androidauthority.com/use-android-keystore-store-passwords-sensitive-information-623779/&quot; papago-id=&quot;26-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Android Keystore를 사용하여 비밀번호&lt;/a&gt; 및 &lt;a href=&quot;http://www.androidauthority.com/use-android-keystore-store-passwords-sensitive-information-623779/&quot; papago-id=&quot;26-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;기타 민감한 정보를 간단하게&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;http://nelenkov.blogspot.com/2012/05/storing-application-secrets-in-androids.html 의 정보는 상당히 실용적이지만 &quot;uses-hidden-android-apis&quot; 기반 접근 방식입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;인증 정보/비밀번호를 기기에 로컬로 저장할 수 없을 때 고려해야 할 사항입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 또한 https://gist.github.com/kbsriram/5503519 에서 그 아이디어에 대한 정리된 요지를 만들었고, 이것은 도움이 될 것입니다.&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/1925486/android-storing-username-and-password&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Android</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/828</guid>
      <comments>https://codeshow.tistory.com/828#entry828comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:03:54 +0900</pubDate>
    </item>
    <item>
      <title>jQuery UI - 외부 클릭 시 대화상자 닫기</title>
      <link>https://codeshow.tistory.com/827</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery 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;특정 요소를 클릭하면 표시되는 jQuery UI Dialog가 있습니다.&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;pre&gt;&lt;code&gt;$(document).ready(function() {
    var $field_hint = $('&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;')
        .dialog({
            autoOpen: false,
            minHeight: 50,
            resizable: false,
            width: 375
        });

    $('.hint').click(function() {
        var $hint = $(this);
        $field_hint.html($hint.html());
        $field_hint.dialog('option', 'position', [162, $hint.offset().top + 25]);
        $field_hint.dialog('option', 'title', $hint.siblings('label').html());
        $field_hint.dialog('open');
    });
    /*$(document).click(function() {
        $field_hint.dialog('close');
    });*/
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막 부분에 대한 설명을 해제하면 대화 상자가 열리지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대화상자가 열리는 것과 같은 클릭으로 다시 닫히기 때문인 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&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;br&gt; &lt;em papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: &lt;a href=&quot;http://benalman.com/projects/jquery-outside-events-plugin/&quot; rel=&quot;noreferrer&quot; title=&quot;jQuery 외부 이벤트&quot; papago-id=&quot;5-1&quot; papago-attr-id=&quot;1&quot;&gt;jQuery outside events&lt;/a&gt; 플러그인을 사용합니다.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).ready(function() {
    // dialog element to .hint
    var $field_hint = $('&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;')
            .dialog({
                autoOpen: false,
                minHeight: 0,
                resizable: false,
                width: 376
            })
            .bind('clickoutside', function(e) {
                $target = $(e.target);
                if (!$target.filter('.hint').length
                        &amp;amp;&amp;amp; !$target.filter('.hintclickicon').length) {
                    $field_hint.dialog('close');
                }
            });

    // attach dialog element to .hint elements
    $('.hint').click(function() {
        var $hint = $(this);
        $field_hint.html('&amp;lt;div style=&quot;max-height: 300px;&quot;&amp;gt;' + $hint.html() + '&amp;lt;/div&amp;gt;');
        $field_hint.dialog('option', 'position', [$hint.offset().left - 384, $hint.offset().top + 24 - $(document).scrollTop()]);
        $field_hint.dialog('option', 'title', $hint.siblings('label').html());
        $field_hint.dialog('open');
    });

    // trigger .hint dialog with an anchor tag referencing the form element
    $('.hintclickicon').click(function(e) {
        e.preventDefault();
        $($(this).get(0).hash + ' .hint').trigger('click');
    });
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;너무 오래 끌어서 미안하지만 아래 내용을 사용했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;단점이 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;열린 기능 보기...&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#popup&quot;).dialog(
{
    height: 670,
    width: 680,
    modal: true,
    autoOpen: false,
    close: function(event, ui) { $('#wrap').show(); },
    open: function(event, ui) 
    { 
        $('.ui-widget-overlay').bind('click', function()
        { 
            $(&quot;#popup&quot;).dialog('close'); 
        }); 
    }
});
&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;다음은 외부 팝업을 클릭할 때 jquery UI 대화상자를 닫는 세 가지 방법입니다.&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;대화 상자가 modal/background overlay인 경우: http://jsfiddle.net/jasonday/6FGqN/&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;jQuery(document).ready(function() {
    jQuery(&quot;#dialog&quot;).dialog({
        bgiframe: true,
        autoOpen: false,
        height: 100,
        modal: true,
        open: function(){
            jQuery('.ui-widget-overlay').bind('click',function(){
                jQuery('#dialog').dialog('close');
            })
        }
    });
}); 
&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;대화상자가 modal 이외의 방법 1: 방법 1: http://jsfiddle.net/jasonday/xpkFf/&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; // Close Pop-in If the user clicks anywhere else on the page
                     jQuery('body')
                      .bind(
                       'click',
                       function(e){
                        if(
                         jQuery('#dialog').dialog('isOpen')
                         &amp;amp;&amp;amp; !jQuery(e.target).is('.ui-dialog, a')
                         &amp;amp;&amp;amp; !jQuery(e.target).closest('.ui-dialog').length
                        ){
                         jQuery('#dialog').dialog('close');
                        }
                       }
                      );
&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;Non-Modal 대화방식 2: http://jsfiddle.net/jasonday/eccKr/&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  $(function() {
            $( &quot;#dialog&quot; ).dialog({
                autoOpen: false, 
                minHeight: 100,
                width: 342,
                draggable: true,
                resizable: false,
                modal: false,
                closeText: 'Close',
                  open: function() {
                      closedialog = 1;
                      $(document).bind('click', overlayclickclose);
                  },
                  focus: function() {
                      closedialog = 0;
                  },
                  close: function() {
                      $(document).unbind('click');
                  }



        });

         $('#linkID').click(function() {
            $('#dialog').dialog('open');
            closedialog = 0;
        });

         var closedialog;

          function overlayclickclose() {
              if (closedialog) {
                  $('#dialog').dialog('close');
              }

              //set to one because click on dialog box sets to zero
              closedialog = 1;
          }


  });
&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;a href=&quot;http://benalman.com/projects/jquery-outside-events-plugin/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;12-1&quot;&gt;jQuery Outside Events 플러그인&lt;/a&gt;을 확인합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$field_hint.bind('clickoutside',function(){
    $field_hint.dialog('close');
});
&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;$(document).ready(function()
{
    $(document.body).on(&quot;click&quot;, &quot;.ui-widget-overlay&quot;, function()
    {
        $.each($(&quot;.ui-dialog&quot;), function()
        {
            var $dialog;
            $dialog = $(this).children(&quot;.ui-dialog-content&quot;);
            if($dialog.dialog(&quot;option&quot;, &quot;modal&quot;))
            {
                $dialog.dialog(&quot;close&quot;);
            }
        });
    });;
});
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;$(&quot;.ui-widget-overlay&quot;).click (function () {
    $(&quot;#dialog-id&quot;).dialog( &quot;close&quot; );
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동작 중인 위의 코드를 표시하는 &lt;a href=&quot;http://jsfiddle.net/GKfZM/191/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;15-0&quot;&gt;Fiddle&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;저는 두 부분을 해야 했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 외부 클릭 핸들러:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).on('click', function(e){
    if ($(&quot;.ui-dialog&quot;).length) {
        if (!$(e.target).parents().filter('.ui-dialog').length) {
            $('.ui-dialog-content').dialog('close');
        }
    }
}); 
&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;dialog('close')&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;ui-dialog-content&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;class, 클릭이 하나에서 시작되지 않은 경우 모든 &lt;strong papago-id=&quot;19-1&quot;&gt;대화&lt;/strong&gt; 상자가 닫힙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;오버레이가 구성 요소의 일부가 아니므로 modal(모달) 대화 상자에서도 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.ui-dialog&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;/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;ol&gt; 
 &lt;li papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대부분의 대화상자는 대화상자 외부의 클릭으로 인해 작성됩니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 핸들러는 클릭이 대화상자를 만들고 문서에 버블링된 후 실행되므로 즉시 닫힙니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제를 해결하기 위해 다음과 같은 클릭 핸들러에 stopPropagation을 추가해야 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;moreLink.on('click', function (e) {
    listBox.dialog();
    e.stopPropagation(); //Don't trigger the outside click handler
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문은 좀 오래된 질문이지만, 사용자가 어딘가를 클릭할 때 모달이 아닌 대화상자를 닫고 싶을 때는 &lt;a href=&quot;https://raw.github.com/ehynds/jquery-ui-multiselect-widget/1.12/src/jquery.multiselect.js&quot; rel=&quot;noreferrer&quot; papago-id=&quot;25-1&quot;&gt;JQuery UI Multisellect 플러그인&lt;/a&gt;에서 가져온 것을 사용하면 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;주요 장점은 클릭이 &quot;잃어버린&quot; 상태가 아니라는 것입니다(사용자가 링크나 버튼을 클릭하고 싶을 경우, 동작이 완료됩니다).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$myselector.dialog({
            title: &quot;Dialog that closes when user clicks outside&quot;,
            modal:false,
            close: function(){
                        $(document).off('mousedown.mydialog');
                    },
            open: function(event, ui) { 
                    var $dialog = $(this).dialog('widget');
                    $(document).on('mousedown.mydialog', function(e) {
                        // Close when user clicks elsewhere
                        if($dialog.dialog('isOpen') &amp;amp;&amp;amp; !$.contains($myselector.dialog('widget')[0], e.target)){
                            $myselector.dialog('close');
                        }            
                    });
                }                    
            });
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가 플러그인을 사용하지 않고도 이 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var $dialog= $(document.createElement(&quot;div&quot;)).appendTo(document.body);
    var dialogOverlay;

    $dialog.dialog({
        title: &quot;Your title&quot;,
        modal: true,
        resizable: true,
        draggable: false,
        autoOpen: false,
        width: &quot;auto&quot;,
        show: &quot;fade&quot;,
        hide: &quot;fade&quot;,
        open:function(){
            $dialog.dialog('widget').animate({
                width: &quot;+=300&quot;, 
                left: &quot;-=150&quot;
            });

//get the last overlay in the dom
            $dialogOverlay = $(&quot;.ui-widget-overlay&quot;).last();
//remove any event handler bound to it.
            $dialogOverlay.unbind();
            $dialogOverlay.click(function(){
//close the dialog whenever the overlay is clicked.
                $dialog.dialog(&quot;close&quot;);
            });
        }
    });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 $dialog가 대화 상자입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 우리가 하는 일은 이 대화상자가 열릴 때마다 마지막 오버레이 위젯을 가져오고, 오버레이가 클릭될 때마다 클릭 핸들러를 해당 오버레이에 바인딩하여 $dialog를 닫는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;외부 이벤트 플러그인이 필요 없습니다...&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.ui-widget-overlay div에 이벤트 핸들러를 추가하기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;jQuery(document).on('click', 'body &amp;gt; .ui-widget-overlay', function(){
     jQuery(&quot;#ui-dialog-selector-goes-here&quot;).dialog(&quot;close&quot;);
     return false;
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQueryui 대화상자에 사용한 셀렉터도 호출되어 닫히는지 확인합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, #ui-selector-goes-dialog-여기&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 jQuery UI를 사용하는 것이 아니라 jQuery를 사용하며, jQuery UI를 사용하지 않는 사람들에게 어떤 이유로든 유용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function showDialog(){
  $('#dialog').show();
  $('*').on('click',function(e){
    $('#zoomer').hide();
  });
}

$(document).ready(function(){

  showDialog();    

});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 대화상자를 보여주면 어떤 것이든 처음 클릭하는 것만 찾는 클릭 핸들러를 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 #dialog의 모든 클릭과 해당 내용을 무시하도록 할 수 있다면 더 좋겠지만 $('*')를 $('not(#dialog, #dialog *'))로 바꾸려고 해도 여전히 #dialog 클릭이 감지됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어쨌든 이건 순전히 포토 라이트 박스용으로 사용하고 있어서 그 용도로는 괜찮았습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주어진 예제는 ID가 '#dialog'인 하나의 대화 상자를 사용합니다. 대화 상자를 닫는 솔루션이 필요했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.extend($.ui.dialog.prototype.options, {
    modal: true,
    open: function(object) {
        jQuery('.ui-widget-overlay').bind('click', function() {              
            var id = jQuery(object.target).attr('id');
            jQuery('#'+id).dialog('close');
        })
    }
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로토타입 사용을 제안해 준 동료 유리 아르케스틴에게 감사드립니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 방법이 NON-MODAL 대화 상자에 사용할 수 있는 유일한 방법입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).mousedown(function(e) {
    var clicked = $(e.target); // get the element clicked
    if (clicked.is('#dlg') || clicked.parents().is('#dlg') || clicked.is('.ui-dialog-titlebar')) {
        return; // click happened within the dialog, do nothing here
    } else { // click was outside the dialog, so close it
        $('#dlg').dialog(&quot;close&quot;);
    }
});
&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;br&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/7919229/click-outside-non-modal-dialog-to-close&quot; papago-id=&quot;5&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;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;관심 있는 분들을 위해 modal 또는 non-modal 대화 상자 외부를 클릭할 때 대화 상자를 닫을 수 있는 일반 플러그인을 만들었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;동일한 페이지에서 하나 또는 여러 개의 대화 상자를 지원합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은 여기: http://www.coheractio.com/blog/closing-jquery-ui-dialog-widget-when-clicking-outside&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로랑&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에 게시된 솔루션을 기반으로 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var g_divOpenDialog = null;
function _openDlg(l_d) {

  // http://stackoverflow.com/questions/2554779/jquery-ui-close-dialog-when-clicked-outside
  jQuery('body').bind(
   'click',
   function(e){
    if(
      g_divOpenDialog!=null 
      &amp;amp;&amp;amp; !jQuery(e.target).is('.ui-dialog, a')
      &amp;amp;&amp;amp; !jQuery(e.target).closest('.ui-dialog').length
    ){
      _closeDlg();
    }
   }
  );

  setTimeout(function() {
    g_divOpenDialog = l_d;
    g_divOpenDialog.dialog();
  }, 500);
}
function _closeDlg() {
  jQuery('body').unbind('click');
  g_divOpenDialog.dialog('close');
  g_divOpenDialog.dialog('destroy');
  g_divOpenDialog = null;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 페이지에 미리보기 모달을 만드는 과정에서 동일한 문제가 발생했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;구글 검색을 많이 한 후에 저는 이 매우 유용한 해결책을 발견했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이벤트 및 대상을 사용하면 클릭이 발생한 위치를 확인하고 그에 따라 작업을 트리거하거나 아무것도 수행하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://snippetlib.com/jquery/hide_overlay_on_click_outside_modal&quot; rel=&quot;nofollow&quot; papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드 조각 라이브러리 사이트&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#modal-background').mousedown(function(e) {
var clicked = $(e.target);  
if (clicked.is('#modal-content') || clicked.parents().is('#modal-content')) 
    return; 
} else {  
 $('#modal-background').hide();
}
});
&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;̇트는 플러그인이 필요 없고 jquery나 간단한 자바스크립트로 할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#dialog').on('click', function(e){
  e.stopPropagation();
});
$(document.body).on('click', function(e){
  master.hide();
});
&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;전체 DOM에서 $('.any-selector')를 사용하여 대화 내용을 찾는 것이 그렇게 밝다고 생각하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해라&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('&amp;lt;div /&amp;gt;').dialog({
    open: function(event, ui){
        var ins = $(this).dialog('instance');
        var overlay = ins.overlay;
        overlay.off('click').on('click', {$dialog: $(this)}, function(event){
            event.data.$dialog.dialog('close');
        });
    }
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대화 상자 인스턴스에 포함된 오버레이를 실제로 사용하는 것입니다. 이렇게 하면 일이 절대로 잘못되지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 코드를 사용하여 대화상자의 '닫기' 버튼 클릭을 시뮬레이션 할 수 있습니다&lt;em papago-id=&quot;50-1&quot;&gt;(자신의 대화상자 이름에 대해 'MY_DIALOG' 문자열 변경).&lt;/em&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;div[aria-labelledby='ui-dialog-title-MY_DIALOG'] div.ui-helper-clearfix a.ui-dialog-titlebar-close&quot;)[0].click();
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;51&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스마트 코드: 모든 것이 명확하고 가독성을 유지하기 위해 다음 코드를 사용하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;외부 본체가 대화 상자를 닫습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).ready(function () {
   $('body').on('click', '.ui-widget-overlay', closeDialogBox);
});

function closeDialogBox() {
    $('#dialog-message').dialog('close');
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;페이지의 열려 있는 대화 상자에서 작동해야 하는 이 코드를 사용하게 되었고, 도구 설명 클릭을 무시하고 대화 상자가 닫히는 리소스도 정리했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;
        $(document).mousedown(function(e) {
            var clicked = $(e.target); // get the element clicked
            if (clicked.is('.ui-dialog-content, .ui-dialog-titlebar, .ui-tooltip') || clicked.parents().is('.ui-dialog-content, .ui-dialog-titlebar, .ui-tooltip')) {
                return; // click happened within the dialog, do nothing here
            } else { // click was outside the dialog, so close it
                $('.ui-dialog-content').dialog(&quot;close&quot;);
                $('.ui-dialog-content').dialog(&quot;destroy&quot;);
                $('.ui-dialog-content').detach();

            }
        });
&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;요소를 제외한 클릭으로 .dialog(s)를 닫아야 하는 필요성을 발견했습니다.&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;$(document).ready(function () {    
    $(window).click(function (e) {
        $(&quot;.dialogGroup&quot;).each(function () {
            $(this).dialog('close');
        })
    });
    $(&quot;#lostEffClick&quot;).click(function () {
        event.stopPropagation();
        $(&quot;#lostEffDialog&quot;).dialog(&quot;open&quot;);
    };
});
&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/2554779/jquery-ui-close-dialog-when-clicked-outside&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/827</guid>
      <comments>https://codeshow.tistory.com/827#entry827comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:03:47 +0900</pubDate>
    </item>
    <item>
      <title>$httpProvider.response의 대안요격기</title>
      <link>https://codeshow.tistory.com/826</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;$httpProvider.response의 대안&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;$httpProvider.response의 대안은 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular에서 단종된 인터셉터&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS V1.3?&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;Angular JS 1.2에서 작동하던 인터셉트가 버전 1.3에서는 작동하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var angularErrorHandling = angular.module('xx-http-error-handling', []);
angularErrorHandling.config(function ($provide, $httpProvider, $compileProvider) {
    var elementsList = $();

     push function to the responseInterceptors which will intercept 
     the http responses of the whole application
    $httpProvider.responseInterceptors.push(function ($timeout, $q) {
        return function (promise) {
            return promise.then(function (successResponse) {                
                // if there is a successful response on POST, UPDATE or DELETE we display
                // a success message with green background
                if (successResponse.config.method.toUpperCase() == 'GET') {
                    var length = successResponse.data.length;                    
                    if (length == 0)
                    {
                        var countactivetoaster = $('#toast-container').find('.toast').length;
                        if (countactivetoaster == 0) {
                            toastr.warning('No Records Found!', '');
                        }
                    }                    
                    return successResponse;
                }
                else if (successResponse.config.method.toUpperCase() == 'PUT') {                   
                    toastr.success('Data Saved Sucessfully..', '');
                    return successResponse;
                }
                else if (successResponse.config.method.toUpperCase() == 'POST') {                   
                    toastr.success('Data Saved Sucessfully..', '');
                    return successResponse;
                }
            },
            // if the message returns unsuccessful we display the error 
            function (errorResponse) {
                switch (errorResponse.status) {
                    case 400: // if the status is 400 we return the error                           
                        toastr.error('400 error.', '');
                        // if we have found validation error messages we will loop through
                        // and display them
                        if (errorResponse.data.errors.length &amp;gt; 0) {
                            for (var i = 0; i &amp;lt; errorResponse.data.errors.length; i++) {
                                toastr.error('xx-http-error-validation-message', '');
                            }
                        }
                        break;
                    case 401: // if the status is 401 we return access denied                            
                        toastr.error('Wrong email address or password!', '');

                        break;
                    case 403: // if the status is 403 we tell the user that authorization was denied                          
                        toastr.error('You have insufficient privileges to do what you want to do!', '');
                        break;
                    case 500: // if the status is 500 we return an internal server error message                            
                        toastr.error('Error: &amp;lt;br /&amp;gt;' +
                            errorResponse.data.exceptionMessage != null &amp;amp;&amp;amp; errorResponse.data.exceptionMessage.length &amp;gt; 0 ? errorResponse.data.exceptionMessage : 
                            errorResponse.data.message, '');
                        break;
                    default: // for all other errors we display a default error message                            
                        toastr.error('Error ' + errorResponse.status + ': ' + errorResponse.data.message, '');
                }
                return $q.reject(errorResponse);
            });
        };
    });

    $compileProvider.directive('httpErrorMessages', function () {
        return {
            link: function (scope, element, attrs) {
                elementsList.push($(element));
            }
        };
    });
});
&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;이제 4개의 인터셉터를 별도로 처리할 수 있습니다. requestError, requestError, responseError&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// register the interceptor as a service
  $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) {
    return {
      // optional method
      'request': function(config) {
        // do something on success
        return config;
      },

      // optional method
     'requestError': function(rejection) {
        // do something on error
        if (canRecover(rejection)) {
          return responseOrNewPromise
        }
        return $q.reject(rejection);
      },



      // optional method
      'response': function(response) {
        // do something on success
        return response;
      },

      // optional method
     'responseError': function(rejection) {
        // do something on error
        if (canRecover(rejection)) {
          return responseOrNewPromise
        }
        return $q.reject(rejection);
      }
    };
  });

  $httpProvider.interceptors.push('myHttpInterceptor');
&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;자세한 내용 : https://docs.angularjs.org/api/ng/service/$http (인터셉터 장)&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;URL : https://stackoverflow.com/questions/23804981/alternative-of-httpprovider-responseinterceptors&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>AngularJS</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/826</guid>
      <comments>https://codeshow.tistory.com/826#entry826comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:03:35 +0900</pubDate>
    </item>
    <item>
      <title>Angular JS를 사용하여 양식의 여러 제출 버튼을 처리하는 방법?</title>
      <link>https://codeshow.tistory.com/825</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;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;JS와 저는 사용자가 데이터를 입력할 수 있는 양식을 가지고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;양식의 끝에 저장하고 다른 페이지로 이동하는 &quot;저장&quot; 버튼과 양식을 저장한 후 재설정하는 &quot;저장 및 추가&quot; 버튼 두 개가 있으면 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게 각도를 맞추면 됩니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ng-click 태그가 있는 제출 버튼을 2개로 할 수 있다고 생각했는데 폼 요소에 ng-submit을 사용하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ng-submit을 사용해야 하는 이유가 있나요? 버튼을 ng-click하는 대신 왜 그것을 사용하기 시작했는지 기억이 나지 않습니다.&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;&amp;lt;div ng-controller=&quot;SomeController&quot;&amp;gt;
    &amp;lt;form ng-submit=&quot;save(record)&quot;&amp;gt;
        &amp;lt;input type=&quot;text&quot; name=&quot;shoppingListItem&quot; ng-model=&quot;record.shoppingListItem&quot;&amp;gt;
        &amp;lt;button type=&quot;submit&quot;&amp;gt;Save&amp;lt;/button&amp;gt;
        &amp;lt;button type=&quot;submit&quot;&amp;gt;Save and Add Another&amp;lt;/button&amp;gt;
    &amp;lt;/form&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 콘트롤러에서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;SomeController&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$scope.record = {};
$scope.save = function (record) {
    $http.post('/api/save', record).
        success(function(data) {
            // take action based off which submit button pressed
        });
}
&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;ng-click&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;type=&quot;submit&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.에서&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ng-click&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨트롤러의 파라미터를 업데이트하고 이벤트에서 이를 검증할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ng-submit&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;&amp;lt;div ng-controller=&quot;SomeController&quot;&amp;gt;
&amp;lt;form ng-submit=&quot;save(record)&quot;&amp;gt;
    &amp;lt;input type=&quot;text&quot; name=&quot;shoppingListItem&quot; ng-model=&quot;record.shoppingListItem&quot;&amp;gt;
    &amp;lt;button type=&quot;submit&quot;&amp;gt;Save&amp;lt;/button&amp;gt;
    &amp;lt;button type=&quot;submit&quot; ng-click=&quot;SaveAndAddClick=true&quot;&amp;gt;Save and Add Another&amp;lt;/button&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&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;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;ngSubmit&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;Enter&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제출할 텍스트 상자에 입력하는 동안.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 행동이 중요하지 않다면 그냥 2를 사용하세요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ngClick&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;ngClick&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 코드는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div ng-controller=&quot;SomeController&quot;&amp;gt;
    &amp;lt;form ng-submit=&quot;save(record)&quot;&amp;gt;
        &amp;lt;input type=&quot;text&quot; name=&quot;shoppingListItem&quot; ng-model=&quot;record.shoppingListItem&quot;&amp;gt;
        &amp;lt;button type=&quot;submit&quot;&amp;gt;Save&amp;lt;/button&amp;gt;
        &amp;lt;button ng-click=&quot;saveAndAdd(record)&quot;&amp;gt;Save and Add Another&amp;lt;/button&amp;gt;
    &amp;lt;/form&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것들을 모두 단추로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;type=submit&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 입력과 버튼을 섞고 맞추지 않는 것이 조금 더 깔끔합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 기본적으로 하나의 버튼 클릭을 처리하기 위해 컨트롤러에서 하나의 방법을 실행하려고 하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div ng-controller=&quot;SomeController as sc&quot;&amp;gt;
        &amp;lt;form ng-submit=&quot;sc.execute(record)&quot;&amp;gt;
            &amp;lt;input type=&quot;text&quot; name=&quot;shoppingListItem&quot; ng-model=&quot;record.shoppingListItem&quot;&amp;gt;
            &amp;lt;button type=&quot;submit&quot; ng-model=&quot;sc.saveButtonVal&quot; ng-click=&quot;sc.saveButtonVal=true&amp;gt;Save&amp;lt;/button&amp;gt;
            &amp;lt;button type=&quot;submit&quot; ng-model=&quot;sc.saveAndAddButtonVal&quot; ng-click=&quot;sc.saveAndAddButtonVal=true&quot;&amp;gt;Save and Add Another&amp;lt;/button&amp;gt;
        &amp;lt;/form&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;js 파일에 이런 것이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function SomeController() {
        var sc = this;

        sc.execute = function(record) {
            //initialize the vars
            sc.saveButtonVal = false;
            sc.saveAndAddButtonVal = false;

            sc.resetButtonValues = function() {
                sc.saveButtonVal = false;
                sc.saveAndAddButtonVal = false;
            };

            if (sc.saveButtonVale) {
                //do save only operation
            } else if (sc.saveAndAddButtonVal) {
                //do save and add op
            }

           // reset your button vals
           sc.resetButtonValues();
    }
}
&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;제가 봤을 때, 두 가지 옵션이 있습니다: 1: &quot;다른 저장 후 추가&quot; 버튼에서 ngClick 이벤트를 사용하고 &quot;type='submit' 부분을 제거하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 ngClick을 호출하는 함수에서 저장한 다음 값을 재설정하여 해당 함수 내에서 save()를 호출할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;2: ngSubmit을 모두 제거하고 두 버튼 모두 ngClicks만 사용합니다.&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;&amp;lt;button type=&quot;{{isButton == true ? 'button' : 'submit'}}&quot; &amp;gt;Save&amp;lt;/button&amp;gt;
&amp;lt;button type=&quot;{{!isButton == true ? 'button' : 'submit'}}&quot; &amp;gt;Update&amp;lt;/button&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;ng-submit은 다른 장점도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 잘못된 양식은 제출되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ng-click 대신 ng-submit을 사용하는 것이 항상 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만, 당신의 시나리오에서, 더 나은 접근방식은&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;23&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;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨트롤러에서 양식을 검증합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ng-click은 유효하지 않더라도 양식을 제출합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 개의 다른 $scope라고 부릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부 컨트롤러에서 두 개의 다른 ng 클릭으로 기능합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&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;양식 요소에서 ng-submit을 제거하고 ng-click 기능을 'submit' 유형으로 각 버튼에 개별적으로 정의합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;무효화 확인을 위해 양식 요소 태그에 이름 속성을 정의합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 스코프 기능에서 validation을 확인합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div ng-controller=&quot;SomeController&quot;&amp;gt;
&amp;lt;form name=&quot;saveForm&quot;&amp;gt;
    &amp;lt;input type=&quot;text&quot; name=&quot;shoppingListItem&quot; ng-model=&quot;record.shoppingListItem&quot;&amp;gt;
    &amp;lt;button type=&quot;submit&quot; ng-click=&quot;save(record)&quot;&amp;gt;Save&amp;lt;/button&amp;gt;
    &amp;lt;button type=&quot;submit&quot; ng-click=&quot;saveOther(record)&quot;&amp;gt;Save and Add Another&amp;lt;/button&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스코프 기능:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$scope.record = {};

$scope.save = function (record) {    

if(this.saveForm.$valid)
  {

    $http.post('/api/save', record).
    success(function(data) {
        // take action based off which submit button pressed
    });
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/27025618/how-to-handle-multiple-submit-buttons-in-a-form-using-angular-js&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>AngularJS</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/825</guid>
      <comments>https://codeshow.tistory.com/825#entry825comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:03:26 +0900</pubDate>
    </item>
    <item>
      <title>Wordpress에서 사용자 지정 게시물 유형에 대한 사용자 지정 이미지 크기</title>
      <link>https://codeshow.tistory.com/824</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&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;articles&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;functions.php&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;function thumb_size($id)
{
    if(get_post_type() == &quot;articles&quot;)
    {
        add_image_size('articles-thumb', 113, 72, true);
    }
}
add_action ( 'publish_post', 'thumb_size' );
&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;the_post_thumbnail('articles-thumb');
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 제가 보기에 출력은 제가 선언한 것과 같은 크기가 아닌데, 무슨 문제가 있나요?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 같은 문제에 직면해 있습니다. 업로드 종류에 따라 이미지 변화를 많이 생성하는 것은 좋은 생각이 아닙니다.&lt;/font&gt;&lt;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;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단 하나의 선만 사용하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;add_image_size('articles-thumb', 113, 72, true);&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;php 파일.&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;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 질문에 있는 줄과 함께 표시합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;the_post_thumbnail('articles-thumb');&lt;/code&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;이 플러그인은 잘 작동합니다. http://wordpress.org/extend/plugins/regenerate-thumbnails/ 이미지 크기를 설정하기 전에 이미지를 업로드하면 해당 크기의 썸네일이 표시되지 않습니다.&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;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 이미지를 워드프레스에 업로드한 후 이미지의 기본 크기 3을 생성합니다. 썸네일 중간 크기 큰 크기 현재 테마에 이 이미지 크기를 사용하려면 모든 사용자가 다음 코드를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;php inside 테마 폴더 WordPress action intermediate_image_size_advanced를 사용하여 이들을 제거한 후 썸네일, 중간 및 큰 크기 설정을 해제합니다. 이는 전체 이미지 크기만 남음을 의미합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function w3learn_filter_image_sizes( $sizes) {

    unset( $sizes['thumbnail']);
    unset( $sizes['medium']);
    unset( $sizes['large']);

    return $sizes;
}
add_filter('intermediate_image_sizes_advanced', 'w3learn_filter_image_sizes');`
&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;a href=&quot;http://w3-learn.com/tutorials/removing-default-media-image-sizes-in-wordpress/&quot; rel=&quot;nofollow&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;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/15139881/custom-image-size-for-a-custom-post-type-in-wordpress&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>WordPress</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/824</guid>
      <comments>https://codeshow.tistory.com/824#entry824comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:03:19 +0900</pubDate>
    </item>
    <item>
      <title>WP_Query 개체가 비어 있는지 테스트</title>
      <link>https://codeshow.tistory.com/823</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WP_Query 개체가 비어 있는지 테스트&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WP_Query 개체가 일치 항목을 반환하지 않는지 테스트하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;템플릿과 같은 작업을 수행할 수 있으면 좋겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
    $my_query = new WP_Query(array('post_type' =&amp;gt; 'biographies'))
    if( ***HOW DO I TEST $my_query HERE*** ) {
        //if $my_query finds anything loop through it here
    } else {
        //if $my_query does not find anything            
    }
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1 papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집&lt;/font&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 좋은 예로, 쿼리에서 다음과 같은 것이 발견되는 경우에만 h2를 표시하고자 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
    $outside_leasing_query = new WP_Query(array( 'post_type' =&amp;gt; 'resin_biographies', 'tax_query' =&amp;gt; array(
        'relation' =&amp;gt; 'AND',
        array( 'taxonomy' =&amp;gt; 'resin_buildings', 'field' =&amp;gt; 'slug', 'terms' =&amp;gt; $page_slug ),
        array( 'taxonomy' =&amp;gt; 'resin_leasing_companies', 'field' =&amp;gt; 'slug', 'terms' =&amp;gt; 'rubenstein-partners', 'operator' =&amp;gt; 'NOT IN' )
    ) )); // resin_buildings taxonomy term slug must match page slug
?&amp;gt;

&amp;lt;h2&amp;gt;Outside Leasing Contacts&amp;lt;/h2&amp;gt;

&amp;lt;?php while ( $outside_leasing_query-&amp;gt;have_posts() ) : $outside_leasing_query-&amp;gt;the_post(); ?&amp;gt;

    &amp;lt;article &amp;lt;?php post_class('group'); ?&amp;gt;&amp;gt;
        &amp;lt;?php
        if( get_post_meta( $post-&amp;gt;ID, '_biography_headshot', true ) != '' ) {
            echo '&amp;lt;img class=&quot;contact-thumb&quot; src=&quot;' . get_post_meta( $post-&amp;gt;ID, '_biography_headshot', true ) . '&quot; alt=&quot;'. get_the_title() .'&quot; /&amp;gt;';
        } else {
            echo '&amp;lt;img class=&quot;contact-thumb-placeholder&quot; src=&quot;' . get_bloginfo('template_url') . '/images/default_headshot.jpg&quot; alt=&quot;'. get_the_title() . '&quot; /&amp;gt;';
        }
        ?&amp;gt;
        &amp;lt;div class=&quot;contact-info&quot;&amp;gt;
            &amp;lt;hgroup&amp;gt;
                &amp;lt;?php the_title( '&amp;lt;h3&amp;gt;', '&amp;lt;/h3&amp;gt;' ); ?&amp;gt;
                &amp;lt;h4 class=&quot;contact-title&quot;&amp;gt;&amp;lt;?php echo get_post_meta( $post-&amp;gt;ID, '_biography_title', true ); ?&amp;gt;&amp;lt;/h4&amp;gt;
            &amp;lt;/hgroup&amp;gt;
            &amp;lt;div class=&quot;contact-address&quot;&amp;gt;&amp;lt;?php echo wpautop( get_post_meta( $post-&amp;gt;ID, '_biography_address', true ) ); ?&amp;gt;&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;contact-tel&quot;&amp;gt;&amp;lt;span&amp;gt;T&amp;lt;/span&amp;gt; &amp;lt;?php echo get_post_meta( $post-&amp;gt;ID, '_biography_tel', true ); ?&amp;gt;&amp;lt;/div&amp;gt;
            &amp;lt;?php if( get_post_meta( $post-&amp;gt;ID, '_biography_fax', true ) != '' ) { ?&amp;gt;
                &amp;lt;div class=&quot;contact-fax&quot;&amp;gt;&amp;lt;span&amp;gt;F&amp;lt;/span&amp;gt; &amp;lt;?php echo get_post_meta( $post-&amp;gt;ID, '_biography_fax', true ); ?&amp;gt;&amp;lt;/div&amp;gt;
            &amp;lt;?php } ?&amp;gt;
            &amp;lt;div class=&quot;contact-email&quot;&amp;gt;&amp;lt;a href=&quot;mailto:&amp;lt;?php echo get_post_meta( $post-&amp;gt;ID, '_biography_email', true ); ?&amp;gt;&quot;&amp;gt;&amp;lt;?php echo get_post_meta( $post-&amp;gt;ID, '_biography_email', true ); ?&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/article&amp;gt;

&amp;lt;?php endwhile; ?&amp;gt;
&amp;lt;?php wp_reset_postdata(); ?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;표준 워드프레스 루프는 have_posts()를 사용하여 이 작업을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
$my_query = new WP_Query(array('post_type' =&amp;gt; 'biographies'));
if($my_query-&amp;gt;have_posts()) : while($my_query-&amp;gt;have_posts()) : $my_query-&amp;gt;the_post();
?&amp;gt;
&amp;lt;!-- YOUR POST(S) --&amp;gt;
&amp;lt;?php endwhile; else : ?&amp;gt;
&amp;lt;p&amp;gt;No posts found&amp;lt;/p&amp;gt;
&amp;lt;?php endif; ?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 사용할 수 있을 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;!($my_query-&amp;gt;have_posts())&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;&amp;lt;?php
    $my_query = new WP_Query(array('post_type' =&amp;gt; 'biographies'))
    if( !($my_query-&amp;gt;have_posts())) {
        //if $my_query finds anything loop through it here
    } else {
        //if $my_query does not find anything            
    }
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 예에서는 다음과 같이 설명합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//if $my_query does not find anything
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 매개 변수를 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$my_query_found_something = 'not';
&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;if ($my_query_found_something == 'not') {
// keep looking
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/10952442/test-if-wp-query-object-is-empty&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>WordPress</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/823</guid>
      <comments>https://codeshow.tistory.com/823#entry823comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:03:12 +0900</pubDate>
    </item>
    <item>
      <title>하이퍼링크에서 모든 스타일/형식 제거</title>
      <link>https://codeshow.tistory.com/822</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;href&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 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;간단히 링크에 대한 스타일을 정의할 수 있습니다. 이 스타일은 다음을 재정의합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a:hover&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a:visited&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 class=&quot;lang-css prettyprint-override&quot;&gt;&lt;code&gt;a {
  color: blue;
  text-decoration: none; /* no underline */
}
&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;inherit&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 부모 스타일의 속성을 사용하려면 value:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-css prettyprint-override&quot;&gt;&lt;code&gt;body {
  color: blue;
}
a {
  color: inherit; /* blue colors for links too */
  text-decoration: inherit; /* no underline */
}
&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 class=&quot;lang-css prettyprint-override&quot;&gt;&lt;code&gt;a {
    all: unset;
}

&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 class=&quot;lang-css prettyprint-override&quot;&gt;&lt;code&gt;a, button /* &amp;amp;c... */ {
    all: unset;
}

&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 해당 속성도 제거됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;{cursor: pointer;}&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 링크에서.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 당신이 찾고 있는 것일 수도 있고 그렇지 않을 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 번째 경우에 이 속성을 추가하기만 하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;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;all&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속기, 이 페이지를 확인하세요: https://developer.mozilla.org/en-US/docs/Web/CSS/all&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;Emmi가 말했듯이 호환성을 확인하는 것을 잊지 마세요: https://caniuse.com/css-all&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&gt;&lt;code&gt;a&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오버라이드해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어,&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-css prettyprint-override&quot;&gt;&lt;code&gt;a { color:red; }
a:hover { color:blue; }
.nav a { color:green; }
&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;.nav a&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;strong papago-id=&quot;15-1&quot;&gt;항상&lt;/strong&gt; 녹색일 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;:hover&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;!important&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 하지만 하지 말아야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;빠져드는 것은 나쁜 습관입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-css prettyprint-override&quot;&gt;&lt;code&gt;.nav a { color:green !important; } /*I'm a bad person and shouldn't use !important */
&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;strong papago-id=&quot;24-1&quot;&gt;항상&lt;/strong&gt; 초록색이 될 겁니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그냥 사용하시면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스타일시트의 Selector를 선택하여 앵커/hyperlink의 모든 상태를 정의합니다.&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;a {
    color: blue;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 링크 스타일을 무시하고 모든 주를 파란색으로 만듭니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;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;a.redLink{color:red;}&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 다음에는 이것을 호버링하고 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;a.redLink:hover{color:red;}&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 다른 호버 상태에서 링크의 색이 변경되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/8919682/remove-all-styling-formatting-from-hyperlinks&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>CSS</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/822</guid>
      <comments>https://codeshow.tistory.com/822#entry822comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:03:05 +0900</pubDate>
    </item>
    <item>
      <title>Gulp 오류: 감시 작업은 함수여야 합니다.</title>
      <link>https://codeshow.tistory.com/821</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Gulp 오류: 감시 작업은 함수여야 합니다.&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;// Modules &amp;amp; Plugins
var gulp = require('gulp');
var concat = require('gulp-concat');
var myth = require('gulp-myth');
var uglify = require('gulp-uglify');
var jshint = require('gulp-jshint');
var imagemin = require('gulp-imagemin');

// Styles Task
gulp.task('styles', function() {
    return gulp.src('app/css/*.css')
        .pipe(concat('all.css'))
        .pipe(myth())
        .pipe(gulp.dest('dist'));
});

// Scripts Task
gulp.task('scripts', function() {
    return gulp.src('app/js/*.js')
        .pipe(jshint())
        .pipe(jshint.reporter('default'))
        .pipe(concat('all.js'))
        .pipe(uglify())
        .pipe(gulp.dest('dist'));
});

// Images Task
gulp.task('images', function() {
    return gulp.src('app/img/*')
        .pipe(imagemin())
        .pipe(gulp.dest('dist/img'));
});

// Watch Task
gulp.task('watch', function() {
    gulp.watch('app/css/*.css', 'styles');
    gulp.watch('app/js/*.js', 'scripts');
    gulp.watch('app/img/*', 'images');
});

// Default Task
gulp.task('default', gulp.parallel('styles', 'scripts', 'images', 'watch'));
&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;images&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;scripts&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;css&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;code&gt;return&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작업에서 - 책에는 없었지만 구글 검색을 통해 이것이 필요하다는 것을 알 수 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 가진 문제는.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;default&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;태스크 오류:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[18:41:59] Error: watching app/css/*.css: watch task has to be a function (optionally generated by using gulp.parallel or gulp.series)
    at Gulp.watch (/media/sf_VM_Shared_Dev/webdevadvlocal/gulp/public_html/gulp-book/node_modules/gulp/index.js:28:11)
    at /media/sf_VM_Shared_Dev/webdevadvlocal/gulp/public_html/gulp-book/gulpfile.js:36:10
    at taskWrapper (/media/sf_VM_Shared_Dev/webdevadvlocal/gulp/public_html/gulp-book/node_modules/undertaker/lib/set-task.js:13:15)
    at bound (domain.js:287:14)
    at runBound (domain.js:300:12)
    at asyncRunner (/media/sf_VM_Shared_Dev/webdevadvlocal/gulp/public_html/gulp-book/node_modules/async-done/index.js:36:18)
    at nextTickCallbackWith0Args (node.js:419:9)
    at process._tickCallback (node.js:348:13)
    at Function.Module.runMain (module.js:444:11)
    at startup (node.js:136:18)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 또한 없기 때문이라고 생각합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;return&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시계 임무에서&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 오류 메시지가 명확하지 않습니다 - 적어도 저에게는.&lt;/font&gt;&lt;font 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;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;맨 나중에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gulp.watch()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 그것도 소용이 없었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;gulp 3.x에서 작업의 이름을 전달할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gulp.watch()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;gulp.task('watch', function() {
  gulp.watch('app/css/*.css', ['styles']);
  gulp.watch('app/js/*.js', ['scripts']);
  gulp.watch('app/img/*', ['images']);
});
&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;gulp 4.x에서는 더 이상 그렇지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능을 통과시켜야 &lt;strong papago-id=&quot;13-1&quot;&gt;합니다&lt;/strong&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 꿀꺽꿀꺽 4.x에서 하는 관습적인 방법은 a를 하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gulp.series()&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 class=&quot;papago-parent&quot;&gt;지정된 작업만 실행하는 함수를 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;gulp.task('watch', function() {
  gulp.watch('app/css/*.css', gulp.series('styles'));
  gulp.watch('app/js/*.js', gulp.series('scripts'));
  gulp.watch('app/img/*', gulp.series('images'));
});
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;GULP-V4.0&lt;/font&gt;&lt;/strong&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;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 무엇을 잘못했는지 자세히 분석합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 reload 기능을 호출하는 것을 잊었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;watch&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;html 파일이 약간 변경된 것을 알아차렸습니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부터&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fireUp&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;KeepWatching&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;차단하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이들은 직렬보다는 병렬로 시작할 필요가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 변수 런에서 병렬 함수를 사용했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&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;gulp.task('watch', function(){
    gulp.watch('app/sass/**/*.sass', gulp.series('sass'));
});
&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;version gulp 4.xx의 경우&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;Gulp 4.0에서 효과가 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;gulp.task('watch', function() {
      gulp.watch('src/images/*.png', gulp.series('images'));
      gulp.watch('src/js/*.js', gulp.series('js'));
      gulp.watch('src/scss/*.scss', gulp.series('css'));
      gulp.watch('src/html/*.html', gulp.series('html'));
});
&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;gulp.task('watch', function(){
    gulp.watch('css/shop.css', gulp.series(['shop']));
});
&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;제 경우에는 이렇게 해주세요: (gulpfile.js에서) (설치: gulp, gulpasss)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var gulp = require('gulp');
var sass = require('gulp-sass')(require('sass'));

var cssDest = 'style';
var cssInputFile = 'source/style.scss';
var watchedFiles = 'source/**/*.scss';




gulp.task('buildcss', function(){
    return gulp.src(cssInputFile)
        .pipe(sass({
            outputStyle: 'compressed'
        }))
        .pipe(gulp.dest(cssDest));
});

gulp.task('watch', function(){
    gulp.watch(watchedFiles, gulp.series(['buildcss']));
});
&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;strong papago-id=&quot;20-1&quot;&gt;꿀꺽꿀꺽 시계&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt; &lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(v 4.0)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 쪽에서도 &quot;{usePolling: true}&quot;을 추가해야 작동할 수 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;gulp.watch(paths.js_src + '/*.js', {usePolling: true}, gulp.series(projectScripts, ondemandProjectScripts))
&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;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/39665773/gulp-error-watch-task-has-to-be-a-function&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>JavaScript</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/821</guid>
      <comments>https://codeshow.tistory.com/821#entry821comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:02:58 +0900</pubDate>
    </item>
    <item>
      <title>매달려 있는 이미지란 무엇이고 사용되지 않은 이미지란 무엇입니까?</title>
      <link>https://codeshow.tistory.com/820</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매달려 있는 이미지란 무엇이고 사용되지 않은 이미지란 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://docs.docker.com/engine/reference/commandline/image_prune/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;1-1&quot;&gt;도커 이미지 프루닝의 도커 설명서&lt;/a&gt;에서 -a 플래그를 사용하여 다음 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매달린 이미지뿐만 아니라 사용하지 않는 모든 이미지 제거&lt;/font&gt;&lt;/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;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;-a를 지정하면 컨테이너에서 참조하지 않는 모든 이미지도 제거됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;달링 이미지가 무엇인지, 달링과 사용하지 않는 이미지의 차이점이 무엇인지 누가 설명해 줄 수 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;6-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;docker ps -a&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;용기 내부에서 사용 중인 것으로 표시된 모든 이미지는 &quot;사용된 이미지&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;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;8-1&quot;&gt;반면&lt;/strong&gt;에 달랑달랑하는 이미지는 이미지의 새로운 빌드를 만들었을 뿐 새로운 이름이 붙여지지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 당신이 가지고 있는 오래된 이미지는 &quot;엉클어진 이미지&quot;가 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 옛날 이미지들은 태그 없이 표시되는 것들입니다.&quot;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;none&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot; 당신이 달릴 때 그 이름으로&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker images&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;docker system prune -a&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 사용하지 않는 이미지와 매달려 있는 이미지를 모두 제거합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 컨테이너에서 사용 중인 이미지는 종료되었거나 현재 실행 중인 이미지와 상관없이 영향을 받지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;h2 papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Dangling Images를 가장 안전하고 쉽게 정리할 수 있는 방법&lt;/font&gt;&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;docker images --quiet --filter=dangling=true | xargs --no-run-if-empty docker rmi
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 이미지는 여러 레이어로 구성됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;행글링 이미지는 태그가 지정된 이미지와 관련이 없는 레이어입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 이상 목적을 달성하지 못하고 디스크 공간을 소모합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: 사용하지 말 것을 권장합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;prune&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;docker system prune -a&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 이전 릴리스로 롤백할 수 없는 컨테이너에서 참조하지 않는 모든 이미지를 제거합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필터 플래그를 추가하여 매달린 영상을 나열하려면,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-f&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;dangling=true&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;docker images&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h3 papago-id=&quot;22&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;docker images -f dangling=true
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3 papago-id=&quot;23&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;docker rmi $(docker images -f dangling=true -q)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오어&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker images --quiet --filter=dangling=true | xargs --no-run-if-empty docker rmi
&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;cron 작업을 실행하여 해당 엉킴을 삭제할 때 위의 내용을 사용하여 작업이 성공적으로 실행되는지 확인합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;젠킨스의 경우처럼 기계에 매달려 있는 것이 없더라도 아래의 commad 작업으로 자유 스타일 작업을 실행하면 절대 실패하지 않습니다.&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;strong papago-id=&quot;27-3&quot;&gt;이미지 ID&lt;/strong&gt;라고 불리는 &lt;strong papago-id=&quot;27-1&quot;&gt;sha256 다이제스트&lt;/strong&gt;에 의해 참조됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지가 도커 호스트에 존재하는 데 필요한 것은 이 다이제스트뿐입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 이러한 다이제스트를 가리키는 &lt;strong papago-id=&quot;27-5&quot;&gt;태그&lt;/strong&gt;(예: 'busybox:latest' 태그가 현재 이미지 ID c30178c523을 가리키는 경우)가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 시스템상에서&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 태그가 동일한 이미지를 가리킬 수 있으며, busybox의 새 복사본을 끄집어내거나 응용 프로그램 이미지의 새 버전을 만들 때와 같이 다른 ID를 가리키도록 모든 태그를 변경할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;14-0&quot;&gt;달링 영상&lt;/strong&gt;은 태그가 없고 하위 &lt;strong papago-id=&quot;14-2&quot;&gt;영상&lt;/strong&gt;(예: 다른 버전의 영상을 사용한 이전 영상)이 없는 영상입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FROM busybox:latest&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 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;docker build&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;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 이전 이미지 ID를 참조하는 컨테이너가 여전히 실행되고 있지 않는 한 이러한 컨테이너는 제거해도 안전합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;32-1&quot;&gt;이들을 유지하는 주된 이유는 빌드 캐싱 목적 때문입니다.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 현재 정지된 컨테이너(정지된 컨테이너 포함)에서 사용하지 않는 이미지를 다운로드했을 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 이미지는 매달린 이미지와는 완전히 다르며, 향후 사용할 계획이 없거나 필요할 때 다른 복사본을 다운로드하는 것을 꺼리지 않는 한 제거해도 안전할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;34-0&quot;&gt;행글링 이미지&lt;/strong&gt;는 태그가 지정된 이미지와 관련이 없는 레이어입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 이상 목적을 달성하지 못하고 디스크 공간을 소모합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;35-1&quot;&gt;사용&lt;/strong&gt;되지 않은 &lt;strong papago-id=&quot;35-1&quot;&gt;이미지&lt;/strong&gt;는 컨테이너에 할당되거나 사용되지 않은 이미지입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매달린 이미지를 나열하려면:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker images -f dangling=true
&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;/strong&gt;는 &lt;strong papago-id=&quot;37-2&quot;&gt;태그&lt;/strong&gt;가 없는 이미지입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 명령은 매달리는 이미지의 목록을 제공합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker images --filter &quot;dangling=true&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;docker image prune&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 행잉 이미지를 삭제합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;39-0&quot;&gt;사용&lt;/strong&gt;되지 않는 &lt;strong papago-id=&quot;39-0&quot;&gt;이미지&lt;/strong&gt;는 태그가 있지만 현재 컨테이너로 사용되지 않는 이미지입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;미래에 필요할 수도 있고 필요하지 않을 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;docker image prune -a&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하지 않은 이미지뿐만 아니라 모든 매달림 이미지를 삭제합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로 사용하지 않는 모든 이미지를 일정 시간까지 제거하지는 않을 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 필터로 제거하는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;docker image prune -a -f --filter &quot;until=6h&quot;&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/ZS1y0.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/ZS1y0.png&quot; alt=&quot;&quot;&gt;&lt;/a&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;이미지 스크린샷에서 &quot;none&quot; 이름은 매달린 이미지입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지가 매달려 있다는 것은 이미지의 새 빌드를 만들었지만 새 이름이 지정되지 않았다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 당신이 가지고 있는 오래된 이미지는 &quot;엉클어진 이미지&quot;가 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전 이미지는 태그 없이 도커 이미지를 실행하면 이름에 &quot;&quot;이 표시되는 이미지입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;docker system prune -a&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 사용하지 않는 이미지와 매달려 있는 이미지를 모두 제거합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 컨테이너에서 사용 중인 이미지는 종료되었거나 현재 실행 중인 이미지와 상관없이 영향을 받지 않습니다.&lt;/font&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;여기 https://forums.docker.com/t/how-to-delete-cache/5753 에서 aliases(Andyneff)의 도움으로 매달린 이미지를 제거하는 유용한 명령어를 보았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;alias docker_clean_images='docker rmi $(docker images -a --filter=dangling=true -q)' 
alias docker_clean_ps='docker rm $(docker ps --filter=status=exited --filter=status=created -q)' 
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫번째는 매달린 이미지를 모두 정리합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 빌드에서 남은 중간 이미지를 제거하는 데 유용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 번째는 정지된 용기를 제거하기 위한 것입니다.&lt;/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;캐시를 모두 제거하려면 먼저 컨테이너에서 사용 중인 이미지를 제거할 수 없으므로 모든 컨테이너가 중지 및 제거되었는지 확인해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 비슷한 거.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;docker kill $(docker ps -q) docker_clean_ps docker rmi $(docker images
-a -q)
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 캐시에 있는 모든 이미지가 삭제되고 제거됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/45142528/what-is-a-dangling-image-and-what-is-an-unused-image&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>docker</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/820</guid>
      <comments>https://codeshow.tistory.com/820#entry820comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:02:50 +0900</pubDate>
    </item>
    <item>
      <title>Visual Studio에서 MySQL 데이터 원본에 연결하는 방법</title>
      <link>https://codeshow.tistory.com/819</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Visual Studio에서 MySQL 데이터 원본에 연결하는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://dev.mysql.com/downloads/connector/net/&quot; papago-id=&quot;1-1&quot; rel=&quot;noreferrer&quot;&gt;MySQL Connector/Net&lt;/a&gt;을 사용하여 어셈블리(MySql)를 참조하여 데이터베이스에 연결합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Data.dll) 및 연결 문자열 전달&lt;/font&gt;&lt;/font&gt;&lt;code&gt;MySqlConnection&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;없기 에 좋아요&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 저는 설치할 것이 없어서 좋습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Visual Studio 2010에서 설치하지 않고 &quot;데이터 소스 선택&quot;할 수 있는 방법이 있습니까?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 목록 중 하나에 MySQL 옵션(localhost)이 표시되도록 하려면 어떻게 해야 합니까?&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;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(그런데 ODBC를 사용하고 싶지 않습니다.)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버 탐색기의 &quot;연결 추가&quot;:&lt;/font&gt;&lt;/strong&gt; &lt;img src=&quot;https://i.stack.imgur.com/sx7sf.png&quot; alt=&quot;alt text&quot;&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;엔티티 데이터 모델 마법사:&lt;/font&gt;&lt;/strong&gt; &lt;img src=&quot;https://i.stack.imgur.com/iNBi2.png&quot; alt=&quot;alt text&quot;&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;MySQL을 설치합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET Connector는 여기 http://dev.mysql.com/downloads/connector/net/ 에서 찾을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/9eNnM.jpg&quot; alt=&quot;alt text&quot;&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;&quot;버전 6.7부터는 Connector/Net에 MySQL for Visual Studio 통합 기능이 더 이상 포함되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 기능은 이제 MySQL Installer for Windows를 사용하여 사용할 수 있는 MySQL for Visual Studio라는 별도의 제품에서 사용할 수 있습니다.&quot;&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;출처 : http://dev.mysql.com/downloads/connector/net/6.6.html&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 가지 해결책을 찾고 시도한 끝에 마침내 다음과 같은 결과를 얻었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;커넥터 제거&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제어판에서 MySQL for Visual Studio 제거&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/ipIhC.png&quot; alt=&quot;click here&quot;&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 표에 따라 다시 설치합니다.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/jc0Ys.png&quot; alt=&quot;click here&quot;&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어셈블리 파일을 복사합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C:\Program Files (x86)\MySQL\MySQL Connector Net 6.9.8\Assemblies\v4.5&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;C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로그오프 후 솔루션 다시 열기&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;즐거운 시간 되세요.&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&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;최신 Connector/NET 드라이버(6.7.4)를 제거하고 이전 버전(6.6.5)을 설치해야 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 사람들은 6.6.6을 그들을 위해 일한다고 보고합니다.&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;a href=&quot;https://stackoverflow.com/a/17774997/1414258&quot; papago-id=&quot;20-1&quot;&gt;MySQL 데이터 원본이 Visual Studio에 나타나지 않음&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;ol&gt; 
 &lt;li papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL Connector를 다운로드합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://dev.mysql.com/downloads/connector/net/#downloads&quot; rel=&quot;noreferrer&quot; papago-id=&quot;21-1&quot;&gt;여기&lt;/a&gt;서 NET(6.9.4 이 날짜)을 설치하고 &lt;strong papago-id=&quot;21-3&quot;&gt;Custom&lt;/strong&gt;!&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ASP를 제거합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET WEB Providers 옵션을 선택하거나 설치 관리자가 machine.config!에 기록합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://dev.mysql.com/downloads/windows/visualstudio/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;23-1&quot;&gt;여기&lt;/a&gt;서 MySQL for Visual Studio를 다운로드하여 &lt;strong papago-id=&quot;23-3&quot;&gt;Custom&lt;/strong&gt; 설치하세요. 통합 옵션을 확인하세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Connector 이후에는 이 단계가 필요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET 6.7 설치자는 더 이상 커넥터를 Visual Studio와 통합하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 설치 관리자는 예상보다 오래 걸릴 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이게 그거다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;VS와 올바르게 통합되었어야 할 대체 &lt;a href=&quot;http://dev.mysql.com/tech-resources/articles/mysql-installer-for-windows.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;24-1&quot;&gt;다운로드&lt;/a&gt;에서 여기에 설치할 수 있는데 설치가 안 되어 이상한 오류가 발생했고 재설치 후에도 괜찮습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Visual Studio에서는 설치하는 동안 Windows 레지스트리에 특정 항목을 추가하여 DDEX 공급자(Data Designer Extensibility)를 등록해야 합니다(&lt;/font&gt;&lt;/font&gt;&lt;code&gt;HKLM\SOFTWARE\Microsoft\VisualStudio\{version}\DataProviders&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;). 자세한 내용은 MSDN의 &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/bb163935.aspx&quot; rel=&quot;noreferrer&quot; papago-id=&quot;5-1&quot;&gt;DDEX 공급자 등록&lt;/a&gt;을 참조하십시오.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 패키지를 설치하는 중:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;커넥터/NET 8.0.16: https://dev.mysql.com/downloads/connector/net/&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;MySQL for Visual Studio 1.2.8: https://dev.mysql.com/downloads/windows/visualstudio/&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 데이터베이스를 데이터 &lt;strong papago-id=&quot;30-1&quot;&gt;원본 목록&lt;/strong&gt;에 추가합니다(Visual Studio 2017).&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지 &lt;a href=&quot;https://i.stack.imgur.com/xLAia.png&quot; rel=&quot;nofollow&quot; papago-id=&quot;31-0&quot;&gt;보기&lt;/a&gt; 64비트 시스템에서 vs 2013에 대해 동일한 문제가 발생했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 &lt;a href=&quot;https://cdn.mysql.com/Downloads/MySQLInstaller/mysql-visualstudio-plugin-1.1.1.msi&quot; rel=&quot;nofollow&quot; papago-id=&quot;31-2&quot;&gt;저는 VS용 MySql&lt;/a&gt; 확장을 다운로드하여 제 기계에 설치하려고 했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 다시 시작합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 &lt;strong papago-id=&quot;32-3&quot;&gt;원본 선택&lt;/strong&gt; 창에서 &lt;strong papago-id=&quot;32-1&quot;&gt;MySQL Database&lt;/strong&gt; 항목을 가져오려면 여기서 사용할 수 있는 &lt;strong papago-id=&quot;32-5&quot;&gt;MySQL for Visual Studio&lt;/strong&gt; 패키지를 설치해야 합니다(오늘 마지막 버전은 &lt;strong papago-id=&quot;32-7&quot;&gt;1.2.6&lt;/strong&gt;).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://dev.mysql.com/downloads/windows/visualstudio/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://dev.mysql.com/downloads/windows/visualstudio/&lt;/font&gt;&lt;/a&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;솔루션 탐색기에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 NuGet 패키지 관리를 클릭합니다.&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;MySql을 검색합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 패키지를 찾으면 설치를 클릭합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mysql 패키지를 사용하여 MySql 데이터베이스에 연결하는 샘플 컨트롤러입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리는 주로 MySqlConnection 개체를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; public class HomeController : Controller
{
    public ActionResult Index()
    {
        List&amp;lt;employeemodel&amp;gt; employees = new List&amp;lt;employeemodel&amp;gt;();
        string constr = ConfigurationManager.ConnectionStrings[&quot;ConString&quot;].ConnectionString;
        using (MySqlConnection con = new MySqlConnection(constr))
        {
            string query = &quot;SELECT EmployeeId, Name, Country FROM Employees&quot;;
            using (MySqlCommand cmd = new MySqlCommand(query))
            {
                cmd.Connection = con;
               con.Open();
                using (MySqlDataReader sdr = cmd.ExecuteReader())
                {
                    while (sdr.Read())
                    {
                        employees.Add(new EmployeeModel
                        {
                            EmployeeId = Convert.ToInt32(sdr[&quot;EmployeeId&quot;]),
                            Name = sdr[&quot;Name&quot;].ToString(),
                            Country = sdr[&quot;Country&quot;].ToString()
                        });
                    }
                }
                con.Close();
            }
        }

        return View(employees);
    }
}
&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;저도 같은 문제가 있었는데 비주얼 스튜디오용 MySQL Connector를 제거하고 비주얼 스튜디오용 MySQL을 제거하여 해결했습니다. (비주얼 스튜디오 2022 버전을 사용했기 때문에 2017 버전을 다운로드해야 했기 때문에 2019년에도 지원됩니다.) 이전 구성 요소를 다시 설치하고 프레임워크 버전을 사용하여 MySQL을 지원합니다. (sqlserver가 더 간단해서 조금 짜증납니다.)&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유감스럽게도 이것은 비주얼 스튜디오의 내장 도구에서는 지원되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;mysql 커넥터를 사용하여 자신의 데이터 공급자를 만들 수 있지만 코드에서 통합해야 합니다.&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;a) Visual Studio 2019 (Version 2022용 커넥터는 존재하지 않음)&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;b) &lt;a href=&quot;https://downloads.mysql.com/archives/installer/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;40-1&quot;&gt;MySQL Installer Community&lt;/a&gt; 8.0.28(이후는 아님)!&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;b) 새로 고침 설치 - 일부 구성 데이터가 이전 버전(Program Files, Program Data, AppData, Registry 등)에 남아 설치 관리자가 이를 사용하므로 MySQL 서비스가 설치 중에 중지되는 경우가 있습니다.&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;c) MySQL 5 호환 모드!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SHA 캐싱 옵션이 없습니다!&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로그인에 문제가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블은 VS 연결 가이드에서 볼 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;outf8mb3 | .&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET Framework 문제.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/4235291/how-to-connect-to-a-mysql-data-source-in-visual-studio&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MySQL</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/819</guid>
      <comments>https://codeshow.tistory.com/819#entry819comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:02:42 +0900</pubDate>
    </item>
    <item>
      <title>Flex Slider - 두 슬라이더에 대해 동일한 컨트롤을 추가하는 방법</title>
      <link>https://codeshow.tistory.com/818</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Flex Slider - 두 슬라이더에 대해 동일한 컨트롤을 추가하는 방법&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;http://www.woothemes.com/flexslider/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;1-1&quot;&gt;플렉스 슬라이더&lt;/a&gt;를 사용하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;같은 컨트롤로 한 페이지에 두 개의 슬라이더를 컨트롤해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 부분은 영상을 보여주는 주 슬라이더이고, 두 번째 부분은 텍스트입니다(이 경우 WP의 &quot;the_excect&quot;에서 가져온 것입니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로, 이것은 제가 한 페이지에 두 개의 슬라이드를 부를 때 사용하는 코드입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  $(window).load(function() {
    $('#main-slider').flexslider({
      animation: 'slide',
      controlsContainer: '.flex-container'
    });

    $('#secondary-slider').flexslider();
  });
&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;이제 두 컨트롤을 모두 동일한 컨트롤에 &quot;연결&quot;해야 하므로 화살표를 클릭하면 두 컨트롤이 모두 슬라이딩/페이드됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨트롤컨테이너 설정을 삭제하고 두 슬라이더에 연결하는 탐색을 직접 만들어 수행하려는 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 (테스트되지 않은 내용임에 유의하십시오)&lt;/font&gt;&lt;/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;링크에 rel 속성을 기록해 두십시오. 아래에서 이 속성을 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 값은 0부터 시작합니다. 슬라이드의 값과 일치합니다(예: 첫 번째 슬라이드는 0, 두 번째 슬라이드는 1 등).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;a rel=&quot;0&quot; class=&quot;slide_thumb&quot; href=&quot;#&quot;&amp;gt;slide link 1&amp;lt;/a&amp;gt;
&amp;lt;a rel=&quot;1&quot; class=&quot;slide_thumb&quot; href=&quot;#&quot;&amp;gt;slide link 2&amp;lt;/a&amp;gt;
&amp;lt;a rel=&quot;2&quot; class=&quot;slide_thumb&quot; href=&quot;#&quot;&amp;gt;slide link 3&amp;lt;/a&amp;gt;
&amp;lt;a rel=&quot;3&quot; class=&quot;slide_thumb&quot; href=&quot;#&quot;&amp;gt;slide link 3&amp;lt;/a&amp;gt;

&amp;lt;div id=&quot;main-slider&quot; class=&quot;flexslider&quot;&amp;gt;
&amp;lt;ul class=&quot;slides&quot;&amp;gt;
    &amp;lt;li&amp;gt;
        &amp;lt;img src=&quot;image1.jpg&quot; /&amp;gt;
    &amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;
        &amp;lt;img src=&quot;image2.jpg&quot; /&amp;gt;
    &amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;
        &amp;lt;img src=&quot;image3.jpg&quot; /&amp;gt;
    &amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;
        &amp;lt;img src=&quot;image4.jpg&quot; /&amp;gt;
    &amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;div id=&quot;secondary-slider&quot; class=&quot;flexslider&quot;&amp;gt;
&amp;lt;ul class=&quot;slides&quot;&amp;gt;
    &amp;lt;li&amp;gt;
        &amp;lt;p&amp;gt;Text 1&amp;lt;/p&amp;gt;
    &amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;
        &amp;lt;p&amp;gt;Text 2&amp;lt;/p&amp;gt;
    &amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;
        &amp;lt;p&amp;gt;Text 3&amp;lt;/p&amp;gt;
    &amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;
        &amp;lt;p&amp;gt;Text 4&amp;lt;/p&amp;gt;
    &amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&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;&amp;lt;script type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&amp;gt;
jQuery(document).ready(function($) {

$('#main-slider').flexslider({
    animation: &quot;slide&quot;,
    slideToStart: 0,
    start: function(slider) {
        $('a.slide_thumb').click(function() {
            $('.flexslider').show();
            var slideTo = $(this).attr(&quot;rel&quot;)//Grab rel value from link;
            var slideToInt = parseInt(slideTo)//Make sure that this value is an integer;
            if (slider.currentSlide != slideToInt) {
                slider.flexAnimate(slideToInt)//move the slider to the correct slide (Unless the slider is also already showing the slide we want);
            }
        });
    }

});

$('#secondary-slider').flexslider({
    animation: &quot;slide&quot;,
    slideToStart: 0,
    start: function(slider) {
        $('a.slide_thumb').click(function() {
            $('.flexslider').show();
            var slideTo = $(this).attr(&quot;rel&quot;)//Grab rel value from link;
            var slideToInt = parseInt(slideTo)//Make sure that this value is an integer;
            if (slider.currentSlide != slideToInt) {
                slider.flexAnimate(slideToInt)//move the slider to the correct slide (Unless the slider is also already showing the slide we want);
            }
        });
    }

});

});
&amp;lt;/script&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;이것이 올바른 방향으로 나아가게 할 것이라고 생각하지만 설명이 필요한 것이 있으면 소리쳐 보세요.&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;Flexslider 2의 경우 다음을 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sync: &quot;selector&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;선택.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그냥 슬라이더 중 하나만 설정하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;controlNav: false&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(window).load(function() {
    $('#main-slider').flexslider({
        animation: 'slide',
        controlNav: true,
        sync: '#secondary-slider'
    });

    $('#secondary-slider').flexslider({
        controlNav: false
    });
});
&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;이것은 부모 플렉스슬라이더에 의해 조종되는 1명 또는 100명의 아이들에게 효과가 있습니다.&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div id=&quot;main-slider&quot; class=&quot;flexslider&quot;&amp;gt;
  &amp;lt;ul class=&quot;slides&quot;&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;img src=&quot;image1.jpg&quot; /&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;img src=&quot;image2.jpg&quot; /&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;img src=&quot;image3.jpg&quot; /&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;img src=&quot;image4.jpg&quot; /&amp;gt;&amp;lt;/li&amp;gt;
  &amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;div class=&quot;flexslider_children&quot;&amp;gt;
  &amp;lt;ul class=&quot;slides&quot;&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Text 1&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Text 2&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Text 3&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Text 4&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;
  &amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;div class=&quot;flexslider_children&quot;&amp;gt;
  &amp;lt;ul class=&quot;slides&quot;&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Text 1&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Text 2&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Text 3&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Text 4&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;
  &amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 javascript는 그냥 실행해주세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/** 
* Create the children flexsliders. Must be array of jquery objects with the
* flexslider data. Easiest way is to place selector group in a var.
*/
var children_slides = $('.flexslider_children').flexslider({
  'slideshow': false, // Remove the animations
  'controlNav' : false // Remove the controls
}); 

/** 
* Set up the main flexslider
*/
$('.flexslider').flexslider({
  'pauseOnHover' : true,
  'animationSpeed': 2000,
  'slideshowSpeed': 5000,
  'initDelay': 3000,
  // Call the update_children_slides which itterates through all children slides 
  'before' : function(slider){ // Hijack the flexslider
    update_children_slides(slider.animatingTo);
  }   
}); 

/** 
* Method that updates children slides
* fortunately, since all the children are not animating,
* they will only update if the main flexslider updates. 
*/
function update_children_slides (slide_number){
  // Iterate through the children slides but not past the max
  for (i=0;i&amp;lt;children_slides.length;i++) {
    // Run the animate method on the child slide
    $(children_slides[i]).data('flexslider').flexAnimate(slide_number);
  }   
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 되길 바랍니다!!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 하려고 했던 것과 매우 유사하기 때문에 이를 추가했습니다. 플렉스슬라이더에서 여러 동기화를 사용하려고 하는 것은 저뿐만이 아닌 것 같습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;밴더스내치 씨의 솔루션이 효과가 있는지 확인하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 그의 작품의 변형을 보여주기 위해 아래에 그의 코드를 수정한 글을 올립니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/** 
* Create the children flexsliders. Must be array of jquery objects with the
* flexslider data. Easiest way is to place selector group in a var.
*/
var children_slides = $('.flexslider_children').flexslider({
    slideshow: false, // Remove the animations
    controlNav : false, // Remove the controls
    animationSpeed: 1200,
    itemWidth: 175,
    itemMargin: 20,
    animation: 'linear',
    easing: 'swing',
    animationLoop: false,
    minItems: getGridSize(), // use function to pull in initial value
    maxItems: getGridSize()
}); 


/** 
* Set up the main flexslider
*/
$('#flexslider_index_band_1').flexslider({
    pauseOnHover : true,
    animationSpeed: 1200,
    slideshow: false,
    initDelay: 3000,
    directionNav: true,
    animation: 'linear',
    easing: 'swing',
    animationLoop: false,
    controlsContainer: '.paginated_nav',
    directionNav: true,
    prevText: '',
    nextText: '',
    itemWidth: 175,
    itemMargin: 20,
    sync: '#flexslider_index_band_2',
    minItems: getGridSize(), // use function to pull in initial value
    maxItems: getGridSize(), // use function to pull in initial value
    // Call the update_children_slides which itterates through all children slides 
    before : function(slider){ // Hijack the flexslider
        update_children_slides(slider.animatingTo);
    }   
}); 

/** 
* Method that updates children slides
* fortunately, since all the children are not animating,
* they will only update if the main flexslider updates. 
*/
function update_children_slides (slide_number){
    // Iterate through the children slides but not past the max
    for (i=0;i&amp;lt;children_slides.length;i++) {
    // Run the animate method on the child slide
    $(children_slides[i]).data('flexslider').flexAnimate(slide_number);
    }   
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;});&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 찾은 한 가지 해결책은 사용자 정의 배너 탐색을 만드는 것이었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;위치를 정하고 원하는 대로 스타일링 해주세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;유일하게 중요한 것은 그것을 목표로 하는 방법을 갖는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 예제에서는 &lt;em papago-id=&quot;17-1&quot;&gt;slider-next&lt;/em&gt;와 &lt;em papago-id=&quot;17-3&quot;&gt;slider-prev&lt;/em&gt;의 ID를 사용했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;ul&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;a id=&quot;slider-next&quot; href=&quot;#&quot;&amp;gt;Next&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;a id=&quot;slider-prev&quot; href=&quot;#&quot;&amp;gt;Prev&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 두 개의 플렉서 슬라이더를 만들고 CSS에 원하는 대로 배치합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;메인 배너 .flexslider와 캡션 .captions의 제목을 지정하겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;flexslider&quot;&amp;gt;
  &amp;lt;ul class=&quot;slides&quot;&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;img src=&quot;/assets/images/banner-example.png&quot; width=&quot;893&quot; height=&quot;377&quot;&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;img src=&quot;/assets/images/banner-example-2.png&quot; width=&quot;893&quot; height=&quot;377&quot; /&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;img src=&quot;/assets/images/banner-example-3.png&quot; width=&quot;893&quot; height=&quot;377&quot; /&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;img src=&quot;/assets/images/banner-example-4.png&quot; width=&quot;893&quot; height=&quot;377&quot; /&amp;gt;&amp;lt;/li&amp;gt;
  &amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;!-- Some other place in the code --&amp;gt;
&amp;lt;div class=&quot;captions&quot;&amp;gt;
  &amp;lt;ul id=&quot;info&quot; class=&quot;slides&quot;&amp;gt;
    &amp;lt;li&amp;gt;
      &amp;lt;h2&amp;gt;Example Banner 1&amp;lt;/h2&amp;gt;
      &amp;lt;p&amp;gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit.&amp;lt;/p&amp;gt;
      &amp;lt;a href=&quot;read-more&quot;&amp;gt;Read More&amp;lt;/a&amp;gt;
    &amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;
      &amp;lt;h2&amp;gt;Example Banner 2&amp;lt;/h2&amp;gt;
      &amp;lt;p&amp;gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit.&amp;lt;/p&amp;gt;
      &amp;lt;a href=&quot;read-more&quot;&amp;gt;Read More&amp;lt;/a&amp;gt;
    &amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;
      &amp;lt;h2&amp;gt;Example Banner 3&amp;lt;/h2&amp;gt;
      &amp;lt;p&amp;gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit.&amp;lt;/p&amp;gt;
      &amp;lt;a href=&quot;read-more&quot;&amp;gt;Read More&amp;lt;/a&amp;gt;
    &amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;
      &amp;lt;h2&amp;gt;Example Banner 4&amp;lt;/h2&amp;gt;
      &amp;lt;p&amp;gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit.&amp;lt;/p&amp;gt;
      &amp;lt;a href=&quot;read-more&quot;&amp;gt;Read More&amp;lt;/a&amp;gt;
    &amp;lt;/li&amp;gt;
  &amp;lt;/ul&amp;gt;
&amp;lt;/div&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;javascript 파일에서 두 슬라이드를 모두 활성화하고 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;아래의 예시.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;.trigger jQuery 함수는 여기서 마법사가 수행하는 기능입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문서를 확인해 보세요. http://api.jquery.com/trigger/&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//Load slider after .ready()
$(window).load(function(){

    //Activate Both Banner and Caption slides
    $('.flexslider').flexslider({
        controlNav: false,
    });

    $('.captions').flexslider({
        controlNav: false,
    });

    //Sink Control Navs
    $('#slider-next').click(function(){
        $('.flexslider .flex-next').trigger('click');
        $('.captions .flex-next').trigger('click');
    });

    $('#slider-prev').click(function(){
        $('.flexslider .flex-prev').trigger('click');
        $('.captions .flex-prev').trigger('click');
    })
});
&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/10171709/flex-slider-how-to-add-same-controls-for-two-sliders&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>WordPress</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/818</guid>
      <comments>https://codeshow.tistory.com/818#entry818comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:02:33 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트에서 동등한 것에 대한 부정적인 뒤보기</title>
      <link>https://codeshow.tistory.com/817</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트에서 동등한 것에 대한 부정적인 뒤보기&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트 정규 표현식에서 &lt;a href=&quot;http://www.regular-expressions.info/lookaround.html#lookbehind&quot; rel=&quot;noreferrer&quot; papago-id=&quot;1-1&quot;&gt;부정적&lt;/a&gt;인 느낌을 얻을 수 있는 방법이 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정 문자 집합으로 시작하지 않는 문자열을 일치시켜야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열 시작 부분에 일치하는 부분이 있으면 실패하지 않고 이렇게 하는 regex를 찾을 수 없는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;부정적인 시선이 유일한 답인 것 같지만 자바스크립트에는 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 제가 일하고 싶은 정규 근무제입니다만, 그렇지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;(?&amp;lt;!([abcdefg]))m&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;따라서 jim 또는 m의 m과 일치하지만 jam은 일치하지 않습니다.&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;2018년부터 Look &lt;a href=&quot;https://github.com/tc39/proposal-regexp-lookbehind&quot; rel=&quot;noreferrer&quot; papago-id=&quot;5-1&quot;&gt;behind Assertions&lt;/a&gt;는 &lt;a href=&quot;https://github.com/tc39/proposals/blob/master/finished-proposals.md&quot; rel=&quot;noreferrer&quot; papago-id=&quot;5-3&quot;&gt;ECMA스크립트 언어 사양&lt;/a&gt;의 일부입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;// positive lookbehind
(?&amp;lt;=...)
// negative lookbehind
(?&amp;lt;!...)
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2018년 이전 답변&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트는 &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#special-negated-look-ahead&quot; rel=&quot;noreferrer&quot; papago-id=&quot;7-1&quot;&gt;네거티브 룩어헤드&lt;/a&gt;를 지원하므로 이를 위한 한 가지 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;입력 문자열을 반전합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;역수와 일치.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;성냥을 되돌리고 다시 포맷합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;hr&gt; 
&lt;pre&gt;&lt;code&gt;const reverse = s =&amp;gt; s.split('').reverse().join('');

const test = (stringToTests, reversedRegexp) =&amp;gt; stringToTests
  .map(reverse)
  .forEach((s,i) =&amp;gt; {
    const match = reversedRegexp.test(s);
    console.log(stringToTests[i], match, 'token:', match ? reverse(reversedRegexp.exec(s)[0]) : 'Ø');
  });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예 1:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@andrew-ensley의 질문에 따라:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;test(['jim', 'm', 'jam'], /m(?!([abcdefg]))/)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;jim true token: m
m true token: m
jam false token: Ø
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예 2:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&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; @neaumusic comment ()&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;max-height&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;line-height&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 상징적 존재&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;height&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;test(['max-height', 'line-height'], /thgieh(?!(-enil))/)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;max-height true token: height
line-height false token: Ø
&lt;/code&gt;&lt;/pre&gt;&lt;h2 papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Look &lt;a href=&quot;https://github.com/tc39/proposal-regexp-lookbehind&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;20-0&quot;&gt;behind Assertions&lt;/a&gt;는 2018년 &lt;a href=&quot;https://tc39.github.io/ecma262/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;20-4&quot;&gt;ECMA스크립트 사양&lt;/a&gt;에 &lt;a href=&quot;https://github.com/tc39/proposals/blob/master/finished-proposals.md&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;20-2&quot;&gt;승인&lt;/a&gt;되었습니다.&lt;/font&gt;&lt;/h2&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;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;console.log(
  &quot;$9.99  €8.47&quot;.match(/(?&amp;lt;=\$)\d+\.\d*/) // Matches &quot;9.99&quot;
);&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&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;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;console.log(
  &quot;$9.99  €8.47&quot;.match(/(?&amp;lt;!\$)\d+\.\d*/) // Matches &quot;8.47&quot;
);&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;h2&gt;&lt;a href=&quot;https://caniuse.com/js-regexp-lookbehind&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;플랫폼 지원&lt;/font&gt;&lt;/a&gt;&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;✔️ &lt;a href=&quot;https://developers.google.com/v8/&quot; papago-id=&quot;28-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;V8&lt;/a&gt;&lt;/font&gt;&lt;/font&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;✔ ️ &lt;a href=&quot;https://bugs.chromium.org/p/v8/issues/detail?id=4545&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;24-1&quot;&gt;구글&lt;/a&gt; 크롬 62.0&lt;/font&gt;&lt;/li&gt; 
   &lt;li papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;✔ ️ Microsoft Edge 79.0&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;a href=&quot;https://node.green/&quot; papago-id=&quot;26-1&quot; rel=&quot;nofollow noreferrer&quot;&gt; &lt;/a&gt;️&lt;a href=&quot;https://node.green/&quot; papago-id=&quot;26-1&quot; rel=&quot;nofollow noreferrer&quot;&gt; Node&lt;/a&gt;.js 6&lt;a href=&quot;https://node.green/&quot; papago-id=&quot;26-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;.0은 플래그 뒤&lt;/a&gt;에, 9.&lt;a href=&quot;https://node.green/&quot; papago-id=&quot;26-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;0&lt;/a&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;✔ ️ Deno (모든버전)&lt;/font&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;✔️&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1225665&quot; papago-id=&quot;30-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;거미원숭이&lt;/a&gt;&lt;/font&gt;&lt;/font&gt; 
  &lt;ul&gt; 
   &lt;li papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;✔ ️ &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1634135&quot; papago-id=&quot;29-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Mozilla&lt;/a&gt; Firefox &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1634135&quot; papago-id=&quot;29-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;78&lt;/a&gt;.0&lt;/font&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;✔ ️ 자바스크립트코어: 기능이 &lt;a href=&quot;https://github.com/WebKit/WebKit/commit/46e6b3f97425a4a7bb16fc175288903a5f74d5f2&quot; papago-id=&quot;34-3&quot; rel=&quot;nofollow noreferrer&quot;&gt;병합되었습니다&lt;/a&gt;&lt;/font&gt;&lt;/font&gt; 
  &lt;ul&gt; 
   &lt;li papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;✔️ &lt;a href=&quot;https://webkit.org/blog/13878/web-push-for-web-apps-on-ios-and-ipados/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;31-1&quot;&gt;애플&lt;/a&gt; 사파리 16.4&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;a href=&quot;https://webkit.org/blog/13878/web-push-for-web-apps-on-ios-and-ipados/&quot; papago-id=&quot;32-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;iOS 16&lt;/a&gt;.4&lt;a href=&quot;https://webkit.org/blog/13878/web-push-for-web-apps-on-ios-and-ipados/&quot; papago-id=&quot;32-1&quot; rel=&quot;nofollow noreferrer&quot;&gt; &lt;/a&gt;WebView (iOS + iPad의 모든 브라우저)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;OS)&lt;/font&gt;&lt;/li&gt; 
   &lt;li papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;✔️&lt;a href=&quot;https://github.com/oven-sh/bun/releases/tag/bun-v0.2.2&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;33-1&quot;&gt;번 &lt;/a&gt;0.2.2&lt;/font&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;❌ Chakra: &lt;a href=&quot;https://github.com/Microsoft/ChakraCore/issues/3448&quot; papago-id=&quot;37-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;마이크로소프트사&lt;/a&gt;에서 작업중이었으나 현재 Chakra는 V8을 선호하여 포기되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;  &lt;/font&gt;&lt;/font&gt;&lt;ul&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;❌ 79 이전 버전의 Edge(Edge 기반 버전&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML+차크라)&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;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;int&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;unsigned &lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부정적인 전망에 대한 지원으로:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(?&amp;lt;!unsigned )int
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부정적인 전망에 대한 지원이 없는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;((?!unsigned ).{9}|^.{0,8})int
&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;기본적으로 선행 문자를 잡고 부정적인 전망으로 매칭을 배제하는 것이 아이디어지만 선행 문자 n개가 없는 경우도 매칭합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(여기서 n은 뒤를 보는 길이입니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 문제의 정규군은?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(?&amp;lt;!([abcdefg]))m
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 번역됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;((?!([abcdefg])).|^)m
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;캡처 그룹을 사용하여 관심 있는 문자열의 정확한 위치를 찾거나 특정 부분을 다른 것으로 교체하려는 경우가 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Mijoja의 전략은 당신의 특정한 경우에는 효과가 있지만 일반적인 경우에는 효과가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;js&amp;gt;newString = &quot;Fall ball bill balll llama&quot;.replace(/(ba)?ll/g,
   function($0,$1){ return $1?$0:&quot;[match]&quot;;});
Fa[match] ball bi[match] balll [match]ama
&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;여기에 더블 L을 맞추는 것이 목표이지만 &quot;ba&quot; 앞에 올 경우에는 그렇지 않은 예가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;ball&quot;이라는 단어에 주목하세요. 진정한 뒤의 모습은 첫 번째 2l를 억제해야 하지만 두 번째 쌍과 일치해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 처음 2l를 일치시킨 다음 해당 일치를 false positive로 무시하면 regexp 엔진은 해당 일치가 &lt;em papago-id=&quot;48-1&quot;&gt;끝날&lt;/em&gt; 때부터 진행되며 false positive 내의 모든 문자를 무시합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하다&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;newString = string.replace(/([abcdefg])?m/, function($0,$1){ return $1?$0:'m';});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자 집합을 부정하여 캡처하지 않는 그룹을 정의할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(?:[^a-g])m
&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 것이 일치할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;m&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;strong papago-id=&quot;12-0&quot;&gt;않았습니다&lt;/strong&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;str.split(/(?&amp;lt;!^)@/)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Node.js 8의 경우(뒤보기를 지원하지 않음):&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;str.split('').reverse().join('').split(/@(?!$)/).map(s =&amp;gt; s.split('').reverse().join('')).reverse()
&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;불쾌해요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;네.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Mijoja의 아이디어를 따라 그리고 JasonS에 의해 노출된 문제들로부터 끌어내어, 나는 이 아이디어를 가지고 있었습니다; 나는 조금 확인했지만 나 자신을 확신할 수 없기 때문에 js regex에서 나보다 더 전문가인 누군가의 검증이 좋을 것 같습니다 :)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var re = /(?=(..|^.?)(ll))/g
         // matches empty string position
         // whenever this position is followed by
         // a string of length equal or inferior (in case of &quot;^&quot;)
         // to &quot;lookbehind&quot; value
         // + actual value we would want to match

,   str = &quot;Fall ball bill balll llama&quot;

,   str_done = str
,   len_difference = 0
,   doer = function (where_in_str, to_replace)
    {
        str_done = str_done.slice(0, where_in_str + len_difference)
        +   &quot;[match]&quot;
        +   str_done.slice(where_in_str + len_difference + to_replace.length)

        len_difference = str_done.length - str.length
            /*  if str smaller:
                    len_difference will be positive
                else will be negative
            */

    }   /*  the actual function that would do whatever we want to do
            with the matches;
            this above is only an example from Jason's */



        /*  function input of .replace(),
            only there to test the value of $behind
            and if negative, call doer() with interesting parameters */
,   checker = function ($match, $behind, $after, $where, $str)
    {
        if ($behind !== &quot;ba&quot;)
            doer
            (
                $where + $behind.length
            ,   $after
                /*  one will choose the interesting arguments
                    to give to the doer, it's only an example */
            )
        return $match // empty string anyhow, but well
    }
str.replace(re, checker)
console.log(str_done)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;개인적인 산출물:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Fa[match] ball bi[match] bal[match] [match]ama
&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;font class=&quot;papago-parent&quot;&gt;부름이 원칙입니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;checker&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;/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;'ba'&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;..&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;) (해당 크기를 알고 있다면, 그렇지 않으면 아마 더 어려울 것입니다.)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;--- --- 또는 문자열의 시작일 경우 그보다 작습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;^.?&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 일을 계기로&lt;/font&gt;&lt;/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;'ll'&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&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;checker&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;ll&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리가 원하지 않는 것이 아닙니다 (&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;!== 'ba'&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;); 그렇다면 다른 함수를 호출하고, 이 함수여야 합니다 (&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;doer&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;str 에합니다 하는 데 &lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 만약 이것이 목적이거나 더 일반적으로 검색 결과를 수동으로 처리하는 데 필요한 데이터를 입력합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;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;replace&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 모두 에 계산하여&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 그 자체는 절대 변하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원시 문자열은 불변이기 때문에, 우리는 그 변수를 사용할 수 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전체 연산의 결과를 저장하는 것이지만, 나는 이미 교체로 인해 복잡해진 예제가 다른 변수로 더 명확할 것이라고 생각했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;str_done&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;).&lt;/font&gt;&lt;/font&gt;&lt;/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;공연적인 면에서는 꽤 가혹할 것이라고 생각합니다. &quot;를 &quot;&quot;로 무의미하게 대체하는 모든 것들,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;this str.length-1&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&gt;&lt;font class=&quot;papago-parent&quot;&gt;아마도 이 특정한 위의 경우, 우리가 삽입하고 싶은 곳 주변에서 줄을 한 번만 잘라냄으로써 그룹화될 수 있을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[match]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.join()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 함께.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[match]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 자체.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;84&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또 하나는 더 복잡한 사건들을 어떻게 다룰지 모른다는 거죠. 즉, 뒤에 보이는 가짜에 대한 복잡한 가치들 말이죠.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;길이는 아마도 가장 문제가 많은 데이터일 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;checker&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, $back에 대해 여러 개의 원하지 않는 값이 발생할 가능성이 있는 경우, 우리는 외부에서 또 다른 regex(캐싱(생성)될)를 사용하여 테스트를 수행해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;checker&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 호출할 때마다 동일한 regex 개체가 생성되지 않도록 하는 것이 최선입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;checker&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 class=&quot;papago-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;89&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 분명히 했길 바랍니다; 주저하지 않는다면, 저는 더 잘 노력할 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;:)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 케이스를 이용해서, &lt;strong papago-id=&quot;44-1&quot;&gt;만약 당신이 대체하기를 원한다면&lt;/strong&gt;,&lt;/font&gt;&lt;/font&gt; &lt;code&gt;m&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;45&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 그것을 대문자로 바꾸는 것과 같이.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;M&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;, 캡처 그룹에서 set을 negative 할 수 있습니다.&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;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;([^a-g])m&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 대신에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$1M&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;jim jam&quot;.replace(/([^a-g])m/g, &quot;$1M&quot;)
\\jiM jam
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;([^a-g])&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 문자와도 일치합니다().&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;^&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;a-g&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;$1&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;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;53&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 우리는 발견합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;im&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;jim&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;55&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로 교체합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;iM&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;56&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과적으로&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;jiM&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;/p&gt;&lt;p papago-id=&quot;104&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;앞서 언급했듯이 자바스크립트는 이제 뒤를 볼 수 있게 되었습니다.&lt;/font&gt;&lt;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;58&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 머릿속에는 정확하게 결과를 전달하는 뒤를 돌아보지 않고는 레젝스를 찾을 방법이 없을 거라고 장담합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 할 수 있는 일은 그룹들과 함께 일하는 것뿐입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;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;!Before)Wanted&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;59&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,어디에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Wanted&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;당신이 매치하고 싶은 regex와.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Before&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;61&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 일치하기 전에 무엇이 없어야 하는지를 카운트하는 정규군입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 할 수 있는 최선은 레지렉스를 부정하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Before&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;regex를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NotBefore(Wanted)&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;$1&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;/p&gt; 
&lt;p&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;Before=[abcdefg]&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;NotBefore=[^abcdefg]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;67&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 그래서 정규군은&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;[^abcdefg](m)&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;Wanted&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;NotBefore&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;또한, 원하는 결과가 두 번째 그룹입니다.&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;71&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일치하는 경우&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Before&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;n&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;73&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 즉, 패턴이 반복되는 토큰을 포함하지 않는 경우, 당신은 다음을 부정하는 것을 피할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Before&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;(?!Before).{n}(Wanted)&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;(?!Before)(.{n})(Wanted)&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 예제에서 패턴은&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Before&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;77&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제로는 1이라는 고정된 길이를 가지고 있으므로 regex를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;(?![abcdefg]).(m)&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;code&gt;(?![abcdefg])(.)(m)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;79&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 모든 일치 항목에 관심이 있는 경우 다음을 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;g&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;80&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;플래그, 내 코드 스니펫 참조:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function TestSORegEx() {
  var s = &quot;Donald Trump doesn't like jam, but Homer Simpson does.&quot;;
  var reg = /(?![abcdefg])(.{1})(m)/gm;
  var out = &quot;Matches and groups of the regex &quot; + 
            &quot;/(?![abcdefg])(.{1})(m)/gm in \ns = \&quot;&quot; + s + &quot;\&quot;&quot;;
  var match = reg.exec(s);
  while(match) {
    var start = match.index + match[1].length;
    out += &quot;\nWhole match: &quot; + match[0] + &quot;, starts at: &quot; + match.index
        +  &quot;. Desired match: &quot; + match[2] + &quot;, starts at: &quot; + start + &quot;.&quot;;   
    match = reg.exec(s);
  }
  out += &quot;\nResulting string after statement s.replace(reg, \&quot;$1*$2*\&quot;)\n&quot;
         + s.replace(reg, &quot;$1*$2*&quot;);
  alert(out);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;128&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 효과적입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;jim&quot;.match(/[^a-g]m/)
&amp;gt; [&quot;im&quot;]
&quot;jam&quot;.match(/[^a-g]m/)
&amp;gt; null
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;129&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예제 검색 및 바꾸기&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;jim jam&quot;.replace(/([^a-g])m/g, &quot;$1M&quot;)
&amp;gt; &quot;jiM jam&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;130&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 작업을 수행하려면 음의 뒤로 가기 문자열이 1자 길이여야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;131&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/641407/negative-lookbehind-equivalent-in-javascript&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>JavaScript</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/817</guid>
      <comments>https://codeshow.tistory.com/817#entry817comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:02:22 +0900</pubDate>
    </item>
    <item>
      <title>오류 1064:SQL 구문에 오류가 있습니다. MariaDB 서버 버전에 해당하는 설명서에서 다음에 사용할 올바른 구문을 확인하십시오.</title>
      <link>https://codeshow.tistory.com/816</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류 1064:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 구문에 오류가 있습니다. MariaDB 서버 버전에 해당하는 설명서에서 다음에 사용할 올바른 구문을 확인하십시오.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Sql 파일이라는 이름의 프로시저가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로시저가 있는 sql.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Maria DB 버전:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버 버전: 10.0.29-MariaDB-0ubuntu0&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;16.04.1 우분투 16.04&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;&amp;gt;mysql -u root -p XXX &amp;lt; /home/azure/Downloads/procedure.sql 
&amp;gt;Enter password: 
&amp;gt;ERROR 1064 (42000) at line 2: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '();
&amp;gt;USE XXX;
&amp;gt;CREATE OR REPLACE PROCEDURE XXX.updateDoc_StorageID () 
&amp;gt;BEGIN' at line 1
&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;procedure.sql 코드:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DELIMITER //
DROP PROCEDURE IF EXISTS XXX.updateDoc_StorageID;
USE XXX;
CREATE OR REPLACE PROCEDURE XXX.updateDoc_StorageID () 
BEGIN
    DECLARE myTransacID INT DEFAULT 0; 
    DECLARE myTransProductId INT DEFAULT 0; 
    DECLARE myDocStoreID VARCHAR(500) DEFAULT '0'; 
    DECLARE my_count INT DEFAULT 0;
    DECLARE trans_csr CURSOR FOR SELECT 1,2 FROM MainTable ORDER BY TransactionID;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET my_count=1;
    SET my_count=0;
    OPEN trans_csr;
        trans_loop:LOOP
            FETCH trans_csr INTO myTransacID,myTransProductId;
          IF my_count=1 THEN
                   LEAVE trans_loop;
                END IF;
                If(myTransProductId=8)
                   then
                   if exists(....)
                   then
                           .......
                   end if;
                   elseif (myTransProductId=11) 
                   then
                   if exists(........)
                   then
                           .......
                   END IF;
            END IF;
        END LOOP trans_loop;
    CLOSE trans_csr;
    SET my_count=0;
END;
//
DELIMITER ;
&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;내가 받은 레퍼런스는 https://mariadb.com/kb/en/mariadb/create-procedure/ 에서 온 것입니다.&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;CREATE PROCEDURE&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;DROP PROCEDURE&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 거기에 대괄호가 있으면 안 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DROP PROCEDURE IF EXISTS XXX.updateDoc_StorageID;
&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;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 구분 기호를 수정합니다 - 설정한 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$$&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시작할 때, 모든 추가 쿼리는 다음과 같이 끝나야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$$&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;버전 10.0.x의 올바른 구문은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DELIMITER //
DROP PROCEDURE IF EXISTS XXX.updateDoc_StorageID;
USE XXX;
CREATE OR REPLACE PROCEDURE XXX.updateDoc_StorageID () 
BEGIN
    DECLARE myTransacID INT DEFAULT 0; 
    DECLARE myTransProductId INT DEFAULT 0; 
    DECLARE myDocStoreID VARCHAR(500) DEFAULT '0'; 
    DECLARE my_count INT DEFAULT 0;
    DECLARE trans_csr CURSOR FOR SELECT 1,2 FROM MainTable ORDER BY TransactionID;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET my_count=1;
    SET my_count=0;
    OPEN trans_csr;
        trans_loop:LOOP
            FETCH trans_csr INTO myTransacID,myTransProductId;
          IF my_count=1 THEN
                   LEAVE trans_loop;
                END IF;
                If(myTransProductId=8)
                   then
                   if exists(....)
                   then
                           .......
                   end if;
                   elseif (myTransProductId=11) 
                   then
                   if exists(........)
                   then
                           .......
                   END IF;
            END IF;
        END LOOP trans_loop;
    CLOSE trans_csr;
    SET my_count=0;
END;
//
DELIMITER ;
&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/45460073/error-1064you-have-an-error-in-your-sql-syntax-check-the-manual-that-correspon&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mariaDB</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/816</guid>
      <comments>https://codeshow.tistory.com/816#entry816comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:02:12 +0900</pubDate>
    </item>
    <item>
      <title>PHP에서 PDO를 통해 MySQL 쿼리를 루프하려면 어떻게 해야 합니까?</title>
      <link>https://codeshow.tistory.com/815</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PHP에서 PDO를 통해 MySQL 쿼리를 루프하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 내 모든 것을 천천히 움직이고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;LAMP websites&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;mysql_&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;PDO&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능과 첫 번째 벽돌 벽에 부딪혔습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;매개변수로 결과를 순환시키는 방법을 모릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 다음 사항에 대해서는 괜찮습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;foreach ($database-&amp;gt;query(&quot;SELECT * FROM widgets&quot;) as $results)
{
   echo $results[&quot;widget_name&quot;];
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 제가 이런 일을 하고 싶다면:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;foreach ($database-&amp;gt;query(&quot;SELECT * FROM widgets WHERE something='something else'&quot;) as $results)
{
   echo $results[&quot;widget_name&quot;];
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;분명히 '다른 것'은 역동적일 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 DB에 연결하기 위해 PDO를 사용하고 pph 오류 대신 예외를 던지도록 지시하는 예이며 쿼리에 동적 값을 대입하는 대신 매개 변수화된 문을 사용하는 예입니다(매우 권장됨).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// connect to PDO
$pdo = new PDO(&quot;mysql:host=localhost;dbname=test&quot;, &quot;user&quot;, &quot;password&quot;);

// the following tells PDO we want it to throw Exceptions for every error.
// this is far more useful than the default mode of throwing php errors
$pdo-&amp;gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// prepare the statement. the placeholders allow PDO to handle substituting
// the values, which also prevents SQL injection
$stmt = $pdo-&amp;gt;prepare(&quot;SELECT * FROM product WHERE productTypeId=:productTypeId AND brand=:brand&quot;);

// bind the parameters
$stmt-&amp;gt;bindValue(&quot;:productTypeId&quot;, 6);
$stmt-&amp;gt;bindValue(&quot;:brand&quot;, &quot;Slurm&quot;);

// initialise an array for the results
$products = array();
$stmt-&amp;gt;execute();
while ($row = $stmt-&amp;gt;fetch(PDO::FETCH_ASSOC)) {
    $products[] = $row;
}
&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://ca3.php.net/manual/en/pdo.query.php&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;8-1&quot;&gt;PHP 문서&lt;/a&gt;에 따르면 다음 작업을 수행할 수 있어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$sql = &quot;SELECT * FROM widgets WHERE something='something else'&quot;;
foreach ($database-&amp;gt;query($sql) as $row) {
   echo $row[&quot;widget_name&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;pre&gt;&lt;code&gt;// Wrap a PDOStatement to iterate through all result rows. Uses a 
// local cache to allow rewinding.
class PDOStatementIterator implements Iterator
{
    public
        $stmt,
        $cache,
        $next;

    public function __construct($stmt)
    {
        $this-&amp;gt;cache = array();
        $this-&amp;gt;stmt = $stmt;
    }

    public function rewind()
    {
        reset($this-&amp;gt;cache);
        $this-&amp;gt;next();
    }

    public function valid()
    {
        return (FALSE !== $this-&amp;gt;next);
    }

    public function current()
    {
        return $this-&amp;gt;next[1];
    }

    public function key()
    {
        return $this-&amp;gt;next[0];
    }

    public function next()
    {
        // Try to get the next element in our data cache.
        $this-&amp;gt;next = each($this-&amp;gt;cache);

        // Past the end of the data cache
        if (FALSE === $this-&amp;gt;next)
        {
            // Fetch the next row of data
            $row = $this-&amp;gt;stmt-&amp;gt;fetch(PDO::FETCH_ASSOC);

            // Fetch successful
            if ($row)
            {
                // Add row to data cache
                $this-&amp;gt;cache[] = $row;
            }

            $this-&amp;gt;next = each($this-&amp;gt;cache);
        }
    }
&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;foreach(new PDOStatementIterator($stmt) as $col =&amp;gt; $val)
{
    ...
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/159924/how-do-i-loop-through-a-mysql-query-via-pdo-in-php&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MySQL</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/815</guid>
      <comments>https://codeshow.tistory.com/815#entry815comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:02:05 +0900</pubDate>
    </item>
    <item>
      <title>C에서 : 연산자의 사용</title>
      <link>https://codeshow.tistory.com/814</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C에서 : 연산자의 사용&lt;/font&gt;&lt;/h2&gt;
&lt;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 mt8&quot; papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;닫힘&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;2-1&quot; title=&quot;2010-07-220 05:52:03Z&quot; papago-attr-id=&quot;1&quot;&gt;13년 전&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;blockquote&gt; 
 &lt;p&gt;&lt;strong papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가능한 중복:&lt;/font&gt;&lt;/strong&gt;&lt;br&gt; &lt;a href=&quot;https://stackoverflow.com/questions/3029442/what-does-number-after-a-struct-field-mean&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;struct 필드 뒤의 ': number'는 무엇을 의미합니까?&lt;/font&gt;&lt;/a&gt;&lt;br&gt; &lt;a href=&quot;https://stackoverflow.com/questions/2950029/what-does-unsigned-temp3-means&quot; papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'unsigned temp:3'은 무엇을 의미합니까?&lt;/font&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 종류의 질문은 정말 싫지만, 정말 귀찮아서, 다음과 같이 물어보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;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;#include &amp;lt;stdio.h&amp;gt;

struct microFields
{
  unsigned int addr:9;
  unsigned int cond:2;
  unsigned int wr:1;
  unsigned int rd:1;
  unsigned int mar:1;
  unsigned int alu:3;
  unsigned int b:5;
  unsigned int a:5;
  unsigned int c:5;
};

union micro
{
  unsigned int microCode;
  microFields code;
};

int main(int argc, char* argv[])
{
  micro test;
  return 0;
} 
&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;만약 누군가가 조금이라도 신경을 쓴다면, 나는 아래 링크에서 이 코드를 꺼냈습니다: http://www.cplusplus.com/forum/beginner/15843/ . http://www.cplusplus.com/forum/beginner/15843/&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어디선가 본 적이 있다는 것을 알고 있고, 다시 볼 때도 이해하고 싶기 때문에 정말 알고 싶습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것들은 비트 필드이고, 예를 들어 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;unsigned int addr:9;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 만듭니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;addr&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필드 길이가 9비트입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;많은 값을 적분형으로 포장하는 데 일반적으로 사용됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정한 경우 가상 CPU(가능한 경우)에 대한 32비트 마이크로코드 명령 구조를 정의합니다(모든 비트 필드 길이를 더하면 총 32개가 됩니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유니언은 당신이 단일 32비트 값으로 로드한 다음 코드와 같은 개별 필드에 접근할 수 있게 해줍니다. (작은 문제들도 고쳤습니다. 특히 다음의 선언들)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;code&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;test&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;):&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;

struct microFields {
    unsigned int addr:9;
    unsigned int cond:2;
    unsigned int wr:1;
    unsigned int rd:1;
    unsigned int mar:1;
    unsigned int alu:3;
    unsigned int b:5;
    unsigned int a:5;
    unsigned int c:5;
};

union micro {
    unsigned int microCode;
    struct microFields code;
};

int main (void) {
    int myAlu;
    union micro test;
    test.microCode = 0x0001c000;
    myAlu = test.code.alu;
    printf(&quot;%d\n&quot;,myAlu);
    return 0;
}
&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;이것은 7을 출력하는데, 이것은 3개의 비트들을 구성하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;alu&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;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Bit_field&quot; rel=&quot;noreferrer&quot; papago-id=&quot;19-1&quot;&gt;약간&lt;/a&gt; 들판인데요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;콜론 뒤의 숫자는 각 변수가 차지하는 비트 수입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 변수에 대한 비트 수를 지정하는 선언기입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은 다음을 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/yszfawxh(VS.80).aspx&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://msdn.microsoft.com/en-us/library/yszfawxh(VS.80).aspx&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;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3305933/use-of-the-operator-in-c&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/814</guid>
      <comments>https://codeshow.tistory.com/814#entry814comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:01:57 +0900</pubDate>
    </item>
    <item>
      <title>우커머스에서 날짜별로 사용자 주문을 받는 방법은?</title>
      <link>https://codeshow.tistory.com/813</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우커머스에서 날짜별로 사용자 주문을 받는 방법은?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 날짜 범위 또는 현재 한 달 동안의 사용자 총 주문 합계를 얻을 수 있는 표준 방법을 찾고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;wocommerce source code를 탐색해보니 woo는 이런것을 사용하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;            $order_item_amounts = $this-&amp;gt;get_order_report_data( array(
            'data' =&amp;gt; array(
                '_line_total' =&amp;gt; array(
                    'type'            =&amp;gt; 'order_item_meta',
                    'order_item_type' =&amp;gt; 'line_item',
                    'function' =&amp;gt; 'SUM',
                    'name'     =&amp;gt; 'order_item_amount'
                ),
                'post_date' =&amp;gt; array(
                    'type'     =&amp;gt; 'post_data',
                    'function' =&amp;gt; '',
                    'name'     =&amp;gt; 'post_date'
                ),
                '_product_id' =&amp;gt; array(
                    'type'            =&amp;gt; 'order_item_meta',
                    'order_item_type' =&amp;gt; 'line_item',
                    'function'        =&amp;gt; '',
                    'name'            =&amp;gt; 'product_id'
                ),
            ),
            'where_meta' =&amp;gt; array(
                'relation' =&amp;gt; 'OR',
                array(
                    'type'       =&amp;gt; 'order_item_meta',
                    'meta_key'   =&amp;gt; array( '_product_id', '_variation_id' ),
                    'meta_value' =&amp;gt; $this-&amp;gt;product_ids,
                    'operator'   =&amp;gt; 'IN'
                ),
            ),
            'group_by'     =&amp;gt; 'product_id, ' . $this-&amp;gt;group_by_query,
            'order_by'     =&amp;gt; 'post_date ASC',
            'query_type'   =&amp;gt; 'get_results',
            'filter_range' =&amp;gt; true
        ) );
&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;클래스 wc-report-sales-by-product.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;php&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 class=&quot;papago-parent&quot;&gt;위의 코드에 의하면,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$this-&amp;gt;group_by_query&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;part는 woo source에서 찾을 수 있는 날짜의 조건을 보유하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 질문은 실제로 wocommerce의 내장 기능을 사용하여 주어진 날짜 범위를 기준으로 주문 목록을 생성하는 방법에 관한 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/30979770/how-to-get-total-sum-of-orders-by-a-user-in-woocommerce/35146568#35146568&quot; papago-id=&quot;7-0&quot;&gt;당신의 대답을 들어보면&lt;/a&gt;, 제가 생각하기엔 정확합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필드에 를 추가하면 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 것.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public function get_customer_total_order() {
    $customer_orders = get_posts( array(
        'numberposts' =&amp;gt; - 1,
        'meta_key'    =&amp;gt; '_customer_user',
        'meta_value'  =&amp;gt; get_current_user_id(),
        'post_type'   =&amp;gt; array( 'shop_order' ),
        'post_status' =&amp;gt; array( 'wc-completed' ),
        'date_query' =&amp;gt; array(
            'after' =&amp;gt; date('Y-m-d', strtotime('-10 days')),
            'before' =&amp;gt; date('Y-m-d', strtotime('today')) 
        )

    ) );

    $total = 0;
    foreach ( $customer_orders as $customer_order ) {
        $order = wc_get_order( $customer_order );
        $total += $order-&amp;gt;get_total();
    }

    return $total;
}
&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;a href=&quot;http://php.net/manual/en/datetime.formats.php&quot; rel=&quot;noreferrer&quot; papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;날짜 형식&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;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;get_order_report_data&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 이런 식으로 하면 돼요...&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 당신의 것에 붙여넣을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;functions.php&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;include_once( WP_PLUGIN_DIR . '/woocommerce/includes/admin/reports/class-wc-admin-report.php');

$reports = new WC_Admin_Report();
$args = array(
    'data' =&amp;gt; array(
        '_order_total' =&amp;gt; array(
            'type'     =&amp;gt; 'meta',
            'function' =&amp;gt; 'SUM',
            'name'     =&amp;gt; 'total_sales'
        ),
    ),
    'where' =&amp;gt; array(
        array(
            'key'      =&amp;gt; 'post_date',
            'value'    =&amp;gt; date( 'Y-m-d', strtotime( '01/01/2016' ) ), // starting date
            'operator' =&amp;gt; '&amp;gt;'
        ),
        array(
            'key'      =&amp;gt; 'post_date',
            'value'    =&amp;gt; date( 'Y-m-d', strtotime( '02/01/2016' ) ), // end date...
            'operator' =&amp;gt; '&amp;lt;'
        ),
    ),
    'where_meta' =&amp;gt; array(
        array(
            'meta_key'   =&amp;gt; '_customer_user',
            'meta_value' =&amp;gt; '1', // customer id
            'operator'   =&amp;gt; '='
        )
    ),
);
$data = $reports-&amp;gt;get_order_report_data($args);
print_r($data); // prints like: stdClass Object ( [total_sales] =&amp;gt; 200 )
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 코드에서 언급한 내용을 참고하시기 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/35146663/how-to-get-user-orders-by-date-in-woocommerce&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>WordPress</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/813</guid>
      <comments>https://codeshow.tistory.com/813#entry813comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:01:50 +0900</pubDate>
    </item>
    <item>
      <title>MySQL: 둘 이상 발생한 행 선택</title>
      <link>https://codeshow.tistory.com/812</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL: 둘 이상 발생한 행 선택&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 질문은 이렇습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 데이터베이스에 걸쳐 두 개의 테이블에서 ID 목록을 선택합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리가 정상적으로 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select en.id, fp.blogid
from french.blog_pics fp, french.blog_news fn, english.blog_news en 
where fp.blogid = fn.id 
and en.title_fr = fn.title 
and fp.title != '' 
&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;en.id&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 번 이상 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 이것이 현재의 쿼리 결과였다면&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;en.id fp.blogid
---------------
  10     12
  12     8
  17     9
  12     8
&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; en.id fp.blogid occurrences
 -----------------------------
  12     8           2
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;select en.id, fp.blogid, count(*) as occurrences
from french.blog_pics fp, french.blog_news fn, english.blog_news en 
where fp.blogid = fn.id 
and en.title_fr = fn.title 
and fp.title != ''
group by en.id
having count(*) &amp;gt; 1
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/4242990/mysql-select-rows-with-more-than-one-occurrence&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MySQL</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/812</guid>
      <comments>https://codeshow.tistory.com/812#entry812comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:01:42 +0900</pubDate>
    </item>
    <item>
      <title>WordPress: meta_query가 있는 게시물 제외 - 모든 게시물에 meta_field가 있는 것은 아닙니다.</title>
      <link>https://codeshow.tistory.com/811</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WordPress: meta_query가 있는 게시물 제외 - 모든 게시물에 meta_field가 있는 것은 아닙니다.&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;pre&gt;&lt;code&gt;// WP_Query arguments
        $args = array (
            'post_parent'   =&amp;gt; $parentid,
            'orderby'       =&amp;gt; 'menu_order',
            'order'         =&amp;gt; 'ASC',
            'post_type'     =&amp;gt; array( 'page' ),
            'meta_query' =&amp;gt; array(
                array(
                    'key' =&amp;gt; 'hide',
                    'value' =&amp;gt; 1,
                    'compare' =&amp;gt; '!='
                )
            )
        );
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 게시물이 &quot;숨김&quot; 필드를 사용하는 것은 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NULL을 돌려주는 게시물도 있는데 그래서 루프가 안 되는 것 같아요?!&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거 맞는건가요?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 게시물에 해당 키에 대한 값이 있어야 하나요?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또 다른 방법:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// WP_Query arguments
    $args = array (
    'post_parent'   =&amp;gt; $parentid,
    'orderby'       =&amp;gt; 'menu_order',
    'order'         =&amp;gt; 'ASC',
    'post_type'     =&amp;gt; array( 'page' ),
    'meta_query' =&amp;gt; array('0' =&amp;gt; array('key' =&amp;gt; 'hide', 'value' =&amp;gt; '1', 'compare' =&amp;gt; 'NOT EXISTS')
    )
);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 오래된 게시물이지만 어쨌든 대답하기 위해서 입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문의 메타 쿼리는 해당 메타 키를 가진 게시물의 결과만 반환합니다.&lt;/font&gt;&lt;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;// WP_Query arguments
$args = array (
    'post_parent'   =&amp;gt; $parentid,
    'orderby'       =&amp;gt; 'menu_order',
    'order'         =&amp;gt; 'ASC',
    'post_type'     =&amp;gt; array( 'page' ),
    'meta_query'    =&amp;gt; array(
        'relation'  =&amp;gt; 'OR',
        array(
            'key'       =&amp;gt; 'hide',
            'value'     =&amp;gt; 1,
            'compare'   =&amp;gt; '!='
        ),
        array(
            'key'       =&amp;gt; 'hide',
            'compare'   =&amp;gt; 'NOT EXISTS'
        )
    )
);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;relation&quot;과 'NOT EXISTRESS'의 비교값을 갖는 두 번째 메타 쿼리의 사용에 유의하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 이 상황을 어떻게 처리할지 업데이트:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 상황이 점점 더 많이 발생하는 것 같고, 이를 처리하는 방법을 개발하여 훨씬 더 빠른 SQL 쿼리를 수행하게 되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;해당 게시물 유형의 게시물이 저장될 때마다 조회 기준에 맞는 게시물 ID 목록을 업데이트하여 WP 옵션에 저장합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 쿼리가 실행되면 이 목록이 표시되고 화이트리스트인지 블랙리스트인지에 따라 '포함' 또는 '제외' 쿼리 매개 변수에 이 목록을 넣습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 코드가 조금 더 추가되지만 성능 면에서 이점이 있으며, 실행해야 하는 다른 메타 쿼리가 있는 경우에는 복잡성을 제거할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;블랙리스트에 대한 아래의 몇 가지 예시 코드는 화이트리스트에도 적용될 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class Example_Meta_Blacklist
{

    public function init()
    {
        /*
         * Trigger whenever post is saved, you could also trigger on save_post_{$post-&amp;gt;post_type}
         * If you are using Advanced Custom Fields, you may need to use acf/save_post
         */
        add_action( 'save_post', [ $this, 'update_my_custom_post_type_blacklist' ] );

        /*
         *  One time use function to create an initial list if needed. Remove if not.
         */
        add_action( 'wp', [ $this, 'create_initial_my_custom_post_type_blacklist' ] );
    }

    /*
     *  Add or remove post ids from our list whenever the post is saved
     */
    public function update_my_custom_post_type_blacklist( $post_id )
    {
        if ( 'my_custom_post_type' != get_post_type( $post_id ) ) {
            return;
        }

        $my_custom_post_type_blacklist  = get_option( 'my_custom_post_type_blacklist', [] );
        $key                            = array_search( $post_id, $my_custom_post_type_blacklist );
        $meta_key_in_question           = get_post_meta( $post_id, 'meta_key_in_question', true );

        if ( ! $meta_key_in_question &amp;amp;&amp;amp; $key !== false ) {
            unset( $my_custom_post_type_blacklist[ $key ] );
        } else if ( $meta_key_in_question &amp;amp;&amp;amp; $key === false ) {
            $my_custom_post_type_blacklist[] = $post_id;
        }

        update_option( 'my_custom_post_type_blacklist', $my_custom_post_type_blacklist, true );
    }

    /*
     *  When I run into this issue, there are usually already some existing
     *  posts, so I need to run this code one-time to create my initial list
     *  This code would be run by visiting your site with ?gocode=myuniquegocode
     *  at the end of the URL. The function and action hook can then be removed.
     */
    public function create_initial_my_custom_post_type_blacklist()
    {
        if ( ! isset( $_GET['gocode'] ) || 'myuniquegocode' != $_GET['gocode'] ) {
            return;
        }

        $clients = get_posts([
            'posts_per_page'    =&amp;gt; -1,
            'post_type'         =&amp;gt; 'my_custom_post_type',
            'post_status'       =&amp;gt; 'publish',
            'fields'            =&amp;gt; 'ids',
            'meta_key'          =&amp;gt; 'the_meta_key_in_question',
            'meta_value'        =&amp;gt; 'the_meta_value_in_question',
            'meta_compare'      =&amp;gt; '='
        ]);

        update_option( 'my_custom_post_type_blacklist', $clients, true );
    }

}

add_action( 'plugins_loaded', [ new Example_Meta_Blacklist, 'init' ] );
&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;$my_query = new WP_Query( [
    'post_type'     =&amp;gt; 'my_custom_post_type',
    'post_status'   =&amp;gt; 'publish',
    'exclude'       =&amp;gt; get_option( 'my_custom_post_type_blacklist', [] )
] );
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래 스니펫과 같이 하여 SQL 문을 확인해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$customPosts = new WP_Query($yourArgs);
echo &quot;Last SQL-Query: {$customPosts-&amp;gt;request}&quot;;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/34662455/wordpress-exclude-posts-with-meta-query-not-every-posts-has-the-meta-field&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>WordPress</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/811</guid>
      <comments>https://codeshow.tistory.com/811#entry811comment</comments>
      <pubDate>Sun, 29 Oct 2023 20:01:35 +0900</pubDate>
    </item>
    <item>
      <title>MySQL 타임스탬프에 NULL 삽입</title>
      <link>https://codeshow.tistory.com/810</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 타임스탬프에 NULL 삽입&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 타임스탬프 열에 NULL을 삽입/업데이트하여 예기치 않은 동작을 관찰하고 있습니다.&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;create table temp(id int, hireDate timestamp default 0);
insert into temp (id) values(1);
insert into temp (id, hireDate) values(2, null);
select * from temp;
id  hireDate
-----------------------------
1   
2   2012-09-19 10:54:10.0
&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;hiredate&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL에 지정되지 않았습니다. hireDate는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null(0)&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;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 SQL에서 명시적 null이 전달되면 예상치 못한 현재 날짜 시간이 삽입됩니다.&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;참고: Hibernate는 두 번째 유형의 인서트를 사용하므로 문제가 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;타임스탬프 열에 null을 삽입하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 NULL 값을 허용하기 위해 NULL 속성으로 정의된 경우가 아니라면 NULL 값을 할당하여 타임스탬프 열을 현재 날짜 및 시간으로 초기화하거나 업데이트할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;타임스탬프를 NULL 속성을 사용하여 생성하거나 테이블을 변경하여 NULL 속성을 추가합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;create 문에서는 닮았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CREATE TABLE t1 (tsvalue TIMESTAMP NULL, ... );
&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;NULL 특성이 설정된 &lt;strong papago-id=&quot;11-3&quot;&gt;&lt;em papago-id=&quot;11-3-0&quot;&gt;TIMESTAMP&lt;/em&gt;&lt;/strong&gt; &lt;strong papago-id=&quot;11-1&quot;&gt;&lt;em papago-id=&quot;11-1-0&quot;&gt;필드&lt;/em&gt;&lt;/strong&gt;에 NULL 값을 삽입하면 필드가 NOW()가 아닌 NULL로 설정됩니다.&lt;/font&gt;&lt;/p&gt;&lt;h2 papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 타임스탬프에 NULL을 삽입하고 업데이트할 수 있습니다.&lt;/font&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블 작성:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;create table penguins(id int primary key auto_increment, the_time timestamp NULL);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;14&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;insert into penguins(the_time) values (now());
insert into penguins(the_time) values (null);
insert into penguins(the_time) values (0);
insert into penguins(the_time) values ('1999-10-10 01:02:03');
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인쇄되는 항목:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select * from penguins

1   2015-01-23 15:40:36
2   
3   0000-00-00 00:00:00
4   1999-10-10 01:02:03
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;칼럼이 호출했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;the_time&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 유형:&lt;/font&gt;&lt;/font&gt;&lt;code&gt;timestamp&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&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;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;hireDate 열의 기본값을 변경해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본값은 null이어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;create table temp(id int, hireDate timestamp default 0);
&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;create table temp(id int, hireDate timestamp null);
&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;NULL을 삽입하려면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;hireDate&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블의 컬럼을 제공해야 합니다. 그러면 null을 제공해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;INSERT INTO temp (id, hireDate) VALUES(3, null);&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왜냐면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Datatype&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;hireDate&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;timestamp&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&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;28&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;데이터베이스 측 서버 측 동적 타임스탬프에 대해서만 타임스탬프 유형을 사용합니다(DEFAULT 및 ON UPDATE 열 특성 참조).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;열을 'mysql_row_created_at' 및 'mysql_row_update_at'로 지정하여 명시합니다.&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;MySQL은 타임스탬프 유형을 숫자 UNIX-epoch-delta로 물리적으로 저장하므로 UTC의 암시적 시간대를 가지며, 이는 세션(AKA 연결) 수준의 시간대 변경에 영향을 주지 않습니다.&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;datetime' 유형은 꽉 찬 숫자의 문자열과 매우 유사합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것과 함께 저장된 시간대 정보는 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'날짜' 유형은 일반적으로 사용해도 무방합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 일부 상황에서는 (활성 시간대의) 자정의 날짜 시간으로 해석되어 피해야 할 모든 '날짜 시간' 관련 혼동을 초래한다는 점에 유의해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;응용 프로그램 측 날짜-시간 값의 경우 'intunsigned', 'bigint'(서명된), 'double'(서명된) 또는 10진수(N,P)를 사용하여 UNIX-epoch-delta를 간단히 저장합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;초가 아닌 경우에는 해상도를 열 이름 접미사로 표시해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;`mysql_row_created_at` TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP,
`mysql_row_updated_at` TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

`epoch` int unsigned NOT NULL,
`epoch_ms` bigint NOT NULL,
`epoch_us` bigint NOT NULL,
`epoch` double NOT NULL,
`epoch6` decimal(16,6),
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스를 최대한 바보 같은 저장소로 처리합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 변환 작업은 애플리케이션 측에서만 수행하고 데이터베이스 측에서는 수행하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;알아두면 좋은 정보:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT @@GLOBAL.TIME_ZONE
, @@SESSION.TIME_ZONE
, @@SESSION.TIMESTAMP
, UNIX_TIMESTAMP(NOW(6))
;
&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;old mysql 5.6.44-86.0에서 aurora mysql 5.7.12로 업그레이드할 때 비슷한 동작이 발생했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드가 NULL을 타임스탬프로 삽입하고 모든 0 날짜를 쓸 것으로 예상하고 대신 &quot;열 'XXXX'는 NULL이 될 수 없습니다&quot;라는 오류를 던졌습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그룹 매개 변수 explicit_defaults_for_timestamp를 0으로 설정하여 오류 없이 타임스탬프 열을 null로 삽입/업데이트할 수 있도록 하여 문제를 해결했습니다.&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;URL : https://stackoverflow.com/questions/12489078/inserting-null-into-mysql-timestamp&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MySQL</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/810</guid>
      <comments>https://codeshow.tistory.com/810#entry810comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:40:27 +0900</pubDate>
    </item>
    <item>
      <title>iframe이 로드되었는지 여부를 확인하려면 어떻게 해야 합니까?</title>
      <link>https://codeshow.tistory.com/809</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;iframe이 로드되었는지 여부를 확인하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 버튼을 클릭한 후 아이프레임이 로딩되었는지 확인하려고 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;있습니다&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('#MainPopupIframe').load(function(){
    console.log('load the iframe')
    //the console won't show anything even if the iframe is loaded.
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;button id='click'&amp;gt;click me&amp;lt;/button&amp;gt;

//the iframe is created after the user clicks the button.
&amp;lt;iframe id='MainPopupIframe' src='http://...' /&amp;gt;...&amp;lt;/iframe&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좋은 의견이라도 있나?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런데 저의 iframe은 동적으로 생성됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;초기 페이지 로드와 함께 로드되지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용해보실 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;jQuery&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;/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(){
    $('#MainPopupIframe').load(function(){
        $(this).show();
        console.log('iframe loaded successfully')
    });
        
    $('#click').on('click', function(){
        $('#MainPopupIframe').attr('src', 'https://heera.it');    
    });
});&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/2.1.1/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;button id='click'&amp;gt;click me&amp;lt;/button&amp;gt;

&amp;lt;iframe style=&quot;display:none&quot; id='MainPopupIframe' src='' /&amp;gt;&amp;lt;/iframe&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;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://jsfiddle.net/umYkV/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;8-0&quot;&gt;&lt;strong papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jsfiddle DEMO&lt;/font&gt;&lt;/strong&gt;&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;strong papago-id=&quot;2-0&quot;&gt;업데이트:&lt;/strong&gt; 일반 사용&lt;/font&gt;&lt;/font&gt;&lt;code&gt;javascript&lt;/code&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;window.onload = function(){
    var ifr = document.getElementById('MainPopupIframe');
    ifr.onload=function(){
        this.style.display='block';
        console.log('laod the iframe')
    };

    var btn = document.getElementById('click');    
    btn.onclick=function(){
        ifr.src='https://heera.it';    
    };
};&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;button id='click'&amp;gt;click me&amp;lt;/button&amp;gt;

&amp;lt;iframe style=&quot;display:none&quot; id='MainPopupIframe' src='' /&amp;gt;&amp;lt;/iframe&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;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://jsfiddle.net/umYkV/1/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;10-0&quot;&gt;&lt;strong papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jsfiddle DEMO&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;11-0&quot;&gt;업데이트 &lt;/strong&gt;: 이것도 시도해 볼 수 있습니다 (dynamic iframe)&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;$(function(){
    $('#click').on('click', function(){
        var ifr = $('&amp;lt;iframe/&amp;gt;', {
            id:'MainPopupIframe',
            src:'https://heera.it',
            style:'display:none;width:320px;height:400px',
            load:function(){
                $(this).show();
                alert('iframe loaded !');
            }
        });
        $('body').append(ifr);    
    });
});&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/2.1.1/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;button id='click'&amp;gt;click me&amp;lt;/button&amp;gt;&amp;lt;br /&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://jsfiddle.net/heera/umYkV/121/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;12-0&quot;&gt;&lt;strong papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jsfiddle DEMO&lt;/font&gt;&lt;/strong&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;저는 이렇게 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;script&amp;gt;
var frame_loaded = 0;
function setFrameLoaded()
{
   frame_loaded = 1;
   alert(&quot;Iframe is loaded&quot;);
}
$('#click').click(function(){
   if(frame_loaded == 1)
    console.log('iframe loaded')
   } else {
    console.log('iframe not loaded')
   }
})
&amp;lt;/script&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;button id='click'&amp;gt;click me&amp;lt;/button&amp;gt;

&amp;lt;iframe id='MainPopupIframe' onload='setFrameLoaded();' src='http://...' /&amp;gt;...&amp;lt;/iframe&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;온로드 이벤트도 시도해 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var createIframe = function (src) {
        var self = this;
        $('&amp;lt;iframe&amp;gt;', {
            src: src,
            id: 'iframeId',
            frameborder: 1,
            scrolling: 'no',
            onload: function () {
                self.isIframeLoaded = true;
                console.log('loaded!');
            }
        }).appendTo('#iframeContainer');

    };
&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/12267010/how-can-i-detect-whether-an-iframe-is-loaded&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/809</guid>
      <comments>https://codeshow.tistory.com/809#entry809comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:40:20 +0900</pubDate>
    </item>
    <item>
      <title>날짜별 엔트리 선택 - &amp;gt;= NOW(), MySQL</title>
      <link>https://codeshow.tistory.com/808</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;날짜별 엔트리 선택 - &amp;gt;= NOW(), MySQL&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이벤트 일정표가 있는데 날짜가 오늘보다 크거나 같은 이벤트를 선택하려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 SELECT 문을 사용하면 나중의 이벤트만 검색됩니다(&amp;gt; NOW()).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;?php    
$db-&amp;gt;query(&quot;SELECT * FROM events WHERE event_date &amp;gt;= NOW()&quot;);
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 또는 미래의 모든 이벤트를 선택하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 찾고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$db-&amp;gt;query(&quot;SELECT * FROM events WHERE event_date &amp;gt;= CURDATE()&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$db-&amp;gt;query(&quot;SELECT * FROM events WHERE event_date &amp;gt;= CURRENT_DATE()&quot;);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 쿼리를 사용하는 이유:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT * FROM events WHERE event_date &amp;gt;= NOW()
&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;...Now()에는 날짜와 시간이 포함되어 있기 때문에 미래의 기록을 반환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 해당 시간 부분은 [function or triggering] 문이 실행되기 시작한 시간을 나타냅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, DATTIME 데이터 유형에서 하루의 시작은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;2010-06-24 00:00:00&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(YYYY-MM-DD HH:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MM:SS, micro second precision으로), NOW()는 다음과 같은 것을 보여줍니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;2010-06-24 14:24:31&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;...&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT * FROM events WHERE event_date &amp;gt;= DATE(NOW())
SELECT * FROM events WHERE event_date &amp;gt;= DATE(CURRENT_TIMESTAMP)
SELECT * FROM events WHERE event_date &amp;gt;= CURRENT_DATE()
SELECT * FROM events WHERE event_date &amp;gt;= CURRDATE()
&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;?php    
$db-&amp;gt;query(&quot;SELECT * FROM events WHERE UNIX_TIMESTAMP(event_date) &amp;gt;=     UNIX_TIMESTAMP(NOW())&quot;);
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CURTIME()을 사용하는 것보다 더 정확한 방법은 날짜뿐만 아니라 시간을 사용하는 경우입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시간이 아닌 날짜에만 관심이 있는 경우 &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.4/en/date-and-time-functions.html#function_curdate&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;3-1&quot;&gt;CURDATE()&lt;/a&gt;를 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NOW()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 동의어를 대신 사용할 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CURRENT_DATE&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(그 뒤에 괄호가 있건 없건) 하지만 내가 말한 문서들은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CURDATE&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 철자로 (-).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;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;/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;select * from events where datediff(event_date, now()) &amp;gt;= 0;
&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;CURDATE와 NOW의 차이점은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql&amp;gt; select CURDATE();
+------------+
| CURDATE()  |
+------------+
| 2017-03-17 |
+------------+
1 row in set (0.03 sec)

mysql&amp;gt; select NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2017-03-17 09:04:45 |
+---------------------+
1 row in set (0.00 sec)
&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;나는 항상 정확하게 하기 위해 NOW를 사용합니다.&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/3114769/selecting-entries-by-date-now-mysql&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MySQL</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/808</guid>
      <comments>https://codeshow.tistory.com/808#entry808comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:40:12 +0900</pubDate>
    </item>
    <item>
      <title>jQuery 객체를 어떻게 비교하시겠습니까?</title>
      <link>https://codeshow.tistory.com/807</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;그래서 저는 상위 요소가 페이지 본문인지 확인하기 위해 두 jQuery 개체를 비교하는 방법을 알아내려고 합니다.&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;if ( $(this).parent() === $('body') ) ...
&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;원시 DOM 요소를 비교해야 합니다. 예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if ($(this).parent().get(0) === $('body').get(0))
&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;if ($(this).parent()[0] === $('body')[0])
&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;if ($(this).parent().is(&quot;body&quot;)) {
  ...
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;루프가 필요하지 않으며, 첫 번째 노드를 테스트할 필요가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;동일한 길이를 유지하고 동일한 노드를 공유하는 것 외에는 거의 아무것도 필요하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 작은 코드 조각이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 이것을 당신 자신의 용도를 위해 jquery 플러그인으로 변환하고 싶을지도 모릅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;jQuery(function($) {
  // Two separate jQuery references
  var divs = $(&quot;div&quot;);
  var divs2 = $(&quot;div&quot;);

  // They are equal
  if (divs.length == divs2.length &amp;amp;&amp;amp; divs.length == divs.filter(divs2).length) {         

  // They are not
  } else {}
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이런 대답들을 우연히 발견했고 어떤 것이 더 나을지 궁금했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 모든 것은 사용자의 요구에 따라 다르지만, 가장 쉽게 타이핑하고, 읽고, 실행할 수 있는 것이 가장 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 제가 결정을 내리기 위해 만든 완벽한 사례가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://jsperf.com/jquery-objects-comparison&quot; rel=&quot;nofollow&quot; papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://jsperf.com/jquery-objects-comparison&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/2436966/how-would-you-compare-jquery-objects&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/807</guid>
      <comments>https://codeshow.tistory.com/807#entry807comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:40:05 +0900</pubDate>
    </item>
    <item>
      <title>ngIf - 확인 후 식이 변경되었습니다.</title>
      <link>https://codeshow.tistory.com/806</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ngIf - 확인 후 식이 변경되었습니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한 시나리오가 있긴 한데, 도저히 작동이 안 돼요!&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 보기에는 높이가 제한된 상자에 텍스트를 표시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버에서 텍스트를 가져오는 중이므로 텍스트가 들어오면 보기가 업데이트됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 '확장' 버튼이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ngIf&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;strong papago-id=&quot;5-1&quot;&gt;표시&lt;/strong&gt;됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;true&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;앵글의 변화 감지가 끝난 후...&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;8-1&quot;&gt;확인 &lt;/strong&gt;후&lt;strong papago-id=&quot;8-1&quot;&gt; 식이 변경&lt;/strong&gt;되었다는 오류가 나타납니다&lt;strong papago-id=&quot;8-1&quot;&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;8-1&quot;&gt; 이전 값: 'false'입니다.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;8-1&quot;&gt; 현재 값: 'true'입니다.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;분명히 버튼에...라고 표시되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;10-0&quot;&gt;이&lt;/strong&gt; 플러그인 &lt;strong papago-id=&quot;10-0&quot;&gt;&lt;a href=&quot;https://plnkr.co/edit/EMjILKLDRI6H0FRPqRPx?p=preview&quot; rel=&quot;noreferrer&quot; papago-id=&quot;10-0-1&quot;&gt;보기&lt;/a&gt;&lt;/strong&gt;(콘솔에서 오류 확인...)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이걸 어떻게 만드는지 아세요?&lt;/font&gt;&lt;/p&gt;&lt;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;dev mode&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&gt;&lt;code&gt;dev mode&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;change detection은 모델이 변경되었는지 확인하기 위해 매 정기적인 변경 감지 실행 후 추가 턴을 추가합니다.&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;변경 탐지를 강제로 다음 체크 표시를 실행하려면 다음과 같은 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;export class App implements AfterViewChecked {

  show = false; // add one more property
  
  constructor(private cdRef : ChangeDetectorRef) { // add ChangeDetectorRef
    //...
  }
  //...
  ngAfterViewChecked() {
    let show = this.isShowExpand();
    if (show != this.show) { // check if it change, tell CD update view
      this.show = show;
      this.cdRef.detectChanges();
    }
  }
  
  isShowExpand()
  {
    //...
  }
}
&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;라이브 데모: https://plnkr.co/edit/UDMNhnGt3Slg8g5yeSNO?p=preview&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;ngAfterContentChecked 후 변경 탐지기 실행으로 문제 해결&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;import { ChangeDetectorRef,AfterContentChecked} from '@angular/core'
export class example implements OnInit, AfterContentChecked {
    ngAfterContentChecked() : void {
        this.changeDetector.detectChanges();
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 몇몇 기사를 읽어보니 이 문제는 수정 없이 제작 모드로 해결됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래와 같은 문제가 발생할 수 있는 이유는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;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;p&gt;&lt;a href=&quot;https://blog.angular-university.io/how-does-angular-2-change-detection-really-work/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://blog.angular-university.io/how-does-angular-2-change-detection-really-work/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시행하다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;AfterContentChecked&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방법.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;constructor(
    private cdr: ChangeDetectorRef,
) {}

ngAfterContentChecked(): void {
   this.cdr.detectChanges();
}  
&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;어떤 이유에서인지 @Tiep Phan의 답변은 변경 감지를 강제하는 데는 효과가 없었지만 setTimeout(변경 감지도 강제함)을 사용하는 데는 효과가 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 그것을 불쾌하게 하는 라인에만 추가하면 되었고, ngAfterViewInit을 추가하는 대신 ngOnInit에 이미 있는 코드로도 잘 작동했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ngOnInit() {
    setTimeout(() =&amp;gt; this.loadingService.loading = true);
    asyncFunctionCall().then(res =&amp;gt; {
        this.loadingService.loading = false;
    })
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은 여기: https://github.com/angular/angular/issues/6005&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제를 해결하기 위해 *ngIf 상태를 변경하는 변수를 &lt;strong papago-id=&quot;31-1&quot;&gt;ngAfterView&lt;/strong&gt;에서 이동할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;31-3&quot;&gt;ngOnInit&lt;/strong&gt; 또는 &lt;strong papago-id=&quot;31-5&quot;&gt;생성자&lt;/strong&gt;를 &lt;strong papago-id=&quot;31-1&quot;&gt;초기화&lt;/strong&gt;합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;AfterView 동안 html의 상태를 변경할 수 없기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Init 메서드가 호출 중입니다.&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;@tiep-phan이 알려준 것처럼, 다른 방법은 ChangeDetectRef를 생성자에게 전달하여 AfterView에서 *ngIf의 상태를 변경한 후에 이를.chRef.detectChanges()라고 부르는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;init 방법.&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;strong papago-id=&quot;33-3&quot;&gt;탐지를 OnPush로 변경&lt;/strong&gt;하여 이 &lt;strong papago-id=&quot;33-1&quot;&gt;ExpressionChanged&lt;/strong&gt; After It Has CheckedError가 던지는 것을 억제할 수도 있습니다.&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;@Component&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;strong papago-id=&quot;34-1&quot;&gt;.ts&lt;/strong&gt; 파일의 데코레이터는 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Component({
  selector: 'your-component',
  templateUrl: 'your-component.component.html',
  changeDetection: ChangeDetectionStrategy.OnPush
})
&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;유사한 문제로 어려움을 겪고 있는 사람들을 위해, 기본적으로 여러분은 하지 말아야 할 곳에서 돔을 업데이트하려고 노력하고 있습니다. 이 링크 https://blog.angular-university.io/angular-debugging/ 에서 디버그하는 방법에 대한 세부 정보를 찾을 수 있고, 문제를 발생시키는 정확한 코드 조각을 찾을 수 있으며, 문제를 해결하는 방법에 대한 몇 가지 아이디어를 찾을 수 있습니다.&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;이것은 Angular 버전 9+를 위한 것입니다.&lt;/font&gt;&lt;/strong&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;@ViewChild('templateRefVar') xyz!: TemplateRef&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;undefind&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보기가 준비될 때까지, 값이 템플릿 참조로 실제로 변경될 때 이 오류가 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;템플릿 참조가 있는 것을 알고 있다면 다음과 같은 이유가 있습니다: xyz.html:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;...
&amp;lt;ng-template #templateRefVar&amp;gt;
  ...
&amp;lt;/ng-template&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;다음과 같이 선언할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;static&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;@ViewChild('templateRefVar', {static: true}) xyz!: TemplateRef&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;이 옵션은 즉시 내장된 뷰를 생성할 수 있도록 지원하기 위해 도입되었습니다.&quot; - angular.io &lt;a href=&quot;https://angular.io/guide/static-query-migration&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;44-1&quot;&gt;가이드&lt;/a&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;ul&gt; 
 &lt;li&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;static&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;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;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;false&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;a href=&quot;https://angular.io/guide/static-query-migration#how-do-i-choose-which-static-flag-value-to-use-true-or-false&quot; papago-id=&quot;49-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;여기 보세요&lt;/a&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용 시기를 이해합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;{static: true}&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;a href=&quot;https://angular.io/guide/static-query-migration#is-there-a-case-where-i-should-use-static-true&quot; papago-id=&quot;51-0&quot; rel=&quot;nofollow noreferrer&quot;&gt;여기 보세요&lt;/a&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하시는 경우&lt;/font&gt;&lt;/font&gt;&lt;code&gt;BehaviorSubject&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;/p&gt; 
&lt;h3 papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;component.ts:&lt;/font&gt;&lt;/h3&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;import { Observable } from 'rxjs/Observable';
import {tap, map, delay} from 'rxjs/operators';

private _user = new BehaviorSubject&amp;lt;any&amp;gt;(null);
user$ = this._user.asObservable();

Observable.of('response').pipe(
            tap(() =&amp;gt;this._user.next('yourValue'),
            delay(0),
            map(() =&amp;gt; 'result')
          );

&lt;/code&gt;&lt;/pre&gt; 
&lt;h3 papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구성 요소.html:&lt;/font&gt;&lt;/h3&gt; 
&lt;pre class=&quot;lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;login *ngIf=&quot;!(dataService.user$ | async); else mainComponent&quot;&amp;gt;&amp;lt;/login&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;확인 후 객체가 변경되는 Ngbmodal 팝업을 로드 중에 열어서 이 오류가 발생했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;setTimeout 안에 modal open function을 호출하여 이 문제를 해결하였습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;setTimeout(() =&amp;gt; {
  this.modalReference = this.modalService.open(this.modal, { size: &quot;lg&quot; });
});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각도 변경 탐지 프로세스는 동기화됩니다. 이 오류를 방지하기 위해 비동기 프로세스로 만들 수 있으며, 다음과 같은 작업을 수행하여 해당 코드를 변경 탐지 외부에서 실행하도록 만들 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 토막글을 Init 또는 Constructor 메서드에 넣을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;this.ngZone.runOutsideAngular(() =&amp;gt; {    
     this.interval = window.setInterval(() =&amp;gt; {        

         //logic which we want to handle

     }, 1)});
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/43513421/ngif-expression-has-changed-after-it-was-checked&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angular</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/806</guid>
      <comments>https://codeshow.tistory.com/806#entry806comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:39:59 +0900</pubDate>
    </item>
    <item>
      <title>void* 대신 intptr_t를 사용?</title>
      <link>https://codeshow.tistory.com/805</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;void* 대신 intptr_t를 사용?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하는 것이 좋습니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;intptr_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;code&gt;void*&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;? (여기서 보는 것처럼: http://www.crystalspace3d.org/docs/online/manual/Api1_005f0-64_002dBit-Portability-Changes.html)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미 읽은 내용:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;void*&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;왕복은 원래의 가치를 보장하지 않습니다. 아마도.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;intptr_t&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;-&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;할 거다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;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;void*&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;intptr_t&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;/li&gt; 
 &lt;li&gt;&lt;code&gt;void*&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포인터를 저장할 때 덜 명시적인 캐스트를 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;intptr_t&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;/li&gt; 
 &lt;li&gt;&lt;code&gt;intptr_t&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C99가 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 외에 고려해야 할 사항은 무엇입니까?&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하는 것이 좋습니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;intptr_t&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;void*&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&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&gt;&lt;code&gt;intptr_t&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;존재가 보장되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫째, 당신이 주목하신 것처럼, 그것은 C99에 도입되었습니다.&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;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변환하기&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&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;intptr_t&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;em papago-id=&quot;25-1&quot;&gt;가능성&lt;/em&gt;은 낮지만, 그에 대한 확실한 보장은 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;intptr_t&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;int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포인터 값을 저장하려면 포인터 개체에 저장합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 포인터 개체의 용도입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;void*&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 class=&quot;papago-parent&quot;&gt;(C 표준을 말하는 것인데, POSIX는 몇 가지 추가적인 보장을 제공한다고 생각합니다.)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정수 또는 포인터 값을 동일한 개체에 저장하려면 가장 먼저 설계를 다시 생각해 보는 것이 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미 그렇게 했고 정말로 그렇게 하고 싶다고 결론을 내렸다면 조합을 사용하는 것을 고려해 보십시오(그리고 가장 최근에 저장한 가치가 무엇인지 주의 깊게 추적해야 합니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;a를 사용하는 API들이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;void*&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;임의 데이터를 전달할 수 있도록 하는 인수입니다. 예를 들어 POSIX 함수를 참조하십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 정수 값을 다음에 캐스팅함으로써 악용될 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;void*&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 정수 개체의 &lt;em papago-id=&quot;34-1&quot;&gt;주소&lt;/em&gt;를 전달하는 것이 더 안전합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니요, 특정 유형이 포인터와 정수를 모두 저장하는 합리적인 방법이라고 보장할 수는 없습니다. 게다가 코드를 혼란스럽게 만듭니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 좋은 방법이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정수와 포인터를 동일한 개체에 저장하려면 깨끗하고 휴대하기 쉬운 방법으로 유니언을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;union foo {
   int integer_foo;
   void *pointer_foo;
};
&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;그것은 항상 작동할 것을 보장합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/9492798/using-intptr-t-instead-of-void&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/805</guid>
      <comments>https://codeshow.tistory.com/805#entry805comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:39:51 +0900</pubDate>
    </item>
    <item>
      <title>문자 뺄셈을 이용한 cstrcmp 구현</title>
      <link>https://codeshow.tistory.com/804</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자 뺄셈을 이용한 cstrcmp 구현&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이러한 구현을 보았습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;strcmp&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;입력을 16비트 정수로 변환하고 연산을 한 다음 다시 8비트로 변환해야 하는 이유는 무엇입니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;뺄셈을 8비트로 하는 것이 무슨 문제가 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int8_t strcmp (const uint8_t* s1, const uint8_t* s2)
{
  while ( *s1 &amp;amp;&amp;amp; (*s1 == *s2) )
  {
    s1++; 
    s2++;
  }

  return (int8_t)( (int16_t)*s1 - (int16_t)*s2 );
}
&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;참고: 코드는 16비트를 가정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&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;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;5-0&quot;&gt;편집:&lt;/strong&gt; C가 다음으로 변환을 한다고 언급했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(suppose 32비트) 기본값입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드에 명시적으로 16비트로 캐스팅하라고 명시되어 있는 경우에도 그러합니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&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;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;8-1&quot;&gt;strcmp(a,b)&lt;/em&gt; 함수가 반환될 것으로 예상됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;&amp;lt;0&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;string a &amp;lt; string b&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;&amp;gt;0&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;string a &amp;gt; string b&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;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&gt;&lt;/font&gt;&lt;code&gt;string a == string b&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트는 실제로 첫 번째 문자가 동일한 위치에 있는 두 개의 문자열에서 서로 다른 경우에 수행됩니다( 문자열 터미네이터 0도 작동).&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;여기서 기능은 2개가 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;uint8_t&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(무부호 문자), 개발자는 아마도 두 개의 무부호 문자를 비교하는 것에 대해 걱정하고 있었을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0&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;255&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 따라서 음의 값은 절대로 반환되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;118 - 236&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;돌아올 것입니다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-118&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 하지만 8비트에서는 돌아올 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;138&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&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;int_16&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 부호가 있는 정수(16비트).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 효과가 있었고 정확한 음/양의 값이 주어졌을 수도 있습니다(기능이 다시 돌아온다면).&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int_16&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;int_8&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;strong&gt;&lt;sup&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(*edit : 아래 @zwol 님의 코멘트, 정수 프로모션은 부득이하게 진행되므로,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int16_t&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;/sup&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 결승전은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int_8&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;code&gt;-255&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;255&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 이 값들 중 일부는 캐스트 후에 그들의 부호가 역전되는 것을 볼 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int_8&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;255 - 0&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;code&gt;255&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(16비트의 경우 모두 8비트에서 1로, MSB에서 0으로 낮춥니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int_8&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;32&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;world (8비트로 서명) 이건 음성이고,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 마지막 로우 8비트만 바이너리로 설정할 수 있기 때문에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;11111111&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 또는 십진법&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;hr&gt; Definitely not a good programming example. 
&lt;br&gt;
&lt;br&gt; That 
&lt;a href=&quot;http://www.opensource.apple.com/source/Libc/Libc-262/ppc/gen/strcmp.c&quot; papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작업기능&lt;/font&gt;&lt;/a&gt; from Apple is better 
&lt;p&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for ( ; *s1 == *s2; s1++, s2++)
    if (*s1 == '\0')
        return 0;
return ((*(unsigned char *)s1 &amp;lt; *(unsigned char *)s2) ? -1 : +1);
&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;(Linux는 어셈블리 코드에서 실행합니다...)&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;실제로 결과의 범위가 -255~255이고 8비트에 맞지 않는 것은 명백한 이유로 최소 16비트 ¹에서 차이를 수행해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 어쨌든 암묵적인 정수 홍보로 인해 발생할 것이라는 점은 sfstewman이 옳습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;42&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;범위가 여전히 8비트에 맞지 않기 때문에 오버플로가 발생할 수 있기 때문에 8비트에 대한 최종 &lt;em papago-id=&quot;42-1&quot;&gt;캐스트&lt;/em&gt;는 올바르지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 어쨌든, 정말로 평범하게 돌아올 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;¹ 9개면 충분하지만 비트는 보통 8개 묶음으로 나옵니다.&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;입력 데이터는 부호가 없는 8비트이므로 잘라내기 및 오버플로/언더플로의 영향을 방지하려면 적어도 9비트 부호로 변환해야 하므로 int16이 사용됩니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;return (int8_t)( (int16_t)*s1 - (int16_t)*s2 );
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 다음 두 가지 옵션 중 하나를 의미할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로그래머가 C에서 암묵적 유형의 프로모션이 어떻게 작동하는지에 대해 혼란스러워했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 피연산자 모두 암묵적으로 다음으로 변환됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&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;int16_t&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 그래서 만약에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 32비트, 코드는 넌센스입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 그렇지 않다면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;int16_t&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;특정 시스템의 경우 변환이 전혀 이루어지지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 프로그래머는 유형 프로모션이 어떻게 작동하는지 잘 알고 있으며 MISRA-C와 같은 암묵적 유형 프로모션을 금지하는 표준에 확인해야 하는 코드를 작성하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 경우엔, 그리고 그 경우엔&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&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;주어진 시스템에서 16비트인 코드는 완벽하게 맞아 떨어집니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 컴파일러/정적 분석기의 경고를 피하기 위해 명시적인 형식 프로모션을 강제로 수행합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 번째 옵션이 가장 가능성이 높고, 이 코드는 소형 마이크로컨트롤러 시스템을 위한 것이라고 추측합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&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;int16_t&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;47&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물이 넘쳐서 없었던 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int8_t&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;당신의 범위는 -128에서 127입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;uint8_t&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;당신의 범위는 0에서 255까지 입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int16_t&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;50&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 범위는 -32,768에서 32,767입니다.&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;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;int8_t&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;uint8_t&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;127을 초과하는 값은 오버플로우로 인해 부호가 변경되므로 이를 방지할 수 있지만 출력은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int16_t&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;54&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 255 - 0의 결과를 얻었다면 이는 잘린 반환입니다.&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/34859163/c-strcmp-implementation-using-subtraction-of-characters&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/804</guid>
      <comments>https://codeshow.tistory.com/804#entry804comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:39:44 +0900</pubDate>
    </item>
    <item>
      <title>jQuery로 텍스트 내용별 옵션 선택</title>
      <link>https://codeshow.tistory.com/803</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;나는 jquery를 사용하여 쿼리 문자열을 통과한 모든 것에 드롭다운 상자를 설정하고 싶습니다.&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;TEXT&quot; 값이 쿼리 문자열의 특정 파라미터와 같도록 선택한 속성을 옵션에 추가하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; $(document).ready(function() {
        var cat = $.jqURL.get('category');
        if (cat != null) {
            cat = $.URLDecode(cat);
            var $dd = $('#cbCategory');
            var $options = $('option', $dd);
            $options.each(function() {
                if ($(this).text() == cat)
                    $(this).select(); // This is where my problem is
            });
        };
    });
&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;var cat = $.jqURL.get('category');
var $dd = $('#cbCategory');
var $options = $('option', $dd);
$options.each(function() {
if ($(this).text() == cat)
    $(this).select(); // This is where my problem is
});
&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;$('#cbCategory').val(cat);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택 목록을 호출하면 해당 값을 가진 옵션이 자동으로 선택됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문이 너무 오래된 질문이라는 것을 알지만, 그래도 이 방법이 더 깔끔할 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;cat = $.URLDecode(cat);
$('#cbCategory option:contains(&quot;' + cat + '&quot;)').prop('selected', true);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 다음과 같은 모든 옵션을 검토할 필요가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;each()&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;prop()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전 버전의 jQuery 사용의 경우 존재하지 않았습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;attr()&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;hr&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;갱신하다&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용할 때는 확실해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;contains&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;cat&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일치시킬 항목과 다른 옵션의 하위 문자열을 일치시킵니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;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;cat = $.URLDecode(cat);
$('#cbCategory option').filter(function(index) { 
    return $(this).text() === cat; 
}).prop('selected', true);
&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&gt;&lt;code&gt;&amp;lt;option&amp;gt;&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;value&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Attribute를 사용하면 다음을 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$selectElement.val(&quot;text_you're_looking_for&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만, 만일 당신이&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;option&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소들은 가치 속성을 가지고 있거나 미래에 그럴 수도 있습니다. 왜냐하면 가능할 때마다 이것은 작동하지 않을 것이기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.val&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션을 선택할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;value&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;옵션이 다음과 같은 경우 텍스트 내용으로 옵션을 선택하는 기본 제공 jQuery 메서드는 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;value&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;/*
  Source: https://stackoverflow.com/a/16887276/1709587

  Usage instructions:

  Call

      jQuery('#mySelectElement').selectOptionWithText('target_text');

  to select the &amp;lt;option&amp;gt; element from within #mySelectElement whose text content
  is 'target_text' (or do nothing if no such &amp;lt;option&amp;gt; element exists).
*/
jQuery.fn.selectOptionWithText = function selectOptionWithText(targetText) {
    return this.each(function () {
        var $selectElement, $options, $targetOption;

        $selectElement = jQuery(this);
        $options = $selectElement.find('option');
        $targetOption = $options.filter(
            function () {return jQuery(this).text() == targetText}
        );

        // We use `.prop` if it's available (which it should be for any jQuery
        // versions above and including 1.6), and fall back on `.attr` (which
        // was used for changing DOM properties in pre-1.6) otherwise.
        if ($targetOption.prop) {
            $targetOption.prop('selected', true);
        } 
        else {
            $targetOption.attr('selected', 'true');
        }
    });
}
&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;jQuery를 페이지에 추가한 후 이 플러그인을 어딘가에 포함시킨 다음에 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;jQuery('#someSelectElement').selectOptionWithText('Some Target Text');
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;옵션을 선택합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;option&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 class=&quot;papago-parent&quot;&gt;텍스트를 입력하고 다음 중 하나를 사용하여 선택합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.attr&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.prop&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, jQuery 버전에 따라 달라집니다(설명은 &lt;a href=&quot;https://stackoverflow.com/questions/5874652/prop-vs-attr&quot; papago-id=&quot;18-1&quot;&gt;.prop() vs.attr()&lt;/a&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;다음은 이 질문에 주어진 세 가지 답변을 모두 사용하여 플레이할 수 있는 JSFiddle로, 이 답변만이 안정적으로 작동할 수 있음을 보여줍니다. http://jsfiddle.net/3cLm5/1/&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/1009740/selecting-option-by-text-content-with-jquery&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jQuery</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/803</guid>
      <comments>https://codeshow.tistory.com/803#entry803comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:39:37 +0900</pubDate>
    </item>
    <item>
      <title>AND() 함수를 이용한 조건부 포맷</title>
      <link>https://codeshow.tistory.com/802</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AND() 함수를 이용한 조건부 포맷&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;=AND((INDIRECT(ADDRESS(4;COLUMN()))&amp;gt;=INDIRECT(ADDRESS(ROW();4)));(INDIRECT(ADDRESS(4;COLUMN()))&amp;lt;=INDIRECT(ADDRESS(ROW();5))))
&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;AND() 함수의 문을 따로 시도해 보면 작동하는 것처럼 보이지만 함수에 문을 합하면 포맷이 발생하지 않습니다.&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;현재 열의 4행에는 날짜(DATE1)가 들어 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 &quot;현재 행&quot;(DATE2 및 DATE3)의 D 및 E 열에 날짜가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 DATE1이 DATE2와 DATE3 사이에 있다면 셀에 색을 채우고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;공식이 왜 작동하지 않는지 알 수가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 도움이라도 주시면 감사하겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업데이트(2011년 12월 13일):&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;함수는 정수 값을 반환합니다.&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;구현하는 함수에 INDIRECTED(ADDESS(ROW());COLUMN())를 전달하고 있습니다.&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;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: ActiveCell은 제게 적합하지 않은 것 같습니다.&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;물론 셀 자체를 통과할 수는 있지만(A4, B7 등과 같이) 성능적으로 문제가 되는지는 잘 모르겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 질문에 대답해주신 여러분들께 감사드립니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AND()가 조건부 포맷을 깨는 것에 대해서도 같은 문제를 겪고 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;우연히 AND를 곱셈으로 취급해봤는데 효과가 있어요!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;AND() 함수를 제거하고 인수를 곱하기만 하면 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Excel은 부울을 true인 경우 1로 처리하고 false인 경우 0으로 처리합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;방금 이 공식을 테스트해봤는데 효과가 있는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;=(INDIRECT(ADDRESS(4,COLUMN()))&amp;gt;=INDIRECT(ADDRESS(ROW(),4)))*(INDIRECT(ADDRESS(4,COLUMN()))&amp;lt;=INDIRECT(ADDRESS(ROW(),5)))
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;훨씬 더 간단한 공식을 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 그것을 테스트하기 위해 새로운 워크북을 만들었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Column A = Date1 | Column B = Date2 | Column C = Date3
&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;열 A를 강조 표시하고 조건부 형식 공식을 입력합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;=AND(A1&amp;gt;B1,A1&amp;lt;C1)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;덜 복잡한 공식에 대해서도 비슷한 문제가 있었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;= If (x &amp;gt; A &amp;amp; x &amp;lt;= B) 
&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;AND&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;+&lt;/code&gt; &lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  = (x &amp;gt; A1) + (x &amp;lt;= B1)        [without all the spaces]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 덜 복잡한 비교로 다른 사람들에게 도움이 되기를 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 열() 및 행() 함수 때문일 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;조건부 포맷에서 어떻게 적용되는지 잘 모르겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 공식의 값을 사용하여 새 열을 만든 다음 형식 지정 필요에 맞게 사용해 보십시오.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;COLUMN()&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;ROW()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전화를 거는 셀에 적용되기 때문에 이런 방식으로는 작동하지 않을 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;조건부 형식에서는 &lt;strong papago-id=&quot;3-3&quot;&gt;암시적&lt;/strong&gt; 형식이 아니라 &lt;strong papago-id=&quot;3-1&quot;&gt;명시적&lt;/strong&gt; 형식이어야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;A1&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;pre&gt;&lt;code&gt;`COLUMN(A1)` and `ROW(A1)`
&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;Excel은 조건부 서식을 &lt;em papago-id=&quot;21-1&quot;&gt;현재&lt;/em&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;이 코드의 가장 느린 부분 중 하나는 각각의 조건부 형식 공식을 설정하는 6열의 500개의 행을 순환하는 것이었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;공식은 셀 내용물이 비어 있지는 않지만 명명된 범위의 일부를 형성하지 않는 위치를 식별하는 것이며, 따라서 원래 다음과 같이 쓰여진 셀 자체를 두 번 언급합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;=AND(COUNTIF(&amp;lt;rangename&amp;gt;,&amp;lt;cellref&amp;gt;)=0,&amp;lt;cellref&amp;gt;&amp;lt;&amp;gt;&quot;&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;분명히 각 열(범위)에 있는 모든 셀을 한 번에 업데이트하면 오버헤드가 훨씬 줄어들 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 위에서 언급한 바와 같이 ADESS(ROW(),COLUMN()을 사용하는 것은 이러한 상황에서는 작동하지 않습니다. 즉, 다음과 같이 작동하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;=AND(COUNTIF(&amp;lt;rangename&amp;gt;,ADDRESS(ROW(),COLUMN(),1))=0,ADDRESS(ROW(),COLUMN(),1)&amp;lt;&amp;gt;&quot;&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 빈 문제집을 가지고 광범위하게 실험을 해보았지만 ISBLANK와 같은 다양한 대안을 사용하여 이를 해결할 방법을 찾을 수 없었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;결국 이 문제를 해결하기 위해 다음과 같은 두 가지 사용자 정의 함수를 만들었습니다(이 사이트의 다른 곳에 있는 팁을 사용).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Public Function returnCellContent() As Variant

  returnCellContent = Application.Caller.Value

End Function

Public Function Cell_HasContent() As Boolean

  If Application.Caller.Value = &quot;&quot; Then
    Cell_HasContent = False
  Else
    Cell_HasContent = True
  End If

End Function
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;조건 공식은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;=AND(COUNTIF(&amp;lt;rangename&amp;gt;,returnCellContent()=0,Cell_HasContent())
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;잘 작동하는군요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 통해 Excel 2010의 코드 속도가 5초에서 1초로 빨라졌습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드는 데이터가 응용 프로그램에 로드될 때마다 실행되므로 이러한 절약은 사용자에게 중요하고 눈에 띕니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 훨씬 깨끗하고 재사용이 가능합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이 사이트나 다른 곳에서 이 모든 상황을 다루는 답변을 찾을 수 없었기 때문에 시간을 내어 이 글을 올렸습니다. 하지만 위의 접근 방식을 통해 이익을 얻을 수 있는 다른 사람들과, 업데이트해야 할 셀의 수가 훨씬 더 많을 수도 있다고 확신합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보고된 다른 문제와 동일한 문제 - Excel 2016 사용&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;29-1&quot;&gt;표&lt;/strong&gt;에 대해 조건 공식을 적용할 때; AND, 조건 곱하기, 조건 추가가 실패했음을 발견했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;TRUE/FALSE 논리를 직접 작성해야 함:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;=IF($C2=&quot;SomeText&quot;,0,1)+IF(INT($D2)&amp;gt;1000,0,1)=0
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/8473622/conditional-formatting-using-and-function&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Excel</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/802</guid>
      <comments>https://codeshow.tistory.com/802#entry802comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:39:30 +0900</pubDate>
    </item>
    <item>
      <title>MySQL SELECT 쿼리에서 IF 문 사용</title>
      <link>https://codeshow.tistory.com/801</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL SELECT 쿼리에서 IF 문 사용&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;IF&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 선택 쿼리의 문입니다.&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;AND&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫번째가 어디인지 진술.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;IF&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 J.JOB_ID,E.COMPANY_NAME,J.JOB_DESC,JT.JOBTYPE_NAME,J.COMPENSATION,ST.STATE_NAME,MC.METRO_CITY_NAME,I.INDUSTRY_NAME,
 J.JOB_CONTACT_PERSON,J.DT_INSRT,J.JOB_TITLE,J.JOB_EXP_DATE,J.SKILLS
 FROM JOBS J 
 JOIN EMPLOYER E ON J.COMPANY_ID=E.COMPANY_ID 
 JOIN LOOKUP_JOBTYPE JT ON J.JOB_TYPE=JT.JOBTYPE_ID
 JOIN LOOKUP_STATE ST ON J.STATE_ID=ST.STATE_ID
 JOIN JOBS_LOCATION JL ON J.JOB_ID=JL.JOB_ID
 JOIN LOOKUP_METRO_CITY MC ON JL.METRO_CITY_ID=MC.METRO_CITY_ID
 JOIN LOOKUP_INDUSTRY I ON J.INDUSTRY_ID=I.INDUSTRY_ID 
 JOIN JOBS_QUALIFICATION JQ ON J.JOB_ID=JQ.JOB_ID 
 JOIN LOOKUP_DEGREE_QUALIFICATION LDQ ON LDQ.QUALIFICATION_ID = JQ.QUALIFICATION_ID
 WHERE  J.ACTIVE='Y' AND J.DT_INSRT &amp;gt; COALESCE(pEmailSntDt,DATE_SUB(SYSDATE(),INTERVAL 4 DAY))  
AND
IF(JQ.COURSE_ID=0) 
THEN
IF(JQ.DEGREE_ID=0)
THEN J.SKILLS LIKE CONCAT('%', pSkills,'%')
ELSE
JQ.DEGREE_ID=pDegreeId OR J.SKILLS LIKE CONCAT('%', pSkills,'%')
END IF
ELSE
JQ.COURSE_ID=pCourseId OR IF(JQ.DEGREE_ID=0)
                      THEN
                      J.SKILLS LIKE CONCAT('%', pSkills,'%')
                      ELSE
                      JQ.DEGREE_ID=pDegreeId OR J.SKILLS LIKE CONCAT('%', pSkills,'%')
                      END IF
END IF                           
GROUP BY J.JOB_ID ORDER BY J.DT_INSRT DESC;
&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;MySQL 쿼리에서 IF 문을 수행하는 적절한 방법은 무엇입니까?&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;사용 중인 IF/THEN/ELSE 컨스트럭트는 저장된 프로시저 및 기능에서만 유효합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;IF() 함수를 사용하여 이와 같이 WHERE 절의 흐름을 제어할 수 없기 때문에 쿼리를 재구성해야 합니다.&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;쿼리에서 사용할 수 있는 IF() 함수는 주로 쿼리의 SELECT 부분에서 특정 조건에 따라 다른 데이터를 선택하는 데 사용하도록 되어 있지만 쿼리의 WHERE 부분에서는 사용하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT IF(JQ.COURSE_ID=0, 'Some Result If True', 'Some Result If False'), OTHER_COLUMNS
FROM ...
WHERE ...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL &quot;select list&quot;에서 IF 문을 사용하는 방법:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select if (1&amp;gt;2, 2, 3);                         //returns 3
select if(1&amp;lt;2,'yes','no');                     //returns yes
SELECT IF(STRCMP('test','test1'),'no','yes');  //returns no
&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;MySQL where 절 검색 조건 목록에서 IF 문을 사용하는 방법:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;create table penguins (id int primary key auto_increment, name varchar(100))
insert into penguins (name) values ('rico')
insert into penguins (name) values ('kowalski')
insert into penguins (name) values ('skipper')

select * from penguins where 3 = id
--&amp;gt;3    skipper

select * from penguins where (if (true, 2, 3)) = id
--&amp;gt;2    kowalski
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL에서 &quot;절 검색 조건을 가지는&quot; IF 문을 사용하는 방법:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select * from penguins 
where 1=1
having (if (true, 2, 3)) = id
--&amp;gt;1    rico
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;선택 목록에 사용된 열이 있는 IF 문을 사용하여 다음과 같이 결정합니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;select (if (id = 2, -1, 1)) item
from penguins
where 1=1
--&amp;gt; 1
--&amp;gt; -1
--&amp;gt; 1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 쿼리에 포함된 문이 &quot;코드 냄새&quot;가 심한 경우.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;불량 코드는 코드 검토 중에 &quot;분당 WTF's&quot;가 높습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것도 그런 것들 중 하나입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 이름이 적힌 제작물을 보게 되면 당신이 마음에 들지 않을 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드가 나에게 효과가 있는지 시험해 보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT user_display_image AS user_image,
       user_display_name AS user_name,
       invitee_phone,
       (CASE WHEN invitee_status = 1 THEN &quot;attending&quot;
             WHEN invitee_status = 2 THEN &quot;unsure&quot;
             WHEN invitee_status = 3 THEN &quot;declined&quot;
             WHEN invitee_status = 0 THEN &quot;notreviwed&quot;
       END) AS invitee_status
  FROM your_table
&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/8444570/using-an-if-statement-in-a-mysql-select-query&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MySQL</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/801</guid>
      <comments>https://codeshow.tistory.com/801#entry801comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:39:23 +0900</pubDate>
    </item>
    <item>
      <title>WooCommerce : 상품이 품절되어 백오더를 허용하지 않는지 확인합니다.</title>
      <link>https://codeshow.tistory.com/800</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WooCommerce : 상품이 품절되어 백오더를 허용하지 않는지 확인합니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;재고가 부족하고(재고수량 0) 백오더가 불가능한 상품인지 확인하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 코드는 어떤 이유로 작동하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;add_action('woocommerce_before_add_to_cart_button','show_stock_single');
function show_stock_single() {
  global $product;
  if($product-&amp;gt;get_stock_quantity()&amp;lt;1) {
    if($product-&amp;gt;backorders_allowed()) echo '&amp;lt;p&amp;gt;Backorders allowed&amp;lt;/p&amp;gt;';
    else echo '&amp;lt;p&amp;gt;Backorders not allowed&amp;lt;/p&amp;gt;';
  }
  else echo '&amp;lt;p&amp;gt;Available&amp;lt;/p&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;내 생각대로 되지 않는 if 진술이 나올 때마다, 내가 제일 먼저 시도하는 것은 그것을 뒤집는 것입니다. 그러니 이것을 다시 시도해보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if($product-&amp;gt;get_stock_quantity()&amp;gt;0) {
    echo '&amp;lt;p&amp;gt;Available&amp;lt;/p&amp;gt;';
} else {
    if($product-&amp;gt;backorders_allowed()) { 
        echo '&amp;lt;p&amp;gt;Backorders allowed&amp;lt;/p&amp;gt;';
    } else {
        echo '&amp;lt;p&amp;gt;Backorders not allowed&amp;lt;/p&amp;gt;';
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;- 또한 다양한 if 비트를 {...}에 포함시키겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;} 대괄호&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PHP는 싱글 라인 if로 좀 더 완화된 요구사항을 허용해야 한다는 것을 알고 있지만, 그것이 원인일 수도 있습니다!&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;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드가 너무 길었다면 죄송합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 각 파트가 하는 일을 이해하기 위해 각 파트에 코멘트를 달았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 각각의 결과에 대한 이미지를 추가했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사례1 https://i.stack.imgur.com/rmu5m.jpg&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 https://i.stack.imgur.com/Zxnrt.jpg&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;사례 3 https://i.stack.imgur.com/v8Tzc.jpg&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;add_action('woocommerce_single_product_summary','show_stock_single',5);
function show_stock_single() {
  global $product;
  $StockQ=$product-&amp;gt;get_stock_quantity();

  if ($StockQ&amp;gt;=1)//Stock is Available
  {
    echo &quot;&amp;lt;p&amp;gt;Available&amp;lt;/p&amp;gt;&quot;;
  }
  elseif($StockQ&amp;lt;1)//Product is Out of Stock
  {
    echo &quot;&amp;lt;p&amp;gt;Out of Stock&amp;lt;/p&amp;gt;&quot;;
    if ($product-&amp;gt;backorders_allowed())//Product is out of stock AND allow backorders
    {
        echo &quot;&amp;lt;p&amp;gt;Backorder Allowed&amp;lt;/p&amp;gt;&quot;;
    }
    else//Product is out of stock AND DO NOT allow backorders
    {
        echo &quot;&amp;lt;p&amp;gt;Backorder NOT Allowed&amp;lt;/p&amp;gt;&quot;;
    }
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: 플러그인/템플릿 충돌을 방지하기 위해 사용하는 테마는 Storefront입니다.&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/51327748/woocommerce-check-if-product-is-out-of-stock-and-doesnt-allow-backorders&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>WordPress</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/800</guid>
      <comments>https://codeshow.tistory.com/800#entry800comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:39:15 +0900</pubDate>
    </item>
    <item>
      <title>(ExpressJS 사용) AJAX Call 후 EJS 템플릿에서 배열을 루프하는 적절한 방법은 무엇입니까?</title>
      <link>https://codeshow.tistory.com/799</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(ExpressJS 사용) AJAX Call 후 EJS 템플릿에서 배열을 루프하는 적절한 방법은 무엇입니까?&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;http call에서 얻은 객체 배열을 사용하여 내부 API로 루프를 시도하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;request&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모듈/package&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금까지 API에서 데이터를 돌려받고 전체 개체를 페이지에 표시할 수 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 그것을 내 페이지에 표시하고 EJS 템플릿 시스템을 사용하여 루프를 통과하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular를 사용할 수 있다는 것을 알고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;프론트엔드는 JS인데 서버 쪽만 가지고 어디까지 갈 수 있는지 보고 싶습니다.&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;strong papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;server.js&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Prepend /api to my apiRoutes
app.use('/api', require('./app/api'));
&lt;/code&gt;&lt;/pre&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;api.js&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var Report = require('./models/report');
var express  = require('express');
var apiRoutes = express.Router();

apiRoutes.route('/reports', isLoggedIn)  
     .get(function (req, res,next) {
          // use mongoose to get all reports in the database
          Report.find(function (err, reports) {
                 // if there is an error retrieving, send the error.
                 // nothing after res.send(err) will execute
                 if (err)
                    return res.send(err);
                    res.json(reports);
          });
    });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;routes.js&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var User = require('./models/user');
var request = require('request');
module.exports = function (app, passport) {
    
    app.get('/reports', isLoggedIn, function (req, res) {
        res.render('pages/new-report.ejs', {
            user: req.user,
            title:'New Report'
        });
    });


    request({
        uri:'http://localhost:2016/api/reports',
        method:'GET'
    }).on('data',function(data){
        console.log('decoded chunk:' + data)
    }).on('response',function(resp){
        resp.on('data', function(data){
            console.log('received:' + data.length + ' bytes of compressed data');
            app.get('/timeline', isLoggedIn, function (req, res) {
                res.render('pages/timeline', {
                    user: req.user,
                    title:'Timeline',
                    reports: data
                });
            });
        })
    }); 
}  
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;splited&quot;&gt;&lt;strong papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;reports.ejs&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 그냥 전체를 출력하면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;reports&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;&amp;lt;p&amp;gt;&amp;lt;%= reports %&amp;gt;&amp;lt;/p&amp;gt; &lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 페이지에서는 모든 것이 잘 작동하고 나는 다음과 같은 것을 얻습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[
  {
    &quot;_id&quot;: &quot;5775d396077082280df0fbb1&quot;,
    &quot;author&quot;: &quot;57582911a2761f9c77f15528&quot;,
    &quot;dateTime&quot;: &quot;30 June 2016 - 07:18 PM&quot;,
    &quot;picture&quot;: &quot;&quot;,
    &quot;description&quot;: &quot;&quot;,
    &quot;location&quot;: [
      -122.46596999999997,
      37.784495
    ],
    &quot;latitude&quot;: 37.784495,
    &quot;longitude&quot;: -122.46596999999997,
    &quot;address&quot;: &quot;4529 California St, San Francisco, CA 94118, USA&quot;,
    &quot;contact&quot;: &quot;John Doe&quot;,
    &quot;type&quot;: &quot;Financial&quot;,
    &quot;__v&quot;: 0,
    &quot;updated_at&quot;: &quot;2016-07-01T02:21:10.259Z&quot;,
    &quot;created_at&quot;: &quot;2016-07-01T02:21:10.237Z&quot;,
    &quot;tags&quot;: [
      &quot;tag1,tag2&quot;
    ]
  }
]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;11-3&quot;&gt;그러나&lt;/strong&gt; 아래와 같이 객체를 루프하려고 하면 보고서 객체의 반환 속성으로 &lt;strong papago-id=&quot;11-1&quot;&gt;UNDEFINEED&lt;/strong&gt;가 발생하고 무한 루프가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;ul class=&quot;timeline&quot;&amp;gt;
    &amp;lt;% reports.forEach(function(report) { %&amp;gt;
    &amp;lt;li class=&quot;timeline-yellow&quot;&amp;gt;
        &amp;lt;div class=&quot;timeline-time&quot;&amp;gt;
            &amp;lt;span class=&quot;date&quot; style=&quot;text-align:left&quot;&amp;gt;
            &amp;lt;%= report.type %&amp;gt; &amp;lt;/span&amp;gt;
            &amp;lt;span class=&quot;time&quot; style=&quot;font-weight:700;font-size:25px;line-height:20px;text-align:left;&quot;&amp;gt;
            &amp;lt;%= report.dateTime %&amp;gt; &amp;lt;/span&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/li&amp;gt;
    &amp;lt;% }) %&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;루프의 다른 변형을 시도해 보았지만 여전히 실패했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;ul class=&quot;timeline&quot;&amp;gt;
    &amp;lt;% for (var i = 0; i &amp;lt; reports.length; i++) { %&amp;gt;
    &amp;lt;li class=&quot;timeline-yellow&quot;&amp;gt;
        &amp;lt;div class=&quot;timeline-time&quot;&amp;gt;
            &amp;lt;span class=&quot;date&quot; style=&quot;text-align:left&quot;&amp;gt;
            &amp;lt;%= report[i].type %&amp;gt;
            4/10/13 &amp;lt;/span&amp;gt;
            &amp;lt;span class=&quot;time&quot; style=&quot;font-weight:700;font-size:25px;line-height:20px;text-align:left;&quot;&amp;gt;
            &amp;lt;%= report[i].dateTime %&amp;gt; &amp;lt;/span&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/li&amp;gt;
    &amp;lt;% } %&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;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 대한 구문.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;for&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;빙빙 돌다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ejs&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;strong papago-id=&quot;8-1&quot;&gt;reports&lt;/strong&gt;이며 &lt;strong papago-id=&quot;8-3&quot;&gt;report[i]&lt;/strong&gt;을(를) 반복 내부에서 사용하는 것 같습니다. &lt;strong papago-id=&quot;8-5&quot;&gt;이는 reports&lt;/strong&gt;[i&lt;strong papago-id=&quot;8-5&quot;&gt;]&lt;/strong&gt;로 변경해야 하며 이는 작동해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;reports.ejs&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;ul class=&quot;timeline&quot;&amp;gt;
    &amp;lt;% for (var i = 0; i &amp;lt; reports.length; i++) { %&amp;gt;
    &amp;lt;li class=&quot;timeline-yellow&quot;&amp;gt;
        &amp;lt;div class=&quot;timeline-time&quot;&amp;gt;
            &amp;lt;span class=&quot;date&quot; style=&quot;text-align:left&quot;&amp;gt;
            &amp;lt;%= reports[i].type %&amp;gt;
            4/10/13 &amp;lt;/span&amp;gt;
            &amp;lt;span class=&quot;time&quot; style=&quot;font-weight:700;font-size:25px;line-height:20px;text-align:left;&quot;&amp;gt;
            &amp;lt;%= reports[i].dateTime %&amp;gt; &amp;lt;/span&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/li&amp;gt;
    &amp;lt;% } %&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도움이 되길 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;I guess something like this .. 

&amp;lt;% if (reports.length &amp;gt; 0){%&amp;gt; // Checking if there are reports
  &amp;lt;ul class=&quot;timeline&quot;&amp;gt;
      &amp;lt;%  for (let report of reports){ %&amp;gt;
        &amp;lt;li class=&quot;timeline-yellow&quot;&amp;gt;
          &amp;lt;div class=&quot;timeline-time&quot;&amp;gt;
            &amp;lt;span class=&quot;date&quot; style=&quot;text-align:left&quot;&amp;gt;
              &amp;lt;%= report.type %&amp;gt; 
               4/10/13 &amp;lt;/span&amp;gt;
              &amp;lt;span class=&quot;time&quot; style=&quot;font-weight:700;font-size:25px;line- 
  height:20px;text-align:left;&quot;&amp;gt;
              &amp;lt;%= report.dateTime %&amp;gt; &amp;lt;/span&amp;gt;
          &amp;lt;/div&amp;gt;
      &amp;lt;/li&amp;gt;
      &amp;lt;% } %&amp;gt;
  &amp;lt;/ul&amp;gt;
 &amp;lt;%}%&amp;gt;
&amp;lt;%}%&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 loopback3 및 ejs를 사용한 작업 버전입니다.&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;font class=&quot;papago-parent&quot;&gt;js:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;module.exports = function(app) {
  const router = app.loopback.Router();

  router.get('/', function(req, res){
    app.models.ZenGarden.find()
        .then(plants =&amp;gt; {
          console.log('plants: ', plants)
          res.render('index', {plants:plants})
        }).catch(err =&amp;gt; {
          console.log('Failed to find in ZenGarden: ', err)
          res.render('index')
        })
  });

  router.post('/', function(req, res){
    var plants = req.body.plants;
    if (plants) {
      for (var i = 0; i &amp;lt; plants.length; i++) {
        console.log(plants[i])
        app.models.ZenGarden.upsert(plants[i])
            .then().catch(err =&amp;gt; console.log(err))
      }
    }
    return res.render('index', {plants:plants})
  })

  app.use(router);
};
&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;server/views/index.ejs에서:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div&amp;gt;
    &amp;lt;form action='/' method='POST'&amp;gt;
        &amp;lt;% if (plants) { %&amp;gt;
            &amp;lt;table&amp;gt;
                &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Name&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;Count&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
                &amp;lt;% for (var i = 0; i &amp;lt; plants.length; i++) { %&amp;gt;
                    &amp;lt;tr&amp;gt;
                        &amp;lt;input type='hidden' value=&amp;lt;%= plants[i].id %&amp;gt; name='plants[&amp;lt;%= i %&amp;gt;][id]'&amp;gt;
                        &amp;lt;input type='hidden' value=&quot;&amp;lt;%= plants[i].name %&amp;gt;&quot; name='plants[&amp;lt;%= i %&amp;gt;][name]'&amp;gt;
                        &amp;lt;td&amp;gt;&amp;lt;%= plants[i].name %&amp;gt;&amp;lt;/td&amp;gt;
                        &amp;lt;td&amp;gt;&amp;lt;input type='text' value=&amp;lt;%= plants[i].count %&amp;gt; name='plants[&amp;lt;%= i%&amp;gt;][count]'&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
                &amp;lt;% } %&amp;gt;
            &amp;lt;/table&amp;gt;
            &amp;lt;button type='submit'&amp;gt;Save&amp;lt;/button&amp;gt;
        &amp;lt;% } else { %&amp;gt;
            &amp;lt;p&amp;gt;No plant in Zen Garden :-(&amp;lt;/p&amp;gt;
        &amp;lt;% } %&amp;gt;
    &amp;lt;/form&amp;gt;
&amp;lt;/div&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;server/server.js에서 다음을 추가해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const path = require('path')
const bodyparser = require('body-parser')

app.set('view engine', 'ejs')
app.set('views', path.resolve(__dirname, 'views'))

app.middleware('initial', bodyparser.urlencoded({extended:true}))
app.middleware('initial', bodyparser.json())
&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;다음은 ZenGarden 모델(common/models/zen-garden.json)의 정의입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;{
  &quot;name&quot;: &quot;ZenGarden&quot;,
  &quot;base&quot;: &quot;PersistedModel&quot;,
  &quot;idInjection&quot;: true,
  &quot;options&quot;: {
    &quot;validateUpsert&quot;: true
  },
  &quot;properties&quot;: {
    &quot;name&quot;: {
      &quot;type&quot;: &quot;string&quot;,
      &quot;required&quot;: true
    },
    &quot;count&quot;: {
      &quot;type&quot;: &quot;number&quot;,
      &quot;required&quot;: true
    }
  },
  &quot;validations&quot;: [],
  &quot;relations&quot;: {},
  &quot;acls&quot;: [],
  &quot;methods&quot;: {}
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/38179077/what-is-the-proper-way-to-loop-through-an-array-in-an-ejs-template-after-an-ajax&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Ajax</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/799</guid>
      <comments>https://codeshow.tistory.com/799#entry799comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:39:08 +0900</pubDate>
    </item>
    <item>
      <title>도커 컨테이너가 과도하게 작동하지 않는 것에 대해 우려해야 합니까?</title>
      <link>https://codeshow.tistory.com/798</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도커 컨테이너가 과도하게 작동하지 않는 것에 대해 우려해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker run&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;RUN&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Docker 파일 안에 있는 명령을 실행하여 컨테이너를 만듭니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨테이너가 더 이상 실행되지 않는 경우에도 다음과 같이 볼 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker ps -a&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 class=&quot;papago-parent&quot;&gt;발행해야 하나요?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker rm&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행되지 않는 컨테이너에서?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행되지 않는 이러한 컨테이너가 어떤 성능이나 메모리/스토리지에 영향을 미치는지 확실하지 않습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행되지 않는 컨테이너는 디스크 공간 외에 시스템 리소스를 사용하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보통은 뒷정리를 하는 것이 좋지만, 주변에 청소하는 사람들이 많다면 성능이 전혀 저하되지 않아야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;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;a href=&quot;https://docs.docker.com/engine/reference/commandline/run/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;11-1&quot;&gt;설명서&lt;/a&gt;에서는 컨테이너가 나갈 때 자동으로 컨테이너를 정리하고 파일 시스템을 제거하는 방법에 대해 설명합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  --rm=false: Automatically remove the container when it exits (incompatible with -d)
&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;--rm=true&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 단지 짧은 손으로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--rm&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo docker run -i -t --rm ubuntu /bin/bash
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨테이너에서 나가면 자동으로 컨테이너가 제거됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 터미널 창에 도커 컨테이너를 나열하여 이를 테스트할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;watch -n1 'sudo ls -c /var/lib/docker/containers'
&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;그런 다음 다른 창에서 이 명령을 실행하여 최대 10초 동안 취침 후 자동으로 모두 종료되는 여러 도커 컨테이너를 실행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for i in {1..10}; do sudo docker run --rm ubuntu /bin/sleep $i &amp;amp; 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;볼륨이 있는 컨테이너를 실행하고 &lt;strong papago-id=&quot;18-1&quot;&gt;도커 rm -v&lt;/strong&gt;를 사용하여 제거하지 않으면 컨테이너를 제거한 후에도 볼륨이 제거되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;vfs 스토리지 드라이버에도 문제가 &lt;a href=&quot;https://github.com/dotcloud/docker/issues/3925&quot; rel=&quot;nofollow&quot; papago-id=&quot;18-3&quot;&gt;있습니다&lt;/a&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;정리하는 것을 잊어버리면 볼륨이 디스크 공간을 다 써버립니다.&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;p 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;/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;/p&gt; 
&lt;pre&gt;&lt;code&gt;docker ps --size --filter &quot;status=exited&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;--size&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;: 총 파일 크기를 표시합니다(FYI: &lt;a href=&quot;https://github.com/docker/docker.github.io/issues/1520&quot; papago-id=&quot;21-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;&quot;docker ps -s&quot;&lt;/a&gt;의 SIZE &lt;a href=&quot;https://github.com/docker/docker.github.io/issues/1520&quot; papago-id=&quot;21-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;열과 &quot;virtual&quot; 키워드가 #1520을 의미하는지 설명&lt;/a&gt;합니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;--filter &quot;status=exited&quot;&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;a href=&quot;https://stackoverflow.com/q/30231187/395857&quot; papago-id=&quot;22-1&quot;&gt;정지된 컨테이너만 나열&lt;/a&gt;합니다.&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/q/45254677/395857&quot; papago-id=&quot;23-0&quot;&gt;이&lt;/a&gt;와 동일하게 다음을 실행할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;docker container ls --filter &quot;status=exited&quot;&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령어(Docker 1.13.0, 2017년 1월 도입)를 사용하여 도커 디스크 사용량을 확인할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;username@server:~$ docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              44                  28                  114.7GB             84.84GB (73%)
Containers          86                  7                   62.43GB             41.67GB (66%)
Local Volumes       2                   1                   0B                  0B
Build Cache                                                 0B                  0B
&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;스냅샷이란, 컨테이너 환경에서 기본 구성으로 소프트웨어(예: mysql, redis 등)를 실행하는 데 필요한 파일의 복사본을 의미합니다.&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;strong papago-id=&quot;26-1&quot;&gt;네임스페이스&lt;/strong&gt; 및 &lt;strong papago-id=&quot;26-3&quot;&gt;cgroups&lt;/strong&gt;의 도움으로 시스템에서 리소스의 작은 부분이 분리된 다음 이미지 내부의 파일이 이 고립된 리소스 환경에서 복사됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 컨테이너는 디스크 공간만 차지합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용하지 않는 용기가 있을 경우 제거해야 하지만 항상 재사용이 가능하기 때문에 이미지를 제거해서는 안됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/17014263/should-i-be-concerned-about-excess-non-running-docker-containers&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>docker</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/798</guid>
      <comments>https://codeshow.tistory.com/798#entry798comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:38:58 +0900</pubDate>
    </item>
    <item>
      <title>Matplotlib의 하위 그림에서 행 및 열 머리글</title>
      <link>https://codeshow.tistory.com/797</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Matplotlib의 하위 그림에서 행 및 열 머리글&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;루프에서 생성된 하위 플롯의 그리드에 행과 열 헤더를 추가하는 가장 좋은 방법은 무엇입니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;matplotlib&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;ol&gt; 
 &lt;li&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;set_title()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;맨 앞줄만&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;행의 경우에는 작동하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 그림을 그려야 할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;text&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;줄거리 밖에서&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위에 부분구 행을 추가하고 왼쪽에 부분구 열을 추가한 다음 해당 부분구 중간에 텍스트를 그립니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 좋은 대안을 제시해 주실 수 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/p2knC.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;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하는 방법에는 여러 가지가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;쉬운 방법은 그림의 y 레이블과 제목을 이용한 다음 사용하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fig.tight_layout()&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 class=&quot;papago-parent&quot;&gt;또는 추가 텍스트를 올바른 위치에 배치한 다음 반수동으로 공간을 만들 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;축에 y라벨이 없으면 축의 첫 번째 행과 열의 제목과 y라벨을 쉽게 이용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import matplotlib.pyplot as plt

cols = ['Column {}'.format(col) for col in range(1, 4)]
rows = ['Row {}'.format(row) for row in ['A', 'B', 'C', 'D']]

fig, axes = plt.subplots(nrows=4, ncols=3, figsize=(12, 8))

for ax, col in zip(axes[0], cols):
    ax.set_title(col)

for ax, row in zip(axes[:,0], rows):
    ax.set_ylabel(row, rotation=0, size='large')

fig.tight_layout()
plt.show()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/cN89v.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt; 
&lt;hr&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;y라벨이 있거나 조금 더 유연성이 좋다면 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;annotate&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;이것은 더 복잡하지만 행 및 열 레이블 외에도 개별 플롯 제목, ylabel 등을 가질 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import matplotlib.pyplot as plt
from matplotlib.transforms import offset_copy


cols = ['Column {}'.format(col) for col in range(1, 4)]
rows = ['Row {}'.format(row) for row in ['A', 'B', 'C', 'D']]

fig, axes = plt.subplots(nrows=4, ncols=3, figsize=(12, 8))
plt.setp(axes.flat, xlabel='X-label', ylabel='Y-label')

pad = 5 # in points

for ax, col in zip(axes[0], cols):
    ax.annotate(col, xy=(0.5, 1), xytext=(0, pad),
                xycoords='axes fraction', textcoords='offset points',
                size='large', ha='center', va='baseline')

for ax, row in zip(axes[:,0], rows):
    ax.annotate(row, xy=(0, 0.5), xytext=(-ax.yaxis.labelpad - pad, 0),
                xycoords=ax.yaxis.label, textcoords='offset points',
                size='large', ha='right', va='center')

fig.tight_layout()
# tight_layout doesn't take these labels into account. We'll need 
# to make some room. These numbers are are manually tweaked. 
# You could automatically calculate them, but it's a pain.
fig.subplots_adjust(left=0.15, top=0.95)

plt.show()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/fTip1.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/fTip1.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&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;Joe &lt;a href=&quot;https://stackoverflow.com/a/25814386/13636407&quot; papago-id=&quot;13-1&quot;&gt;Kington의 답변&lt;/a&gt;을 바탕으로 코드 베이스 전체에서 재사용할 수 있는 함수를 올렸습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인수는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;fig&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;: 작업할 축을 포함하는 그림&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;row_headers&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;col_headers&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;/li&gt; 
 &lt;li&gt;&lt;code&gt;row_pad&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;col_pad&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;int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;패딩을 조정할 값&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;rotate_row_headers&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;: 행 헤더를 90° 회전할지 여부&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;**text_kwargs&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;ax.annotate(...)&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능: 아래 예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;import numpy as np

def add_headers(
    fig,
    *,
    row_headers=None,
    col_headers=None,
    row_pad=1,
    col_pad=5,
    rotate_row_headers=True,
    **text_kwargs
):
    # Based on https://stackoverflow.com/a/25814386

    axes = fig.get_axes()

    for ax in axes:
        sbs = ax.get_subplotspec()

        # Putting headers on cols
        if (col_headers is not None) and sbs.is_first_row():
            ax.annotate(
                col_headers[sbs.colspan.start],
                xy=(0.5, 1),
                xytext=(0, col_pad),
                xycoords=&quot;axes fraction&quot;,
                textcoords=&quot;offset points&quot;,
                ha=&quot;center&quot;,
                va=&quot;baseline&quot;,
                **text_kwargs,
            )

        # Putting headers on rows
        if (row_headers is not None) and sbs.is_first_col():
            ax.annotate(
                row_headers[sbs.rowspan.start],
                xy=(0, 0.5),
                xytext=(-ax.yaxis.labelpad - row_pad, 0),
                xycoords=ax.yaxis.label,
                textcoords=&quot;offset points&quot;,
                ha=&quot;right&quot;,
                va=&quot;center&quot;,
                rotation=rotate_row_headers * 90,
                **text_kwargs,
            )
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 표준 그리드(축이 여러 행/콜에 걸쳐 있지 않음)에서 사용하는 예입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;import random
import matplotlib.pyplot as plt

mosaic = [
    [&quot;A0&quot;, &quot;A1&quot;, &quot;A2&quot;],
    [&quot;B0&quot;, &quot;B1&quot;, &quot;B2&quot;],
]
row_headers = [&quot;Row A&quot;, &quot;Row B&quot;]
col_headers = [&quot;Col 0&quot;, &quot;Col 1&quot;, &quot;Col 2&quot;]

subplots_kwargs = dict(sharex=True, sharey=True, figsize=(10, 6))
fig, axes = plt.subplot_mosaic(mosaic, **subplots_kwargs)

font_kwargs = dict(fontfamily=&quot;monospace&quot;, fontweight=&quot;bold&quot;, fontsize=&quot;large&quot;)
add_headers(fig, col_headers=col_headers, row_headers=row_headers, **font_kwargs)

plt.show()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/JteXn.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/JteXn.png&quot; alt=&quot;result: regular grid&quot;&gt;&lt;/a&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;/font&gt;&lt;/font&gt;&lt;code&gt;row_headers&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;col_headers&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인수를 사용하면 쉽게 작동할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-py prettyprint-override&quot;&gt;&lt;code&gt;mosaic = [
    [&quot;A0&quot;, &quot;A1&quot;, &quot;A1&quot;, &quot;A2&quot;],
    [&quot;A0&quot;, &quot;A1&quot;, &quot;A1&quot;, &quot;A2&quot;],
    [&quot;B0&quot;, &quot;B1&quot;, &quot;B1&quot;, &quot;B2&quot;],
]

row_headers = [&quot;A&quot;, &quot;A&quot;, &quot;B&quot;]  # or
row_headers = [&quot;A&quot;, None, &quot;B&quot;]  # or
row_headers = {0: &quot;A&quot;, 2: &quot;B&quot;}

col_headers = [&quot;0&quot;, &quot;1&quot;, &quot;1&quot;, &quot;2&quot;]  # or
col_headers = [&quot;0&quot;, &quot;1&quot;, None, &quot;2&quot;]  # or
col_headers = {0: &quot;0&quot;, 1: &quot;1&quot;, 3: &quot;2&quot;}

fig, axes = plt.subplot_mosaic(mosaic, **subplots_kwargs)
add_headers(fig, col_headers=col_headers, row_headers=row_headers, **font_kwargs)
plt.show()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/mwGv8.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/mwGv8.png&quot; alt=&quot;result: non-regular grid&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 답변이 효과가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;답변의 두 번째 버전에서는 다음과 같은 내용이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;for ax, row in zip(axes[:,0], rows):
    ax.annotate(col, xy=(0, 0.5), xytext=(-ax.yaxis.labelpad-pad,0),
                xycoords=ax.yaxis.label, textcoords='offset points',
                size='large', ha='right', va='center')
&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;for ax, row in zip(axes[:,0], rows):
    ax.annotate(row,xy=(0, 0.5), xytext=(-ax.yaxis.labelpad-pad,0),                    
                xycoords=ax.yaxis.label, textcoords='offset points',
                size='large', ha='right', va='center')
&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;Joe의 답변의 연장선상에서 Y-label 접근법을 사용할 수 있습니다. 기존 Y-label을 사용하는 것보다 훨씬 쉽다고 생각합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;annotate&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 특히 축이 일반 그리드에 있지 않을 경우.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 위해 축을 &lt;a href=&quot;https://matplotlib.org/stable/api/_as_gen/matplotlib.axes.Axes.twinx.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;32-1&quot;&gt;쌍&lt;/a&gt;으로 연결하여 왼쪽으로 이동할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import matplotlib.pyplot as plt

fig, axes = plt.subplots(nrows=3, ncols=3,
                         sharex=True, sharey=True)

cols = [1, 2, 3]
rows = ['A', 'B', 'C']

# set existing Y label
axes[0][0].set_ylabel('Y label')

for c, ax in zip(cols, axes[0]):
    ax.set_title(c, size='large')

for r, ax in zip(rows, axes[:, 0]):
    ax2 = ax.twinx()
    # move extra axis to the left, with offset
    ax2.yaxis.set_label_position('left')
    ax2.spines['left'].set_position(('axes', -0.4))
    # hide spine and ticks, set group label
    ax2.spines['left'].set_visible(False)
    ax2.set_yticks([])
    ax2.set_ylabel(r, rotation=0, size='large',
                   ha='right', va='center')
&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;또는 기존 타이틀도 가지고 있다면 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;출력:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5XVeH.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5XVeH.png&quot; alt=&quot;matplotlib row column titles&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비정규 그리드의 출력:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/CDtwV.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/CDtwV.png&quot; alt=&quot;matplotlib row columns titles non regular grid&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/25812255/row-and-column-headers-in-matplotlibs-subplots&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Python</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/797</guid>
      <comments>https://codeshow.tistory.com/797#entry797comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:38:51 +0900</pubDate>
    </item>
    <item>
      <title>Oracle AQ SYS의 내용을 표시합니다.AQ$_JMS_TEXT_MESSAGE</title>
      <link>https://codeshow.tistory.com/796</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Oracle AQ SYS의 내용을 표시합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;AQ$_JMS_TEXT_MESSAGE&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;오라클 고급 큐잉의 JMS optop을 사용하는 어플리케이션이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;메시지의 내용을 보여주는 큐 테이블에 대한 쿼리를 수행하고 싶습니다(제 경우에는 XML입니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 '[queue_table]에서 user_data 선택'을 할 때&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;전 'AQ SYS'를 받습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;응답으로 'AQ$_JMS_TEXT_MESSAGE'를 선택합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 메시지의 내용을 보여줄 수 있는 기능이 있습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;[queue_table]에서 기능(user_data)을 선택하세요' 같은 것?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구글에서 큐잉에 관한 수많은 오라클 기사를 검색했지만 찾을 수가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한 방법이 있는 것 같은데 찾을 수가 없네요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것도 고생했어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 여기에 http://rwijk.blogspot.com/2009/02/whats-in-my-jms-queue.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;안녕, 롭.&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;select queue.user_data.text_vc from [queue_table] queue
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에 있는 답변은 저장된 더 큰 컨텐츠의 표시를 처리하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;user_data.text_lob&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 내용이 일정 바이트(4000?) 이상인 경우,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;text_vc&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;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 당신은 당신을 봐야합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;text_lob&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(어느 쪽이 될까요?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&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;p&gt;&lt;code&gt;SELECT nvl(q.user_data.text_vc, q.user_data.text_lob) FROM [queue_table] q&lt;/code&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;nvl&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;a href=&quot;https://stackoverflow.com/a/950103/1436981&quot; papago-id=&quot;7-1&quot;&gt;주장을 평가하지 않기&lt;/a&gt; 때문에, 만약 첫번째 주장이 이미 다른 경우에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&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;stuXnet의 코멘트에 추가:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT nvl(to_clob(q.user_data.text_vc), q.user_data.text_lob) FROM queue_table q; 
&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;to_clob이 없으면 VARCHAR2만인 첫 번째 인수의 공간을 보존하므로 4000자보다 큰 데이터에 대해 ORA-22835를 얻을 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 명령을 시도해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;[ queue_table] name에서 user_data 선택&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/1020165/display-contents-of-oracle-aq-sys-aq-jms-text-message&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>oracle</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/796</guid>
      <comments>https://codeshow.tistory.com/796#entry796comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:38:37 +0900</pubDate>
    </item>
    <item>
      <title>JSON 경로-값 쌍에서 보는 MariaDB 레코드를 반환하려면 어떻게 해야 합니까?</title>
      <link>https://codeshow.tistory.com/795</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JSON 경로-값 쌍에서 보는 MariaDB 레코드를 반환하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;0-7&quot;&gt;&lt;strong papago-id=&quot;0-7-0&quot;&gt;저는 PHP v.7.4&lt;/strong&gt;&lt;/em&gt;.1과 &lt;em papago-id=&quot;0-9&quot;&gt;&lt;strong papago-id=&quot;0-9-0&quot;&gt;MariaDB v.10.4.&lt;/strong&gt;&lt;/em&gt;11을 포함하는 &lt;em papago-id=&quot;0-5&quot;&gt;&lt;strong papago-id=&quot;0-5-0&quot;&gt;Windows 10&lt;/strong&gt;&lt;/em&gt; &lt;em papago-id=&quot;0-3&quot;&gt;&lt;strong papago-id=&quot;0-3-0&quot;&gt;x64용 &lt;/strong&gt;&lt;/em&gt;&lt;em papago-id=&quot;0-5&quot;&gt;&lt;strong papago-id=&quot;0-5-0&quot;&gt;XAMPP&lt;/strong&gt;&lt;/em&gt; v.&lt;em papago-id=&quot;0-3&quot;&gt;&lt;strong papago-id=&quot;0-3-0&quot;&gt;7.4.1&lt;/strong&gt;&lt;/em&gt;에서 실행되는 &lt;em papago-id=&quot;0-1&quot;&gt;&lt;strong papago-id=&quot;0-1-0&quot;&gt;OpenCart v.3.3.2&lt;/strong&gt;&lt;/em&gt; 프레임워크를 기반으로 웹사이트를 구축하고 있습니다. On&lt;/font&gt;&lt;/font&gt;&lt;code&gt;user_group&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;permission&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;열, OpenCart는 데이터를 Json 형식으로 저장합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제, 저는 경로 키-값 쌍을 기반으로 레코드와 Json 배열을 검색할 수 있는 쿼리를 만들었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SET @search_value = &quot;catalog\/attribute&quot;;
SET @search_path = &quot;$.access&quot;;

SELECT 
    * 
FROM
    DB_PREFIX_user_group 
WHERE 
    JSON_UNQUOTE        #returns: catalog/attribute
    (
        JSON_EXTRACT        #returns: &quot;catalog\/attribute&quot;
        (
            JSON_EXTRACT        #returns: [&quot;catalog\/attribute&quot;, &quot;catalog\/attribute_group&quot;,...
            (
                permission, 
                @search_path
            ), 
            JSON_UNQUOTE
            (
                JSON_SEARCH        #returns: &quot;$[0]&quot;
                (
                    JSON_EXTRACT        #returns: [&quot;catalog\/attribute&quot;, &quot;catalog\/attribute_group&quot;,...
                    (
                        permission, 
                        @search_path
                    ),
                    'one', 
                    @search_value
                )
            )
        )
    ) = @search_value;
&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;레코드에 Json Array 내의 특정 경로 키-값 쌍이 있는지 확인할 수 있는 다른 방법이 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/65040653/how-do-i-return-mariadb-records-looking-in-a-json-path-value-pair&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>mariaDB</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/795</guid>
      <comments>https://codeshow.tistory.com/795#entry795comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:38:31 +0900</pubDate>
    </item>
    <item>
      <title>MySQL SERVER 8.0에서 Password 기능이 작동하지 않음</title>
      <link>https://codeshow.tistory.com/794</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL SERVER 8.0에서 Password 기능이 작동하지 않음&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;PASSWORD&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL Server 버전 8.0.12에서 기능합니다.&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;pre&gt;&lt;code&gt;SELECT * 
FROM users 
WHERE login = 'FABIO' 
  AND pwd = PASSWORD('2018') 
LIMIT 0, 50000
&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;blockquote&gt; 
 &lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류 코드: 1064.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 구문에 오류가 있습니다. MySQL 서버 버전에 해당하는 설명서에서 다음에 사용할 올바른 구문을 확인하십시오.&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;암호() 함수와 일치하는 대체 해시가 필요한 경우 SHA1(UNHEX(SHA1()); 예를 들어 다음을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql&amp;gt; SELECT PASSWORD('mypass');
+-------------------------------------------+
| PASSWORD('mypass')                        |
+-------------------------------------------+
| *6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4 |
+-------------------------------------------+
&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;버전 8에서도 동일한 답변을 제공하는 대체 기능:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql&amp;gt; SELECT CONCAT('*', UPPER(SHA1(UNHEX(SHA1('mypass')))));
+-------------------------------------------------+
| CONCAT('*', UPPER(SHA1(UNHEX(SHA1('mypass'))))) |
+-------------------------------------------------+
| *6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4       |
+-------------------------------------------------+
&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;비밀번호()의 직접적인 교체는 @rayzinnz에서 답변을 참조하시기 바랍니다.&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;MySQL 8.0.22에서는 다음과 같은 작업을 수행해야 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;/etc/mysql/my.cnf를 업데이트하고 줄을 추가합니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt; [mysqld]

 skip-grant-tables
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mysql을 다시 시작하고 특정 사용자에 대한 authentication_string을 지웁니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt; &amp;gt; systemctl restart mysql
 &amp;gt; sudo mysql
 mysql&amp;gt; UPDATE mysql.user SET authentication_string=null WHERE User='root';
 FLUSH PRIVILEGES;
 mysql&amp;gt; exit;
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다시 로그인하고 암호를 업데이트합니다.&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt; &amp;gt; mysql -u root
 mysql&amp;gt; ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'my password';
 mysql&amp;gt; FLUSH PRIVILEGES;
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;/etc/mysql/my.cnf를 업데이트하고 줄을 제거합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;skip-grant-tables&lt;/code&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt; &amp;gt; systemctl restart mysql
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막으로 테스트를&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt; &amp;gt; mysql -u root -p 
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;OP의 MySQL Server 버전은 8.0.12입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/5.7/en/password-hashing.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;15-1&quot;&gt;MySQL Documentation&lt;/a&gt;에서 &lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html#function_password&quot; rel=&quot;noreferrer&quot; papago-id=&quot;15-3&quot;&gt;Password&lt;/a&gt; 기능은 &lt;strong papago-id=&quot;15-5&quot;&gt;버전 &lt;/strong&gt;&amp;gt; &lt;strong papago-id=&quot;15-5&quot;&gt;5.7.5&lt;/strong&gt;에서 더 이상 사용되지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;메모&lt;/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 5.7.5 이전에만 완전히 적용되며, mysql_native_password 또는 mysql_old_password 인증 플러그인을 사용하는 계정에만 적용됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 5.7.5에서는 4.1 이전 암호 해시에 대한 지원이 제거되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기에는 mysql_old_password 인증 플러그인과 OLD_PASSWORD() 기능이 제거됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 secure_auth는 비활성화할 수 없으며 old_passwords는 1로 설정할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 5.7.5 현재 4.1 암호 해시 및 mysql_native_password 인증 플러그인에 대한 정보만 관련된 상태로 남아 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신에.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;PASSWORD&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능, 당신은 &lt;a href=&quot;https://dev.mysql.com/doc/refman/8.0/en/encryption-functions.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;4-1&quot;&gt;여기&lt;/a&gt;서 훨씬 더 우수하고 안전한 암호화 기능을 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 서버 팀의 자세한 내용은 &lt;a href=&quot;https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;4-3&quot;&gt;여기&lt;/a&gt;에서 확인할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PASWER와 유사한 다른 함수를 만들 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SET GLOBAL log_bin_trust_function_creators = 1;
delimiter $$
CREATE FUNCTION PASSWORD2 (pass_in varchar(50)) RETURNS varchar(50)
BEGIN
  declare n_pass varchar(50);
  set n_pass = CONCAT('*', UPPER(SHA1(UNHEX(SHA1(pass_in))))); 
  return n_pass;
END$$
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고나서&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT PASSWORD2(&quot;my_super_scret_password&quot;) FROM MyUserTable ....
&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/52320576/in-mysql-server-8-0-the-password-function-not-working&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MySQL</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/794</guid>
      <comments>https://codeshow.tistory.com/794#entry794comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:38:24 +0900</pubDate>
    </item>
    <item>
      <title>mysql_real_escape_string()이 SQL 주입으로부터 완전히 보호됩니까?</title>
      <link>https://codeshow.tistory.com/793</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mysql_real_escape_string()이 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;http://www.justinshattuck.com/2007/01/18/mysql-injection-cheat-sheet/ ?&lt;a href=&quot;http://www.justinshattuck.com/2007/01/18/mysql-injection-cheat-sheet/?akst_action=share-this&quot; rel=&quot;noreferrer&quot; papago-id=&quot;1-1&quot;&gt;akst_action&lt;/a&gt;=share-this에는 특정 아시아 문자 인코딩으로 mysql_real_escape_string을 우회할 수 있다는 섹션이 있습니다.&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;BIG5 또는 GBK로 mysql_real_escape_string() 바이패스&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;&quot;injection 문자열&quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;に関する追加情報：&lt;/font&gt;&lt;/font&gt;&lt;/font&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;위의 문자는 중국어 Big5 입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이게 정말로 사실일까요?&lt;/font&gt;&lt;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;em papago-id=&quot;7-1&quot;&gt;,&lt;code papago-id=&quot;7-1-1&quot;&gt;mysql_real_escape_string()&lt;/code&gt; &quot;[사용될 때] 안전하지 않습니다.&quot;&lt;/em&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;a href=&quot;http://www.suspekt.org/2008/09/18/slides-from-my-lesser-known-security-problems-in-php-applications-talk-at-zendcon/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;8-1&quot;&gt;블로그에 올라온&lt;/a&gt; 그의 설명:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;SET NAMES는 일반적으로 인코딩을 기본적인 것에서 응용프로그램이 필요로 하는 것으로 전환하는 데 사용됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 다음과 같은 방식으로 이루어집니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mysql_real_escape_string&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것에 대해서는 모릅니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, 백슬래시를 허용하는 일부 멀티바이트 인코딩을 2번째 3번째 4번째 바이트로 전환하면 문제가 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mysql_real_escape_string&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제대로 빠져나가지 못합니다&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;UTF-8은 안전합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
 &lt;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;mysql_set_charset&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;, 하지만 그것은 새로운 PHP 버전에서만 가능합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그는 UTF-8이 안전하다고 언급합니다.&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;이것은 2006년 5월에 고쳐졌다고 알려진 MySQL 서버 버그입니다.&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;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://bugs.mysql.com/bug.php?id=8303&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;17-0&quot;&gt;MySQL 버그 #8303&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;&lt;a href=&quot;http://bugs.mysql.com/bug.php?id=8317&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;18-0&quot;&gt;MySQL Bug #8317&lt;/a&gt;: 쿼리의 문자 집합 도입기가 연결 문자 집합을 재정의하지 못함&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://bugs.mysql.com/bug.php?id=8378&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;19-0&quot;&gt;MySQL Bug #8378&lt;/a&gt;: 클라이언트 문자 집합이 'gbk'인 문자열이 잘못 빠져나왔습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 5.1.11 변경 &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.1/en/news-5-1-11.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;20-1&quot;&gt;로그&lt;/a&gt;.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 4.1.20, 5.0.22, 5.1.11에서 버그가 수정되었다고 보고되었습니다.&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;4.1.x, 5.0.x 또는 5.1.x를 사용하는 경우 최소한 마이너 버전 번호로 업그레이드했는지 확인합니다.&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;이를 해결하기 위해 따옴표-탈출 문자로 백슬래시를 사용하지 않도록 설정하는 SQL 모드를 사용할 수도 있습니다.&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;SQL을 사용하여 문자 인코딩을 변경하는 경우에만 작동하지 않을 것이라고 확신합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 사람들이 보여준 것처럼, &lt;a href=&quot;https://stackoverflow.com/a/12118602/2224584&quot; papago-id=&quot;25-1&quot;&gt;애매모호한 에지 케이스에서는 우회&lt;/a&gt;할 수 &lt;a href=&quot;https://stackoverflow.com/a/12118602/2224584&quot; papago-id=&quot;25-1&quot;&gt;있습니다&lt;/a&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것이 탈출 로직을 우회하는 알려진 전략 중 하나이지만, 아직 발견되지 않은 또 다른 알려지지 않은 취약점이 있을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://paragonie.com/blog/2015/05/preventing-sql-injection-in-php-applications-easy-and-definitive-guide&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;26-1&quot;&gt;PHP에서 SQL 주입을 방지&lt;/a&gt;하는 간단하고 효과적인 방법은 준비된 &lt;strong papago-id=&quot;26-3&quot;&gt;문&lt;/strong&gt;을 사용할 수 있는 경우와 그렇지 않은 경우 매우 &lt;em papago-id=&quot;26-5&quot;&gt;엄격&lt;/em&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;PDO 드라이버가 에뮬레이트하지 않고 실제로 사용할 때 준비된 문은 애플리케이션 보안의 근본적인 문제를 해결하기 때문에 (적어도 SQL 주입과 관련해서는) 안전할 수 있습니다. 즉, 데이터에 대해 작동하는 &lt;strong papago-id=&quot;27-3&quot;&gt;명령어&lt;/strong&gt;와 &lt;strong papago-id=&quot;27-1&quot;&gt;데이터&lt;/strong&gt;를 분리합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이들은 별도의 패킷으로 전송되며, 매개 변수화된 값은 쿼리 문자열을 오염시킬 기회가 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2015년입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;더 이상 도망치지 말고 속닥거리세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여전히 애플리케이션(및 비즈니스) 논리에 따라 입력 내용을 검증해야 하지만 준비된 설명문만 사용해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/1220182/does-mysql-real-escape-string-fully-protect-against-sql-injection&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MySQL</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/793</guid>
      <comments>https://codeshow.tistory.com/793#entry793comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:38:17 +0900</pubDate>
    </item>
    <item>
      <title>Android 응용 프로그램에서 Intent를 사용하여 다른 활동 표시</title>
      <link>https://codeshow.tistory.com/792</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android 응용 프로그램에서 Intent를 사용하여 다른 활동 표시&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class FirstActivity extends Activity {

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button orderButton = (Button)findViewById(R.id.order);

    orderButton.setOnClickListener(new View.OnClickListener() {

      @Override
      public void onClick(View view) {
        Intent intent = new Intent(FirstActivity.this, OrderScreen.class);
        startActivity(intent);
      }

    });
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단추를 눌렀을 때 표시해야 하는 두 번째 클래스는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class OrderScreen extends Activity {

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.order);

    Button orderButton = (Button) findViewById(R.id.end);

    orderButton.setOnClickListener(new View.OnClickListener() {

      @Override
      public void onClick(View view) {
        finish();
      }

    });
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 번째 활동을 보여주는 버튼을 만들려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제는 주문 &lt;strong papago-id=&quot;0-1&quot;&gt;화면&lt;/strong&gt;이었습니다.&lt;/font&gt;&lt;/font&gt; &lt;code&gt;Activity&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android &lt;a href=&quot;http://developer.android.com/guide/topics/manifest/manifest-intro.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;1-1&quot;&gt;Manifest.xml&lt;/a&gt;에 추가되지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;애플리케이션 노드로 추가하자 제대로 작동했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;activity android:name=&quot;.OrderScreen&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;AndroidManifest.xml에 이 줄을 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;activity android:name=&quot;.OrderScreen&quot; /&amp;gt; 
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;7-1&quot;&gt;----First&lt;/strong&gt; Activity.java--------&lt;strong papago-id=&quot;7-1&quot;&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    package com.mindscripts.eid;
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;

public class FirstActivity extends Activity {

protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Button orderButton = (Button) findViewById(R.id.order);
    orderButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Intent intent = new Intent(FirstActivity.this,OrderScreen.class);
            startActivity(intent);
        }
    });

 }
}
&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;strong papago-id=&quot;8-1&quot;&gt;OrderScreen.java&lt;/strong&gt;---&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    package com.mindscripts.eid;

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;



    public class OrderScreen extends Activity {
@Override



protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.second_class);
    Button orderButton = (Button) findViewById(R.id.end);
    orderButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            finish();
        }
    });

 }
}
&lt;/code&gt;&lt;/pre&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;strong papago-id=&quot;9-1&quot;&gt;---Android&lt;/strong&gt; Manifest.xml----&lt;strong papago-id=&quot;9-1&quot;&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    &amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
    &amp;lt;manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
  package=&quot;com.mindscripts.eid&quot;
  android:versionCode=&quot;1&quot;
  android:versionName=&quot;1.0&quot;&amp;gt;


&amp;lt;application android:icon=&quot;@drawable/icon&quot; android:label=&quot;@string/app_name&quot;&amp;gt;
    &amp;lt;activity android:name=&quot;.FirstActivity&quot;
              android:label=&quot;@string/app_name&quot;&amp;gt;
        &amp;lt;intent-filter&amp;gt;
            &amp;lt;action android:name=&quot;android.intent.action.MAIN&quot; /&amp;gt;
            &amp;lt;category android:name=&quot;android.intent.category.LAUNCHER&quot; /&amp;gt;
        &amp;lt;/intent-filter&amp;gt;
    &amp;lt;/activity&amp;gt;
    &amp;lt;activity android:name=&quot;.OrderScreen&quot;&amp;gt;&amp;lt;/activity&amp;gt;
&amp;lt;/application&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&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;Intent intent=new Intent(context,SecondActivty.class);
startActivity(intent);
finish();
&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;context: 현재 활동 context를 참조합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안드로이드 매니페스트 파일에 액티비티를 추가했는지 확인해주시기 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android 매니페스트 파일에서 액티비티를 추가하기 위한 다음 코드&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;Activity name=&quot;.SecondActivity&quot;&amp;gt;
&amp;lt;/Activity&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;&amp;lt;activity android:name=&quot;[packagename optional].ActivityClassName&quot;&amp;gt;&amp;lt;/activity&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;단순히 우리가 전환하고 싶은 활동을 추가하는 것은 매니페스트 파일에 있어야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Android 파일에서 활동을 만들 때 AndroidManifest.xml과 같이 지정해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt; &lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;uses-sdk android:minSdkVersion=&quot;8&quot; /&amp;gt;

&amp;lt;application
    android:icon=&quot;@drawable/ic_launcher&quot;
    android:label=&quot;@string/app_name&quot; &amp;gt;
    &amp;lt;activity
        android:name=&quot;.MyCreativityActivity&quot;
        android:label=&quot;@string/app_name&quot; &amp;gt;
        &amp;lt;intent-filter&amp;gt;
            &amp;lt;action android:name=&quot;android.intent.action.MAIN&quot; /&amp;gt;

            &amp;lt;category android:name=&quot;android.intent.category.LAUNCHER&quot; /&amp;gt;
        &amp;lt;/intent-filter&amp;gt;
    &amp;lt;/activity&amp;gt;


     &amp;lt;activity android:name=&quot;.OrderScreen&quot;&amp;gt;&amp;lt;/activity&amp;gt;


&amp;lt;/application&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;b1 = (Button) findViewById(R.id.click_me);
        b1.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                Intent i = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(i);

            }
        });
&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;&amp;lt;activity android:name=&quot;.OrderScreen&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매니페스트에서&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;activity android:name=&quot;.OrderScreen&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인텐트 코드를 배치해야 하는 Java 코드에서&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;startActivity(new Intent(CurrentActivity.this, OrderScreen.class);
&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;pre&gt;&lt;code&gt;Button orderButton = (Button)findViewById(R.id.order);

orderButton.setOnClickListener(new View.OnClickListener() {

  @Override
  public void onClick(View view) {
    Intent intent = new Intent(/*FirstActivity.this*/ view.getContext(), OrderScreen.class);
    startActivity(intent);
  }

});
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;Intent i = new Intent(&quot;com.Android.SubActivity&quot;);
startActivity(i);
&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/736571/using-intent-in-an-android-application-to-show-another-activity&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Android</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/792</guid>
      <comments>https://codeshow.tistory.com/792#entry792comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:38:11 +0900</pubDate>
    </item>
    <item>
      <title>회귀 네트워크 교육 시 NaN 손실</title>
      <link>https://codeshow.tistory.com/791</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;회귀 네트워크 교육 시 NaN 손실&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;저는 260,000 행과 35 열을 가진 &quot;원 핫 인코딩&quot;(모든 1과 0)의 데이터 매트릭스를 가지고 있습니다.&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;model = Sequential()
model.add(Dense(1024, input_shape=(n_train,)))
model.add(Activation('relu'))
model.add(Dropout(0.1))

model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.1))

model.add(Dense(256))
model.add(Activation('relu'))
model.add(Dropout(0.1))
model.add(Dense(1))

sgd = SGD(lr=0.01, nesterov=True);
#rms = RMSprop()
#model.compile(loss='categorical_crossentropy', optimizer=rms, metrics=['accuracy'])
model.compile(loss='mean_absolute_error', optimizer=sgd)
model.fit(X_train, Y_train, batch_size=32, nb_epoch=3, verbose=1, validation_data=(X_test,Y_test), callbacks=[EarlyStopping(monitor='val_loss', patience=4)] )
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 훈련 과정에서는 손실이 잘 줄어드는 것을 보지만, 2차 시기 중반에는 nan으로 넘어갑니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Train on 260000 samples, validate on 64905 samples
Epoch 1/3
260000/260000 [==============================] - 254s - loss: 16.2775 - val_loss:
 13.4925
Epoch 2/3
 88448/260000 [=========&amp;gt;....................] - ETA: 161s - loss: nan
&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;RMSProp&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;SGD&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;tanh&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;relu&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 자퇴 여부를 불문하고 시도했지만 소용이 없었습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 더 작은 모델, 즉 숨겨진 레이어 하나만 가지고 시도했고, 동일한 문제(다른 지점에서 nan이 됨)로 시도했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&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 class=&quot;papago-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;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리눅스 시스템에서 실행되는 Python 버전 2.7.11, CPU만 해당&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;최신버전의 Theano로 테스트를 해봤는데 Nans도 나와서 Theano 0.8.2로 가봤는데 같은 문제가 생겼습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Keras의 최신 버전에서도 동일한 문제가 발생하며, 0.3.2 버전에서도 마찬가지입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;신경망을 사용한 회귀 분석은 출력이 무한하기 때문에 작동하기가 어렵습니다. 따라서 특히 &lt;a href=&quot;http://neuralnetworksanddeeplearning.com/chap5.html&quot; papago-id=&quot;9-1&quot;&gt;폭발적&lt;/a&gt;인 그래디언트 &lt;a href=&quot;http://neuralnetworksanddeeplearning.com/chap5.html&quot; papago-id=&quot;9-1&quot;&gt;문제&lt;/a&gt;가 발생하기 쉽습니다(nans의 가능한 원인).&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;역사적으로 폭발적인 그레이디언트에 대한 핵심 솔루션 중 하나는 학습 속도를 줄이는 것이었지만 Adam과 같은 매개 변수별 적응형 학습 속도 알고리즘의 등장으로 더 이상 좋은 성능을 얻기 위해 학습 속도를 설정할 필요가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;뉴럴 네트워크 애호가가 아니고 학습 일정을 조정할 줄 아는 것이 아니라면 SGD를 더 이상 추진력 있게 사용할 이유가 거의 없습니다.&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;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Quantile_normalization&quot; papago-id=&quot;12-1&quot;&gt;분위 정규화&lt;/a&gt; 또는 z &lt;a href=&quot;https://en.wikipedia.org/wiki/Standard_score&quot; papago-id=&quot;12-3&quot;&gt;스코어링&lt;/a&gt;을 통해 출력을 정규화합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;엄격하게 하기 위해서는 전체 데이터셋이 아닌 훈련 데이터에서 이 변환을 계산해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 분위 정규화의 경우, 훈련 세트의 60번째 백분위수에 예제가 있는 경우 0.6의 값을 얻습니다(0번째 백분위수가 -0.5이고 100번째 백분위수가 +0.5가 되도록 분위 정규화된 값을 0.5만큼 낮출 수도 있습니다).&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;탈락률을 높이거나 가중치에 L1 및 L2 패널티를 추가하여 정규화를 추가합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;L1 정규화는 피쳐 선택과 유사하며 피쳐 수를 5개로 줄이면 성능이 좋다고 했으므로 L1도 마찬가지입니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래도 도움이 되지 않으면 네트워크 크기를 줄입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;성능을 해칠 수 있기 때문에 이 방법이 항상 최선의 방법은 아니지만, 사용자의 경우 입력 특징(35)에 비해 많은 수의 1층 뉴런(1024)을 가지고 있으므로 도움이 될 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;배치 크기를 32에서 128로 늘리면 상당히 표준적이며 최적화의 안정성을 높일 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1&quot;에 의한 답은 꽤 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 모든 수정은 직접적인 것이라기 보다는 간접적으로 문제를 해결하는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래디언트 클리핑을 사용하는 것이 좋습니다. 그래디언트 클리핑은 특정 값 이상의 그래디언트 클리핑을 사용하는 것이 좋습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;clipnorm=1&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(norm이 1 이상인 모든 그래디언트를 간단히 잘라내려면 https://keras.io/optimizers/) 을 참조하십시오.&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;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;다 해봤는데도 NAN이 나왔어요.&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;a href=&quot;https://github.com/fchollet/keras/issues/2134&quot; rel=&quot;noreferrer&quot; papago-id=&quot;20-1&quot;&gt;https://github.com/fchollet/keras/issues/2134&lt;/a&gt; .&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;필자는 저자의 요약을 다음과 같이 인용했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나중에 이런 문제가 발생할 수 있는 다른 사람들을 위해 보관할 수 있도록 이 점을 지적하고 싶었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;훈련 과정에 너무 많이 들어간 후에 갑자기 나노를 반납하는 분실 기능을 보게 되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 relus, optimizer, loss 함수, relus에 따라 저의 탈락 여부, 제 네트워크의 크기와 네트워크의 모양을 확인했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 아직도 상실감을 느끼고 있었고 결국에는 낭자로 변했고 저는 꽤 좌절하고 있었습니다.&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그때 저는 생각이 났습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 잘못 입력한 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;알고 보니 제가 CNN에 넘기고 있던 이미지 중 하나는 0의 이미지에 불과했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;평균을 차감하고 std 편차로 정규화하여 nan's뿐인 예제 행렬을 만들었을 때 이 경우를 확인하지 않았습니다.&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;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;&lt;strong papago-id=&quot;23-1&quot;&gt;저의 경우&lt;/strong&gt; 밀도 추정의 로그 값을 입력으로 사용합니다&lt;strong papago-id=&quot;23-1&quot;&gt;.&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;절대값은 매우 클 수 있으며, 이로 인해 몇 단계의 그라디언트 후 NaN이 발생할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 인풋 체크가 필요하다고 생각합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫째, 입력에 &lt;strong papago-id=&quot;23-5&quot;&gt;-inf 또는&lt;/strong&gt; 일부 극단적으로 큰 절대값의 숫자가 &lt;strong papago-id=&quot;23-3&quot;&gt;포함&lt;/strong&gt;되어 있지 &lt;strong papago-id=&quot;23-3&quot;&gt;않은지&lt;/strong&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;저는 LSTM을 사용하는 것과 같은 문제에 직면했습니다. 문제는 표준화 후에 제 데이터에 약간의 nan 값이 있다는 것입니다. 따라서 표준화 후에 입력 모델 데이터를 확인해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;print(np.any(np.isnan(X_test)))
print(np.any(np.isnan(y_test)))
&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;이와 같이 Std에 작은 값(0.000001)을 더하면 이를 해결할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;def standardize(train, test):


    mean = np.mean(train, axis=0)
    std = np.std(train, axis=0)+0.000001

    X_train = (train - mean) / std
    X_test = (test - mean) /std
    return X_train, X_test
&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;https://github.com/keras-team/keras/issues/2134&quot; rel=&quot;noreferrer&quot; papago-id=&quot;26-1&quot;&gt;Github&lt;/a&gt; 토론에서 언급된 다양한 솔루션을 요약하면 물론 특정 상황에 따라 달라질 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;가중치에 l1 또는 l2 패널티를 추가하기 위해 정규화를 추가합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면 더 작은 l2 reg. 즉 l2(0.001)를 시도하거나 이미 있는 경우 제거합니다.&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;font class=&quot;papago-parent&quot;&gt;예를 들어 Keras에서는 clipnorm=1을 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 clipvalue=1.을(를) 최적화 도구의 매개 변수로 지정합니다.&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;입력의 유효성을 확인합니다(NaN이 없거나 0인 경우도 있음).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, df는 ().니가 아닙니다.&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;Optimizer를 다루기 쉬운 Adam으로 교체합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;때로는 sgd를 rmsprop로 교체하는 것도 도움이 될 것입니다.&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;기울기 폭발을 방지하기 위해 규칙화가 심한 RMS Propop을 사용합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터를 정규화하거나 정규화 과정에서 잘못된 값이 있는지 검사해 보십시오.&lt;/font&gt;&lt;/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;최적화의 안정성을 높이기 위해 배치 크기(예: 32에서 64 또는 128)를 늘립니다.&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;/ul&gt;&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 비슷한 문제에 직면했고, 이것이 제가 실행하게 된 방법입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 활성화를 LeakyRe로 변경하는 것이 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;류나 탄을 사용하는 대신에 LU.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 이유는 계층 내의 많은 노드가 0의 활성화를 가지고 있고, 역방향 전파는 기울기도 0이기 때문에 이러한 노드에 대한 가중치를 업데이트하지 않기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제는 dying ReLU 문제라고도 합니다(자세한 내용은 여기 https://datascience.stackexchange.com/questions/5706/what-is-the-dying-relu-problem-in-neural-networks) 에서 확인할 수 있습니다).&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;이를 위해서는 LeakyRe를 가져올 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 사용하여 LU 활성화:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from keras.layers.advanced_activations import LeakyReLU
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 계층에 통합할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;model.add(Dense(800,input_shape=(num_inputs,)))
model.add(LeakyReLU(alpha=0.1))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 출력 피쳐(예측하려는 연속형 변수)가 불균형 데이터 집합이고 0이 너무 많을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제를 해결하는 한 가지 방법은 스무딩(smoothing)을 사용하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 열에 있는 모든 값의 분자에 1을 더하고 이 열의 각 값을 1/(이 열에 있는 모든 값의 평균)으로 나눔으로써 이 작업을 수행할 수 있습니다.&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;이렇게 하면 기본적으로 모든 값이 0에서 0보다 큰 값으로 이동합니다(이 값은 여전히 매우 작을 수 있음).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 곡선이 0을 예측하고 손실을 최소화하는 것을 방지합니다(결국 NaN이 됩니다).&lt;/font&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;저도 같은 문제가 있었습니다. 다변량 회귀 문제에 Keras를 사용하고 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나중에 알게 된 사실은 데이터 세트의 일부 값이 nan이고 그것이 nan 손실로 이어졌다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령을 사용했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;df=df.dropna()&lt;/code&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;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이 페이지에 있는 모든 제안을 시도해 보았지만 아무 소용이 없었습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;팬더와 함께 csv 파일을 가져온 다음&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;keras Tokenizer&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;일부 CSV 파일이 nan으로 이어지는 것을 발견한 후, 우리는 갑자기 파일의 인코딩을 보고 &lt;strong papago-id=&quot;8-1&quot;&gt;ASCII&lt;/strong&gt; 파일이 keras와 함께 작동하지 않음을 깨닫고 다음으로 이어졌습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;nan&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;0.0000e+00&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;utf-8 파일과 utf-16 파일&lt;/strong&gt;은 잘 &lt;strong papago-id=&quot;10-1&quot;&gt;작동&lt;/strong&gt;하고 &lt;strong papago-id=&quot;10-1&quot;&gt;&lt;em papago-id=&quot;10-1-1&quot;&gt;있었습니다&lt;/em&gt;&lt;/strong&gt;!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;돌파구.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;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;nan&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;file -i {input}&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;(linux) 또는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;file -I {input}&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;(osx) 파일 형식을 검색합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ISO-8859-1&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;us-ascii&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;utf-8&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;utf-16le&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해 본, 나는 가 있을 &lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 후자를 시도해 본 적은 없지만 저는 그것이 효과가 있을 것이라고 생각합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 매우 좌절한 누군가에게 도움이 되기를 바랍니다!&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;훈련 시작과 동시에 첫 번째 시대에 난으로서 손실을 입고 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;입력 데이터에서 NAS를 제거하는 것만큼 간단한 솔루션이 효과적이었습니다(df.dropna()).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 비슷한 문제를 겪는 사람에게 도움이 되었으면 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p&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;저는 keras LSTM 레이어에 대한 RNN에 동일한 문제가 있어서 위에서 각각의 솔루션을 시도했습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미 데이터 크기를 조정했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sklearn.preprocessing.MinMaxScaler&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;NaN&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스케일링 후 내 데이터의 값.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;LeakyRelU를 사용하거나 학습률을 변경하는 것과 같은 솔루션은 도움이 되지 않았습니다.&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;MinMaxScaler&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;StandardScaler&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 나에게는 아무것도 없었음에도&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NaN&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;/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&gt;&lt;/font&gt;&lt;code&gt;sigmoid&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 출력 레이어에 활성화&lt;/font&gt;&lt;/font&gt;&lt;code&gt;softmax&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(새로운 네트워크는 다중 계층 분류에 관한 것이었습니다.)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 케라를 사용하는데 비슷한 문제가 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 번째 배치가 입력된 후 손실이 NAN으로 변경되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이렇게 하려고 했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;softmax를 출력 밀집 계층의 활성화로 사용&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;입력에서 드랍난&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;입력 정규화&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;75&quot; papago-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 start=&quot;4&quot;&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;/li&gt; 
&lt;/ol&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;NAN 값이 있는지 데이터를 확인해 보십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NAN 값을 제거하면 문제가 해결됩니다.&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;교육 데이터 항목 중 하나에 nan이 포함되어 있을 때 이 문제가 발생했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;80&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로그 손실, MAE 등이 모두 NA인 것과 비슷한 문제가 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터를 조사해보니 NA의 기능이 거의 없었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 NA의 것을 대략적인 값으로 돌렸고 문제를 해결할 수 있었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;81&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 CNN과 같은 문제가 있었는데, 다른 것들과 마찬가지로 학습률 감소, 열차 데이터에서의 무효성 제거, 데이터 정규화, 드롭아웃 계층 추가 등 위의 모든 해결책을 시도했지만 난 문제를 해결할 수 없었고, 시그모이드에서 소프트맥스로 분류기(마지막) 계층에서 변경 활성화 기능을 시도했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;됐습니다! 마지막 레이어의 활성화 기능을 소프트맥스로 변경해보세요!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;82&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;바운딩 박스 리저버를 만들었을 때 저는 같은 것을 얻었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 신경망은 당신 것보다 층이 더 컸습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;탈락값을 높여서 적합한 결과를 얻었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;83&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나의 분류망을 위해 NaN을 얻는 중이었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;누군가에게 도움이 될 수도 있기 때문에 여기에 대답하는 것.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;84&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실수를 저질렀습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;85&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;교육 레이블의 수업 수는 5개, 즉 0개에서 4개였습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;86&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막으로 밀도가 높은 분류 계층에서는 4개의 노드가 있었는데, 이는 4개의 클래스를 의미합니다.&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;마지막 네트워크 계층의 노드 수를 5개로 변경하면 문제가 해결되었습니다.&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;비슷한 문제가 있어서 Sigmoid에서 Softmax로, RelU에서 LeakyRelU로 활성화를 변경해보았는데 문제가 해결되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 저는 우선 입력에 NaN이 없고 학습률을 낮추려고 노력하는 한, 실행 가능한 해결책은 활동을 가지고 노는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;89&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 상황:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Train Loss: nan, Train Accuracy: 0.0, Validation Loss: nan, Validation Accuracy: 0.0
&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 class=&quot;papago-parent&quot;&gt;나중에 나는 그것이 내 꼬리표 때문이라는 것을 알았습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;1, 2, 3, 4&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;0으로 시작하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 라벨을 다시 붙였어요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0, 1, 2, 3&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;1, 2, 3, 4&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 class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-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;94&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 대답이 도움이 되기를 바랍니다!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;95&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;케라에서 클래스 레이블은 0부터 시작합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 클래스가 7개인 경우, 0부터 6까지 레이블링을 시작하고 (softmax 활성화 함수가 있는) 마지막 조밀 레이어에 단위=7을 공급합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 데이터에 1부터 7까지 레이블을 지정해야 하는 경우, 이 경우 (마지막 조밀 레이어에서) units=8을 설정해야 합니다.&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;nan&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;p papago-id=&quot;98&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그건 그렇고, 그것은 &lt;strong papago-id=&quot;98-1&quot;&gt;폭발&lt;/strong&gt;하지 않는 &lt;strong papago-id=&quot;98-1&quot;&gt;죽어가는&lt;/strong&gt; 기울기인 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;99&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;뉴런은 그 입력이 모든 트레이닝 인스턴스에 대해 부정적일 때 사망합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;100&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/65964472/how-can-i-get-rid-of-nan-on-the-predictions-and-loss-lstm-with-keras?noredirect=1&amp;amp;lq=1&quot; papago-id=&quot;100-0&quot;&gt;여기&lt;/a&gt; 'adam' 옵티마이저가 NaNs에 대항해서 도움을 줬습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 상황을 고려할 때, &lt;strong papago-id=&quot;100-2&quot;&gt;데이터셋&lt;/strong&gt; &amp;amp; &lt;strong papago-id=&quot;100-4&quot;&gt;loss&lt;/strong&gt;= 'squared_mean_error'의 크기를 조정한 적이 있습니다(사용자의 경우와 다르게).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;model.compile(optimizer = 'adam', loss = keras.losses.mean_squared_error, metrics=keras.metrics.mean_absolute_error)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;101&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 오류는 데이터에 다음과 같은 문제가 있을 때 발생할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;102&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;입력에 NaN, 무한대 또는 dtype('float64')에 대해 너무 큰 값이 포함되어 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 다음과 같은 NaN 값을 제거하여 해결할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;`df = df.dropna()`
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 그 밖의 것&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;fillna()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방법들&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;105&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;105-0&quot;&gt;참고&lt;/strong&gt;: 이 방법은 팬더의 데이터 프레임에만 적용됩니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;106&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;nan 값이 포함된 행을 제거하거나 데이터셋 또는 데이터프레임에서 nan 값을 일부 값으로 바꿉니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 오류를 해결할 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;107&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 똑같은 문제가 생겼어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;회귀 분석을 위해 케라를 성공적으로 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;107-1&quot;&gt;모든 데이터&lt;/strong&gt;를 내 문제를 해결한 &lt;strong papago-id=&quot;107-1&quot;&gt;반올림 숫자로 변환&lt;/strong&gt;합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;107-3&quot;&gt;23.43 ~ 23&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;108&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 같은 문제가 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터를 조사해보니 데이터 획득 중 오류가 발생했음을 알 수 있었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;109&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/37232782/nan-loss-when-training-regression-network&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Python</category>
      <author>codeshow</author>
      <guid isPermaLink="true">https://codeshow.tistory.com/791</guid>
      <comments>https://codeshow.tistory.com/791#entry791comment</comments>
      <pubDate>Tue, 24 Oct 2023 21:38:01 +0900</pubDate>
    </item>
  </channel>
</rss>