<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>starjava</title>
    <link>https://starjava.tistory.com/</link>
    <description>각종 프로그래밍 정보를 다루는 블로그입니다.</description>
    <language>ko</language>
    <pubDate>Sat, 11 Apr 2026 22:57:31 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>starjava</managingEditor>
    <item>
      <title>jQuery로 모든 체크박스를 선택하는 방법은?</title>
      <link>https://starjava.tistory.com/750</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;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 selectors에 대한 도움이 필요합니다.&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-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;form&amp;gt;
  &amp;lt;table&amp;gt;
    &amp;lt;tr&amp;gt;
      &amp;lt;td&amp;gt;&amp;lt;input type=&quot;checkbox&quot; id=&quot;select_all&quot; /&amp;gt;&amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;
      &amp;lt;td&amp;gt;&amp;lt;input type=&quot;checkbox&quot; name=&quot;select[]&quot; /&amp;gt;&amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;
      &amp;lt;td&amp;gt;&amp;lt;input type=&quot;checkbox&quot; name=&quot;select[]&quot; /&amp;gt;&amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;
      &amp;lt;td&amp;gt;&amp;lt;input type=&quot;checkbox&quot; name=&quot;select[]&quot; /&amp;gt;&amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
  &amp;lt;/table&amp;gt;
&amp;lt;/form&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;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 제외한 모든 확인란을 가져오는 방법&lt;/font&gt;&lt;/font&gt;&lt;code&gt;#select_all&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;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자의 경우에 효과가 있어야 할 보다 완벽한 예:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-js lang-js prettyprint-override&quot;&gt;&lt;code&gt;$('#select_all').change(function() {
  var checkboxes = $(this).closest('form').find(':checkbox');
  checkboxes.prop('checked', $(this).is(':checked'));
});&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;form&amp;gt;
  &amp;lt;table&amp;gt;
    &amp;lt;tr&amp;gt;
      &amp;lt;td&amp;gt;&amp;lt;input type=&quot;checkbox&quot; id=&quot;select_all&quot; /&amp;gt;&amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;
      &amp;lt;td&amp;gt;&amp;lt;input type=&quot;checkbox&quot; name=&quot;select[]&quot; /&amp;gt;&amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;
      &amp;lt;td&amp;gt;&amp;lt;input type=&quot;checkbox&quot; name=&quot;select[]&quot; /&amp;gt;&amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;
      &amp;lt;td&amp;gt;&amp;lt;input type=&quot;checkbox&quot; name=&quot;select[]&quot; /&amp;gt;&amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
  &amp;lt;/table&amp;gt;
&amp;lt;/form&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;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언제.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;#select_all&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;확인란을 클릭하면 확인란의 상태가 선택되고 현재 양식의 모든 확인란이 동일한 상태로 설정됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주의할 점은 당신이 제외시킬 필요가 없다는 것은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;#select_all&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;#select_all&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;/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;$('#select_all').change(function() {
  var checkboxes = $(this).closest('form').find(':checkbox').not($(this));
  checkboxes.prop('checked', $(this).is(':checked'));
});&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;form&amp;gt;
  &amp;lt;table&amp;gt;
    &amp;lt;tr&amp;gt;
      &amp;lt;td&amp;gt;&amp;lt;input type=&quot;checkbox&quot; id=&quot;select_all&quot; /&amp;gt;&amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;
      &amp;lt;td&amp;gt;&amp;lt;input type=&quot;checkbox&quot; name=&quot;select[]&quot; /&amp;gt;&amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;
      &amp;lt;td&amp;gt;&amp;lt;input type=&quot;checkbox&quot; name=&quot;select[]&quot; /&amp;gt;&amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;
      &amp;lt;td&amp;gt;&amp;lt;input type=&quot;checkbox&quot; name=&quot;select[]&quot; /&amp;gt;&amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
  &amp;lt;/table&amp;gt;
&amp;lt;/form&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;/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;$('#select_all').click(function() {
  var c = this.checked;
  $(':checkbox').prop('checked', c);
});&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;script src=&quot;https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;form&amp;gt;
  &amp;lt;table&amp;gt;
    &amp;lt;tr&amp;gt;
      &amp;lt;td&amp;gt;&amp;lt;input type=&quot;checkbox&quot; id=&quot;select_all&quot; /&amp;gt;&amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;
      &amp;lt;td&amp;gt;&amp;lt;input type=&quot;checkbox&quot; name=&quot;select[]&quot; /&amp;gt;&amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;
      &amp;lt;td&amp;gt;&amp;lt;input type=&quot;checkbox&quot; name=&quot;select[]&quot; /&amp;gt;&amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;
      &amp;lt;td&amp;gt;&amp;lt;input type=&quot;checkbox&quot; name=&quot;select[]&quot; /&amp;gt;&amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
  &amp;lt;/table&amp;gt;
&amp;lt;/form&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;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ttr() 메서드 때문에 Jquery 1.9+에서 top answer가 작동하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 prop() 사용:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(function() {
    $('#select_all').change(function(){
        var checkboxes = $(this).closest('form').find(':checkbox');
        if($(this).prop('checked')) {
          checkboxes.prop('checked', true);
        } else {
          checkboxes.prop('checked', false);
        }
    });
});
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;$(&quot;form input[type='checkbox']&quot;).attr( &quot;checked&quot; , true );
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 당신은 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://api.jquery.com/checkbox-selector/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;: 확인란 선택기&lt;/font&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;form input:checkbox&quot;).attr( &quot;checked&quot; , true );
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML을 다시 작성하고 메인 확인란에 클릭 핸들러를 제공했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(function(){
    $(&quot;#select_all&quot;).click( function() {
        $(&quot;#frm1 input[type='checkbox'].child&quot;).attr( &quot;checked&quot;, $(this).attr(&quot;checked&quot; ) );
    });
});

&amp;lt;form id=&quot;frm1&quot;&amp;gt;
    &amp;lt;table&amp;gt;
        &amp;lt;tr&amp;gt;
            &amp;lt;td&amp;gt;
                &amp;lt;input type=&quot;checkbox&quot; id=&quot;select_all&quot; /&amp;gt;
            &amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
            &amp;lt;td&amp;gt;
                &amp;lt;input type=&quot;checkbox&quot; name=&quot;select[]&quot; class=&quot;child&quot; /&amp;gt;
            &amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
            &amp;lt;td&amp;gt;
                &amp;lt;input type=&quot;checkbox&quot; name=&quot;select[]&quot; class=&quot;child&quot; /&amp;gt;
            &amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
            &amp;lt;td&amp;gt;
                &amp;lt;input type=&quot;checkbox&quot; name=&quot;select[]&quot; class=&quot;child&quot; /&amp;gt;
            &amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
    &amp;lt;/table&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt; $(function() {  
$('#select_all').click(function() {
    var checkboxes = $(this).closest('form').find(':checkbox');
    if($(this).is(':checked')) {
        checkboxes.attr('checked', 'checked');
    } else {
        checkboxes.removeAttr('checked');
    }
});
    });
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt; $(document).ready(function(){
    $(&quot;#select_all&quot;).click(function(){
      var checked_status = this.checked;
      $(&quot;input[name='select[]']&quot;).each(function(){
        this.checked = checked_status;
      });
    });
  });
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;jQuery(document).ready(function () {
        jQuery('.select-all').on('change', function () {
            if (jQuery(this).is(':checked')) {
                jQuery('input.class-name').each(function () {
                    this.checked = true;
                });
            } else {
                jQuery('input.class-name').each(function () {
                    this.checked = false;
                });
            }
        });
    });
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드는 잘 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
$(document).ready(function(){ 
$(&quot;#select_all&quot;).change(function(){
  $(&quot;.checkbox_class&quot;).prop(&quot;checked&quot;, $(this).prop(&quot;checked&quot;));
  });
});
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;class &lt;strong papago-id=&quot;16-1&quot;&gt;checkbox_class&lt;/strong&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;쉽고 간단하게 :D&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;$(&quot;#select_all&quot;).change(function () {

    $('input[type=&quot;checkbox&quot;]').prop(&quot;checked&quot;, $(this).prop(&quot;checked&quot;));

});  
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제가 발생하면 위의 답변 중 어느 것도 효과가 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 이유는 jQuery Uniform 플러그인(&lt;a href=&quot;http://keenthemes.com/preview/metronic/theme/admin_1/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;18-1&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;strong papago-id=&quot;19-1&quot;&gt;jQuery Uniform&lt;/strong&gt; 작업&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;$('#select-all').change(function() {
    var $this = $(this);
    var $checkboxes = $this.closest('form')
        .find(':checkbox');

    $checkboxes.prop('checked', $this.is(':checked'))
        .not($this)
        .change();
});
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt; 
 &lt;p&gt;&lt;em papago-id=&quot;20&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;/blockquote&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;경량이고 Uniform에 대해 즉시 지원되는 체크박스를 통해 체크박스를 제어할 플러그인을 여전히 찾고 있는 사람들을 위해&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;JS와 iCheck는 제어된 확인란 중 하나 이상이 선택 해제되면 선택 해제됩니다(물론 제어된 모든 확인란이 선택되면 선택 해제됩니다). &lt;a href=&quot;https://github.com/simivar/jquery-checkall&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;21-1&quot;&gt;jQuery checkAll 플러그인&lt;/a&gt;을 만들었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://simivar.github.io/jquery-checkall/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;22-1&quot;&gt;설명서 페이지&lt;/a&gt;의 예시를 자유롭게 확인하세요.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 질문 예제에서는 다음 작업만 수행하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$( '#select_all' ).checkall({
    target: 'input[type=&quot;checkbox&quot;][name=&quot;select&quot;]'
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;분명하고 간단하지 않습니까?&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;$('.checkall').change(function() {
    var checkboxes = $(this).closest('table').find('td').find(':checkbox');
    if($(this).is(':checked')) {
        checkboxes.attr('checked', 'checked');
    } else {
        checkboxes.removeAttr('checked');
    }
});
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;  $(&quot;#select_all&quot;).live(&quot;click&quot;, function(){
            $(&quot;input&quot;).prop(&quot;checked&quot;, $(this).prop(&quot;checked&quot;));
    }
  });
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이제 이런 스타일에 치우쳤어요.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;양식 이름을 지정하고 select_all 상자에 'onClick'을 추가했습니다.&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;저는 또한 누군가 클릭할 때 인터넷이 폭발하지 않도록 jquery selector에서 'select_all' 확인란을 제외했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; function toggleSelect(formname) {
   // select the form with the name 'formname', 
   // then all the checkboxes named 'select[]'
   // then 'click' them
   $('form[name='+formname+'] :checkbox[name=&quot;select[]&quot;]').click()
 }
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;pre&gt;&lt;code&gt; &amp;lt;form name=&quot;myform&quot;&amp;gt;
   &amp;lt;tr&amp;gt;
        &amp;lt;td&amp;gt;&amp;lt;input type=&quot;checkbox&quot; id=&quot;select_all&quot;    
                   onClick=&quot;toggleSelect('myform')&quot; /&amp;gt;
        &amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;
        &amp;lt;td&amp;gt;&amp;lt;input type=&quot;checkbox&quot; name=&quot;select[]&quot;/&amp;gt;&amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;
        &amp;lt;td&amp;gt;&amp;lt;input type=&quot;checkbox&quot; name=&quot;select[]&quot;/&amp;gt;&amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
    &amp;lt;tr&amp;gt;
        &amp;lt;td&amp;gt;&amp;lt;input type=&quot;checkbox&quot; name=&quot;select[]&quot;/&amp;gt;&amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&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;토글로 사용할 체크박스/요소를 제외한 페이지의 모든 체크박스를 선택하는 기본 jQuery 플러그인은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(function($) {
    // Checkbox toggle function for selecting all checkboxes on the page
    $.fn.toggleCheckboxes = function() {
        // Get all checkbox elements
        checkboxes = $(':checkbox').not(this);

        // Check if the checkboxes are checked/unchecked and if so uncheck/check them
        if(this.is(':checked')) {
            checkboxes.prop('checked', true);
        } else {
            checkboxes.prop('checked', false);
        }
    }
}(jQuery));
&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;// Check all checkboxes
$('.check-all').change(function() {
    $(this).toggleCheckboxes();
});
&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/2228382/how-to-select-all-checkboxes-with-jquery&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jquery</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/750</guid>
      <comments>https://starjava.tistory.com/750#entry750comment</comments>
      <pubDate>Sun, 29 Oct 2023 18:57:19 +0900</pubDate>
    </item>
    <item>
      <title>EPLus를 사용하여 .xls 파일을 읽으려고 할 때 오류가 발생했습니다.</title>
      <link>https://starjava.tistory.com/749</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;EPLus를 사용하여 .xls 파일을 읽으려고 할 때 오류가 발생했습니다.&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;다음 코드는 .xlsx에 대해 정상적으로 작동하지만 .xls에는 작동하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 오류 메시지를 받았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;패키지를 열 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;패키지는 OLE 복합 문서입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;암호화된 패키지일 경우 암호를 입력하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;3&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;string filepath = txtBrowse.Text;

FileStream stream = System.IO.File.Open(filepath, FileMode.Open, FileAccess.ReadWrite);
//1. Reading from a binary Excel file ('97-2003 format; *.xls)
IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);

FileInfo newFile = new FileInfo(filepath);

using (ExcelPackage package = new ExcelPackage(newFile))
{
    string sheetName = System.DateTime.Now.ToShortDateString();

    foreach (OfficeOpenXml.ExcelWorksheet sheet in package.Workbook.Worksheets)
    {
        // Check the name of the current sheet
        if (sheet.Name == sheetName)
        {
            package.Workbook.Worksheets.Delete(sheetName);
            break; // Exit the loop now
        }
    }

    ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(System.DateTime.Now.ToShortDateString());
}
&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;EPLus는 XLS 포맷과 함께 작동하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;XLSX만.&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;저는 Tony의 답변 https://stackoverflow.com/a/18904633/306515 을 성공적으로 사용하고 Microsoft를 사용하여 간단히 변환했습니다.&lt;/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;Excel 그리고 여전히 eplus를 사용할 수 있습니다.&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/26152215/error-when-trying-to-read-an-xls-file-using-epplus&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Excel</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/749</guid>
      <comments>https://starjava.tistory.com/749#entry749comment</comments>
      <pubDate>Sun, 29 Oct 2023 18:57:08 +0900</pubDate>
    </item>
    <item>
      <title>CSS에서 한 입력 자리 표시자에 두 가지 다른 글꼴 크기를 가질 수 있습니까?</title>
      <link>https://starjava.tistory.com/748</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS에서 한 입력 자리 표시자에 두 가지 다른 글꼴 크기를 가질 수 있습니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS에서 한 입력 자리 표시자에 서로 다른 두 가지 글꼴 크기를 가질 수 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 디자인과 같은 것:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반 html에서는 span,:before,&amp;amp;:after 등으로 만들 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 입력으로 이 모든 것을 만들 수는 없기 때문에 가능한지 알고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동일한 자리 표시자에 다른 스타일을 적용할 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 사용자가 수행할 수 있는 작업은 의사 요소 또는 자리 표시자로 동작하는 디바를 사용하고 입력이 포커스될 때 숨김/표시하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 통해 다음과 같은 이점이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&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;$(&quot;#input&quot;).keyup(function() {
  if ($(this).val().length) {
    $(this).next('.placeholder').hide();
  } else {
    $(this).next('.placeholder').show();
  }
});
$(&quot;.placeholder&quot;).click(function() {
  $(this).prev().focus();
});&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;.placeholder {
  position: absolute;
  margin: 7px 8px;
  color: #A3A3A3;
  cursor: auto;
  font-size: 14px;
  top: 7px;
}
.small {
  font-size: 10px;
}
input {
  padding: 5px;
  font-size: 11pt;
  position: relative;
}&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;input id=&quot;input&quot; type=&quot;text&quot; /&amp;gt;
&amp;lt;div class=&quot;placeholder&quot;&amp;gt;Email &amp;lt;span class=&quot;small&quot;&amp;gt;address&amp;lt;/span&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;9-0&quot;&gt;CSS&lt;/strong&gt; 전용 솔루션&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;snippet&quot; data-lang=&quot;js&quot; data-hide=&quot;false&quot; data-console=&quot;true&quot; data-babel=&quot;false&quot;&gt; 
 &lt;div class=&quot;snippet-code&quot;&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;.input-field {
  position: relative;
  display: inline-block;
}

.input-field &amp;gt; label {
  position: absolute;
  left: 0.5em;
  top: 50%;
  margin-top: -0.5em;
  opacity: 1;
  display: none;
}

.input-field &amp;gt; input[type=text]:placeholder-shown + label {
  display: block;
}

.input-field &amp;gt; label &amp;gt; span {
  letter-spacing: -2px;
}

.first-letter {
  color: red;
  font-size:100%;
}

.second-letter {
  color: blue;
  font-size:50%;
}

.third-letter {
  color: orange;
  font-size:75%;
}

.fourth-letter {
  color: green;
  font-size:100%;
}

.fifth-letter {
  color: yellow;
  font-size: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;div class=&quot;input-field&quot;&amp;gt;
  &amp;lt;input id=&quot;input-text-field&quot; type=&quot;text&quot; placeholder=&quot; &quot;&amp;gt;&amp;lt;/input&amp;gt;
  &amp;lt;label for=&quot;input-text-field&quot;&amp;gt;
    &amp;lt;span class=&quot;first-letter&quot;&amp;gt;H&amp;lt;/span&amp;gt;
    &amp;lt;span class=&quot;second-letter&quot;&amp;gt;E&amp;lt;/span&amp;gt;
    &amp;lt;span class=&quot;third-letter&quot;&amp;gt;L&amp;lt;/span&amp;gt;
    &amp;lt;span class=&quot;fourth-letter&quot;&amp;gt;L&amp;lt;/span&amp;gt;
    &amp;lt;span class=&quot;fifth-letter&quot;&amp;gt;O&amp;lt;/span&amp;gt;
  &amp;lt;/label&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;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;JS해&lt;/strong&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;    addListenerMulti(document.getElementById('input-text-field'), 'focus keyup', blurme);

    function blurme(e) {
      var element = e.currentTarget;
      element.classList[(element.value.length !== 0) ? &quot;add&quot; : &quot;remove&quot;]('hide-placeholder');
    }

    function addListenerMulti(el, s, fn) {
      s.split(&quot; &quot;).forEach(function(e) {
        return el.addEventListener(e, fn, false)
      });
    }&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;    .input-field {
      position: relative;
      display: inline-block;
    }
    .input-field &amp;gt; label {
      position: absolute;
      left: 0.5em;
      top: 50%;
      margin-top: -0.5em;
      
    }
    .hide-placeholder + label {
      display: none;
    }
    .input-field &amp;gt; label &amp;gt; span {
      letter-spacing: -2px;
    }
    .first-letter {
      color: red;
      font-size:100%;
    }
    .second-letter {
      color: blue;
      font-size:100%;
    }
    .third-letter {
      color: orange;
      font-size:100%;
    }
    .fourth-letter {
      color: green;
      font-size:50%;
    }
    .fifth-letter {
      color: black;
      font-size:50%;
    }&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;    &amp;lt;div class=&quot;input-field&quot;&amp;gt;
      &amp;lt;input id=&quot;input-text-field&quot; type=&quot;text&quot;&amp;gt;
      &amp;lt;label for=&quot;input-text-field&quot;&amp;gt;
        &amp;lt;span class=&quot;first-letter&quot;&amp;gt;H&amp;lt;/span&amp;gt;
        &amp;lt;span class=&quot;second-letter&quot;&amp;gt;E&amp;lt;/span&amp;gt;
        &amp;lt;span class=&quot;third-letter&quot;&amp;gt;L&amp;lt;/span&amp;gt;
        &amp;lt;span class=&quot;fourth-letter&quot;&amp;gt;L&amp;lt;/span&amp;gt;
        &amp;lt;span class=&quot;fifth-letter&quot;&amp;gt;O&amp;lt;/span&amp;gt;
      &amp;lt;/label&amp;gt;
    &amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;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/41361294/it-is-possible-to-have-2-different-font-sizes-in-one-input-placeholder-in-css&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>WordPress</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/748</guid>
      <comments>https://starjava.tistory.com/748#entry748comment</comments>
      <pubDate>Sun, 29 Oct 2023 18:57:02 +0900</pubDate>
    </item>
    <item>
      <title>jQuery가 ID에 .(주기)가 있는 요소를 선택하도록 하려면 어떻게 해야 합니까?</title>
      <link>https://starjava.tistory.com/747</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery가 ID에 .(주기)가 있는 요소를 선택하도록 하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 클래스와 컨트롤러 작업 방법이 주어집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public School
{
  public Int32 ID { get; set; }
  publig String Name { get; set; }
  public Address Address { get; set; }
}

public class Address
{
  public string Street1 { get; set; }
  public string City { get; set; }
  public String ZipCode { get; set; }
  public String State { get; set; }
  public String Country { get; set; }
}

[Authorize(Roles = &quot;SchoolEditor&quot;)]
[AcceptVerbs(HttpVerbs.Post)]
public SchoolResponse Edit(Int32 id, FormCollection form)
{
  School school = GetSchoolFromRepository(id);

  UpdateModel(school, form);

  return new SchoolResponse() { School = school };
}
&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;&amp;lt;form method=&quot;post&quot;&amp;gt;
  School: &amp;lt;%= Html.TextBox(&quot;Name&quot;) %&amp;gt;&amp;lt;br /&amp;gt;
  Street: &amp;lt;%= Html.TextBox(&quot;Address.Street&quot;) %&amp;gt;&amp;lt;br /&amp;gt;
  City:  &amp;lt;%= Html.TextBox(&quot;Address.City&quot;) %&amp;gt;&amp;lt;br /&amp;gt;
  Zip Code: &amp;lt;%= Html.TextBox(&quot;Address.ZipCode&quot;) %&amp;gt;&amp;lt;br /&amp;gt;
  Sate: &amp;lt;select id=&quot;Address.State&quot;&amp;gt;&amp;lt;/select&amp;gt;&amp;lt;br /&amp;gt;
  Country: &amp;lt;select id=&quot;Address.Country&quot;&amp;gt;&amp;lt;/select&amp;gt;&amp;lt;br /&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;학교 인스턴스와 학교 주소 구성원 모두 업데이트 할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거 꽤 좋네요!&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ASP 감사합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET MVC팀!&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;그러나 jQuery를 사용하여 드롭다운 목록을 선택하면 사전에 작성할 수 있습니까?&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;제가 지금까지 가지고 있는 것은 다음과 같고, 셀렉터가 ID와 일치하지 않는 것 같아 작동하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(function() {
  $.getJSON(&quot;/Location/GetCountryList&quot;, null, function(data) {
    $(&quot;#Address.Country&quot;).fillSelect(data);
  });
  $(&quot;#Address.Country&quot;).change(function() {
    $.getJSON(&quot;/Location/GetRegionsForCountry&quot;, { country: $(this).val() }, function(data) {
      $(&quot;#Address.State&quot;).fillSelect(data);
    });
  });
});
&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;a href=&quot;http://groups.google.com/group/jquery-en/browse_thread/thread/ba072168939b245a?pli=1&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6-1&quot;&gt;Google 그룹&lt;/a&gt;에서:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 특수 문자 앞에 백슬래시 두 개를 사용합니다.&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 셀렉터의 백슬래시는 다음 문자를 비웁니다.&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;/blockquote&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서, 당신이 보고 있는 것은&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(function() {
  $.getJSON(&quot;/Location/GetCountryList&quot;, null, function(data) {
    $(&quot;#Address\\.Country&quot;).fillSelect(data);
  });
  $(&quot;#Address\\.Country&quot;).change(function() {
    $.getJSON(&quot;/Location/GetRegionsForCountry&quot;, { country: $(this).val() }, function(data) {
      $(&quot;#Address\\.State&quot;).fillSelect(data);
    });
  });
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 &lt;a href=&quot;https://learn.jquery.com/using-jquery-core/faq/how-do-i-select-an-element-by-an-id-that-has-characters-used-in-css-notation/&quot; papago-id=&quot;10-1&quot; rel=&quot;noreferrer&quot;&gt;CSS 표기에 사용되는 문자가 있는 ID로 요소를 선택하려면 어떻게&lt;/a&gt; 해야 &lt;a href=&quot;https://learn.jquery.com/using-jquery-core/faq/how-do-i-select-an-element-by-an-id-that-has-characters-used-in-css-notation/&quot; papago-id=&quot;10-1&quot; rel=&quot;noreferrer&quot;&gt;합니까?&lt;/a&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery FAQ 에서 확인할 수 있습니다.&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;ID에 공백이 있으면 jQuery id selector를 사용할 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;속성 선택기 사용:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('[id=foo bar]').show();
&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;$('div[id=foo bar]').show();
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Jquery를 위해 탈출하기:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function escapeSelector(s){
    return s.replace( /(:|\.|\[|\])/g, &quot;\\$1&quot; );
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용 예:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;e.find('option[value='+escapeSelector(val)+']')
&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://learn.jquery.com/using-jquery-core/faq/how-do-i-select-an-element-by-an-id-that-has-characters-used-in-css-notation/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;15-1&quot;&gt;여기&lt;/a&gt;에.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ASP의 릴리스 후보.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;방금 출시된 NET MVC가 이 문제를 해결했습니다. 이제 ID 속성에 대한 밑줄로 점을 바꿉니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;%= Html.TextBox(&quot;Person.FirstName&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;input type=&quot;text&quot; name=&quot;Person.FirstName&quot; id=&quot;Person_FirstName&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;자세한 내용은 14페이지부터 시작하는 릴리스 노트를 참조하십시오.&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://api.jquery.com/category/selectors/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;19-1&quot;&gt;jQuery Selectors 문서&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;!&quot;#$%&amp;amp;'()*+,./:;&amp;lt;=&amp;gt;?@[\]^`{|}~&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이름의 문자 그대로 부분으로, 두 개의 백슬래시를 사용하여 탈출해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;\\&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 예를 들어, 다음과 같은 요소가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;id=&quot;foo.bar&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;$(&quot;#foo\\.bar&quot;)&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;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단히 말해서, 접두사를 붙입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 함께&lt;/font&gt;&lt;/font&gt;&lt;code&gt;\\&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(&quot;#Address\\.Country&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1&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;.&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;/h1&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;$('#Address.Country')&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;&amp;lt;div id=&quot;Address&quot; class=&quot;Country&quot;&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&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;\\.&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 원하는 ID와 일치하는 특별한 의미가 없는 일반 텍스트로 처리됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;div id=&quot;Address.Country&quot;&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/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;!&quot;#$%&amp;amp;'()*+,./:;&amp;lt;=&amp;gt;?@[\]^`{|}~&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면 jQuery에서 선택자로서 특별한 의미를 가질 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정상적인 텍스트로 취급할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h1&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; 2인 이유&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;\\&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/h1&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;bdukes의 답변에 언급된 것처럼, 우리가 2개가 필요한 이유가 있습니다.&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;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;성격.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;\&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트에서 다음 문자를 벗어날 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트가 문자열을 해석하는 경우&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;#Address\.Country&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font 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;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 다음 &lt;em papago-id=&quot;46-1&quot;&gt;문자를 쓰레기로 가져다가&lt;/em&gt; 문자열이 전달되면 &lt;em papago-id=&quot;46-3&quot;&gt;제거&lt;/em&gt;한다는 의미로 해석합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;$()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; jQuery는 을 , jQuery로 볼 수 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;#Address.Country&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font 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;\&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;경기하러 들어옵니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 것은 자바스크립트가 두 번째 것을 리터럴(특별하지 않은) 문자로 해석하도록 알려줍니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 jQuery가 두번째를 보고 다음을 이해한다는 것을 의미합니다.&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;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자는 문자 그대로의 문자입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/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;//    Javascript, the following \ is not special.
//         | 
//         |
//         v    
$(&quot;#Address\\.Country&quot;);
//          ^ 
//          |
//          |
//      jQuery, the following . is not special.
&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;하지만 동적 이름, 즉 변수 이름을 사용하는 경우 문자를 바꿔야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변수 이름을 변경하지 않으려면 다음 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var variable=&quot;namewith.andother&quot;;    
var jqueryObj = $(document.getElementById(variable));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 당신이 당신의 잡동사니 물건을 가지고 있는 것 보다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jquery docs에서 준 해결책으로 문제를 해결했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 기능:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;//funcion to replace special chars in ID of  HTML tag

function jq(myid){


//return &quot;#&quot; + myid.replace( /(:|\.|\[|\]|,)/g, &quot;\\$1&quot; );
return myid.replace( /(:|\.|\[|\]|,)/g, &quot;\\$1&quot; );


}
&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;참고: 코드에서 ID를 다른 텍스트와 연결하기 때문에 &quot;#&quot;을 제거합니다.&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;a href=&quot;http://learn.jquery.com/using-jquery-core/faq/how-do-i-select-an-element-by-an-id-that-has-characters-used-in-css-notation/&quot; papago-id=&quot;59-1&quot; rel=&quot;nofollow&quot;&gt;Jquery Docs 특수 문자가 포함&lt;/a&gt;된 선택 &lt;a href=&quot;http://learn.jquery.com/using-jquery-core/faq/how-do-i-select-an-element-by-an-id-that-has-characters-used-in-css-notation/&quot; papago-id=&quot;59-1&quot; rel=&quot;nofollow&quot;&gt;요소&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추가 정보만 제공합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 &lt;a href=&quot;http://www.codeplex.com/aspnet/WorkItem/View.aspx?WorkItemId=2403&quot; papago-id=&quot;60-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;ASP&lt;/a&gt;를 확인합니다&lt;a href=&quot;http://www.codeplex.com/aspnet/WorkItem/View.aspx?WorkItemId=2403&quot; papago-id=&quot;60-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;.&lt;/a&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://www.codeplex.com/aspnet/WorkItem/View.aspx?WorkItemId=2403&quot; papago-id=&quot;60-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;NET MVC 이슈 #2403&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제가 해결될 때까지 html과 같은 나만의 확장 방법을 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;TextBoxFixed 등은 단순히 점을 id속성(이름속성이 아닌)에 밑줄로 대체하여 $(&quot;#Address_Street&quot;)와 같은 jquery를 사용하지만 서버에서는 Address와 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;거리.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;샘플 코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public static string TextBoxFixed(this HtmlHelper html, string name, string value)
{
    return html.TextBox(name, value, GetIdAttributeObject(name));
}

public static string TextBoxFixed(this HtmlHelper html, string name, string value, object htmlAttributes)
{
    return html.TextBox(name, value, GetIdAttributeObject(name, htmlAttributes));
}

private static IDictionary&amp;lt;string, object&amp;gt; GetIdAttributeObject(string name)
{
    Dictionary&amp;lt;string, object&amp;gt; list = new Dictionary&amp;lt;string, object&amp;gt;(1);
    list[&quot;id&quot;] = name.Replace('.', '_');
    return list;
}

private static IDictionary&amp;lt;string, object&amp;gt; GetIdAttributeObject(string name, object baseObject)
{
    Dictionary&amp;lt;string, object&amp;gt; list = new Dictionary&amp;lt;string, object&amp;gt;();
    list.LoadFrom(baseObject);
    list[&quot;id&quot;] = name.Replace('.', '_');
    return list;
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/350292/how-do-i-get-jquery-to-select-elements-with-a-period-in-their-id&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>JavaScript</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/747</guid>
      <comments>https://starjava.tistory.com/747#entry747comment</comments>
      <pubDate>Sun, 29 Oct 2023 18:56:54 +0900</pubDate>
    </item>
    <item>
      <title>C#와 유사한 자바스크립트의 포맷 번호</title>
      <link>https://starjava.tistory.com/746</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C#와 유사한 자바스크립트의 포맷 번호&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C#(또는 VB)에서 사용할 수 있는 포맷 방법과 유사하게 자바스크립트에서 숫자를 포맷하는 간단한 방법이 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(NET)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ToString(&quot;format_provider&quot;)&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;String.Format()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일반적으로.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;http://www.mredkj.com/javascript/numberFormat.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바스크립트에서 숫자 서식 지정&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://web.archive.org/web/20200221092535/http://geekswithblogs.net:80/rajeshatdotnet/archive/2008/04/05/121058.aspx&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;통화 표시 등을 위한 숫자 서식 지정.&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&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;InjQuery&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://www.decorplanit.com/plugin/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;8-0&quot;&gt;autoNumeric&lt;/a&gt;(jQuery 1.5+에 대한 로케일 지원이 있는 괜찮은 숫자 포맷터 및 입력 도우미)&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://www.asual.com/jquery/format/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;9-0&quot;&gt;jQuery Format&lt;/a&gt;(Java의 &lt;a href=&quot;https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;9-2&quot;&gt;SimpleDate&lt;/a&gt; Format 및 &lt;a href=&quot;https://docs.oracle.com/javase/7/docs/api/java/text/NumberFormat.html&quot; papago-id=&quot;9-4&quot; rel=&quot;nofollow noreferrer&quot;&gt;번호&lt;/a&gt;를 클라이언트 측에서 구현)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://docs.oracle.com/javase/7/docs/api/java/text/NumberFormat.html&quot; papago-id=&quot;9-4&quot; rel=&quot;nofollow noreferrer&quot;&gt;형식&lt;/a&gt;)&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://web.archive.org/web/20160116234619/https://code.google.com/p/jquery-numberformatter/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jquery-number formatter(로케일 지원이 있는 숫자 formatter)&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예, 자바스크립트에서 숫자를 제대로 포맷하는 방법은 분명히 있습니다. 예를 들어:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var val=2489.8237

val.toFixed(3) //returns 2489.824 (round up)
val.toFixed(2) //returns 2489.82
val.toFixed(7) //returns 2489.8237000 (padding)
&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;strong papago-id=&quot;12-1&quot;&gt;Fixed&lt;/strong&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 또 다른 기능이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;toPrecision()&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;a href=&quot;http://raovishal.blogspot.com/2012/01/number-format-in-javascript.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://raovishal.blogspot.com/2012/01/number-format-in-javascript.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열 형식의 정수에 쉼표를 추가하는 간단한 JS 기능이 있습니다.&lt;/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;function addCommas(str) {
    var parts = (str + &quot;&quot;).split(&quot;.&quot;),
        main = parts[0],
        len = main.length,
        output = &quot;&quot;,
        first = main.charAt(0),
        i;

    if (first === '-') {
        main = main.slice(1);
        len = main.length;    
    } else {
        first = &quot;&quot;;
    }
    i = len - 1;
    while(i &amp;gt;= 0) {
        output = main.charAt(i) + output;
        if ((len - i) % 3 === 0 &amp;amp;&amp;amp; i &amp;gt; 0) {
            output = &quot;,&quot; + output;
        }
        --i;
    }
    // put sign back
    output = first + output;
    // put decimal part back
    if (parts.length &amp;gt; 1) {
        output += &quot;.&quot; + parts[1];
    }
    return output;
}
&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;다음은 테스트 사례입니다. http://jsfiddle.net/jfriend00/6y57j/&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;이 이전 jsFiddle: http://jsfiddle.net/jfriend00/sMnjT/ 에서 사용되고 있는 것을 확인할 수 있습니다.&lt;/font&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;var myNumber = 3;
var myStr = &quot;&quot; + myNumber;   // &quot;3&quot;
&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;jsFiddle의 컨텍스트에서 쉼표를 카운터에 입력하려면 다음 줄을 변경해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;jTarget.text(current);
&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;jTarget.text(addCommas(current));
&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;여기서 작동하는 모습을 보실 수 있습니다: http://jsfiddle.net/jfriend00/CbjSX/&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;간단한 함수를 작성했습니다. (아직 다른 jQuery 플러그인이 필요하지 않습니다!!)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;숫자가 처음부터 시작하는 숫자가 아닌 경우 숫자를 10진수로 구분된 문자열 또는 빈 문자열로 변환합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function format(x) {
    return isNaN(x)?&quot;&quot;:x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, &quot;,&quot;);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;format(578999);&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과를 보다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;578,999&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;format(10);&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과를 보다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;10&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쉼표 대신 소수점을 사용하려면 코드의 쉼표를 소수점으로 바꾸기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설명 중 하나는 이 내용이 정수에 대해서만 작동한다고 정확하게 명시했으며, 몇 가지 작은 수정을 통해 부동 소수점에 대해서도 작동할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function format(x) {
    if(isNaN(x))return &quot;&quot;;

    n= x.toString().split('.');
    return n[0].replace(/\B(?=(\d{3})+(?!\d))/g, &quot;,&quot;)+(n.length&amp;gt;1?&quot;.&quot;+n[1]:&quot;&quot;);
}
&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;a href=&quot;https://gist.github.com/SteelyWing/85fdcbe084c332596179&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;28-1&quot;&gt;Gist&lt;/a&gt;를 사용해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;h1 papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방법 0 (RegExp)&lt;/font&gt;&lt;/h1&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://stackoverflow.com/a/14428340/1877620, 을 기준으로 하지만 소수점이 없으면 수정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;if (typeof Number.prototype.format === 'undefined') {
    Number.prototype.format = function (precision) {
        if (!isFinite(this)) {
            return this.toString();
        }

        var a = this.toFixed(precision).split('.');
        a[0] = a[0].replace(/\d(?=(\d{3})+$)/g, '$&amp;amp;,');
        return a.join('.');
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1 papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방법1&lt;/font&gt;&lt;/h1&gt; 
&lt;pre&gt;&lt;code&gt;if (typeof Number.prototype.format1 === 'undefined') {
    Number.prototype.format1 = function (precision) {
        if (!isFinite(this)) {
            return this.toString();
        }

        var a = this.toFixed(precision).split('.'),
            // skip the '-' sign
            head = Number(this &amp;lt; 0);

        // skip the digits that's before the first thousands separator 
        head += (a[0].length - head) % 3 || 3;

        a[0] = a[0].slice(0, head) + a[0].slice(head).replace(/\d{3}/g, ',$&amp;amp;');
        return a.join('.');
    };
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1 papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방법 2(배열로 분할)&lt;/font&gt;&lt;/h1&gt; 
&lt;pre&gt;&lt;code&gt;if (typeof Number.prototype.format2 === 'undefined') {
    Number.prototype.format2 = function (precision) {
        if (!isFinite(this)) {
            return this.toString();
        }

        var a = this.toFixed(precision).split('.');

        a[0] = a[0]
            .split('').reverse().join('')
            .replace(/\d{3}(?=\d)/g, '$&amp;amp;,')
            .split('').reverse().join('');

        return a.join('.');
    };
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1 papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;방법 3 (루프)&lt;/font&gt;&lt;/h1&gt; 
&lt;pre&gt;&lt;code&gt;if (typeof Number.prototype.format3 === 'undefined') {
    Number.prototype.format3 = function (precision) {
        if (!isFinite(this)) {
            return this.toString();
        }

        var a = this.toFixed(precision).split('');
        a.push('.');

        var i = a.indexOf('.') - 3;
        while (i &amp;gt; 0 &amp;amp;&amp;amp; a[i-1] !== '-') {
            a.splice(i, 0, ',');
            i -= 3;
        }

        a.pop();
        return a.join('');
    };
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1 papago-id=&quot;34&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;console.log('======== Demo ========')
var n = 0;
for (var i=1; i&amp;lt;20; i++) {
    n = (n * 10) + (i % 10)/100;
    console.log(n.format(2), (-n).format(2));
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1 papago-id=&quot;35&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;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;맞춤형 수천 구분 기호 또는 소수 구분 기호를 사용하려면 replace():&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;123456.78.format(2).replace(',', ' ').replace('.', ' ');
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1 papago-id=&quot;37&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;function assertEqual(a, b) {
    if (a !== b) {
        throw a + ' !== ' + b;
    }
}

function test(format_function) {
    console.log(format_function);
    assertEqual('NaN', format_function.call(NaN, 0))
    assertEqual('Infinity', format_function.call(Infinity, 0))
    assertEqual('-Infinity', format_function.call(-Infinity, 0))

    assertEqual('0', format_function.call(0, 0))
    assertEqual('0.00', format_function.call(0, 2))
    assertEqual('1', format_function.call(1, 0))
    assertEqual('-1', format_function.call(-1, 0))
    // decimal padding
    assertEqual('1.00', format_function.call(1, 2))
    assertEqual('-1.00', format_function.call(-1, 2))
    // decimal rounding
    assertEqual('0.12', format_function.call(0.123456, 2))
    assertEqual('0.1235', format_function.call(0.123456, 4))
    assertEqual('-0.12', format_function.call(-0.123456, 2))
    assertEqual('-0.1235', format_function.call(-0.123456, 4))
    // thousands separator
    assertEqual('1,234', format_function.call(1234.123456, 0))
    assertEqual('12,345', format_function.call(12345.123456, 0))
    assertEqual('123,456', format_function.call(123456.123456, 0))
    assertEqual('1,234,567', format_function.call(1234567.123456, 0))
    assertEqual('12,345,678', format_function.call(12345678.123456, 0))
    assertEqual('123,456,789', format_function.call(123456789.123456, 0))
    assertEqual('-1,234', format_function.call(-1234.123456, 0))
    assertEqual('-12,345', format_function.call(-12345.123456, 0))
    assertEqual('-123,456', format_function.call(-123456.123456, 0))
    assertEqual('-1,234,567', format_function.call(-1234567.123456, 0))
    assertEqual('-12,345,678', format_function.call(-12345678.123456, 0))
    assertEqual('-123,456,789', format_function.call(-123456789.123456, 0))
    // thousands separator and decimal
    assertEqual('1,234.12', format_function.call(1234.123456, 2))
    assertEqual('12,345.12', format_function.call(12345.123456, 2))
    assertEqual('123,456.12', format_function.call(123456.123456, 2))
    assertEqual('1,234,567.12', format_function.call(1234567.123456, 2))
    assertEqual('12,345,678.12', format_function.call(12345678.123456, 2))
    assertEqual('123,456,789.12', format_function.call(123456789.123456, 2))
    assertEqual('-1,234.12', format_function.call(-1234.123456, 2))
    assertEqual('-12,345.12', format_function.call(-12345.123456, 2))
    assertEqual('-123,456.12', format_function.call(-123456.123456, 2))
    assertEqual('-1,234,567.12', format_function.call(-1234567.123456, 2))
    assertEqual('-12,345,678.12', format_function.call(-12345678.123456, 2))
    assertEqual('-123,456,789.12', format_function.call(-123456789.123456, 2))
}

console.log('======== Testing ========');
test(Number.prototype.format);
test(Number.prototype.format1);
test(Number.prototype.format2);
test(Number.prototype.format3);
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1 papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;벤치마크&lt;/font&gt;&lt;/h1&gt; 
&lt;pre&gt;&lt;code&gt;function benchmark(f) {
    var start = new Date().getTime();
    f();
    return new Date().getTime() - start;
}

function benchmark_format(f) {
    console.log(f);
    time = benchmark(function () {
        for (var i = 0; i &amp;lt; 100000; i++) {
            f.call(123456789, 0);
            f.call(123456789, 2);
        }
    });
    console.log(time.format(0) + 'ms');
}

async = [];
function next() {
    setTimeout(function () {
        f = async.shift();
        f &amp;amp;&amp;amp; f();
        next();
    }, 10);
}

console.log('======== Benchmark ========');
async.push(function () { benchmark_format(Number.prototype.format); });
async.push(function () { benchmark_format(Number.prototype.format1); });
async.push(function () { benchmark_format(Number.prototype.format2); });
async.push(function () { benchmark_format(Number.prototype.format3); });
next();
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jQuery를 사용하지 않으려면 &lt;a href=&quot;http://adamwdraper.github.com/Numeral-js/&quot; papago-id=&quot;39-1&quot;&gt;Numberal.js&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;첫째, JS에서 정수를 문자열로 변환하는 것은 정말 간단합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;// Start off with a number
var number = 42;
// Convert into a string by appending an empty (or whatever you like as a string) to it
var string = 42+'';
// No extra conversion is needed, even though you could actually do
var alsoString = number.toString();
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 당신이 숫자를 문자열로 가지고 있고 그것을 정수로 바꾸기를 원한다면 당신은 다음을 사용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;parseInt(string)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;정수의 경우 및&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;parseFloat(string)&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 class=&quot;papago-parent&quot;&gt;&lt;/font&gt; 두 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt; 원하는 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 두 함수 모두 원하는 정수/플로트를 반환합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-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;// Start off with a float as a string
var stringFloat = '3.14';
// And an int as a string
var stringInt = '42';

// typeof stringInt  would give you 'string'

// Get the real float from the string
var realFloat = parseFloat(someFloat);
// Same for the int
var realInt = parseInt(stringInt);

// but typeof realInt  will now give you 'number'
&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;/p&gt;&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://code.google.com/p/javascript-number-formatter/&quot; rel=&quot;nofollow&quot; papago-id=&quot;45-0&quot;&gt;http://code.google.com/p/javascript-number-formatter/&lt;/a&gt; :&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;짧고 빠르며 유연하면서도 독립형.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MIT 라이선스 정보, 빈 줄 및 코멘트를 포함한 75줄만 해당됩니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;#,##0.00 또는 음수 -000과 같은 표준 숫자 형식을 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;####.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;##0,00, #,###과 같은 국가 형식을 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;##, #'###.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;## 또는 numbering가 아닌 모든 유형의 기호.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;숫자 그룹화를 허용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;#,##,#0.000 또는 #,###0.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;## 모두 유효합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;중복/풀림 방지 형식을 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;##,###,##.# 또는 0#,#00#.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;###0# 다 괜찮습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;51&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;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한 인터페이스, 그냥 마스크와 같은 값을 제공합니다: 포맷 (&quot;0.0000&quot;, 3.141592)&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;갱신하다&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;54-1&quot;&gt;Tomásh Zato&lt;/strong&gt;는 다음과 같은 한 가지 해결책을 제시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;(666.0).toLocaleString()
numObj.toLocaleString([locales [, options]])
&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;ECMA-2625.1판에 설명된 내용:&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;http://www.ecma-international.org/ecma-262/5.1/#sec-15.7.4.3&quot; rel=&quot;nofollow&quot; papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://www.ecma-international.org/ecma-262/5.1/ #sec-15.7.4.3&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString&quot; rel=&quot;nofollow&quot; papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;향후 버전의 브라우저에서 작동할 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어,&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var flt = '5.99';
var nt = '6';

var rflt = parseFloat(flt);
var rnt = parseInt(nt);
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;60-1&quot;&gt;JQuery&lt;/strong&gt;를 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$(document).ready(function()
 {
    //Only number and one dot
    function onlyDecimal(element, decimals)
    {
        $(element).keypress(function(event)
        {
            num = $(this).val() ;
            num = isNaN(num) || num === '' || num === null ? 0.00 : num ;
            if ((event.which != 46 || $(this).val().indexOf('.') != -1) &amp;amp;&amp;amp; (event.which &amp;lt; 48 || event.which &amp;gt; 57))
            {
                event.preventDefault();

            }
            if($(this).val() == parseFloat(num).toFixed(decimals))
            {
                event.preventDefault();
            }
        });
    }

     onlyDecimal(&quot;#TextBox1&quot;, 3) ;



});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쉼표 뒤에 숫자가 2개인 10진수를 얻으려면 다음을 사용하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function nformat(a) {
   var b = parseInt(parseFloat(a)*100)/100;
   return b.toFixed(2);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로케일 기반 포맷은 &lt;a href=&quot;https://www.npmjs.com/package/numbro&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;62-1&quot;&gt;numbro&lt;/a&gt;를, 일반적인 &lt;a href=&quot;https://www.npmjs.com/package/number-format.js&quot; papago-id=&quot;62-3&quot; rel=&quot;nofollow noreferrer&quot;&gt;경우는 numbro&lt;/a&gt;를 제안해도 될까요&lt;a href=&quot;https://www.npmjs.com/package/number-format.js&quot; papago-id=&quot;62-3&quot; rel=&quot;nofollow noreferrer&quot;&gt;?&lt;/a&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용 사례에 따라 두 가지를 조합하는 것이 도움이 될 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 버전은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$.fn.digits = function () {
    return this.each(function () {
        var value = $(this).text();
        var decimal = &quot;&quot;;
        if (value) {
            var pos = value.indexOf(&quot;.&quot;);
            if (pos &amp;gt;= 0) {
                decimal = value.substring(pos);
                value = value.substring(0, pos);
            }
            if (value) {
                value = value.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, &quot;$1,&quot;);
                if (!String.isNullOrEmpty(decimal)) value = (value + decimal);
                $(this).text(value);
            }
        }
        else {
            value = $(this).val()
            if (value) {
                var pos = value.indexOf(&quot;.&quot;);
                if (pos &amp;gt;= 0) {
                    decimal = value.substring(pos);
                    value = value.substring(0, pos);
                }
                if (value) {
                    value = value.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, &quot;$1,&quot;);
                    if (!String.isNullOrEmpty(decimal)) value = (value + decimal);
                    $(this).val(value);
                }
            }
        }
    })
};
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;간단한 기능을 만들었어요, 아마 누군가 사용할 수 있을 겁니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function secsToTime(secs){
  function format(number){
    if(number===0){
      return '00';
    }else {
      if (number &amp;lt; 10) {
          return '0' + number
      } else{
          return ''+number;
      }
    }
  }

  var minutes = Math.floor(secs/60)%60;
  var hours = Math.floor(secs/(60*60))%24;
  var days = Math.floor(secs/(60*60*24));
  var seconds = Math.floor(secs)%60;

  return (days&amp;gt;0? days+&quot;d &quot; : &quot;&quot;)+format(hours)+':'+format(minutes)+':'+format(seconds);
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 출력을 생성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;5d 02:53:39&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;4d 22:15:16&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;03:01:05&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;00:00:00&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;계산이 아닌 보기를 위해 숫자를 포맷하려는 경우 이를 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function numberFormat( number ){

    var digitCount = (number+&quot;&quot;).length;
    var formatedNumber = number+&quot;&quot;;
    var ind = digitCount%3 || 3;
    var temparr = formatedNumber.split('');

    if( digitCount &amp;gt; 3 &amp;amp;&amp;amp; digitCount &amp;lt;= 6 ){

        temparr.splice(ind,0,',');
        formatedNumber = temparr.join('');

    }else if (digitCount &amp;gt;= 7 &amp;amp;&amp;amp; digitCount &amp;lt;= 15) {
        var temparr2 = temparr.slice(0, ind);
        temparr2.push(',');
        temparr2.push(temparr[ind]);
        temparr2.push(temparr[ind + 1]);
        // temparr2.push( temparr[ind + 2] ); 
        if (digitCount &amp;gt;= 7 &amp;amp;&amp;amp; digitCount &amp;lt;= 9) {
            temparr2.push(&quot; million&quot;);
        } else if (digitCount &amp;gt;= 10 &amp;amp;&amp;amp; digitCount &amp;lt;= 12) {
            temparr2.push(&quot; billion&quot;);
        } else if (digitCount &amp;gt;= 13 &amp;amp;&amp;amp; digitCount &amp;lt;= 15) {
            temparr2.push(&quot; trillion&quot;);

        }
        formatedNumber = temparr2.join('');
    }
    return formatedNumber;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;71-0&quot;&gt;입력:&lt;/strong&gt; {Integer} 번호&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;72-0&quot;&gt;출력:&lt;/strong&gt; {String} 번호&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;22,870 =&amp;gt; 번호 22870인 경우&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;22,87백만 =&amp;gt; 번호 2287xxxxx일 경우 (x는 무엇이든 가능)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;22,877억 =&amp;gt; 번호 2287xxxxxxx인 경우&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;22,87조 =&amp;gt; 번호 2287xxxxxxxxxxx인 경우&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;77&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 그 생각을 압니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;78&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;jfriend00의 답변을 더 진행하기 위해 (댓글을 달기에 부족한 점이 있습니다) 저는 그의 답변을 다음으로 확장하였습니다:&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 log(args) {
    var str = &quot;&quot;;
    for (var i = 0; i &amp;lt; arguments.length; i++) {
        if (typeof arguments[i] === &quot;object&quot;) {
            str += JSON.stringify(arguments[i]);
        } else {
            str += arguments[i];
        }
    }
    var div = document.createElement(&quot;div&quot;);
    div.innerHTML = str;
    document.body.appendChild(div);
}

Number.prototype.addCommas = function (str) {
    if (str === undefined) {
    	str = this;
    }
    
    var parts = (str + &quot;&quot;).split(&quot;.&quot;),
        main = parts[0],
        len = main.length,
        output = &quot;&quot;,
        first = main.charAt(0),
        i;
    
    if (first === '-') {
        main = main.slice(1);
        len = main.length;    
    } else {
    	  first = &quot;&quot;;
    }
    i = len - 1;
    while(i &amp;gt;= 0) {
        output = main.charAt(i) + output;
        if ((len - i) % 3 === 0 &amp;amp;&amp;amp; i &amp;gt; 0) {
            output = &quot;,&quot; + output;
        }
        --i;
    }
    // put sign back
    output = first + output;
    // put decimal part back
    if (parts.length &amp;gt; 1) {
        output += &quot;.&quot; + parts[1];
    }
    return output;
}

var testCases = [
    1, 12, 123, -1234, 12345, 123456, -1234567, 12345678, 123456789,
    -1.1, 12.1, 123.1, 1234.1, -12345.1, -123456.1, -1234567.1, 12345678.1, 123456789.1
];
 
for (var i = 0; i &amp;lt; testCases.length; i++) {
	log(testCases[i].addCommas());
}
 
/*for (var i = 0; i &amp;lt; testCases.length; i++) {
    log(Number.addCommas(testCases[i]));
}*/&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;79&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 방법으로 수행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 숫자의 형식을 지정할 뿐만 아니라 사용자 지정 십진법 및 마일 구분자를 설정할 십진법 자릿수를 매개 변수로 전달할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function format(number, decimals = 2, decimalSeparator = '.', thousandsSeparator = ',') {
    const roundedNumber = number.toFixed(decimals);
    let integerPart = '', fractionalPart = '';
    if (decimals == 0) {
        integerPart = roundedNumber;
        decimalSeparator = '';
    } else {
        let numberParts = roundedNumber.split('.');
        integerPart = numberParts[0];
        fractionalPart = numberParts[1];
    }
    integerPart = integerPart.replace(/(\d)(?=(\d{3})+(?!\d))/g, `$1${thousandsSeparator}`);
    return `${integerPart}${decimalSeparator}${fractionalPart}`;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;80&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;용도:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let min = 1556454.0001;
let max = 15556982.9999;
console.time('number format');
for (let i = 0; i &amp;lt; 15000; i++) {
    let randomNumber = Math.random() * (max - min) + min;

    let formated = format(randomNumber, 4, ',', '.'); // formated number

    console.debug('number: ', randomNumber, 'formated: ', formated);
}
console.timeEnd('number format');
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;81&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/1068284/format-numbers-in-javascript-similar-to-c-sharp&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>jquery</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/746</guid>
      <comments>https://starjava.tistory.com/746#entry746comment</comments>
      <pubDate>Sun, 29 Oct 2023 18:56:45 +0900</pubDate>
    </item>
    <item>
      <title>대괄호 자바스크립트 객체 키</title>
      <link>https://starjava.tistory.com/745</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대괄호 자바스크립트 객체 키&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;a = &quot;b&quot;
c = {[a]: &quot;d&quot;}
&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;Object {b: &quot;d&quot;}
&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;이것은 새로운 ES2015(EcmaScript spec을 공식적으로 ES6라고 함) &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#computed_property_names&quot; rel=&quot;noreferrer&quot; papago-id=&quot;0-1&quot;&gt;계산된 속성 이름 구문&lt;/a&gt;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 그들의 축약어입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;someObject[someKey]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ES3/5에서 알고 있는 과제:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;var a = &quot;b&quot;
var c = {[a]: &quot;d&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 class=&quot;lang-js prettyprint-override&quot;&gt;&lt;code&gt;var a = &quot;b&quot;
var c = {}
c[a] = &quot;d&quot;
&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;[]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변수의 실제 값을 &lt;strong papago-id=&quot;3-1&quot;&gt;키&lt;/strong&gt;로 사용하는 우수한 방법을 제공합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JavaScript &lt;strong papago-id=&quot;4-2&quot;&gt;개체&lt;/strong&gt;를 만드는 동안 &lt;strong papago-id=&quot;4-0&quot;&gt;property&lt;/strong&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 위의 답변에 상당히 만족하고 있으며, 이것을 작은 예시로 쓸 수 있게 해주셔서 감사합니다.&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-1&quot;&gt;노드 REPL&lt;/strong&gt;(Node Shell)에서 한 줄씩 코드를 실행했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;&amp;gt; var key = &quot;fullName&quot;;     // Assignment
undefined
&amp;gt;
&amp;gt; var obj = {key: &quot;Rishikesh Agrawani&quot;}    // Here key's value will not be used
undefined
&amp;gt; obj     // Inappropriate, which we don't want
{ key: 'Rishikesh Agrawani' }
&amp;gt;
&amp;gt; // Let's fix
undefined
&amp;gt; var obj2 = {[key]: &quot;Rishikesh Agrawani&quot;}
undefined
&amp;gt; obj2
{ fullName: 'Rishikesh Agrawani' }
&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;const animalSounds = {cat: 'meow', dog: 'bark'};

const animal = 'lion';

const sound = 'roar';

{...animalSounds, [animal]: sound};
&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;{cat: 'meow', dog: 'bark', lion: 'roar'};

&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;[]&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;key&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;지난 ES5일:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var myObject = {};
myObject[key] = &quot;bar&quot;;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 줄의 코드를 쓰는 것은 정말 고통스럽습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;방금 ES6가 나왔습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var myObject = {[key]:&quot;bar&quot;};
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 가치가 있다면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;key&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;foo&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 그러면 두 접근 방식 모두 다음과 같은 결과를 가져옵니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;{foo : &quot;bar&quot;}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/32515598/square-brackets-javascript-object-key&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>JavaScript</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/745</guid>
      <comments>https://starjava.tistory.com/745#entry745comment</comments>
      <pubDate>Sun, 29 Oct 2023 18:56:30 +0900</pubDate>
    </item>
    <item>
      <title>Vim에서 C/C++ 리팩토링(예: Eclipse에서와 같은 방법 추출)</title>
      <link>https://starjava.tistory.com/744</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Vim에서 C/C++ 리팩토링(예: Eclipse에서와 같은 방법 추출)&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;Vim에서 이클립스의 리팩토링 도구와 같이 C 또는 C++ 코드에 리팩토링을 수행하는 플러그인이나 내장된 방법이 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 특히 이클립스의 추출 방법 리팩토링 도구가 마음에 듭니다. 이는 새로운 방법을 통해 매개 변수를 결정하고 일반적으로 반환 값으로 사용할 변수를 추측하는 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니요, Vim은 편집하기 좋은 환경이고 여러 가지 방법(코드 폴딩, 구문 색칠, 매크로 확장 등)으로 사용자 지정할 수 있지만 대부분의 작업은 의미 수준이 아닌 구문 수준에서 수행됩니다.&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;리팩토링을 제대로 하려면 AST에 대한 의미적 지식이 풍부해야 하고, 어떤 변수가 어떤 범위로 선언되는지 등이 필요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Eclipse와 같은 IDE는 각 어휘 범위에 정의된 변수의 캐시를 구축하여 이름을 바꿀 것과 이름을 정할 때 사용되는 위치를 빠르게 참조할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떤 것들을 통사적으로 할 수 없다는 것은 아닙니다. 결국, 한 사람은 코드 블록을 꺼내서 충분히 쉽게 별도의 기능에 넣을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;변수 목록 찾기, 로컬 선언을 가진 변수 찾기, 제거 및 남은 변수가 매개 변수임을 추측할 수도 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 Eclipse는 함수에서 변수가 수정되었는지 여부를 파악하고 반환 값으로 다시 전달되도록 하는 등의 다른 작업도 수행합니다.&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;순 효과는 Vim에서 이 중 일부를 근사화할 수는 있지만 실제로 Vim 전용 환경에서는 이러한 작업을 수행할 수 없다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Eclipse에서 Vim-like 키 바인딩을 사용하거나 &lt;a href=&quot;http://eclim.org/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;6-1&quot;&gt;eclim&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;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;eclim의 주요 목표는 Vim 편집기에 Eclipse 기능을 제공하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;초기 목표는 vim에서 이클립스의 자바 기능을 제공하는 것이었지만, 다양한 다른 언어(c/c++, php, python, ruby, css, html, xml 등)에 대한 지원이 추가되었으며 몇 가지 더 계획되어 있습니다.&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;Eclim은 응용 프로그램이라기 보다는 두 개의 훌륭한 프로젝트를 통합한 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫 번째 Vim은 현존하는 최고의 텍스트 편집자 중 한 명입니다.&lt;/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;Vim은 네이티브 자바를 지원하지 않으며 이클립스에서 사용할 수 있는 많은 고급 기능이 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 이클립스는 여전히 여러 가지 일에 마우스를 사용해야 하며 Vim과 비교할 때 텍스트 편집에 적합하지 않은 인터페이스를 제공합니다.&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;eclim은 Vim이나 Eclipse의 Vim 편집기에 IDE를 기록하려고 하는 대신 서버 인터페이스를 통해 Eclipse 기능을 노출하는 Eclipse 플러그인과 해당 인터페이스를 통해 Eclipse와 통신하는 Vim 플러그인 집합을 제공합니다.&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;이것은 이클립스와 같은 환경을 제공할 뿐만 아니라, &lt;em papago-id=&quot;10-1&quot;&gt;이클립스&lt;/em&gt;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 vim의 탐색 기능과 텍스트 편집 기능은 여전히 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://eclim.org/vim/java/refactor.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;10-3&quot;&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;a href=&quot;https://github.com/LucHermitte/vim-refactor&quot; rel=&quot;noreferrer&quot; papago-id=&quot;11-1&quot;&gt;리팩토링 플러그인&lt;/a&gt;을 작성했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;C++는 주로 사용하는 언어 중 하나입니다(직장에서 사용하는 주요 언어이기 때문에).&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;C++의 경우, 플러그인은 (ctags 덕분에) 추출된 함수에서 들어오고 나가는 변수의 대부분을 (그러나 불행하게도 모든 것은 아니지만) 추론할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;in/out 변수 교환 방법(constref, rvalue ref, copy, pointer, tuple, struct 등)을 선택하려면 아직 대화상자를 조금 작성해야 합니다&lt;em papago-id=&quot;12-1&quot;&gt;(BTW, gui&lt;/em&gt;는 내 &lt;em papago-id=&quot;12-1&quot;&gt;것이 아니므로 도움말을 환영&lt;/em&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;C++에 대한 리팩토링으로 vim에 대해 높고 낮음을 검색한 결과, 이것이 제가 생각해낸 최고의 솔루션입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Visual Studio 2013 이상 - C++ 개발 및 디버깅을 위한 우수한 IDE이지만 Refactoring 또는 vim이 충분하지 않음&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;vsvim 플러그인 설치 - vim 탐색, 검색, 문자열 바꾸기 등의 모든 vim 탐색 기능이 있습니다(일부 고급 기능은 지원되지 않습니다).&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Resharp C++ 설치 - 속도 비용으로 리팩토링에 적합합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 약간 투박하게 만들지만 메소드/변수 자동 생성, 로컬/글로벌/메소드 변수 또는 함수 이름 변경, 솔루션에서 사용법 검색 및 기타 기능을 추론하고 싶다면 가치가 매우 높습니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 C++ 개발, 디버깅, 리팩토링에 제가 찾은 최고의 조합입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;적어도 3배 - 5배는 더 빨라집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신에게도 도움이 되길 바랍니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/2470653/refactoring-c-c-in-vim-e-g-method-extraction-like-in-eclipse&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/744</guid>
      <comments>https://starjava.tistory.com/744#entry744comment</comments>
      <pubDate>Sun, 29 Oct 2023 18:56:23 +0900</pubDate>
    </item>
    <item>
      <title>아이들이 가로축을 채우도록 신장시키는 방법은?</title>
      <link>https://starjava.tistory.com/743</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아이들이 가로축을 채우도록 신장시키는 방법은?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;좌우 플렉스박스가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;/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-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;.wrapper {
  display: flex;
  flex-direction: row;
  align-items: stretch;
  width: 100%;
  height: 70vh;
  min-height: 325px; 
  max-height:570px; 
}

.wrapper&amp;gt;.left {
  background: #fcc;
 }

.wrapper&amp;gt;.right {
  background: #ccf;
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;wrapper&quot;&amp;gt;
  &amp;lt;div class=&quot;left&quot;&amp;gt;Left&amp;lt;/div&amp;gt;
  &amp;lt;div class=&quot;right&quot;&amp;gt;Right&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제는 적절한 아이가 반응을 보이지 않는다는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;구체적으로 말하면 포장지의 높이를 채워줬으면 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게 하면 이것을 해낼 수 있을까요?&lt;/font&gt;&lt;/p&gt;&lt;ul&gt; 
 &lt;li&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;/li&gt; 
 &lt;li&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;flex: 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;나머지 수평 공간을 채우려면 다음을 수행해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&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-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;.wrapper {
  display: flex;
  flex-direction: row;
  align-items: stretch;
  width: 100%;
  height: 5em;
  background: #ccc;
}

.wrapper&amp;gt;.left {
  background: #fcc;
}

.wrapper&amp;gt;.right {
  background: #ccf;
  flex: 1;
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;wrapper&quot;&amp;gt;
  &amp;lt;div class=&quot;left&quot;&amp;gt;Left&amp;lt;/div&amp;gt;
  &amp;lt;div class=&quot;right&quot;&amp;gt;Right&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명시하다&lt;/font&gt;&lt;/font&gt;&lt;code&gt;flex: 1;&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;/ul&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-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;.wrapper {
  display: flex;
  flex-direction: row;
  align-items: stretch;
  width: 100%;
  height: 5em;
  background: #ccc;
}

.wrapper&amp;gt;div {
  flex: 1;
}

.wrapper&amp;gt;.left {
  background: #fcc;
}

.wrapper&amp;gt;.right {
  background: #ccf;
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;wrapper&quot;&amp;gt;
  &amp;lt;div class=&quot;left&quot;&amp;gt;Left&amp;lt;/div&amp;gt;
  &amp;lt;div class=&quot;right&quot;&amp;gt;Right&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;4-0&quot;&gt;단답형:&lt;/strong&gt; 그냥 사용.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;flex:1;&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;.wrapper {
    display: flex;
    flex-direction: row;
    .
    .
    .
}
.wrapper &amp;gt; * {
    flex: 1;
}
&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;width: ... &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;flex:1;&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;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨테이너(래퍼)에 자녀가 두 명밖에 없기 때문에 여유를 가지고 노는 대신 디스플레이(flex; 및 정당화 콘텐츠: 공백 사이)를 추가하기만 하면 됩니다.&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;높이와 관련하여 부모(위퍼)에게 원하는 높이(예: 100px)를 설정한 다음 두 자녀(좌우)의 높이를 모두 100%로 설정할 수 있습니다.&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-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;.wrapper {
  display: flex;
  justify-content: space-between;
  height:100px;
}

.wrapper&amp;gt;.left {
  background: #fcc;
  height:100%;
}

.wrapper&amp;gt;.right {
  background: #ccf;
  height:100%;
  flex: 1;
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;wrapper&quot;&amp;gt;
  &amp;lt;div class=&quot;left&quot;&amp;gt;Left&amp;lt;/div&amp;gt;
  &amp;lt;div class=&quot;right&quot;&amp;gt;Right&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/29467660/how-to-stretch-children-to-fill-cross-axis&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>CSS</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/743</guid>
      <comments>https://starjava.tistory.com/743#entry743comment</comments>
      <pubDate>Sun, 29 Oct 2023 18:56:17 +0900</pubDate>
    </item>
    <item>
      <title>워드프레스 메뉴-워커에서 ACF 객체</title>
      <link>https://starjava.tistory.com/742</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;워드프레스 메뉴-워커에서 ACF 객체&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;WP 사이트가 있고, &lt;strong papago-id=&quot;0-3&quot;&gt;메뉴&lt;/strong&gt; 항목별 &lt;strong papago-id=&quot;0-1&quot;&gt;하위&lt;/strong&gt; 메뉴와 각 항목별 &lt;strong papago-id=&quot;0-5&quot;&gt;li-item&lt;/strong&gt;을 원합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;the_sub_field('info_block_header')&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 그래서 ACF-루프가 내부에 있는 워커를 만들려고 하는데, 루프를 어떻게 구현해야 하는지 지금은 잘 모르겠습니다.&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;font class=&quot;papago-parent&quot;&gt;php:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;aside&amp;gt;
    &amp;lt;nav id=&quot;mainNav&quot;&amp;gt;

                &amp;lt;?php 
                $dropdown = new dropdown_walker;

                    $mainNav = array(
                   'theme_location'  =&amp;gt; '',
                   'menu'            =&amp;gt; 'main-menu', 
                   'container'       =&amp;gt; 'ul', 
                   'container_class' =&amp;gt; 'topmenu-{topmenu slug}-container', 
                   'container_id'    =&amp;gt; 'topmenu',
                   'menu_class'      =&amp;gt; 'topmenu', 
                   'menu_id'         =&amp;gt; 'topmenu-{topmenu slug}[-{increment}]',
                   'echo'            =&amp;gt; true,
                   'fallback_cb'     =&amp;gt; 'wp_page_menu',
                   'before'          =&amp;gt; '',
                   'after'           =&amp;gt; '',
                   'link_before'     =&amp;gt; '&amp;lt;h4&amp;gt;',
                   'link_after'      =&amp;gt; '&amp;lt;/h4&amp;gt;',
                   'items_wrap'      =&amp;gt; '&amp;lt;ul id=&quot;%1$s&quot; class=&quot;%2$s&quot;&amp;gt;%3$s&amp;lt;/ul&amp;gt;',
                   'depth'           =&amp;gt; 0,
                   'walker'          =&amp;gt; $dropdown
                  );

                wp_nav_menu( $mainNav ); 


                ?&amp;gt;

                    &amp;lt;?php get_search_form(); ?&amp;gt;
&amp;lt;/aside&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;&amp;lt;?php get_header(); ?&amp;gt;
&amp;lt;?php get_sidebar(); ?&amp;gt;
&amp;lt;?php if(get_field('info_block')): ?&amp;gt;
                &amp;lt;?php while(has_sub_field('info_block')): ?&amp;gt;
                &amp;lt;div class=&quot;box masonCh boxText col2 clearfix&quot;&amp;gt;
                    &amp;lt;h2&amp;gt;&amp;lt;?php the_sub_field('info_block_header')?&amp;gt;&amp;lt;/h2&amp;gt;
                    &amp;lt;div&amp;gt;
                        &amp;lt;?php the_sub_field('info_block_txt')?&amp;gt;
                    &amp;lt;/div&amp;gt;

                &amp;lt;/div&amp;gt;
                &amp;lt;?php if ( have_rows('info_block_img')):
                    while (have_rows ('info_block_img')) : the_row();?&amp;gt;
                &amp;lt;div class=&quot;box masonCh boxImg col2 clearfix&quot;&amp;gt;
                    &amp;lt;div class=&quot;boxCrop&quot;&amp;gt;
                            &amp;lt;img src=&quot;&amp;lt;?php the_sub_field('info_block_img_file') ?&amp;gt;&quot;&amp;gt;
                    &amp;lt;/div&amp;gt;
                &amp;lt;/div&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;pre&gt;&lt;code&gt;&amp;lt;?php 
class dropdown_walker extends Walker {

    var $tree_type = array( 'post_type', 'taxonomy', 'custom' );

    var $db_fields = array( 'parent' =&amp;gt; 'menu_item_parent', 'id' =&amp;gt; 'db_id' );

    function start_lvl( &amp;amp;$output, $depth = 0, $args = array() ) {
        $indent = str_repeat(&quot;\t&quot;, $depth);
        $output .= &quot;\n$indent&amp;lt;ul class=\&quot;sub-menu\&quot;&amp;gt;\n&quot;;
    }
    function end_lvl( &amp;amp;$output, $depth = 0, $args = array() ) {
        $indent = str_repeat(&quot;\t&quot;, $depth);
        $output .= &quot;$indent&amp;lt;/ul&amp;gt;\n&quot;;
    }

    function start_el( &amp;amp;$output, $item, $depth = 0, $args = array(), $id = 0 ) {
        $indent = ( $depth ) ? str_repeat( &quot;\t&quot;, $depth ) : '';

        $class_names = $value = '';

        $classes = empty( $item-&amp;gt;classes ) ? array() : (array) $item-&amp;gt;classes;
        $classes[] = 'menu-item-' . $item-&amp;gt;ID;

        $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) );
        $class_names = $class_names ? ' class=&quot;' . esc_attr( $class_names ) . '&quot;' : '';

        $id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item-&amp;gt;ID, $item, $args );
        $id = $id ? ' id=&quot;' . esc_attr( $id ) . '&quot;' : '';

        $output .= $indent . '&amp;lt;li' . $id . $value . $class_names .'&amp;gt;';

        $atts = array();
        $atts['title']  = ! empty( $item-&amp;gt;attr_title ) ? $item-&amp;gt;attr_title : '';
        $atts['target'] = ! empty( $item-&amp;gt;target )     ? $item-&amp;gt;target     : '';
        $atts['rel']    = ! empty( $item-&amp;gt;xfn )        ? $item-&amp;gt;xfn        : '';
        $atts['href']   = ! empty( $item-&amp;gt;url )        ? $item-&amp;gt;url        : '';


        $atts = apply_filters( 'nav_menu_link_attributes', $atts, $item, $args );

        $attributes = '';
        foreach ( $atts as $attr =&amp;gt; $value ) {
            if ( ! empty( $value ) ) {
                $value = ( 'href' === $attr ) ? esc_url( $value ) : esc_attr( $value );
                $attributes .= ' ' . $attr . '=&quot;' . $value . '&quot;';
            }
        }

        $item_output = $args-&amp;gt;before;
        $item_output .= '&amp;lt;a'. $attributes .'&amp;gt;';

        $item_output .= $args-&amp;gt;link_before . apply_filters( 'the_title', $item-&amp;gt;title, $item-&amp;gt;ID ) . $args-&amp;gt;link_after;
        $item_output .= $args-&amp;gt;after;
        $item_output .= '&amp;lt;/a&amp;gt;';


        $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );

        //Here’s where I’m trying to put my submenu:

        $output .= '&amp;lt;ul id=&quot;about&quot; class=&quot;dropDown&quot;&amp;gt;'. if(get_field('info_block')):
                while(has_sub_field('info_block')): .'
        &amp;lt;li&amp;gt;&amp;lt;a href=&quot;#&quot;&amp;gt;'. get_sub_field('info_block_header') .'&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;'. endwhile; endif; .
        &amp;lt;/ul&amp;gt;'; 

    }   function end_el( &amp;amp;$output, $item, $depth = 0, $args = array() ) {
        $output .= &quot;&amp;lt;/li&amp;gt;\n&quot;;
    }

} // Walker_Nav_Menu
?&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;ID를 전달해주셔야 합니다, 연관 : $item-&amp;gt;으로 받으실 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ID님, 이 항목 print_r($item-&amp;gt;type); (분류, 페이지 등)의 종류를 알 수 있습니다.&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;$output .= '&amp;lt;ul id=&quot;about&quot; class=&quot;dropDown&quot;&amp;gt;'. if(get_field('info_block', $id)):
            while(has_sub_field('info_block', $id)): .'
    &amp;lt;li&amp;gt;&amp;lt;a href=&quot;#&quot;&amp;gt;'. get_sub_field('info_block_header', $id) .'&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;'. endwhile; endif; .
    &amp;lt;/ul&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;URL : https://stackoverflow.com/questions/29766782/acf-object-in-wordpress-menu-walker&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>WordPress</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/742</guid>
      <comments>https://starjava.tistory.com/742#entry742comment</comments>
      <pubDate>Sun, 29 Oct 2023 18:56:09 +0900</pubDate>
    </item>
    <item>
      <title>com. mysql. jdbc.Mysql Data Truncation:데이터 잘라내기:데이터가 너무 길어서 ' column_name' 열에 사용할 수 없습니다.</title>
      <link>https://starjava.tistory.com/741</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;com. mysql. jdbc.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Mysql Data Truncation:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 잘라내기:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터가 너무 길어서 ' column_name' 열에 사용할 수 없습니다.&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과 함께 Java JDBC를 사용하고 있는데 다음 오류가 발생합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;com.mysql.jdbc.MysqlDataTruncation: Data truncation: 
Data too long for column 'column_name'
&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;em papago-id=&quot;3-1&quot;&gt;바이트&lt;/em&gt;로 삽입하려고 할 때 Spring Boot Data JPA 응용 프로그램에서 동일한 문제가 발생했습니다. 동일한 오류가 발생했습니다.&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;hr&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음 행을 추가했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;application.properties&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;pre&gt;&lt;code&gt;spring.datasource.url=jdbc:mysql://localhost:3306/conweb?sessionVariables=sql_mode='NO_ENGINE_SUBSTITUTION'&amp;amp;jdbcCompliantTruncation=false
&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;h2 papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL 터미널에서 이 오류를 재현하는 방법&lt;/font&gt;&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;mysql&amp;gt; create table penguins(val CHAR(2));
Query OK, 0 rows affected (0.08 sec)

mysql&amp;gt; insert into penguins values(&quot;AB&quot;);
Query OK, 1 row affected (0.00 sec)

mysql&amp;gt; insert into penguins values(&quot;ABC&quot;);
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql&amp;gt; show warnings;
+---------+------+------------------------------------------+
| Level   | Code | Message                                  |
+---------+------+------------------------------------------+
| Warning | 1265 | Data truncated for column 'val' at row 1 |
+---------+------+------------------------------------------+
1 row in set (0.00 sec)
&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;이 오류는 발생하는 오류이지만 MySQL 터미널에서는 &lt;em papago-id=&quot;9-1&quot;&gt;경고&lt;/em&gt;로 표시되고 행을 삽입하지만 자동으로 &lt;em papago-id=&quot;9-3&quot;&gt;잘라냅니다&lt;/em&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;MySQL JDBC는 용서하지 않으며, 하드 에러를 뱉고 행을 삽입하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;h2 papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2가지 해결책&lt;/font&gt;&lt;/h2&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;삽입할 &lt;em papago-id=&quot;12-1&quot;&gt;데이터 유형&lt;/em&gt;의 용량을 늘리거나, 삽입할 내용의 &lt;em papago-id=&quot;12-3&quot;&gt;크기&lt;/em&gt;를 줄입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;열의 크기를 늘리는 범례:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;If you are using   then use this
-----------------  --------------
smallint           int
int                long
TEXT               LONGTEXT
LONGTEXT           CLOB
CLOB               Store the content to disk, and save the filename in the db.
&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;해당 열에 들어갈 값보다 큰 ' column_name' 열의 값을 가진 행을 삽입하거나 업데이트하려고 한 것 같습니다.&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;예를 들어 CHAR 또는 VARCHAR인 경우 정의된 열의 크기보다 긴 문자열이 있을 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저장하는 데이터가 열보다 크지 않은지 확인하거나(아마도 저장하기 전에 긴 문자열을 잘라냄) 데이터베이스 열 크기를 늘려야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Image/Word/PDF 파일을 업로드하다가 Spring Boot 애플리케이션에서 동일한 문제가 발생하여 다음 단계로 수정했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;18&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 papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업로드하려는 파일의 크기를 확인해 주시기 바랍니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 해당 파일 크기를 매핑된 데이터베이스 필드 유형에서 허용하는 최대 크기와 비교합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&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;예를 들어 LOB의 경우:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 64KB, MEDIABLOB≈ 16MB 및 LONGBLOB≈ 4GB 실행 TINYBLOB≈ 25트, BLOB≈ 64KB, MEDIABLOB≈ 16MB및 LONGBLOB≈ 4GB≈&lt;/font&gt;&lt;/font&gt;&lt;/font&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;공간 요구 사항에 따라 Altertable 명령을 사용합니다.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;em papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ALTER TABLE '탭&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;LE_NAME' 수정 'FILD_'&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NAME' MEDIABLOB;&lt;/font&gt;&lt;/em&gt;&lt;/p&gt; &lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;25-0&quot;&gt;참고:&lt;/strong&gt; 링크는 항상 저장하는 것이 좋으나 실제 파일(크기가 큰 파일)은 DB에 저장하지 않는 것이 좋습니다.&lt;/font&gt;&lt;/p&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;font class=&quot;papago-parent&quot;&gt;그렇기 때문에 위에 말씀하신 것과 같은 예외가 발생합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 내부의 따옴표를 제거한 후 테이블에 성공적으로 삽입했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 오류는 열에 삽입하려는 데이터 크기가 너무 크기 때문에 나타납니다.&lt;/font&gt;&lt;/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;열이 VARCHAR 형식이라고 가정하면 mySQL에서&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ALTER TABLE table_name CHANGE COLUMN col_name col_name  VARCHAR(1000);  //assuming 1000 is enough
&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;p&gt;&lt;strong papago-id=&quot;30&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;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예: LONGTEXT 데이터를 전송하는 저장 프로시저의 파라미터가 TEXT 형식일 수 있지만, 해당 컬럼 데이터 유형과 데이터가 LONGTEXT로 MySQL 서버에 전송됩니다.&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;Spring Boot and Hibernate를 사용하는 것이 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 같은 문제에 직면했고 해결책은 꽤 분명했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    @Column(length = 65555)
    @NotNull
    private String content;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저도 다음과 같은 선을 시도해 보았지만, 이는 어찌된 일인지 아무런 효과를 나타내지 못했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Size(min = 5, max = 65555)
&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;MySQL 테이블 크기에 대한 기본적인 제약 조건이 있기 때문에 이 문제가 발생할 수 있다고 생각합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;@Size&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주석은 입력된 값이 정의된 범위에 있지 않을 경우 사용자에게 피드백하기 위해 사용됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 당신의 문제를 해결하길 바랍니다!&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;JPA 도면요소에서 주석 @Column을 길이와 함께 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 문제가 해결될 겁니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;샘플 코드:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@Entity
public class SampleEntity{

    @Column(length = 1200)
    private String column_name;

    // ...

}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;원하는 대로 길이를 설정하면 테이블에서 &lt;strong papago-id=&quot;38-1&quot;&gt;VARCHAR(length)&lt;/strong&gt;가 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;값을 크게 주면 긴 &lt;strong papago-id=&quot;38-3&quot;&gt;텍스트&lt;/strong&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;시도 및 테스트 - create sql 스크립트는 다음과 같이 표시됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CREATE TABLE `SampleEntity` (
  `id` bigint(20) NOT NULL,
  `dateCreated` datetime DEFAULT NULL,
  `dateModified` datetime DEFAULT NULL,
  `column_name` longtext,
  `userName` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
&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;참조 - https://www.baeldung.com/jpa-size-length-column-differences&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;pre&gt;&lt;code&gt;@Column(columnDefinition = &quot;longtext&quot;)
private String document;
&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;우리의 경우, 애플리케이션을 재부팅하는 것만으로 문제가 해결됩니다. 즉, Tomcat을 다시 시작하는 것을 의미합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 이유로 이 문제가 발생할 수 있지만 오류는 이렇게 던져집니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/13567155/com-mysql-jdbc-mysqldatatruncation-data-truncation-data-too-long-for-column-c&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MySQL</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/741</guid>
      <comments>https://starjava.tistory.com/741#entry741comment</comments>
      <pubDate>Sun, 29 Oct 2023 18:56:01 +0900</pubDate>
    </item>
    <item>
      <title>다른 데이터베이스 및 테이블에 일회성 쿼리 만들기</title>
      <link>https://starjava.tistory.com/740</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 데이터베이스 및 테이블에 일회성 쿼리 만들기&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;옆에 워드프레스 블로그 셀로트가 있는 레일스 앱이 있습니다(/blog에서 완전히 별도로).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;고객이 레일즈 앱 메인 홈페이지의 최신 블로그 게시물을 원해서 워드프레스 데이터베이스에 일회적인 mysql 쿼리를 해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;레일 앱에서 이걸 어떻게 해야 할까요?&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;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동일한 데이터베이스 자격 증명과 동일한 MySQL 서버를 사용하여 액세스할 수 있다고 가정하면 가장 쉬운 방법은 데이터베이스와 테이블을 지정하는 쿼리를 실행하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;FROM&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;ActiveRecord::Base.connection.select_one(
    &quot;SELECT * FROM blog_database.posts ORDER BY created_at DESC LIMIT 1&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;select_one&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;열 해시를 값으로 반환합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용할 수 있는 방법에 대한 자세한 내용은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;connection&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;object, 이 설명서 &lt;a href=&quot;http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/DatabaseStatements.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;3-1&quot;&gt;참조&lt;/a&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 번째 옵션은 ActiveRecord의 하위 클래스를 생성하고 호출하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;establish_connection&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;class Blog &amp;lt; ActiveRecord::Base
  establish_connection :blog

  def self.most_recent_post
    connection.select_one(&quot;SELECT * FROM posts ...&quot;)
  end
end
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 또한 다음과 같이 할 필요가 있을 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;blog&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;database.yml&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일. 자세한 내용은 &lt;a href=&quot;http://api.rubyonrails.org/classes/ActiveRecord/Base.html#method-c-establish_connection&quot; rel=&quot;noreferrer&quot; papago-id=&quot;8-1&quot;&gt;establish_connection&lt;/a&gt;을 참조하십시오. 유감스럽게도 이런 식으로 사용하는 것은 소스 코드를 봐야 알 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;establish_connection&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;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;Blog.connection.select_one(&quot;SELECT * FROM posts ...&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 좋은 점은 위에서 한 것처럼 (블로그 클래스에서) 데이터를 가져올 수 있는 방법을 정의할 수 있다는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Rails 2.x 또는 3.x에서는 이 두 가지 전략이 모두 잘 작동합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3958402/make-a-one-off-query-to-a-different-database-and-table&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>WordPress</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/740</guid>
      <comments>https://starjava.tistory.com/740#entry740comment</comments>
      <pubDate>Sun, 29 Oct 2023 18:55:53 +0900</pubDate>
    </item>
    <item>
      <title>무엇이 단편적이고 왜 중요합니까?</title>
      <link>https://starjava.tistory.com/739</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;무엇이 단편적이고 왜 중요합니까?&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;분할된 데이터(샤드)를 상황에 맞는 쉬운 Aggregate로 되돌리는 것이 어렵다는 것을 이해한다고 생각합니다.&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;strong papago-id=&quot;2-0&quot;&gt;업데이트&lt;/strong&gt;: 저는 여기서 고생하고 있는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 생각에 애플리케이션 계층은 데이터를 저장할 위치를 결정하는 업무를 수행하지 않아야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기껏해야 어떤 종류의 공유 고객이어야 합니다.&lt;/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;이러한 이득은 MVC 위반을 상쇄하기에 충분합니까?&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;샤딩은 데이터베이스의 &quot;수평 분할&quot;의 다른 이름일 뿐입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;해당 용어를 검색하여 더 명확하게 표시할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Shard_(database_architecture)&quot; rel=&quot;noreferrer&quot; papago-id=&quot;4-1&quot;&gt;위키피디아&lt;/a&gt;에서:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수평 분할은 데이터베이스 테이블의 행을 열로 분할하는 것이 아니라 별도로 고정하는 설계 원리입니다(정규화의 경우).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 파티션은 샤드의 일부를 구성하며, 샤드는 별도의 데이터베이스 서버 또는 물리적 위치에 위치할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;장점은 각 테이블의 행 수가 감소된다는 것입니다(이렇게 하면 인덱스 크기가 줄어 검색 성능이 향상됩니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;공유가 데이터의 실제 측면에 기반을 둔 경우(예: 유럽 고객 대 유럽 고객).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;미국 고객) 그러면 해당 샤드 멤버십을 쉽고 자동으로 추론하고 해당 샤드만 조회할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;공유에 대한 추가 정보:&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫째, 각 데이터베이스 서버는 동일한 테이블 구조를 가지고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;둘째, 데이터 기록은 공유 데이터베이스에서 논리적으로 분할됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;분할된 데이터베이스와 달리 각 전체 데이터 레코드는 하나의 샤드(백업/중복을 위한 미러링이 없는 경우)에만 존재하며, 모든 CRUD 작업은 해당 데이터베이스에서만 수행됩니다.&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;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;8-0&quot;&gt;업데이트:&lt;/strong&gt; MVC를 깨지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터를 저장할 정확한 샤드를 결정하는 작업은 데이터 액세스 계층에 의해 투명하게 수행됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스 공유에 사용한 기준에 따라 올바른 공유를 결정해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(응용프로그램의 몇 가지 구체적인 측면에 따라 데이터베이스를 수동으로 여러 조각으로 공유해야 하기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 올바른 샤드를 사용하기 위해 데이터베이스에서 데이터를 로드하고 저장할 때 주의해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자바 코드를 사용한 이 &lt;a href=&quot;http://sleeplessinslc.blogspot.com/2008/09/hibernate-shards-maven-simple-example.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-1&quot;&gt;예&lt;/a&gt;는 실제 시나리오에서 어떻게 작동하는지를 다소 명확하게 해줍니다(&lt;a href=&quot;http://www.hibernate.org/subprojects/shards.html&quot; papago-id=&quot;9-3&quot; rel=&quot;noreferrer&quot;&gt;동면&lt;/a&gt; 샤즈 &lt;a href=&quot;http://www.hibernate.org/subprojects/shards.html&quot; papago-id=&quot;9-3&quot; rel=&quot;noreferrer&quot;&gt;프로젝트&lt;/a&gt;에 관한 것입니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;을(를) 해결하기 위해&quot;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;why sharding&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;: 주로 데이터가 &lt;em papago-id=&quot;11-1&quot;&gt;많은&lt;/em&gt; 매우 큰 규모의 애플리케이션에만 사용됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;첫째, 데이터베이스 쿼리에 대한 응답 시간을 최소화하는 데 도움이 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;둘째, 더 이상 충분하지 않을 수도 있는 하나의 대형 서버 대신 더 저렴한 &quot;저사양&quot; 머신을 사용하여 데이터를 호스팅할 수 있습니다.&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;로컬리티가 상당히 제한된 DBMS에 대한 쿼리가 있는 경우(예: 사용자가 'where username = $my_username'로 선택한 경우만 실행), 한 서버에 A-M으로 시작하는 모든 사용자 이름을 넣고 다른 서버에 N-Z로 시작하는 모든 사용자 이름을 입력하는 것이 합리적입니다.&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;&lt;em papago-id=&quot;13-0&quot;&gt;간단히 말하면&lt;/em&gt;, 샤딩은 기본적으로 테이블을 서로 다른 서버에 분배하여 부하의 균형을 똑같이 맞추기 위한 프로세스입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론 현실은 훨씬 더 복잡합니다.&lt;/font&gt;&lt;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;em papago-id=&quot;15-5&quot;&gt;Normalization&lt;/em&gt;인 수직(&lt;strong papago-id=&quot;15-3&quot;&gt;열별&lt;/strong&gt;) 파티셔닝과 반대로 수평(&lt;strong papago-id=&quot;15-1&quot;&gt;행별&lt;/strong&gt;) 데이터베이스 파티셔닝입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;매우 큰 데이터베이스를 데이터 샤드라고 하는 더 작고, 더 빠르고, 더 쉽게 관리할 수 있는 부분으로 분리합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 분산 시스템을 달성하기 위한 메커니즘입니다.&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;분산형 시스템이 필요한 이유는 무엇입니까?&lt;/font&gt;&lt;/strong&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;/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;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;경제성:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;단일 대형 컴퓨터의 힘으로 더 작은 컴퓨터의 네트워크를 만드는 것은 비용이 적게 듭니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용은 여기에서 확인할 수 있습니다: &lt;a href=&quot;https://en.wikipedia.org/wiki/Distributed_database#Advantages&quot; rel=&quot;noreferrer&quot; papago-id=&quot;20-1&quot;&gt;분산형 데이터베이스&lt;/a&gt;의 장점&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;분산 시스템을 달성하는 데 얼마나 많은 도움이 됩니까?&lt;/font&gt;&lt;/strong&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;검색 인덱스를 N개의 파티션으로 분할하고 각 인덱스를 별도의 서버에 로드할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하나의 서버에 쿼리를 하면 1/N의 결과를 얻을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서, 일반적인 분산 검색 시스템은 각 서버의 결과를 축적하고 이를 결합하는 &lt;strong papago-id=&quot;22-1&quot;&gt;집계기&lt;/strong&gt;를 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;집계기는 쿼리를 각 서버에 배포하기도 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 애그리게이터 프로그램은 빅데이터 용어로 맵리듀스(&lt;a href=&quot;https://en.wikipedia.org/wiki/MapReduce&quot; rel=&quot;noreferrer&quot; papago-id=&quot;22-3&quot;&gt;MapReduce&lt;/a&gt;)라고 불립니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉, Distributed Systems = Sharding + MapReduce (다른 것들도 있지만)입니다.&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;blockquote&gt; 
 &lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;샤딩은 매우 큰 규모의 애플리케이션에서 대부분 중요합니까, 아니면 더 작은 규모의 애플리케이션에서도 중요합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;/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;font class=&quot;papago-parent&quot;&gt;소프트웨어 전문가로 일하던 12년 내내 샤딩을 통해 얻을 수 있었던 한 가지 상황에 직면했을 것입니다.&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;게다가 미래는 모든 잠재적인 성능 제한을 제거하는 거대한 객체 &quot;클라우드&quot;처럼 재미있고 흥미로운 것이 될 것입니다. 그렇죠? :)&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;확장 가능한 시스템을 구축할 때는 항상 병목 현상이 발생하기 때문에 자주 작성되는 데이터를 주의해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;좋은 해결책은 해당 개체를 잘라내고 여러 복사본에 쓴 다음 전체를 읽는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 &quot;sharded counterwrt GAE&quot;의 예: http://code.google.com/appengine/articles/sharding_counters.html&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;a href=&quot;https://en.wikipedia.org/wiki/Shard_(database_architecture)&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;29-1&quot;&gt;위키피디아 기사&lt;/a&gt;에 의하면,&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&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;인덱스를 먼저 검색할 필요 없이 특정 행의 파티션을 식별할 수 있는 명백하고 강력하며 암묵적인 방법이 있다면 인덱스 크기를 줄임으로써 이점을 제공할 수 있습니다(예: 'Customers East' 및 'Customers East'의 전형적인 예).&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;/blockquote&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;blockquote&gt; 
 &lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 분리된 인스턴스 간에 샤드를 분할하려면 단순한 수평 분할 이상의 작업이 필요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스를 쿼리하려면 두 인스턴스를 모두 쿼리해야 하고 간단한 차원 테이블을 검색해야 하는 경우에는 기대했던 효율성 향상이 손실됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;샤딩은 파티셔닝 이외에도 서버 전체에 걸쳐 큰 파티셔닝 테이블을 분할하는 동시에 작은 테이블은 완전한 단위로 복제됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;blockquote&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;/blockquote&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 좋은 규칙이지만 대부분의 것들이 항상 정확하지는 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아키텍처를 수행할 때 책임과 협업으로 시작합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능적 아키텍처를 결정한 후에는 비기능적인 힘의 균형을 맞춰야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 비기능적인 요인 중 하나가 대규모 확장성이라면 데이터 스토리지 추상화가 애플리케이션 계층으로 유출되더라도 이에 대응하기 위해 아키텍처를 조정해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;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&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/azure/architecture/patterns/sharding&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://learn.microsoft.com/en-us/azure/architecture/patterns/sharding&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 저장소를 수평 파티션 또는 조각으로 나눕니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;각 샤드는 동일한 스키마를 갖지만, 데이터의 고유한 부분 집합을(subset of data)을 보유합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;샤드는 스토리지 노드 역할을 하는 서버에서 실행되는 자체 데이터 저장소(다양한 유형의 여러 엔티티에 대한 데이터를 포함할 수 있음)입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.mongodb.com/features/database-sharding-explained&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://www.mongodb.com/features/database-sharding-explained&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;샤딩(sharding)은 수평 스케일링 또는 스케일 아웃이라고 하는 스케일링의 한 형태로, 부하를 공유하기 위해 추가적인 노드가 도입됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;수평적 확장을 통해 빅데이터와 집중적인 워크로드를 처리할 수 있는 거의 무한한 확장성을 제공합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이와 달리 수직 스케일링은 보다 강력한 CPU, RAM 증가 또는 스토리지 용량 증가를 통해 단일 시스템 또는 단일 서버의 전력을 증가시키는 것을 말합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt;&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/992988/what-is-sharding-and-why-is-it-important&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>database</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/739</guid>
      <comments>https://starjava.tistory.com/739#entry739comment</comments>
      <pubDate>Sun, 29 Oct 2023 18:55:47 +0900</pubDate>
    </item>
    <item>
      <title>py.test: 오류: 인식할 수 없는 인수: --cov=ner_brands --cov-report=term-missing --cov-config</title>
      <link>https://starjava.tistory.com/738</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;py.test: 오류: 인식할 수 없는 인수: --cov=ner_brands --cov-report=term-missing --cov-config&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;py.test  file_name.py
&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;py.test: error: unrecognized arguments: --cov=ner_brands --cov-report=term-missing --cov-config
&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;a href=&quot;https://pypi.python.org/pypi/pytest-cov&quot; papago-id=&quot;4-0&quot;&gt;pytest-cov 패키지&lt;/a&gt;는 --cov 인수를 pytest에 전달하려는 경우 필수이지만 기본적으로 전달되지 않아야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 py.test의 수정된 버전을 사용하고 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;pip install pytest-cov
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제를 해결해 줄 겁니다&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;센트를 사용하시는 분들께&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;OS 6, 의 버전&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setuptools&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;pip install pytest-cov
pip install --upgrade setuptools
&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;pip install pytest-cov&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;~ # py.test --version
This is pytest version 3.0.5, imported from /usr/lib/python2.6/site-packages/pytest.pyc

~ # pip install --upgrade setuptools
[...]
Successfully installed setuptools-30.3.0

~ # py.test --version
This is pytest version 3.0.5, imported from /usr/lib/python2.6/site-packages/pytest.pyc
setuptools registered plugins:
  pytest-cov-2.4.0 at /usr/lib/python2.6/site-packages/pytest_cov/plugin.py
&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;여기에 있는 다른 답변이 사용자에게 적합하지 않은 경우 시스템의 다른 곳에 py.test가 설치되어 있을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 경우에는 가상 환경 내부에서 여기 설명된 문제를 발견했지만, pytest가 시스템 설치(pytest-cov가 설치되지 않은)를 기본으로 하고 있는 것으로 드러났습니다.&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;pip3 freeze | grep pytest
&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;pip freeze | grep pytest&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;python2를 실행하고 있는 경우)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;찾을 경우 제거를 시도한 다음 가상 환경을 다시 활성화한 다음 다시 시도합니다.&lt;/font&gt;&lt;/p&gt;&lt;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;pipenv install pytest_cov
&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;내 Ubuntu에서, 나는 또한 비슷한 문제를 겪었는데 그것은 잘못된 바이너리 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pytest&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;py.test --version
This is pytest version 4.6.11, imported from /home/myhome/.local/lib/python2.7/site-packages/pytest.pyc
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 현재 python 설정)&lt;/font&gt;&lt;/font&gt;&lt;code&gt;python --version&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;3.7.7.&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 대신 이 일을 실행해야 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;python -m pytest --version
pytest 6.2.1
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마찬가지로 실행할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;python -m pytest file_name.py&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;python -m pytest --cov=my_project tests/&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&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;-m&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쓰지 않고&lt;/font&gt;&lt;/font&gt;&lt;code&gt;pytest&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쉽게 발생할 수 있기 때문에 현재 파이썬 환경에서 사용해야 하는 버전과 다른 버전을 가리킵니다. (&lt;a href=&quot;https://stackoverflow.com/questions/25749621/whats-the-difference-between-pip-install-and-python-m-pip-install&quot; papago-id=&quot;16-1&quot;&gt;여기&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;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;pytest=&quot;*&quot;
pytest-cov=&quot;*&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;효과가 나타나기 시작했죠&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/26589990/py-test-error-unrecognized-arguments-cov-ner-brands-cov-report-term-missi&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Python</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/738</guid>
      <comments>https://starjava.tistory.com/738#entry738comment</comments>
      <pubDate>Sun, 29 Oct 2023 18:55:40 +0900</pubDate>
    </item>
    <item>
      <title>url 변경 시 Angular UI-Router open modal window</title>
      <link>https://starjava.tistory.com/737</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;url 변경 시 Angular UI-Router open modal window&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;사용자가 &quot;편집&quot; 버튼을 클릭하면 UI-Router가 URL을 변경하고 modal 창을 엽니다.&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;모드 창을 열었을 때 사용자 다시 로드 페이지를 사용하면 애플리케이션은 모드 창 내용을 주 UI-뷰 컨테이너에 렌더링해야 합니다.&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;이 사이트에서 볼 수 있는 이 사용 사례: http://canopy.co/ (아이템을 클릭하고 페이지를 다시 로드해 보십시오.)&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;strong papago-id=&quot;6-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;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 제 jsFiddle http://jsfiddle.net/sloot/ceWqw/3/ 입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var app = angular.module('myApp', ['ui.router', 'ui.bootstrap'])
.config(function ($stateProvider, $urlRouterProvider) {

  $urlRouterProvider.otherwise('/');
  $stateProvider
    .state('app', {
      url: '/',
      controller: 'AppCtrl',
      templateUrl: '/views/app.html'
    })
    .state('item', {
      url: '/profile',
      controller: 'ItemCtrl',
      templateUrl: '/views/item.html'
    });
})
.controller('AppCtrl', function($scope, $modal, $state){
  $scope.open = function(){

    // open modal whithout changing url
    $modal.open({
      templateUrl: '/views/item.html'
    });

    // I need to open popup via $state.go or something like this
  };
})
.controller('ItemCtrl', function(){});
&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;여기 ui-router FAQ에 대한 좋은 예가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;키는 onEnter 매개변수를 사용하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions#how-to-open-a-dialogmodal-at-a-certain-state&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions#how-to-open-a-dialogmodal-at-a-certain-state&lt;/font&gt;&lt;/a&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;다음은 ui-bootstrap의 $modal 서비스를 이용한 예시입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 예제에서는 onEnter 함수만 지정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;템플릿, 컨트롤러 등이 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 기본적으로 모달이 표시된 다음 닫히면 항목 상태로 돌아갑니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모드가 닫힐 때 앱이 전환하는 상태를 처리할 책임은 여전히 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;$stateProvider.state(&quot;items.add&quot;, {
    url: &quot;/add&quot;,
    onEnter: function($stateParams, $state, $modal, $resource) {
        $modal.open({
            templateUrl: &quot;items/add&quot;,
            resolve: {
              item: function() { new Item(123).get(); }
            },
            controller: ['$scope', 'item', function($scope, item) {
              $scope.dismiss = function() {
                $scope.$dismiss();
              };

              $scope.save = function() {
                item.update().then(function() {
                  $scope.$close(true);
                });
              };
            }]
        }).result.finally(function() {
            $state.go('^');
        });
    }
});
&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;다음은 UI-Router's Github에서 수행하려는 작업을 설명하는 문제입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/angular-ui/ui-router/issues/317&quot; rel=&quot;nofollow&quot; papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Pinterest의 오버레이와 유사한 상태 전환&lt;/font&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;이 &lt;a href=&quot;https://github.com/angular-ui/ui-router/issues/317#issuecomment-23336124&quot; rel=&quot;nofollow&quot; papago-id=&quot;13-1&quot;&gt;답변&lt;/a&gt;에서 구현 내용을 확인하실 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 원하는 효과를 얻을 수 있는 방법은 최신 버전으로 패치가 적용되었으며 기능을 유지하기 위해 이전 버전의 UI-Router를 사용하고 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/21652428/angular-ui-router-open-modal-window-on-url-change&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularjs</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/737</guid>
      <comments>https://starjava.tistory.com/737#entry737comment</comments>
      <pubDate>Sun, 29 Oct 2023 18:55:33 +0900</pubDate>
    </item>
    <item>
      <title>MySQL로 채워진 목록 상자 필터링</title>
      <link>https://starjava.tistory.com/736</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL로 채워진 목록 상자 필터링&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;내 것으로 하고 싶지만, 그들과는 달리 내 목록 상자는 MySQL 레코드 집합을 사용하여 채워지는 반면 그들은 Excel 스프레드시트를 사용합니다.&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;제 실제 코드가 있는데 여기 SelectProduct는 제 User form이고 ListRef는 제 Listbox입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-vb prettyprint-override&quot;&gt;&lt;code&gt;  Requete = &quot;SELECT Reference,Nom,Marque,PrixVente FROM Produits_Beta&quot;
            rs.Open Requete, oConnect


SelectProduct.ListeRef.Clear
SelectProduct.ListeRef.Column = rs.GetRows
&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;Listbox는 곧 700 이상의 결과를 보여줄 것이고 나는 내 사용자가 필요한 것을 찾기 위해 그것들을 필터링할 수 있는 방법이 필요합니다.&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;스프레드시트를 사용하여 목록 상자 값을 가져온 경우 필터 코드는 다음과 같습니다. (원래 Ralph에서 온 코드)&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-vb prettyprint-override&quot;&gt;&lt;code&gt;Dim i As Long
Dim arrList As Variant

Me.ListeRef.Clear
If TheoricalSheet.Range(&quot;A&quot; &amp;amp; TheoricalSheet.Rows.Count).End(xlUp).Row &amp;gt; 1 And Trim(Me.TXBoxFilter.Value) &amp;lt;&amp;gt; vbNullString Then
    arrList = TheoricalSheet.Range(&quot;A1:A&quot; &amp;amp; TheoricalSheet.Range(&quot;A&quot; &amp;amp; TheoricalSheet.Rows.Count).End(xlUp).Row).Value2
    For i = LBound(arrList) To UBound(arrList)
        If InStr(1, arrList(i, 1), Trim(Me.TXBoxFilter.Value), vbTextCompare) Then
            Me.ListeRef.AddItem arrList(i, 1)
        End If
    Next i
End If
If Me.ListeRef.ListCount = 1 Then Me.ListeRef.Selected(0) = True
&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 테이블을 모두 붙여넣을 수 있는 방법이 필요합니다. 하지만 저는 이 방법을 전혀 모릅니다.&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;SQL 데이터를 표시하기 위해 필터링하는 표준 방법은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;WHERE&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;7,700,700,700만 줄이 있을 때 효과가 있을 겁니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 다음과 같은 것을 시도해 볼 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; SELECT Reference,Nom,Marque,PrixVente 
   FROM Produits_Beta 
  WHERE Produit LIKE CONCAT('filter value', '%')
  ORDER BY Produit
  LIMIT 100
&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;filter value&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;처음 100개의 행을 얻을 수 있습니다. 사용자는 필터가 필요하다는 것을 빠르게 알 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;필터 값이 없으면, 당신은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;WHERE Produit LIKE '%'&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;Pom&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;WHERE Produit LIKE 'Pom%'&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;Pomme&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;Pomme de terre&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;Pomade&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,예를들면.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;19-0&quot;&gt;편집사용가능&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;%pom%&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;%&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;먼저 DBMS는 인덱스 조회를 사용하여 데이터를 찾을 수 없으므로 검색 속도가 느려집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;천 개의 행을 검색할 수 있으니, 이것은 중요하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;수백만 개의 행이 있다면, 그것은 매우 중요합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;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;DBMS는 이를 위해 구축됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;DBMS의 핵심은 소프트웨어가 방대한 데이터 집합을 효율적으로 처리할 수 있도록 하는 것입니다.&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;strong papago-id=&quot;23-0&quot;&gt;프로 팁&lt;/strong&gt;:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;항상사용&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ORDER BY&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;em papago-id=&quot;24-1&quot;&gt;불안정한 정렬&lt;/em&gt;이라고 하며 사용자를 미치게 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;워크시트.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;보이는 속성에는 다음과 같은 세 가지 옵션이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;xlSheetVisible 'The usual visible worksheet.
xlSheetHidden 'Worksheet that is hidden but may be turned visible by the user.
xlSheetVeryHidden 'Worksheet that is hidden but may only be turned visible via VBA.
&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;이 데이터를 받기 위해 숨겨진 시트를 생성하는 경우 다음과 같이 시도할 수 있습니다. 워크북에 ws라는 이름의 워크시트를 처음 생성했다고 가정해 보겠습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 레코드 집합에서 데이터를 가져오려면 레코드 집합의 레코드를 순환한 다음 각 레코드의 값을 행으로 복사해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;'Header
With ws
    .Cells(1,1) = &quot;Reference&quot;
    .Cells(1,2) = &quot;Nom&quot;
    .Cells(1,3) = &quot;Marque&quot;
    .Cells(1,4) = &quot;PrixVente&quot;
End With

'Rows
Dim i as Long: i = 2

with Requete
    If not (.EOF and .BOF) then
        .movefirst

        Do until .EOF                
            ws.Cells(i,1) = .Fields(&quot;Reference&quot;)
            ws.Cells(i,2) = .Fields(&quot;Nom&quot;)
            ws.Cells(i,3) = .Fields(&quot;Marque&quot;)
            ws.cells(i,4) = .Fields(&quot;PrixVente&quot;)

            .MoveNext
            i=i+1
        Loop
    End If
End With
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 사용자가 시트에 액세스하지 않으려면 다음 작업만 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;ws.visible = xlSheetVeryHidden
&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;또한 필요에 따라 목록 상자를 알파벳 순으로 채우도록 SQL 쿼리에 데이터를 주문하는 것이 좋을 수도 있습니다.&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/52496468/filter-a-listbox-thats-filled-with-mysql&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/736</guid>
      <comments>https://starjava.tistory.com/736#entry736comment</comments>
      <pubDate>Sun, 29 Oct 2023 18:55:26 +0900</pubDate>
    </item>
    <item>
      <title>web.config에서 root (/) 위치를 지정하는 방법?</title>
      <link>https://starjava.tistory.com/735</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;web.config에서 root (/) 위치를 지정하는 방법?&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;인증되지 않은 사용자가 액세스할 수 있도록 web.config에서 루트 위치를 어떻게 지정합니까?&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;루트 위치는 default.aspx로 제공되지만 사용자는 일반적으로 default.aspx를 볼 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;http://mysite.com/&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;  &amp;lt;location path=&quot;~/default.aspx&quot;&amp;gt;
    &amp;lt;system.web&amp;gt;
      &amp;lt;authorization&amp;gt;
        &amp;lt;allow users=&quot;*&quot;/&amp;gt;
      &amp;lt;/authorization&amp;gt;
    &amp;lt;/system.web&amp;gt;
  &amp;lt;/location&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 공격할 경우 작동하는 것&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mysite.com/default.aspx&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;mysite.com/&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;- 여전히 로그인 페이지로 리디렉션됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;노력했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;location path=&quot;~&quot;&amp;gt;&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;location path=&quot;~/&quot;&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;code&gt;&amp;lt;location path=&quot;&quot;&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(사이트가 완전히 실패합니다). 그리고 작동할 수 없습니다.&lt;/font&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;system.web&amp;gt;
    &amp;lt;urlMappings enabled=&quot;true&quot;&amp;gt;
        &amp;lt;add url=&quot;~/&quot; mappedUrl=&quot;~/default.aspx&quot; /&amp;gt;
    &amp;lt;/urlMappings&amp;gt;
    &amp;lt;authorization&amp;gt;
        &amp;lt;allow roles=&quot;admin&quot;/&amp;gt;
        &amp;lt;deny users=&quot;*&quot; /&amp;gt;
    &amp;lt;/authorization&amp;gt;
&amp;lt;/system.web&amp;gt;
&amp;lt;location path=&quot;Default.aspx&quot;&amp;gt;
    &amp;lt;system.web&amp;gt;
        &amp;lt;authorization&amp;gt;
            &amp;lt;allow users=&quot;*&quot; /&amp;gt;
        &amp;lt;/authorization&amp;gt;
    &amp;lt;/system.web&amp;gt;
&amp;lt;/location&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;&amp;lt;location path=&quot;.&quot;&amp;gt;
&amp;lt;system.web&amp;gt;
  &amp;lt;authorization&amp;gt;
    &amp;lt;allow users=&quot;*&quot;/&amp;gt;
  &amp;lt;/authorization&amp;gt;
&amp;lt;/system.web&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본 경로는 root(.)이므로 경로를 쓰지 마십시오.&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;2가지 방법으로 달성할 수 있습니다.&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;방법 1:&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;IIS에서 http://mysite.com/default.aspx 로 리디렉션 경로를 설정할 수 있습니다. 사용자가 직접 site.in IIS7로 오는 경우 기본 문서를 클릭하여 이를 수행할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고할만한 이미지를 첨부하였습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/JV0Vx.png&quot; alt=&quot;IIS7 setting to add your default page redirection&quot;&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;방법2&lt;/font&gt;&lt;/strong&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;이 URL &lt;a href=&quot;http://www.misfitgeek.com/2010/07/asp-net-membership-handling-authenticated-users-that-are-not-authorized/&quot; papago-id=&quot;20-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;ASp&lt;/a&gt;를 통과하시면 됩니다&lt;a href=&quot;http://www.misfitgeek.com/2010/07/asp-net-membership-handling-authenticated-users-that-are-not-authorized/&quot; papago-id=&quot;20-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;.&lt;/a&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹 &lt;a href=&quot;http://www.misfitgeek.com/2010/07/asp-net-membership-handling-authenticated-users-that-are-not-authorized/&quot; papago-id=&quot;20-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;구성&lt;/a&gt; 설정을 설정하는 NET &lt;a href=&quot;http://www.misfitgeek.com/2010/07/asp-net-membership-handling-authenticated-users-that-are-not-authorized/&quot; papago-id=&quot;20-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;Membership&lt;/a&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;과거에는 로그인과 set require auth를 필요로 하는 모든 기능을 위한 폴더를 만드는 방식이었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 aspx는 해당 폴더로 이동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사이트의 루트가 열려 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 아마도 양식 인증 번호를 사용할 것입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;authentication mode=&quot;Forms&quot;&amp;gt;
   &amp;lt;forms loginUrl=&quot;~/Default.aspx&quot; /&amp;gt;
&amp;lt;/authentication&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이렇게 하면 문제가 해결됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대안은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  &amp;lt;location path=&quot;~/Default.aspx&quot;&amp;gt;
    &amp;lt;system.web&amp;gt;
      &amp;lt;authorization&amp;gt;
        &amp;lt;allow users=&quot;*&quot;/&amp;gt;
      &amp;lt;/authorization&amp;gt;
    &amp;lt;/system.web&amp;gt;
  &amp;lt;/location&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인증되지 않은 사용자만 &lt;strong papago-id=&quot;25-1&quot;&gt;default.aspx&lt;/strong&gt;에 액세스할 수 있도록 하려면 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  &amp;lt;location path=&quot;Default.aspx&quot;&amp;gt;
    &amp;lt;system.web&amp;gt;
      &amp;lt;authorization&amp;gt;
        &amp;lt;allow users=&quot;*&quot;/&amp;gt;
      &amp;lt;/authorization&amp;gt;
    &amp;lt;/system.web&amp;gt;
  &amp;lt;/location&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;전에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;system.web&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;웹 서버에서 해당 페이지를 기본값으로 설정합니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Visual Studio에서 페이지와 &quot;시작 페이지로 설정&quot;을 선택할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;루트에 있는 모든 파일에 대한 액세스를 허용하려면 인증된 사용자가 액세스해야 하는 페이지를 넣을 폴더를 만들어야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보호된 모든 페이지를 넣고 web.config를 다음과 같은 방법으로 변경할 수 있는 &lt;strong papago-id=&quot;30-1&quot;&gt;보안&lt;/strong&gt; 폴더를 만들 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  &amp;lt;location path=&quot;Secure&quot;&amp;gt;
    &amp;lt;system.web&amp;gt;
      &amp;lt;authorization&amp;gt;
        &amp;lt;deny users=&quot;?&quot;/&amp;gt;
      &amp;lt;/authorization&amp;gt;
    &amp;lt;/system.web&amp;gt;
  &amp;lt;/location&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제거하기&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    &amp;lt;authorization&amp;gt;
        &amp;lt;deny users=&quot;?&quot;/&amp;gt;
    &amp;lt;/authorization&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;루트 디렉터리를 지정하려면 위치 블록 외부에 설정해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;configuration&amp;gt; 
  &amp;lt;system.web&amp;gt;
    &amp;lt;authorization&amp;gt;
      &amp;lt;allow users=“*“/&amp;gt;
    &amp;lt;/authorization&amp;gt;
  &amp;lt;/system.web&amp;gt;
&amp;lt;/configuration&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위치 블록을 사용하여 다른 폴더를 보호합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;location path=“AccessDenied.aspx“&amp;gt;
    &amp;lt;system.web&amp;gt;
        &amp;lt;authorization&amp;gt;
            &amp;lt;deny users=“?“/&amp;gt;
        &amp;lt;/authorization&amp;gt;
    &amp;lt;/system.web&amp;gt;
&amp;lt;/location&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용 방법:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;location path=&quot;Default.aspx&quot;&amp;gt;
  &amp;lt;system.web&amp;gt;
    &amp;lt;authorization&amp;gt;
      &amp;lt;allow users=&quot;*&quot;/&amp;gt;
    &amp;lt;/authorization&amp;gt;
  &amp;lt;/system.web&amp;gt;
&amp;lt;/location&amp;gt;
&amp;lt;location path=&quot;~&quot;&amp;gt;
  &amp;lt;system.web&amp;gt;
    &amp;lt;authorization&amp;gt;
      &amp;lt;allow users=&quot;*&quot;/&amp;gt;
    &amp;lt;/authorization&amp;gt;
  &amp;lt;/system.web&amp;gt;
&amp;lt;/location&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저한테는 효과가 있어요.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;머크가 옳았어요!&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;location path=&quot;&quot;&amp;gt;
            &amp;lt;system.webServer&amp;gt;
                &amp;lt;httpRedirect enabled=&quot;true&quot; destination=&quot;http://www.newpathdestination.com&quot; exactDestination=&quot;true&quot; httpResponseStatus=&quot;Permanent&quot; /&amp;gt;
            &amp;lt;/system.webServer&amp;gt;
        &amp;lt;/location&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows netserver(묻지마)에서 위치 경로에 대한 따옴표 사이에 아무것도 넣지 마십시오.&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;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;디렉터리의 루트를 지정하려면 다음을 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;location path=&quot;&quot; &amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/9358004/how-to-specify-root-location-in-web-config&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>ASP.NET</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/735</guid>
      <comments>https://starjava.tistory.com/735#entry735comment</comments>
      <pubDate>Tue, 24 Oct 2023 20:04:52 +0900</pubDate>
    </item>
    <item>
      <title>C에서 추상 구문 트리 표현</title>
      <link>https://starjava.tistory.com/734</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C에서 추상 구문 트리 표현&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 C에서 간단한 장난감 언어를 위한 컴파일러를 구현하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 AST의 개념적인 기능/구성에 대한 합리적인 배경을 가지고 있는 스캐너와 파서를 가지고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 질문은 C에서 AST를 표현하는 구체적인 방법과 관련된 것입니다.&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;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;노드 유형당 하나의 구조입니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 자식 구조의 첫 번째 필드인 기본 노드 &quot;class&quot;(구조)가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본 노드에는 노드 유형(상수, 이진 연산자, 할당 등)을 저장하는 열거형이 포함되어 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;구조의 구성원은 구조당 하나의 집합이 있는 매크로 집합을 사용하여 액세스합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;struct ast_node_base {
    enum {CONSTANT, ADD, SUB, ASSIGNMENT} class;
};

struct ast_node_constant {
    struct ast_node_base *base;
    int value;
};

struct ast_node_add {
    struct ast_node_base *base;
    struct ast_node_base *left;
    struct ast_node_base *right;
};

struct ast_node_assign {
    struct ast_node_base *base;
    struct ast_node_base *left;
    struct ast_node_base *right;
};

#define CLASS(node) ((ast_node_base*)node)-&amp;gt;class;

#define ADD_LEFT(node) ((ast_node_add*)node)-&amp;gt;left;
#define ADD_RIGHT(node) ((ast_node_add*)node)-&amp;gt;right;

#define ASSIGN_LEFT(node) ((ast_node_assign*)node)-&amp;gt;left;
#define ASSIGN_RIGHT(node) ((ast_node_assign*)node)-&amp;gt;right;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;노드 레이아웃당 하나의 구조물.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 구조의 레이아웃이 같고 base-&amp;gt; class의 내용만 다르기 때문에 ast_node_add와 ast_node_assign 대신 ast_node_binary를 사용하여 두 구조를 모두 나타내는 것을 제외하면 이는 위 레이아웃과 거의 동일한 것으로 보입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;장점은 매크로 쌍이 아닌 왼쪽과 오른쪽이 있는 모든 노드에 대해 더 균일한 매크로 집합(LEFT(노드))인 것처럼 보이지만 단점은 C 유형 검사가 유용하지 않을 것으로 보입니다(예를 들어 ast_node_add만 있어야 하는 경우 ast_node_assign을 탐지할 수 있는 방법은 없습니다).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서로 다른 유형의 노드 데이터를 보유할 수 있는 조합이 있는 하나의 구조 총계.&lt;/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;http://lambda.uta.edu/cse5317/notes/node25.html&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;pre&gt;&lt;code&gt;struct ast_node {
  enum { CONSTANT, ADD, SUB, ASSIGNMENT } class;
  union { int                                 value;
          struct { struct ast_node* left;    
                   struct ast_node* right;  } op;
};
&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;저는 세 번째 옵션을 가장 좋아하는 경향이 있는데, 그것은 재귀적 순회를 훨씬 쉽게 해주기 때문입니다. (많은 포인터 캐스팅이 조합에 유리하게 방지된다는 점에서) 하지만, 그것은 또한 C 타입 검사의 이점을 이용하지 않습니다.&lt;/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;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;9-0&quot;&gt;이 세 가지 계획 중에서 가장 좋은 것은 무엇이며, 그 이유는 무엇입니까?&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;9-0&quot;&gt; 제가 아직 보지 못한 네 번째 옵션이 더 있을까요?&lt;/strong&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;모든 솔루션이 &quot;모든 것에 맞는&quot; 솔루션이 아니라고 가정합니다. 따라서 구현하는 언어가 정적으로 입력된 명령형 언어, 거의 C의 작은 부분 집합입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;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;strong papago-id=&quot;10-1&quot;&gt;value 필드만 사용할 경우 op가 기록될 가능성을 수용하기 위해 value 뒤에 빈 공간이 발생합니까?&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 papago-id=&quot;12&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;13&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;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;오히려 심볼 테이블을 가지고 있고, 다양한 종류의 분석을 수행하고, 기계 수준 IR을 선택하고, 코드 생성기를 구축하고, 코드 최적화를 수행하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 실제 사용자를 만나게 되고 실제로 무엇을 잘못했는지 알게 될 것입니다 :-}&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 문제들에 접근할 수 있는 기회를 마련해 드릴 테니 제가 선택해서 다른 문제에 접근할 수 있도록 말이죠.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/21150454/representing-an-abstract-syntax-tree-in-c&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/734</guid>
      <comments>https://starjava.tistory.com/734#entry734comment</comments>
      <pubDate>Tue, 24 Oct 2023 20:04:43 +0900</pubDate>
    </item>
    <item>
      <title>디브 안에서 수직으로 중심을 잡는 방법은?</title>
      <link>https://starjava.tistory.com/733</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span papago-id=&quot;0-1&quot;&gt;디브 안&lt;/span&gt;에서 수직으로 중심을 잡는 방법은&lt;span papago-id=&quot;0-1&quot;&gt;?&lt;/span&gt;&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;이 질문에는 이미 다음&lt;/b&gt;과 같은 &lt;b papago-id=&quot;1-1&quot;&gt;답변이 있습니다&lt;/b&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;      &lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt4&quot;&gt; 
    &lt;a href=&quot;/questions/19461521/how-to-center-an-element-horizontally-and-vertically&quot; dir=&quot;ltr&quot; papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소를 수평과 수직으로 중심을 맞추는 방법&lt;/font&gt;&lt;/a&gt; 
    &lt;span class=&quot;question-originals-answer-count&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(27개 답변)&lt;/font&gt;&lt;/span&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;닫힘&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;4-1&quot; title=&quot;2015-02-05 04:40:47Z&quot; papago-attr-id=&quot;1&quot;&gt;8년 전&lt;/span&gt;에.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;   &lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div 
  id=&quot;theMainDiv&quot;
  style=&quot;
    border:solid 1px gray;
    cursor:text;
    width:400px;
    padding:0px;&quot;
&amp;gt;
  &amp;lt;span 
    id=&quot;tag1_outer&quot; 
    style=&quot;
      background:#e2e6f0;
      padding-right:4px;
      padding-left:4px;
      border:solid 1px #9daccc;
      font:normal 11px arial;
      color:#3c3c3c&quot;
  &amp;gt;as&amp;lt;/span&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;지금 렌더링하면 스팬은 디브의 왼쪽 하단 모서리를 정렬합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://phrogz.net/CSS/vertical-align/index.html&quot; papago-id=&quot;7-1&quot; rel=&quot;noreferrer&quot;&gt;수직 정렬&lt;/a&gt; 이해에 &lt;a href=&quot;http://phrogz.net/CSS/vertical-align/index.html&quot; papago-id=&quot;7-1&quot; rel=&quot;noreferrer&quot;&gt;관한&lt;/a&gt; 제 기사를 보세요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;토론의 마지막에 원하는 것을 달성하기 위한 여러 가지 기술이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em&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;top:50%&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;margin-top:-YYYpx&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, YYY는 알려진 아이의 키의 절반입니다.)&lt;/font&gt;&lt;/font&gt;&lt;/em&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;부모 DIV 추가 시&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;display:table;
&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; display:table-cell;
 vertical-align:middle;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;싱글라인 스팬에 대한 빠른 답변&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&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;line-height&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;&amp;lt;div&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 키&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;parent&quot;&amp;gt;
  &amp;lt;span class=&quot;child&quot;&amp;gt;Yes mom, I did my homework lol&amp;lt;/span&amp;gt;
&amp;lt;/div&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;그런 다음 CSS 규칙을 추가해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.parent { height: 20px; }
.child { line-height: 20px; vertical-align: middle; }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;br&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 자식 선택기로 목표물을 공격할 수도&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.parent { height: 20px; }
.parent &amp;gt; span { line-height: 20px; vertical-align: middle; }
&lt;/code&gt;&lt;/pre&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;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 모바일 메뉴에서 항목을 세로로 가운데에 두어야 하는 비슷한 문제를 우연히 발견했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;같은 선 높이 안에 디바와 스판을 만들었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 유성 프로젝트를 위한 것이므로 인라인 CSS를 사용하지 않습니다 ;)&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;international&quot;&amp;gt;        
  &amp;lt;span class=&quot;intlFlag&quot;&amp;gt;
    {{flag}}        
  &amp;lt;/span&amp;gt;

  &amp;lt;span class=&quot;intlCurrent&quot;&amp;gt;
    {{country}}
  &amp;lt;/span&amp;gt;

  &amp;lt;span class=&quot;intlButton&quot;&amp;gt;
    &amp;lt;i class=&quot;fa fa-globe&quot;&amp;gt;&amp;lt;/i&amp;gt;
  &amp;lt;/span&amp;gt; 
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;22-0&quot;&gt;CSS&lt;/strong&gt;(div의 여러 범위에 대한 옵션)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.international {
  height: 42px;
}

.international &amp;gt; span {
  line-height: 42px;
}
&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;이 경우 한 번의 스팬만 있었다면 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;CSS&lt;/strong&gt;(특정 스팬 하나에 대한 옵션)&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.intlFlag { line-height: 42px; }
&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;img src=&quot;https://i.stack.imgur.com/QgFKG.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;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/7617337/vertical-centering-a-block-a-in-ie7/8796289#8796289&quot; papago-id=&quot;26-0&quot;&gt;비슷한 질문과 마찬가지&lt;/a&gt;로 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;display: inline-block&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;html, body, #container, #placeholder { height: 100%; }

#content, #placeholder { display:inline-block; vertical-align: middle; }&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;!doctype html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;
  &amp;lt;head&amp;gt;
  &amp;lt;/head&amp;gt;

  &amp;lt;body&amp;gt;
    &amp;lt;div id=&quot;container&quot;&amp;gt;
      &amp;lt;span id=&quot;content&quot;&amp;gt;
        Content
      &amp;lt;/span&amp;gt;
      &amp;lt;span id=&quot;placeholder&quot;&amp;gt;&amp;lt;/span&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;수직 정렬은 &lt;a href=&quot;http://www.w3.org/TR/CSS2/visudet.html#line-height&quot; papago-id=&quot;28-1&quot; rel=&quot;noreferrer&quot;&gt;인라인 요소&lt;/a&gt; 또는 &lt;a href=&quot;http://www.w3.org/TR/CSS2/visudet.html#line-height&quot; papago-id=&quot;28-1&quot; rel=&quot;noreferrer&quot;&gt;테이블 셀&lt;/a&gt;에만 적용되므로 함께 사용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;display:inline-block&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;display:table-cell&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;display:table&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;블록 요소를 수직으로 중심을 잡을 때 부모.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참조:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.brunildo.org/test/img_center.html&quot; rel=&quot;noreferrer&quot; papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS 수평 및 수직 센터링&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;부모 디바에 키를 더하면 50px라고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자식 스팬에서 선 높이: 50px를 추가합니다. 이제 스팬의 텍스트가 수직으로 가운데가 됩니다.&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/4357315/how-to-vertically-center-a-span-inside-a-div&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>CSS</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/733</guid>
      <comments>https://starjava.tistory.com/733#entry733comment</comments>
      <pubDate>Tue, 24 Oct 2023 20:04:36 +0900</pubDate>
    </item>
    <item>
      <title>HTML이 아닌 요청에 대한 응답으로 컨텐츠 보안 정책을 설정한다는 것은 무엇을 의미합니까?</title>
      <link>https://starjava.tistory.com/732</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML이 아닌 요청에 대한 응답으로 컨텐츠 보안 정책을 설정한다는 것은 무엇을 의미합니까?&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;사이트의 메인 페이지에 대해 CSP 헤더를 설정할 수 있음을 알고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;https://example.com&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 스크립트 및 기타 리소스를 로드할 수 있는 위치를 제한합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 메인 페이지에 &lt;strong papago-id=&quot;1-1&quot;&gt;CSP가 없는&lt;/strong&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;ol&gt; 
 &lt;li&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;https://example.com&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML을 가져오십시오(CSP 헤더 없음).&lt;/font&gt;&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;HTML에는 다음의 스크립트가 포함됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;https://example.com/script.js&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;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 스크립트는 GET을 실행하여 API로부터 일부 데이터를 요청합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;https://api.example.com&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;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;https://api.example.com&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러면 동일한 스크립트가 또 다른 요청을 하고, 외부에 게시합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;https://api.analytics.com&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;[*] 2단계와 3단계에서 script.js 또는 JSON 응답이 restrictve CSP와 함께 돌아온다면 어떻게 될까요?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Content-Security-Policy: default-src 'none'&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;? 다운스트림 요청사항이 변경됩니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;브라우저가 스크립트의 요청을 방지하기 위해 어떤 조치를 취합니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 원래 페이지 로드에 CSP가 포함되지 않았기 때문에 허용됩니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사합니다!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://www.w3.org/TR/2015/CR-CSP2-20150721/#which-policy-applies&quot; rel=&quot;noreferrer&quot; papago-id=&quot;15-1&quot;&gt;현재 CSP 사양&lt;/a&gt;(버전 2)에는 다음과 같이 나와 있습니다(emphasis mine).&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&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;3.6. 정책 적용 가능성&lt;/font&gt;&lt;/strong&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;strong papago-id=&quot;17-1&quot;&gt;예&lt;/strong&gt;를 들어 &lt;strong papago-id=&quot;17-1&quot;&gt;스크립트&lt;/strong&gt;, 이미지 또는 스타일시트를 문서에 포함할 때 리소스가 새 실행 &lt;strong papago-id=&quot;17-1&quot;&gt;컨텍스트를 만들지 않으면&lt;/strong&gt; &lt;strong papago-id=&quot;17-3&quot;&gt;해당 리소스와 함께&lt;/strong&gt; 전송된 &lt;strong papago-id=&quot;17-3&quot;&gt;정책&lt;/strong&gt;은 효과 &lt;strong papago-id=&quot;17-3&quot;&gt;없이 삭제&lt;/strong&gt;됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;실행은 포함된 컨텍스트의 정책 또는 정책에 따라 결정됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSP는 다음과 같은 상위 수준의 문서, 내장된 객체만을 포함하는 새로운 실행 컨텍스트(즉, 웹 페이지)를 생성하는 리소스에만 적용됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;iframe&amp;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;s, 스크립트가 웹 작업자로 로드됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;리소스가 HTTP를 통해 제공되고 해당 리소스가 새 실행 컨텍스트를 생성하는 방식으로 사용되지 않으면 CSP는 영향을 미치지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 스크립트는 해당 스크립트와 함께 제공되는지 여부에 관계없이 동일하게 동작합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Content-Security-Policy&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;머리말&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/37819249/what-does-it-mean-to-set-a-content-security-policy-on-response-to-a-non-html-req&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Ajax</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/732</guid>
      <comments>https://starjava.tistory.com/732#entry732comment</comments>
      <pubDate>Tue, 24 Oct 2023 20:04:28 +0900</pubDate>
    </item>
    <item>
      <title>scanf 형식 지정자의 별표는 무엇을 의미합니까?</title>
      <link>https://starjava.tistory.com/731</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;scanf 형식 지정자의 별표는 무엇을 의미합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;div&gt; 
 &lt;aside class=&quot;s-notice s-notice__info post-notice js-post-notice mb16&quot; role=&quot;status&quot;&gt; 
  &lt;div class=&quot;d-flex fd-column fw-nowrap&quot;&gt; 
   &lt;div class=&quot;d-flex fw-nowrap&quot;&gt; 
    &lt;div class=&quot;flex--item wmn0 fl1 lh-lg&quot;&gt; 
     &lt;div class=&quot;flex--item fl1 lh-lg&quot;&gt; 
      &lt;div papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;b papago-id=&quot;1-1&quot;&gt;이 질문에는 이미 다음&lt;/b&gt;과 같은 &lt;b papago-id=&quot;1-1&quot;&gt;답변이 있습니다&lt;/b&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;      &lt;/font&gt;&lt;/div&gt; 
     &lt;/div&gt; 
    &lt;/div&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt4&quot;&gt; 
    &lt;a href=&quot;/questions/11109750/what-is-the-difference-between-cc-and-c-as-a-format-specifier-to-scanf&quot; dir=&quot;ltr&quot; papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스캔할 형식 지정자로서 %*c%c와 %c의 차이점은 무엇입니까?&lt;/font&gt;&lt;/a&gt; 
    &lt;span class=&quot;question-originals-answer-count&quot; papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(3개 답변)&lt;/font&gt;&lt;/span&gt; 
   &lt;/div&gt; 
   &lt;div class=&quot;flex--item mb0 mt8&quot; papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;
&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;닫힘&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;span class=&quot;relativetime&quot; papago-id=&quot;4-1&quot; title=&quot;2016-01-19 20:03:49Z&quot; papago-attr-id=&quot;1&quot;&gt;7년 전&lt;/span&gt;에.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;   &lt;/font&gt;&lt;/div&gt; 
  &lt;/div&gt; 
 &lt;/aside&gt; 
&lt;/div&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 우연히 이 코드를 발견했는데 그 코드의 목적이 무엇인지, 어떻게 작동하는지 알 수 없었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int word_count;
scanf(&quot;%d%*c&quot;, &amp;amp;word_count);
&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;%*d&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;A를 참조하고 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&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;word_count&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;char&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;변수들.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누가 이것에 대해 좀 설명해 주실 수 있습니까?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;*c&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 입력 &quot;30a&quot;의 경우 문자가 읽히지만 할당되지 않음을 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;word_count&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 하지만 'a'는 무시됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그&lt;/font&gt;&lt;/font&gt;&lt;code&gt;*&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인에&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;%*c&quot;&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;assignment-suppressing character *&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;em papago-id=&quot;17-1&quot;&gt;이 옵션이 있으면 함수는 변환 결과&lt;/em&gt;를 수신 &lt;em papago-id=&quot;17-1&quot;&gt;인수에 할당하지 않습니다.&lt;/em&gt;&lt;sup papago-id=&quot;17-2&quot;&gt;1&lt;/sup&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&gt;&lt;sub&gt;&lt;strong papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;각주:&lt;/font&gt;&lt;/strong&gt;&lt;/sub&gt;&lt;/p&gt; 
&lt;p&gt;&lt;sub papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1. &lt;a href=&quot;http://en.cppreference.com/w/c/io/fscanf&quot; rel=&quot;nofollow&quot; papago-id=&quot;19-1&quot;&gt;fscanf&lt;/a&gt;&lt;/font&gt;&lt;/sub&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;C11&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;표준, 챕터 §7.21.6.2,&lt;em papago-id=&quot;21-1&quot;&gt; &lt;/em&gt;fscanf&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;[...] 각 변환 사양은 문자에 의해 소개됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;%&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. % 다음에는 다음과 같은 순서로 나타납니다.&lt;/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;*&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;br&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;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;— &lt;em papago-id=&quot;27-1&quot;&gt;변환 지정자&lt;/em&gt; 문자&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&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;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;[..] 할당 억제가 A에 의해 지시되지 않는 한&lt;/font&gt;&lt;/font&gt;&lt;code&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;/p&gt; 
&lt;/blockquote&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;&quot;%*c&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;,a&lt;/font&gt;&lt;/font&gt;&lt;code&gt;char&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;stdin&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스캔된 값은 저장되거나 어떤 것에도 할당되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 해당 파라미터를 제공할 필요가 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/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;scanf(&quot;%d%*c&quot;, &amp;amp;word_count);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;36-1&quot;&gt;완벽하게 유효&lt;/strong&gt;한 진술입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 *nix 환경에서는 입력 버퍼를 삭제합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;newline&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;/p&gt;&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/34874347/what-does-an-asterisk-in-a-scanf-format-specifier-mean&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/731</guid>
      <comments>https://starjava.tistory.com/731#entry731comment</comments>
      <pubDate>Tue, 24 Oct 2023 20:04:22 +0900</pubDate>
    </item>
    <item>
      <title>sql에서 일 년에 몇 개월 동안 각 달에 대한 합계 얻기</title>
      <link>https://starjava.tistory.com/730</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;sql에서 일 년에 몇 개월 동안 각 달에 대한 합계 얻기&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;br&gt; &lt;font papago-translate=&quot;splited&quot;&gt;&lt;a href=&quot;https://i.stack.imgur.com/K45VS.png&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용 중인 데이터베이스 이미지&lt;/font&gt;&lt;/a&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 다음과 같은 결과를 얻고 싶습니다.&lt;/font&gt;&lt;/font&gt;&lt;/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;jan 12500&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;16500년 2월&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mar 4500&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;apr 6500&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리는 원하는 달에 대해 각 달에 대한 총합을 반환해야 합니다. 나는 이것을 어떻게 하는지 알고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    $sql = &quot;SELECT SUM(cost) as january FROM earnings WHERE month= 1 and year= '$2022&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;font class=&quot;papago-parent&quot;&gt;아직 이것은 처음입니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;SELECT 
   SUM(cost) as cost,
   month 
FROM earnings 
WHERE year = :year  
GROUP BY month 
&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;연도(:year)에 발견된 모든 비용 항목을 월별(GROUP BY)로 합산합니다. 각 행에는 열이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;cost&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;month&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;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;월을 &quot;추가&quot; 필터링하려면 다른 AND 조항을 적용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;AND (month &amp;gt;= 1 OR month &amp;lt;= 6)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1월부터 6월까지&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;유용한 출처: https://www.mysqltutorial.org/mysql-group-by.aspx&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/71159053/getting-sum-for-each-month-for-several-months-in-a-year-in-sql&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/730</guid>
      <comments>https://starjava.tistory.com/730#entry730comment</comments>
      <pubDate>Tue, 24 Oct 2023 20:04:16 +0900</pubDate>
    </item>
    <item>
      <title>하나의 SQL 문을 사용하여 MySQL 데이터베이스의 모든 트리거를 삭제하려면 어떻게 해야 합니까?</title>
      <link>https://starjava.tistory.com/729</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하나의 SQL 문을 사용하여 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;복제한 DB가 있는데, 이제 모든 로깅 트리거가 원래 스키마의 로그 테이블을 가리킵니다.&lt;/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;SELECT Concat('DROP TRIGGER ', Trigger_Name, ';') FROM  information_schema.TRIGGERS WHERE TRIGGER_SCHEMA = 'your_schema';
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;생성된 sql을 복사하여 붙여넣기&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 오래된 질문이지만 검색에 계속 뜨기 때문에 해결책을 여기에 게시해야겠다고 생각했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 경우에는 전체 파일이 있는 파일 하나를 만들어야 했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;mysqldump&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 모든 트리거를 삭제한 다음 다시 추가합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 다음 명령을 사용하여 다음을 추가함으로써 그것을 할 수 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;DROP TRIGGER&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;트리거의 덤프를 추가하기 전에 내 덤프에 대한 설명입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql -u [db user] -p[db password] --skip-column-names [db name] -e 'SHOW TRIGGERS;' | cut -f1 | sed -r 's/(.*)/DROP TRIGGER IF EXISTS \1;/' &amp;gt;&amp;gt; dump.sql
&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;@Stephen Crosby가 주석에서 언급한 것처럼 동일한 명령에 있는 모든 트리거를 실제로 삭제하려면 다음과 같이 MySQL로 다시 파이프링하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql -u [db user] -p[db password] --skip-column-names [db name] -e 'SHOW TRIGGERS;' | cut -f1 | sed -r 's/(.*)/DROP TRIGGER IF EXISTS \1;/' | mysql -u [db user] -p[db password] [db name]
&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;그러나 일반 SQL 문이나 저장 프로시저에서는 불가능합니다.&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;모든 트리거를 삭제하는 가장 간단한 솔루션은 bash 스크립트일 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;echo &quot;select concat('drop trigger ', trigger_name, ';')
  from information_schema.triggers where trigger_schema = 'your_database'&quot; |
  mysql --defaults-extra-file=.mysql.conf --disable-column-names | 
  mysql --defaults-extra-file=.mysql.conf
&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;.mysql.conf&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;) 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;[client]
database=your_database
user=your_username
password=your_password
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;추리&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저장 프로시저에서 트리거를 삭제하려고 하면 실패합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;변수가 문자열만 담을 수 있기 때문에 이런 일이 일어나는 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;drop trigger&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;트리거 이름이 필요합니다(트리거 이름을 포함하는 문자열이 아님).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;create procedure drop_a_trigger()
begin
  declare var1 varchar(1024);
  set var1 = &quot;my_second_trigger&quot;;

  drop trigger my_first_trigger;       // OK
  drop trigger address_update_before;  // ERROR 1360 (HY000): Trigger does not exist

end //
delimiter ;

call drop_a_trigger();
&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;MySQL 포럼에는 다음과 같은 두 가지 스레드가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;http://forums.mysql.com/read.php?98,304699,304699#msg-304699&quot; papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저장 프로시저에서 폐기문&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://forums.mysql.com/read.php?98,429347,429347&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;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;둘 다 저장된 절차를 사용하는 것조차 도움이 되지 않는다는 같은 결론에 도달합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하나의 SQL 문을 사용하여 MySQL 데이터베이스의 모든 트리거를 삭제할 수는 없습니다.&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;그러나 다음 SQL 코드를 사용하면 모든 'DROP TRIGER' 문 목록을 만들 수 있습니다&lt;strong papago-id=&quot;20-1&quot;&gt;&lt;em papago-id=&quot;20-1-1&quot;&gt;(&amp;lt;your_schema&amp;gt;&lt;/em&gt;&lt;/strong&gt;를&lt;strong papago-id=&quot;20-1&quot;&gt; 스키마 이름(예: 데이터베이스 이름)&lt;/strong&gt;으로 대체).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;-- set `group_concat_max_len`
SET @@session.group_concat_max_len = @@global.max_allowed_packet;

-- select all the triggers and build the `DROP TRIGGER` SQL
-- replace &amp;lt;your_schema&amp;gt; with your schema name (e.g. your database name)
SELECT GROUP_CONCAT(sql_string SEPARATOR '\n')
FROM (
    SELECT CONCAT('DROP TRIGGER IF EXISTS `', TRIGGER_NAME, '`;') AS sql_string,'1'
    FROM information_schema.TRIGGERS WHERE TRIGGER_SCHEMA = '&amp;lt;your_schema&amp;gt;'
    ) AS sql_strings
GROUP BY '1';
&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;DROP TRIGGER IF EXISTS `trigger1`;
DROP TRIGGER IF EXISTS `trigger2`;
(...)
&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;그리고 이러한 SQL 문을 사용하여 모든 트리거를 최종적으로 삭제할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서버 시스템 변수 &lt;a href=&quot;https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_group_concat_max_len&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;23-1&quot;&gt;group_concat_max_len&lt;/a&gt;은 GROUP_CONCAT() 함수에 허용되는 최대 결과 길이(바이트)입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본값이 1024이기 때문에 트리거가 많으면 결과가 잘리는 것을 방지하려면 이 값을 늘려야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;방금 서버 시스템 변수 &lt;a href=&quot;https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_max_allowed_packet&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;23-3&quot;&gt;max_allowed_packet&lt;/a&gt; 값을 사용했는데 보통 큰 정수라도 괜찮습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/529105/trouble-with-concat-and-longtext&quot; papago-id=&quot;23-5&quot;&gt;다른 질문&lt;/a&gt;을 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;SELECT Trigger_Name
FROM `information_schema`.`TRIGGERS`
WHERE TRIGGER_SCHEMA = 'your_schema';
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결과를 클립보드에 복사&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;Trigger_name&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;DROP TRIGGER &amp;lt;trigger_name&amp;gt;;&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;reg.expression으로 시작 및 끝 줄에 대해 ^ 및 S 태그를 사용하여 각 트리거에 대해&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;sql 스크립트로 실행&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 목적을 위한 단일 명령이 존재하는지 확실하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 얼마 전에 제가 한 방법은 이렇습니다.&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;스크립트를 작성하여 db의 트리거 목록을 가져옵니다.&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;dropTrigger.sql 파일에 Concated list 생성&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;dropTrigger(트리거를 실행합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 파일&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;트리거 목록을 가져오려면 &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.6/en/triggers-table.html&quot; papago-id=&quot;34-3&quot; rel=&quot;nofollow&quot;&gt;정보 스키마&lt;/a&gt;에서 &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.6/en/show-triggers.html&quot; rel=&quot;nofollow&quot; papago-id=&quot;34-1&quot;&gt;SHOW 트리거&lt;/a&gt; 또는 트리거 &lt;a href=&quot;http://dev.mysql.com/doc/refman/5.6/en/triggers-table.html&quot; papago-id=&quot;34-3&quot; rel=&quot;nofollow&quot;&gt;테이블을 사용&lt;/a&gt;할 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;strong papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MAMP를 사용한 MAC:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우리를 위해 받아들여진 답변에 대해 약간의 수정이 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, , MAMP의 mysql다입니다&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 두번째로,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sed -r&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;Mac에서는 작동하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sed -E&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;em papago-id=&quot;12-1&quot;&gt;root 사용자 기본값&lt;/em&gt;에 대한 &lt;em papago-id=&quot;12-1&quot;&gt;변경 사항&lt;/em&gt;이 없는 표준 MAMP 설정을 가정할 때 [db name]을 db로 바꾼 다음 복사하여 Terminal에 붙여넣고 Enter 키를 누릅니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;/Applications/MAMP/Library/bin/mysql -u root -proot --skip-column-names [db name] -e 'SHOW TRIGGERS;' | cut -f1 | sed -E 's/(.*)/DROP TRIGGER IF EXISTS \1;/' | /Applications/MAMP/Library/bin/mysql -u root -proot [db name]
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;루트 암호를 업데이트한 경우 다음 &quot;root&quot;을(를) 교체합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-p&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;비밀번호로&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스를 파일에 sqldump할 필요 없이 쿼리를 사용하여 삭제하려는 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;select concat('drop trigger ', trigger_name, ';') from information_schema.triggers where trigger_schema = 'your_schema';&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;그런 다음 결과를 내보내고(CSV로 전송하는 것이 가장 쉽다고 생각합니다) 해당 결과의 쿼리를 실행해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;빠른 대답은 &quot;아니오&quot; 입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 논리를 하나의 저장 프로시저로 캡슐화할 수 있습니다. 즉, 동적 SQL을 사용하여 모든 트리거를 가져오고 루프에서 모든 트리거를 삭제합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 후에는 다음을 실행할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;call delete_all_triggers_api(schema_name);&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;46&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/12637945/how-can-i-delete-all-the-triggers-in-a-mysql-database-using-one-sql-statement&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MySQL</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/729</guid>
      <comments>https://starjava.tistory.com/729#entry729comment</comments>
      <pubDate>Tue, 24 Oct 2023 20:04:09 +0900</pubDate>
    </item>
    <item>
      <title>C-store에서의 조합에 대한 질문 - 하나의 유형으로, 다른 유형으로 읽음 - 구현이 정의되어 있습니까?</title>
      <link>https://starjava.tistory.com/728</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C-store에서의 조합에 대한 질문 - 하나의 유형으로, 다른 유형으로 읽음 - 구현이 정의되어 있습니까?&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;K&amp;amp;R에서 C의 union에 대해 읽고 있었는데, 제가 알기로는 union의 단일 변수는 여러 유형 중 어느 하나를 보유할 수 있고 어떤 것이 한 유형으로 저장되고 다른 유형으로 추출되면 순수하게 구현이 정의되는 것으로 알고 있습니다.&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;#include&amp;lt;stdio.h&amp;gt;

int main(void)
{
  union a
  {
     int i;
     char ch[2];
  };

  union a u;
  u.ch[0] = 3;
  u.ch[1] = 2;

  printf(&quot;%d %d %d\n&quot;, u.ch[0], u.ch[1], u.i);

  return 0;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;3 2 515
&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;u.ch&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;u.ch&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;u.i&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;은 실행이 &lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 구현이 정의되어 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니면 내가 정말 바보같은 짓을 하는 걸까요?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대부분의 다른 사람들에게는 매우 초보적인 것으로 보일 수도 있다는 것을 알고 있지만 그 결과물에 대한 이유를 알 수 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사해요.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 정의되지 않은 동작입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;u.i&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;u.ch&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;동일한 메모리 주소에 위치합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 하나에 쓰고 다른 하나를 읽는 결과는 컴파일러, 플랫폼, 아키텍처, 그리고 때로는 컴파일러의 최적화 수준에 따라 달라집니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 다음에 대한 출력.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;u.i&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;항상 그렇지는 않을 것입니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;515&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;h2 papago-id=&quot;15&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;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;gcc&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 기계에서 두가지 다른 답변을 만들어냅니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-O0&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;-O2&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ol&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;&lt;font class=&quot;papago-parent&quot;&gt;제 기계는 32비트 리틀 엔디언 아키텍처를 가지고 있기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-O0&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;결국 2와 3으로 초기화된 최하위 바이트가 2개가 되고, 최상위 바이트 2개는 초기화되지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 노조의 기억은 다음과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;{3, 2, garbage, garbage}&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 나는 다음과 비슷한 출력을 얻습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;3 2 -1216937469&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;/li&gt; 
 &lt;li&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;-O2&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;3 2 515&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 하는 것처럼 조합의 기억을 만드는 거죠&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;{3, 2, 0, 0}&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 무슨 일이 일어나냐 하면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gcc&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 통화를 최적화합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;printf&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제 값을 사용하면 어셈블리 출력이 다음과 동등하게 보입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
int main() {
    printf(&quot;%d %d %d\n&quot;, 3, 2, 515);
    return 0;
}
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;515 값은 이 질문에 대한 다른 답변에서 설명한 대로 구할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;본질적으로 그것은 다음과 같은 것을 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gcc&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;0을 초기화되지 않은 조합의 임의 값으로 선택한 호출을 최적화했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한 조합원에게 글을 쓰고 다른 조합원으로부터 글을 읽는 것은 &lt;em papago-id=&quot;32-1&quot;&gt;보통&lt;/em&gt; 큰 의미가 없지만, &lt;a href=&quot;https://stackoverflow.com/questions/98650/what-is-the-strict-aliasing-rule/99010#99010&quot; papago-id=&quot;32-3&quot;&gt;때로는 엄격&lt;/a&gt;한 별칭으로 &lt;a href=&quot;https://stackoverflow.com/questions/98650/what-is-the-strict-aliasing-rule/99010#99010&quot; papago-id=&quot;32-3&quot;&gt;컴파일된 프로그램에 유용&lt;/a&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;K&amp;amp;R을 읽고 있다고 하셨잖아요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 책의 최신 판(현재)에는 C 언어의 첫 번째 표준화된 버전인 C89/90이 설명되어 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;C 언어의 그 버전에서는 한 조합원을 쓰고 다른 조합원을 읽는 것은 &lt;em papago-id=&quot;34-1&quot;&gt;정의&lt;/em&gt;되지 않은 &lt;em papago-id=&quot;34-1&quot;&gt;행동&lt;/em&gt;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;34-3&quot;&gt;구현이 정의&lt;/em&gt;된 것이 아니라(다른 것임), &lt;em papago-id=&quot;34-5&quot;&gt;정의&lt;/em&gt;되지 않은 동작입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 언어 표준의 관련 부분은 6.5/7입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;35&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제, C (Technical Corrigendum 3이 적용된 언어 사양의 C99 버전)의 진화의 어느 시점에서, 갑자기 유니언을 타이프닝에 사용하는 것이 합법화되었습니다. 즉, 유니언의 한 구성원을 쓰고 다른 구성원을 읽는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 시도하면 여전히 정의되지 않은 동작이 발생할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;읽은 값이 읽지 않은 유형에 대해 유효하지 않은 경우(&quot;트랩 표현&quot;이라고 함), 동작은 여전히 정의되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇지 않으면 판독한 값이 구현으로 정의됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;37&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;37-1&quot;&gt;당신&lt;/em&gt;의 특정한 예는 상대적으로 다음으로부터 유형 펀닝을 하기에 안전합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&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;char[2]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;배열. 어떤 물체의 내용을 문자 배열로 재해석하는 것은 C 언어로 항상 합법적입니다(다시 6.5/7).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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&gt;&lt;code&gt;char[2]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신의 조합원을 배열하고 그 다음에 그것을 읽습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;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;em papago-id=&quot;42-1&quot;&gt;정의&lt;/em&gt;되지 않은 &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;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;int&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;char[2]&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;,&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;35&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;읽기 시작하면 배열 끝 너머의 초기화되지 않은 영역이 포함되며, 이 영역은 다시 정의되지 않은 동작으로 이어집니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력 뒤에 있는 이유는 컴퓨터에 정수가 리틀 &lt;a href=&quot;http://en.wikipedia.org/wiki/Endianness#Little-endian&quot; rel=&quot;noreferrer&quot; papago-id=&quot;48-1&quot;&gt;엔디안&lt;/a&gt; 형식으로 저장되기 때문입니다. 최하위 바이트가 먼저 저장되기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 바이트 시퀀스 [3,2,0,0]는 정수 3+2*256=515를 나타냅니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;49&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 결과는 구체적인 구현과 플랫폼에 따라 달라집니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이러한 코드의 출력은 당신의 플랫폼과 C 컴파일러 구현에 따라 달라질 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;출력을 보니 이 코드를 작은 엔디언 시스템(아마도 x86)에서 실행하고 있는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 당신이 i에 515를 넣고 디버거에서 본다면, 당신은 가장 낮은 차수의 바이트가 3이고 메모리에서 다음 바이트가 2인 것을 알 수 있을 것이고, 당신이 ch에 넣은 것과 정확히 매핑되는 것을 알 수 있을 것입니다.&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;빅 엔디언 시스템에서 이 작업을 수행했다면 770(16비트 int 가정) 또는 50462720(32비트 int 가정)을 얻을 수 있었을 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;구현에 따라 다르며 다른 플랫폼/컴파일러에 따라 결과가 달라질 수 있습니다. 하지만 이런 현상이 일어나는 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;515의 이진법은&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;1000000011
&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;0을 추가하여 2바이트(16비트 int로 가정):&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;0000001000000011
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;두 바이트는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;00000010 and 00000011
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어느 것이&lt;/font&gt;&lt;/font&gt;&lt;code&gt;2&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;3&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;누군가가 그것들이 왜 뒤바뀌었는지 설명해주기를 바랍니다 - 제 추측으로는 문자들이 거꾸로 되지는 않지만 그 의도는 거의 엔디안인 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유니언에 할당된 메모리의 양은 가장 큰 멤버를 저장하는 데 필요한 메모리와 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 길이 2의 int 및 char 배열이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;int를 16비트, char를 8비트라고 가정하면 둘 다 같은 공간이 필요하므로 유니언에 2바이트가 할당됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;char 배열에 3개(000011)와 2개(000010)를 할당하면 결합 상태는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0000001100000010&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 이 조합의 int를 읽으면 전체가 정수로 변환됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;LSB가 가장 낮은 주소로 저장되는 리틀 &lt;a href=&quot;http://en.wikipedia.org/wiki/Endianness#Little-endian&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;39-1&quot;&gt;엔디언&lt;/a&gt; 표현을 가정할 때, 조합의 내부는&lt;/font&gt;&lt;/font&gt;&lt;code&gt;0000001000000011&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;40&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;515에 대한 이진법입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: 이는 int가 32bit인 경우에도 성립합니다. - &lt;a href=&quot;https://stackoverflow.com/questions/1812348/a-question-about-union-in-c/1812376#1812376&quot; papago-id=&quot;63-1&quot;&gt;Amnon의 답변&lt;/a&gt; 확인&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;32비트 시스템의 경우 int는 4바이트이지만 초기화는 2바이트에 불과합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&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;16비트 int를 사용하는 시스템을 사용한다고 가정할 때, 사용자가 수행하는 작업은 여전히 구현이 정의되어 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;시스템이 작은 엔디안인 경우 u.ch [0]은 최하위 바이트인 u.i와 일치하며 u.ch1은 최상위 바이트가 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;큰 엔디언 시스템에서는 반대입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 C 표준은 2의 보어가 가장 일반적이지만 구현이 &lt;a href=&quot;http://en.wikipedia.org/wiki/Two's_complement&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;65-3&quot;&gt;2의 보어&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;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;힌트: 16진수 값을 사용하면 무슨 일이 일어나고 있는지 쉽게 알 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;약간의 엔디언 시스템에서, hex의 결과는 0x0203이 될 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/1812348/a-question-about-union-in-c-store-as-one-type-and-read-as-another-is-it-impl&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/728</guid>
      <comments>https://starjava.tistory.com/728#entry728comment</comments>
      <pubDate>Tue, 24 Oct 2023 20:04:02 +0900</pubDate>
    </item>
    <item>
      <title>SQLLechemy에서 부호 없는 정수를 정의하는 방법</title>
      <link>https://starjava.tistory.com/727</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQLLechemy에서 부호 없는 정수를 정의하는 방법&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;Flask-SQ를 사용하여 Flask로 포털을 마이그레이션합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;LAlchemy(MySQL).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 기존 포털의 DB를 만드는 데 사용한 코드입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; Users = &quot;&quot;&quot;CREATE TABLE Users(
           id INT UNSIGNED AUTO_INCREMENT NOT NULL,
           UserName VARCHAR(40) NOT NULL,
           FirstName VARCHAR(40) NOT NULL,
           LastName VARCHAR(40) NOT NULL,
           EmailAddress VARCHAR(255) NOT NULL,      
           Password VARCHAR(40) NOT NULL,    
           PRIMARY KEY (id)
           ) &quot;&quot;&quot;
&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;SQLALchemy에서 사용하려는 방법은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt; class Users(db.Model):
      id           = db.Column(db.Integer, primary_key=True)
      UserName     = db.Column(db.String(40))
      FirstName    = db.Column(db.String(40))
      LastName     = db.Column(db.String(40))
      EmailAddress = db.Column(db.String(255))
      Password     = db.Column(db.String(40))
&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;제 질문은 SQLAlchemy 모델을 부호 없는 정수로 지정하려면 어떻게 해야 합니까?&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;SQLLchemy 유형(&lt;a href=&quot;http://docs.sqlalchemy.org/en/latest/core/type_basics.html#sqlalchemy.types.Integer&quot; rel=&quot;noreferrer&quot; papago-id=&quot;0-1&quot;&gt;Integer&lt;/a&gt; 등)은 표준 SQL 데이터 유형을 준수하려고 하는 것 같습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;부호 정수&quot;는 표준 데이터 유형이 아니기 때문에 다음과 같은 것은 볼 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UnsignedInteger&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;Integer(unsigned=True)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이와 같은 경우(MySQL과 같은 데이터베이스에 표준 데이터 유형이 없거나 표준이 아닌 옵션이 있는 경우)에는 방언별 유형을 가져와 이러한 유형/옵션에 액세스할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;MySQL의 경우 &lt;a href=&quot;http://docs.sqlalchemy.org/en/latest/dialects/mysql.html#mysql-data-types&quot; rel=&quot;noreferrer&quot; papago-id=&quot;7-1&quot;&gt;모듈&lt;/a&gt;을 통해 이러한 유형에 액세스할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from sqlalchemy.dialects.mysql import INTEGER

class Users(db.Model):
    id           = db.Column(INTEGER(unsigned=True), primary_key=True)
    UserName     = db.Column(db.String(40))
    FirstName    = db.Column(db.String(40))
    LastName     = db.Column(db.String(40))
    EmailAddress = db.Column(db.String(255))
    Password     = db.Column(db.String(40))
&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;늦었을 수도 있지만 모델 클래스가 MySQL 및 SqlLite와 같은 여러 데이터베이스 엔진을 관리할 수 있도록 하려면(예: 유닛 테스트 중).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;할 수 있는 일은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;UnsignedInt = Integer()
UnsignedInt = UnsignedInt.with_variant(INTEGER(unsigned=True), 'mysql')
&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;class Meta(Base):
   __tablename__ = 'meta'
   meta_id = Column(UnsignedInt, primary_key=True)
   meta_key = Column(String(64), nullable=False, )
   meta_value = Column(String(128))
   species_id = Column(UnsignedInt)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/19717738/how-to-define-an-unsigned-integer-in-sqlalchemy&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MySQL</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/727</guid>
      <comments>https://starjava.tistory.com/727#entry727comment</comments>
      <pubDate>Tue, 24 Oct 2023 20:03:55 +0900</pubDate>
    </item>
    <item>
      <title>redux와 상태 기계(예: xstate)의 실제 차이는 무엇입니까?</title>
      <link>https://starjava.tistory.com/726</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;redux와 상태 기계(예: xstate)의 실제 차이는 무엇입니까?&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;font class=&quot;papago-parent&quot;&gt;이전에 redux와 ngrx store(실제로는 동일한 원칙을 따르는)에 대한 경험이 있었습니다.&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;https://redux.js.org/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;3-0&quot;&gt;Redux&lt;/a&gt;는 우리에게 선택 사항이지만, 개발자 중 한 명이 상태 기계 기반 라이브러리, 특히 &lt;a href=&quot;https://xstate.js.org/docs/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;3-2&quot;&gt;xstate&lt;/a&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;저는 xstate와 함께 일해본 적이 없어서 흥미롭게 생각하여 설명서를 읽고 다양한 예시를 보기 시작했습니다.&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;저는 답을 찾거나 xstate와 redux를 비교하는 다른 정보를 찾기 위해 몇 시간 동안 노력했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;&lt;a href=&quot;http://krasimirtsonev.com/blog/article/getting-from-redux-to-state-machine-with-stent&quot; papago-id=&quot;5-1&quot; rel=&quot;noreferrer&quot;&gt;redux에서 상태 머신으로 이동&quot;&lt;/a&gt;과 같은 일부 기사나 redux와 xstate를 &lt;strong papago-id=&quot;5-3&quot;&gt;함께&lt;/strong&gt; 사용하는 데 초점을 맞춘 라이브러리 링크&lt;a href=&quot;http://krasimirtsonev.com/blog/article/getting-from-redux-to-state-machine-with-stent&quot; papago-id=&quot;5-1&quot; rel=&quot;noreferrer&quot;&gt;(&lt;/a&gt;상당히 이상함) 외에는 명확한 정보를 찾을 수 없었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 점을 설명하거나 개발자가 언제 xstate를 선택해야 하는지 알려줄 수 있다면 기꺼이 도와드리겠습니다.&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;XState를 만들었지만 하나를 사용할지 여부는 팀에 따라 다릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 몇 가지 주요 차이점을 강조해 보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;div class=&quot;s-table-container&quot;&gt; 
 &lt;table class=&quot;s-table&quot;&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;리덕스&lt;/font&gt;&lt;/th&gt; 
    &lt;th papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;X주&lt;/font&gt;&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 이벤트(Redux에서 &lt;em papago-id=&quot;10-1&quot;&gt;액션&lt;/em&gt;이라고 함)가 업데이트 상태를 나타내는 축소기로 전송되는 상태 컨테이너&lt;/font&gt;&lt;/td&gt; 
    &lt;td&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;&quot;loading&quot;&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;&quot;success&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;infinite 상태 또는 컨텍스트(예:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;items: [...]&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;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;축소기를 정의하는 방법을 지정하지 않습니다. 현재 상태 및 이벤트(동작)가 지정된 다음 상태를 반환하는 일반 함수입니다.&lt;/font&gt;&lt;/td&gt; 
    &lt;td papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;규칙이 있는 축소기&quot; - 사건으로 인한 유한한 상태 간의 법적 전환을 정의하고 전환(또는 상태에서 진입/exit 시)에 수행해야 하는 작업을 정의합니다.&lt;/font&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사이드 effects를 처리할 수 있는 기본 &lt;em papago-id=&quot;17-1&quot;&gt;제공&lt;/em&gt; 방식이 없습니다. redux-thunk, redux-saga 등 다양한 커뮤니티 옵션이 있습니다.&lt;/font&gt;&lt;/td&gt; 
    &lt;td&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;조치(측면 effects)를 선언적이고 명시적으로 만듭니다 - 그것들은 일부입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;State&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;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유한한 상태와 무한한 상태를 구분하지 않기 때문에 현재 상태 간의 전이를 시각화할 방법이 없습니다.&lt;/font&gt;&lt;/td&gt; 
    &lt;td papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;visualizer: https://statecharts.github.io/xstate-viz 이 있습니다. 이는 선언적 특성으로 인해 가능합니다.&lt;/font&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;축소기로 표현되는 암시적 논리/행동은 선언적으로 직렬화될 수 없습니다(예: JSON).&lt;/font&gt;&lt;/td&gt; 
    &lt;td papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;논리/행동을 나타내는 기계 정의는 JSON으로 직렬화되고 JSON에서 읽을 수 있습니다. 이는 동작을 매우 휴대성 있게 만들고 외부 도구에 의해 구성할 수 있게 만듭니다.&lt;/font&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;엄밀하게 국가의 기계가 아닌&lt;/font&gt;&lt;/td&gt; 
    &lt;td papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;W3C SCXML 사양을 철저히 준수합니다. https://www.w3.org/TR/scxml/&lt;/font&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;불가능한 상태를 수동으로 방지하기 위해 개발자에게 의존합니다.&lt;/font&gt;&lt;/td&gt; 
    &lt;td papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상태 관리도를 사용하여 이벤트를 처리하기 위한 경계를 자연스럽게 정의하므로 불가능한 상태를 방지하고 정적으로 분석할 수 있습니다.&lt;/font&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;세계적인&quot; 단일 원자 저장소의 사용을 장려합니다.&lt;/font&gt;&lt;/td&gt; 
    &lt;td papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;서로 의사소통하는 계층적 상태도/&quot;서비스&quot; 인스턴스가 많이 존재할 수 있는 Actor-model 방식의 사용을 장려합니다.&lt;/font&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/div&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이번 주에 문서에 주요 차이점들을 더 추가하겠습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;31-0&quot;&gt;상태 머신&lt;/strong&gt;은 단방향 데이터 흐름을 갖도록 지시(강제)하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터 흐름과는 무관합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 &lt;strong papago-id=&quot;31-2&quot;&gt;상태 변화를 제한&lt;/strong&gt;하고 &lt;strong papago-id=&quot;31-4&quot;&gt;상태 전환&lt;/strong&gt;에 관한 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 일반적으로 애플리케이션의 일부 부분만 상태 머신으로 설계되며, 일부 상태 변경을 &lt;em papago-id=&quot;31-6&quot;&gt;제한/금지&lt;/em&gt;해야 하고 전환에 &lt;em papago-id=&quot;31-8&quot;&gt;관심&lt;/em&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;상태 기계에서는 어떤 이유로 (외부 API 의존성 등) 앱이 제약으로 인해 다른 상태로 전환할 수 없는 상태로 잠길 가능성이 있으므로 이를 해결해야 합니다.&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;strong papago-id=&quot;33-0&quot;&gt;그러나&lt;/strong&gt; &lt;em papago-id=&quot;33-2&quot;&gt;상태 전환&lt;/em&gt; 대신 마지막 앱 상태 자체에만 관심이 있고 상태 제약이 중요하지 않은 경우 상태 기계를 사용하지 않고 상태 자체를 직접 업데이트하는 것이 좋습니다(&lt;strong papago-id=&quot;33-4&quot;&gt;Action classs를 통해 Singleton class&lt;/strong&gt; 업데이트에서 &lt;strong papago-id=&quot;33-4&quot;&gt;상태 랩&lt;/strong&gt;을 수행할 수 &lt;strong papago-id=&quot;33-4&quot;&gt;있음&lt;/strong&gt;).&lt;/font&gt;&lt;/p&gt; 
&lt;hr&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;Redux&lt;/strong&gt;는 &lt;strong papago-id=&quot;6-3&quot;&gt;단방향 아키텍처 프레임워크&lt;/strong&gt;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;단방향 아키텍처로 인해 데이터 흐름의 방향성이 단일화됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Redux에서는 다음과 같이 시작합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;User-&amp;gt;View-&amp;gt;(Action)-&amp;gt;Store-&amp;gt;Reducer-&amp;gt;(Middleware)-&amp;gt;Store-&amp;gt;(State)-&amp;gt;View&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 상태 기계와 마찬가지로 Redux의 미들웨어로 부작용을 유발할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요한 경우 상태 전환을 제한/금지할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Redux는 &lt;strong papago-id=&quot;7-1&quot;&gt;상태&lt;/strong&gt; 머신과는 &lt;strong papago-id=&quot;7-1&quot;&gt;다르게&lt;/strong&gt; 단방향 데이터 흐름, &lt;strong papago-id=&quot;7-3&quot;&gt;pure&lt;/strong&gt;!reducer 함수, 불변 상태 객체, 단일 관찰 가능한 앱 상태를 강제합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;36&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아래의 나의 요점들은 거의 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;UI 상태와 비즈니스/백엔드 상태는 Redux에서 함께 연결됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 때문에 UI 또는 비즈니스 상태에 대한 모든 업데이트는 리덕스 저장소에 데이터 업데이트를 생성합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Xstate는 UI 상태와 백엔드 상태를 분리합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Reductu에서 모든 노드는 루트 노드 내부에 존재합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Xstate는 독립적인 머신 내부의 데이터를 분산하고 배포합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;40&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;응용프로그램은 이미 정의된 상태 간에만 전환할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 기계 자체에서 오류나 버그를 수정할 수 있습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;41&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내부 상태는 Xstate에서 Machine 자체에서 관리합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;축소판은 새 상태를 플래그로 나타냅니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;렌더러 애그너티브 - 상태의 많은 부분을 기계로 올려 유지하고 필요한 경우 렌더링 프레임워크를 비교적 쉽게 전환할 수 있습니다(예: 반응에서 vue로).&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;컨텍스트는 외부 세계에 단일 인터페이스를 제공하는 구체적인 클래스를 제공합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&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/54482695/what-is-an-actual-difference-between-redux-and-a-state-machine-e-g-xstate&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>JavaScript</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/726</guid>
      <comments>https://starjava.tistory.com/726#entry726comment</comments>
      <pubDate>Tue, 24 Oct 2023 20:03:48 +0900</pubDate>
    </item>
    <item>
      <title>mysql이 암호가 비어 있는데도 암호를 묻는 중입니다.</title>
      <link>https://starjava.tistory.com/725</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;mysql이 암호가 비어 있는데도 암호를 묻는 중입니다.&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우분투 서버에 mysql을 설치하고 비밀번호를 지정하지 않았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 할때는&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql -u root -p 
&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;암호를 입력하라는 메시지가 표시되고 입력을 제공하지 않고 그냥 Enter 키를 누르면 작동합니다.&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;이제 cron 작업을 사용하여 데이터베이스에 대한 작업을 수행해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;mycron 작업이 작동하지 않습니다. 왜냐하면 mysql에서 비밀번호를 요구하기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;해봤습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql -u root -p'' my_database
&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;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;mysql -u root --password=&quot;&quot; dbname&lt;/code&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;mysql에 'mysql - user'라는 암호를 입력하도록 요청하지 마십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요한 권한만으로 계정을 만들 것을 제안합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 localhost에 대한 액세스를 제한합니다.&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;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;내가 할때는&lt;/font&gt;&lt;/p&gt; 
 &lt;pre&gt;&lt;code&gt;mysql -u root -p
&lt;/code&gt;&lt;/pre&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;code&gt;-p&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;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;mysql -u root
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;sup papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;세상에, 그 계정에 비밀번호를 입력하세요!&lt;/font&gt;&lt;/sup&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;-p$PASSWORD&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 다음 예제에서 사용자/password는 root/root입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql -proot -D my-db -u root -h 127.0.0.1 -e &quot;select * from my_table&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;중요: 사이에 공간이 없다는 것을 알아둡니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;-p&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;-proot&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;암호를 입력할 방법을 찾을 수 없었으므로 MySQL Documentation에서 암호를 재설정하는 방법을 확인합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음을 사용할 수 있습니다. http://dev.mysql.com/doc/mysql-windows-excerpt/5.0/en/resetting-permissions-windows.html 다음 쿼리를 사용하여 파일을 생성해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
FLUSH PRIVILEGES;
&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;그런 다음 --init-file 매개 변수를 사용하여 mysqld 서비스를 시작합니다(자세한 내용은 설명서 참조).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;루트 암호를 재설정합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;루트의 암호를 지정하는 것이 어떻습니까?&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;보안상의 이유로 스크립트가 작동할 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Mysql의 &quot;root&quot; 계정은 암호를 가지고 있어야 합니다. 그렇지 않으면 컴퓨터에 계정이 있는 모든 사용자는 데이터베이스에 완전히 액세스할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;20&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/default-privileges.html&quot; rel=&quot;nofollow&quot; papago-id=&quot;20-0&quot;&gt;암호 설정&lt;/a&gt;(예: SET PASSET PASSER)&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://dev.mysql.com/doc/refman/5.1/en/option-files.html&quot; rel=&quot;nofollow&quot; papago-id=&quot;21-1&quot;&gt;~/.my.cnf&lt;/a&gt;에 암호 추가&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&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;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3843973/mysql-is-prompting-for-password-even-though-my-password-is-empty&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MySQL</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/725</guid>
      <comments>https://starjava.tistory.com/725#entry725comment</comments>
      <pubDate>Tue, 24 Oct 2023 20:03:42 +0900</pubDate>
    </item>
    <item>
      <title>getenv는 표준화되었지만 setenv는 아닌 이유는 무엇입니까?</title>
      <link>https://starjava.tistory.com/724</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;getenv는 표준화되었지만 setenv는 아닌 이유는 무엇입니까?&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;https://stackoverflow.com/questions/30292642/c-standard-library-stdsetenv-vs-setenv&quot; papago-id=&quot;1-1&quot;&gt;이 질문&lt;/a&gt;에 대한 답변과 의견을 들어보면 C++ 표준에 의해 정의된 것으로 알고 있지만,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setenv&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 class=&quot;papago-parent&quot;&gt;그리고 정말로, 다음 프로그램입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-cpp prettyprint-override&quot;&gt;&lt;code&gt;#include &amp;lt;cstdlib&amp;gt;
#include &amp;lt;iostream&amp;gt;

int main ( int argc, char **argv )
{
    std::cout &amp;lt;&amp;lt; std::getenv(&quot;PATH&quot;) &amp;lt;&amp;lt; std::endl;  // no errors

    std::setenv(&quot;PATH&quot;, &quot;/home/phydeaux/.local/bin:...&quot;, true);  // error
}
&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;컴파일하지 않습니다(3.9항).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;보완적으로 보이는 기능 중 하나는 표준화되었지만 다른 하나는 표준화되지 않은 이유는 무엇입니까?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C90 표준에는 다음이 포함되어 있으므로 C++98 표준도 마찬가지입니다.&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;C 표준이 처음 만들어졌을 때, 환경 설정에 대한 선례는 다음과 같습니다; 기능은 나중까지 고안되지 않았습니다.&lt;/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;putenv()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문제가 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자동 지속 시간이 아닌 메모리를 전달해야 하지만, 다시는 사용할 수 있는지 알 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;강제로 메모리가 유출된 것과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;s a ™  A Good Thin™™&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;putenv()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;표준화되지 않았습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C 표준의 &lt;a href=&quot;http://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf&quot; rel=&quot;noreferrer&quot; papago-id=&quot;9-1&quot;&gt;근거&lt;/a&gt;는 다음과 같이 명시적으로 말합니다( §7.20.4.5, p163).&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해당되는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;putenv&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;/blockquote&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;플랫폼별 API가 개입하여 누락된 기능을 적합한 방식으로 제공합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p&gt;&lt;sup&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;POSIX 표준의 첫 번째 버전(1988년 시험 사용; 1990년)은 다음을 포함하지 않았습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setenv()&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;putenv()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. X/Open Portability Guide(&lt;a href=&quot;https://en.wikipedia.org/wiki/X/Open#Output&quot; papago-id=&quot;15-1&quot; rel=&quot;noreferrer&quot;&gt;XPG&lt;/a&gt;) 1호는 다음을 포함하고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;putenv()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SVID(&lt;a href=&quot;https://en.wikipedia.org/wiki/System_V_Interface_Definition&quot; papago-id=&quot;16-1&quot; rel=&quot;noreferrer&quot;&gt;System&lt;/a&gt; V &lt;a href=&quot;https://en.wikipedia.org/wiki/System_V_Interface_Definition&quot; papago-id=&quot;16-1&quot; rel=&quot;noreferrer&quot;&gt;Interface Definition&lt;/a&gt;)에 포함되지 않은 SVID(&lt;a href=&quot;https://en.wikipedia.org/wiki/System_V_Interface_Definition&quot; papago-id=&quot;16-1&quot; rel=&quot;noreferrer&quot;&gt;System&lt;/a&gt; V Interface Definition)의 외관에 기반합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setenv()&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;. XPG 6호&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;setenv()&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;unsetenv()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(에 링크된 URL의 기능에 대해서는 이력 섹션을 참조하십시오.)&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;맥OS라 10.12를 &lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;6을 실행하는 맥에서는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;man 3 setenv&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에는 다음을 식별하는 이력 섹션이 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/sup&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;sup papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;함수 setenv()와 unsetenv()는 버전 7 AT&amp;amp;T UNIX에 등장했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;putenv() 함수는 4.3에 나타남&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;BSD-Reno.&lt;/font&gt;&lt;/sup&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&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;&lt;a href=&quot;https://s3.amazonaws.com/plan9-bell-labs/7thEdMan/index.html&quot; papago-id=&quot;22-1&quot; rel=&quot;noreferrer&quot;&gt;UNIX 프로그래머 매뉴얼 제1권&lt;/a&gt;(1979)에는 다음과 같은 내용이 포함되어 있지 않기 때문에 예상치 못한 오류일 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;putenv()&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;setenv()&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;unsetenv()&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;putenv()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기능은 80년대 어느 단계에서 유닉스의 AT&amp;amp;T 변종에 추가되었습니다. SVID에 있었고 SVR4가 1990년에 출시되었을 때 문서화되었으며 시스템 III의 일부였을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;플랫폼이 거의 뒤바뀐 것 같아요. &lt;a href=&quot;http://gunkies.org/wiki/4.3_BSD_Reno&quot; papago-id=&quot;26-1&quot; rel=&quot;noreferrer&quot;&gt;4.3&lt;/a&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://gunkies.org/wiki/4.3_BSD_Reno&quot; papago-id=&quot;26-1&quot; rel=&quot;noreferrer&quot;&gt;BSD-Reno&lt;/a&gt;는 최초의 C와 POSIX 표준이 발표된 후 1990년 6월에 출시되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/sup&gt;&lt;/p&gt; 
&lt;p&gt;&lt;sup papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Random832에서는 &lt;a href=&quot;https://stackoverflow.com/users/691884/random832&quot; papago-id=&quot;27-1&quot;&gt;TUHS&lt;/a&gt; – &lt;a href=&quot;http://www.tuhs.org/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;27-3&quot;&gt;Unix Heritage Society&lt;/a&gt;를 고대 버전의 Unix에 대한 정보의 출처로 언급하는 등의 논의가 있었습니다.&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;27-5&quot;&gt;다른 것이 아니라면, 이 토론은 왜 표준 위원회들이 '환경 설정'에서 벗어나도록 잘 했는지를 강조합니다.&lt;/em&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;27-5&quot;&gt; 제 기억과는 달리 제 7판 UNIX에는 없었던 것으로 보입니다.&lt;/em&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;27-5&quot;&gt; 1983년부터 사용한 시스템에서 사용할 수 있었다고 확신합니다. 시스템 III의 일부 자료와 PWB의 일부 자료가 포함된 많은 7판이었습니다.&lt;/em&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;27-5&quot;&gt; SVR4의 일부이며, SVID의 일부 버전(아마도 SVR4 이전)에 정의되어 있습니다.VR4 이전)에서 정의되었습니다.&lt;/em&gt;&lt;/font&gt;&lt;/sup&gt;&lt;/p&gt; 
&lt;p&gt;&lt;sup&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C 근거는 또한 다음과 같은 우려를 언급합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gets()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러나 그러한 우려에도 불구하고 이를 포함시켰습니다. 물론 C11에서 제거되었습니다(그러나 POSIX는 여전히 C11이 아닌 C99를 가리킵니다).&lt;/font&gt;&lt;/font&gt;&lt;/sup&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;일부 원래 환경에서는 setenv를 사용할 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;C&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;에 대해 정의되었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;getenv를 사용하면 환경을 볼 수 있습니다. exec[lv][p][e]를 사용하여 새 프로세스를 생성하면 상속되거나 새 환경이 있는 자식을 생성할 수 있습니다.&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;그러나 setenv는 항상 가능하지는 않았던 호출 프로세스의 상태를 수정합니다.&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;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/45938604/why-was-getenv-standardised-but-not-setenv&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/724</guid>
      <comments>https://starjava.tistory.com/724#entry724comment</comments>
      <pubDate>Tue, 24 Oct 2023 20:03:35 +0900</pubDate>
    </item>
    <item>
      <title>스프링 HTTP 클라이언트</title>
      <link>https://starjava.tistory.com/723</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스프링 HTTP 클라이언트&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을 처음 접했고 HTTP(JSON, RESTful)를 통해 다른 API에 연결하기 위해 Java 앱이 필요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;스프링 프레임워크에 JSON HTTP Rest Client와 같은 것이 있습니까?&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;import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;

public class RestClient {

  private String server = &quot;http://localhost:3000&quot;;
  private RestTemplate rest;
  private HttpHeaders headers;
  private HttpStatus status;

  public RestClient() {
    this.rest = new RestTemplate();
    this.headers = new HttpHeaders();
    headers.add(&quot;Content-Type&quot;, &quot;application/json&quot;);
    headers.add(&quot;Accept&quot;, &quot;*/*&quot;);
  }

  public String get(String uri) {
    HttpEntity&amp;lt;String&amp;gt; requestEntity = new HttpEntity&amp;lt;String&amp;gt;(&quot;&quot;, headers);
    ResponseEntity&amp;lt;String&amp;gt; responseEntity = rest.exchange(server + uri, HttpMethod.GET, requestEntity, String.class);
    this.setStatus(responseEntity.getStatusCode());
    return responseEntity.getBody();
  }

  public String post(String uri, String json) {   
    HttpEntity&amp;lt;String&amp;gt; requestEntity = new HttpEntity&amp;lt;String&amp;gt;(json, headers);
    ResponseEntity&amp;lt;String&amp;gt; responseEntity = rest.exchange(server + uri, HttpMethod.POST, requestEntity, String.class);
    this.setStatus(responseEntity.getStatusCode());
    return responseEntity.getBody();
  }

  public void put(String uri, String json) {
    HttpEntity&amp;lt;String&amp;gt; requestEntity = new HttpEntity&amp;lt;String&amp;gt;(json, headers);
    ResponseEntity&amp;lt;String&amp;gt; responseEntity = rest.exchange(server + uri, HttpMethod.PUT, requestEntity, null);
    this.setStatus(responseEntity.getStatusCode());   
  }

  public void delete(String uri) {
    HttpEntity&amp;lt;String&amp;gt; requestEntity = new HttpEntity&amp;lt;String&amp;gt;(&quot;&quot;, headers);
    ResponseEntity&amp;lt;String&amp;gt; responseEntity = rest.exchange(server + uri, HttpMethod.DELETE, requestEntity, null);
    this.setStatus(responseEntity.getStatusCode());
  }

  public HttpStatus getStatus() {
    return status;
  }

  public void setStatus(HttpStatus status) {
    this.status = status;
  } 
}
&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;RestTemplate&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://spring.io/blog/2009/03/27/rest-in-spring-3-resttemplate&quot; papago-id=&quot;4-1&quot; rel=&quot;noreferrer&quot;&gt;봄&lt;/a&gt; 공식 &lt;a href=&quot;https://spring.io/blog/2009/03/27/rest-in-spring-3-resttemplate&quot; papago-id=&quot;4-1&quot; rel=&quot;noreferrer&quot;&gt;블로그&lt;/a&gt;에서 이 기사를 확인해 보십시오.&lt;/font&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;RestTemplate는 클라이언트 측 HTTP 액세스를 위한 중앙 Spring 클래스입니다.&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;GET의 예는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;String result = restTemplate.getForObject(&quot;http://example.com/hotels/{hotel}/bookings/{booking}&quot;, String.class, &quot;42&quot;, &quot;21&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;pre&gt;&lt;code&gt;import java.io.FileReader;
import java.util.HashMap;
import java.util.Map;

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.springframework.http.HttpEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

public class PostRequestMain {

    /**
     * POST with Headers call using Spring RestTemplate
     * 
     * 
     * @param args
     */

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        MultiValueMap&amp;lt;String, String&amp;gt; headers = new LinkedMultiValueMap&amp;lt;String, String&amp;gt;();
        Map map = new HashMap&amp;lt;String, String&amp;gt;();
        map.put(&quot;Content-Type&quot;, &quot;application/json&quot;);
        headers.setAll(map);
        Map req_payload = new HashMap();
        req_payload.put(&quot;name&quot;, &quot;piyush&quot;);

        HttpEntity&amp;lt;?&amp;gt; request = new HttpEntity&amp;lt;&amp;gt;(req_payload, headers);
        String url = &quot;http://localhost:8080/portal-name/module-name/&quot;;

        // Create a new RestTemplate instance
        RestTemplate restTemplate = new RestTemplate();

        // Add the String message converter
        restTemplate.getMessageConverters().add(new StringHttpMessageConverter());


        ResponseEntity&amp;lt;String&amp;gt; response = restTemplate.postForEntity(url, request, String.class);


        System.out.println(response);

    }

    private static void getPayloadMap() {
        JSONParser parser = new JSONParser();

        try {

            Object obj = parser.parse(new FileReader(&quot;C:\\Piyush\\test.json&quot;));
            JSONObject jsonObject = (JSONObject) obj;

            Map payLoadMap = new HashMap();
            payLoadMap.putAll(jsonObject);

            System.out.println(jsonObject);
        } catch (Exception e) {
        }
    }

}
&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;URL : https://stackoverflow.com/questions/22338176/spring-http-client&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Spring</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/723</guid>
      <comments>https://starjava.tistory.com/723#entry723comment</comments>
      <pubDate>Tue, 24 Oct 2023 20:03:29 +0900</pubDate>
    </item>
    <item>
      <title>Woocommerce 3에서 카트가 비어 있지 않은지 확인합니다.</title>
      <link>https://starjava.tistory.com/722</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Woocommerce 3에서 카트가 비어 있지 않은지 확인합니다.&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;add_action( 'wp_footer', 'redirecionar' );
function redirecionar(){
    global $woocommerce;
    if ( is_page('carrinho-de-compras') and !sizeof($woocommerce-&amp;gt;cart-&amp;gt;cart_contents) ) {
       // do something
    }
}    
&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;add_action( 'wp_footer', 'vazio' );
    function vazio() {
        if ( ! WC()-&amp;gt;cart-&amp;gt;get_cart_contents_count() == 0 ) { 
           // do something
        }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr&gt; 
&lt;h3 papago-id=&quot;4&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;&amp;lt;?php add_action( 'wp_footer', 'vazio' );
    function vazio() {
        if ( ! WC()-&amp;gt;cart-&amp;gt;is_empty() ) { ?&amp;gt;
        &amp;lt;div style=&quot;width: 20%;&quot; class=&quot;footer-section &amp;lt;?php echo esc_html($woo);?&amp;gt;&quot;&amp;gt;
            &amp;lt;a href=&quot;&amp;lt;?php echo 'https://my_web_page.pt/finalizar-compra';?&amp;gt;&quot; title=&quot;Finalizar Compra&quot;&amp;gt;&amp;lt;i class=&quot;fa fa-credit-card&quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;/a&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;?php   }
    } ?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;add_action( 'wp_footer', 'vazio' );
  function vazio() {
     if (sizeof( WC()-&amp;gt;cart-&amp;gt;get_cart() ) &amp;gt; 0 ) { 
       // do something
     }
   }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 카트에 물건이 있는지 확인할 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;필요에 따라 다른 문을 추가하거나 동등성 여부를 확인할 수 있습니다.&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;in new wocommerce 2.1+ : WC()-&amp;gt;cart-&amp;gt;cart_contents_count로 카트 내용 수 확인&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;add_action(&quot;template_redirect&quot;, 'redirection_function');
function redirection_function(){
    global $woocommerce;
    if( is_cart() &amp;amp;&amp;amp; WC()-&amp;gt;cart-&amp;gt;cart_contents_count == 0){
        wp_safe_redirect( get_permalink( woocommerce_get_page_id( 'shop' ) ) );
    }
}
&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;global $woocommerce;
if ( $woocommerce-&amp;gt;cart-&amp;gt;cart_contents_count != 0 ) {
    // cart has content
} else {
   // cart is empty
}
&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;ajax add to cart의 경우 이 내용을 JS 파일에 추가할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$('body').on( 'added_to_cart', function(){
    if( ! $(this).hasClass('has_items') ) {
        // do something
    }
});
&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;URL : https://stackoverflow.com/questions/50633717/check-if-cart-is-not-empty-in-woocommerce-3&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>WordPress</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/722</guid>
      <comments>https://starjava.tistory.com/722#entry722comment</comments>
      <pubDate>Tue, 24 Oct 2023 20:03:20 +0900</pubDate>
    </item>
    <item>
      <title>C(호스트 이름 및 도메인 정보)에서 현재 시스템의 전체 호스트 이름을 확인하려면 어떻게 해야 합니까?</title>
      <link>https://starjava.tistory.com/721</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C(호스트 이름 및 도메인 정보)에서 현재 시스템의 전체 호스트 이름을 확인하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C 프로젝트(POSIX)에서 현재 시스템의 완전한 이름을 얻으려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 나는 내 기계의 호스트 이름만 얻을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;gethostname()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대학시절부터&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이럴 수도 있어요&lt;/font&gt;&lt;/font&gt;&lt;code&gt;machine3&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;machine3.somedomain.com&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;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&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;uname()&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;gethostname()&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;gethostbyname()&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;h_name&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;ANSIc를 사용하는 경우 다음을 사용해야 &lt;em papago-id=&quot;8-1&quot;&gt;합니다&lt;/em&gt;.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;uname()&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;gethostname()&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;char hostname[1024];
hostname[1023] = '\0';
gethostname(hostname, 1023);
printf(&quot;Hostname: %s\n&quot;, hostname);
struct hostent* h;
h = gethostbyname(hostname);
printf(&quot;h_name: %s\n&quot;, h-&amp;gt;h_name);
&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;gethostbyname()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;현재 POSIX 사양에서는 IPv6로 잘 재생되지 않기 때문에 더 이상 사용되지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 코드의 더 현대적인 버전은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;getaddrinfo()&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;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;struct addrinfo hints, *info, *p;
int gai_result;

char hostname[1024];
hostname[1023] = '\0';
gethostname(hostname, 1023);

memset(&amp;amp;hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC; /*either IPV4 or IPV6*/
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_CANONNAME;

if ((gai_result = getaddrinfo(hostname, &quot;http&quot;, &amp;amp;hints, &amp;amp;info)) != 0) {
    fprintf(stderr, &quot;getaddrinfo: %s\n&quot;, gai_strerror(gai_result));
    exit(1);
}

for(p = info; p != NULL; p = p-&amp;gt;ai_next) {
    printf(&quot;hostname: %s\n&quot;, p-&amp;gt;ai_canonname);
}

freeaddrinfo(info);
&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;물론, 이것은 기계에 FQDN이 있는 경우에만 작동합니다. 그렇지 않은 경우에는,&lt;/font&gt;&lt;/font&gt;&lt;code&gt;getaddrinfo()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결국 부적격한 호스트 이름과 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 솔루션:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;#ifdef WIN32
    #include &amp;lt;Windows.h&amp;gt;
    #include &amp;lt;tchar.h&amp;gt;
#else
    #include &amp;lt;unistd.h&amp;gt;
#endif

void GetMachineName(char machineName[150])
{
    char Name[150];
    int i=0;

    #ifdef WIN32
        TCHAR infoBuf[150];
        DWORD bufCharCount = 150;
        memset(Name, 0, 150);
        if( GetComputerName( infoBuf, &amp;amp;bufCharCount ) )
        {
            for(i=0; i&amp;lt;150; i++)
            {
                Name[i] = infoBuf[i];
            }
        }
        else
        {
            strcpy(Name, &quot;Unknown_Host_Name&quot;);
        }
    #else
        memset(Name, 0, 150);
        gethostname(Name, 150);
    #endif
    strncpy(machineName,Name, 150);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;gethostname()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&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;man&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;BSD 함수&lt;/font&gt;&lt;/font&gt;&lt;code&gt;getdomainname()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도메인 이름을 제공하여 정규화된 호스트 이름을 구축할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;죄송하지만 도메인을 얻을 수 있는 POSIX 방법은 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 찾고 있는 것은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;http://www.opengroup.org/onlinepubs/009695399/functions/gethostbyaddr.html&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주소별 호스트 가져오기&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;로컬 호스트 IP만 전달하면 됩니다.&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;gethost by name 기능도 있어 유용합니다.&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;쉬운 방법, try unname()&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;이 방법이 작동하지 않으면 gethostname()을 사용한 다음 gethostbyname()을 사용하고 마지막으로 gethostbyname()을 사용하여 addr()을 사용합니다.&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;hostent{}의 h_name은 FQDN이어야 합니다.&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/504810/how-do-i-find-the-current-machines-full-hostname-in-c-hostname-and-domain-info&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/721</guid>
      <comments>https://starjava.tistory.com/721#entry721comment</comments>
      <pubDate>Tue, 24 Oct 2023 20:03:13 +0900</pubDate>
    </item>
    <item>
      <title>버디 프레스 템플릿 - 사용자 페이지를 사용자 정의하는 방법은 무엇입니까?</title>
      <link>https://starjava.tistory.com/720</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;버디 프레스 템플릿 - 사용자 페이지를 사용자 정의하는 방법은 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(WordPress에서)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;BP 템플릿을 어디서 편집해야 하는지 궁금합니다. 핵심 템플릿 파일(wp-content/plugins/buddypress에서)을 편집해야 하는지 아니면 어떻게든 자신만의 BuddyPress 테마를 만들 수 있는 방법이 있습니까?&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;ul&gt; 
 &lt;li&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://codex.wordpress.org/Child_Themes&quot; papago-id=&quot;3-1&quot; rel=&quot;noreferrer&quot;&gt;아직&lt;/a&gt; 하위 &lt;a href=&quot;http://codex.wordpress.org/Child_Themes&quot; papago-id=&quot;3-1&quot; rel=&quot;noreferrer&quot;&gt;테마&lt;/a&gt;를 추가하지 않은 경우에는 하위 테마를 추가하는 것으로 시작합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&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://codex.buddypress.org/themes/theme-compatibility-1-7/template-hierarchy/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;4-1&quot;&gt;템플릿 계층&lt;/a&gt; 링크를 sla처럼 읽습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;FFik이 제안했습니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자녀 테마에 'buddypress' 디렉토리를 추가합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;wp-content/plugins/buddypress/bp-templates/bp-legacy/buddypress/(XXX/YY/)zz.php에서 편집할 핵심 템플릿 파일을 테마/자녀 테마/buddypress/(XXX/YY/)z.php로 복사합니다.&lt;/font&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;코어 파일을 직접 편집하면 BP를 업데이트할 때 변경 사항이 손실될 수 있습니다.&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://codex.buddypress.org/themes/theme-compatibility-1-7/template-hierarchy/&quot; rel=&quot;nofollow&quot; papago-id=&quot;8-1&quot;&gt;템플릿 계층&lt;/a&gt;(단일 구성원 페이지)&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/19977181/buddypress-templates-how-to-customize-user-page&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>WordPress</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/720</guid>
      <comments>https://starjava.tistory.com/720#entry720comment</comments>
      <pubDate>Thu, 19 Oct 2023 21:49:49 +0900</pubDate>
    </item>
    <item>
      <title>문자열 유형의 기본값이 빈 문자열이 아닌 null인 이유는 무엇입니까?</title>
      <link>https://starjava.tistory.com/719</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열 유형의 기본값이 빈 문자열이 아닌 null인 이유는 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 모든 조건을 시험하는 것은 꽤 귀찮은 일입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&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;ToUpper()&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;StartWith()&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&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;string&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;빈 문자열이라면 테스트할 필요가 없을 것이고 다른 값 유형과 더 일치한다고 느낄 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;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 class=&quot;papago-parent&quot;&gt;아니면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;double&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를들면.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Nullable&amp;lt;String&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;말이 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇다면 왜 C#의 디자이너들은&lt;/font&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 class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-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;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: 이 &lt;a href=&quot;https://stackoverflow.com/questions/265875/default-string-initialization-null-or-empty&quot; papago-id=&quot;12-1&quot;&gt;질문은 &lt;/a&gt;이 질문과 관련된 것이지만, 이 질문을 어떻게 처리할 것인지 보다는 그 이유에 더 초점이 맞추어져 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열 유형의 기본값이 빈 문자열이 아닌 null인 이유는 무엇입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&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;string&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;null&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;blockquote&gt; 
 &lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ToUpper(), StartWith() 등의 메서드를 안전하게 적용하기 전에 모든 문자열을 null로 테스트하는 것은 상당히 귀찮습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 참조 유형의 동작과 일치합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;인스턴스 구성원을 호출하기 전에 null 참조를 위한 체크를 입력해야 합니다.&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;문자열의 기본값이 빈 문자열이라면 테스트할 필요가 없을 것이며, 예를 들어 int나 double과 같은 다른 값 유형과 더 일치한다고 생각합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;14&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 특정 참조 유형에 기본값 할당&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&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;strong papago-id=&quot;21-1&quot;&gt;일관성&lt;/strong&gt;이 없게 만들 겁니다&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;Nullable&amp;lt;String&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 class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;말이 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;24&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/1t3y8s4s%28v=vs.110%29.aspx&quot; papago-id=&quot;24-0&quot; rel=&quot;noreferrer&quot;&gt;&lt;code papago-id=&quot;24-0-0&quot;&gt;Nullable&amp;lt;T&amp;gt;&lt;/code&gt;&lt;/a&gt; 값 유형과 함께 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;주목할 사실은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Nullable&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;a href=&quot;http://msdn.microsoft.com/en-us/library/b3h38hb0(v=vs.80).aspx&quot; papago-id=&quot;25-1&quot; rel=&quot;noreferrer&quot;&gt;.&lt;/a&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/b3h38hb0(v=vs.80).aspx&quot; papago-id=&quot;25-1&quot; rel=&quot;noreferrer&quot;&gt;그들&lt;/a&gt;이 그 규칙을 바꿨다면 많은 깨진 코드가 있었을 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(&lt;em papago-id=&quot;25-3&quot;&gt;정례&lt;a href=&quot;https://stackoverflow.com/users/109749/jcolebrand&quot; papago-id=&quot;25-3-1&quot;&gt; @jcolebrand&lt;/a&gt;)&lt;/em&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;string&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;21&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 참조 유형입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 더 중요한 것은, 당신이 확인할 &lt;em papago-id=&quot;28-1&quot;&gt;필요&lt;/em&gt;가 없다는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용할 때마다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 아마도 던져야 할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ArgumentNullException&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;만약 누군가가 당신의 기능을 통과한다면 a.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;25&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 문제입니다. 그 틀은 우리가 할 수 있는 일구어낼 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NullReferenceException&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;27&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어쨌든 당신이 전화를 하려고 했다면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.ToUpper()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;28&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;끈으로&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 사건은 당신이 당신의 주장을 시험하더라도 여전히 발생할 수 있다는 것을 기억하세요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;29&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;매개 변수로서 당신의 기능에 전달된 객체들에 대한 어떤 속성이나 방법이 평가될 수 있기 때문에&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;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;a href=&quot;http://msdn.microsoft.com/en-ca/library/bb383977.aspx&quot; rel=&quot;noreferrer&quot; papago-id=&quot;38-1&quot;&gt;확장 방법&lt;/a&gt;(가치가 있는 경우)을 작성할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public static string EmptyNull(this string str)
{
    return str ?? &quot;&quot;;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 안전하게 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;string str = null;
string upper = str.EmptyNull().ToUpper();
&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;C# 6.0 기준으로 다음을 사용할 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;string myString = null;
string result = myString?.ToUpper();
&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;문자열 결과가 null이 됩니다.&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;빈 문자열과 null은 기본적으로 다릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;null은 값이 없는 것이고 빈 문자열은 비어 있는 값입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 빈 문자열인 변수의 &quot;값&quot;에 대한 가정을 하는 프로그래밍 언어는 null 참조 문제를 일으키지 않는 다른 값으로 문자열을 초기화하는 것과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;44&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 해당 문자열 변수의 핸들을 응용 프로그램의 다른 부분으로 전달하면 해당 코드는 빈 값을 의도적으로 전달했는지 또는 해당 변수의 값을 채우는 것을 잊어버렸는지 확인할 방법이 없습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 문제가 될 수 있는 또 다른 경우는 문자열이 어떤 함수의 반환 값일 때입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열은 참조 유형이며 기술적으로 null과 empty 양쪽의 값을 가질 수 있기 때문에 함수는 기술적으로 null 또는 empty를 반환할 수도 있습니다(그렇게 하는 것을 막을 수 있는 것은 없습니다).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 &quot;값의 부재&quot;라는 두 가지 개념, 즉 빈 문자열과 null이 있기 때문에 이 함수를 소비하는 모든 코드는 두 가지 검사를 수행해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하나는 비어 있고 다른 하나는 null입니다.&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;빈 값과 null에 대한 자세한 내용은 아래 링크를 참조하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://softwareengineering.stackexchange.com/questions/32578/sql-empty-string-vs-null-value&quot; papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://softwareengineering.stackexchange.com/questions/32578/sql-empty-string-vs-null-value&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/405909/null-vs-empty-when-dealing-with-user-input&quot; papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 입력을 처리할 때 NULL vs Empty&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;31&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 ( 작용하는  구성원들이 /는(가)를 할 수 입니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;net과 상호 작용하는 방법을 정의하는) CLS 사양의 설계자들이 클래스 구성원들이 다음을 통해서가 아니라 직접 호출되어야 한다고 지정할 수 있는 수단을 정의하지 않았기 때문입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;callvirt&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;, 호출자가 null-reference 체크를 수행하지 않고, 또한 &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;33&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CLS 규격이 그러한 수단을 정의했다면 .net이 Common Object Model(COM)에 의해 설정된 리드를 일관되게 따르는 것이 가능할 것이며, 여기에서 널 문자&lt;/font&gt;&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 class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로, 각 구성원들에게 무슨 일이 일어날 것인가는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;String&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;34&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 들어, .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Length&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;[InvokableOnNull()] int String Length { get { if (this==null) return 0; else return _Length;} }&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;36&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이  방식은  매우 해야 합니다&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 이 접근 방식은 값처럼 행동해야 하는 것들에 대해 매우 좋은 의미론을 제공했을 것이지만 구현 문제 때문에 힙에 저장해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 접근법의 가장 큰 어려움은 그러한 유형과 유형 간의 변환의 의미론입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Object&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;38&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 접근 방식은 다음에서 상속되지 않은 특수 구조 유형의 정의를 허용하는 것이었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Object&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;39&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신에 맞춤형 복싱 및 언복싱 작업을 수행했습니다(다른 클래스 유형으로 변환/전환됨).&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그러한 접근법 하에서는 클래스 유형이 존재할 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NullableString&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;String&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;41&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 하나의 사적인 영역을 차지할 수 있는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Value&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;String&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;43&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하는 중입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;String&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;44&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NullableString&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;Object&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;46&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;돌아올 것입니다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Value&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;null이 아닌 경우 또는&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;String.Empty&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;48&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;무효인 경우에는&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;캐스팅 시도 중&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;String&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;49&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 에 대한 null이 아닌 언급.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;NullableString&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;인스턴스(instance)는 참조를 저장합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Value&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;51&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(길이가 0인 경우 null을 저장할 수 있음).&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 다른 참조를 캐스팅하면 예외가 발생합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&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;em papago-id=&quot;70-1&quot;&gt;동작&lt;/em&gt;하지 않아야 할 이유는 개념적으로 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;참조를 가지는 &quot;정상&quot; 구조로 저장되도록 하는 것이 유형 &quot;스트링&quot;으로 사용하는 코드에서는 효율적이었지만, &quot;오브젝트&quot;에 캐스팅할 때 간접 및 비효율성 층을 추가로 추가했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 최근에 .net이 위의 두 기능을 추가할 것으로 예상하지는 않지만, 아마도 향후 프레임워크 설계자들이 이 기능을 포함하는 것을 고려할 수 있을 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt; 
 &lt;p papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C#의 설계자들이 문자열의 기본값으로 null을 사용한 이유는 무엇입니까?&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;52&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열은 &lt;em papago-id=&quot;52-1&quot;&gt;참조 유형&lt;/em&gt;이므로 참조 유형은 기본값입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;53&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 참조 유형 변수는 실제 데이터에 대한 참조를 저장합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 키워드를 사용해 보겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;string str = default(string); 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;str&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;string&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;em papago-id=&quot;55-1&quot;&gt;참조 유형&lt;/em&gt;이므로 기본값은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;56&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;int str = (default)(int);
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;str&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;57&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;int&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;58&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, &lt;em papago-id=&quot;58-1&quot;&gt;값 유형&lt;/em&gt;이므로 기본값은&lt;/font&gt;&lt;/font&gt;&lt;code&gt;zero&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;59&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;81&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열 변수는 &lt;em papago-id=&quot;81-3&quot;&gt;인스턴스&lt;/em&gt;가 아닌 &lt;em papago-id=&quot;81-1&quot;&gt;참조&lt;/em&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;기본적으로 Empty로 초기화하는 것이 가능했겠지만 전반적으로 많은 불일치를 초래했을 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;60&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아마 당신이 사용한다면&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;??&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;61&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;연산자가 문자열 변수를 할당할 때 도움이 될 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;string str = SomeMethodThatReturnsaString() ?? &quot;&quot;;
// if SomeMethodThatReturnsaString() returns a null value, &quot;&quot; is assigned to str.
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;62&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본값인 경우&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;string&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;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;64&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;틀렸습니다! 기본값을 변경해도 참조 유형이라는 사실이 변경되지 않고 누군가가 참조를 다음과 같이 명시적으로 &lt;em papago-id=&quot;64-1&quot;&gt;설정&lt;/em&gt;할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;65&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;66&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;으로 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Nullable&amp;lt;String&amp;gt;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;67&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;말이 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;68&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요점은.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;허락하지 않는 것이 더 합리적일 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&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;Nullable&amp;lt;TheRefType&amp;gt;&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;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;71&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그렇다면 왜 C#의 디자이너들은&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;72&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열의 기본값으로 사용할 수 있습니까?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;73&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 참조 유형과의 일치성.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자, 왜 허락을 하십니까?&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;null&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;74&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고 유형으로 볼 수가 없어요?&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 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;Nullable&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;75&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;76&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문자열은 불변의 개체로, 값이 주어졌을 때 이전 값이 기억에서 지워지지 않고 이전 위치에 남아 새로운 값이 새로운 위치에 놓이는 것을 의미합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 만약 기본값이&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;String a&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;77&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이었다&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;String.Empty&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;String.Empty&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 class=&quot;papago-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;80&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아주 작아 보이지만 기본값이 다음인 문자열 배열을 초기화할 때 문제가 될 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;String.Empty&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;81&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 물론, 당신은 항상 변태성 물질을 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;StringBuilder&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;82&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 문제가 될 것 같으면 수업.&lt;/font&gt;&lt;/font&gt;&lt;/font&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;문자열은 참조 유형이고 참조 유형의 기본값은 null입니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;83&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;말씀하신 이후로&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ToUpper()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;84&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, 이 쓰레드를 찾은 방법은 이 쓰레드입니다. 이 바로가기(string ??&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; &quot;)를 공유하겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;상단()에 연결:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    private string _city;
    public string City
    {
        get
        {
            return (this._city ?? &quot;&quot;).ToUpper();
        }
        set
        {
            this._city = value;
        }
    }
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;109&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음보다 나은 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;        if(null != this._city)
        { this._city = this._city.ToUpper(); }
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;85&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;일 도 요.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;string&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;86&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;키워드는 다른 값 &lt;em papago-id=&quot;86-1&quot;&gt;유형&lt;/em&gt;의 선언과 똑같이 보이기 때문에 당신을 혼란스럽게 했습니다. 그러나 그것은 실제로 에 대한 별칭입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;System.String&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;87&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/7074/whats-the-difference-between-string-and-string&quot; papago-id=&quot;87-1&quot;&gt;본 문제&lt;/a&gt;에서 설명한 바와 같이&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;88&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 Visual Studio의 짙은 파란색과 소문자 첫 글자는 그것이 a라고 오해하게 할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;struct&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;89&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;115&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;nullable type이 2.0까지 들어오지 않았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;116&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;nullable 형식이 언어의 시작 부분에서 만들어졌더라면 string은 null이 아니고 string?은 null이 되었을 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 그들은 하위 호환성 때문에 이것을 할 수 없었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;117&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;많은 사람들이 ref-type, not ref-type을 이야기하지만, string은 일반적인 수업에서 벗어난 것이고 그것을 가능하게 하는 해결책이 발견되었을 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;118&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/14337551/why-is-the-default-value-of-the-string-type-null-instead-of-an-empty-string&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>string</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/719</guid>
      <comments>https://starjava.tistory.com/719#entry719comment</comments>
      <pubDate>Thu, 19 Oct 2023 21:49:43 +0900</pubDate>
    </item>
    <item>
      <title>NPM 스크립트 'start'가 Angular CLI가 요청을 수신하고 있음을 표시하지 않고 종료되었습니다.</title>
      <link>https://starjava.tistory.com/718</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;NPM 스크립트 'start'가 Angular CLI가 요청을 수신하고 있음을 표시하지 않고 종료되었습니다.&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;NET 코어 2/앵글 6 SPA.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 &quot;dotnet new angular&quot;를 사용하여 Angular 5 Application을 만든 다음 angular.io 의 이 &lt;a href=&quot;https://update.angular.io/&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;업그레이드가 끝나면 &quot;dotnet run&quot;을 사용하여 응용 프로그램을 실행하려고 했는데 다음 오류와 함께 보기 흉한 오류 페이지가 나타납니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요청을 처리하는 동안 처리되지 않은 예외가 발생했습니다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;골재&lt;/font&gt;&lt;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;(NPM 스크립트 'start'가 Angular CLI가 요청을 수신하고 있음을 표시하지 않고 종료되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류 출력: 알 수 없는 옵션: '--extractCss'&lt;/font&gt;&lt;/p&gt; 
 &lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;잘못된 작업&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예외:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NPM 스크립트 'start'가 Angular CLI에서 요청을 수신하고 있음을 표시하지 않고 종료되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;오류 출력: 알 수 없는 옵션: '--extractCss'&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;업그레이드 중에 한 단계를 놓친 것 같다는 생각에 두 번째 시도를 했는데 같은 오류가 발생했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;앱을 만든 후에 내가 한 단계는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;npm install -g @angular/cli
npm install @angular/cli
ng update @angular/cli
ng update @angular/core
npm install --save @angular/material @angular/cdk @angular/animations hammerjs 
npm install -g rxjs-tslint
rxjs-5-to-6-migrate -p src/tsconfig.app.json
&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;노드 버전 9.4.0 및 를 실행하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows 10 (1703) Enterprise에서 NetCore 2.1.200.&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; ---&amp;gt; System.IO.EndOfStreamException: Attempted to read past the end of the stream.
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.SpaServices.AngularCli.AngularCliMiddleware.&amp;lt;StartAngularCliServerAsync&amp;gt;d__3.MoveNext()
   --- End of inner exception stack trace ---
   at Microsoft.AspNetCore.SpaServices.AngularCli.AngularCliMiddleware.&amp;lt;StartAngularCliServerAsync&amp;gt;d__3.MoveNext()
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at Microsoft.AspNetCore.SpaServices.AngularCli.AngularCliMiddleware.&amp;lt;&amp;gt;c.&amp;lt;Attach&amp;gt;b__2_0(Task`1 task)
   at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task&amp;amp; currentTaskSlot)
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at Microsoft.AspNetCore.SpaServices.Extensions.Util.TaskTimeoutExtensions.&amp;lt;WithTimeout&amp;gt;d__1`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.SpaServices.Extensions.Proxy.SpaProxy.&amp;lt;PerformProxyRequest&amp;gt;d__4.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Builder.SpaProxyingExtensions.&amp;lt;&amp;gt;c__DisplayClass2_0.&amp;lt;&amp;lt;UseProxyToSpaDevelopmentServer&amp;gt;b__0&amp;gt;d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Builder.RouterMiddleware.&amp;lt;Invoke&amp;gt;d__4.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.&amp;lt;Invoke&amp;gt;d__7.MoveNext()
---&amp;gt; (Inner Exception #0) System.AggregateException: One or more errors occurred. (The NPM script 'start' exited without indicating that the Angular CLI was listening for requests. The error output was: Unknown option: '--extractCss'

) ---&amp;gt; System.InvalidOperationException: The NPM script 'start' exited without indicating that the Angular CLI was listening for requests. The error output was: Unknown option: '--extractCss'

 ---&amp;gt; System.IO.EndOfStreamException: Attempted to read past the end of the stream.
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.SpaServices.AngularCli.AngularCliMiddleware.&amp;lt;StartAngularCliServerAsync&amp;gt;d__3.MoveNext()
   --- End of inner exception stack trace ---
   at Microsoft.AspNetCore.SpaServices.AngularCli.AngularCliMiddleware.&amp;lt;StartAngularCliServerAsync&amp;gt;d__3.MoveNext()
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at Microsoft.AspNetCore.SpaServices.AngularCli.AngularCliMiddleware.&amp;lt;&amp;gt;c.&amp;lt;Attach&amp;gt;b__2_0(Task`1 task)
   at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke()
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task&amp;amp; currentTaskSlot)
---&amp;gt; (Inner Exception #0) System.InvalidOperationException: The NPM script 'start' exited without indicating that the Angular CLI was listening for requests. The error output was: Unknown option: '--extractCss'

 ---&amp;gt; System.IO.EndOfStreamException: Attempted to read past the end of the stream.
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.SpaServices.AngularCli.AngularCliMiddleware.&amp;lt;StartAngularCliServerAsync&amp;gt;d__3.MoveNext()
   --- End of inner exception stack trace ---
   at Microsoft.AspNetCore.SpaServices.AngularCli.AngularCliMiddleware.&amp;lt;StartAngularCliServerAsync&amp;gt;d__3.MoveNext()&amp;lt;---
&amp;lt;---
&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;ol&gt; 
 &lt;li 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-1&quot;&gt;파워셸&lt;/strong&gt; 열기&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;11-1&quot;&gt;클라이언트&lt;/strong&gt; 앱 디렉터리로 이동합니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 실행.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm audit fix&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;13-1&quot;&gt;반응&lt;/strong&gt;에 적합합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;13-1&quot;&gt;JS&lt;/strong&gt; &amp;amp; &lt;strong papago-id=&quot;13-3&quot;&gt;VueJS&lt;/strong&gt; 프로젝트도.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이것과 다음이 문제를 해결했습니다: https://github.com/angular/angular-cli/issues/10666&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;json 파일을 생성하고 시작 및 빌드 속성에서 --extractCss 매개 변수를 제거합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;출처:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;scripts&quot;: {
    &quot;ng&quot;: &quot;ng&quot;,
    &quot;start&quot;: &quot;ng serve --extract-css&quot;,
    &quot;build&quot;: &quot;ng build --extract-css&quot;,
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대상:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&quot;scripts&quot;: {
    &quot;ng&quot;: &quot;ng&quot;,
    &quot;start&quot;: &quot;ng serve&quot;,
    &quot;build&quot;: &quot;ng build&quot;,
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그 문제는 저도 며칠을 괴롭힙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 드디어 길을 터주시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;비주얼 스튜디오에서 ASP와 함께 Angular CLI 서버를 자동으로 실행하려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;넷코어 프로세스.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 경우 실패했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;따라서 여기 &lt;a href=&quot;https://learn.microsoft.com/en-us/aspnet/core/client-side/spa/angular?view=aspnetcore-2.1&amp;amp;tabs=visual-studio&quot; rel=&quot;noreferrer&quot; papago-id=&quot;18-1&quot;&gt;있는&lt;/a&gt; Microsoft Doc에 따르면 Angular CLI 서버를 수동으로 시작할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'ClientApp' 폴더로 이동한 후 다음 문제를 제기합니다.&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;ng 서브&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;/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;'Startup.cs ' 파일에서 바꾸기&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;spa.AngularCliServer 사용(...)&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;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;spa.UseProxyToSpaDevelopmentServer(&quot;http://localhost:4200&quot;);
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;3&quot;&gt; 
 &lt;li papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ASP를 시작하려면 F5를 사용합니다.&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;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;저의 경우, 저는 azure web app에서 아래의 어플리케이션 설정을 &lt;strong papago-id=&quot;27-1&quot;&gt;제거&lt;/strong&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;키 : ASPNETCORE_ENERVORE 가치 : 개발&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;며칠간 문제를 파악하느라 시간을 소비했습니다 :)&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 위의 해결책이 통하지 않는다면, 당신은 저에게 효과가 있었던 다음과 같은 것을 시도해 볼 수 있습니다.&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;작업 VS 2017 솔루션 : 코어 web api &amp;amp; angular spa projects를 새로 설치한 pc로 이전하였습니다; 위 오류가 발생하였습니다.&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;visual studio installer를 통해 node.js 워크로드를 설치한 후, node.js for window(https://nodejs.org/en/download/) 와 IIS에 필요한 window 기능을 설치한 후, 다시 정상 궤도에 올랐습니다.&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;메인 설치는 비주얼 스튜디오와 윈도우(npm 포함)를 위한 node.js로, 작동하려면 둘 다 설치해야 했습니다.&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;Joe와 Jays 솔루션 모두 효과가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;코드 변경 없이 기본 템플릿 구성을 사용하려면 위에서 Jay가 설명한 대로 window용 node.js를 설치한 다음 VS. https://nodejs.org/en/download/ 를 다시 시작하면 됩니다.&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;여기에는 vs 및 vScode를 사용하여 Core Angular 프로젝트를 생성, 구성 및 배포하는 방법에 대한 훌륭한 튜토리얼이 포함되어 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;IIS 설정도 포함합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://www.codeproject.com/Articles/1250961/Deploying-an-Angular-Application-with-ASP-NET-Core&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;35-1&quot;&gt;https://www.codeproject.com/Articles/1250961/Deploying-an-Angular-Application-with-ASP-NET-Core&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;- 하여 VS 2019를 가 해결됨 - ClientApp &lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm install&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;npm&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;Angular Cli와 함께 시스템에 설치됩니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular Cli를 설치하는 데 문제가 있는 경우 스크립트를 다음에서 변경할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ng serve&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm run start&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;꾸러미로&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;json 파일.&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;font class=&quot;papago-parent&quot;&gt;제가 한 일은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li 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;JS: https://nodejs.org/en/download&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;43&quot; papago-translate=&quot;translated&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;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령 프롬프트를 실행하고 &quot;client-app&quot; 폴더로 이동합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;dotnet new angular -o &quot;C:\Users\me\OneDrive\Documents\Visual Studio 2017\Projects\myproject\myproject-dev\myproject-client-app&quot; --force&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령 입력:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm install -g @angular/cli&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령 입력:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm build fix&lt;/code&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 class=&quot;papago-parent&quot;&gt;명령 입력:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm run ng&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령 입력:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm start&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령 입력:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ng start --extract-css&lt;/code&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;12&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(사실 이 마지막 명령어를 입력할 필요는 없었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;npm start&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;13&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트를 위해 이 명령을 시작했지만 항상 그렇지는 않을 수도 있습니다.)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;52&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;'Startup.cs ' 파일에서 바꾸기&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;spa.UseAngularCliServer(..)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;와 함께&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;spa.UseProxyToSpaDevelopmentServer(&quot;http://localhost:4200&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;ASP를 시작합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;NET Core 프로젝트는 응용 프로그램 디버깅을 시작하기 위해 우리가 통상적으로 하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;55&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 모든 것이 끝나면, 프로젝트는 실행될 것입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;nvm을 사용하여 노드 버전을 여러 개 설치한 경우.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;57&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;터미널의 프로젝트 루트에 cd를 넣고 실행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;nvm 사용 x.x.x&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것으로 나의 문제가 해결되었습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;도와주세요.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;설치 관리자에서 environment.js 노드를 설치합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;2)공식 웹사이트에서 OS용 node.js를 설치합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol start=&quot;3&quot;&gt; 
 &lt;li papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PowerShell을 통해 npm을 설치합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;관리자에서 열고 Client App 폴더로 이동하여 npm install을 실행합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 npm audit fix(오류 수정)를 실행합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt;&lt;p papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;프로젝트에서 Nodejs를 제거하고 Nodejs.org 에서 Nodejs의 최신 버전을 설치하는 것만으로 동일한 문제를 해결할 수 있었습니다.&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/50221618/the-npm-script-start-exited-without-indicating-that-the-angular-cli-was-listen&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angular</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/718</guid>
      <comments>https://starjava.tistory.com/718#entry718comment</comments>
      <pubDate>Thu, 19 Oct 2023 21:49:35 +0900</pubDate>
    </item>
    <item>
      <title>Xcode에서 파일 이름 또는 리팩터 변경</title>
      <link>https://starjava.tistory.com/717</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Xcode에서 파일 이름 또는 리팩터 변경&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;strong papago-id=&quot;2-1&quot;&gt;Xcode&lt;/strong&gt;의 &quot;&lt;strong papago-id=&quot;2-1&quot;&gt;Refactor&quot; 명령&lt;/strong&gt;을 사용하여 클래스 이름을 리팩터하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 명령을 사용하면 파일 또는 클래스(NIB 포함)를 참조하는 곳에서도 코드가 업데이트됩니다.&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;.h&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;Refactor-&amp;gt;Rename&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;, Xcode가 프로세스를 안내하여 변경 사항을 확인하기 전에 미리 볼 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;자세한 내용:&lt;/font&gt;&lt;/strong&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;@interface&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;)를 선택한 후 Refactor -&amp;gt; Rename을 선택합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 마우스 오른쪽 버튼을 클릭합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;ViewController&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;@interface ViewController : UIViewController
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/l3L04.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스의 새 이름을 입력합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/i8Hw1.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;Xcode에서는 커밋하기 전에 변경 사항을 검토할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/83Kiv.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;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;클래스 이름을 강조 표시하고 Xcode's를 사용할 수도 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Edit-&amp;gt;Refactor&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 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;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Xcode 4.2.1에서 작동: 프로젝트 탐색기(기본 왼쪽 패널)에서 파일을 선택하고 &lt;strong papago-id=&quot;15-1&quot;&gt;[탭]&lt;/strong&gt;을 누릅니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;16-0&quot;&gt;One Way&lt;/strong&gt;: 이름을 변경할 파일을 선택한 다음 를 누릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이것을 주로 사용하지만, Xcode는 이름을 변경하지 못할 때가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그럼 제가 하고 싶은 것은&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;17-0&quot;&gt;Another Way&lt;/strong&gt; : 파일을 선택합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;17-2&quot;&gt;검사기 영역&lt;/em&gt;(오른쪽 상단 모서리)을 엽니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 File &lt;em papago-id=&quot;17-4&quot;&gt;Inspector를 엽니다&lt;/em&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 이름을 편집할 수 있는 이름 필드가 나타납니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(스크린샷 참조).&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/QPuXS.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/QPuXS.png&quot; alt=&quot;enter image description here&quot;&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;파일 탐색기(왼쪽 윤곽선 보기)에서 파일 이름을 바꾸거나 검사기를 사용할 때 기본적으로 Xcode는 파일 이름을 바꿉니다.&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;Xcode 11.6, &quot;foo.cpp&quot;를 &quot;bar.cpp&quot;로 이름을 바꾸려고 시도하는 것은 위의 방법으로는 작동하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;REFACTOR 옵션이 회색으로 표시됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대신 다음을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Project Browser(프로젝트 검색기)에서 이름을 바꿀 파일(즉, foo.cpp)을 찾습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;foo.cpp를 오른쪽(손가락 2개) 클릭합니다.&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;&quot;파일 검사기에 표시&quot;를 선택합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;화면 오른쪽에 파일 검사기가 나타납니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이름 필드에 새 파일 이름을 입력하고 Enter 키를 누릅니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 이름을 수동으로 바꾸고 [찾기] 및 [바꾸기]를 사용하여 클래스 이름을 변경한 경우 파일이 제거될 수 있으므로 파일이 대상의 [빌드 페이즈]에서 [소스 컴파일]에 추가되었는지 확인합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Refactor 선택 -&amp;gt;Rename nevaning의 답변은 Xcode Version 7.0 베타(7A120f)에서도 정상 작동합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/3066163/rename-or-refactor-files-in-xcode&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>iPhone</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/717</guid>
      <comments>https://starjava.tistory.com/717#entry717comment</comments>
      <pubDate>Thu, 19 Oct 2023 21:49:26 +0900</pubDate>
    </item>
    <item>
      <title>여러 테이블을 카운트()하기 위한 SQL 쿼리</title>
      <link>https://starjava.tistory.com/716</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여러 테이블을 카운트()하기 위한 SQL 쿼리&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 다른 테이블과 하나부터 여러 개의 연관성이 있는 테이블을 가지고 있습니다.&lt;/font&gt;&lt;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 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;존 스미스 3 2 4&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;밥브라운 130&lt;/font&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;하위 쿼리 요인 설계(9i+):&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;WITH count_cars AS (
    SELECT t.person_id
           COUNT(*) num_cars
      FROM CARS c
  GROUP BY t.person_id),
     count_children AS (
    SELECT t.person_id
           COUNT(*) num_children
      FROM CHILDREN c
  GROUP BY t.person_id),
     count_pets AS (
    SELECT p.person_id
           COUNT(*) num_pets
      FROM PETS p
  GROUP BY p.person_id)
   SELECT t.name,
          NVL(cars.num_cars, 0) 'Count(cars)',
          NVL(children.num_children, 0) 'Count(children)',
          NVL(pets.num_pets, 0) 'Count(pets)'
     FROM PERSONS t
LEFT JOIN count_cars cars ON cars.person_id = t.person_id
LEFT JOIN count_children children ON children.person_id = t.person_id
LEFT JOIN count_pets pets ON pets.person_id = t.person_id
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인라인 뷰 사용:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   SELECT t.name,
          NVL(cars.num_cars, 0) 'Count(cars)',
          NVL(children.num_children, 0) 'Count(children)',
          NVL(pets.num_pets, 0) 'Count(pets)'
     FROM PERSONS t
LEFT JOIN (SELECT t.person_id
                  COUNT(*) num_cars
             FROM CARS c
         GROUP BY t.person_id) cars ON cars.person_id = t.person_id
LEFT JOIN (SELECT t.person_id
                  COUNT(*) num_children
             FROM CHILDREN c
         GROUP BY t.person_id) children ON children.person_id = t.person_id
LEFT JOIN (SELECT p.person_id
                  COUNT(*) num_pets
             FROM PETS p
         GROUP BY p.person_id) pets ON pets.person_id = t.person_id
&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;COUNT(distinct x.id)&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;synthax:&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT person.name, 
       COUNT(DISTINCT car.id) cars, 
       COUNT(DISTINCT child.id) children, 
       COUNT(DISTINCT pet.id) pets
  FROM person
  LEFT JOIN car ON (person.id = car.person_id)
  LEFT JOIN child ON (person.id = child.person_id)
  LEFT JOIN pet ON (person.id = pet.person_id)
 GROUP BY person.name
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 아마 이렇게 할 겁니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT Name, PersonCars.num, PersonChildren.num, PersonPets.num
FROM Person p
LEFT JOIN (
   SELECT PersonID, COUNT(*) as num
   FROM Person INNER JOIN Cars ON Cars.PersonID = Person.PersonID
   GROUP BY Person.PersonID
) PersonCars ON PersonCars.PersonID = p.PersonID
LEFT JOIN (
   SELECT PersonID, COUNT(*) as num
   FROM Person INNER JOIN Children ON Children.PersonID = Person.PersonID
   GROUP BY Person.PersonID
) PersonChildren ON PersonChildren.PersonID = p.PersonID
LEFT JOIN (
   SELECT PersonID, COUNT(*) as num
   FROM Person INNER JOIN Pets ON Pets.PersonID = Person.PersonID
   GROUP BY Person.PersonID
) PersonPets ON PersonPets.PersonID = p.PersonID
&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;RDBMS의 사용자 취향에 따라 다음과 같은 중첩 선택을 지원하는지 여부에 따라 달라집니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT p.name AS name
   , (SELECT COUNT(*) FROM pets e WHERE e.owner_id = p.id) AS pet_count
   , (SELECT COUNT(*) FROM cars c WHERE c.owner_id = p.id) AS world_pollution_increment_device_count
   , (SELECT COUNT(*) FROM child h WHERE h.parent_id = p.id) AS world_population_increment
FROM person p
ORDER BY p.name
&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;IIRC, 이것은 적어도 Postgre와 함께 작동합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL 및 MSSQL.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;테스트되지 않았으므로 주행 거리가 다를 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하위 선택 항목을 사용하는 것은 그다지 좋은 방법은 아니지만, 여기에 있을 수도 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;p.name 을 선택하고 (c.idperson = p.idperson인 cars c에서 count(0) 선택),&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(ch.idperson = p.idperson인 children ch에서 카운트(0) 선택),&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(pets pt.idperson = p.idperson에서 카운트(0) 선택)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;p 인물로부터&lt;/font&gt;&lt;/pre&gt;&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;세 개의 외부 결합을 사용하여 이 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT
    Person.Name,
    sum(case when cars.id is not null then 1 else 0 end) car_count,
    sum(case when children.id is not null then 1 else 0 end) child_count,
    sum(case when pets.id is not null then 1 else 0 end) pet_count
FROM
    Person
LEFT OUTER JOIN
    cars on
    Person.id = cars.person_id
LEFT OUTER JOIN
    children on
    Person.id = children.person_id
LEFT OUTER JOIN
    pets on
    Person.id = pets.person_id
GROUP BY
    Person.Name
&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;Oracle은 이제 다음과 같은 기능을 지원합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;case when&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;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 머리속에서,&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SELECT  p.Name, COUNT(DISTINCT t.Cars), COUNT(DISTINCT o.Children), Count(DISTINCT p.Pets)
FROM Person p
INNER JOIN Transport t ON p.ID = t.PersonID
LEFT JOIN Offspring o ON p.ID = o.PersonID
LEFT JOIN Pets p ON p.ID = o.OwnerID
GROUP BY p.Name
ORDER BY p.Name
&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/1379723/sql-query-to-count-multiple-tables&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>oracle</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/716</guid>
      <comments>https://starjava.tistory.com/716#entry716comment</comments>
      <pubDate>Thu, 19 Oct 2023 21:49:18 +0900</pubDate>
    </item>
    <item>
      <title>MariaDB 구문 오류</title>
      <link>https://starjava.tistory.com/715</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MariaDB 구문 오류&lt;/font&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;CREATE TABLE movie(
id int() NOT NULL AUTO_INCREMENT,
name varchar() NOT NULL,
type int() NOT NULL default 0,
year int() NOT NULL default 0,
leadactor int() NOT NULL default 0,
director int() NOT NULL default 0,
PRIMARY KEY(id),
KEY type(type.year)
);

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 ') NOT NULL AUTOINCREMENT default 0, name varchar() NOT NULL default 0, type ' at line 2
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어떻게 고쳐야 할지 모르겠어요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 최신 xampp 버전을 사용하고 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제거합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;()&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;int&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;varchar()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;값이 필요합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막 행의 마침표는 쉼표여야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CREATE TABLE movie (
    id int NOT NULL AUTO_INCREMENT,
    name varchar(255) NOT NULL,
    type int NOT NULL default 0,
    year int NOT NULL default 0,
    leadactor int NOT NULL default 0,
    director int NOT NULL default 0,
    PRIMARY KEY(id),
    KEY type(type, year)
);
&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;a href=&quot;http://www.sqlfiddle.com/#!9/bc147&quot; rel=&quot;nofollow&quot; papago-id=&quot;6-0&quot;&gt;여기&lt;/a&gt; SQL Fiddle이 있습니다.&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/33723031/mariadb-syntax-error&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MariaDB</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/715</guid>
      <comments>https://starjava.tistory.com/715#entry715comment</comments>
      <pubDate>Thu, 19 Oct 2023 21:49:10 +0900</pubDate>
    </item>
    <item>
      <title>다른 사용자가 소유한 데이터베이스 링크 생성을 위한 Oracle 구문</title>
      <link>https://starjava.tistory.com/714</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 사용자가 소유한 데이터베이스 링크 생성을 위한 Oracle 구문&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;db 링크를 만드는 일반적인 구문은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;create database link remote_db_link 
connect to remote_user 
identified by remote_password 
using 'remote_db'
&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;하지만 저는 제 DB 링크가 생성된 후 다른 계정으로 소유하고 싶습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것을 할 방법이 방법이 있습니까?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 작동하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;create database link anotheruser.remote_db_link 
connect to remote_user 
identified by remote_password 
using 'remote_db'
&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;구문에서 다른 스키마에 데이터베이스 링크를 만들 수 없다는 점에서 Sathya가 맞습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만..&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;b papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해결 방법&lt;/font&gt;&lt;/b&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 사용자의 스키마에 데이터베이스 링크를 만들 수 &lt;b papago-id=&quot;0-1&quot;&gt;있습니다&lt;/b&gt;.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;anotheruser&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;CREATE DATABASE LINK&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;권한 및 연결되어 있는 사용자를 has로 지정합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;CREATE ANY PROCEDURE&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 papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;create procedure 다른 사용자 &quot;tmp_doit_200906121431&quot;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;가&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;시작한다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;즉시 실행.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스 링크 remote_db_link 생성&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;remote_user에 연결&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;remote_password로 식별됨&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;''remote_db'' 사용;&lt;/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;다른 사용자 &quot;tmp_doit_200906121431&quot;;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;끝;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;/&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;삭제 절차다른 사용자 &quot;tmp_doit_200906121431&quot;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;/&lt;/font&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 class=&quot;papago-parent&quot;&gt;먼저, 절차를 작성합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;anotherusers&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;CREATE DATABASE LINK&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;CREATE DATABASE LINK&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;anotheruser&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;소문자(큰따옴표로 프로시저 이름을 포함)를 사용하고, &quot;tmp&quot;를 사용하여 이 개체를 &quot;임시&quot;로 표시하며, 현재 yyyymmddhh24miss를 프로시저 이름의 일부로 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(저는 보통 DBA의 쿼리를 실행합니다.)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일치하는 object_name이(가) 존재하지 않는지 확인하는 OBjects.)&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 &quot;일회성&quot; 유형의 관리 기능의 경우 실행 가능한 해결책입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 사용자의 암호 저장, 암호 변경, 사용자로 연결, 저장된 다른 사용자의 암호를 다시 설정하는 방법보다 이 방법을 선호합니다.)&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_5005.htm&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;20-0&quot;&gt;DBLinks에 대한 제한&lt;/a&gt; - 다른 사용자의 스키마에 데이터베이스 링크를 만들 수 없으며, 스키마 이름으로 dblink의 수식을 지정할 수 없습니다.&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;SYS 사용자는 SYS의 모든 db 링크를 볼 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;DBA_DB_LINKs 보기.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;해당 보기는 link$와 user$ 테이블을 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;평소와 같이 새로운 dblink를 생성할 수 있으며 link$ 테이블에 표시됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 소유자를 변경합니다(user$에서 id 사용). commit.&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;URL : https://stackoverflow.com/questions/988230/oracle-syntax-for-creating-database-link-owned-by-another-user&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>oracle</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/714</guid>
      <comments>https://starjava.tistory.com/714#entry714comment</comments>
      <pubDate>Thu, 19 Oct 2023 21:49:04 +0900</pubDate>
    </item>
    <item>
      <title>Laravel의 데이터베이스 계층을 독립적으로 사용할 수 있습니까?</title>
      <link>https://starjava.tistory.com/713</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Laravel의 데이터베이스 계층을 독립적으로 사용할 수 있습니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;한동안 나는 내 작업을 위해 php 프레임워크를 사용하는 것을 기대해 왔습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 최근까지 절차적인 스타일을 써왔고 아직도 웁 월드/스타일에서 제 길을 찾으려 노력하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 php 프레임워크가 더 나은 코드를 작성하는 데 도움이 될 것이라고 생각했고 가까운 미래에 라라벨 프로젝트에 기대게 될 것이라고 확신합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;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;구현이 쉬웠기 때문에(이전에는 MySQL을 사용) 지금은 준비된 문장과 함께 mysqli를 사용합니다.&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;저는 pdo wrapper/class를 사용하는 &quot;쉬운&quot; 방법으로 http://medoo.in 을 살펴보았지만, 지원 페이지에서 활동이 부족하고, 앞으로 Laravel을 사용하기 위해 노력하고 있다는 사실이 저의 기존 코드에 Laravel database layer를 지금 사용할 수 있는지 궁금하게 만들었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것이 가능하고 말이 될까요? 아니면 제가 코드 스타일링의 개념을 잘못 이해하고 섞고 있는 건가요?&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;IMO 단계적으로 OOP 방식으로 전환하는 것이 절대적으로 유효합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;질문 내용:&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;네, 웅변 단독으로 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;포장마차 사이트 https://packagist.org/packages/illuminate/database 추가&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;illuminate/database&quot;: &quot;5.0.*@dev&quot;&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;composer.json&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;composer update&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;(https://github.com/illuminate/database)&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;다음은 repo의 read me에서 복사한 것입니다.&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;먼저 새 &quot;Capsule&quot; Manager 인스턴스를 만듭니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;캡슐은 Laravel 프레임워크 외부에서 사용할 수 있도록 라이브러리를 구성하는 것을 목표로 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;use Illuminate\Database\Capsule\Manager as Capsule;

$capsule = new Capsule;

$capsule-&amp;gt;addConnection([
    'driver'    =&amp;gt; 'mysql',
    'host'      =&amp;gt; 'localhost',
    'database'  =&amp;gt; 'database',
    'username'  =&amp;gt; 'root',
    'password'  =&amp;gt; 'password',
    'charset'   =&amp;gt; 'utf8',
    'collation' =&amp;gt; 'utf8_unicode_ci',
    'prefix'    =&amp;gt; '',
]);

// Set the event dispatcher used by Eloquent models... (optional)
use Illuminate\Events\Dispatcher;
use Illuminate\Container\Container;
$capsule-&amp;gt;setEventDispatcher(new Dispatcher(new Container));

// Set the cache manager instance used by connections... (optional)
$capsule-&amp;gt;setCacheManager(...);

// Make this Capsule instance available globally via static methods... (optional)
$capsule-&amp;gt;setAsGlobal();

// Setup the Eloquent ORM... (optional; unless you've used setEventDispatcher())
$capsule-&amp;gt;bootEloquent();
&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;캡슐 인스턴스(instance)가 등록되면,&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같이 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;쿼리 작성기 사용&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$users = Capsule::table('users')-&amp;gt;where('votes', '&amp;gt;', 100)-&amp;gt;get();
&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;다른 핵심 방법은 DB 파사드와 동일한 방식으로 캡슐에서 직접 액세스할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;$results = Capsule::select('select * from users where id = ?', array(1));
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스키마 빌더 사용하기&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;Capsule::schema()-&amp;gt;create('users', function($table)
{
    $table-&amp;gt;increments('id');
    $table-&amp;gt;string('email')-&amp;gt;unique();
    $table-&amp;gt;timestamps();
});
&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;웅변 ORM 사용하기&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class User extends Illuminate\Database\Eloquent\Model {}

$users = User::where('votes', '&amp;gt;', 1)-&amp;gt;get();
&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;이 라이브러리에서 제공하는 다양한 데이터베이스 기능 사용에 대한 자세한 문서는 Laravel 프레임워크 문서를 참조하십시오.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;바스티안의 대답은 꽤 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 한가지 더 있습니다.&lt;/font&gt;&lt;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;composer require illuminate/events
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 가도 좋습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/26083175/can-i-use-laravels-database-layer-standalone&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MySQL</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/713</guid>
      <comments>https://starjava.tistory.com/713#entry713comment</comments>
      <pubDate>Thu, 19 Oct 2023 21:48:58 +0900</pubDate>
    </item>
    <item>
      <title>lsb_release: 최신 Ubuntu Docker 컨테이너에 명령을 찾을 수 없습니다.</title>
      <link>https://starjava.tistory.com/712</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;lsb_release: 최신 Ubuntu Docker 컨테이너에 명령을 찾을 수 없습니다.&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;$ docker run -it ubuntu    
root@471bdb08b11a:/# lsb_release -a
bash: lsb_release: command not found
root@471bdb08b11a:/# 
&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;a href=&quot;http://www.andryhacks.com/bash-lsb_release-command-not-found/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;2-1&quot;&gt;여기&lt;/a&gt;서 제안한 대로).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;root@471bdb08b11a:/# apt install lsb_release
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package lsb_release
root@471bdb08b11a:/# 
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이게 왜 안 되는지 아는 사람?&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 것 같습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;lsb_release&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;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;apt-get update &amp;amp;&amp;amp; apt-get install -y lsb-release &amp;amp;&amp;amp; apt-get clean all
&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;cat /etc/os-release&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;OS 상세 정보가 표시될 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;데비안의 스크린샷.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/Y6oCh.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/Y6oCh.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;우분투 스크린샷.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/8YncI.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/8YncI.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;중절모의 스크린샷.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/kDHF1.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/kDHF1.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 오류는 ubuntu 16.04에서 기본 python3 프로그램 버전을 제거하거나 업그레이드할 때 발생할 수 있습니다.&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;이를 수정하는 방법은 ubuntu와 함께 제공되는 원래 python3 버전을 다시 설치하고 다시 연결하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(unubuntu 16.04 - 기본 python3 버전은 python 3.5입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;sudo rm /usr/bin/python3
sudo ln -s /usr/bin/python3.5 /usr/bin/python3
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;lsb_release.py&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;/usr/share/pyshared&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;python3.6 이상은 내게 참조된 것 같지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 다음이 나중에 파이썬 설치에서 이것에 대한 링크를 다시 만들 것이라는 것을 발견했습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;/usr/share&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;sudo ln -s /usr/share/pyshared/lsb_release.py /usr/lib/python3.9/site-packages/lsb_release.py
&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;lsb_release: command not found&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;페도라 또는 레드햇에 설치할 패키지는 레드햇-lsb-코어이므로&lt;/font&gt;&lt;/font&gt;&lt;code&gt;sudo dnf install redhat-lsb-core&lt;/code&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;도커 파일을 작성하는 동안 lsb-release 패키지를 추가할 수 있습니다 - 이렇게.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;RUN apt-get update -y \
    &amp;amp;&amp;amp; apt-get upgrade -y \
    &amp;amp;&amp;amp; apt-get install lsb-release -y \
    &amp;amp;&amp;amp; apt-get clean all
&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;OS가 Ubuntu라고 가정합니다.&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/58395566/lsb-release-command-not-found-in-latest-ubuntu-docker-container&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>docker</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/712</guid>
      <comments>https://starjava.tistory.com/712#entry712comment</comments>
      <pubDate>Thu, 19 Oct 2023 21:48:51 +0900</pubDate>
    </item>
    <item>
      <title>이미지를 자동으로 잘라내고 가운데로 맞추는 방법</title>
      <link>https://starjava.tistory.com/711</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지를 자동으로 잘라내고 가운데로 맞추는 방법&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;임의의 이미지가 있는 경우 이미지 중앙에서 정사각형을 잘라내어 주어진 정사각형 안에 표시합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/493296/css-display-an-image-resized-and-cropped&quot; papago-id=&quot;2-1&quot;&gt;이&lt;/a&gt; 질문은 &lt;a href=&quot;https://stackoverflow.com/questions/493296/css-display-an-image-resized-and-cropped&quot; papago-id=&quot;2-1&quot;&gt;이것과 유사&lt;/a&gt;합니다: CSS &lt;a href=&quot;https://stackoverflow.com/questions/493296/css-display-an-image-resized-and-cropped&quot; papago-id=&quot;2-1&quot;&gt;Display&lt;/a&gt; an Image &lt;a href=&quot;https://stackoverflow.com/questions/493296/css-display-an-image-resized-and-cropped&quot; papago-id=&quot;2-1&quot;&gt;Resize and&lt;/a&gt; Cropped, 하지만 이미지의 크기를 모르기 때문에 설정된 여백을 사용할 수 없습니다.&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;hr&gt; 
&lt;h1 papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본예제&lt;/font&gt;&lt;/h1&gt; 
&lt;p&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-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;.center-cropped {
  width: 100px;
  height: 100px;
  background-position: center center;
  background-repeat: no-repeat;
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;center-cropped&quot; 
     style=&quot;background-image: url('https://via.placeholder.com/200');&quot;&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;h1&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;img&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;/h1&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;img&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지를 저장하기 위해 드래그하거나 마우스 오른쪽 버튼을 클릭하는 기능을 잃지 않도록 태그를 지정합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://css-tricks.com/crop-top/&quot; papago-id=&quot;8-1&quot; rel=&quot;noreferrer&quot;&gt;불투명&lt;/a&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-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;.center-cropped {
  width: 100px;
  height: 100px;
  background-position: center center;
  background-repeat: no-repeat;
  overflow: hidden;
}

/* Set the image to fill its parent and make transparent */
.center-cropped img {
  min-height: 100%;
  min-width: 100%;
  /* IE 8 */
  -ms-filter: &quot;progid:DXImageTransform.Microsoft.Alpha(Opacity=0)&quot;;
  /* IE 5-7 */
  filter: alpha(opacity=0);
  /* modern browsers */
  opacity: 0;
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;center-cropped&quot; 
     style=&quot;background-image: url('https://via.placeholder.com/200');&quot;&amp;gt;
  &amp;lt;img src=&quot;https://via.placeholder.com/200&quot; /&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt; 
 &lt;/div&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;h1&gt;&lt;code&gt;object-fit&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;-position&lt;/code&gt;&lt;/h1&gt; 
&lt;p&gt;&lt;em papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://caniuse.com/#feat=object-fit&quot; rel=&quot;noreferrer&quot; papago-id=&quot;10-0&quot;&gt;지원되는 브라우저를 참조&lt;/a&gt;합니다.&lt;/font&gt;&lt;/em&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;a href=&quot;http://www.w3.org/TR/css3-images/&quot; papago-id=&quot;11-1&quot; rel=&quot;noreferrer&quot;&gt;CSS3 Images 규격&lt;/a&gt;은 다음을 정의합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;object-fit&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;object-position&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;속성들은 함께 a의 이미지 내용의 스케일과 위치에 대한 더 큰 제어를 허용합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;img&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 통해 원하는 효과를 얻을 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&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-css lang-css prettyprint-override&quot;&gt;&lt;code&gt;.center-cropped {
  object-fit: none; /* Do not scale the image */
  object-position: center; /* Center the image within the element */
  height: 100px;
  width: 100px;
}&lt;/code&gt;&lt;/pre&gt; 
  &lt;pre class=&quot;snippet-code-html lang-html prettyprint-override&quot;&gt;&lt;code&gt;&amp;lt;img class=&quot;center-cropped&quot; src=&quot;https://via.placeholder.com/200&quot; /&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;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 순수 CSS 솔루션을 찾고 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;img&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;태그(배경 이미지 방식이 아님).&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://jonathannicol.com/blog/2014/06/16/centre-crop-thumbnails-with-css/&quot; rel=&quot;noreferrer&quot; papago-id=&quot;17-1&quot;&gt;CSS로 농작물 썸네일&lt;/a&gt;의 목표를 달성할 수 있는 훌륭한 방법을 찾았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.thumbnail {
  position: relative;
  width: 200px;
  height: 200px;
  overflow: hidden;
}
.thumbnail img {
  position: absolute;
  left: 50%;
  top: 50%;
  height: 100%;
  width: auto;
  -webkit-transform: translate(-50%,-50%);
      -ms-transform: translate(-50%,-50%);
          transform: translate(-50%,-50%);
}
.thumbnail img.portrait {
  width: 100%;
  height: auto;
}
&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;@Nathan Redblur의 대답과 비슷하지만 초상화 이미지도 허용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저에겐 매력적인 일입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지에 대해 알아야 할 것은 이미지를 설정하기 위해 초상화인지 풍경인지 여부입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;.portrait&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;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;시도해 보기:&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지 크롭 치수를 설정하고 CSS에서 다음 줄을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;object-fit: cover;
&lt;/code&gt;&lt;/pre&gt;&lt;h1&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;img&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;background-image&lt;/code&gt;&lt;/h1&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;img&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;background-image&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS를 중심으로 자르기만 하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;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&gt;&lt;a href=&quot;http://jsfiddle.net/vYdBt/452/&quot; papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(View in Action)&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;29&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마크업&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;center-cropped&quot;&amp;gt;
    &amp;lt;img src=&quot;http://placehold.it/200x150&quot; alt=&quot;&quot; /&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;30&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;div.center-cropped {
  width: 100px;
  height: 100px;
  overflow:hidden;
}
div.center-cropped img {
  height: 100%;
  min-width: 100%;
  left: 50%;
  position: relative;
  transform: translateX(-50%);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;@Russ와 @Alex의 답변을 사용하여 angularjs 지시문을 만들었습니다.&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;2014년 이후에도 흥미로울 수 있음:P&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;html&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div ng-app=&quot;croppy&quot;&amp;gt;
  &amp;lt;cropped-image src=&quot;http://placehold.it/200x200&quot; width=&quot;100&quot; height=&quot;100&quot;&amp;gt;&amp;lt;/cropped-image&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;34&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;js&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;angular.module('croppy', [])
  .directive('croppedImage', function () {
      return {
          restrict: &quot;E&quot;,
          replace: true,
          template: &quot;&amp;lt;div class='center-cropped'&amp;gt;&amp;lt;/div&amp;gt;&quot;,
          link: function(scope, element, attrs) {
              var width = attrs.width;
              var height = attrs.height;
              element.css('width', width + &quot;px&quot;);
              element.css('height', height + &quot;px&quot;);
              element.css('backgroundPosition', 'center center');
              element.css('backgroundRepeat', 'no-repeat');
              element.css('backgroundImage', &quot;url('&quot; + attrs.src + &quot;')&quot;);
          }
      }
  });
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;http://jsfiddle.net/pferdefleisch/Q7HNj/1/&quot; papago-id=&quot;35&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;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;#yourElementId
{
    background: url(yourImageLocation.jpg) no-repeat center center;
    width: 100px;
    height: 100px;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명심하세요.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;width&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;height&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DOM 요소에 레이아웃(예: 블록 표시 요소)이 있는 경우에만 작동합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;div&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;img&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(예를 들어, span)이 아니면 추가합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;display: block;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;23&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS 규칙에 따라.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS 파일에 대한 액세스 권한이 없는 경우 요소의 인라인 스타일을 삭제합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지 중심을 자를 수 있는 다른 방법이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.thumbnail{position: relative; overflow: hidden; width: 320px; height: 640px;}
.thumbnail img{
    position: absolute; top: -999px; bottom: -999px; left: -999px; right: -999px;
    width: auto !important; height: 100% !important; margin: auto;
}
.thumbnail img.vertical{width: 100% !important; height: auto !important;}
&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;필요한 것은 수직 이미지에 클래스 &quot;수직&quot;을 추가하는 것입니다. 이 코드를 사용하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;jQuery(function($) {
    $('img').one('load', function () {
        var $img = $(this);
        var tempImage1 = new Image();
        tempImage1.src = $img.attr('src');
        tempImage1.onload = function() {
            var ratio = tempImage1.width / tempImage1.height;
            if(!isNaN(ratio) &amp;amp;&amp;amp; ratio &amp;lt; 1) $img.addClass('vertical');
        }
    }).each(function () {
        if (this.complete) $(this).load();
    });
});
&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;참고: &quot;!important&quot;는 img 태그에서 가능한 너비, 높이 속성을 재정의하는 데 사용됩니다.&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;인스타그램 탐색이나 그리드 같은 것은 IMG 태그에 이것을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;aspect-ratio: 1 / 1; //or whatever
object-fit: cover;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;47&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;부모는 그리드를 표시해야 합니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;48&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이미지 주변에 두 개의 플렉스 박스를 사용하여 크기를 조정하고 크룹을 조정하는 등의 최상의 기능을 제공합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;전체화면 이미지에 사용하기 적합 (이미지 회전목마에 사용합니다)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;가로:100vw, 높이:100vh 컨테이너는 magic css입니다.&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;HTML:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;div class=&quot;container&quot;&amp;gt;
   &amp;lt;div class=&quot;slide&quot;&amp;gt;
   &amp;lt;img src=&quot;https://someimageurl.jpg&quot; 
   alt=&quot;image&quot; class=&quot;image&quot;&amp;gt;
   &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;50&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;CSS:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;  .container {
  display: flex;
  position: relative;
  width: 100vw;
  height: 100vh;
  margin: 0;
  padding: 0;
  justify-items: center;
  justify-content: center;
  }
 
 .slide {
 display: flex;
 width: 100%;
 height: 100%;
 max-width: 1600px;
 max-height: 1000px;
 justify-items: center;
 justify-content: center;
 margin: auto;
 padding: 0;
 overflow: hidden;
 }
 
 .image {
 display: block;
 min-width: 100%;
 min-height: 100%;
 object-fit: cover; /* Cover the image */
 object-position: center;
 margin: auto;
 padding: 0;
 }
&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;URL : https://stackoverflow.com/questions/11552380/how-to-automatically-crop-and-center-an-image&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>CSS</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/711</guid>
      <comments>https://starjava.tistory.com/711#entry711comment</comments>
      <pubDate>Thu, 19 Oct 2023 21:48:43 +0900</pubDate>
    </item>
    <item>
      <title>UI 검색바 검색 텍스트 색상을 변경하려면 어떻게 해야 합니까?</title>
      <link>https://starjava.tistory.com/710</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;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;UISearchBar&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신은 접속해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UITextField&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;UIS 검색 바 안에 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;를 사용하면 됩니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;valueForKey(&quot;searchField&quot;)&lt;/code&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var textFieldInsideSearchBar = yourSearchbar.valueForKey(&quot;searchField&quot;) as? UITextField

textFieldInsideSearchBar?.textColor = yourcolor
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;em papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스위프트 3 업데이트&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let textFieldInsideSearchBar = yourSearchbar.value(forKey: &quot;searchField&quot;) as? UITextField

textFieldInsideSearchBar?.textColor = yourcolor
&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;스토리보드에서 UI 검색 표시줄의 텍스트 색상을 설정하려면(코드가 없는) ID 검사기에서도 쉽게 설정할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 검색창 빨간색 텍스트가 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/MZIB7.png&quot; rel=&quot;noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/MZIB7.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;어두운 배경에서만 읽을 수 있도록 해야 하는 경우에는 막대 스타일을 변경할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음은 검색 표시줄의 텍스트와 단추를 흰색으로 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;searchController.searchBar.barStyle = .black
&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;Swift 4에서 일하는 것은 저를 위한 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSAttributedStringKey.foregroundColor.rawValue: UIColor.white]
&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;스위프트 4.2, IOS 12:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;public extension UISearchBar {

    public func setTextColor(color: UIColor) {
        let svs = subviews.flatMap { $0.subviews }
        guard let tf = (svs.filter { $0 is UITextField }).first as? UITextField else { return }
        tf.textColor = color
    }
}
&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;iOS 11, Xcode 9에서 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).textColor = UIColor.blue
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 그것을 글로 적습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;AppDelegate&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&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내가 생각하는 가장 편리한 방법은 a를 설정하는 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;textColor&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;UISearchBar&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;blockquote&gt; 
 &lt;p papago-id=&quot;16&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스위프트 3.0&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;    extension UISearchBar {

       var textColor:UIColor? {
           get {
               if let textField = self.value(forKey: &quot;searchField&quot;) as? 
   UITextField  {
                   return textField.textColor
               } else {
                   return nil
               }
           }

           set (newValue) {
               if let textField = self.value(forKey: &quot;searchField&quot;) as? 
   UITextField  {
                   textField.textColor = newValue
               }
           }
       }
   }
&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;사용.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;searchBar.textColor = UIColor.blue // Your color
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스위프트 2.3&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;extension UISearchBar {

 var textColor:UIColor? {
     get {
         if let textField = self.valueForKey(&quot;searchField&quot;) as? UITextField  {
             return textField.textColor
         } else {
             return nil
         }
     }

     set (newValue) {
         if let textField = self.valueForKey(&quot;searchField&quot;) as? UITextField  {
             textField.textColor = newValue
         }
     }
 }
} 
&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;searchBar.textColor = UIColor.blueColor() // Your color
&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;Xcode 11 및 iOS 13 이후 텍스트 필드에 직접 액세스하는 것이 가능해졌습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;searchBar.searchTextField
&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;extension UISearchBar {
    public var textField: UITextField? {
        if #available(iOS 13.0, *) {
            return searchTextField
        } 

        guard let firstSubview = subviews.first else {
            assertionFailure(&quot;Could not find text field&quot;)
            return nil
        }

        for view in firstSubview.subviews {
            if let textView = view as? UITextField {
                return textView
            }
        }

        assertionFailure(&quot;Could not find text field&quot;)

        return nil
    }
}
&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;치명적인 오류로 인해 옵션이 아닌 코드를 만들 수도 있습니다. 이 코드는 iOS 7부터 iOS 13GM까지 테스트되었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 저는 그냥 옵션 버전으로 하겠습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;extension UISearchBar {
    public var textField: UITextField {
        if #available(iOS 13.0, *) {
            return searchTextField
        }

        guard let firstSubview = subviews.first else {
            fatalError(&quot;Could not find text field&quot;)
        }

        for view in firstSubview.subviews {
            if let textView = view as? UITextField {
                return textView
            }
        }

       fatalError(&quot;Could not find text field&quot;)
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거 먹어봐요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;searchBar.searchTextField.textColor = .white
&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;나는 이것을 iOS 11 이후의 앱에서 사용하고 있습니다.&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;[업데이트] 관찰했는데, 앱이 이전 버전에서 충돌합니다(&amp;lt; iOS 13). 하지만 컴파일러는 버전 확인에 대해 불평한 적이 없습니다. 누가 왜 이런 일이 일어났는지 설명해주세요.&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;iOS 13만 처리하려면:&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;mySearchBar.searchTextField.textColor = .red&lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 오래된 iOS도 처리하고 싶다면 다음과 같이 하십시오.&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;UISearchBar&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;SearchBar : UISearchBar, UISearchBarDelegate&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;SearchBar&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;UISearchBarDelegate&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;delegate&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;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;    var textField: UITextField? {
        if #available(iOS 13.0, *) {
            return self.searchTextField
        }
        return subviews.first?.subviews.first(where: { $0 as? UITextField != nil }) as? UITextField
    }
&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&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이제 iOS13을 사용하면&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UITextField&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;UISearchBar.searchTextField&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;UISearchTextField&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;UITextField&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;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;20&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;나의 계급을 알기 때문에, 나는 나의 계급을 압니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;textField&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;nill&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;22&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이전 버전의 경우 오늘 9시부터 13시까지 모든 버전을 쉽게 사용자 지정할 수 있는 텍스트 필드를 받습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;45&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;작동시키는 데 필요한 전체 코드는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;
class SearchBar: UISearchBar, UISearchBarDelegate {

    var textField: UITextField? {
        if #available(iOS 13.0, *) {
            return self.searchTextField
        }
        return subviews.first?.subviews.first(where: { $0 as? UITextField != nil }) as? UITextField
    }


    override func awakeFromNib() {
        super.awakeFromNib()

        delegate = self

        if let textField = textField {
            textField.textColor = .red
            textField.clearButtonMode = .whileEditing
            textField.returnKeyType = .search
        }
    }

}
&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;SearchBar&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;        let searchBar = UISearchBar.appearance(whenContainedInInstancesOf: [SearchBar.self])
        searchBar.backgroundImage = UIImage()
        searchBar.isTranslucent = false
        searchBar.returnKeyType = .search
&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;그런 다음 XIB / Storyboard에 설정하면 단순한 것처럼 처리합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;UISearchBar&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;26&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;(딜러를 잊지 않은 경우!)&lt;/font&gt;&lt;/font&gt;&lt;/font&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;검색 표시줄 안의 UITextField에 액세스하면 배경색, 텍스트색 및 기타 모든 UITextField 속성을 변경할 수 있습니다.&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;textField에 액세스하려면 다음 확장자를 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;extension UISearchBar {
    /// Return text field inside a search bar
    var textField: UITextField? {
        let subViews = subviews.flatMap { $0.subviews }
        guard let textField = (subViews.filter { $0 is UITextField }).first as? UITextField else { return nil
        }
        return textField
    }
}
&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;Swift 5.2 &amp;amp; iOS 13.3.1:-&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;53&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;잘 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]

&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;54&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 이게 통했어요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    if #available(iOS 13.0, *) {
     searchBar.searchTextField.textColor = .white
    }
&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;(이 솔루션은 Xcode 10 및 iOS 12에 대해서만 테스트되었습니다.) 검색 표시줄의 텍스트 필드에 액세스할 수 있도록 확장자를 추가합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;extension UISearchBar {
    var textField: UITextField? {
        return subviews.first?.subviews.compactMap { $0 as? UITextField }.first
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;56&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그런 다음 이 속성을 사용하여 검색 표시줄의 텍스트 필드의 텍스트 색상을 설정합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let searchBar = UISearchBar()
searchBar.textField?.textColor = UIColor.white // or whichever color you want
&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;p papago-id=&quot;58&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위의 코드는 iOS 13에서는 작동하지 않습니다. 이를 처리하는 더 나은 방법은 다음을 사용하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;extension UISearchBar {
    var textField: UITextField? {
        return self.subviews(ofType: UITextField.self).first
    }
}

extension UIView {
    var recursiveSubviews: [UIView] {
        return self.subviews + self.subviews.flatMap { $0.recursiveSubviews }
    }

    func subviews&amp;lt;T: UIView&amp;gt;(ofType: T.Type) -&amp;gt; [T] {
        return self.recursiveSubviews.compactMap { $0 as? T }
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;59&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Swift 5에서는 다음과 같은 작업을 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;yourSearchBar.searchTextField.textColor = .yourColor
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;60&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 Xamarin 입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;UITextField 찾기&quot; 접근법의 iOS C# 버전.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;향후 iOS 보기 계층에서 UITextField가 사라져도 충돌하지 않습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;var tf = searchBar.AllSubViews().FirstOrDefault(v =&amp;gt; v is UITextField);
if (tf != null) 
    (tf as UITextField).TextColor = UIColor.White;

public static IEnumerable&amp;lt;UIView&amp;gt; AllSubViews(this UIView view)
{
    foreach (var v in view.Subviews)
    {
        yield return v;
        foreach (var sv in v.AllSubViews())
        {
            yield return sv;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;61&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;//이 남자를 시도해 보세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;yourSearchbar.searchTextField.textColor = .white
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;62&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;내 상황에서 해결책은&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;id appearance = [UITextField appearanceWhenContainedInInstancesOfClasses:@[UISearchBar.class, BCRSidebarController.class]];
[appearance setTextColor:[UIColor.whiteColor colorWithAlphaComponent:0.56]];
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;63&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Obj-C&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;UITextField *textField = [self.yourSearchbar valueForKey:@&quot;_searchField&quot;];
textField.textColor = [UIColor redColor];
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;64&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스위프트 4.x&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let textField = yourSearchbar.value(forKey: &quot;searchField&quot;) as? UITextField
textField?.textColor = UIColor.red
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;65&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스위프트 5:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;searchBar[keyPath: \.searchTextField].textColor = UIColor(...)&lt;/code&gt;&lt;/p&gt;&lt;p papago-id=&quot;66&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;색상은 본인이 직접 설정할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;searchBar.searchTextField.textColor보기DidLoad가 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;- (void)viewDidLoad {
    [super viewDidLoad];
    self.searchBar.searchTextField.textColor = [UIColor whiteColor];
}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong papago-id=&quot;67&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스위프트 UI, 스위프트 5&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;68&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;인 스위프트&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;UI, 그&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;init(){

   UITextfiled.appearance().textColor = .white
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;69&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;안 돼요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 당신은 그냥 사용할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;.foregroundColor(.white)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;70&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;검색 가능한 ()의 텍스트 색상을 변경하는 수식어입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;71&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;NavigationView{} 내부에서 검색 막대의 tintColor도 변경하려면 다음과 같이 하십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;뷰의 inti() 함수를 시작할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;init(){

   UINavigationBar.appearance().tintColor = .white

}
var body:some View{  
   
    NavigationView{
   
   }
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;72&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 경우에는 네비게이션 바에 UI 검색 컨트롤러의 검색 바가 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;textColor(textColor)는 탐색에 &lt;strong papago-id=&quot;72-1&quot;&gt;검색&lt;/strong&gt; 컨트롤러를 항목으로 추가한 후 호출할 때만 작동합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;previous code...
navigationItem.searchController = searchController
// Only after the assignment it works
searchController.searchBar.searchTextField.textColor = your color
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;73&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;searchTextField.textUIS 검색 표시줄의 색상 속성을 설정하여 텍스트 색상을 변경합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;let searchBar = UISearchBar()
searchBar.searchTextField.textColor = .white
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;74&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 스토리보드의 경우:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;@IBOutlet weak var searchBar: UISearchBar!
searchBar.searchTextField.textColor = .white
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;75&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스위프트 5 X코드 11.4 iOS 13.4&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;    UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).textColor = .white
    UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).font = .systemFont(ofSize: 13)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;76&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/28499701/how-can-i-change-the-uisearchbar-search-text-color&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>swift</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/710</guid>
      <comments>https://starjava.tistory.com/710#entry710comment</comments>
      <pubDate>Thu, 19 Oct 2023 21:48:34 +0900</pubDate>
    </item>
    <item>
      <title>ui 부트스트랩 datepicker footer angularjs 제거방법</title>
      <link>https://starjava.tistory.com/709</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ui 부트스트랩 datepicker footer angularjs 제거방법&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;1-0&quot;&gt;참고 &lt;/strong&gt;: 이 글에서 답을 찾을 수 있습니다: &lt;a href=&quot;http://www.coding-issues.com/2015/10/how-to-remove-angular-ui-bootstrap-date-picker-footer.html&quot; papago-id=&quot;1-2&quot;&gt;각도 ui 부트스트랩 날짜 선택기에서 바닥글 제거&lt;/a&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;아래와 같이 생년월일 필드에 ui-bootstrap data picket을 사용하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;text&quot; data-datepicker-popup=&quot;dd-MMMM-yyyy&quot; data-show-weeks=&quot;false&quot; data-ng-model=&quot;model.dateOfBirth&quot; id=&quot;dateOfbirth&quot; name=&quot;dateOfBirth&quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;잘 작동하고 있습니다. 아래와 같이.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.stack.imgur.com/y9tkp.jpg&quot; alt=&quot;enter image description here&quot;&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 제 질문은 어떻게 하면 날짜 선택기의 바닥글을 숨길 수 있을까요?&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;미리 감사드립니다..&lt;/font&gt;&lt;/p&gt;&lt;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;myApp.config(function (datepickerConfig, datepickerPopupConfig) {
    // datepickerConfig.showWeeks = false;
    // datepickerPopupConfig.toggleWeeksText = null;
    datepickerPopupConfig.showButtonBar = false;
});
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;또는 다음과 같은 특정 날짜 선택 인스턴스에 대해 수행할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;&amp;lt;input type=&quot;text&quot; ng-model=&quot;dt&quot; show-button-bar=&quot;false&quot; /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;같은 걸 찾으면서 다음과 같은 답을 찾았습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://stackoverflow.com/questions/20678009/remove-week-column-and-button-from-angular-ui-bootstrap-datepicker&quot; papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;Angular-ui bootstrap datepicker에서 week column and button 제거&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;angular.module('app', ['ui.bootstrap'])
  .config(function (datepickerConfig) {
      datepickerPopupConfig.showButtonBar = false;
    });
&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;- &quot;ui-bootstrap-tpls-[version]&quot;을 다운로드하면 지시문 템플릿이 JS에 포함됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;min.js&quot; 파일입니다.&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;그러나 기본적으로 @ https://github.com/angular-ui/bootstrap/blob/master/template/datepicker/popup.html 에서 찾을 수 있는 HTML 코드를 찾고 있습니다.&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;JS 파일에서 그 비트를 찾으면 원하는 대로 수정합니다.&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;strong papago-id=&quot;15-1&quot;&gt;나쁜 해결책&lt;/strong&gt;이지만, 나는 &lt;a href=&quot;http://angular-ui.github.io/bootstrap/#/datepicker&quot; rel=&quot;nofollow&quot; papago-id=&quot;15-3&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;code&gt; [ng-controller=&quot;DatepickerDemoCtrl&quot;] &amp;gt; hr ~ button { display:none } &lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;당신이 또한 숨기고 싶을 때.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&amp;lt;hr&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;/p&gt; 
&lt;p&gt;&lt;code&gt; [ng-controller=&quot;DatepickerDemoCtrl&quot;] &amp;gt; hr { display:none } &lt;/code&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;18-1&quot;&gt;DatepickerDemoCtrl&lt;/strong&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;각도 부트스트랩 모듈에서 datepickerPopupWrap 지시문을 수정할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;템플릿 URL 필드를 찾을 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이런 거.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;templateUrl:template/datepicker/popup.html,&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;해당 필드를 템플릿으로 바꾸기만 하면 됩니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;        ^&amp;lt;ul class=\^dropdown-menu\^ ng-style=\^{display: (isOpen &amp;amp;&amp;amp; 'block') || 'none', top: position.top+'px', left: position.left+'px'}\^ class=\^dropdown-menu\^&amp;gt;\n^ +
        ^   &amp;lt;li ng-transclude&amp;gt;&amp;lt;/li&amp;gt;\n^ +
        ^&amp;lt;/ul&amp;gt;^,
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고: ^을 &quot;로 대체합니다. 스택 오버플로는 블록 인용문으로 사용하므로 ^을 사용했습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&gt; 
&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;template 필드는 브라우저에서 출력을 표시하는 방법을 정의합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;자신의 요소를 포함시켜 원하는 대로 수정할 수도 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/19030675/how-to-remove-ui-bootstrap-datepicker-footer-angularjs&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>angularjs</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/709</guid>
      <comments>https://starjava.tistory.com/709#entry709comment</comments>
      <pubDate>Thu, 19 Oct 2023 21:48:22 +0900</pubDate>
    </item>
    <item>
      <title>파이썬에서 대용량 XML 문서를 구문 분석하는 가장 빠른 방법은 무엇입니까?</title>
      <link>https://starjava.tistory.com/708</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파이썬에서 대용량 XML 문서를 구문 분석하는 가장 빠른 방법은 무엇입니까?&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;저는 현재 파이썬 쿡북의 12.5장을 기반으로 다음과 같은 코드를 실행하고 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from xml.parsers import expat

class Element(object):
    def __init__(self, name, attributes):
        self.name = name
        self.attributes = attributes
        self.cdata = ''
        self.children = []
    def addChild(self, element):
        self.children.append(element)
    def getAttribute(self,key):
        return self.attributes.get(key)
    def getData(self):
        return self.cdata
    def getElements(self, name=''):
        if name:
            return [c for c in self.children if c.name == name]
        else:
            return list(self.children)

class Xml2Obj(object):
    def __init__(self):
        self.root = None
        self.nodeStack = []
    def StartElement(self, name, attributes):
        element = Element(name.encode(), attributes)
        if self.nodeStack:
            parent = self.nodeStack[-1]
            parent.addChild(element)
        else:
            self.root = element
        self.nodeStack.append(element)
    def EndElement(self, name):
        self.nodeStack.pop()
    def CharacterData(self,data):
        if data.strip():
            data = data.encode()
            element = self.nodeStack[-1]
            element.cdata += data
    def Parse(self, filename):
        Parser = expat.ParserCreate()
        Parser.StartElementHandler = self.StartElement
        Parser.EndElementHandler = self.EndElement
        Parser.CharacterDataHandler = self.CharacterData
        ParserStatus = Parser.Parse(open(filename).read(),1)
        return self.root
&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;1GB 정도 크기의 XML 문서로 작업하고 있습니다.&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;나는 당신이 당신의 프로그램에서 DOM 기능을 필요로 하지 않는 것처럼 나를 바라봅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;나는 (c)Element의 사용에 찬성합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;트리 라이브러리.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;cElement의 iterparse 함수를 사용하는 경우&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;트리 모듈, xml을 통해 이벤트가 발생할 때 처리할 수 있습니다.&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;참고로, 프레드릭은 cElement를 사용하는 것에 대한 조언을 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;트리이터 &lt;a href=&quot;https://web.archive.org/web/20201111223627/https://effbot.org/zone/element-iterparse.htm&quot; papago-id=&quot;4-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;구문&lt;/a&gt; 분석 &lt;a href=&quot;https://web.archive.org/web/20201111223627/https://effbot.org/zone/element-iterparse.htm&quot; papago-id=&quot;4-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;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;대용량 파일을 구문 분석하려면 요소를 처리하는 즉시 제거할 수 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;for event, elem in iterparse(source):
    if elem.tag == &quot;record&quot;:
        ... process record elements ...
        elem.clear()
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;위 패턴은 루트 요소를 제거하지 못하기 때문에 빈 자식 요소가 많은 단일 요소로 귀결됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일 크기가 큰 것이 아니라 크기가 큰 경우 문제가 될 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제를 해결하려면 뿌리 요소를 손에 넣어야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;가장 쉬운 방법은 시작 이벤트를 활성화하고 변수에 첫 번째 요소에 대한 참조를 저장하는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;pre&gt;&lt;code&gt;# get an iterable
context = iterparse(source, events=(&quot;start&quot;, &quot;end&quot;))

# turn it into an iterator
context = iter(context)

# get the root element
event, root = context.next()

for event, elem in context:
    if event == &quot;end&quot; and elem.tag == &quot;record&quot;:
        ... process record elements ...
        root.clear()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://lxml.de/FAQ.html#why-can-t-i-just-delete-parents-or-clear-the-root-node-in-iterparse&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;7-1&quot;&gt;lxml.iterparse()&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;이전 버전은 파이썬 3.7에서는 작동하지 않으므로 첫 번째 요소를 얻기 위해 다음과 같은 방법을 고려해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import xml.etree.ElementTree as ET

# Get an iterable.
context = ET.iterparse(source, events=(&quot;start&quot;, &quot;end&quot;))
    
for index, (event, elem) in enumerate(context):
    # Get the root element.
    if index == 0:
        root = elem
    if event == &quot;end&quot; and elem.tag == &quot;record&quot;:
        # ... process record elements ...
        root.clear()
&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;cElementTree&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;code&gt;cElementTree&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 xml.etree로 Python 2.5 이상에 포함되어 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;cElementTree.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://effbot.org/zone/celementtree.htm&quot; papago-id=&quot;11-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;벤치마크&lt;/a&gt;를 참조합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;참고로 파이썬 3.3 이후로&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;cElementTree&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;는 기본 구현으로 사용되므로 Python 버전 3.3+에서는 이러한 변경이 필요하지 않습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;em papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;삭제된 ImageShack 링크&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;&lt;p papago-id=&quot;15&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://lxml.de/&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;15-1&quot;&gt;lxml&lt;/a&gt;을 사용하는 것을 추천합니다. libxml2 라이브러리를 위한 파이썬 바인딩으로 정말 빠릅니다.&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;제 경험상 libxml2와 expat은 성능이 매우 비슷합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 저는 libxml2(그리고 python의 경우 lxml)를 더 선호합니다. 왜냐하면 더 활발하게 개발되고 테스트되고 있는 것 같기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;또한 libxml2는 더 많은 기능을 가지고 있습니다.&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;lxml은 대부분 &lt;a href=&quot;https://docs.python.org/3/library/xml.etree.elementtree.html&quot; papago-id=&quot;17-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;xml.etree&lt;/a&gt;와 API 호환이 가능합니다&lt;a href=&quot;https://docs.python.org/3/library/xml.etree.elementtree.html&quot; papago-id=&quot;17-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;.&lt;/a&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;https://docs.python.org/3/library/xml.etree.elementtree.html&quot; papago-id=&quot;17-1&quot; rel=&quot;nofollow noreferrer&quot;&gt;요소&lt;/a&gt; 트리.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 웹사이트에 좋은 자료가 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;콜백을 등록하면 파싱 속도가 엄청나게 느려집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;[편집]&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것은 (빠른) C 코드가 C만큼 빠르지 않은 파이썬 인터프리터를 호출해야 하기 때문입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 C 코드를 사용하여 파일을 읽고(빠름) 파이썬에서 DOM을 구축합니다(느림).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;[/EDIT]&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;xml.etree를 사용해 보십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;요소&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;C에서 100% 구현되며 파이썬 코드에 대한 콜백 없이 XML을 파싱할 수 있는 트리.&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;그래도 너무 느리고 DOM이 필요 없는 경우 파일을 문자열로 읽고 간단한 문자열 작업을 사용하여 처리하는 방법도 있습니다.&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;응용프로그램이 성능에 민감하고 큰 파일(말씀하신 것처럼 1GB 이상)이 발생할 가능성이 있는 경우 &lt;em papago-id=&quot;22-3&quot;&gt;전체 문서를 RAM&lt;/em&gt;에 로드한다는 간단한 이유로 질문에 표시된 코드를 사용하지 말 것을 &lt;strong papago-id=&quot;22-1&quot;&gt;강력히&lt;/strong&gt; 권고합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;전체 문서 트리를 한 번에 RAM에 보유하는 것을 방지하기 위해 가능하다면 설계를 다시 생각해 보는 것이 좋습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;애플리케이션의 요구 사항이 무엇인지 모르기 때문에 &quot;이벤트 기반&quot; 설계를 사용하기 위한 일반적인 조언 외에 구체적인 접근 방법을 제대로 제안할 수 없습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;23&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;23-0&quot;&gt;expat ParseFile&lt;/strong&gt;은 트리 전체를 메모리에 저장할 필요가 없는 경우 잘 작동하며, 이로 인해 대용량 파일의 RAM이 조만간 손상될 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;import xml.parsers.expat
parser = xml.parsers.expat.ParserCreate()
parser.ParseFile(open('path.xml', 'r'))
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;파일을 청크로 읽어 램을 폭발시키지 않고 파서에 공급합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;문서: https://docs.python.org/2/library/pyexpat.html#xml.parsers.expat.xmlparser.ParseFile&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;나는 이것을 시도하는데 꽤 많은 시간을 소비했고 가장 빠르고 가장 적은 메모리 집약적인 접근법은 lxml과 iterparse를 사용하는 것이지만 불필요한 메모리를 확보하는 것입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예제에서 arXiv 덤프 구문 분석:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;from lxml import etree

context = etree.iterparse('path/to/file', events=('end',), tag='Record')

for event, element in context:
    record_id = element.findtext('.//{http://arxiv.org/OAI/arXiv/}id')
    created = element.findtext('.//{http://arxiv.org/OAI/arXiv/}created')

    print(record_id, created)

    # Free memory.
    element.clear()
    while element.getprevious() is not None:
        del element.getparent()[0]
&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;element.clear&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;파이썬3에서는 구문을 변경해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;8&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이것 대신에&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# get the root element
event, root = context.next()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;31&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이를 시도해 보십시오(&lt;a href=&quot;https://stackoverflow.com/questions/28542497/iterparse-object-has-no-attribute-next&quot; papago-id=&quot;31-1&quot;&gt;Iterparse 개체&lt;/a&gt;에서 권장하는 것처럼 &lt;a href=&quot;https://stackoverflow.com/questions/28542497/iterparse-object-has-no-attribute-next&quot; papago-id=&quot;31-1&quot;&gt;다음에는 속성이 없습니다&lt;/a&gt;).&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# get the root element
event, root = next(context)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그리고 이 대사는 불필요합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# turn it into an iterator
context = iter(context)
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;33&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/324214/what-is-the-fastest-way-to-parse-large-xml-docs-in-python&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>xml</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/708</guid>
      <comments>https://starjava.tistory.com/708#entry708comment</comments>
      <pubDate>Thu, 19 Oct 2023 21:48:15 +0900</pubDate>
    </item>
    <item>
      <title>SQL Server에서 날짜 시간 필터링의 성능을 향상시키는 방법은 무엇입니까?</title>
      <link>https://starjava.tistory.com/707</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL Server에서 날짜 시간 필터링의 성능을 향상시키는 방법은 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&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;datetime&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기둥들&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;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;datefield &amp;lt; '2013-03-15 17:17:55.179'
datefield &amp;lt; CAST('2013-03-15 17:17:55.179' AS datetime)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;3,000,000개 이상의 주요 객체가 있는 대규모 데이터베이스를 가지고 있습니다.&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;datetime&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 class=&quot;papago-parent&quot;&gt;UNIX 타임스탬프(모두 변환)에 대해 읽고 있었습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;datetime&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;UNIX 타임스탬프로 이동한 다음 이 UNIX 필드를 기준으로 필터링합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;datetime&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 다른 을 아는 &lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 하지만 다른 방법을 아시는 분이 있다면 감사하겠습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p 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 TOP (100)  ev.Title as Event_name, po.Name as POI_name, 
po.Address, po.City, po.Region, po.Country, po.Latitude, po.Longitude, ev.Start_time, 
(Select ID_Category FROM SubCategory s where ev.ID_SubCategory = s.ID_SubCategory) as ID_Category, 
ev.ID_SubCategory, ev.ID_Event, ev.ID_Channel, IDChanelEvent, 
ev.FavoriteCount, po.gmtOffset, v.IsFavorite, v1.IsFavorite  
FROM Events ev 
JOIN POI po ON ev.ID_POI = po.ID_POI 
JOIN (SELECT et.id_event as joinIdEv FROM EventTagLink et, tags t 
 WHERE t.id_tag = et.id_tag 
 AND ( t.Title = N'music' ) 
 ) as joinEvents 
 ON joinEvents.joinIdEv = ev.ID_Event 
LEFT JOIN Viewed v ON v.ID_Event = ev.ID_Event AND v.ID_User = 1 AND v.IsFavorite = 1 LEFT join Viewed v1 ON v1.ID_Event = ev.ID_Event AND v1.ID_User = 1 AND v1.IsFavorite = 0
WHERE 
--ev.GmtStop_time &amp;gt; '2013-03-15 14:17:55.188' AND 
po.Latitude &amp;gt; 41.31423 AND po.Latitude &amp;lt; 61.60511 
AND  po.Longitude &amp;gt; -6.676602 AND po.Longitude &amp;lt; 17.04498  
AND ev.ID_SubCategory in (3, 12, 21, 4, 30, 13, 22, 6, 14, 40, 23, 7, 32, 15, 41, 8, 50, 33, 16, 42, 25, 9, 34, 17, 35, 18, 44, 27, 36, 19, 45, 28, 37, 46, 29, 38, 47, 39, 48, 49, 10, 1, 11, 2, 20) 
--AND ev.GmtStart_time&amp;lt; '2013-03-15 17:17:55.179'
AND v1.IsFavorite is 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;내가 댓글을 달았을 때까지 필터링할 수 있습니다.&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;전원을 켜면 요청 시간이 25초가 넘습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.dropbox.com/s/xjnu5om2r7yru04/execution_plan.sqlplan&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;날짜 시간 필터링을 포함한 실행 계획&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.dropbox.com/s/0ab15b7nuamlw8s/execution_plan_without_datefilter.sqlplan&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;14&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;날짜 시간 필터가 없는 실행 계획&lt;/font&gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&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;strong papago-id=&quot;15-1&quot;&gt;UNIX 타임스탬프&lt;/strong&gt;는 어떨까요? 이것이 제가 질문을 던진 주된 이유입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;15-3&quot;&gt;필터링 성능을 향상시킬 수 있습니까?&lt;/strong&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;msql의 날짜 시간 인덱스와 관련하여 제안하는 것은 인덱스 풋프린트가 검색 시간에 영향을 미치는 것입니다(예, 이는 명백한 것으로 보입니다...)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;앞으로 읽어주세요).&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;17&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;날짜 시간에 대한 색인을 작성할 때 중요한 사항은 '2015-06-05 22:47:20.102'와 같이 날짜 시간 내의 모든 위치를 색인이 설명해야 합니다.&lt;/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;예 '2015-06-05 22:47:20.102'는 '2015-06-05 22:00:00.000'으로 번역됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 접근 방식을 사용하면 세부 데이터는 그대로 두고, 결과가 얼마나 빨리 반환되는지에 대해 약 10배(최소)의 수익률을 얻을 수 있는 이 새로운 열에서 이 데이터를 표시하거나 검색하여 사용할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 인덱스가 분, 초 및 밀리초 필드를 설명할 필요가 없기 때문입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL Server가 무엇을 하고 있는지 확인하려면 먼저 실행 계획을 살펴보아야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;인덱스만 추가하면 될 것 같습니다.&lt;/font&gt;&lt;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;font class=&quot;papago-parent&quot;&gt;클러스터 인덱스로 지정하면 조회를 수행할 필요가 없지만 100개의 행에 대해서만 조회 속도가 매우 빠릅니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;날짜 시간과 하위 범주를 비클러스터 인덱스에 순서대로 입력합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;주문하는 경우에는 인덱스에 있는지도 확인해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블당 하나의 인덱스만 사용하는 것이 합리적이므로 모든 관련 열이 같은 인덱스, 올바른 순서로 나열되어 있는지 확인해야 합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 먼저 실제 실행 계획을 세우세요!&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;성능을 향상시키려면 다음과 같은 새 인덱스를 만들 것을 권장합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;CREATE INDEX x1 ON LiveCity.dbo.Tags(Title) INCLUDE(ID_Tag)
CREATE INDEX x2 ON LiveCity.dbo.Tags(ID_Event, GmtStart_time, GmtStop_time) 
  INCLUDE(
          FavoriteCount, 
          ID_Channel, 
          ID_POI, 
          ID_SubCategory, 
          IDChanelEvent, 
          Start_time, 
          Title
          )
CREATE INDEX x ON LiveCity.dbo.POI(ID_POI, Latitude, Longitude) 
  INCLUDE(
          Address, 
          City, 
          Country, 
          gmtOffset, 
          Name, 
          Region
          )
&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;이렇게 하면 RID 조회 작업을 방지하고 쿼리의 전반적인 성능을 향상시킬 수 있습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이거 먹어봐요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;;WITH cte AS (
     SELECT IsFavorite, ID_Event  
     FROM Viewed
     WHERE ID_User = 1 
)
SELECT TOP (100)
      Event_name = ev.Title 
    , POI_name = po.Name 
    , po.[address]
    , po.City
    , po.Region
    , po.Country
    , po.Latitude
    , po.Longitude
    , ev.start_time
    , s.ID_Category
    , ev.ID_SubCategory
    , ev.ID_Event
    , ev.ID_Channel
    , IDChanelEvent
    , ev.FavoriteCount
    , po.gmtOffset
    , v.IsFavorite
    , IsFavorite = NULL
FROM [events] ev
JOIN POI po ON ev.ID_POI = po.ID_POI
LEFT JOIN SubCategory s ON ev.ID_SubCategory = s.ID_SubCategory
LEFT JOIN cte v ON v.ID_Event = ev.ID_Event AND v.IsFavorite = 1
WHERE po.Latitude BETWEEN 41.31423 AND 61.60511
     AND po.Longitude BETWEEN -6.676602 AND 17.04498
     AND ev.ID_SubCategory IN (3, 12, 21, 4, 30, 13, 22, 6, 14, 40, 23, 7, 32, 15, 41, 8, 50, 33, 16, 42, 25, 9, 34, 17, 35, 18, 44, 27, 36, 19, 45, 28, 37, 46, 29, 38, 47, 39, 48, 49, 10, 1, 11, 2, 20)
     AND v1.IsFavorite IS NULL
     AND EXISTS(
          SELECT 1 
          FROM EventTagLink et
          WHERE t.Title = 'music'
               AND et.joinIdEv = ev.ID_Event
     )
     AND NOT EXISTS (
          SELECT * 
          FROM cte v1 
          WHERE v1.ID_Event = ev.ID_Event AND v1.IsFavorite = 0
     )
&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;datetime 필드에 클러스터 인덱스를 생성하면 도움이 될 것입니다. 우리는 앞서 같은 문제에 직면했습니다. datetime 열에 인덱스를 생성하여 해결했습니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/17381875/how-to-improve-performance-for-datetime-filtering-in-sql-server&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>sql-server</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/707</guid>
      <comments>https://starjava.tistory.com/707#entry707comment</comments>
      <pubDate>Thu, 19 Oct 2023 21:48:07 +0900</pubDate>
    </item>
    <item>
      <title>PHP에서 MySQL 테이블 구조를 얻으려면 어떻게 해야 합니까?그리고 모든 테이블의 목록?</title>
      <link>https://starjava.tistory.com/706</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;PHP에서 MySQL 테이블 구조를 얻으려면 어떻게 해야 합니까?&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;데이터베이스에서 주어진 표의 구조를 얻으려면 PHP에서 어떤 쿼리를 실행해야 합니까?&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;테이블에 대한 열 목록을 가져오려면 DESCEL SQL 문을 사용합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;구문은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;DESCRIBE TableName
&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;데이터베이스의 테이블 목록을 가져오려면 다음 SQL 문을 사용합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SHOW TABLES
&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;$q = mysql_query('DESCRIBE tablename');
while($row = mysql_fetch_array($q)) {
    echo &quot;{$row['Field']} - {$row['Type']}\n&quot;;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;http://www.electrictoolbox.com/mysql-table-structure-describe/ 에서 발견했습니다.&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;CREATE 구문 사용을 가져오려면 다음과 같이 하십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;SHOW CREATE TABLE table_name;
&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;information_schema 데이터베이스도 살펴봅니다.&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;a href=&quot;https://stackoverflow.com/questions/193780/how-to-find-all-the-tables-in-mysql-with-specific-column-names-in-them&quot; papago-id=&quot;7-1&quot;&gt;MySQL에서 특정 &lt;/a&gt;열&lt;a href=&quot;https://stackoverflow.com/questions/193780/how-to-find-all-the-tables-in-mysql-with-specific-column-names-in-them&quot; papago-id=&quot;7-1&quot;&gt; 이름을 가진&lt;/a&gt; 모든 &lt;a href=&quot;https://stackoverflow.com/questions/193780/how-to-find-all-the-tables-in-mysql-with-specific-column-names-in-them&quot; papago-id=&quot;7-1&quot;&gt;테이블을 찾는 방법&lt;/a&gt;은 무엇입니까&lt;a href=&quot;https://stackoverflow.com/questions/193780/how-to-find-all-the-tables-in-mysql-with-specific-column-names-in-them&quot; papago-id=&quot;7-1&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;/p&gt; 
&lt;pre&gt;&lt;code&gt;SHOW FULL COLUMNS FROM table_name;
&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;알림 키워드 FULL, 이것이 MySQL이 응답에 권한과 주석 정보를 포함하도록 만드는 이유입니다.&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;MYSQLI로 업데이트:&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;function conectadb($banco) 
{
$endereco = &quot;localhost&quot;;
$usuario  = &quot;root&quot;;
$senha    = &quot;&quot;;
try
{
    $con = new mysqli($endereco, $usuario, $senha, $banco);
    $con-&amp;gt;set_charset(&quot;utf8&quot;); // acentuação
    return $con;
}
catch (Exception $e)
{
    echo &quot;&amp;lt;h1&amp;gt;Falha&amp;lt;/h1&amp;gt;&amp;lt;br/&amp;gt;&quot;;
    echo $e-&amp;gt;getMessage();
    die();
}
}
&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;function show_table($tabela)
{
$conexao=conectadb('venda');
$sql = &quot;DESCRIBE $tabela&quot;;
$result = $conexao-&amp;gt;query($sql);
while ($coluna = $result-&amp;gt;fetch_assoc()) 
{
    echo &quot;&amp;lt;p&amp;gt;&quot;.$coluna['Field'].&quot; - &quot;;
    echo $coluna['Type'].&quot;&amp;lt;/p&amp;gt;&quot;;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;}&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;
$result= mysqli_query($conn, &quot;DESCRIBE your_table&quot;);
 while($table = mysqli_fetch_array($result)) 
{ 
  echo($table[0].&quot; &quot;.$table[1].&quot; &quot;. $table[2].&quot; &quot;. $table[3].&quot; &quot;. $table[4]);  
 }
&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/468458/how-do-i-get-the-mysql-table-structure-in-php-plus-a-list-of-all-tables&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MySQL</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/706</guid>
      <comments>https://starjava.tistory.com/706#entry706comment</comments>
      <pubDate>Thu, 19 Oct 2023 21:47:59 +0900</pubDate>
    </item>
    <item>
      <title>C와 C++에서 (...)를 무엇이라고 합니까?</title>
      <link>https://starjava.tistory.com/705</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C와 C++에서 (...)를 무엇이라고 합니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;0&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;의 용도 중 하나.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;...&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;는 C 와 C++ 의 &lt;em papago-id=&quot;2-1&quot;&gt;다양&lt;/em&gt;한 개체를 나타내기 위한 것입니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&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;/li&gt; 
 &lt;li&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;/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&gt;&lt;/font&gt;&lt;code&gt;...&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;3&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;7-0&quot;&gt;편집:&lt;/strong&gt; 목적을 알고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;...&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;5&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. C와 C++가 비슷했으면 하는 이름과 분류를 문의합니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;그것은 &lt;strong papago-id=&quot;9-1&quot;&gt;펑츄에이터&lt;/strong&gt; 중 하나입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;pre class=&quot;lang-text prettyprint-override&quot;&gt;&lt;code&gt;6.4.6  Punctuators
Syntax punctuator:
     one of  [    ]    (    )    {   }    .    -&amp;gt;
             ++   --   &amp;amp;    *    +   -    ~    !
             /    %    &amp;lt;&amp;lt;   &amp;gt;&amp;gt;   &amp;lt;   &amp;gt;    &amp;lt;=   &amp;gt;=    ==   !=   ^   |   &amp;amp;&amp;amp;   ||
             ?    :    ;    ...
             =    *=   /=   %=   +=  -=   &amp;lt;&amp;lt;=  &amp;gt;&amp;gt;=   &amp;amp;=   ^=   |=
             ,    #    ##
             &amp;lt;:   :&amp;gt;   &amp;lt;%   %&amp;gt;   %:   %:%:
&lt;/code&gt;&lt;/pre&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;함수 선언에서는 타원이라고 &lt;em papago-id=&quot;10-1&quot;&gt;&lt;strong papago-id=&quot;10-1-0&quot;&gt;합니다&lt;/strong&gt;&lt;/em&gt;.&lt;/font&gt;&lt;/p&gt; 
&lt;hr&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;C&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;예제 - gcc 스위치/케이스 범위 확장&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;const char *test(unsigned num)
{
    switch(num)
    {
        case 0 ... 9:
            return &quot;the value is in the 0 to 9 range&quot;;
        case 10 ... 99:
            return &quot;the value is in the 10 to 99 range&quot;;
        default:
            return &quot;out of tested range&quot;;
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;a href=&quot;https://godbolt.org/z/YBLma-&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;13&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;https://godbolt.org/z/YBLma-&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&gt;&lt;/font&gt;&lt;code&gt;...&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;영어와 C 표준 모두에서 &lt;em papago-id=&quot;15-1&quot;&gt;타원&lt;/em&gt;이라고 불립니다.&lt;/font&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;...의 용도 중 하나는 C와 C++의 다양한 개체를 나타내는 것입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;10&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예, 평신도의 입장에서는&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;사용 사례의 하나 이상 또는 배수를 나타내는 것으로 간주될 수 있습니다(의사 코드 구두점에서와 같이 여러 개의 점을 사용하여 다른 유형을 닮기도 함). C++에서 변수 변수('변화하는' 인수/모수의 의미에서 다중)를 고려하면 함수 또는 템플릿에 대한 변수 개수를 참조할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p papago-id=&quot;19&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이름이 무엇인가요?&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&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;타원&lt;/font&gt;&lt;/em&gt;&lt;/strong&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;/blockquote&gt; 
&lt;p papago-id=&quot;22&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;아니요, &lt;em papago-id=&quot;22-3&quot;&gt;조작자&lt;/em&gt;가 아니라 어떤 수의 인수를 &lt;em papago-id=&quot;22-1&quot;&gt;전달&lt;/em&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;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;24&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 알기론..&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이는 특별한 명세자입니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;26&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;타원은 항상 인수 목록에서 맨 뒤에 나옵니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;템플릿/함수에 대한 매개 변수 수 제한을 제거하거나 확장을 위해 확장 가능한 매개 변수 수를 사용해야 할 때만 사용됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;(즉, 가변 클래스 템플릿 또는 함수 템플릿에서 매개 변수 팩 확장을 제공합니다.)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;실제로 우리는 대부분 알려진 매개변수의 고정된 집합을 필요로 하기 때문에 대부분의 경우에는 해당되지 않습니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li&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;sizeof&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;/ol&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;30&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;30-0&quot;&gt;편집:&lt;/strong&gt; 목적을 알고 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;...&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C와 C++ 모두 비슷했으면 하는 이름과 분류에 대해 문의드립니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p papago-id=&quot;32&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이름은 동일하지만 C++와 C는 용도가 다를 수 있습니다.&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;em papago-id=&quot;33-1&quot;&gt;Variadics&lt;/em&gt;에서 HackerRank 문제가 발생했던 것을 기억합니다. 그 문제는 유용성을 다루는 것입니다.)&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;세 가 .&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;...&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;17&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C와 C++에서 모두 &lt;strong papago-id=&quot;17-1&quot;&gt;타원&lt;/strong&gt;이라 불립니다.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;hr&gt; In C++, the ellipsis helps initialize and expand different kinds of 
&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;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;18&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;A - &lt;strong papago-id=&quot;18-5&quot;&gt;형식&lt;/strong&gt;과 &lt;strong papago-id=&quot;18-7&quot;&gt;식별자&lt;/strong&gt; 사이에 &lt;em papago-id=&quot;18-3&quot;&gt;타원&lt;/em&gt;이 있을 때&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;code&gt;Type ... identifier&lt;/code&gt;&lt;/p&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;19&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;A - 패턴과 &lt;em papago-id=&quot;19-3&quot;&gt;타원&lt;/em&gt;으로 구성됩니다.&lt;/font&gt;&lt;/font&gt;&lt;br&gt; &lt;code&gt;pattern...&lt;/code&gt;&lt;/p&gt;&lt;/li&gt; 
&lt;/ul&gt;&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/59697071/what-is-the-called-in-c-and-c&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>C</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/705</guid>
      <comments>https://starjava.tistory.com/705#entry705comment</comments>
      <pubDate>Sat, 14 Oct 2023 09:28:15 +0900</pubDate>
    </item>
    <item>
      <title>다른 테이블에 행을 삽입하도록 MySQL 트리거를 프로그래밍하는 방법은 무엇입니까?</title>
      <link>https://starjava.tistory.com/704</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;다른 테이블에 행을 삽입하도록 MySQL 트리거를 프로그래밍하는 방법은 무엇입니까?&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;테이블에 MySQL 트리거를 만들려고 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로, 저는 활동 스트림을 만들고 있고 사용자의 작업을 기록해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자가 코멘트를 작성할 때 해당 테이블의 데이터베이스 트리거를 실행하고 다음을 수행합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막으로 삽입한 행의 ID(댓글 행의 ID)를 가져옵니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;3&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막으로 삽입된 행의 데이터를 사용하여 활동 테이블에 INSERT를 수행합니다.&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&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;ol&gt; 
 &lt;li papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;LAST_INSERT_ID()가 ID를 잡는 가장 좋은 방법입니까?&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;마지막으로 삽입한 주석 행의 데이터를 &quot;활동에 삽입&quot; 문장에 사용할 수 있도록 적절하게 저장하려면 어떻게 해야 합니까?&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;8&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저장 프로시저와 트리거를 함께 사용해야 합니까?&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;9&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;트리거의 기본 구조는 어떻게 됩니까?&lt;/font&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;감사합니다! DB 트리거, 절차 및 기능과 관련하여 손을 댄 것은 몇 년 만입니다.&lt;/font&gt;&lt;/p&gt;&lt;pre&gt;&lt;code&gt;drop table if exists comments;
create table comments
(
comment_id int unsigned not null auto_increment primary key,
user_id int unsigned not null
)
engine=innodb;

drop table if exists activities;
create table activities
(
activity_id int unsigned not null auto_increment primary key,
comment_id int unsigned not null,
user_id int unsigned not null
)
engine=innodb;

delimiter #

create trigger comments_after_ins_trig after insert on comments
for each row
begin
  insert into activities (comment_id, user_id) values (new.comment_id, new.user_id);
end#

delimiter ;

insert into comments (user_id) values (1),(2);

select * from comments;
select * from activities;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong papago-id=&quot;11&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;편집:&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;mysql&amp;gt; \. d:\foo.sql

Database changed
Query OK, 0 rows affected (0.10 sec)

Query OK, 0 rows affected (0.30 sec)

Query OK, 0 rows affected (0.11 sec)

Query OK, 0 rows affected (0.35 sec)

Query OK, 0 rows affected (0.07 sec)

Query OK, 2 rows affected (0.03 sec)
Records: 2  Duplicates: 0  Warnings: 0

+------------+---------+
| comment_id | user_id |
+------------+---------+
|          1 |       1 |
|          2 |       2 |
+------------+---------+
2 rows in set (0.00 sec)

+-------------+------------+---------+
| activity_id | comment_id | user_id |
+-------------+------------+---------+
|           1 |          1 |       1 |
|           2 |          2 |       2 |
+-------------+------------+---------+
2 rows in set (0.00 sec)
&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/4753878/how-to-program-a-mysql-trigger-to-insert-row-into-another-table&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>MySQL</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/704</guid>
      <comments>https://starjava.tistory.com/704#entry704comment</comments>
      <pubDate>Sat, 14 Oct 2023 09:28:08 +0900</pubDate>
    </item>
    <item>
      <title>WordPress의 register_post_status를 통해 새로운 사용자 지정 게시 상태 추가</title>
      <link>https://starjava.tistory.com/703</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;WordPress의 register_post_status를 통해 새로운 사용자 지정 게시 상태 추가&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용자 지정 게시물 상태를 블로그 게시물에 추가하고 싶습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;2&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제 기능에 아래 코드를 추가하였습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;php 파일인데 빠른 편집, 새로운 페이지 게시 및 편집 페이지 게시에서 해당 게시물 상태를 볼 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;조언 좀 해주세요.&lt;/font&gt;&lt;/p&gt; 
&lt;pre class=&quot;lang-php prettyprint-override&quot;&gt;&lt;code&gt;  function my_register_post_status() {
    $my_status_args = array(
        'label' =&amp;gt; __('Activated', 'my'),
        'label_count' =&amp;gt; __('Activated', 'my'),
        'exclude_from_search' =&amp;gt; false,
        'public' =&amp;gt; true,
        'publicly_queryable' =&amp;gt; true,
        'show_in_admin_status_list' =&amp;gt; true,
        'show_in_admin_all_list' =&amp;gt; true,
    );
    register_post_status( 'status', $my_status_args );
}
add_action( 'init', 'my_register_post_status' );
&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;a href=&quot;https://i.stack.imgur.com/WrwMU.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/WrwMU.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://i.stack.imgur.com/5lDOe.png&quot; rel=&quot;nofollow noreferrer&quot;&gt;&lt;img src=&quot;https://i.stack.imgur.com/5lDOe.png&quot; alt=&quot;enter image description here&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p papago-id=&quot;4&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;빠른 편집 및 새로운 페이지 게시 및 편집 후 페이지에서 새로운 사용자 정의 상태를 추가하기 위한 코드입니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;   function my_custom_status_creation(){
        register_post_status( 'approved', array(
            'label'                     =&amp;gt; _x( 'Approved', 'post' ),
            'label_count'               =&amp;gt; _n_noop( 'Approved &amp;lt;span class=&quot;count&quot;&amp;gt;(%s)&amp;lt;/span&amp;gt;', 'Approved &amp;lt;span class=&quot;count&quot;&amp;gt;(%s)&amp;lt;/span&amp;gt;'),
            'public'                    =&amp;gt; true,
            'exclude_from_search'       =&amp;gt; false,
            'show_in_admin_all_list'    =&amp;gt; true,
            'show_in_admin_status_list' =&amp;gt; true
        ));
    }
    add_action( 'init', 'my_custom_status_creation' );

    function my_custom_status_add_in_quick_edit() {
        echo &quot;&amp;lt;script&amp;gt;
        jQuery(document).ready( function() {
            jQuery( 'select[name=\&quot;_status\&quot;]' ).append( '&amp;lt;option value=\&quot;approved\&quot;&amp;gt;Approved&amp;lt;/option&amp;gt;' );      
        }); 
        &amp;lt;/script&amp;gt;&quot;;
    }
    add_action('admin_footer-edit.php','my_custom_status_add_in_quick_edit');
    function my_custom_status_add_in_post_page() {
        echo &quot;&amp;lt;script&amp;gt;
        jQuery(document).ready( function() {        
            jQuery( 'select[name=\&quot;post_status\&quot;]' ).append( '&amp;lt;option value=\&quot;approved\&quot;&amp;gt;Approved&amp;lt;/option&amp;gt;' );
        });
        &amp;lt;/script&amp;gt;&quot;;
    }
    add_action('admin_footer-post.php', 'my_custom_status_add_in_post_page');
    add_action('admin_footer-post-new.php', 'my_custom_status_add_in_post_page');
&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;select에서 status를 옵션으로 사용하려면 javascript를 추가해야 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다음과 같은 방법을 시도해 보십시오.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function append_post_status_list() {
        global $post;
        $label    = &quot; Activate&quot;;
        $complete = &quot;&amp;lt;option value='activated'&amp;gt;$label&amp;lt;/option&amp;gt;&quot;;
        if ( $post-&amp;gt;post_status == 'activated' ) {
            $label    = &quot; Activated&quot;;
            $complete = &quot;&amp;lt;option value='activated' selected='selected'&amp;gt;$label&amp;lt;/option&amp;gt;&quot;;
        }

        ob_start();
        ?&amp;gt;
        &amp;lt;script&amp;gt;
            jQuery(document).ready(function ($) {
                var label = &quot;&amp;lt;?= $label ?&amp;gt;&quot;;
                $(&quot;select#post_status&quot;).append(&quot;&amp;lt;?= $complete ?&amp;gt;&quot;);
                if (' Activated' == label){
                    $(&quot;.misc-pub-section #post-status-display&quot;).html(label);
                }
            });
        &amp;lt;/script&amp;gt;
        &amp;lt;?php
        echo ob_get_clean();
}
add_action( 'admin_footer-post.php', 'append_post_status_list' );
&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/49557810/add-new-custom-post-status-via-register-post-status-in-wordpress&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>WordPress</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/703</guid>
      <comments>https://starjava.tistory.com/703#entry703comment</comments>
      <pubDate>Sat, 14 Oct 2023 09:28:01 +0900</pubDate>
    </item>
    <item>
      <title>DbCommand 및 매개 변수화된 SQL, ORACLE 대 SQL Server</title>
      <link>https://starjava.tistory.com/702</link>
      <description>&lt;h2 papago-id=&quot;0&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;DbCommand 및 매개 변수화된 SQL, ORACLE 대 SQL Server&lt;/font&gt;&lt;/h2&gt;
&lt;p papago-id=&quot;1&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;저에게는 여러 가지 데이터를 데이터베이스에 저장하는 애플리케이션이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;데이터베이스는 ORACLE 또는 SQL Server일 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;SQL은 실행 중에 수집된 구성 및 값을 기반으로 동적으로 생성됩니다.&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;DbProviderFactory를 사용하면 파라미터/바인드 변수를 제외하고는 데이터베이스에 대한 사용자 지정 코드를 작성하지 않고도 ORACLE 또는 SQL Server 중 하나와 함께 작업할 수 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;ORACLE의 경우 사용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;:ParameterName&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;SQL Server의 경우 사용해야 합니다.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;&quot;@ParameterName&quot;&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;. 이 제네릭을 만들 방법은 없습니까?&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;5&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;샘플 코드:&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;public class DbOperations
{
    private DbProviderFactory m_factory;
    private DbConnection m_CN;

    ...

    private void InsertToDb(ValueType[] values, ColumnType[] columns)
    {     
        DbCommand Cmd = m_factory.CreateCommand();
        Cmd.Connection = m_CN;

        StringBuilder sql = new StringBuilder();
        sql.Append(&quot;INSERT INTO &quot;);
        sql.Append(DestinationTable);
        sql.Append(&quot; (&quot;);

        for (int i = 0; i &amp;lt; columns.Length; i++)
        {
            sql.Append(columns[i].ColumnName);
            if (i &amp;lt; columns.Length - 1) 
            sql.Append(&quot;, &quot;);
        }
        sql.Append(&quot;) VALUES (&quot;);

        for (int i = 0; i &amp;lt; values.Length; i++)
        {        
            //sql.Append(String.Format(&quot;:{0}&quot;, columns[i].ColumnName));  //ORACLE
            sql.Append(String.Format(&quot;@{0}&quot;, columns[i].ColumnName)); // SQL Server
        }       

        DbParameter param = m_factory.CreateParameter();
        param.Direction = ParameterDirection.Input;
        param.ParameterName = columns[i].ColumnName;
        param.Value = values[i];
        Cmd.Parameters.Add(param);

        if (i &amp;lt; columns.Length - 1)           
            sql.Append(&quot;, &quot;);
      }
      sql.Append(&quot;)&quot;);
      Cmd.CommandText = sql.ToString();
      Cmd.ExecuteNonQuery();
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;6&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;오래전에 이 질문에 대한 답을 받아들였지만, 어떤 이유에서인지 그 답은 더 이상 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;그래서 저는 제 질문에 답해야 할 것 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;7&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 한 일은 파라빌더 클래스를 만드는 것이었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class ParamBuilder
{
    private DbProviderFactory m_factory;
    private DbCommandBuilder m_builder;
    private string m_parameterMarkerFormat;
    public ParamBuilder(DbProviderFactory factory) : this(factory, null)
    {
    }

    public ParamBuilder(DbProviderFactory factory, DbConnection source)
    {
        m_factory = factory;
        m_builder = m_factory.CreateCommandBuilder();
        if (source != null)
        {
            using (DataTable tbl =
                source.GetSchema(DbMetaDataCollectionNames.DataSourceInformation))
            {
                m_parameterMarkerFormat =  
                    tbl.Rows[0][DbMetaDataColumnNames.ParameterMarkerFormat] as string;
            }
        }
        if (String.IsNullOrEmpty(m_parameterMarkerFormat))
            m_parameterMarkerFormat = &quot;{0}&quot;;
    }

    public DbParameter CreateParameter(string parameterName, 
        out string parameterMarker)
    {
        DbParameter param = m_factory.CreateParameter();
        param.ParameterName =  
            (string)typeof(DbCommandBuilder).InvokeMember(&quot;GetParameterName&quot;,
                System.Reflection.BindingFlags.Instance |
                System.Reflection.BindingFlags.InvokeMethod |
                System.Reflection.BindingFlags.NonPublic, null, m_builder, 
                new object[] { parameterName });

        parameterMarker = 
            String.Format(System.Globalization.CultureInfo.InvariantCulture, 
            m_parameterMarkerFormat, param.ParameterName);

        return param;
    }

}
&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;ParamBuilder 유형의 멤버 변수를 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;private readonly ParamBuilder m_ParamBuilder;
&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;...
string paramMarker;
DbParameter param = m_ParamBuilder.CreateParameter(destination[i].ColumnName, 
    out paramMarker);
sql.Append(paramMarker);

param.Direction = ParameterDirection.Input;
param.Value = source[i];
Cmd.Parameters.Add(param);
...
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;10&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&quot;values&quot; 루프에서 사용되는 형식 문자열을 가져오려면 추상 속성을 만듭니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;class DBOperations
 public abstract string ParameterStringFormat;
 ...
for (int i = 0; i &amp;lt; values.Length; i++)
        {        
            sql.Append(String.Format(ParamterStringFormat, columns[i].ColumnName)); // SQL Server
        }  


class SqlDbOperations : DBOperations
 public override string ParameterStringFormat { get { return &quot;@{0}&quot;; }}


class OracleDBOperations : DBOperations
 public override string ParameterStringFormat { get { return &quot;:{0}&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;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;string sql = select * from foo there foo.id = @id;
if (isOracle) {
 sql = replaceAll(sql,&quot;@&quot;,&quot;:&quot;);
}
&lt;/code&gt;&lt;/pre&gt;&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/5295699/dbcommand-and-parameterized-sql-oracle-vs-sql-server&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>oracle</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/702</guid>
      <comments>https://starjava.tistory.com/702#entry702comment</comments>
      <pubDate>Sat, 14 Oct 2023 09:27:52 +0900</pubDate>
    </item>
    <item>
      <title>이진 파일을 무시하는 PowerShell 검색 스크립트</title>
      <link>https://starjava.tistory.com/701</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&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;grep -iIr&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;1&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;유닉스 셸에 있지만 아직 파워셸과 동등한 것을 얻을 수 없습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;2&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;기본적으로 위 명령은 대상 폴더를 재귀적으로 검색하고 &quot;-I&quot; 옵션 때문에 이진 파일을 무시합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;--binary-files=without-match&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;4&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;em papago-id=&quot;4-1&quot;&gt;&quot;&lt;/em&gt;treat&lt;em papago-id=&quot;4-1&quot;&gt; 이진 파일&lt;/em&gt;이 검색 &lt;em papago-id=&quot;4-1&quot;&gt;문자열과 일치하지 않음&quot;&lt;/em&gt;이라고 표시되는 옵션&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;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;Get-ChildItems -r | Select-String&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;다를 하는 PowerShell grep을 사용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;Where-Object&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;6&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;요 같은 을 다 은 아직&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt; 하지만 전 아직 모든 바이너리 파일을 무시할 방법을 찾지 못했습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;code&gt;grep -I&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;7&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;명령은 합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;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;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;Select-String&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;9&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;텍스트 파일을 검색합니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;12&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;12-0&quot;&gt;편집:&lt;/strong&gt; Google에서 몇 시간 더 작업하자 &lt;a href=&quot;https://stackoverflow.com/questions/277521/how-to-identify-the-file-content-is-in-ascii-or-binary/277534&quot; papago-id=&quot;12-2&quot;&gt;파일의 내용을 식별하는 방법은 ASCII 또는 Binary&lt;/a&gt;입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;질문에는 &quot;ASCII&quot;라고 되어 있지만, 저는 작가가 저처럼 &quot;텍스트 인코딩&quot;을 의미했다고 생각합니다.&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;strong papago-id=&quot;13-0&quot;&gt;편집:&lt;/strong&gt; 그것은 우리가.&lt;/font&gt;&lt;/font&gt;&lt;code&gt;isBinary()&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;11&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 문제를 해결하기 위해서는 작성이 필요합니다.&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;C# 명령줄 유틸리티를 사용하면 더 유용할 수 있습니다.&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;strong papago-id=&quot;15-0&quot;&gt;편집:&lt;/strong&gt; 무슨 일이 있었던 것 같습니까?&lt;/font&gt;&lt;/font&gt;&lt;code&gt;grep&lt;/code&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;16&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;ASCII &lt;em papago-id=&quot;16-1&quot;&gt;NUL Byte&lt;/em&gt; 또는 UTF-8 &lt;em papago-id=&quot;16-3&quot;&gt;Overlong&lt;/em&gt;을 확인하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;만약 존재한다면, 그것은 파일 바이너리를 고려합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;단 한번의 &lt;em papago-id=&quot;16-5&quot;&gt;memchr()&lt;/em&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;Windows(윈도우)에서는 일반적으로 파일 확장명이 충분합니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# all C# and related files (projects, source control metadata, etc)
dir -r -fil *.cs* | ss foo

# exclude the binary types most likely to pollute your development workspace
dir -r -exclude *exe, *dll, *pdb | ss foo

# stick the first three lines in your $profile (refining them over time)
$bins = new-list string
$bins.AddRange( [string[]]@(&quot;exe&quot;, &quot;dll&quot;, &quot;pdb&quot;, &quot;png&quot;, &quot;mdf&quot;, &quot;docx&quot;) )
function IsBin([System.IO.FileInfo]$item) { !$bins.Contains($item.extension.ToLower()) }
dir -r | ? { !IsBin($_) } | ss foo
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;18&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;하지만 물론 파일 확장자가 완벽하지는 않습니다.&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;font class=&quot;papago-parent&quot;&gt;(글쎄요, VMS는 그랬습니다만, 그것이 당신의 grep 습관의 근원이 아닌가 싶습니다.)&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Grep-I의 구현을 살펴보았는데 파일의 첫 번째 청크에 기반한 빠른 n-dirty 휴리스틱에 불과합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;제가 &lt;a href=&quot;http://social.msdn.microsoft.com/Forums/en-US/vssourcecontrol/thread/2bbcfc3b-e085-491a-93bb-f88d31451e28&quot; papago-id=&quot;19-1&quot; rel=&quot;noreferrer&quot;&gt;경험&lt;/a&gt;이 좀 &lt;a href=&quot;http://social.msdn.microsoft.com/Forums/en-US/vssourcecontrol/thread/2bbcfc3b-e085-491a-93bb-f88d31451e28&quot; papago-id=&quot;19-1&quot; rel=&quot;noreferrer&quot;&gt;있는&lt;/a&gt; 전략인 것으로 드러났습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Windows 텍스트 파일에 적합한 휴리스틱 기능을 선택하는 방법에 대한 조언은 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li papago-id=&quot;20&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;1KB 이상의 파일을 검사합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;많은 파일 형식은 텍스트처럼 보이지만 곧 구문 분석기가 실행되는 머리글로 시작합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;현대 하드웨어가 작동하는 방식으로 50바이트를 읽는 것은 4KB를 읽는 것과 거의 같은 I/O 오버헤드를 가집니다.&lt;/font&gt;&lt;/li&gt; 
 &lt;li papago-id=&quot;21&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;스트레이트 ASCII에만 관심이 있는 경우 문자 범위 [31-127 + CR 및 LF]를 벗어나는 것이 보이면 바로 종료합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;일부 영리한 ASCII 아트를 실수로 제외할 수도 있지만, 이러한 경우를 이진 정크에서 분리하는 것은 사소한 일이 아닙니다.&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;유니코드 텍스트를 처리하려면 MS 라이브러리에서 더러운 작업을 처리하도록 합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;생각보다 어렵군요.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Powershell에서 &lt;a href=&quot;http://www.codeproject.com/KB/recipes/DetectEncoding.aspx&quot; rel=&quot;noreferrer&quot; papago-id=&quot;22-1&quot;&gt;IMultiLang2 인터페이스&lt;/a&gt;(COM) 또는 &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/t9a3kf7c.aspx&quot; papago-id=&quot;22-3&quot; rel=&quot;noreferrer&quot;&gt;Encoding&lt;/a&gt;에 쉽게 액세스할 수 있습니다&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/t9a3kf7c.aspx&quot; papago-id=&quot;22-3&quot; rel=&quot;noreferrer&quot;&gt;.&lt;/a&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;정적 메서드(.NET)를 &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/t9a3kf7c.aspx&quot; papago-id=&quot;22-3&quot; rel=&quot;noreferrer&quot;&gt;가져옵니다&lt;/a&gt;.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;물론, 그들은 아직도 추측만 하고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;a href=&quot;http://blogs.msdn.com/oldnewthing/archive/2007/04/17/2158334.aspx&quot; rel=&quot;noreferrer&quot; papago-id=&quot;22-5&quot;&gt;메모장 탐지 알고리즘&lt;/a&gt;(및 Michael Kaplan에 대한 링크)에 대한 Raymond의 의견은 플랫폼이 제공하는 라이브러리를 정확히 어떻게 조합하고 일치시킬지 결정하기 전에 검토할 가치가 있습니다.&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;결과가 중요한 경우(즉, 결함으로 인해 grep 콘솔이 엉망이 되는 것보다 더 나쁜 결과가 발생하는 경우), 정확성을 위해 일부 파일 확장자를 하드 코드화하는 것을 두려워하지 마십시오.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어 *.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;PDF 파일은 이진 형식임에도 불구하고 종종 앞에 몇 KB의 텍스트가 있어서 위에 링크된 악명 높은 버그로 이어집니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;마찬가지로 XML 또는 XML 유사 데이터를 포함할 가능성이 있는 파일 확장자가 있다면 &lt;a href=&quot;http://blogs.msdn.com/mikhailarkhipov/archive/2004/08/07/210769.aspx&quot; rel=&quot;noreferrer&quot; papago-id=&quot;23-1&quot;&gt;Visual Studio의 HTML 편집기&lt;/a&gt;와 유사한 탐지 체계를 시도해 볼 수 있습니다. (SourceSafe 2005는 실제로 일부 경우에 대해 이 알고리즘을 차용합니다.)&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;/li&gt; 
&lt;/ul&gt; 
&lt;p papago-id=&quot;25&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 빠른 ASCII 검출기는 다음과 같습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;function IsAscii([System.IO.FileInfo]$item)
{
    begin 
    { 
        $validList = new-list byte
        $validList.AddRange([byte[]] (10,13) )
        $validList.AddRange([byte[]] (31..127) )
    }

    process
    {
        try 
        {
            $reader = $item.Open([System.IO.FileMode]::Open)
            $bytes = new-object byte[] 1024
            $numRead = $reader.Read($bytes, 0, $bytes.Count)

            for($i=0; $i -lt $numRead; ++$i)
            {
                if (!$validList.Contains($bytes[$i]))
                    { return $false }
            }
            $true
        }
        finally
        {
            if ($reader)
                { $reader.Dispose() }
        }
    }
}
&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;제가 대상으로 하는 사용 패턴은 &quot;dir&quot;와 &quot;ss&quot; 사이의 파이프라인에 삽입된 where-object 절입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;스크립팅 스타일에 따라 다른 방법이 있습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;27&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;제안된 경로 중 하나를 따라 탐지 알고리즘을 개선하는 것은 독자에게 맡깁니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;28&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;edit : 당신의 댓글에 나만의 댓글로 답장을 시작했는데 너무 길어졌어요...&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;위에서, 저는 알려진 좋은 시퀀스를 화이트리스트에 올리는 POV에서 문제를 보았습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;I가 유지한 응용 프로그램에서 이진 파일을 텍스트로 잘못 저장하는 것은 그 반대보다 훨씬 더 나쁜 결과를 초래했습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;사용할 FTP 전송 모드 또는 전자 메일 서버로 전송할 MIME 인코딩의 종류를 선택하는 경우에도 마찬가지입니다.&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;U+0000은 유효한 코드 포인트이지만 실제 텍스트에서는 거의 찾아볼 수 없습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;한편, \00은 구조화된 이진 파일에서 매우 흔하므로(즉, 고정 바이트 길이 필드에 패딩이 필요할 때마다) 훌륭한 간단한 블랙리스트가 됩니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;VSS 6.0은 이 체크만 사용하고 잘 했습니다.&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;별도: *.zip 파일은 \0을 확인하는 것이 더 위험한 경우입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;대부분의 쌍성과 달리 구조화된 &quot;헤더&quot;(footer?) 블록은 시작이 아니라 끝에 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이상적인 엔트로피 압축을 가정할 때, 처음 1KB에서 \0이 없을 확률은 (1-1/256)^1024 또는 약 2%입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;다행히 알고리즘을 변경하거나 다른 특별한 경우를 작성할 필요 없이 4KB 클러스터 NTFS 읽기의 나머지 부분을 스캔하기만 해도 위험이 0.00001%로 낮아집니다.&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;유효하지 않은 UTF-8을 제외하려면 블랙리스트에 \C0-C1 및 \F8-FD 및 \FE-FF(가능한 BOM을 통과한 경우)를 추가합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;시퀀스를 실제로 검증하는 것이 아니라 목적에 맞게 충분히 가깝기 때문에 매우 불완전합니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;이보다 더 멋진 모습을 보여주고 싶다면, IMultiLang2와 같은 플랫폼 라이브러리에 전화해 볼 때입니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;DetectInputCode페이지.&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;왜 \C8(소수점 200)이 그렙의 목록에 있는지 확실하지 않습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;너무 긴 인코딩이 아닙니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;예를 들어, 수열 \C8 \80은 ȁ(U+0200)을 나타냅니다.&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;/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;a href=&quot;https://rads.stackoverflow.com/amzn/click/com/1590599403&quot; rel=&quot;nofollow noreferrer&quot; papago-id=&quot;35-0&quot;&gt;Pro Windows Powershell&lt;/a&gt;도 이와 매우 유사한 예를 가지고 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;저는 제가 이렇게 훌륭한 참고 자료를 가지고 있다는 것을 까맣게 잊고 있었습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;파워쉘에 관심이 있으시면 구매해주시기 바랍니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;Get-Content와 Unicode BOM에 대해 자세히 설명했습니다.&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;a href=&quot;https://stackoverflow.com/questions/277521/how-to-identify-the-file-content-is-in-ascii-or-binary/277568#277568&quot; papago-id=&quot;36-1&quot;&gt;질문&lt;/a&gt;에 대한 답변은 유니코드 식별에도 많은 도움이 되었습니다.&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;37&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;여기 대본이 있습니다.&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;혹시 문제가 있을 수 있는 사항을 알고 계시면 알려주시기 바랍니다.&lt;/font&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code&gt;# The file to be tested
param ($currFile)

# encoding variable
$encoding = &quot;&quot;

# Get the first 1024 bytes from the file
$byteArray = Get-Content -Path $currFile -Encoding Byte -TotalCount 1024

if( (&quot;{0:X}{1:X}{2:X}&quot; -f $byteArray) -eq &quot;EFBBBF&quot; )
{
    # Test for UTF-8 BOM
    $encoding = &quot;UTF-8&quot;
}
elseif( (&quot;{0:X}{1:X}&quot; -f $byteArray) -eq &quot;FFFE&quot; )
{
    # Test for the UTF-16
    $encoding = &quot;UTF-16&quot;
}
elseif( (&quot;{0:X}{1:X}&quot; -f $byteArray) -eq &quot;FEFF&quot; )
{
    # Test for the UTF-16 Big Endian
    $encoding = &quot;UTF-16 BE&quot;
}
elseif( (&quot;{0:X}{1:X}{2:X}{3:X}&quot; -f $byteArray) -eq &quot;FFFE0000&quot; )
{
    # Test for the UTF-32
    $encoding = &quot;UTF-32&quot;
}
elseif( (&quot;{0:X}{1:X}{2:X}{3:X}&quot; -f $byteArray) -eq &quot;0000FEFF&quot; )
{
    # Test for the UTF-32 Big Endian
    $encoding = &quot;UTF-32 BE&quot;
}

if($encoding)
{
    # File is text encoded
    return $false
}

# So now we're done with Text encodings that commonly have '0's
# in their byte steams.  ASCII may have the NUL or '0' code in
# their streams but that's rare apparently.

# Both GNU Grep and Diff use variations of this heuristic

if( $byteArray -contains 0 )
{
    # Test for binary
    return $true
}

# This should be ASCII encoded 
$encoding = &quot;ASCII&quot;

return $false
&lt;/code&gt;&lt;/pre&gt; 
&lt;p papago-id=&quot;38&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 스크립트를 &lt;em papago-id=&quot;38-1&quot;&gt;Binary.ps1&lt;/em&gt; 그대로 저장&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;39&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;이 스크립트는 내가 수정하려고 시도한 모든 텍스트나 이진 파일을 받았습니다.&lt;/font&gt;&lt;/p&gt;&lt;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 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;br&gt;&lt;font papago-translate=&quot;translated&quot; papago-id=&quot;15&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;검색 중인 폴더 내에 이진 파일이 있더라도 검색 실행에 오래 걸리지 않습니다.&lt;/font&gt; &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;쓸&lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;내부의 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;을 찾을 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;은 거의 &lt;font class=&quot;papago-parent&quot;&gt;&lt;/font&gt;).&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;결국에는 패턴과 일치하는 문자열만 신경 쓸 뿐입니다(이진 파일 내부의 패턴과 일치하는 문자열을 찾을 가능성은 거의 없습니다).&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; 
&lt;p papago-id=&quot;42&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;GCI -Recurse -Force -ErrorAction SiliousContinue | 각 개체의 경우 {GC $_ -ErrorAction SiliousContinue | 선택 문자열 -패턴 &quot;패턴&quot; } | 파일 외부 -파일 경로 C:\temp\grep.txt -폭 9999999&lt;/font&gt;&lt;/p&gt;&lt;p papago-id=&quot;43&quot; papago-translate=&quot;translated&quot;&gt;&lt;font class=&quot;papago-parent&quot;&gt;언급&lt;/font&gt;&lt;font class=&quot;papago-parent&quot;&gt;URL : https://stackoverflow.com/questions/1077634/powershell-search-script-that-ignores-binary-files&lt;/font&gt;&lt;/p&gt;</description>
      <category>programing</category>
      <category>Powershell</category>
      <author>starjava</author>
      <guid isPermaLink="true">https://starjava.tistory.com/701</guid>
      <comments>https://starjava.tistory.com/701#entry701comment</comments>
      <pubDate>Sat, 14 Oct 2023 09:27:44 +0900</pubDate>
    </item>
  </channel>
</rss>